{"version":3,"sources":["../src/box2.ts","../src/box3.ts","../src/circle2.ts","../src/color.ts","../src/curve3.ts","../src/vec3.ts","../src/_internal/epsilon.ts","../src/_internal/scalar.ts","../src/easing.ts","../src/euler.ts","../src/quat.ts","../src/f32-to-f16-bytes.ts","../src/frustum.ts","../src/mat3.ts","../src/mat4.ts","../src/noise.ts","../src/ray.ts","../src/ray2.ts","../src/sphere.ts","../src/vec2.ts","../src/vec4.ts"],"names":["center","halfSize","radius","containsPoint","create","fromPoints","intersectsBox","closestPoint","intersectsCircle","merge","distanceSq","scale","distance","value","catmullRom","clone","lerp","min","max","length","x","y","z","fromRotationMatrix","set","dot","lengthSq","normalize","up","equals","identity","invert","multiply","fromQuat","transformVec3","transpose","right","getDirection","getOrigin","rayAabbIntersects","setDirection","setOrigin","expandByPoint","add","copy","negate","smoothDamp","sub"],"mappings":"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,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,CAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAC1F,EAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM,GAAA;AAAA,EAAM,GAAA;AAAA,EAAM,EAAA;AAAA,EAAM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","file":"index.mjs","sourcesContent":["// box2.ts — 2D axis-aligned bounding box namespace (P12 / bounding_2d).\n//\n// Storage layout: Float32Array length 4 [minX, minY, maxX, maxY]. The surface\n// mirrors box3 so an AI can transfer broad-phase code between dimensions without\n// learning a second object model.\n\nimport type { Circle2Like } from './circle2';\nimport type { Vec2, Vec2Like } from './types';\n\n/** 2D AABB storage: [minX, minY, maxX, maxY]. */\nexport type Box2 = Float32Array & { readonly __box2: void };\n\n/** Readable 2D AABB input. */\nexport type Box2Like = ArrayLike<number>;\n\n/** Create a 2D AABB. The default is the inverted-infinity empty box. */\nexport function create(\n  minX = Number.POSITIVE_INFINITY,\n  minY = Number.POSITIVE_INFINITY,\n  maxX = Number.NEGATIVE_INFINITY,\n  maxY = Number.NEGATIVE_INFINITY,\n): Box2 {\n  return Float32Array.of(minX, minY, maxX, maxY) as Box2;\n}\n\n/** Create an AABB from its center and non-negative half-size. */\nexport function fromCenter(out: Box2, center: Vec2Like, halfSize: Vec2Like): Box2 {\n  const cx = center[0] as number;\n  const cy = center[1] as number;\n  const hx = Math.abs(halfSize[0] as number);\n  const hy = Math.abs(halfSize[1] as number);\n  out[0] = cx - hx;\n  out[1] = cy - hy;\n  out[2] = cx + hx;\n  out[3] = cy + hy;\n  return out;\n}\n\n/** Build the tightest AABB containing the given points. */\nexport function fromPoints(out: Box2, points: readonly Vec2Like[]): Box2 {\n  out[0] = Number.POSITIVE_INFINITY;\n  out[1] = Number.POSITIVE_INFINITY;\n  out[2] = Number.NEGATIVE_INFINITY;\n  out[3] = Number.NEGATIVE_INFINITY;\n  for (let i = 0; i < points.length; i++) {\n    const point = points[i] as Vec2Like;\n    const x = point[0] as number;\n    const y = point[1] as number;\n    if (x < (out[0] as number)) out[0] = x;\n    if (y < (out[1] as number)) out[1] = y;\n    if (x > (out[2] as number)) out[2] = x;\n    if (y > (out[3] as number)) out[3] = y;\n  }\n  return out;\n}\n\n/** Write the box center to out. Empty boxes produce non-finite values. */\nexport function center(out: Vec2, box: Box2Like): Vec2 {\n  out[0] = ((box[0] as number) + (box[2] as number)) * 0.5;\n  out[1] = ((box[1] as number) + (box[3] as number)) * 0.5;\n  return out;\n}\n\n/** Write the box half-size to out. */\nexport function halfSize(out: Vec2, box: Box2Like): Vec2 {\n  out[0] = ((box[2] as number) - (box[0] as number)) * 0.5;\n  out[1] = ((box[3] as number) - (box[1] as number)) * 0.5;\n  return out;\n}\n\n/** Write the closest point in the box to point. */\nexport function closestPoint(out: Vec2, box: Box2Like, point: Vec2Like): Vec2 {\n  const x = point[0] as number;\n  const y = point[1] as number;\n  const minX = box[0] as number;\n  const minY = box[1] as number;\n  const maxX = box[2] as number;\n  const maxY = box[3] as number;\n  out[0] = x < minX ? minX : x > maxX ? maxX : x;\n  out[1] = y < minY ? minY : y > maxY ? maxY : y;\n  return out;\n}\n\n/** True when point is inside the box, including its boundary. */\nexport function containsPoint(box: Box2Like, point: Vec2Like): boolean {\n  const x = point[0] as number;\n  const y = point[1] as number;\n  return (\n    x >= (box[0] as number) &&\n    x <= (box[2] as number) &&\n    y >= (box[1] as number) &&\n    y <= (box[3] as number)\n  );\n}\n\n/** True when the box completely contains other, including touching edges. */\nexport function containsBox(box: Box2Like, other: Box2Like): boolean {\n  return (\n    (other[0] as number) >= (box[0] as number) &&\n    (other[1] as number) >= (box[1] as number) &&\n    (other[2] as number) <= (box[2] as number) &&\n    (other[3] as number) <= (box[3] as number)\n  );\n}\n\n/** True when two boxes overlap, including touching edges. */\nexport function intersectsBox(a: Box2Like, b: Box2Like): boolean {\n  return (\n    (a[2] as number) >= (b[0] as number) &&\n    (a[0] as number) <= (b[2] as number) &&\n    (a[3] as number) >= (b[1] as number) &&\n    (a[1] as number) <= (b[3] as number)\n  );\n}\n\n/** True when a box and a circle overlap, including tangent contact. */\nexport function intersectsCircle(box: Box2Like, circle: Circle2Like): boolean {\n  const cx = circle[0] as number;\n  const cy = circle[1] as number;\n  const radius = circle[2] as number;\n  if (radius < 0) return false;\n  const closestX =\n    cx < (box[0] as number)\n      ? (box[0] as number)\n      : cx > (box[2] as number)\n        ? (box[2] as number)\n        : cx;\n  const closestY =\n    cy < (box[1] as number)\n      ? (box[1] as number)\n      : cy > (box[3] as number)\n        ? (box[3] as number)\n        : cy;\n  const dx = cx - closestX;\n  const dy = cy - closestY;\n  return dx * dx + dy * dy <= radius * radius;\n}\n\n/** Return the smallest box containing a and b. */\nexport function merge(out: Box2, a: Box2Like, b: Box2Like): Box2 {\n  out[0] = Math.min(a[0] as number, b[0] as number);\n  out[1] = Math.min(a[1] as number, b[1] as number);\n  out[2] = Math.max(a[2] as number, b[2] as number);\n  out[3] = Math.max(a[3] as number, b[3] as number);\n  return out;\n}\n\n/** Grow the box by a non-negative amount on each side. */\nexport function grow(out: Box2, box: Box2Like, amount: Vec2Like): Box2 {\n  const x = Math.abs(amount[0] as number);\n  const y = Math.abs(amount[1] as number);\n  out[0] = (box[0] as number) - x;\n  out[1] = (box[1] as number) - y;\n  out[2] = (box[2] as number) + x;\n  out[3] = (box[3] as number) + y;\n  return out;\n}\n\n/** Shrink the box by a non-negative amount on each side. */\nexport function shrink(out: Box2, box: Box2Like, amount: Vec2Like): Box2 {\n  const x = Math.abs(amount[0] as number);\n  const y = Math.abs(amount[1] as number);\n  out[0] = (box[0] as number) + x;\n  out[1] = (box[1] as number) + y;\n  out[2] = (box[2] as number) - x;\n  out[3] = (box[3] as number) - y;\n  return out;\n}\n","// box3.ts — axis-aligned bounding box namespace (M3 / w7).\n//\n// 5-function surface (plan-tasks.json w7): create / expandByPoint / containsPoint / intersectsBox / fromPoints.\n//\n// Storage layout: Float32Array length 6 [minX, minY, minZ, maxX, maxY, maxZ].\n// Default state is \"empty box\" using the standard inverted-infinity convention\n// (min = +Infinity, max = -Infinity) so `expandByPoint` on any finite point\n// collapses to a zero-volume box containing exactly that point; this mirrors\n// three.js Box3.makeEmpty + glam/wgpu-matrix conventions (research knowledge-base\n// gl-matrix-overview §degenerate-anchor equivalent for AABB).\n//\n// Design locks:\n//   - branded `Box3` Float32Array local to this module; cast funneled through `create`\n//   - pure-function / out-param style consistent with vec3 / mat4;\n//   - `expandByPoint` / `fromPoints` write to `out` in place and return it (aliasing-safe);\n//   - `containsPoint` / `intersectsBox` are boundary-inclusive (standard AABB semantics).\n//\n// Related: requirements §AC-16 (Box3 / Sphere pure functions);\n//          plan-strategy M3 range + D-P5 procedural geometry (Box3 backs future frustum culling);\n//          plan-tasks.json w7 acceptanceCheck.\n\nimport type { Mat4Like, Vec3Like } from './types';\n\n/**\n * Box3 storage: Float32Array length 6 [minX, minY, minZ, maxX, maxY, maxZ].\n * Local brand (not part of the seven-piece SSOT because bounding volumes are\n * neither linear-algebra primitives nor ECS POD carriers; types.ts SSOT is\n * reserved for vec/mat/quat/color).\n */\nexport type Box3 = Float32Array & { readonly __box3: void };\n\n/**\n * Box3 readable input: ArrayLike<number> of length 6 (ordering identical to Box3).\n */\nexport type Box3Like = ArrayLike<number>;\n\n/**\n * Create a Box3. Defaults to the \"empty\" box (min=+Inf, max=-Inf) so the first\n * `expandByPoint` call collapses to a zero-volume box at the input point.\n */\nexport function create(\n  minX: number = Number.POSITIVE_INFINITY,\n  minY: number = Number.POSITIVE_INFINITY,\n  minZ: number = Number.POSITIVE_INFINITY,\n  maxX: number = Number.NEGATIVE_INFINITY,\n  maxY: number = Number.NEGATIVE_INFINITY,\n  maxZ: number = Number.NEGATIVE_INFINITY,\n): Box3 {\n  return Float32Array.of(minX, minY, minZ, maxX, maxY, maxZ) as Box3;\n}\n\n/**\n * out ∪= point: grow min / max so `point` lies inside (boundary inclusive). Returns out.\n * Works correctly from the default empty box (inverted-infinity) — the first call\n * collapses both min and max to `point`.\n */\nexport function expandByPoint(out: Box3, point: Vec3Like): Box3 {\n  const px = point[0] as number;\n  const py = point[1] as number;\n  const pz = point[2] as number;\n  if (px < (out[0] as number)) out[0] = px;\n  if (py < (out[1] as number)) out[1] = py;\n  if (pz < (out[2] as number)) out[2] = pz;\n  if (px > (out[3] as number)) out[3] = px;\n  if (py > (out[4] as number)) out[4] = py;\n  if (pz > (out[5] as number)) out[5] = pz;\n  return out;\n}\n\n/**\n * True when `point` is inside `box` (boundary inclusive). An empty box\n * (min > max on any axis) contains no points.\n */\nexport function containsPoint(box: Box3Like, point: Vec3Like): boolean {\n  const px = point[0] as number;\n  const py = point[1] as number;\n  const pz = point[2] as number;\n  return (\n    px >= (box[0] as number) &&\n    px <= (box[3] as number) &&\n    py >= (box[1] as number) &&\n    py <= (box[4] as number) &&\n    pz >= (box[2] as number) &&\n    pz <= (box[5] as number)\n  );\n}\n\n/**\n * True when `a` and `b` overlap on every axis (boundary inclusive — touching\n * faces intersect). Two empty boxes do not intersect.\n */\nexport function intersectsBox(a: Box3Like, b: Box3Like): boolean {\n  return (\n    (a[3] as number) >= (b[0] as number) &&\n    (a[0] as number) <= (b[3] as number) &&\n    (a[4] as number) >= (b[1] as number) &&\n    (a[1] as number) <= (b[4] as number) &&\n    (a[5] as number) >= (b[2] as number) &&\n    (a[2] as number) <= (b[5] as number)\n  );\n}\n\n/**\n * Build the tightest AABB enclosing `points`. Writes to `out` in place and\n * returns it. Empty `points` leaves `out` as the inverted-infinity empty box.\n */\nexport function fromPoints(out: Box3, points: readonly Vec3Like[]): Box3 {\n  out[0] = Number.POSITIVE_INFINITY;\n  out[1] = Number.POSITIVE_INFINITY;\n  out[2] = Number.POSITIVE_INFINITY;\n  out[3] = Number.NEGATIVE_INFINITY;\n  out[4] = Number.NEGATIVE_INFINITY;\n  out[5] = Number.NEGATIVE_INFINITY;\n  for (let i = 0; i < points.length; i++) {\n    const p = points[i] as Vec3Like;\n    const px = p[0] as number;\n    const py = p[1] as number;\n    const pz = p[2] as number;\n    if (px < (out[0] as number)) out[0] = px;\n    if (py < (out[1] as number)) out[1] = py;\n    if (pz < (out[2] as number)) out[2] = pz;\n    if (px > (out[3] as number)) out[3] = px;\n    if (py > (out[4] as number)) out[4] = py;\n    if (pz > (out[5] as number)) out[5] = pz;\n  }\n  return out;\n}\n\n/**\n * Build the tightest AABB enclosing flattened xyz `positions` (tight-packed,\n * 3 floats per vertex). Writes to `out` in place and returns it.\n *\n * `positions` must have at least 3 elements to produce a non-empty box.\n * Fewer than 3 elements leaves `out` as the inverted-infinity empty box\n * (identical to `create()` default).\n *\n * Trailing elements beyond the last complete triplet are read verbatim\n * (undefined → NaN), matching the legacy `aabbFromPositions` behaviour\n * this function replaces.\n *\n * Related: `fromPoints` for `Vec3Like[]` input.\n */\nexport function fromPositions(out: Box3, positions: ArrayLike<number>): Box3 {\n  out[0] = Number.POSITIVE_INFINITY;\n  out[1] = Number.POSITIVE_INFINITY;\n  out[2] = Number.POSITIVE_INFINITY;\n  out[3] = Number.NEGATIVE_INFINITY;\n  out[4] = Number.NEGATIVE_INFINITY;\n  out[5] = Number.NEGATIVE_INFINITY;\n  if (positions.length < 3) return out;\n  let minX = positions[0] as number;\n  let minY = positions[1] as number;\n  let minZ = positions[2] as number;\n  let maxX = minX;\n  let maxY = minY;\n  let maxZ = minZ;\n  for (let i = 3; i < positions.length; i += 3) {\n    const x = positions[i] as number;\n    const y = positions[i + 1] as number;\n    const z = positions[i + 2] as number;\n    if (x < minX) minX = x;\n    if (y < minY) minY = y;\n    if (z < minZ) minZ = z;\n    if (x > maxX) maxX = x;\n    if (y > maxY) maxY = y;\n    if (z > maxZ) maxZ = z;\n  }\n  out[0] = minX;\n  out[1] = minY;\n  out[2] = minZ;\n  out[3] = maxX;\n  out[4] = maxY;\n  out[5] = maxZ;\n  return out;\n}\n\n/**\n * Transform an AABB by a 4x4 matrix using the conservative 8-corner method.\n *\n * Each of the 8 corners (all min/max combinations) is transformed by `m` as a\n * homogeneous point (w=1), then a new AABB is computed that tightly encloses\n * all 8 transformed points. This is always conservative — the output AABB is\n * guaranteed to contain the true transformed volume (no false culling).\n *\n * Returns `out`. Aliasing-safe: `box` and `out` may be the same reference.\n *\n * @example\n * ```ts\n * import { box3, mat4 } from '@forgeax/engine-math';\n * const box = box3.create(-1, -1, -1, 1, 1, 1);\n * const xform = mat4.create();\n * mat4.fromTranslation(xform, [5, 0, 0]);\n * box3.transformBox3(box, box, xform);\n * ```\n */\nexport function transformBox3(out: Box3, box: Box3Like, m: Mat4Like): Box3 {\n  const bx = box[0] as number;\n  const by = box[1] as number;\n  const bz = box[2] as number;\n  const bX = box[3] as number;\n  const bY = box[4] as number;\n  const bZ = box[5] as number;\n\n  const m00 = m[0] as number;\n  const m01 = m[1] as number;\n  const m02 = m[2] as number;\n  const m03 = m[3] as number;\n  const m10 = m[4] as number;\n  const m11 = m[5] as number;\n  const m12 = m[6] as number;\n  const m13 = m[7] as number;\n  const m20 = m[8] as number;\n  const m21 = m[9] as number;\n  const m22 = m[10] as number;\n  const m23 = m[11] as number;\n  const m30 = m[12] as number;\n  const m31 = m[13] as number;\n  const m32 = m[14] as number;\n  const m33 = m[15] as number;\n\n  let minX = 0,\n    maxX = 0,\n    minY = 0,\n    maxY = 0,\n    minZ = 0,\n    maxZ = 0;\n  for (let corner = 0; corner < 8; corner++) {\n    const cx = corner & 1 ? bX : bx;\n    const cy = corner & 2 ? bY : by;\n    const cz = corner & 4 ? bZ : bz;\n    let x = m00 * cx + m10 * cy + m20 * cz + m30;\n    let y = m01 * cx + m11 * cy + m21 * cz + m31;\n    let z = m02 * cx + m12 * cy + m22 * cz + m32;\n    const w = m03 * cx + m13 * cy + m23 * cz + m33;\n    if (w !== 0) {\n      const iw = 1 / w;\n      x *= iw;\n      y *= iw;\n      z *= iw;\n    }\n    if (corner === 0) {\n      minX = maxX = x;\n      minY = maxY = y;\n      minZ = maxZ = z;\n    } else {\n      if (x < minX) minX = x;\n      if (x > maxX) maxX = x;\n      if (y < minY) minY = y;\n      if (y > maxY) maxY = y;\n      if (z < minZ) minZ = z;\n      if (z > maxZ) maxZ = z;\n    }\n  }\n\n  out[0] = minX;\n  out[1] = minY;\n  out[2] = minZ;\n  out[3] = maxX;\n  out[4] = maxY;\n  out[5] = maxZ;\n  return out;\n}\n","// circle2.ts — 2D bounding-circle namespace (P12 / bounding_2d).\n\nimport * as box2 from './box2';\nimport type { Vec2, Vec2Like } from './types';\n\n/** 2D bounding circle storage: Float32Array [centerX, centerY, radius]. */\nexport type Circle2 = Float32Array & { readonly __circle2: void };\n\n/** Readable 2D bounding-circle input. */\nexport type Circle2Like = ArrayLike<number>;\n\n/** Create a bounding circle. Negative radius is clamped to zero. */\nexport function create(cx = 0, cy = 0, radius = 0): Circle2 {\n  return Float32Array.of(cx, cy, radius < 0 ? 0 : radius) as Circle2;\n}\n\n/** Build a circle centered at the point-cloud AABB center and enclosing all points. */\nexport function fromPoints(out: Circle2, points: readonly Vec2Like[]): Circle2 {\n  if (points.length === 0) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = -1;\n    return out;\n  }\n  const bounds = box2.create();\n  box2.fromPoints(bounds, points);\n  const cx = ((bounds[0] as number) + (bounds[2] as number)) * 0.5;\n  const cy = ((bounds[1] as number) + (bounds[3] as number)) * 0.5;\n  let radiusSq = 0;\n  for (let i = 0; i < points.length; i++) {\n    const point = points[i] as Vec2Like;\n    const dx = (point[0] as number) - cx;\n    const dy = (point[1] as number) - cy;\n    const distanceSq = dx * dx + dy * dy;\n    if (distanceSq > radiusSq) radiusSq = distanceSq;\n  }\n  out[0] = cx;\n  out[1] = cy;\n  out[2] = Math.sqrt(radiusSq);\n  return out;\n}\n\n/** Build the smallest AABB containing the circle. */\nexport function toBox(out: box2.Box2, circle: Circle2Like): box2.Box2 {\n  const cx = circle[0] as number;\n  const cy = circle[1] as number;\n  const radius = circle[2] as number;\n  out[0] = cx - radius;\n  out[1] = cy - radius;\n  out[2] = cx + radius;\n  out[3] = cy + radius;\n  return out;\n}\n\n/** Write the circle center to out. */\nexport function center(out: Vec2, circle: Circle2Like): Vec2 {\n  out[0] = circle[0] as number;\n  out[1] = circle[1] as number;\n  return out;\n}\n\n/** Return the circle radius. */\nexport function radius(circle: Circle2Like): number {\n  return circle[2] as number;\n}\n\n/** Write the closest point in the circle to point. */\nexport function closestPoint(out: Vec2, circle: Circle2Like, point: Vec2Like): Vec2 {\n  const dx = (point[0] as number) - (circle[0] as number);\n  const dy = (point[1] as number) - (circle[1] as number);\n  const distanceSq = dx * dx + dy * dy;\n  const r = circle[2] as number;\n  if (r < 0) {\n    out[0] = circle[0] as number;\n    out[1] = circle[1] as number;\n    return out;\n  }\n  if (distanceSq <= r * r || distanceSq < 1e-12) {\n    out[0] = point[0] as number;\n    out[1] = point[1] as number;\n    return out;\n  }\n  const scale = r / Math.sqrt(distanceSq);\n  out[0] = (circle[0] as number) + dx * scale;\n  out[1] = (circle[1] as number) + dy * scale;\n  return out;\n}\n\n/** True when point is inside the circle, including its boundary. */\nexport function containsPoint(circle: Circle2Like, point: Vec2Like): boolean {\n  const dx = (point[0] as number) - (circle[0] as number);\n  const dy = (point[1] as number) - (circle[1] as number);\n  const r = circle[2] as number;\n  return r >= 0 && dx * dx + dy * dy <= r * r;\n}\n\n/** True when two circles overlap, including tangent contact. */\nexport function intersectsCircle(a: Circle2Like, b: Circle2Like): boolean {\n  const dx = (a[0] as number) - (b[0] as number);\n  const dy = (a[1] as number) - (b[1] as number);\n  const radius = (a[2] as number) + (b[2] as number);\n  return (a[2] as number) >= 0 && (b[2] as number) >= 0 && dx * dx + dy * dy <= radius * radius;\n}\n\n/** True when the circle overlaps the box, including tangent contact. */\nexport function intersectsBox(circle: Circle2Like, box: box2.Box2Like): boolean {\n  return box2.intersectsCircle(box, circle);\n}\n\n/** Return the smallest circle containing both circles. */\nexport function merge(out: Circle2, a: Circle2Like, b: Circle2Like): Circle2 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const ar = a[2] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const br = b[2] as number;\n  const dx = bx - ax;\n  const dy = by - ay;\n  const distance = Math.sqrt(dx * dx + dy * dy);\n  if (ar >= distance + br) return createInto(out, ax, ay, ar);\n  if (br >= distance + ar) return createInto(out, bx, by, br);\n  if (distance < 1e-12) return createInto(out, ax, ay, Math.max(ar, br));\n  const nextRadius = (distance + ar + br) * 0.5;\n  const shift = (nextRadius - ar) / distance;\n  return createInto(out, ax + dx * shift, ay + dy * shift, nextRadius);\n}\n\nfunction createInto(out: Circle2, cx: number, cy: number, r: number): Circle2 {\n  out[0] = cx;\n  out[1] = cy;\n  out[2] = r;\n  return out;\n}\n","// color.ts — RGBA color namespace (M5 / T-032)\n//\n// Surface: create / clone / srgbToLinear / linearToSrgb / fromHex / fromCss / toHex, plus the\n// primaries-derived RGB gamut SSOT (RGB_PRIMARIES / rgbGamutMatrix / Display-P3 conversions)\n//\n// Design anchors:\n//   - branded Float32Array length 4 [r, g, b, a]; `as Color` casts are funneled inside factories (D-P15)\n//   - sRGB ↔ linear: IEC 61966-2-1 piecewise gamma; RGB channels only, alpha pass-through\n//     - srgbToLinear: cutoff 0.04045 / linear segment v/12.92 / power segment ((v+0.055)/1.055)^2.4\n//     - linearToSrgb: cutoff 0.0031308 / linear segment 12.92*v / power segment 1.055*v^(1/2.4) - 0.055\n//     - negatives / NaN returned verbatim (HDR-friendly + IEEE-754 NaN propagation)\n//   - fromHex (D-P7): only `#RRGGBB` (7 chars) and `#RRGGBBAA` (9 chars); RGB channels are decoded\n//     from sRGB to linear; illegal inputs silently fall\n//     back to (0, 0, 0, 1) without throwing (D-P12 degenerate family / AC-06)\n//     - #RGB / #RGBA short forms are not supported (stricter than bevy_color::Srgba::hex; less ambiguous\n//       in practice; wiki/sources/2026-05-05-bevy-0-19-math-transform-color §Srgba::hex mentions short\n//       forms but D-P7 actively tightens the contract)\n//   - fromCss: deterministic CSS color boundary for full hex plus common rgb()/rgba()/hsl()/hsla()\n//     and named colors; output is linear and illegal inputs use the same black fallback\n//   - toHex: alpha=1 → `#rrggbb`; alpha<1 → `#rrggbbaa`; linear components are encoded to sRGB,\n//     clamped to [0, 1], multiplied by 255 and rounded; output is lowercase\n//\n// Related: requirements §Surface color lower bound 6 + AC-06 silent fall-back (never raises);\n//          plan-strategy D-P7 / D-P12 / §appendix A degenerate registry #14-#16;\n//          wiki/sources/2026-05-05-bevy-0-19-math-transform-color §sRGB piecewise gamma;\n//          wiki/glam-rs-overview §LinearRgba.\n\nimport type { Color, ColorLike } from './types';\n\nexport type { Color, ColorLike };\n\n// === create / copy ===\n\n/** Create a Color (default RGBA = (0, 0, 0, 1) = opaque black). */\nexport function create(r = 0, g = 0, b = 0, a = 1): Color {\n  return Float32Array.of(r, g, b, a) as Color;\n}\n\n/** Allocate a new Color copy. */\nexport function clone(c: ColorLike): Color {\n  return Float32Array.of(c[0] as number, c[1] as number, c[2] as number, c[3] as number) as Color;\n}\n\n// === sRGB ↔ linear (IEC 61966-2-1 piecewise gamma) ===\n\n/**\n * Single-channel sRGB → linear (component-level helper).\n *\n * @degrade NaN input → NaN output (IEEE-754 arithmetic propagation); negatives returned verbatim\n * to preserve HDR / specialized rendering needs (same convention as bevy_color::gamma_function;\n * wiki/sources bevy-0-19-color §gamma_function).\n *\n * @example\n * ```ts\n * srgbChannelToLinear(NaN);  // → NaN (IEEE-754 propagation)\n * srgbChannelToLinear(-0.1); // → -0.1 (HDR / negative kept verbatim)\n * ```\n */\nfunction srgbChannelToLinear(v: number): number {\n  if (Number.isNaN(v)) return Number.NaN;\n  if (v <= 0) return v;\n  if (v <= 0.04045) return v / 12.92;\n  return ((v + 0.055) / 1.055) ** 2.4;\n}\n\n/** Single-channel linear → sRGB (component-level helper). */\nfunction linearChannelToSrgb(v: number): number {\n  if (Number.isNaN(v)) return Number.NaN;\n  if (v <= 0) return v;\n  if (v <= 0.0031308) return v * 12.92;\n  return 1.055 * v ** (1 / 2.4) - 0.055;\n}\n\n/**\n * out = sRGB → linear conversion (RGB channels only; alpha passed through).\n *\n * @degrade NaN propagation / negatives returned verbatim (HDR-friendly); alpha is strictly untouched.\n *\n * @example\n * ```ts\n * color.srgbToLinear(out, color.create(NaN, -0.1, 0.5, 0.8));\n * // → out = (NaN, -0.1, ~0.214, 0.8); alpha 0.8 passed through unchanged.\n * ```\n */\nexport function srgbToLinear(out: Color, c: ColorLike): Color {\n  out[0] = srgbChannelToLinear(c[0] as number);\n  out[1] = srgbChannelToLinear(c[1] as number);\n  out[2] = srgbChannelToLinear(c[2] as number);\n  out[3] = c[3] as number;\n  return out;\n}\n\n/**\n * out = linear → sRGB conversion (RGB channels only; alpha passed through).\n *\n * @degrade NaN propagation / negatives returned verbatim; alpha is strictly untouched.\n *\n * @example\n * ```ts\n * color.linearToSrgb(out, color.create(NaN, -0.05, 0.5, 1));\n * // → out = (NaN, -0.05, ~0.735, 1); alpha is strictly untouched.\n * ```\n */\nexport function linearToSrgb(out: Color, c: ColorLike): Color {\n  out[0] = linearChannelToSrgb(c[0] as number);\n  out[1] = linearChannelToSrgb(c[1] as number);\n  out[2] = linearChannelToSrgb(c[2] as number);\n  out[3] = c[3] as number;\n  return out;\n}\n\n// === RGB gamut (primaries -> 3x3 conversion) ===\n\n/** Closed set of RGB colour spaces the engine converts between. Both share D65 and the sRGB transfer curve. */\nexport type RgbColorSpace = 'srgb' | 'display-p3';\n\n/** CIE 1931 xy chromaticities of one RGB colour space. */\nexport interface RgbPrimaries {\n  readonly red: readonly [number, number];\n  readonly green: readonly [number, number];\n  readonly blue: readonly [number, number];\n  readonly white: readonly [number, number];\n}\n\n/** CIE 1931 xy of the D65 white point (IEC 61966-2-1 / SMPTE EG 432-1). */\nexport const D65_WHITE_XY: readonly [number, number] = Object.freeze([0.3127, 0.329] as const);\n\n/**\n * Primaries SSOT. Rec.709/sRGB per IEC 61966-2-1; Display P3 is DCI-P3\n * primaries with the D65 white point (SMPTE EG 432-1). Every gamut matrix in\n * TS and the generated WGSL block derives from these numbers.\n */\nexport const RGB_PRIMARIES: Readonly<Record<RgbColorSpace, RgbPrimaries>> = Object.freeze({\n  srgb: Object.freeze({\n    red: [0.64, 0.33],\n    green: [0.3, 0.6],\n    blue: [0.15, 0.06],\n    white: D65_WHITE_XY,\n  } as const),\n  'display-p3': Object.freeze({\n    red: [0.68, 0.32],\n    green: [0.265, 0.69],\n    blue: [0.15, 0.06],\n    white: D65_WHITE_XY,\n  } as const),\n});\n\n/** Row-major 3x3 matrix in float64: `out = M * rgb`. */\nexport type RgbMatrix3 = readonly [\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n];\n\nfunction xyToXyz(xy: readonly [number, number]): [number, number, number] {\n  return [xy[0] / xy[1], 1, (1 - xy[0] - xy[1]) / xy[1]];\n}\n\nfunction multiply3(a: RgbMatrix3, b: RgbMatrix3): RgbMatrix3 {\n  const out: number[] = [];\n  for (let row = 0; row < 3; row += 1) {\n    for (let col = 0; col < 3; col += 1) {\n      let sum = 0;\n      for (let k = 0; k < 3; k += 1) sum += (a[row * 3 + k] as number) * (b[k * 3 + col] as number);\n      out.push(sum);\n    }\n  }\n  return out as unknown as RgbMatrix3;\n}\n\nfunction invert3(m: RgbMatrix3): RgbMatrix3 {\n  const [a, b, c, d, e, f, g, h, i] = m;\n  const A = e * i - f * h;\n  const B = -(d * i - f * g);\n  const C = d * h - e * g;\n  const det = a * A + b * B + c * C;\n  return [\n    A / det,\n    -(b * i - c * h) / det,\n    (b * f - c * e) / det,\n    B / det,\n    (a * i - c * g) / det,\n    -(a * f - c * d) / det,\n    C / det,\n    -(a * h - b * g) / det,\n    (a * e - b * d) / det,\n  ];\n}\n\n/**\n * Derive the linear RGB -> CIE XYZ matrix from xy primaries (SMPTE RP 177):\n * columns are the primaries' XYZ scaled so RGB (1, 1, 1) maps to the white\n * point with Y = 1.\n */\nexport function rgbToXyzMatrix(primaries: RgbPrimaries): RgbMatrix3 {\n  const r = xyToXyz(primaries.red);\n  const g = xyToXyz(primaries.green);\n  const b = xyToXyz(primaries.blue);\n  const w = xyToXyz(primaries.white);\n  const inverse = invert3([r[0], g[0], b[0], r[1], g[1], b[1], r[2], g[2], b[2]]);\n  const s = [\n    inverse[0] * w[0] + inverse[1] * w[1] + inverse[2] * w[2],\n    inverse[3] * w[0] + inverse[4] * w[1] + inverse[5] * w[2],\n    inverse[6] * w[0] + inverse[7] * w[1] + inverse[8] * w[2],\n  ] as const;\n  return [\n    r[0] * s[0],\n    g[0] * s[1],\n    b[0] * s[2],\n    r[1] * s[0],\n    g[1] * s[1],\n    b[1] * s[2],\n    r[2] * s[0],\n    g[2] * s[1],\n    b[2] * s[2],\n  ];\n}\n\n/** Linear RGB `from` -> linear RGB `to` (same white point, so no adaptation). */\nexport function rgbGamutMatrix(from: RgbColorSpace, to: RgbColorSpace): RgbMatrix3 {\n  return multiply3(invert3(rgbToXyzMatrix(RGB_PRIMARIES[to])), rgbToXyzMatrix(RGB_PRIMARIES[from]));\n}\n\n/** Linear Rec.709/sRGB -> linear Display P3, derived from {@link RGB_PRIMARIES}. */\nexport const LINEAR_SRGB_TO_LINEAR_DISPLAY_P3: RgbMatrix3 = Object.freeze(\n  rgbGamutMatrix('srgb', 'display-p3'),\n);\n\n/** Linear Display P3 -> linear Rec.709/sRGB; components outside sRGB become negative or > 1. */\nexport const LINEAR_DISPLAY_P3_TO_LINEAR_SRGB: RgbMatrix3 = Object.freeze(\n  rgbGamutMatrix('display-p3', 'srgb'),\n);\n\nfunction applyMatrix(out: Color, m: RgbMatrix3, c: ColorLike): Color {\n  const r = c[0] as number;\n  const g = c[1] as number;\n  const b = c[2] as number;\n  out[0] = m[0] * r + m[1] * g + m[2] * b;\n  out[1] = m[3] * r + m[4] * g + m[5] * b;\n  out[2] = m[6] * r + m[7] * g + m[8] * b;\n  out[3] = c[3] as number;\n  return out;\n}\n\n/** out = linear sRGB -> linear Display P3 (alpha passed through, no clamping). */\nexport function linearSrgbToLinearDisplayP3(out: Color, c: ColorLike): Color {\n  return applyMatrix(out, LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, c);\n}\n\n/** out = linear Display P3 -> linear sRGB (alpha passed through; out-of-sRGB colours keep negatives). */\nexport function linearDisplayP3ToLinearSrgb(out: Color, c: ColorLike): Color {\n  return applyMatrix(out, LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, c);\n}\n\n/**\n * out = CSS `color(display-p3 r g b)` (sRGB transfer curve, P3 primaries) ->\n * linear Rec.709 working colour. Colours outside sRGB keep negative components\n * so a Display-P3 output can reproduce them.\n */\nexport function displayP3ToLinear(out: Color, c: ColorLike): Color {\n  return linearDisplayP3ToLinearSrgb(out, srgbToLinear(out, c));\n}\n\n// === Hex parse / serialize ===\n\nconst HEX_PATTERN = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?$/;\n\n/**\n * Write a Color from a hex string.\n *\n * Only supports the two forms `#RRGGBB` (7 chars) and `#RRGGBBAA` (9 chars) (D-P7);\n * the CSS-style `#RGB` / `#RGBA` short forms are not supported.\n *\n * @degrade Any illegal input (short form / non-hex chars / missing # / wrong length / empty string,\n * etc.) silently falls back to (0, 0, 0, 1); never throws (D-P12 / AC-06).\n *\n * @example\n * ```ts\n * color.fromHex(out, '#ff8000');   // → (1, ~0.216, 0, 1)\n * color.fromHex(out, '#ff800080'); // → (1, ~0.216, 0, 0.502)\n * color.fromHex(out, '#fff');      // → (0, 0, 0, 1) short form unsupported → silent fall-back\n * ```\n */\nexport function fromHex(out: Color, hex: string): Color {\n  const match = typeof hex === 'string' ? HEX_PATTERN.exec(hex) : null;\n  if (match === null) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    return out;\n  }\n  out[0] = srgbChannelToLinear(Number.parseInt(match[1] as string, 16) / 255);\n  out[1] = srgbChannelToLinear(Number.parseInt(match[2] as string, 16) / 255);\n  out[2] = srgbChannelToLinear(Number.parseInt(match[3] as string, 16) / 255);\n  out[3] = match[4] !== undefined ? Number.parseInt(match[4], 16) / 255 : 1;\n  return out;\n}\n\nconst CSS_HEX_PATTERN = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nconst CSS_RGB_PATTERN = /^rgba?\\(([^()]*)\\)$/i;\nconst CSS_HSL_PATTERN = /^hsla?\\(([^()]*)\\)$/i;\nconst CSS_DECIMAL_PATTERN = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)$/;\n\nconst CSS_NAMED_COLORS: Readonly<Record<string, string>> = {\n  black: '#000000',\n  blue: '#0000ff',\n  cyan: '#00ffff',\n  fuchsia: '#ff00ff',\n  gray: '#808080',\n  green: '#008000',\n  grey: '#808080',\n  lime: '#00ff00',\n  magenta: '#ff00ff',\n  maroon: '#800000',\n  navy: '#000080',\n  olive: '#808000',\n  orange: '#ffa500',\n  purple: '#800080',\n  red: '#ff0000',\n  silver: '#c0c0c0',\n  teal: '#008080',\n  transparent: '#00000000',\n  white: '#ffffff',\n  yellow: '#ffff00',\n};\n\nfunction clamp01(v: number): number {\n  return Math.min(1, Math.max(0, v));\n}\n\nfunction parseCssChannel(token: string): number | undefined {\n  const trimmed = token.trim();\n  if (trimmed.endsWith('%')) {\n    const raw = trimmed.slice(0, -1).trim();\n    if (!CSS_DECIMAL_PATTERN.test(raw)) return undefined;\n    const value = Number(raw);\n    return Number.isFinite(value) ? clamp01(value / 100) : undefined;\n  }\n  if (!CSS_DECIMAL_PATTERN.test(trimmed)) return undefined;\n  const value = Number(trimmed);\n  return Number.isFinite(value) ? clamp01(value / 255) : undefined;\n}\n\nfunction parseCssAlpha(token: string): number | undefined {\n  const trimmed = token.trim();\n  if (trimmed.endsWith('%')) {\n    const raw = trimmed.slice(0, -1).trim();\n    if (!CSS_DECIMAL_PATTERN.test(raw)) return undefined;\n    const value = Number(raw);\n    return Number.isFinite(value) ? clamp01(value / 100) : undefined;\n  }\n  if (!CSS_DECIMAL_PATTERN.test(trimmed)) return undefined;\n  const value = Number(trimmed);\n  return Number.isFinite(value) ? clamp01(value) : undefined;\n}\n\nfunction parseCssHue(token: string): number | undefined {\n  const match = /^([+-]?(?:\\d+\\.?\\d*|\\.\\d+))(deg|grad|rad|turn)?$/i.exec(token.trim());\n  if (match === null) return undefined;\n  const raw = Number(match[1] as string);\n  if (!Number.isFinite(raw)) return undefined;\n  const unit = (match[2] ?? 'deg').toLowerCase();\n  const degrees =\n    unit === 'grad'\n      ? raw * 0.9\n      : unit === 'rad'\n        ? (raw * 180) / Math.PI\n        : unit === 'turn'\n          ? raw * 360\n          : raw;\n  return ((degrees % 360) + 360) % 360;\n}\n\nfunction parseCssPercentage(token: string): number | undefined {\n  const trimmed = token.trim();\n  if (!trimmed.endsWith('%')) return undefined;\n  const raw = trimmed.slice(0, -1).trim();\n  if (!CSS_DECIMAL_PATTERN.test(raw)) return undefined;\n  const value = Number(raw);\n  return Number.isFinite(value) ? clamp01(value / 100) : undefined;\n}\n\nfunction splitCssColorArgs(\n  body: string,\n): { channels: [string, string, string]; alpha?: string } | undefined {\n  const source = body.trim();\n  if (source.length === 0) return undefined;\n  if (source.includes(',')) {\n    if (source.includes('/')) return undefined;\n    const parts = source.split(',').map((part) => part.trim());\n    if (parts.length !== 3 && parts.length !== 4) return undefined;\n    if (parts.some((part) => part.length === 0)) return undefined;\n    return {\n      channels: [parts[0] as string, parts[1] as string, parts[2] as string],\n      ...(parts.length === 4 ? { alpha: parts[3] as string } : {}),\n    };\n  }\n  const tokens = source.replaceAll('/', ' / ').split(/\\s+/);\n  const slash = tokens.indexOf('/');\n  if (slash === -1) {\n    if (tokens.length !== 3) return undefined;\n    return { channels: [tokens[0] as string, tokens[1] as string, tokens[2] as string] };\n  }\n  if (slash !== 3 || tokens.length !== 5 || tokens[4] === undefined) return undefined;\n  return {\n    channels: [tokens[0] as string, tokens[1] as string, tokens[2] as string],\n    alpha: tokens[4],\n  };\n}\n\nfunction hslToSrgb(hue: number, saturation: number, lightness: number): [number, number, number] {\n  const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n  const h = hue / 60;\n  const x = chroma * (1 - Math.abs((h % 2) - 1));\n  const [r1, g1, b1] =\n    h < 1\n      ? [chroma, x, 0]\n      : h < 2\n        ? [x, chroma, 0]\n        : h < 3\n          ? [0, chroma, x]\n          : h < 4\n            ? [0, x, chroma]\n            : h < 5\n              ? [x, 0, chroma]\n              : [chroma, 0, x];\n  const m = lightness - chroma / 2;\n  return [r1 + m, g1 + m, b1 + m];\n}\n\nfunction cssFallback(out: Color): Color {\n  out[0] = 0;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 1;\n  return out;\n}\n\n/**\n * Write a Color from a deterministic CSS color string.\n *\n * Supports full and short hex, common named colors, rgb()/rgba() channel\n * numbers or percentages, and hsl()/hsla() with an optional alpha. RGB\n * channels are decoded to linear-sRGB; alpha is passed through unchanged.\n * Unsupported or malformed input silently falls back to opaque black.\n */\nexport function fromCss(out: Color, css: string): Color {\n  if (typeof css !== 'string') return cssFallback(out);\n  const source = css.trim().toLowerCase();\n  const named = CSS_NAMED_COLORS[source];\n  if (named !== undefined) return fromHex(out, named);\n  const fullHex = CSS_HEX_PATTERN.exec(source);\n  if (fullHex !== null) {\n    const digits = fullHex[1] as string;\n    if (digits.length === 3 || digits.length === 4) {\n      const expanded = [...digits].map((channel) => `${channel}${channel}`).join('');\n      return fromHex(out, `#${expanded}`);\n    }\n    return fromHex(out, source);\n  }\n\n  const rgb = CSS_RGB_PATTERN.exec(source);\n  if (rgb !== null) {\n    const args = splitCssColorArgs(rgb[1] as string);\n    if (args === undefined) return cssFallback(out);\n    const r = parseCssChannel(args.channels[0]);\n    const g = parseCssChannel(args.channels[1]);\n    const b = parseCssChannel(args.channels[2]);\n    const alpha = args.alpha === undefined ? 1 : parseCssAlpha(args.alpha);\n    if (r === undefined || g === undefined || b === undefined || alpha === undefined)\n      return cssFallback(out);\n    out[0] = srgbChannelToLinear(r);\n    out[1] = srgbChannelToLinear(g);\n    out[2] = srgbChannelToLinear(b);\n    out[3] = alpha;\n    return out;\n  }\n\n  const hsl = CSS_HSL_PATTERN.exec(source);\n  if (hsl !== null) {\n    const args = splitCssColorArgs(hsl[1] as string);\n    if (args === undefined) return cssFallback(out);\n    const hue = parseCssHue(args.channels[0]);\n    const saturation = parseCssPercentage(args.channels[1]);\n    const lightness = parseCssPercentage(args.channels[2]);\n    const alpha = args.alpha === undefined ? 1 : parseCssAlpha(args.alpha);\n    if (\n      hue === undefined ||\n      saturation === undefined ||\n      lightness === undefined ||\n      alpha === undefined\n    )\n      return cssFallback(out);\n    const [r, g, b] = hslToSrgb(hue, saturation, lightness);\n    out[0] = srgbChannelToLinear(r);\n    out[1] = srgbChannelToLinear(g);\n    out[2] = srgbChannelToLinear(b);\n    out[3] = alpha;\n    return out;\n  }\n  return cssFallback(out);\n}\n\n/** Encode one linear component to sRGB, then clamp + ×255 + round. */\nfunction toHexByte(v: number, encodeLinear = true): string {\n  if (Number.isNaN(v)) return '00';\n  const clamped = Math.max(0, Math.min(1, encodeLinear ? linearChannelToSrgb(v) : v));\n  const byte = Math.round(clamped * 255);\n  return byte.toString(16).padStart(2, '0');\n}\n\n/**\n * Serialize as hex string: alpha=1 → `#rrggbb`; alpha<1 → `#rrggbbaa`.\n *\n * @degrade Out-of-range components (HDR > 1 / negatives) are clamped to [0, 1] then rounded;\n * **truncated** rather than throwing (symmetric with fromHex's silent fall-back). NaN components →\n * literal '00' (same byte as 0.0; prevents the hex-string builder from throwing; alpha=NaN takes the\n * alpha=1 path, emitting the short `#rrggbb` form).\n *\n * @example\n * ```ts\n * color.toHex(color.create(2, -0.1, 0.5, 1));    // → '#ff00bc' (linear HDR/negative clamp)\n * color.toHex(color.create(1, 0, 0, 0.5));        // → '#ff000080'\n * color.toHex(color.create(NaN, 0, 0, NaN));      // → '#000000' (NaN→'00', alpha=NaN takes short form)\n * ```\n */\nexport function toHex(c: ColorLike): string {\n  const r = toHexByte(c[0] as number);\n  const g = toHexByte(c[1] as number);\n  const b = toHexByte(c[2] as number);\n  const aValue = c[3] as number;\n  if (aValue >= 1 || Number.isNaN(aValue)) {\n    return `#${r}${g}${b}`;\n  }\n  const a = toHexByte(aValue, false);\n  return `#${r}${g}${b}${a}`;\n}\n","import type { Vec3, Vec3Like } from './types';\nimport { create, distance } from './vec3';\n\nexport interface CatmullRomOptions {\n  readonly closed?: boolean;\n  readonly parameterization?: 'uniform' | 'centripetal' | 'chordal';\n}\nconst DEFAULT_OPTIONS: CatmullRomOptions = {};\nexport type Curve3Sampler = (out: Vec3, t: number) => Vec3;\n\n/** Whole-path Catmull-Rom, centripetal by default. Open ends extrapolate their\n * neighbours; closed paths wrap without a duplicate control point. No allocation.\n * Empty input writes zero, one point is constant, t is clamped to [0,1].\n */\nexport function catmullRom(\n  out: Vec3,\n  points: readonly Vec3Like[],\n  t: number,\n  options: CatmullRomOptions = DEFAULT_OPTIONS,\n): Vec3 {\n  return evaluate(out, points, t, options, false);\n}\n\n/** Unit direction from the analytic derivative; constant curves write zero. */\nexport function catmullRomTangent(\n  out: Vec3,\n  points: readonly Vec3Like[],\n  t: number,\n  options: CatmullRomOptions = DEFAULT_OPTIONS,\n): Vec3 {\n  evaluate(out, points, t, options, true);\n  const length = Math.hypot(out[0] as number, out[1] as number, out[2] as number);\n  if (length > 0) for (let axis = 0; axis < 3; axis++) out[axis] = (out[axis] as number) / length;\n  return out;\n}\n\nfunction evaluate(\n  out: Vec3,\n  points: readonly Vec3Like[],\n  t: number,\n  options: CatmullRomOptions,\n  derivative: boolean,\n): Vec3 {\n  const n = points.length;\n  if (n < 2) {\n    for (let axis = 0; axis < 3; axis++) out[axis] = derivative ? 0 : (points[0]?.[axis] ?? 0);\n    return out;\n  }\n  const closed = options.closed ?? false;\n  const segments = closed ? n : n - 1;\n  const scaled = Math.min(1, Math.max(0, Number.isFinite(t) ? t : 0)) * segments;\n  const segment = Math.min(segments - 1, Math.floor(scaled));\n  const u = scaled - segment;\n  if (!derivative && (u === 0 || u === 1)) {\n    const endpoint = points[(segment + (u === 1 ? 1 : 0)) % n] as Vec3Like;\n    const x = endpoint[0] as number,\n      y = endpoint[1] as number,\n      z = endpoint[2] as number;\n    out[0] = x;\n    out[1] = y;\n    out[2] = z;\n    return out;\n  }\n  const p1 = points[segment] as Vec3Like,\n    p2 = points[(segment + 1) % n] as Vec3Like;\n  const p0 = closed ? points[(segment + n - 1) % n] : points[segment - 1];\n  const p3 = closed ? points[(segment + 2) % n] : points[segment + 2];\n  const mode = options.parameterization ?? 'centripetal';\n  let dt0 = 1,\n    dt1 = 1,\n    dt2 = 1;\n  if (mode !== 'uniform') {\n    const power = mode === 'centripetal' ? 0.5 : 1;\n    dt1 = distance(p1, p2) ** power;\n    dt0 = p0 ? distance(p0, p1) ** power : dt1;\n    dt2 = p3 ? distance(p2, p3) ** power : dt1;\n    // Coincident neighbours borrow the live segment's knot interval. No\n    // absolute world-unit epsilon: small valid curves remain small curves.\n    if (dt1 === 0) dt1 = 1;\n    if (dt0 === 0) dt0 = dt1;\n    if (dt2 === 0) dt2 = dt1;\n  }\n  // Calculate all axes before writing: out may alias a control point.\n  let x = 0,\n    y = 0,\n    z = 0;\n  for (let axis = 0; axis < 3; axis++) {\n    const b = p1[axis] as number,\n      c = p2[axis] as number;\n    const a = p0 ? (p0[axis] as number) : 2 * b - c;\n    const d = p3 ? (p3[axis] as number) : 2 * c - b;\n    const m1 =\n      mode === 'uniform'\n        ? (c - a) * 0.5\n        : dt1 * ((b - a) / dt0 - (c - a) / (dt0 + dt1) + (c - b) / dt1);\n    const m2 =\n      mode === 'uniform'\n        ? (d - b) * 0.5\n        : dt1 * ((c - b) / dt1 - (d - b) / (dt1 + dt2) + (d - c) / dt2);\n    const c2 = 3 * (c - b) - 2 * m1 - m2,\n      c3 = 2 * (b - c) + m1 + m2;\n    const value = derivative ? m1 + u * (2 * c2 + 3 * u * c3) : b + u * (m1 + u * (c2 + u * c3));\n    if (axis === 0) x = value;\n    else if (axis === 1) y = value;\n    else z = value;\n  }\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  return out;\n}\n\n/** Explicit caller-owned chord-length table for a sampler. out.length-1 is the\n * subdivision count (>=1); rebuild after changing controls. Two Vec3 scratch\n * allocations per build; distance lookup and curve sampling allocate nothing.\n * Approximation, not an analytic arc-length guarantee: increase subdivisions\n * until the application's distance/error budget converges.\n */\nexport function arcLengths(out: Float32Array, sample: Curve3Sampler): Float32Array {\n  if (out.length < 2) {\n    out.fill(0);\n    return out;\n  }\n  let previous = create(),\n    current = create(),\n    sum = 0;\n  sample(previous, 0);\n  out[0] = 0;\n  for (let i = 1; i < out.length; i++) {\n    sample(current, i / (out.length - 1));\n    sum += distance(previous, current);\n    out[i] = sum;\n    const swap = previous;\n    previous = current;\n    current = swap;\n  }\n  return out;\n}\n\n/** Clamp a distance to a valid cumulative table and invert by binary search.\n * Zero-length paths and nonfinite distance return 0; repeated lengths are safe.\n * Table comes from arcLengths; lookups are O(log subdivisions).\n */\nexport function parameterAtDistance(lengths: Float32Array, distance: number): number {\n  const last = lengths.length - 1,\n    total = lengths[last] ?? 0;\n  if (last < 1 || !(total > 0) || !Number.isFinite(distance)) return 0;\n  if (distance <= 0) return 0;\n  if (distance >= total) return 1;\n  let low = 0,\n    high = last;\n  while (low + 1 < high) {\n    const mid = (low + high) >>> 1;\n    if ((lengths[mid] as number) <= distance) low = mid;\n    else high = mid;\n  }\n  const start = lengths[low] as number,\n    end = lengths[high] as number;\n  return (low + (end > start ? (distance - start) / (end - start) : 0)) / last;\n}\n","// vec3.ts — 3D vector namespace (M2 / T-014, rewritten from the M1 baseline of 8 functions)\n//\n// 21-function surface (≥ 18 lower bound): vec2 base (without perp) + cross + distanceSq.\n//   create / clone / copy / set / equals / add / sub / scale / negate /\n//   dot / cross / lengthSq / length / distance / distanceSq /\n//   normalize / lerp / smoothDamp / catmullRom / min / max\n//\n// Cross-type transforms are provided via the reverse surfaces of mat4 / quat (K-1/K-2 tore down\n// the Three.js-style promise; see plan-decisions §D-12): the three mat4 ns transform* functions\n// + quat.transformVec3 supersede the historical promise to \"hang cross-type methods on vec3 instances\".\n//\n// Design locks:\n//   - branded Float32Array (types.ts SSOT); factory `as Vec3` casts are funneled.\n//   - The legacy local Vec3 / Vec3Like type aliases are removed; mat4 / quat now `import './types'` Vec3Like.\n//   - Out-param first + aliasing-safe (gl-matrix four ironclad rules, wiki/gl-matrix-overview).\n//   - normalize(0-vec) → 0-vec silent fall-back (D-P12 / AC-06).\n//   - mandatory `export function` (D-P10).\n//\n// Related: requirements §Surface vec3 lower bound 18 + AC-19 legacy 8-function removal (vec3 portion);\n//          plan-strategy §6 M2 + §1.1 vec3.ts;\n//          wiki/typescript-branded-types §7.2 factory template;\n//          wiki/gl-matrix-overview Out-param four ironclad rules + degenerate anchor.\n//\n// Compatibility: this file still re-exports `Vec3Like` from ./types so mat4 / quat's existing imports\n// keep working (M2 does not force-update mat4 / quat import paths; that lands in M3).\n\nimport { EPS_NORMALIZE } from './_internal/epsilon';\nimport { catmullRomScalar, lerp as scalarLerp, smoothDecayFactor } from './_internal/scalar';\nimport type { Vec3, Vec3Like } from './types';\n\nexport type { Vec3, Vec3Like };\n\n/** Create a Vec3 (zero vector by default). */\nexport function create(x = 0, y = 0, z = 0): Vec3 {\n  return Float32Array.of(x, y, z) as Vec3;\n}\n\n/** Allocate a new Vec3 copy. */\nexport function clone(a: Vec3Like): Vec3 {\n  return Float32Array.of(a[0] as number, a[1] as number, a[2] as number) as Vec3;\n}\n\n/** out = a. aliasing-safe (copy(v, v) is a no-op). */\nexport function copy(out: Vec3, a: Vec3Like): Vec3 {\n  out[0] = a[0] as number;\n  out[1] = a[1] as number;\n  out[2] = a[2] as number;\n  return out;\n}\n\n/** Write the components and return out. */\nexport function set(out: Vec3, x: number, y: number, z: number): Vec3 {\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  return out;\n}\n\n/**\n * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (IEEE 754).\n */\nexport function equals(a: Vec3Like, b: Vec3Like, epsilon = 1e-6): boolean {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  if (\n    Number.isNaN(ax) ||\n    Number.isNaN(ay) ||\n    Number.isNaN(az) ||\n    Number.isNaN(bx) ||\n    Number.isNaN(by) ||\n    Number.isNaN(bz)\n  ) {\n    return false;\n  }\n  return (\n    Math.abs(ax - bx) <= epsilon && Math.abs(ay - by) <= epsilon && Math.abs(az - bz) <= epsilon\n  );\n}\n\n/** out = a + b. aliasing-safe. */\nexport function add(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  out[0] = ax + bx;\n  out[1] = ay + by;\n  out[2] = az + bz;\n  return out;\n}\n\n/** out = a - b. aliasing-safe. */\nexport function sub(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  out[0] = ax - bx;\n  out[1] = ay - by;\n  out[2] = az - bz;\n  return out;\n}\n\n/** out = a * s. */\nexport function scale(out: Vec3, a: Vec3Like, s: number): Vec3 {\n  out[0] = (a[0] as number) * s;\n  out[1] = (a[1] as number) * s;\n  out[2] = (a[2] as number) * s;\n  return out;\n}\n\n/** out = -a. */\nexport function negate(out: Vec3, a: Vec3Like): Vec3 {\n  out[0] = 0 - (a[0] as number);\n  out[1] = 0 - (a[1] as number);\n  out[2] = 0 - (a[2] as number);\n  return out;\n}\n\n/** Dot product a · b. */\nexport function dot(a: Vec3Like, b: Vec3Like): number {\n  return (\n    (a[0] as number) * (b[0] as number) +\n    (a[1] as number) * (b[1] as number) +\n    (a[2] as number) * (b[2] as number)\n  );\n}\n\n/** out = a × b (cross product). aliasing-safe (reads all 6 components into locals first). */\nexport function cross(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  out[0] = ay * bz - az * by;\n  out[1] = az * bx - ax * bz;\n  out[2] = ax * by - ay * bx;\n  return out;\n}\n\n/** Squared length |a|² (avoids sqrt overhead). */\nexport function lengthSq(a: Vec3Like): number {\n  const x = a[0] as number;\n  const y = a[1] as number;\n  const z = a[2] as number;\n  return x * x + y * y + z * z;\n}\n\n/** Euclidean length |a|. */\nexport function length(a: Vec3Like): number {\n  const x = a[0] as number;\n  const y = a[1] as number;\n  const z = a[2] as number;\n  return Math.sqrt(x * x + y * y + z * z);\n}\n\n/** Distance between two points |a - b|. */\nexport function distance(a: Vec3Like, b: Vec3Like): number {\n  const dx = (a[0] as number) - (b[0] as number);\n  const dy = (a[1] as number) - (b[1] as number);\n  const dz = (a[2] as number) - (b[2] as number);\n  return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\n\n/** Squared distance between two points |a - b|² (avoids sqrt overhead). */\nexport function distanceSq(a: Vec3Like, b: Vec3Like): number {\n  const dx = (a[0] as number) - (b[0] as number);\n  const dy = (a[1] as number) - (b[1] as number);\n  const dz = (a[2] as number) - (b[2] as number);\n  return dx * dx + dy * dy + dz * dz;\n}\n\n/**\n * out = a / |a| (unit-length).\n *\n * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector;\n * no NaN, no throw (gl-matrix style, AC-06 / D-P12).\n * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS`\n * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation;\n * still does not throw).\n *\n * @example\n * ```ts\n * vec3.normalize(out, [3, 0, 4]);     // → (0.6, 0, 0.8)\n * vec3.normalize(out, [0, 0, 0]);     // → (0, 0, 0) zero vector falls back (AC-06 no throw)\n * vec3.normalize(out, [NaN, 1, 0]);   // → (NaN, NaN, NaN) IEEE-754 propagation\n * ```\n */\nexport function normalize(out: Vec3, a: Vec3Like): Vec3 {\n  const x = a[0] as number;\n  const y = a[1] as number;\n  const z = a[2] as number;\n  const lenSq = x * x + y * y + z * z;\n  if (lenSq < EPS_NORMALIZE) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    return out;\n  }\n  const inv = 1 / Math.sqrt(lenSq);\n  out[0] = x * inv;\n  out[1] = y * inv;\n  out[2] = z * inv;\n  return out;\n}\n\n/** out = lerp(a, b, t). t is not clamped (extrapolation semantics). aliasing-safe. */\nexport function lerp(out: Vec3, a: Vec3Like, b: Vec3Like, t: number): Vec3 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  out[0] = scalarLerp(ax, bx, t);\n  out[1] = scalarLerp(ay, by, t);\n  out[2] = scalarLerp(az, bz, t);\n  return out;\n}\n\n/**\n * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`:\n * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy\n * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` — NOT Unity `Vector3.SmoothDamp`\n * (which is a 2nd-order critically-damped spring needing a velocity ref; this is 1st-order decay).\n *\n * `decayRate` is the exponential decay constant (1/s), meant to stay fixed while `dt` is per-frame;\n * a good anchor is `decayRate = ln(2)/halfLife`. `dt=0` → out=current (no move); large `decayRate·dt`\n * → out≈target; `decayRate=0` → out=current. Frame-rate independent by construction: one step of `dt`\n * equals two composed steps of `dt/2` — unlike the naive `lerp(current, target, rate·dt)`, which\n * behaves differently per frame rate and overshoots when `rate·dt > 1`. aliasing-safe.\n */\nexport function smoothDamp(\n  out: Vec3,\n  current: Vec3Like,\n  target: Vec3Like,\n  decayRate: number,\n  dt: number,\n): Vec3 {\n  return lerp(out, current, target, smoothDecayFactor(decayRate, dt));\n}\n\n/**\n * out = Catmull-Rom spline point on the segment between `p1` and `p2`, with `p0` / `p3` the\n * neighbor control points setting the endpoint tangents (tension 0.5 — the Bevy\n * `CubicCardinalSpline::new_catmull_rom` / Three.js explicit `catmullrom` mode).\n * This is uniform; Three.js defaults to centripetal. Interpolates\n * the control points: `t=0` → `p1`, `t=1` → `p2`. Unlike `lerp` (a straight segment), this is\n * the smooth cubic through the points — use it for camera paths, animation ease paths, or\n * procedural curve geometry. To sample a whole polyline, loop the segments with a sliding\n * 4-point window `[pts[i-1], pts[i], pts[i+1], pts[i+2]]` (clamp/duplicate ends). `t` is not\n * clamped (extrapolation follows the same cubic). aliasing-safe.\n */\nexport function catmullRom(\n  out: Vec3,\n  p0: Vec3Like,\n  p1: Vec3Like,\n  p2: Vec3Like,\n  p3: Vec3Like,\n  t: number,\n): Vec3 {\n  const x = catmullRomScalar(p0[0] as number, p1[0] as number, p2[0] as number, p3[0] as number, t);\n  const y = catmullRomScalar(p0[1] as number, p1[1] as number, p2[1] as number, p3[1] as number, t);\n  const z = catmullRomScalar(p0[2] as number, p1[2] as number, p2[2] as number, p3[2] as number, t);\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  return out;\n}\n\n/** Component-wise min. */\nexport function min(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n  out[0] = Math.min(a[0] as number, b[0] as number);\n  out[1] = Math.min(a[1] as number, b[1] as number);\n  out[2] = Math.min(a[2] as number, b[2] as number);\n  return out;\n}\n\n/** Component-wise max. */\nexport function max(out: Vec3, a: Vec3Like, b: Vec3Like): Vec3 {\n  out[0] = Math.max(a[0] as number, b[0] as number);\n  out[1] = Math.max(a[1] as number, b[1] as number);\n  out[2] = Math.max(a[2] as number, b[2] as number);\n  return out;\n}\n","// _internal/epsilon.ts — EPS constant family SSOT (D-P14)\n//\n// Centralizes all numeric tolerances; prevents scattered hard-coded constants.\n// Not exported through src/index.ts (D-P13 _internal does not leave the package);\n// indirectly covered by the vec/mat/quat tests that consume it.\n//\n// Rationale:\n//   - EPS_NORMALIZE: lengths below this are treated as zero vectors; normalize falls back to a zero\n//     vector. 1e-12 follows the consensus of glam-rs and wgpu-matrix, avoiding single-precision\n//     Float32 noise misjudgments.\n//   - EPS_DET: threshold for declaring a determinant singular. 1e-8 leaves safe headroom over the\n//     single-precision ULP near 1.0 (~1.19e-7) (research §Finding 4.2 ε-tolerance table).\n//   - EPS_QUAT_PARALLEL: near-collinear input check for fromUnitVectors / slerp (D-P18).\n//   - EPS_SLERP_DOT_LIMIT: slerp falls back to nlerp when |dot| ≥ 1-EPS, avoiding acos blowup (D-P6).\n//\n// Related: plan-strategy D-P14 EPS constants centralized; research §Finding 3 glam epsilon choice +\n//          §Finding 4.2 ε-tolerance table.\n\n/** Vector lengths below this value are treated as zero (normalize fall-back). */\nexport const EPS_NORMALIZE = 1e-12;\n\n/** Matrix determinants below this value are treated as singular (invert falls back to identity, D-P1). */\nexport const EPS_DET = 1e-8;\n\n/** Threshold for treating two unit vectors as nearly collinear / opposite (fromUnitVectors / slerp inputs). */\nexport const EPS_QUAT_PARALLEL = 1e-6;\n\n/** In quat.slerp, |dot| above this value is treated as endpoint coincidence; falls back to nlerp (D-P6). */\nexport const EPS_SLERP_DOT_LIMIT = 1e-6;\n","// _internal/scalar.ts — scalar helper SSOT (D-P13 not exported from package)\n//\n// Provides the scalar-layer building blocks reused across the vec/mat/quat namespaces;\n// avoids duplicate implementations.\n// Not exported through src/index.ts; indirectly covered by the public API tests of the dim files\n// (plan-strategy §4.1 exemption).\n//\n// Related: plan-strategy §1.1 file layering (_internal/scalar.ts) + D-P13 _internal not exported;\n//          requirements §duplicate-code elimination strategy D mixed.\n\n/**\n * Scalar linear interpolation. t is not clamped (extrapolation semantics preserved,\n * matches glam Vec3.lerp / wgpu-matrix).\n */\nexport function lerp(a: number, b: number, t: number): number {\n  return a + (b - a) * t;\n}\n\n/** Squared length of a four-component numeric value. */\nexport function lengthSq4(a: ArrayLike<number>): number {\n  const x = a[0] as number;\n  const y = a[1] as number;\n  const z = a[2] as number;\n  const w = a[3] as number;\n  return x * x + y * y + z * z + w * w;\n}\n\n/** Normalize a four-component numeric value into a typed-array output. */\nexport function normalize4(out: Float32Array, a: ArrayLike<number>, epsilon: number): void {\n  const lenSq = lengthSq4(a);\n  if (lenSq < epsilon) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    return;\n  }\n  const inv = 1 / Math.sqrt(lenSq);\n  out[0] = (a[0] as number) * inv;\n  out[1] = (a[1] as number) * inv;\n  out[2] = (a[2] as number) * inv;\n  out[3] = (a[3] as number) * inv;\n}\n\n/**\n * Exponential-decay smoothing factor for frame-rate-INDEPENDENT damping:\n * `1 − exp(−decayRate · dt)`. The single value the vec `smoothDamp` helpers interpolate by.\n *\n * SSOT for the smooth-nudge semantics (Bevy `StableInterpolate::smooth_nudge`,\n * three.js `MathUtils.damp`): the returned factor composes multiplicatively over dt —\n * `exp(−k·(a+b)) = exp(−k·a)·exp(−k·b)` — so one step of dt equals two steps of dt/2, the\n * property a naive `rate·dt` factor violates. `dt=0` → 0 (no move); `decayRate·dt → ∞` → 1\n * (snap to target); `decayRate=0` → 0 (no effect). NaN propagates via Math.exp.\n */\nexport function smoothDecayFactor(decayRate: number, dt: number): number {\n  return 1 - Math.exp(-decayRate * dt);\n}\n\n/**\n * Scalar Catmull-Rom spline value on the segment between `b` and `c`, with `a` / `d` the\n * neighbor control points that set the endpoint tangents. Tension 0.5 (the Catmull-Rom\n * special case of a Cardinal spline, and the Bevy default). SSOT for the vec `catmullRom`\n * helpers — the coefficient matrix lives here once (Bevy `CubicCardinalSpline::char_matrix`\n * with s=0.5):\n *   c0 = b\n *   c1 = 0.5 (c − a)\n *   c2 = a − 2.5 b + 2 c − 0.5 d\n *   c3 = −0.5 a + 1.5 b − 1.5 c + 0.5 d\n *   value = c0 + c1 t + c2 t² + c3 t³\n * Interpolates the control points: t=0 → b, t=1 → c. `t` is not clamped (extrapolation\n * beyond the segment follows the same cubic, matching `lerp`'s unclamped semantics).\n */\nexport function catmullRomScalar(a: number, b: number, c: number, d: number, t: number): number {\n  const c0 = b;\n  const c1 = 0.5 * (c - a);\n  const c2 = a - 2.5 * b + 2 * c - 0.5 * d;\n  const c3 = -0.5 * a + 1.5 * b - 1.5 * c + 0.5 * d;\n  const t2 = t * t;\n  const t3 = t2 * t;\n  return c0 + c1 * t + c2 * t2 + c3 * t3;\n}\n\n/**\n * Numeric clamp into the closed interval [min, max]. Returns NaN when v is NaN (NaN propagation).\n */\nexport function clamp(v: number, min: number, max: number): number {\n  if (v < min) return min;\n  if (v > max) return max;\n  return v;\n}\n","// easing.ts — easing-function namespace (solo round 20260713-233409)\n//\n// 4-function surface: cubicInOut / smoothstep / smootherstep / elasticInOut\n// (GLSL `smoothstep`, Perlin's smootherstep; Bevy `EaseFunction::SmoothStep`/`SmootherStep`).\n// Scalar time-remaps t → number: take a normalized parameter and return an eased value. The\n// growable home for Bevy's `EaseFunction` family — further variants (sine / quad / bounce /\n// steps) land here add-only.\n//\n// Every function clamps the input to [0, 1] first (GLSL / Bevy semantics), so out-of-range t\n// saturates to the endpoints rather than extrapolating the curve.\n\nimport { clamp } from './_internal/scalar';\n\n/** Cubic ease-in-out: Bevy `EaseFunction::CubicInOut`, clamped to [0, 1]. */\nexport function cubicInOut(t: number): number {\n  const x = clamp(t, 0, 1);\n  return x < 0.5 ? 4 * x * x * x : 1 - (-2 * x + 2) ** 3 / 2;\n}\n\n/**\n * Smoothstep S-curve: `3t² − 2t³` on the clamped input. GLSL `smoothstep` (with edges 0/1),\n * Bevy `EaseFunction::SmoothStep`. f(0)=0, f(1)=1, f′(0)=f′(1)=0 (slow-in / slow-out).\n * Input clamped to [0, 1]. Use to ease a normalized time / lerp factor instead of a linear ramp.\n */\nexport function smoothstep(t: number): number {\n  const x = clamp(t, 0, 1);\n  return x * x * (3 - 2 * x);\n}\n\n/**\n * Smootherstep (Perlin) S-curve: `6t⁵ − 15t⁴ + 10t³` on the clamped input. Bevy\n * `EaseFunction::SmootherStep`. Like {@link smoothstep} but ALSO has zero 2nd derivatives at\n * the endpoints (f″(0)=f″(1)=0), so acceleration is continuous — a gentler, more natural ease.\n * Input clamped to [0, 1].\n */\nexport function smootherstep(t: number): number {\n  const x = clamp(t, 0, 1);\n  return x * x * x * (x * (x * 6 - 15) + 10);\n}\n\n/** Elastic ease-in-out: Bevy `EaseFunction::ElasticInOut`, clamped to [0, 1]. */\nexport function elasticInOut(t: number): number {\n  const x = clamp(t, 0, 1);\n  if (x === 0 || x === 1) return x;\n  const c5 = (2 * Math.PI) / 4.5;\n  return x < 0.5\n    ? -(2 ** (20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2\n    : (2 ** (-20 * x + 10) * Math.sin((20 * x - 11.125) * c5)) / 2 + 1;\n}\n","// euler.ts — Euler angle namespace (M4 / T-028)\n//\n// 6-function surface (≥ 6 lower bound):\n//   create / clone / set / fromQuat / toQuat / fromRotationMatrix\n//\n// Memory layout: plain object `{ x: number, y: number, z: number, order: EulerOrder }`\n// (not a Float32Array). Rationale:\n//   - need to store length=3 plus a string order; strings cannot live inside a TypedArray\n//   - performance-insensitive (euler is only used at the editor/IO boundary; runtime always converts to Quat)\n//\n// 6 orders (intrinsic rotation; literal order x → y → z):\n//   XYZ / YXZ / ZXY / ZYX / YZX / XZY\n//\n// Degenerate convention (plan-strategy §appendix A degenerate registry #16):\n//   - fromQuat(q, order) gimbal-lock (pitch ≈ ±π/2) → pick an equivalent branch; never throws\n//   - fromRotationMatrix follows the same convention\n//\n// Related: requirements §Surface euler lower bound 6 + 6-order full support;\n//          plan-strategy §1.1 euler.ts + §appendix A degenerate registry #16 + D-P19 EulerOrder union;\n//          wiki/glam-rs-overview Hamilton convention +\n//          Three.js Euler.setFromQuaternion / setFromRotationMatrix 6-order formulas.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A; D-P16 dual promise:\n// runtime silent + JSDoc `@degrade` + `@example` guard pattern landing together):\n//   #16 euler.fromQuat(q, order) gimbal-lock  → pick equivalent branch (no throw)\n//   #17 euler.fromRotationMatrix gimbal-lock  → same as above\n\nimport * as quat from './quat';\nimport type { Euler, EulerOrder, Mat3Like, Quat, QuatLike } from './types';\n\nexport type { Euler, EulerOrder };\n\n/** Create an Euler, defaulting to (0, 0, 0, 'XYZ'). */\nexport function create(): Euler {\n  return { x: 0, y: 0, z: 0, order: 'XYZ' };\n}\n\n/** Allocate a new Euler copy. */\nexport function clone(a: Euler): Euler {\n  return { x: a.x, y: a.y, z: a.z, order: a.order };\n}\n\n/** out.x/y/z/order = inputs; returns out (in-place). */\nexport function set(out: Euler, x: number, y: number, z: number, order: EulerOrder): Euler {\n  out.x = x;\n  out.y = y;\n  out.z = z;\n  out.order = order;\n  return out;\n}\n\n/**\n * out (Quat) = quaternion from euler. Returns out.\n *\n * Routes directly to quat.fromEuler (D-P2 + 6-order coverage already implemented inside quat).\n *\n * @example\n * ```ts\n * euler.toQuat(quatBuf, eulerInstance);\n * ```\n */\nexport function toQuat(out: Quat, e: Euler): Quat {\n  return quat.fromEuler(out, e.x, e.y, e.z, e.order);\n}\n\n/**\n * out (Euler) = euler angles from quaternion in given order. Returns out.\n *\n * Implementation path: quat → 3x3 column-major rotation matrix → fromRotationMatrix(order).\n * This concentrates the 6-order formulas in fromRotationMatrix and avoids dual maintenance.\n *\n * @degrade gimbal lock (pitch ≈ ±π/2, sin/cos critical) → set yaw to 0 and let roll absorb the\n *          full rotation (registry #16; same equivalent-branch semantics as Three.js; no throw).\n *\n * @example\n * ```ts\n * euler.fromQuat(out, q, 'XYZ');\n * ```\n */\nexport function fromQuat(out: Euler, q: QuatLike, order: EulerOrder): Euler {\n  // Expand q into a 3x3 column-major rotation matrix (matching the index convention of quat.fromRotationMatrix)\n  const x = q[0] as number;\n  const y = q[1] as number;\n  const z = q[2] as number;\n  const w = q[3] as number;\n  const xx = x * x;\n  const xy = x * y;\n  const xz = x * z;\n  const yy = y * y;\n  const yz = y * z;\n  const zz = z * z;\n  const wx = w * x;\n  const wy = w * y;\n  const wz = w * z;\n\n  // mat3 column-major: m[col*3+row] → m00=col0row0, m01=col0row1, m10=col1row0...\n  // R[row][col] maps to m[col*3+row]:\n  //   R[0][0]=m00,R[0][1]=m10,R[0][2]=m20\n  //   R[1][0]=m01,R[1][1]=m11,R[1][2]=m21\n  //   R[2][0]=m02,R[2][1]=m12,R[2][2]=m22\n  const m = new Float32Array(9);\n  m[0] = 1 - 2 * (yy + zz);\n  m[1] = 2 * (xy + wz);\n  m[2] = 2 * (xz - wy);\n  m[3] = 2 * (xy - wz);\n  m[4] = 1 - 2 * (xx + zz);\n  m[5] = 2 * (yz + wx);\n  m[6] = 2 * (xz + wy);\n  m[7] = 2 * (yz - wx);\n  m[8] = 1 - 2 * (xx + yy);\n\n  return fromRotationMatrix(out, m, order);\n}\n\n/**\n * out (Euler) = euler from a 3x3 rotation matrix m (column-major, length 9) in `order`. Returns out.\n *\n * Uses the Three.js Euler.setFromRotationMatrix formulas (intrinsic rotation + Hamilton convention).\n * Each of the 6 orders has an analytic formula; near gimbal-lock (middle axis sin/cos near ±1)\n * an equivalent branch is selected.\n *\n * @degrade gimbal lock → middle axis is fixed at ±π/2; the remaining two axes degenerate\n * (one is set to 0; the other absorbs the rotation).\n *\n * @example\n * ```ts\n * euler.fromRotationMatrix(out, mat3InstanceColumnMajor, 'XYZ');\n * ```\n */\nexport function fromRotationMatrix(out: Euler, m: Mat3Like, order: EulerOrder): Euler {\n  // Column-major indexing (matches quat.fromRotationMatrix):\n  //   m00 m01 m02 = column 0 (col=0)'s row=0/1/2\n  //   m10 m11 m12 = column 1 (col=1)'s row=0/1/2\n  //   m20 m21 m22 = column 2 (col=2)'s row=0/1/2\n  // Mathematically R[row][col] = m[c*3 + r].\n  // Thus, in the Three.js formulas, m11 (R[0][0]) corresponds to our m[0],\n  //                                m12 (R[0][1]) corresponds to m[3],\n  //                                m13 (R[0][2]) corresponds to m[6],\n  //                                m21 (R[1][0]) corresponds to m[1], etc.\n  // For readability and alignment with Three.js naming, alias (_ij denotes R[i-1][j-1]):\n  const _11 = m[0] as number;\n  const _21 = m[1] as number;\n  const _31 = m[2] as number;\n  const _12 = m[3] as number;\n  const _22 = m[4] as number;\n  const _32 = m[5] as number;\n  const _13 = m[6] as number;\n  const _23 = m[7] as number;\n  const _33 = m[8] as number;\n\n  out.order = order;\n  switch (order) {\n    case 'XYZ':\n      out.y = Math.asin(clamp11(_13));\n      if (Math.abs(_13) < 1 - 1e-7) {\n        out.x = Math.atan2(-_23, _33);\n        out.z = Math.atan2(-_12, _11);\n      } else {\n        // gimbal lock\n        out.x = Math.atan2(_32, _22);\n        out.z = 0;\n      }\n      break;\n    case 'YXZ':\n      out.x = Math.asin(-clamp11(_23));\n      if (Math.abs(_23) < 1 - 1e-7) {\n        out.y = Math.atan2(_13, _33);\n        out.z = Math.atan2(_21, _22);\n      } else {\n        out.y = Math.atan2(-_31, _11);\n        out.z = 0;\n      }\n      break;\n    case 'ZXY':\n      out.x = Math.asin(clamp11(_32));\n      if (Math.abs(_32) < 1 - 1e-7) {\n        out.y = Math.atan2(-_31, _33);\n        out.z = Math.atan2(-_12, _22);\n      } else {\n        out.y = 0;\n        out.z = Math.atan2(_21, _11);\n      }\n      break;\n    case 'ZYX':\n      out.y = Math.asin(-clamp11(_31));\n      if (Math.abs(_31) < 1 - 1e-7) {\n        out.x = Math.atan2(_32, _33);\n        out.z = Math.atan2(_21, _11);\n      } else {\n        out.x = 0;\n        out.z = Math.atan2(-_12, _22);\n      }\n      break;\n    case 'YZX':\n      out.z = Math.asin(clamp11(_21));\n      if (Math.abs(_21) < 1 - 1e-7) {\n        out.x = Math.atan2(-_23, _22);\n        out.y = Math.atan2(-_31, _11);\n      } else {\n        out.x = 0;\n        out.y = Math.atan2(_13, _33);\n      }\n      break;\n    case 'XZY':\n      out.z = Math.asin(-clamp11(_12));\n      if (Math.abs(_12) < 1 - 1e-7) {\n        out.x = Math.atan2(_32, _22);\n        out.y = Math.atan2(_13, _11);\n      } else {\n        out.x = Math.atan2(-_23, _33);\n        out.y = 0;\n      }\n      break;\n    default:\n      // Silent fallback to 'XYZ' (same convention as quat.fromEuler D-P2)\n      out.y = Math.asin(clamp11(_13));\n      if (Math.abs(_13) < 1 - 1e-7) {\n        out.x = Math.atan2(-_23, _33);\n        out.z = Math.atan2(-_12, _11);\n      } else {\n        out.x = Math.atan2(_32, _22);\n        out.z = 0;\n      }\n      out.order = 'XYZ';\n      break;\n  }\n\n  return out;\n}\n\n/**\n * Internal: clamp to [-1, 1] to keep asin from receiving out-of-range inputs (floating-point error\n * may make |x| slightly > 1; same guard as Three.js; not counted in the surface).\n */\nfunction clamp11(v: number): number {\n  if (v < -1) return -1;\n  if (v > 1) return 1;\n  return v;\n}\n","// quat.ts — quaternion namespace (M4 / T-027)\n//\n// 23-function surface (≥ 16 lower bound):\n//   create / clone / identity / fromAxisAngle / fromEuler / fromRotationMatrix /\n//   fromLookAt / fromUnitVectors / multiply / rotateAxis / slerp / nlerp / invert /\n//   conjugate / dot / length / lengthSq / transformVec3 / normalize / eulerY /\n//   right / up / forward\n//\n// Memory layout lock: Float32Array length 4 [x, y, z, w], **Hamilton convention**\n// (graphics mainstream: glm / Three.js / wgpu-matrix / DirectXMath / glam are all Hamilton (x,y,z,w)).\n// Identity = [0, 0, 0, 1].\n//\n// Degenerate convention (plan-strategy §appendix A degenerate registry #8-#13):\n//   - fromAxisAngle(0-axis, _) → identity (same convention as the M2 baseline)\n//   - fromEuler(x, y, z, 'unknown') → silent fallback to 'XYZ' (D-P2 + AC-06 no throw)\n//   - slerp(a, b, t) when dot(a,b) < -EPS_SLERP_DOT_LIMIT → negate b then slerp normally (D-P6)\n//   - slerp(a, b, t) when |dot| > 1 - EPS_SLERP_DOT_LIMIT → falls back to nlerp (avoids acos blow-up)\n//   - fromUnitVectors(v, -v) → pick perpendicular axis (prefer (0,1,0); fall back to (1,0,0) if\n//                              collinear with v) and 180° rotation (D-P18)\n//   - fromUnitVectors(v, v) → identity\n//   - normalize(zero quat) → out = zero (same convention as vec.normalize)\n//\n// Four ironclad rules (gl-matrix wiki / research §F1):\n//   1. Out-param first; 2. Aliasing-safe; 3. Module-as-namespace; 4. Float32Array by default.\n//\n// Related: requirements §Surface quat lower bound 16 + AC-06 no throw + AC-08 naming alignment +\n//          AC-01 brand + boundary-case quat row;\n//          plan-strategy §6 M4 + D-P2/D-P6/D-P18 + §appendix A degenerate registry #8-#13;\n//          research §Finding 3 glam Hamilton + §fact-correction 4 fromEuler unknown silenced;\n//          wiki/gl-matrix-overview §quat degenerate anchor + wiki/glam-rs-overview §Hamilton +\n//          wiki/wgpu-matrix-overview §quat namespace.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A; shares numbering with mat;\n// D-P16 dual promise: runtime silent + JSDoc `@degrade` + `@example` guard pattern landing together):\n//   #8  quat.fromAxisAngle(0-axis, _)              → out = identity\n//   #9  quat.fromEuler(_, _, _, unknown)           → silently computes as 'XYZ' (D-P2)\n//   #10 quat.slerp(a, b, t) dot < -1+ε            → negate b then slerp (D-P6)\n//   #11 quat.slerp(a, b, t) |dot| > 1-ε           → falls back to nlerp\n//   #12 quat.fromUnitVectors(v, -v)                → perpendicular-axis 180° rotation (D-P18)\n//   #13 quat.fromUnitVectors(v, v)                 → out = identity\n\nimport { EPS_NORMALIZE, EPS_QUAT_PARALLEL, EPS_SLERP_DOT_LIMIT } from './_internal/epsilon';\nimport { lengthSq4, normalize4 } from './_internal/scalar';\nimport type { EulerOrder, Mat3Like, Quat, QuatLike, Vec3, Vec3Like } from './types';\n\nexport type { Quat, QuatLike };\n\n// Canonical axes for the local-basis accessors (right / up / forward). −Z is the\n// forward convention (RL-4), matching mat4.getForward and fromLookAt.\nconst UNIT_X = [1, 0, 0] as const;\nconst UNIT_Y = [0, 1, 0] as const;\nconst UNIT_NEG_Z = [0, 0, -1] as const;\n\n/** Create a Quat (default all zero; callers usually call identity() right after). */\nexport function create(): Quat {\n  return new Float32Array(4) as Quat;\n}\n\n/** Allocate a new Quat copy. */\nexport function clone(a: QuatLike): Quat {\n  return Float32Array.of(a[0] as number, a[1] as number, a[2] as number, a[3] as number) as Quat;\n}\n\n/** out = identity quaternion [0, 0, 0, 1]. Returns out. */\nexport function identity(out: Quat): Quat {\n  out[0] = 0;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 1;\n  return out;\n}\n\n/**\n * out = quaternion representing rotation by angleRadians around axis. Returns out.\n *\n * axis does not have to be pre-normalized; this function normalizes it internally.\n *\n * @degrade axis is the zero vector (lengthSq < EPS_NORMALIZE) → out = identity\n * (no throw, registry #8).\n *\n * @example\n * ```ts\n * quat.fromAxisAngle(out, [0, 1, 0], Math.PI / 2);\n * // Guard: if (vec3.lengthSq(axis) < EPS_NORMALIZE) skip;\n * ```\n */\nexport function fromAxisAngle(out: Quat, axis: Vec3Like, angleRadians: number): Quat {\n  const ax = axis[0] as number;\n  const ay = axis[1] as number;\n  const az = axis[2] as number;\n  const lenSq = ax * ax + ay * ay + az * az;\n  if (lenSq < EPS_NORMALIZE) {\n    return identity(out);\n  }\n  const inv = 1 / Math.sqrt(lenSq);\n  const half = angleRadians / 2;\n  const s = Math.sin(half);\n  out[0] = ax * inv * s;\n  out[1] = ay * inv * s;\n  out[2] = az * inv * s;\n  out[3] = Math.cos(half);\n  return out;\n}\n\n/**\n * out = quaternion from intrinsic Euler angles (x, y, z, order). Returns out.\n *\n * Angle unit = **radians** (aligned with wgpu-matrix / Three.js; research §fact-correction 4\n * deviates from gl-matrix's degrees).\n * 6 orders: XYZ / YXZ / ZXY / ZYX / YZX / XZY (intrinsic rotation: literal order x → y → z).\n * Implementation: split each axis rotation into single-axis quaternions, then Hamilton-multiply\n * in `order`.\n *\n * @degrade order outside the EulerOrder union (only possible via `as any` cast) →\n *          **silently computes as if 'XYZ'** (D-P2 + AC-06 no throw; registry #9).\n *\n * @example\n * ```ts\n * quat.fromEuler(out, 0.5, 0.3, 0.1, 'XYZ');\n * quat.fromEuler(out, 0.5, 0.3, 0.1, 'unknown' as any); // silently computed as 'XYZ'\n * // Guard: pass an EulerOrder union literal; the TS layer already blocks unknown strings.\n * ```\n */\nexport function fromEuler(out: Quat, x: number, y: number, z: number, order: EulerOrder): Quat {\n  // Single-axis half-angle quat coefficients\n  const c1 = Math.cos(x / 2);\n  const c2 = Math.cos(y / 2);\n  const c3 = Math.cos(z / 2);\n  const s1 = Math.sin(x / 2);\n  const s2 = Math.sin(y / 2);\n  const s3 = Math.sin(z / 2);\n\n  // Formulas from Three.js Quaternion.setFromEuler (intrinsic rotation, Hamilton convention).\n  // 6 orders dispatched via switch; unknown silently falls back to XYZ (D-P2).\n  switch (order) {\n    case 'XYZ':\n      out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n      out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n      out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n      out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n      break;\n    case 'YXZ':\n      out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n      out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n      out[2] = c1 * c2 * s3 - s1 * s2 * c3;\n      out[3] = c1 * c2 * c3 + s1 * s2 * s3;\n      break;\n    case 'ZXY':\n      out[0] = s1 * c2 * c3 - c1 * s2 * s3;\n      out[1] = c1 * s2 * c3 + s1 * c2 * s3;\n      out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n      out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n      break;\n    case 'ZYX':\n      out[0] = s1 * c2 * c3 - c1 * s2 * s3;\n      out[1] = c1 * s2 * c3 + s1 * c2 * s3;\n      out[2] = c1 * c2 * s3 - s1 * s2 * c3;\n      out[3] = c1 * c2 * c3 + s1 * s2 * s3;\n      break;\n    case 'YZX':\n      out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n      out[1] = c1 * s2 * c3 + s1 * c2 * s3;\n      out[2] = c1 * c2 * s3 - s1 * s2 * c3;\n      out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n      break;\n    case 'XZY':\n      out[0] = s1 * c2 * c3 - c1 * s2 * s3;\n      out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n      out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n      out[3] = c1 * c2 * c3 + s1 * s2 * s3;\n      break;\n    default:\n      // D-P2 + AC-06: unknown order silently falls back to 'XYZ' (no throw, no console.warn).\n      out[0] = s1 * c2 * c3 + c1 * s2 * s3;\n      out[1] = c1 * s2 * c3 - s1 * c2 * s3;\n      out[2] = c1 * c2 * s3 + s1 * s2 * c3;\n      out[3] = c1 * c2 * c3 - s1 * s2 * s3;\n      break;\n  }\n  return out;\n}\n\n/**\n * out = quaternion from a 3x3 rotation matrix m (column-major, length 9). Returns out.\n *\n * Implementation: Shepperd's case-split (branch on trace / largest diagonal entry); numerically\n * more stable than the direct trace method (avoids sqrt(0) when trace ≈ -1).\n *\n * Assumption: m is a pure rotation matrix (|det|=1, columns orthogonal). If not, the result is\n * undefined but does not throw.\n *\n * @degrade m is not a pure rotation (contains shear / scale) → numerically undefined but does\n *          not throw (AC-06 no throw; callers should normalize column vectors first or avoid\n *          introducing non-pure-rotation matrices at the ECS-design layer).\n *\n * @example\n * ```ts\n * quat.fromRotationMatrix(out, mat3InstanceColumnMajor);\n * ```\n */\nexport function fromRotationMatrix(out: Quat, m: Mat3Like): Quat {\n  const m00 = m[0] as number;\n  const m01 = m[1] as number;\n  const m02 = m[2] as number;\n  const m10 = m[3] as number;\n  const m11 = m[4] as number;\n  const m12 = m[5] as number;\n  const m20 = m[6] as number;\n  const m21 = m[7] as number;\n  const m22 = m[8] as number;\n\n  // m is column-major: m[col*3+row] → m00 is col=0,row=0; m01 is col=0,row=1.\n  // Rotation matrix R[row][col]:\n  //   R[0][0]=m00, R[1][0]=m01, R[2][0]=m02\n  //   R[0][1]=m10, R[1][1]=m11, R[2][1]=m12\n  //   R[0][2]=m20, R[1][2]=m21, R[2][2]=m22\n  // Shepperd's formulas use R[i][j]; here the column-major indices are equivalent:\n  //   trace = R[0][0]+R[1][1]+R[2][2] = m00+m11+m22\n  const trace = m00 + m11 + m22;\n  if (trace > 0) {\n    const s = 0.5 / Math.sqrt(trace + 1);\n    out[0] = (m12 - m21) * s; // (R[2][1] - R[1][2])\n    out[1] = (m20 - m02) * s; // (R[0][2] - R[2][0])\n    out[2] = (m01 - m10) * s; // (R[1][0] - R[0][1])\n    out[3] = 0.25 / s;\n  } else if (m00 > m11 && m00 > m22) {\n    const s = 2 * Math.sqrt(1 + m00 - m11 - m22);\n    out[0] = 0.25 * s;\n    out[1] = (m10 + m01) / s;\n    out[2] = (m20 + m02) / s;\n    out[3] = (m12 - m21) / s;\n  } else if (m11 > m22) {\n    const s = 2 * Math.sqrt(1 + m11 - m00 - m22);\n    out[0] = (m10 + m01) / s;\n    out[1] = 0.25 * s;\n    out[2] = (m21 + m12) / s;\n    out[3] = (m20 - m02) / s;\n  } else {\n    const s = 2 * Math.sqrt(1 + m22 - m00 - m11);\n    out[0] = (m20 + m02) / s;\n    out[1] = (m21 + m12) / s;\n    out[2] = 0.25 * s;\n    out[3] = (m01 - m10) / s;\n  }\n  return out;\n}\n\n/**\n * out = orientation quaternion for an object placed at `eye` and facing `target`. Returns out.\n *\n * This is the ergonomic camera/look-at helper: it yields the WORLD-space orientation an entity's\n * Transform.rotation needs so that its local -z axis points from `eye` toward `target` (the camera\n * convention, matching `mat4.lookAt`). Use it instead of hand-wiring\n * `mat4.lookAt → mat4.invert → mat3.fromMat4 → quat.fromRotationMatrix`; that chain is easy to get\n * wrong (notably `fromRotationMatrix` takes a mat3, but `Mat4Like`≡`Mat3Like`≡`ArrayLike<number>`,\n * so passing a mat4 typechecks and silently reads garbage → NaN → nothing renders).\n *\n * Convenience composition (like `mat4.computeViewProj`), not a primitive: it builds the same\n * right/newUp/forward basis as `mat4.lookAt` and reuses `fromRotationMatrix` for the extraction.\n *\n * @degrade eye ≈ target (|eye-target| < EPS_NORMALIZE) → out = identity (same convention as\n *          `mat4.lookAt` degenerate #4; no throw, AC-06).\n * @degrade up collinear with the view direction → alternative up auto-selected (same as\n *          `mat4.lookAt` #5).\n *\n * @example\n * ```ts\n * // aim a camera at the origin\n * const q = quat.fromLookAt(quat.create(), [-2.5, 4.5, 9], [0, 0, 0], [0, 1, 0]);\n * world.set(cameraEntity, Transform, { pos: [-2.5, 4.5, 9], rot: q });\n * ```\n */\nexport function fromLookAt(out: Quat, eye: Vec3Like, target: Vec3Like, up: Vec3Like): Quat {\n  const ex = eye[0] as number;\n  const ey = eye[1] as number;\n  const ez = eye[2] as number;\n\n  // forward = normalize(eye - target): the object's local -z points at the target, so +z = eye - target\n  // (right-handed camera convention, identical to mat4.lookAt).\n  let fx = ex - (target[0] as number);\n  let fy = ey - (target[1] as number);\n  let fz = ez - (target[2] as number);\n  const fLenSq = fx * fx + fy * fy + fz * fz;\n  if (fLenSq < EPS_NORMALIZE) {\n    return identity(out);\n  }\n  const fInv = 1 / Math.sqrt(fLenSq);\n  fx *= fInv;\n  fy *= fInv;\n  fz *= fInv;\n\n  const upx = up[0] as number;\n  const upy = up[1] as number;\n  const upz = up[2] as number;\n\n  // right = normalize(cross(up, forward)); degrade path mirrors mat4.lookAt (#5 alternative up).\n  let rx = upy * fz - upz * fy;\n  let ry = upz * fx - upx * fz;\n  let rz = upx * fy - upy * fx;\n  let rLenSq = rx * rx + ry * ry + rz * rz;\n  if (rLenSq < EPS_NORMALIZE) {\n    // up collinear with forward: pick alternative up = (0, 0, 1); if still collinear pick (0, 1, 0)\n    rx = -fy;\n    ry = fx;\n    rz = 0;\n    rLenSq = rx * rx + ry * ry + rz * rz;\n    if (rLenSq < EPS_NORMALIZE) {\n      rx = 0;\n      ry = -fz;\n      rz = fy;\n      rLenSq = rx * rx + ry * ry + rz * rz;\n    }\n  }\n  const rInv = 1 / Math.sqrt(rLenSq);\n  rx *= rInv;\n  ry *= rInv;\n  rz *= rInv;\n\n  // newUp = cross(forward, right)\n  const ux = fy * rz - fz * ry;\n  const uy = fz * rx - fx * rz;\n  const uz = fx * ry - fy * rx;\n\n  // World rotation columns are the basis vectors themselves (col0=right, col1=up, col2=forward) —\n  // this is the transpose of mat4.lookAt's view rotation, i.e. the camera's world orientation.\n  // Pack column-major into a length-9 mat3 for fromRotationMatrix (SSOT for the Shepperd extraction).\n  // Per-call alloc mirrors mat4.computeViewProj's convenience-composition grain (camera orientation\n  // is set rarely; no module-scoped mutable state to reason about).\n  const m3 = new Float32Array(9);\n  m3[0] = rx;\n  m3[1] = ry;\n  m3[2] = rz;\n  m3[3] = ux;\n  m3[4] = uy;\n  m3[5] = uz;\n  m3[6] = fx;\n  m3[7] = fy;\n  m3[8] = fz;\n  return fromRotationMatrix(out, m3);\n}\n\n/**\n * out = quaternion that rotates the unit vector v to w (shortest arc). Returns out.\n *\n * Assumes v and w are normalized; if not, the caller is responsible.\n *\n * @degrade v ≈ w (dot > 1 - EPS_QUAT_PARALLEL) → out = identity (registry #13).\n * @degrade v ≈ -w (dot < -1 + EPS_QUAT_PARALLEL) → pick a perpendicular axis and do a 180°\n *          rotation (prefer (0,1,0); fall back to (1,0,0) when collinear with v;\n *          registry #12 + D-P18).\n *\n * @example\n * ```ts\n * quat.fromUnitVectors(out, [1,0,0], [0,1,0]); // 90° around Z\n * quat.fromUnitVectors(out, [1,0,0], [-1,0,0]); // 180° opposite: pick (0,1,0) axis\n * ```\n */\nexport function fromUnitVectors(out: Quat, v: Vec3Like, w: Vec3Like): Quat {\n  const vx = v[0] as number;\n  const vy = v[1] as number;\n  const vz = v[2] as number;\n  const wx = w[0] as number;\n  const wy = w[1] as number;\n  const wz = w[2] as number;\n\n  const d = vx * wx + vy * wy + vz * wz;\n\n  if (d > 1 - EPS_QUAT_PARALLEL) {\n    // same direction: identity\n    return identity(out);\n  }\n\n  if (d < -1 + EPS_QUAT_PARALLEL) {\n    // opposite direction: pick a perpendicular axis (D-P18).\n    // Prefer (0, 1, 0); when v is collinear with (0, 1, 0) (|vy| ~ 1) fall back to (1, 0, 0).\n    let ax: number;\n    let ay: number;\n    let az: number;\n    if (Math.abs(vy) < 1 - EPS_QUAT_PARALLEL) {\n      // axis = normalize(cross(v, (0, 1, 0)))\n      ax = -vz;\n      ay = 0;\n      az = vx;\n    } else {\n      // v is collinear with (0, 1, 0) → use (1, 0, 0)\n      // axis = normalize(cross(v, (1, 0, 0)))\n      ax = 0;\n      ay = vz;\n      az = -vy;\n    }\n    const axLen = Math.sqrt(ax * ax + ay * ay + az * az);\n    if (axLen < EPS_NORMALIZE) {\n      // extreme safety net (theoretically unreachable): write identity, no throw\n      return identity(out);\n    }\n    const axInv = 1 / axLen;\n    out[0] = ax * axInv;\n    out[1] = ay * axInv;\n    out[2] = az * axInv;\n    out[3] = 0; // cos(PI/2) = 0\n    return out;\n  }\n\n  // General case: half-vector method (numerically stable; consensus of wgpu-matrix / Three.js)\n  // q = (cross(v, w), 1 + dot(v, w)), then normalize\n  const cx = vy * wz - vz * wy;\n  const cy = vz * wx - vx * wz;\n  const cz = vx * wy - vy * wx;\n  const sw = 1 + d;\n  const len = Math.sqrt(cx * cx + cy * cy + cz * cz + sw * sw);\n  const inv = 1 / len;\n  out[0] = cx * inv;\n  out[1] = cy * inv;\n  out[2] = cz * inv;\n  out[3] = sw * inv;\n  return out;\n}\n\n/**\n * out = a * b (Hamilton product). Returns out.\n *\n * Aliasing-safe: reads all 8 source elements into locals first.\n */\nexport function multiply(out: Quat, a: QuatLike, b: QuatLike): Quat {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const aw = a[3] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  const bw = b[3] as number;\n  out[0] = aw * bx + ax * bw + ay * bz - az * by;\n  out[1] = aw * by - ax * bz + ay * bw + az * bx;\n  out[2] = aw * bz + ax * by - ay * bx + az * bw;\n  out[3] = aw * bw - ax * bx - ay * by - az * bz;\n  return out;\n}\n\n/**\n * out = the orientation `q` after rotating a further `angleRadians` about world-space `axis`,\n * re-normalized. Returns out.\n *\n * This is the ergonomic *incremental rotate* helper — the per-frame spin/animation move. It folds\n * the three steps every rotating demo otherwise hand-wires: build the delta quaternion\n * (`fromAxisAngle`), **pre**-multiply it onto the current orientation (world-space axis, matching\n * **Bevy `Transform::rotate(r)` = `r * self.rotation`** / `rotate_y(θ)`), and — the step that is\n * silently omitted and makes the naive loop wrong — **normalize** to shed the floating-point error\n * that accumulates over thousands of frames into a non-unit quaternion (skew / scale artefacts).\n *\n * Prefer this over hand-writing `quat.multiply(q, delta, q)` in an update system: that loop drifts,\n * so demos work around it with an absolute-angle accumulator + `fromAxisAngle` (can't compose onto an\n * existing orientation) or raw `sin/cos` quaternion literals. `rotateAxis` composes safely.\n *\n * Convenience composition (like `fromLookAt`), not a primitive: same result as\n * `normalize(out, multiply(out, fromAxisAngle(tmp, axis, angleRadians), q))`, fused + aliasing-safe.\n *\n * @degrade `axis` zero-length → the delta is identity (degenerate registry #8), so out = normalize(q)\n *          (no rotation applied; no throw, consistent with the sibling helpers).\n *\n * @example\n * ```ts\n * // in an Update system: spin a cube about +Y at `speed` rad/s using the frame delta\n * const dt = world.getResource(Time).delta;\n * const t = world.get(entity, Transform).unwrap();\n * quat.rotateAxis(t.quat, t.quat, [0, 1, 0], speed * dt); // in-place accumulate, no drift\n * world.set(entity, Transform, t);\n * ```\n */\nexport function rotateAxis(out: Quat, q: QuatLike, axis: Vec3Like, angleRadians: number): Quat {\n  // Read q into locals first (aliasing-safe: rotateAxis(q, q, ...) is the common per-frame call).\n  const qx = q[0] as number;\n  const qy = q[1] as number;\n  const qz = q[2] as number;\n  const qw = q[3] as number;\n\n  // Delta quaternion for `angleRadians` about `axis` (fromAxisAngle inline; 0-axis → identity, #8).\n  const ax = axis[0] as number;\n  const ay = axis[1] as number;\n  const az = axis[2] as number;\n  const axisLen = Math.sqrt(ax * ax + ay * ay + az * az);\n  let dx = 0;\n  let dy = 0;\n  let dz = 0;\n  let dw = 1;\n  if (axisLen >= EPS_NORMALIZE) {\n    const half = angleRadians * 0.5;\n    const s = Math.sin(half) / axisLen;\n    dx = ax * s;\n    dy = ay * s;\n    dz = az * s;\n    dw = Math.cos(half);\n  }\n\n  // Pre-multiply: out = delta * q (world-space axis; matches Bevy Transform::rotate order).\n  let rx = dw * qx + dx * qw + dy * qz - dz * qy;\n  let ry = dw * qy - dx * qz + dy * qw + dz * qx;\n  let rz = dw * qz + dx * qy - dy * qx + dz * qw;\n  let rw = dw * qw - dx * qx - dy * qy - dz * qz;\n\n  // Normalize to kill accumulation drift (the whole point of this helper).\n  const len = Math.sqrt(rx * rx + ry * ry + rz * rz + rw * rw);\n  if (len >= EPS_NORMALIZE) {\n    const inv = 1 / len;\n    rx *= inv;\n    ry *= inv;\n    rz *= inv;\n    rw *= inv;\n  }\n  out[0] = rx;\n  out[1] = ry;\n  out[2] = rz;\n  out[3] = rw;\n  return out;\n}\n\n/**\n * out = spherical linear interpolation(a, b, t). Returns out.\n *\n * t is not clamped (extrapolation semantics matches vec.lerp).\n *\n * @degrade dot(a, b) < -EPS_SLERP_DOT_LIMIT (anti-parallel) → **negate b' = -b then slerp**\n *          (D-P6; q and -q represent the same rotation; registry #10).\n * @degrade |dot(a, b)| > 1 - EPS_SLERP_DOT_LIMIT (endpoint coincidence or near-coincidence) →\n *          falls back to nlerp (avoids acos blow-up; registry #11).\n *\n * @example\n * ```ts\n * quat.slerp(out, a, b, 0.5);\n * // Anti-parallel (dot ≈ -1): caller does not need to pre-process; the negation fall-back\n * // happens internally.\n * ```\n */\nexport function slerp(out: Quat, a: QuatLike, b: QuatLike, t: number): Quat {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const aw = a[3] as number;\n  let bx = b[0] as number;\n  let by = b[1] as number;\n  let bz = b[2] as number;\n  let bw = b[3] as number;\n\n  let cosTheta = ax * bx + ay * by + az * bz + aw * bw;\n\n  // D-P6: anti-parallel → negate b then slerp (q and -q are the same rotation; shortest arc)\n  if (cosTheta < 0) {\n    bx = -bx;\n    by = -by;\n    bz = -bz;\n    bw = -bw;\n    cosTheta = -cosTheta;\n  }\n\n  // Endpoint coincidence (|dot| → 1): nlerp fall-back avoids sin(0) division by zero\n  if (cosTheta > 1 - EPS_SLERP_DOT_LIMIT) {\n    return nlerp(out, a, b, t);\n  }\n\n  const theta = Math.acos(cosTheta);\n  const sinTheta = Math.sin(theta);\n  const wa = Math.sin((1 - t) * theta) / sinTheta;\n  const wb = Math.sin(t * theta) / sinTheta;\n  out[0] = wa * ax + wb * bx;\n  out[1] = wa * ay + wb * by;\n  out[2] = wa * az + wb * bz;\n  out[3] = wa * aw + wb * bw;\n  return out;\n}\n\n/**\n * out = normalized lerp(a, b, t). Returns out.\n *\n * Faster than slerp but the angular velocity is non-uniform; use it as a slerp substitute near endpoints.\n * Like slerp, automatically handles dot < 0 by negating b to keep the shortest arc.\n *\n * @degrade lerp result is near zero (very rare) → out = identity.\n *\n * @example\n * ```ts\n * quat.nlerp(out, qA, qB, 0.5);\n * // Very rare: lerp result lengthSq < EPS_NORMALIZE → out = (0, 0, 0, 1)\n * ```\n */\nexport function nlerp(out: Quat, a: QuatLike, b: QuatLike, t: number): Quat {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const aw = a[3] as number;\n  let bx = b[0] as number;\n  let by = b[1] as number;\n  let bz = b[2] as number;\n  let bw = b[3] as number;\n\n  // anti-parallel → negate b for the shortest arc (same convention as slerp)\n  const cosTheta = ax * bx + ay * by + az * bz + aw * bw;\n  if (cosTheta < 0) {\n    bx = -bx;\n    by = -by;\n    bz = -bz;\n    bw = -bw;\n  }\n\n  out[0] = ax + t * (bx - ax);\n  out[1] = ay + t * (by - ay);\n  out[2] = az + t * (bz - az);\n  out[3] = aw + t * (bw - aw);\n\n  const lenSq =\n    (out[0] as number) * (out[0] as number) +\n    (out[1] as number) * (out[1] as number) +\n    (out[2] as number) * (out[2] as number) +\n    (out[3] as number) * (out[3] as number);\n  if (lenSq < EPS_NORMALIZE) {\n    return identity(out);\n  }\n  const inv = 1 / Math.sqrt(lenSq);\n  out[0] = (out[0] as number) * inv;\n  out[1] = (out[1] as number) * inv;\n  out[2] = (out[2] as number) * inv;\n  out[3] = (out[3] as number) * inv;\n  return out;\n}\n\n/**\n * out = inverse of a (conjugate / lengthSq). Returns out.\n *\n * For unit quaternions, invert is equivalent to conjugate (and faster); this implementation uses\n * the general a/|a|² form to support non-unit inputs.\n *\n * @degrade lengthSq(a) < EPS_NORMALIZE (zero quaternion) → out = identity (does not return NaN;\n *          same convention as mat invert).\n *\n * @example\n * ```ts\n * quat.invert(out, q);\n * quat.invert(out, quat.create(0, 0, 0, 0)); // → out = identity (0, 0, 0, 1), AC-06 no throw\n * ```\n */\nexport function invert(out: Quat, a: QuatLike): Quat {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const aw = a[3] as number;\n  const lenSq = ax * ax + ay * ay + az * az + aw * aw;\n  if (lenSq < EPS_NORMALIZE) {\n    return identity(out);\n  }\n  const inv = 1 / lenSq;\n  out[0] = -ax * inv;\n  out[1] = -ay * inv;\n  out[2] = -az * inv;\n  out[3] = aw * inv;\n  return out;\n}\n\n/** out = conjugate quaternion [-x, -y, -z, w] (aliasing-safe). Returns out. */\nexport function conjugate(out: Quat, a: QuatLike): Quat {\n  out[0] = -(a[0] as number);\n  out[1] = -(a[1] as number);\n  out[2] = -(a[2] as number);\n  out[3] = a[3] as number;\n  return out;\n}\n\n/** dot(a, b) = ax*bx + ay*by + az*bz + aw*bw (returns scalar). */\nexport function dot(a: QuatLike, b: QuatLike): number {\n  return (\n    (a[0] as number) * (b[0] as number) +\n    (a[1] as number) * (b[1] as number) +\n    (a[2] as number) * (b[2] as number) +\n    (a[3] as number) * (b[3] as number)\n  );\n}\n\n/** sqrt(x² + y² + z² + w²). Delegates to lengthSq + Math.sqrt (canonical pattern; see clone-5-quat-audit.md). */\nexport function length(a: QuatLike): number {\n  return Math.sqrt(lengthSq(a));\n}\n\n/** x² + y² + z² + w² (no sqrt). */\nexport function lengthSq(a: QuatLike): number {\n  return lengthSq4(a);\n}\n\n/**\n * out = q · v · q⁻¹ (rotate vec3 v by the unit quaternion q). Returns out.\n *\n * Rodrigues optimized form (research Finding 3, 18 mul + 12 add):\n *   t = 2 · cross(q.xyz, v)\n *   out = v + q.w · t + cross(q.xyz, t)\n *\n * 3-5× faster than going through mat4 (fromQuat → transformVec3); same shape as gl-matrix\n * `vec3.transformQuat` / Three.js `Vector3.applyQuaternion` (industry consensus).\n *\n * Aliasing-safe: reads v.xyz / q.xyzw into locals before writing out.\n *\n * @degrade q must be a unit-length quaternion. A non-unit q introduces implicit scaling\n *          (D-4 silent convention; no throw; AI users always get unit-length q from\n *          quat.fromAxisAngle / fromEuler / normalize / slerp, so this branch is not hit).\n *          When q = (0,0,0,0), t = 0 → out = v (the natural result of the formula; matches\n *          gl-matrix / Three.js; non-NaN, no throw).\n *\n * @example\n * ```ts\n * const q = quat.fromAxisAngle(quat.create(), [0, 1, 0], Math.PI / 2);\n * const out = vec3.create();\n * quat.transformVec3(out, q, [1, 0, 0]); // → out ≈ (0, 0, -1)\n * // Guard: q derived from the quat surface is always unit-length; callers do not need to normalize.\n * ```\n */\nexport function transformVec3(out: Vec3, q: QuatLike, v: Vec3Like): Vec3 {\n  const qx = q[0] as number;\n  const qy = q[1] as number;\n  const qz = q[2] as number;\n  const qw = q[3] as number;\n  const vx = v[0] as number;\n  const vy = v[1] as number;\n  const vz = v[2] as number;\n  // t = 2 * cross(q.xyz, v)\n  const tx = 2 * (qy * vz - qz * vy);\n  const ty = 2 * (qz * vx - qx * vz);\n  const tz = 2 * (qx * vy - qy * vx);\n  // out = v + q.w * t + cross(q.xyz, t)\n  out[0] = vx + qw * tx + (qy * tz - qz * ty);\n  out[1] = vy + qw * ty + (qz * tx - qx * tz);\n  out[2] = vz + qw * tz + (qx * ty - qy * tx);\n  return out;\n}\n\n/**\n * out = a / length(a). Returns out.\n *\n * @degrade lengthSq(a) < EPS_NORMALIZE → out = [0, 0, 0, 0] (same convention as vec.normalize;\n *          does not write identity, preserving the \"zero quaternion\" semantics; if the caller\n *          needs identity it should use fromAxisAngle with 0-axis).\n *\n * @example\n * ```ts\n * quat.normalize(out, q);\n * quat.normalize(out, quat.create(0, 0, 0, 0)); // → out = (0, 0, 0, 0); zero-quaternion semantics preserved\n * ```\n */\nexport function normalize(out: Quat, a: QuatLike): Quat {\n  normalize4(out, a, EPS_NORMALIZE);\n  return out;\n}\n\n/**\n * Convenience: quaternion representing rotation `theta` radians around the\n * Y axis. Equivalent to `quat.fromEuler(out, 0, theta, 0, 'YXZ')` but\n * allocates its own output `Quat`.\n *\n * Formula: `(0, sin(theta/2), 0, cos(theta/2))`.\n *\n * @degrade eulerY(0) → identity, eulerY(2pi) → identity within epsilon.\n *\n * @example\n * ```ts\n * const yaw45 = quat.eulerY(Math.PI / 4);\n * // yaw45 ≈ [0, 0.3826834, 0, 0.9238795]\n * ```\n *\n * @example Equivalent to the verbose form:\n * ```ts\n * const q1 = quat.eulerY(theta);\n * const q2 = quat.fromEuler(quat.create(), 0, theta, 0, 'YXZ');\n * // q1 === q2 (within epsilon)\n * ```\n */\nexport function eulerY(theta: number): Quat {\n  const out = create();\n  return fromEuler(out, 0, theta, 0, 'YXZ');\n}\n\n// ── Local basis accessors ─────────────────────────────────────────────────\n//\n// A rotation's three local basis vectors — the world-space directions its own\n// +X / +Y / −Z axes point after the rotation. They are exactly `q` applied to\n// the canonical axes: right = q·(1,0,0), up = q·(0,1,0), forward = q·(0,0,−1).\n//\n// The −Z forward convention matches `mat4.getForward` (RL-4) and the look\n// convention `fromLookAt` / `computeViewProj` use, so a camera/listener built\n// with `fromLookAt(eye, target)` has `forward(q)` ≈ normalize(target − eye).\n// These fold the transformVec3-with-a-magic-axis idiom (and the handedness a\n// caller would otherwise have to know) into a named accessor, mirroring the\n// mat4 getters so learning one basis form applies to both. Because `q` from the\n// quat surface is always unit-length, `transformVec3` returns a unit vector — no\n// separate normalize step (unlike the mat4 getters, which read possibly-scaled\n// basis columns and must normalize).\n\n/**\n * Local right axis: the world-space direction the rotation's own +X axis points.\n * `right(out, q) = quat.transformVec3(out, q, [1, 0, 0])`. Mirrors\n * `mat4.getRight`; matches Bevy `Transform::local_x` / `Transform::right`.\n *\n * @degrade q must be unit-length (guaranteed by the quat surface); a unit q\n *          yields a unit result. q = (0,0,0,0) → out = (1,0,0) (the natural\n *          transformVec3 result; non-NaN, no throw).\n *\n * @example\n * ```ts\n * const q = quat.eulerY(Math.PI / 2); // 90° about +Y\n * quat.right(vec3.create(), q); // → (0, 0, -1): +X yawed a quarter-turn\n * ```\n */\nexport function right(out: Vec3, q: QuatLike): Vec3 {\n  return transformVec3(out, q, UNIT_X);\n}\n\n/**\n * Local up axis: the world-space direction the rotation's own +Y axis points.\n * `up(out, q) = quat.transformVec3(out, q, [0, 1, 0])`. Mirrors `mat4.getUp`;\n * matches Bevy `Transform::local_y` / `Transform::up`.\n *\n * @degrade q must be unit-length (guaranteed by the quat surface); a unit q\n *          yields a unit result. q = (0,0,0,0) → out = (0,1,0).\n *\n * @example\n * ```ts\n * const q = quat.fromAxisAngle(quat.create(), [1, 0, 0], Math.PI / 2); // pitch 90°\n * quat.up(vec3.create(), q); // → (0, 0, 1): +Y pitched onto +Z\n * ```\n */\nexport function up(out: Vec3, q: QuatLike): Vec3 {\n  return transformVec3(out, q, UNIT_Y);\n}\n\n/**\n * Local forward axis: the world-space direction the rotation's own −Z axis\n * points (−Z look convention, RL-4). `forward(out, q) =\n * quat.transformVec3(out, q, [0, 0, -1])`. Mirrors `mat4.getForward`; matches\n * Bevy `Transform::forward` (Bevy also uses −Z). A quat from `fromLookAt(eye,\n * target, up)` has `forward(q)` ≈ normalize(target − eye).\n *\n * @degrade q must be unit-length (guaranteed by the quat surface); a unit q\n *          yields a unit result. q = (0,0,0,0) → out = (0,0,-1).\n *\n * @example\n * ```ts\n * const q = quat.eulerY(Math.PI / 2); // 90° about +Y\n * quat.forward(vec3.create(), q); // → (-1, 0, 0): -Z yawed a quarter-turn\n * ```\n */\nexport function forward(out: Vec3, q: QuatLike): Vec3 {\n  return transformVec3(out, q, UNIT_NEG_Z);\n}\n","// f32-to-f16-bytes.ts — IEEE 754 binary16 half-float conversion.\n//\n// Pure arithmetic codec extracted from runtime/render-resource-table.ts (D-3)\n// so build-time image-importer and runtime uploadCubemapFromEquirect share\n// a single SSOT. Takes a Uint8Array view over packed Float32 RGBA pixels\n// and returns a Uint8Array with half the byte length of the equivalent\n// binary16 interleaved pixels (little-endian).\n//\n// Out-of-range f32 values saturate to +/-inf, NaN propagates, and subnormals\n// round-to-zero (industry-standard f32->f16 path, semantic-preserving\n// extraction).\n//\n// Related: plan-strategy §2 D-3; research Finding 5 + C3; requirements C3;\n//          w1 test file: packages/math/src/__tests__/f32-to-f16-bytes.test.ts.\n\n/**\n * Convert a packed float32 RGBA byte buffer into the equivalent float16 RGBA\n * byte buffer (IEEE 754 binary16, little-endian). The output length is\n * `src.byteLength / 2`.\n *\n * @param src A Uint8Array whose underlying buffer is an interleaved Float32Array.\n * @returns A Uint8Array of packed binary16 pixels, exactly half the length.\n */\nexport function f32ToF16Bytes(src: Uint8Array): Uint8Array {\n  const f32 = new Float32Array(src.buffer, src.byteOffset, src.byteLength / 4);\n  const out = new Uint8Array(f32.length * 2);\n  const view = new DataView(out.buffer);\n  const scratch = new ArrayBuffer(4);\n  const scratchF = new Float32Array(scratch);\n  const scratchU = new Uint32Array(scratch);\n  for (let i = 0; i < f32.length; i++) {\n    scratchF[0] = f32[i] ?? 0;\n    const bits = scratchU[0] ?? 0;\n    const sign = (bits >>> 31) & 0x1;\n    const exp = (bits >>> 23) & 0xff;\n    let mant = bits & 0x7fffff;\n    let half: number;\n    if (exp === 0xff) {\n      half = (sign << 15) | 0x7c00 | (mant ? 0x200 : 0);\n    } else if (exp === 0) {\n      half = sign << 15;\n    } else {\n      const e = exp - 127 + 15;\n      if (e >= 0x1f) {\n        half = (sign << 15) | 0x7c00;\n      } else if (e <= 0) {\n        if (e < -10) {\n          half = sign << 15;\n        } else {\n          mant = (mant | 0x800000) >> (1 - e);\n          if (mant & 0x1000) mant += 0x2000;\n          half = (sign << 15) | (mant >> 13);\n        }\n      } else {\n        if (mant & 0x1000) {\n          mant += 0x2000;\n          if (mant & 0x800000) {\n            mant = 0;\n            half = (sign << 15) | ((e + 1) << 10);\n          } else {\n            half = (sign << 15) | (e << 10) | (mant >> 13);\n          }\n        } else {\n          half = (sign << 15) | (e << 10) | (mant >> 13);\n        }\n      }\n    }\n    view.setUint16(i * 2, half & 0xffff, true);\n  }\n  return out;\n}\n","// frustum.ts — view-frustum plane extraction and intersection tests (M1 / w4).\n//\n// Frustum representation: Float32Array(24) — 6 planes × 4 floats (nx, ny, nz, d) each,\n// normalized. Plane equation: nx*x + ny*y + nz*z + d = 0, positive side = inside frustum.\n//\n// Planes are extracted from a combined view-projection matrix (column-major) by\n// combining rows per the Gribb/Hartmann method (Gribb/Hartmann 2001 \"Fast\n// Extraction of Viewing Frustum Planes from the World-View-Projection Matrix\").\n// Plane normalization is built into fromViewProjection internally (D-6).\n//\n// Surface: create / fromViewProjection / intersectsBox / intersectsSphere.\n//\n// Related: requirements §AC-01 (frustum function signatures + test coverage);\n//          plan-strategy §D-6 (internal normalization).\n\nimport type { Box3Like } from './box3';\nimport type { Mat4Like, Vec3Like } from './types';\n\n/**\n * Frustum storage: Float32Array(24) — 6 planes × 4 floats each (nx, ny, nz, d).\n * Local brand (not part of the seven-piece SSOT; same rationale as Box3).\n */\nexport type Frustum = Float32Array & { readonly __frustum: void };\n\n/** Allocate a new Frustum (zero-initialized 6 planes). */\nexport function create(): Frustum {\n  return new Float32Array(24) as Frustum;\n}\n\n/**\n * Extract 6 frustum planes (left, right, bottom, top, lower-Z, upper-Z) from a\n * combined WebGPU [0,1] view-projection matrix (column-major, right-handed).\n *\n * Uses Gribb/Hartmann method: each plane = sum or difference of VP rows,\n * then normalized so (nx, ny, nz) is a unit vector and d is the signed\n * distance from origin. Plane inside-half-space is nx*x + ny*y + nz*z + d > 0.\n *\n * Writes to `out` and returns it.\n *\n * @example\n * ```ts\n * const view = mat4.lookAt(mat4.create(), [0, 0, 5], [0, 0, 0], [0, 1, 0]);\n * const proj = mat4.perspective(mat4.create(), Math.PI / 2, 1, 0.1, 100);\n * const vp = mat4.create();\n * mat4.multiply(vp, proj, view);\n * const f = frustum.fromViewProjection(frustum.create(), vp);\n * ```\n */\nexport function fromViewProjection(out: Frustum, vp: Mat4Like): Frustum {\n  const m0 = vp[0] as number;\n  const m1 = vp[1] as number;\n  const m2 = vp[2] as number;\n  const m3 = vp[3] as number;\n  const m4 = vp[4] as number;\n  const m5 = vp[5] as number;\n  const m6 = vp[6] as number;\n  const m7 = vp[7] as number;\n  const m8 = vp[8] as number;\n  const m9 = vp[9] as number;\n  const m10 = vp[10] as number;\n  const m11 = vp[11] as number;\n  const m12 = vp[12] as number;\n  const m13 = vp[13] as number;\n  const m14 = vp[14] as number;\n  const m15 = vp[15] as number;\n\n  // Left plane: row3 + row0\n  let nx = m3 + m0,\n    ny = m7 + m4,\n    nz = m11 + m8,\n    d = m15 + m12;\n  let len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n  if (len > 0) {\n    const il = 1 / len;\n    nx *= il;\n    ny *= il;\n    nz *= il;\n    d *= il;\n  }\n  out[0] = nx;\n  out[1] = ny;\n  out[2] = nz;\n  out[3] = d;\n\n  // Right plane: row3 - row0\n  nx = m3 - m0;\n  ny = m7 - m4;\n  nz = m11 - m8;\n  d = m15 - m12;\n  len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n  if (len > 0) {\n    const il = 1 / len;\n    nx *= il;\n    ny *= il;\n    nz *= il;\n    d *= il;\n  }\n  out[4] = nx;\n  out[5] = ny;\n  out[6] = nz;\n  out[7] = d;\n\n  // Bottom plane: row3 + row1\n  nx = m3 + m1;\n  ny = m7 + m5;\n  nz = m11 + m9;\n  d = m15 + m13;\n  len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n  if (len > 0) {\n    const il = 1 / len;\n    nx *= il;\n    ny *= il;\n    nz *= il;\n    d *= il;\n  }\n  out[8] = nx;\n  out[9] = ny;\n  out[10] = nz;\n  out[11] = d;\n\n  // Top plane: row3 - row1\n  nx = m3 - m1;\n  ny = m7 - m5;\n  nz = m11 - m9;\n  d = m15 - m13;\n  len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n  if (len > 0) {\n    const il = 1 / len;\n    nx *= il;\n    ny *= il;\n    nz *= il;\n    d *= il;\n  }\n  out[12] = nx;\n  out[13] = ny;\n  out[14] = nz;\n  out[15] = d;\n\n  // Lower Z clip plane: row2 (WebGPU 0 <= z <= w).\n  // This is the near plane for forward Z and the far plane for Reverse-Z.\n  nx = m2;\n  ny = m6;\n  nz = m10;\n  d = m14;\n  len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n  if (len > 0) {\n    const il = 1 / len;\n    nx *= il;\n    ny *= il;\n    nz *= il;\n    d *= il;\n  }\n  out[16] = nx;\n  out[17] = ny;\n  out[18] = nz;\n  out[19] = d;\n\n  // Upper Z clip plane: row3 - row2 (near for Reverse-Z).\n  nx = m3 - m2;\n  ny = m7 - m6;\n  nz = m11 - m10;\n  d = m15 - m14;\n  len = Math.sqrt(nx * nx + ny * ny + nz * nz);\n  if (len > 0) {\n    const il = 1 / len;\n    nx *= il;\n    ny *= il;\n    nz *= il;\n    d *= il;\n  }\n  out[20] = nx;\n  out[21] = ny;\n  out[22] = nz;\n  out[23] = d;\n\n  return out;\n}\n\n/**\n * Test whether an AABB intersects the frustum. Conservative: returns `true` when\n * the box straddles a plane boundary, even if partially outside.\n *\n * For each plane, the signed distance of both the positive-most corner (p-vertex)\n * and negative-most corner (n-vertex) are tested. The box is outside only when\n * the p-vertex is on the negative side of any plane.\n */\nexport function intersectsBox(f: Frustum, box: Box3Like): boolean {\n  const bx = box[0] as number;\n  const by = box[1] as number;\n  const bz = box[2] as number;\n  const bX = box[3] as number;\n  const bY = box[4] as number;\n  const bZ = box[5] as number;\n\n  // For each plane, compute the p-vertex (most positive along plane normal)\n  // and test if it's on the negative side. If so, box is entirely outside.\n  for (let i = 0; i < 6; i++) {\n    const off = i * 4;\n    const nx = f[off] as number;\n    const ny = f[off + 1] as number;\n    const nz = f[off + 2] as number;\n    const d = f[off + 3] as number;\n\n    // p-vertex: corner maximizing dot(normal, corner) = corner select via sign of normal\n    const px = nx >= 0 ? bX : bx;\n    const py = ny >= 0 ? bY : by;\n    const pz = nz >= 0 ? bZ : bz;\n\n    if (nx * px + ny * py + nz * pz + d < 0) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Test whether a sphere intersects the frustum. Conservative: returns `true`\n * when the sphere straddles a plane boundary.\n *\n * Computes signed distance from the sphere center to each plane;\n * outside when distance < -radius.\n */\nexport function intersectsSphere(f: Frustum, center: Vec3Like, radius: number): boolean {\n  const cx = center[0] as number;\n  const cy = center[1] as number;\n  const cz = center[2] as number;\n\n  for (let i = 0; i < 6; i++) {\n    const off = i * 4;\n    const nx = f[off] as number;\n    const ny = f[off + 1] as number;\n    const nz = f[off + 2] as number;\n    const sd = f[off + 3] as number; // plane's d (signed distance from origin)\n\n    const dist = nx * cx + ny * cy + nz * cz + sd;\n    if (dist < -radius) {\n      return false;\n    }\n  }\n  return true;\n}\n","// mat3.ts — 3x3 matrix namespace (M3 / T-020)\n//\n// 10-function surface (≥ 10 lower bound):\n//   create / clone / identity / equals / multiply / transpose / invert /\n//   scale / fromMat4 / normalMatrix\n//\n// Memory layout lock (D-P4): 9 floats packed column-major; index mapping m[col*3 + row].\n// Primary use: CPU normal matrix (normalMatrix = transpose(invert(upper-left mat3 of mat4)));\n// callers that upload directly to a GPU UBO should pad to mat4 themselves\n// (see R4 + the reserved toGpuLayout hook).\n//\n// Degenerate convention (same as D-P1): invert(singular) → write identity into out, return out (does not return null).\n//\n// Four ironclad rules (gl-matrix wiki / research §F1):\n//   1. Out-param first (except for query functions, the first parameter = out, return out)\n//   2. Aliasing-safe (out may equal an input; read all source data into locals first)\n//   3. Module-as-namespace (pure functions; no class, no this)\n//   4. Float32Array by default (V8 elements-kinds consistency)\n//\n// Related: requirements §Surface mat3 lower bound 10 + AC-04 (normalMatrix);\n//          plan-strategy D-P4 9-float lock + D-P1 invert writes identity;\n//          wiki/gl-matrix-overview Out-param four ironclad rules;\n//          wiki/typescript-branded-types §7.2 factory template.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A; shares numbering #3 with mat4):\n//   - mat3.invert(singular)        → out = identity (same convention as D-P1)\n//   - mat3.normalMatrix(singular)  → out = identity (via the internal branch in mat3.invert)\n\nimport { EPS_DET } from './_internal/epsilon';\nimport type { Mat3, Mat3Like, Mat4Like, Vec3Like } from './types';\n\nexport type { Mat3, Mat3Like };\n\n/** Create a Mat3 (default all zero; callers usually call identity() right after). */\nexport function create(): Mat3 {\n  return new Float32Array(9) as Mat3;\n}\n\n/** Allocate a new Mat3 copy. */\nexport function clone(a: Mat3Like): Mat3 {\n  return Float32Array.of(\n    a[0] as number,\n    a[1] as number,\n    a[2] as number,\n    a[3] as number,\n    a[4] as number,\n    a[5] as number,\n    a[6] as number,\n    a[7] as number,\n    a[8] as number,\n  ) as Mat3;\n}\n\n/** out = 3x3 identity (column-major [1,0,0, 0,1,0, 0,0,1]). Returns out. */\nexport function identity(out: Mat3): Mat3 {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 1;\n  out[5] = 0;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 1;\n  return out;\n}\n\n/** Approximate equality: each element differs by ≤ epsilon. NaN inputs always return false. */\nexport function equals(a: Mat3Like, b: Mat3Like, epsilon = 1e-6): boolean {\n  for (let i = 0; i < 9; i++) {\n    const av = a[i] as number;\n    const bv = b[i] as number;\n    if (Number.isNaN(av) || Number.isNaN(bv)) return false;\n    if (Math.abs(av - bv) > epsilon) return false;\n  }\n  return true;\n}\n\n/**\n * out = a * b (column-major matrix multiply). Returns out.\n *\n * Aliasing-safe: out may equal a or b; reads all 18 source elements into locals first.\n */\nexport function multiply(out: Mat3, a: Mat3Like, b: Mat3Like): Mat3 {\n  const a00 = a[0] as number;\n  const a01 = a[1] as number;\n  const a02 = a[2] as number;\n  const a10 = a[3] as number;\n  const a11 = a[4] as number;\n  const a12 = a[5] as number;\n  const a20 = a[6] as number;\n  const a21 = a[7] as number;\n  const a22 = a[8] as number;\n  const b00 = b[0] as number;\n  const b01 = b[1] as number;\n  const b02 = b[2] as number;\n  const b10 = b[3] as number;\n  const b11 = b[4] as number;\n  const b12 = b[5] as number;\n  const b20 = b[6] as number;\n  const b21 = b[7] as number;\n  const b22 = b[8] as number;\n  out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n  out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n  out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n  out[3] = a00 * b10 + a10 * b11 + a20 * b12;\n  out[4] = a01 * b10 + a11 * b11 + a21 * b12;\n  out[5] = a02 * b10 + a12 * b11 + a22 * b12;\n  out[6] = a00 * b20 + a10 * b21 + a20 * b22;\n  out[7] = a01 * b20 + a11 * b21 + a21 * b22;\n  out[8] = a02 * b20 + a12 * b21 + a22 * b22;\n  return out;\n}\n\n/**\n * out = transpose(a). Returns out.\n *\n * Aliasing-safe (transpose(m, m) is legal; reads the 6 off-diagonal elements into locals first).\n */\nexport function transpose(out: Mat3, a: Mat3Like): Mat3 {\n  const a01 = a[1] as number;\n  const a02 = a[2] as number;\n  const a12 = a[5] as number;\n  const a10 = a[3] as number;\n  const a20 = a[6] as number;\n  const a21 = a[7] as number;\n  out[0] = a[0] as number;\n  out[1] = a10;\n  out[2] = a20;\n  out[3] = a01;\n  out[4] = a[4] as number;\n  out[5] = a21;\n  out[6] = a02;\n  out[7] = a12;\n  out[8] = a[8] as number;\n  return out;\n}\n\n/**\n * out = invert(a). Returns out.\n *\n * @degrade a singular (|det| < EPS_DET) → out = identity (same convention as D-P1; does not return null).\n *\n * @example\n * ```ts\n * // Caller-side guard:\n * const det = mat3DetForGuard(m); // caller computes det to decide whether to invert\n * const inv = mat3.invert(mat3.create(), m);\n * // If m is singular, inv === identity (no NaN; safe to keep using).\n * ```\n */\nexport function invert(out: Mat3, a: Mat3Like): Mat3 {\n  const a00 = a[0] as number;\n  const a01 = a[1] as number;\n  const a02 = a[2] as number;\n  const a10 = a[3] as number;\n  const a11 = a[4] as number;\n  const a12 = a[5] as number;\n  const a20 = a[6] as number;\n  const a21 = a[7] as number;\n  const a22 = a[8] as number;\n\n  // cofactors (column-major → derive from row/col indices)\n  const b01 = a22 * a11 - a12 * a21;\n  const b11 = -a22 * a10 + a12 * a20;\n  const b21 = a21 * a10 - a11 * a20;\n  const det = a00 * b01 + a01 * b11 + a02 * b21;\n\n  if (Math.abs(det) < EPS_DET) {\n    return identity(out);\n  }\n\n  const invDet = 1 / det;\n  out[0] = b01 * invDet;\n  out[1] = (-a22 * a01 + a02 * a21) * invDet;\n  out[2] = (a12 * a01 - a02 * a11) * invDet;\n  out[3] = b11 * invDet;\n  out[4] = (a22 * a00 - a02 * a20) * invDet;\n  out[5] = (-a12 * a00 + a02 * a10) * invDet;\n  out[6] = b21 * invDet;\n  out[7] = (-a21 * a00 + a01 * a20) * invDet;\n  out[8] = (a11 * a00 - a01 * a10) * invDet;\n  return out;\n}\n\n/**\n * out = a * Scale(v) (per-column scale). Returns out.\n *\n * v takes the first 3 components (aligned with mat4.scale's vec3 input); mat3's third column is the z scale.\n */\nexport function scale(out: Mat3, a: Mat3Like, v: Vec3Like): Mat3 {\n  const x = v[0] as number;\n  const y = v[1] as number;\n  const z = v[2] as number;\n  out[0] = (a[0] as number) * x;\n  out[1] = (a[1] as number) * x;\n  out[2] = (a[2] as number) * x;\n  out[3] = (a[3] as number) * y;\n  out[4] = (a[4] as number) * y;\n  out[5] = (a[5] as number) * y;\n  out[6] = (a[6] as number) * z;\n  out[7] = (a[7] as number) * z;\n  out[8] = (a[8] as number) * z;\n  return out;\n}\n\n/**\n * out = mat3 extracted from mat4's upper-left 3x3 (drop the 4th row and 4th column). Returns out.\n *\n * Column-major mapping: mat4 col0 [0..2] / col1 [4..6] / col2 [8..10] → mat3 col0/1/2.\n */\nexport function fromMat4(out: Mat3, m: Mat4Like): Mat3 {\n  out[0] = m[0] as number;\n  out[1] = m[1] as number;\n  out[2] = m[2] as number;\n  out[3] = m[4] as number;\n  out[4] = m[5] as number;\n  out[5] = m[6] as number;\n  out[6] = m[8] as number;\n  out[7] = m[9] as number;\n  out[8] = m[10] as number;\n  return out;\n}\n\n/**\n * out = transpose(invert(upper-left 3x3 of m)) (the normal-transform matrix). Returns out.\n *\n * Used to transform normals from model space to world / view space; when m has a non-uniform\n * scale, normals must use normalMatrix (the upper-left 3x3 of m alone is incorrect).\n *\n * CPU utility; render shaders derive normals from the world transform.\n *\n * @degrade upper-left 3x3 singular -> out = identity (same convention as D-P1, via mat3.invert).\n *\n * @example\n * ```ts\n * const N = mat3.normalMatrix(mat3.create(), modelViewMat);\n * // vertex shader: normal_view = N * normal_model\n * ```\n */\nexport function normalMatrix(out: Mat3, m: Mat4Like): Mat3 {\n  // 1. extract the upper-left 3x3\n  const m00 = m[0] as number;\n  const m01 = m[1] as number;\n  const m02 = m[2] as number;\n  const m10 = m[4] as number;\n  const m11 = m[5] as number;\n  const m12 = m[6] as number;\n  const m20 = m[8] as number;\n  const m21 = m[9] as number;\n  const m22 = m[10] as number;\n\n  // 2. inline invert + transpose (combine the two steps; avoid a temporary allocation)\n  const b01 = m22 * m11 - m12 * m21;\n  const b11 = -m22 * m10 + m12 * m20;\n  const b21 = m21 * m10 - m11 * m20;\n  const det = m00 * b01 + m01 * b11 + m02 * b21;\n\n  if (Math.abs(det) < EPS_DET) {\n    return identity(out);\n  }\n\n  const invDet = 1 / det;\n  // Elements of invert(upper-left), then transpose (swap rows/cols)\n  // invert column-major:\n  //   inv[0]=b01*invDet      inv[3]=b11*invDet      inv[6]=b21*invDet\n  //   inv[1]=...              inv[4]=...              inv[7]=...\n  //   inv[2]=...              inv[5]=...              inv[8]=...\n  // After transpose (i, j) = inv (j, i)\n  // More directly: transposing the invert result = transpose(invert).\n  // The transpose(invert) elements are written out below:\n  out[0] = b01 * invDet;\n  out[3] = (-m22 * m01 + m02 * m21) * invDet;\n  out[6] = (m12 * m01 - m02 * m11) * invDet;\n  out[1] = b11 * invDet;\n  out[4] = (m22 * m00 - m02 * m20) * invDet;\n  out[7] = (-m12 * m00 + m02 * m10) * invDet;\n  out[2] = b21 * invDet;\n  out[5] = (-m21 * m00 + m01 * m20) * invDet;\n  out[8] = (m11 * m00 - m01 * m10) * invDet;\n  return out;\n}\n","// mat4.ts — 4x4 matrix namespace (M3 / T-021 base + T-022 projection)\n//\n// Base functions (T-021): create / clone / identity / equals / multiply / transpose /\n//   invert / scale / translate / rotate / lookAt / compose / decompose / fromQuat /\n//   fromTranslation / fromScaling / fromRotation\n// Projection functions (T-022): perspective / perspectiveNO / perspectiveReverseZ /\n//   orthographic / orthographicNO / orthographicReverseZ\n//\n// Surface: 23+ functions (≥ 22 lower bound).\n//\n// Memory layout: column-major 16 floats (compatible with WebGL/WebGPU shader uniforms);\n// index mapping m[col*4 + row]. translation lives in col 3 → indices 12, 13, 14.\n//\n// Naming convention (D-3):\n//   - perspective / orthographic = WebGPU [0, 1] NDC (short names go to the primary target)\n//   - perspectiveNO / orthographicNO = WebGL/OpenGL [-1, 1] NDC\n//   - perspectiveReverseZ / orthographicReverseZ = reversed-Z (far→0, near→1)\n//\n// Degenerate convention:\n//   - invert(singular) → out = identity (D-P1; returns out, not null)\n//   - lookAt(eye=target) → out = identity (D-P17; same convention as D-P1)\n//   - perspective(near>=far) / fovy<=0 / aspect<=0 → numerically undefined but does not throw\n//\n// Four ironclad rules (gl-matrix wiki / research §F1):\n//   1. Out-param first; 2. Aliasing-safe; 3. Module-as-namespace; 4. Float32Array by default.\n//\n// Related: requirements §Surface mat4 lower bound 22 + AC-04 three projection tiers complete +\n//          AC-05 reversed-Z fixture + AC-06 never raises (silent degrade) + AC-08 invert returns out, not null;\n//          plan-strategy §6 M3 + D-P1/D-P3/D-P17 + R-P1 aliasing-singular;\n//          wiki/wgpu-matrix-overview.md / gl-matrix-overview.md / reversed-z-projection.md.\n//\n// Degenerate-semantics registry (plan-strategy.md §appendix A numbering; mat portion has 5 of the\n// AC-07 ≥ 8 hard lower-bound entries):\n//   #3  mat4.invert(singular)              → out = identity (D-P1)\n//   #4  mat4.lookAt(eye=target)            → out = identity (D-P17)\n//   #5  mat4.lookAt(up // forward)         → auto-select alternative up\n//   #6  mat4.decompose(m with shear)       → silent best-effort decomposition\n//   #7  mat4.perspective(near>=far) etc.   → numerically undefined but does not throw\n\nimport { EPS_DET, EPS_NORMALIZE } from './_internal/epsilon';\nimport type { Mat4, Mat4Like, Quat, QuatLike, Vec3, Vec3Like } from './types';\nimport * as vec3 from './vec3';\n\nexport type { Mat4, Mat4Like };\n\n/** Create a Mat4 (default all zero; callers usually call identity() right after). */\nexport function create(): Mat4 {\n  return new Float32Array(16) as Mat4;\n}\n\n/** Allocate a new Mat4 copy. */\nexport function clone(a: Mat4Like): Mat4 {\n  const r = new Float32Array(16) as Mat4;\n  for (let i = 0; i < 16; i++) r[i] = a[i] as number;\n  return r;\n}\n\n/** out = 4x4 identity. Returns out. */\nexport function identity(out: Mat4): Mat4 {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = 1;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 1;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n\n/** Approximate equality: each element differs by ≤ epsilon. NaN inputs always return false. */\nexport function equals(a: Mat4Like, b: Mat4Like, epsilon = 1e-6): boolean {\n  for (let i = 0; i < 16; i++) {\n    const av = a[i] as number;\n    const bv = b[i] as number;\n    if (Number.isNaN(av) || Number.isNaN(bv)) return false;\n    if (Math.abs(av - bv) > epsilon) return false;\n  }\n  return true;\n}\n\n/**\n * out = a * b (column-major matrix multiply). Returns out.\n *\n * Aliasing-safe: out may equal a or b; reads all 32 source elements into locals first.\n */\nexport function multiply(out: Mat4, a: Mat4Like, b: Mat4Like): Mat4 {\n  const a00 = a[0] as number;\n  const a01 = a[1] as number;\n  const a02 = a[2] as number;\n  const a03 = a[3] as number;\n  const a10 = a[4] as number;\n  const a11 = a[5] as number;\n  const a12 = a[6] as number;\n  const a13 = a[7] as number;\n  const a20 = a[8] as number;\n  const a21 = a[9] as number;\n  const a22 = a[10] as number;\n  const a23 = a[11] as number;\n  const a30 = a[12] as number;\n  const a31 = a[13] as number;\n  const a32 = a[14] as number;\n  const a33 = a[15] as number;\n  const b00 = b[0] as number;\n  const b01 = b[1] as number;\n  const b02 = b[2] as number;\n  const b03 = b[3] as number;\n  const b10 = b[4] as number;\n  const b11 = b[5] as number;\n  const b12 = b[6] as number;\n  const b13 = b[7] as number;\n  const b20 = b[8] as number;\n  const b21 = b[9] as number;\n  const b22 = b[10] as number;\n  const b23 = b[11] as number;\n  const b30 = b[12] as number;\n  const b31 = b[13] as number;\n  const b32 = b[14] as number;\n  const b33 = b[15] as number;\n  out[0] = a00 * b00 + a10 * b01 + a20 * b02 + a30 * b03;\n  out[1] = a01 * b00 + a11 * b01 + a21 * b02 + a31 * b03;\n  out[2] = a02 * b00 + a12 * b01 + a22 * b02 + a32 * b03;\n  out[3] = a03 * b00 + a13 * b01 + a23 * b02 + a33 * b03;\n  out[4] = a00 * b10 + a10 * b11 + a20 * b12 + a30 * b13;\n  out[5] = a01 * b10 + a11 * b11 + a21 * b12 + a31 * b13;\n  out[6] = a02 * b10 + a12 * b11 + a22 * b12 + a32 * b13;\n  out[7] = a03 * b10 + a13 * b11 + a23 * b12 + a33 * b13;\n  out[8] = a00 * b20 + a10 * b21 + a20 * b22 + a30 * b23;\n  out[9] = a01 * b20 + a11 * b21 + a21 * b22 + a31 * b23;\n  out[10] = a02 * b20 + a12 * b21 + a22 * b22 + a32 * b23;\n  out[11] = a03 * b20 + a13 * b21 + a23 * b22 + a33 * b23;\n  out[12] = a00 * b30 + a10 * b31 + a20 * b32 + a30 * b33;\n  out[13] = a01 * b30 + a11 * b31 + a21 * b32 + a31 * b33;\n  out[14] = a02 * b30 + a12 * b31 + a22 * b32 + a32 * b33;\n  out[15] = a03 * b30 + a13 * b31 + a23 * b32 + a33 * b33;\n  return out;\n}\n\n/** out = transpose(a). Returns out. Aliasing-safe (transpose(m, m) is legal). */\nexport function transpose(out: Mat4, a: Mat4Like): Mat4 {\n  const a01 = a[1] as number;\n  const a02 = a[2] as number;\n  const a03 = a[3] as number;\n  const a12 = a[6] as number;\n  const a13 = a[7] as number;\n  const a23 = a[11] as number;\n  const a10 = a[4] as number;\n  const a20 = a[8] as number;\n  const a30 = a[12] as number;\n  const a21 = a[9] as number;\n  const a31 = a[13] as number;\n  const a32 = a[14] as number;\n  out[0] = a[0] as number;\n  out[1] = a10;\n  out[2] = a20;\n  out[3] = a30;\n  out[4] = a01;\n  out[5] = a[5] as number;\n  out[6] = a21;\n  out[7] = a31;\n  out[8] = a02;\n  out[9] = a12;\n  out[10] = a[10] as number;\n  out[11] = a32;\n  out[12] = a03;\n  out[13] = a13;\n  out[14] = a23;\n  out[15] = a[15] as number;\n  return out;\n}\n\n/**\n * out = invert(a). Returns out.\n *\n * @degrade a singular (|det| < EPS_DET) → out = identity (D-P1; AC-08: returns out, not null).\n * @degrade aliasing invert(out, out) where out is singular → reads 16 elements into locals before\n *          falling back; R-P1 pins the behavior so that out is overwritten with identity.\n *\n * @example\n * ```ts\n * import { mat4 } from '@forgeax/engine-math';\n *\n * const inv = mat4.invert(mat4.create(), m);\n * // If m is singular, inv === identity (no NaN, no null); callers may keep using it.\n * // For explicit diagnostics, the caller builds its own guard (the library never console.warns):\n * //   const EPS = 1e-12;\n * //   if (mat4.equals(inv, mat4.identity(mat4.create()))) console.warn('mat4.invert: singular input');\n * ```\n */\nexport function invert(out: Mat4, a: Mat4Like): Mat4 {\n  const a00 = a[0] as number;\n  const a01 = a[1] as number;\n  const a02 = a[2] as number;\n  const a03 = a[3] as number;\n  const a10 = a[4] as number;\n  const a11 = a[5] as number;\n  const a12 = a[6] as number;\n  const a13 = a[7] as number;\n  const a20 = a[8] as number;\n  const a21 = a[9] as number;\n  const a22 = a[10] as number;\n  const a23 = a[11] as number;\n  const a30 = a[12] as number;\n  const a31 = a[13] as number;\n  const a32 = a[14] as number;\n  const a33 = a[15] as number;\n\n  const b00 = a00 * a11 - a01 * a10;\n  const b01 = a00 * a12 - a02 * a10;\n  const b02 = a00 * a13 - a03 * a10;\n  const b03 = a01 * a12 - a02 * a11;\n  const b04 = a01 * a13 - a03 * a11;\n  const b05 = a02 * a13 - a03 * a12;\n  const b06 = a20 * a31 - a21 * a30;\n  const b07 = a20 * a32 - a22 * a30;\n  const b08 = a20 * a33 - a23 * a30;\n  const b09 = a21 * a32 - a22 * a31;\n  const b10 = a21 * a33 - a23 * a31;\n  const b11 = a22 * a33 - a23 * a32;\n\n  const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n  if (Math.abs(det) < EPS_DET) {\n    return identity(out);\n  }\n\n  const invDet = 1 / det;\n  out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * invDet;\n  out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * invDet;\n  out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * invDet;\n  out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * invDet;\n  out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * invDet;\n  out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * invDet;\n  out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * invDet;\n  out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * invDet;\n  out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * invDet;\n  out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * invDet;\n  out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * invDet;\n  out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * invDet;\n  out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * invDet;\n  out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * invDet;\n  out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * invDet;\n  out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * invDet;\n  return out;\n}\n\n/**\n * out = a * Scale(v). Returns out. Aliasing-safe (reads the source diagonal columns into locals first).\n */\nexport function scale(out: Mat4, a: Mat4Like, v: Vec3Like): Mat4 {\n  const x = v[0] as number;\n  const y = v[1] as number;\n  const z = v[2] as number;\n  out[0] = (a[0] as number) * x;\n  out[1] = (a[1] as number) * x;\n  out[2] = (a[2] as number) * x;\n  out[3] = (a[3] as number) * x;\n  out[4] = (a[4] as number) * y;\n  out[5] = (a[5] as number) * y;\n  out[6] = (a[6] as number) * y;\n  out[7] = (a[7] as number) * y;\n  out[8] = (a[8] as number) * z;\n  out[9] = (a[9] as number) * z;\n  out[10] = (a[10] as number) * z;\n  out[11] = (a[11] as number) * z;\n  out[12] = a[12] as number;\n  out[13] = a[13] as number;\n  out[14] = a[14] as number;\n  out[15] = a[15] as number;\n  return out;\n}\n\n/**\n * out = a * Translate(v) (translate by v in a's local coordinates). Returns out. Aliasing-safe.\n */\nexport function translate(out: Mat4, a: Mat4Like, v: Vec3Like): Mat4 {\n  const x = v[0] as number;\n  const y = v[1] as number;\n  const z = v[2] as number;\n  if (a === out) {\n    out[12] =\n      (a[0] as number) * x + (a[4] as number) * y + (a[8] as number) * z + (a[12] as number);\n    out[13] =\n      (a[1] as number) * x + (a[5] as number) * y + (a[9] as number) * z + (a[13] as number);\n    out[14] =\n      (a[2] as number) * x + (a[6] as number) * y + (a[10] as number) * z + (a[14] as number);\n    out[15] =\n      (a[3] as number) * x + (a[7] as number) * y + (a[11] as number) * z + (a[15] as number);\n    return out;\n  }\n  const a00 = a[0] as number;\n  const a01 = a[1] as number;\n  const a02 = a[2] as number;\n  const a03 = a[3] as number;\n  const a10 = a[4] as number;\n  const a11 = a[5] as number;\n  const a12 = a[6] as number;\n  const a13 = a[7] as number;\n  const a20 = a[8] as number;\n  const a21 = a[9] as number;\n  const a22 = a[10] as number;\n  const a23 = a[11] as number;\n  out[0] = a00;\n  out[1] = a01;\n  out[2] = a02;\n  out[3] = a03;\n  out[4] = a10;\n  out[5] = a11;\n  out[6] = a12;\n  out[7] = a13;\n  out[8] = a20;\n  out[9] = a21;\n  out[10] = a22;\n  out[11] = a23;\n  out[12] = a00 * x + a10 * y + a20 * z + (a[12] as number);\n  out[13] = a01 * x + a11 * y + a21 * z + (a[13] as number);\n  out[14] = a02 * x + a12 * y + a22 * z + (a[14] as number);\n  out[15] = a03 * x + a13 * y + a23 * z + (a[15] as number);\n  return out;\n}\n\n/**\n * out = a * Rotate(axis, rad) (build the rotation via the Rodrigues formula then right-multiply a).\n * Returns out.\n *\n * @degrade axis is the zero vector (lengthSq < EPS_NORMALIZE) → out = a (no rotation; identity behavior).\n *\n * @example\n * ```ts\n * mat4.rotate(out, mat4.identity(mat4.create()), [0, 1, 0], Math.PI / 2);\n * // Guard: if (vec3.lengthSq(axis) < EPS_NORMALIZE) skip;\n * ```\n */\nexport function rotate(out: Mat4, a: Mat4Like, axis: Vec3Like, rad: number): Mat4 {\n  let x = axis[0] as number;\n  let y = axis[1] as number;\n  let z = axis[2] as number;\n  const lenSq = x * x + y * y + z * z;\n  if (lenSq < EPS_NORMALIZE) {\n    // zero-axis degenerate: copy a to out (no rotation)\n    if (out !== a) {\n      for (let i = 0; i < 16; i++) out[i] = a[i] as number;\n    }\n    return out;\n  }\n  const invLen = 1 / Math.sqrt(lenSq);\n  x *= invLen;\n  y *= invLen;\n  z *= invLen;\n  const s = Math.sin(rad);\n  const c = Math.cos(rad);\n  const t = 1 - c;\n\n  // rotation matrix R column-major (3x3 embedded into the upper-left of 4x4)\n  const r00 = x * x * t + c;\n  const r01 = y * x * t + z * s;\n  const r02 = z * x * t - y * s;\n  const r10 = x * y * t - z * s;\n  const r11 = y * y * t + c;\n  const r12 = z * y * t + x * s;\n  const r20 = x * z * t + y * s;\n  const r21 = y * z * t - x * s;\n  const r22 = z * z * t + c;\n\n  // out = a * R (read a then write out; aliasing-safe)\n  const a00 = a[0] as number;\n  const a01 = a[1] as number;\n  const a02 = a[2] as number;\n  const a03 = a[3] as number;\n  const a10 = a[4] as number;\n  const a11 = a[5] as number;\n  const a12 = a[6] as number;\n  const a13 = a[7] as number;\n  const a20 = a[8] as number;\n  const a21 = a[9] as number;\n  const a22 = a[10] as number;\n  const a23 = a[11] as number;\n\n  out[0] = a00 * r00 + a10 * r01 + a20 * r02;\n  out[1] = a01 * r00 + a11 * r01 + a21 * r02;\n  out[2] = a02 * r00 + a12 * r01 + a22 * r02;\n  out[3] = a03 * r00 + a13 * r01 + a23 * r02;\n  out[4] = a00 * r10 + a10 * r11 + a20 * r12;\n  out[5] = a01 * r10 + a11 * r11 + a21 * r12;\n  out[6] = a02 * r10 + a12 * r11 + a22 * r12;\n  out[7] = a03 * r10 + a13 * r11 + a23 * r12;\n  out[8] = a00 * r20 + a10 * r21 + a20 * r22;\n  out[9] = a01 * r20 + a11 * r21 + a21 * r22;\n  out[10] = a02 * r20 + a12 * r21 + a22 * r22;\n  out[11] = a03 * r20 + a13 * r21 + a23 * r22;\n  out[12] = a[12] as number;\n  out[13] = a[13] as number;\n  out[14] = a[14] as number;\n  out[15] = a[15] as number;\n  return out;\n}\n\n/**\n * out = view matrix lookAt(eye, target, up) (right-handed; camera looks toward -z at target).\n * Returns out.\n *\n * @degrade eye === target (distanceSq < EPS_NORMALIZE) → out = identity (D-P17, same convention as D-P1).\n * @degrade up collinear with the view direction (cross degenerate) → auto-select an alternative up\n *          (first (0,0,1), then (0,1,0)).\n *\n * @example\n * ```ts\n * mat4.lookAt(out, [0, 0, 5], [0, 0, 0], [0, 1, 0]);\n * // Guard: if (vec3.distanceSq(eye, target) < EPS_NORMALIZE) skip;\n * ```\n */\nexport function lookAt(out: Mat4, eye: Vec3Like, target: Vec3Like, up: Vec3Like): Mat4 {\n  const ex = eye[0] as number;\n  const ey = eye[1] as number;\n  const ez = eye[2] as number;\n  const tx = target[0] as number;\n  const ty = target[1] as number;\n  const tz = target[2] as number;\n  const upx = up[0] as number;\n  const upy = up[1] as number;\n  const upz = up[2] as number;\n\n  // forward = normalize(eye - target) (right-handed: camera looks toward -z, so the z axis = eye - target)\n  let fx = ex - tx;\n  let fy = ey - ty;\n  let fz = ez - tz;\n  const fLenSq = fx * fx + fy * fy + fz * fz;\n  if (fLenSq < EPS_NORMALIZE) {\n    return identity(out);\n  }\n  const fInv = 1 / Math.sqrt(fLenSq);\n  fx *= fInv;\n  fy *= fInv;\n  fz *= fInv;\n\n  // right = normalize(cross(up, forward))\n  let rx = upy * fz - upz * fy;\n  let ry = upz * fx - upx * fz;\n  let rz = upx * fy - upy * fx;\n  let rLenSq = rx * rx + ry * ry + rz * rz;\n  if (rLenSq < EPS_NORMALIZE) {\n    // up collinear with forward: pick alternative up = (0, 0, 1); if still collinear pick (0, 1, 0)\n    rx = 0 * fz - 1 * fy;\n    ry = 1 * fx - 0 * fz;\n    rz = 0 * fy - 0 * fx;\n    rLenSq = rx * rx + ry * ry + rz * rz;\n    if (rLenSq < EPS_NORMALIZE) {\n      rx = 0 * fz - 0 * fy;\n      ry = 0 * fx - 1 * fz;\n      rz = 1 * fy - 0 * fx;\n      rLenSq = rx * rx + ry * ry + rz * rz;\n    }\n  }\n  const rInv = 1 / Math.sqrt(rLenSq);\n  rx *= rInv;\n  ry *= rInv;\n  rz *= rInv;\n\n  // newUp = cross(forward, right)\n  const ux = fy * rz - fz * ry;\n  const uy = fz * rx - fx * rz;\n  const uz = fx * ry - fy * rx;\n\n  // column-major: col0 = right, col1 = newUp, col2 = forward, col3 = -view * eye\n  out[0] = rx;\n  out[1] = ux;\n  out[2] = fx;\n  out[3] = 0;\n  out[4] = ry;\n  out[5] = uy;\n  out[6] = fy;\n  out[7] = 0;\n  out[8] = rz;\n  out[9] = uz;\n  out[10] = fz;\n  out[11] = 0;\n  out[12] = -(rx * ex + ry * ey + rz * ez);\n  out[13] = -(ux * ex + uy * ey + uz * ez);\n  out[14] = -(fx * ex + fy * ey + fz * ez);\n  out[15] = 1;\n  return out;\n}\n\n/**\n * out = T(translation) * R(rotation) * S(scale) (TRS affine composition). Returns out.\n */\nexport function compose(out: Mat4, t: Vec3Like, r: QuatLike, s: Vec3Like): Mat4 {\n  // build R (from quat) first, then scale each column, finally write translation\n  const x = r[0] as number;\n  const y = r[1] as number;\n  const z = r[2] as number;\n  const w = r[3] as number;\n  const x2 = x + x;\n  const y2 = y + y;\n  const z2 = z + z;\n  const xx = x * x2;\n  const xy = x * y2;\n  const xz = x * z2;\n  const yy = y * y2;\n  const yz = y * z2;\n  const zz = z * z2;\n  const wx = w * x2;\n  const wy = w * y2;\n  const wz = w * z2;\n  const sx = s[0] as number;\n  const sy = s[1] as number;\n  const sz = s[2] as number;\n\n  out[0] = (1 - (yy + zz)) * sx;\n  out[1] = (xy + wz) * sx;\n  out[2] = (xz - wy) * sx;\n  out[3] = 0;\n  out[4] = (xy - wz) * sy;\n  out[5] = (1 - (xx + zz)) * sy;\n  out[6] = (yz + wx) * sy;\n  out[7] = 0;\n  out[8] = (xz + wy) * sz;\n  out[9] = (yz - wx) * sz;\n  out[10] = (1 - (xx + yy)) * sz;\n  out[11] = 0;\n  out[12] = t[0] as number;\n  out[13] = t[1] as number;\n  out[14] = t[2] as number;\n  out[15] = 1;\n  return out;\n}\n\n/**\n * Decompose m into (translation, rotation quat, scale).\n *\n * @degrade m contains shear (non-pure affine) → silent best-effort decomposition (matches\n * Three.js behavior; does not throw).\n *\n * @example\n * ```ts\n * const t = vec3.create(); const r = quat.create(); const s = vec3.create();\n * mat4.decompose(t, r, s, m);\n * // Guard: callers should avoid introducing shear matrices at the ECS-design layer.\n * ```\n */\nexport function decompose(out_t: Vec3, out_r: Quat, out_s: Vec3, m: Mat4Like): void {\n  // translation\n  out_t[0] = m[12] as number;\n  out_t[1] = m[13] as number;\n  out_t[2] = m[14] as number;\n\n  // length of each column = scale\n  const sx = Math.hypot(m[0] as number, m[1] as number, m[2] as number);\n  const sy = Math.hypot(m[4] as number, m[5] as number, m[6] as number);\n  const sz = Math.hypot(m[8] as number, m[9] as number, m[10] as number);\n\n  // handle the determinant sign: negative det → flip sx\n  // simplified det check: use the upper-left 3x3 determinant\n  const det =\n    (m[0] as number) *\n      ((m[5] as number) * (m[10] as number) - (m[6] as number) * (m[9] as number)) -\n    (m[1] as number) *\n      ((m[4] as number) * (m[10] as number) - (m[6] as number) * (m[8] as number)) +\n    (m[2] as number) * ((m[4] as number) * (m[9] as number) - (m[5] as number) * (m[8] as number));\n  const sxFinal = det < 0 ? -sx : sx;\n\n  out_s[0] = sxFinal;\n  out_s[1] = sy;\n  out_s[2] = sz;\n\n  // extract rotation: divide each column of m's upper-left 3x3 by scale to get the pure rotation matrix → convert to quat\n  const invSx = sxFinal === 0 ? 0 : 1 / sxFinal;\n  const invSy = sy === 0 ? 0 : 1 / sy;\n  const invSz = sz === 0 ? 0 : 1 / sz;\n  const r00 = (m[0] as number) * invSx;\n  const r01 = (m[1] as number) * invSx;\n  const r02 = (m[2] as number) * invSx;\n  const r10 = (m[4] as number) * invSy;\n  const r11 = (m[5] as number) * invSy;\n  const r12 = (m[6] as number) * invSy;\n  const r20 = (m[8] as number) * invSz;\n  const r21 = (m[9] as number) * invSz;\n  const r22 = (m[10] as number) * invSz;\n\n  // rotation matrix → quat (Shoemake's method; case-split on the sign of trace)\n  const trace = r00 + r11 + r22;\n  if (trace > 0) {\n    const s = 0.5 / Math.sqrt(trace + 1);\n    out_r[0] = (r12 - r21) * s;\n    out_r[1] = (r20 - r02) * s;\n    out_r[2] = (r01 - r10) * s;\n    out_r[3] = 0.25 / s;\n  } else if (r00 > r11 && r00 > r22) {\n    const s = 2 * Math.sqrt(1 + r00 - r11 - r22);\n    out_r[0] = 0.25 * s;\n    out_r[1] = (r10 + r01) / s;\n    out_r[2] = (r20 + r02) / s;\n    out_r[3] = (r12 - r21) / s;\n  } else if (r11 > r22) {\n    const s = 2 * Math.sqrt(1 + r11 - r00 - r22);\n    out_r[0] = (r10 + r01) / s;\n    out_r[1] = 0.25 * s;\n    out_r[2] = (r21 + r12) / s;\n    out_r[3] = (r20 - r02) / s;\n  } else {\n    const s = 2 * Math.sqrt(1 + r22 - r00 - r11);\n    out_r[0] = (r20 + r02) / s;\n    out_r[1] = (r21 + r12) / s;\n    out_r[2] = 0.25 * s;\n    out_r[3] = (r01 - r10) / s;\n  }\n}\n\n/** out = 4x4 rotation matrix from quaternion (no translation, no scale). Returns out. */\nexport function fromQuat(out: Mat4, q: QuatLike): Mat4 {\n  const x = q[0] as number;\n  const y = q[1] as number;\n  const z = q[2] as number;\n  const w = q[3] as number;\n  const x2 = x + x;\n  const y2 = y + y;\n  const z2 = z + z;\n  const xx = x * x2;\n  const xy = x * y2;\n  const xz = x * z2;\n  const yy = y * y2;\n  const yz = y * z2;\n  const zz = z * z2;\n  const wx = w * x2;\n  const wy = w * y2;\n  const wz = w * z2;\n  out[0] = 1 - (yy + zz);\n  out[1] = xy + wz;\n  out[2] = xz - wy;\n  out[3] = 0;\n  out[4] = xy - wz;\n  out[5] = 1 - (xx + zz);\n  out[6] = yz + wx;\n  out[7] = 0;\n  out[8] = xz + wy;\n  out[9] = yz - wx;\n  out[10] = 1 - (xx + yy);\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n\n/** out = pure translation matrix (translation added to identity). Returns out. */\nexport function fromTranslation(out: Mat4, v: Vec3Like): Mat4 {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = 1;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 1;\n  out[11] = 0;\n  out[12] = v[0] as number;\n  out[13] = v[1] as number;\n  out[14] = v[2] as number;\n  out[15] = 1;\n  return out;\n}\n\n/** out = pure scaling matrix diag(v.x, v.y, v.z, 1). Returns out. */\nexport function fromScaling(out: Mat4, v: Vec3Like): Mat4 {\n  out[0] = v[0] as number;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = v[1] as number;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = v[2] as number;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n\n/**\n * out = pure rotation matrix from axis-angle. Returns out.\n *\n * @degrade axis is the zero vector → out = identity (same convention as rotate).\n *\n * @example\n * ```ts\n * mat4.fromRotation(out, [0, 1, 0], Math.PI / 2);\n * mat4.fromRotation(out, [0, 0, 0], 1);  // → identity (zero-axis degenerate, AC-06 no throw)\n * ```\n */\nexport function fromRotation(out: Mat4, axis: Vec3Like, rad: number): Mat4 {\n  let x = axis[0] as number;\n  let y = axis[1] as number;\n  let z = axis[2] as number;\n  const lenSq = x * x + y * y + z * z;\n  if (lenSq < EPS_NORMALIZE) {\n    return identity(out);\n  }\n  const invLen = 1 / Math.sqrt(lenSq);\n  x *= invLen;\n  y *= invLen;\n  z *= invLen;\n  const s = Math.sin(rad);\n  const c = Math.cos(rad);\n  const t = 1 - c;\n  out[0] = x * x * t + c;\n  out[1] = y * x * t + z * s;\n  out[2] = z * x * t - y * s;\n  out[3] = 0;\n  out[4] = x * y * t - z * s;\n  out[5] = y * y * t + c;\n  out[6] = z * y * t + x * s;\n  out[7] = 0;\n  out[8] = x * z * t + y * s;\n  out[9] = y * z * t - x * s;\n  out[10] = z * z * t + c;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n\n// ============================================================\n// Projection family (T-022) — three perspective tiers + three orthographic tiers\n// ============================================================\n//\n// Naming convention (D-3 + wiki/wgpu-matrix-overview / wiki/gl-matrix-overview):\n//   `perspective` / `orthographic`             = WebGPU [0, 1] NDC (short names borrowed from wgpu-matrix)\n//   `perspectiveNO` / `orthographicNO`         = WebGL/OpenGL [-1, 1] NDC (NO=Negative-One, borrowed from gl-matrix)\n//   `perspectiveReverseZ` / `orthographicReverseZ` = reversed-Z (far→0, near→1; covers finite + infinite)\n//\n// AC-04 three projection tiers complete + AC-05 reversed-Z numeric fixture (error ≤ 1e-5)\n// + AC-06 never raises (silent degrade).\n// reversed-Z numeric correctness: see wiki/reversed-z-projection.md §7.2 / §7.3 / §7.4.\n\n/**\n * out = perspective projection (**WebGPU [0, 1] NDC** short name, D-3). Returns out.\n *\n * Right-handed; z_eye negative values lie in the frustum; near → ndc_z=0, far → ndc_z=1.\n * Naming borrowed from wgpu-matrix (short name for WebGPU), unlike gl-matrix (short name for WebGL).\n * Supports both finite far and infinite far (far=Infinity, aligned with wgpu-matrix\n * `m[10]=-1, m[14]=-near`).\n *\n * @degrade near >= far or fovy <= 0 or aspect <= 0 → numerically undefined but does not throw\n * (plan §appendix A #7).\n *\n * @example\n * ```ts\n * mat4.perspective(out, Math.PI / 4, canvas.width / canvas.height, 0.1, 1000);\n * mat4.perspective(out, Math.PI / 4, aspect, 0.1, Infinity); // infinite-far trick\n * // Guard: if (!(near < far && fovy > 0 && aspect > 0)) handleInvalid();\n * ```\n */\nexport function perspective(\n  out: Mat4,\n  fovYRadians: number,\n  aspect: number,\n  near: number,\n  far: number,\n): Mat4 {\n  const f = 1 / Math.tan(fovYRadians / 2);\n  out[0] = f / aspect;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = f;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[11] = -1;\n  out[12] = 0;\n  out[13] = 0;\n  out[15] = 0;\n\n  if (far === Number.POSITIVE_INFINITY) {\n    // infinite-far trick (aligned with wgpu-matrix): m[10]=-1, m[14]=-near\n    out[10] = -1;\n    out[14] = -near;\n  } else {\n    const nf = 1 / (near - far);\n    out[10] = far * nf;\n    out[14] = far * near * nf;\n  }\n  return out;\n}\n\n/**\n * out = perspective projection (**WebGL/OpenGL [-1, 1] NDC**; *NO* = Negative-One, borrowed from gl-matrix).\n *\n * Right-handed, near → ndc_z=-1, far → ndc_z=+1.\n *\n * @degrade Same as perspective.\n *\n * @example\n * ```ts\n * mat4.perspectiveNO(out, Math.PI / 4, canvas.width / canvas.height, 0.1, 1000);\n * mat4.perspectiveNO(out, Math.PI / 4, aspect, 0.1, Infinity); // infinite-far\n * // Guard: if (!(near < far && fovy > 0 && aspect > 0)) handleInvalid();\n * ```\n */\nexport function perspectiveNO(\n  out: Mat4,\n  fovYRadians: number,\n  aspect: number,\n  near: number,\n  far: number,\n): Mat4 {\n  const f = 1 / Math.tan(fovYRadians / 2);\n  out[0] = f / aspect;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = f;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[11] = -1;\n  out[12] = 0;\n  out[13] = 0;\n  out[15] = 0;\n\n  if (far === Number.POSITIVE_INFINITY) {\n    out[10] = -1;\n    out[14] = -2 * near;\n  } else {\n    const nf = 1 / (near - far);\n    out[10] = (far + near) * nf;\n    out[14] = 2 * far * near * nf;\n  }\n  return out;\n}\n\n/**\n * out = reversed-Z perspective projection (**WebGPU [0, 1] NDC, near→1 far→0**). Returns out.\n *\n * Precision gain: matches the float dense region ([0, 0.01]) to the slowly-varying far end of 1/z.\n * Under the standard test conditions `near=0.1, far=10000`, NVIDIA reports a reversed-Z + float32\n * depth error rate of 0% (vs. high error rate for the standard mapping). See\n * `.forgeax-harness/knowledge-base/wiki/reversed-z-projection.md` §5.\n *\n * GPU-side companion switches (5 places must be flipped together):\n *   1. depthCompare: 'greater' (vs 'less')\n *   2. depthClearValue: 0.0 (vs 1.0)\n *   3. depth format: 'depth32float' (mandatory; fixed-point loses most of the gain)\n *   4. depth bias: inverted (avoid worsening z-fighting)\n *   5. multiple passes must share the reversed-Z convention\n *\n * Supports finite and infinite far (from wiki §3.3 / §4.2 derivations):\n *   - finite: m[10]=near/(far-near), m[14]=near*far/(far-near)\n *   - infinite (far=Infinity): m[10]=0, m[14]=near (lim f→∞ limit values)\n *\n * Numeric fixture (AC-05 error ≤ 1e-5): see __tests__/_fixtures.ts.\n *\n * @degrade Same as perspective.\n *\n * @example\n * ```ts\n * mat4.perspectiveReverseZ(out, Math.PI / 4, aspect, 0.1, 100);\n * mat4.perspectiveReverseZ(out, Math.PI / 4, aspect, 0.1, Infinity); // infinite far\n * // GPU companion: pipeline.depthCompare = 'greater'; passDesc.depthClearValue = 0.0;\n * ```\n */\nexport function perspectiveReverseZ(\n  out: Mat4,\n  fovYRadians: number,\n  aspect: number,\n  near: number,\n  far: number,\n): Mat4 {\n  const f = 1 / Math.tan(fovYRadians / 2);\n  out[0] = f / aspect;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = f;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[11] = -1;\n  out[12] = 0;\n  out[13] = 0;\n  out[15] = 0;\n\n  if (far === Number.POSITIVE_INFINITY) {\n    out[10] = 0;\n    out[14] = near;\n  } else {\n    const fn = 1 / (far - near);\n    out[10] = near * fn;\n    out[14] = near * far * fn;\n  }\n  return out;\n}\n\n/**\n * out = orthographic projection (**WebGPU [0, 1] NDC** short name, D-3). Returns out.\n *\n * @degrade near >= far or left >= right or top <= bottom → numerically undefined but does not throw.\n *\n * @example\n * ```ts\n * mat4.orthographic(out, -10, 10, 10, -10, 0.1, 100);\n * // Guard: if (!(left < right && top > bottom && near < far)) handleInvalid();\n * ```\n */\nexport function orthographic(\n  out: Mat4,\n  left: number,\n  right: number,\n  top: number,\n  bottom: number,\n  near: number,\n  far: number,\n): Mat4 {\n  const lr = 1 / (left - right);\n  const bt = 1 / (bottom - top);\n  const nf = 1 / (near - far);\n  out[0] = -2 * lr;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = -2 * bt;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = nf; // [0,1] NDC: near→0, far→1 → m[10] = 1/(near-far), m[14] = near/(near-far)\n  out[11] = 0;\n  out[12] = (left + right) * lr;\n  out[13] = (top + bottom) * bt;\n  out[14] = near * nf;\n  out[15] = 1;\n  return out;\n}\n\n/** out = orthographic projection (**WebGL/OpenGL [-1, 1] NDC**, *NO*). Returns out. */\nexport function orthographicNO(\n  out: Mat4,\n  left: number,\n  right: number,\n  top: number,\n  bottom: number,\n  near: number,\n  far: number,\n): Mat4 {\n  const lr = 1 / (left - right);\n  const bt = 1 / (bottom - top);\n  const nf = 1 / (near - far);\n  out[0] = -2 * lr;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = -2 * bt;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 2 * nf; // [-1,1] NDC: near→-1, far→1\n  out[11] = 0;\n  out[12] = (left + right) * lr;\n  out[13] = (top + bottom) * bt;\n  out[14] = (near + far) * nf;\n  out[15] = 1;\n  return out;\n}\n\n/**\n * out = reversed-Z orthographic projection (**WebGPU [0, 1] NDC, near→1 far→0**;\n * D-P3 self-extension).\n *\n * Pairs with perspectiveReverseZ to form a symmetric three-tier surface; in orthographic\n * projection the reversed-Z precision gain is small (ortho is linear in z), but it is kept to\n * avoid LLM single-pass-scan cognitive load (charter proposition 1).\n * Note: this function is an @forgeax/engine-math self-extension; wgpu-matrix / gl-matrix have no matching\n * name (see plan-strategy D-P3 + README quick-ref table footnote).\n */\nexport function orthographicReverseZ(\n  out: Mat4,\n  left: number,\n  right: number,\n  top: number,\n  bottom: number,\n  near: number,\n  far: number,\n): Mat4 {\n  const lr = 1 / (left - right);\n  const bt = 1 / (bottom - top);\n  const fn = 1 / (far - near); // reversed-Z [0,1]: near→1, far→0\n  out[0] = -2 * lr;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = -2 * bt;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  // Derivation: -m[10]*near + m[14] = 1, -m[10]*far + m[14] = 0\n  //   → m[10] = 1/(far-near), m[14] = far/(far-near)\n  out[10] = fn;\n  out[11] = 0;\n  out[12] = (left + right) * lr;\n  out[13] = (top + bottom) * bt;\n  out[14] = far * fn;\n  out[15] = 1;\n  return out;\n}\n\n// ============================================================\n// Transform reverse surface (M1 / t6) — mat4 → vec3 cross-type transforms\n// ============================================================\n//\n// 3 functions / +3 surface (mat4 23 → 26 / total 115 → 119, AC-03):\n//   - transformVec3: (x, y, z, 1) multiplied by 4×4 + perspective divide + w'=0 explicit guard (D-4 silent)\n//   - transformPoint: ES alias of transformVec3 (OQ-1 / S-1, saves 16 LOC)\n//   - transformDirection: takes m's upper-left 3×3 (no translation column) + vec3.normalize (OQ-2 / S-2)\n//\n// Degenerate convention (D-4 library-wide silent fall-back):\n//   - transformVec3 / transformPoint: w' = 0 (perspective divide by zero) → out = (0, 0, 0)\n//   - transformDirection: |out| = 0 → vec3.normalize silently falls back to (0, 0, 0)\n//\n// Related: requirements §3.1 mat4 rows 1/2/3 + §11 surface full table mat4 23→26;\n//          research Finding 1 (alias evidence) + Finding 2 (take 3×3 + normalize) +\n//          Finding 4 (w'=0 explicit guard stricter than upstreams);\n//          plan-strategy §2 S-1 / S-2 + §3 R-1 countermeasure + §6 M1 scope section.\n\n/**\n * out = M * (v.x, v.y, v.z, 1) (with perspective divide by w'). Returns out.\n *\n * For affine m this is equivalent to transformPoint (treats v as a \"position\" that participates\n * in the transform, including translation).\n * Aliasing-safe: reads v.xyz into locals before writing out.\n *\n * @degrade w' = 0 (perspective divide by zero) → out = (0, 0, 0) (D-4 silent convention; avoids\n *          NaN/Infinity propagation; stricter than the implicit 1/0 = Infinity behavior of\n *          Three.js / gl-matrix).\n *\n * @example\n * ```ts\n * mat4.transformVec3(out, projViewModel, v);\n * // Guard: if (out[0] === 0 && out[1] === 0 && out[2] === 0 && wasNonZero(v)) {\n * //   // w'=0 degenerate branch; the caller diagnoses as needed\n * // }\n * ```\n */\nexport function transformVec3(out: Vec3, m: Mat4Like, v: Vec3Like): Vec3 {\n  const x = v[0] as number;\n  const y = v[1] as number;\n  const z = v[2] as number;\n  const m00 = m[0] as number;\n  const m01 = m[1] as number;\n  const m02 = m[2] as number;\n  const m03 = m[3] as number;\n  const m10 = m[4] as number;\n  const m11 = m[5] as number;\n  const m12 = m[6] as number;\n  const m13 = m[7] as number;\n  const m20 = m[8] as number;\n  const m21 = m[9] as number;\n  const m22 = m[10] as number;\n  const m23 = m[11] as number;\n  const m30 = m[12] as number;\n  const m31 = m[13] as number;\n  const m32 = m[14] as number;\n  const m33 = m[15] as number;\n\n  const w = m03 * x + m13 * y + m23 * z + m33;\n  if (w === 0) {\n    // D-4 silent convention: perspective divide by zero → (0, 0, 0)\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    return out;\n  }\n  const invW = 1 / w;\n  out[0] = (m00 * x + m10 * y + m20 * z + m30) * invW;\n  out[1] = (m01 * x + m11 * y + m21 * z + m31) * invW;\n  out[2] = (m02 * x + m12 * y + m22 * z + m32) * invW;\n  return out;\n}\n\n/**\n * out = M * (v.x, v.y, v.z, 1) (with perspective divide by w'). Returns out.\n *\n * Treats v as a \"position\", including the translation column (shares the same function body as\n * transformVec3; OQ-1 / S-1).\n * Aliasing-safe; reference-equal with transformVec3: `mat4.transformPoint === mat4.transformVec3`.\n *\n * @degrade w' = 0 (perspective divide by zero) → out = (0, 0, 0) (D-4 silent convention;\n *          same as transformVec3).\n *\n * @example\n * ```ts\n * mat4.transformPoint(out, modelMatrix, [1, 2, 3]);\n * // (1,2,3) → world-space position, including translation\n * ```\n */\nexport const transformPoint = transformVec3;\n\n/**\n * out = normalize(M_3x3 * v) (uses m's upper-left 3×3, no translation column). Returns out.\n *\n * Treats v as a \"direction\" and does **not** apply translation; the result is unit-normalized via\n * `vec3.normalize` (OQ-2 / S-2).\n * Aliasing-safe: reads v.xyz into locals before writing out.\n *\n * @degrade |out| = 0 (singular m + arbitrary v / m_3x3 maps v to the zero vector) → vec3.normalize\n *          silently falls back to (0, 0, 0) (library-wide D-4 convention).\n *\n * @example\n * ```ts\n * const worldNormal = vec3.create();\n * mat4.transformDirection(worldNormal, modelMatrix, localNormal);\n * // Normal-vector transform: ignores translation; a unit-length input + orthogonal matrix\n * // guarantees a unit-length output.\n * ```\n */\nexport function transformDirection(out: Vec3, m: Mat4Like, v: Vec3Like): Vec3 {\n  const x = v[0] as number;\n  const y = v[1] as number;\n  const z = v[2] as number;\n  const m00 = m[0] as number;\n  const m01 = m[1] as number;\n  const m02 = m[2] as number;\n  const m10 = m[4] as number;\n  const m11 = m[5] as number;\n  const m12 = m[6] as number;\n  const m20 = m[8] as number;\n  const m21 = m[9] as number;\n  const m22 = m[10] as number;\n  out[0] = m00 * x + m10 * y + m20 * z;\n  out[1] = m01 * x + m11 * y + m21 * z;\n  out[2] = m02 * x + m12 * y + m22 * z;\n  // S-2: reuse vec3.normalize's silent convention (|out|=0 → out=(0,0,0)); do not inline copy.\n  return vec3.normalize(out, out);\n}\n\n// ============================================================\n// world-mat4 basis / translation accessors\n// (feat-20260601-unify-transform-local-global-mat4-drop-globaltrans M1 w6)\n// ============================================================\n//\n// Decompose a world-space mat4 into its translation + the three orthonormal\n// basis directions. Placed adjacent to transformDirection because they share\n// the same normalization convention (vec3.normalize's |out|=0 → (0,0,0) D-4\n// fallback). The Transform world column (array<f32, 16>) is the producer; the\n// audio listener / camera-orientation consumers read forward/up via these.\n//\n// Layout (column-major, m[col*4 + row]):\n//   col0 = m[0..2]  = right   col1 = m[4..6]  = up\n//   col2 = m[8..10] = forward col3 = m[12..14] = translation\n//\n// Sign (RL-4): getForward returns -normalize(col2) so it aligns with the\n// historical single-quaternion oracle quat.transformVec3(q, (0, 0, -1)) -- a\n// camera/listener looking down -Z in its local frame.\n\n/**\n * World-space translation = col 3 (m[12], m[13], m[14]). Read verbatim, not\n * normalized (translation has magnitude).\n */\nexport function getTranslation(out: Vec3, m: Mat4Like): Vec3 {\n  out[0] = m[12] as number;\n  out[1] = m[13] as number;\n  out[2] = m[14] as number;\n  return out;\n}\n\n/**\n * World-space forward = `-normalize(col2)` (RL-4: -Z look convention; matches\n * `quat.transformVec3(q, [0, 0, -1])`). Degenerate zero column → (0,0,0).\n */\nexport function getForward(out: Vec3, m: Mat4Like): Vec3 {\n  out[0] = -(m[8] as number);\n  out[1] = -(m[9] as number);\n  out[2] = -(m[10] as number);\n  return vec3.normalize(out, out);\n}\n\n/** World-space up = `normalize(col1)`. Degenerate zero column → (0,0,0). */\nexport function getUp(out: Vec3, m: Mat4Like): Vec3 {\n  out[0] = m[4] as number;\n  out[1] = m[5] as number;\n  out[2] = m[6] as number;\n  return vec3.normalize(out, out);\n}\n\n/** World-space right = `normalize(col0)`. Degenerate zero column → (0,0,0). */\nexport function getRight(out: Vec3, m: Mat4Like): Vec3 {\n  out[0] = m[0] as number;\n  out[1] = m[1] as number;\n  out[2] = m[2] as number;\n  return vec3.normalize(out, out);\n}\n\n// ============================================================\n// unproject (feat-20260529-picking-raycasting-screen-to-entity M2 w7)\n// ============================================================\n//\n// Map an NDC point back to world space via the inverse view-projection matrix.\n// Internally constructs vec4 (ndc.x, ndc.y, ndc.z, 1) and delegates to transformVec3,\n// which performs the 4×4 multiply + perspective divide by w'.\n//\n// WebGPU [0,1] NDC z convention (D-NDC / research Finding 6):\n//   near plane → z=0, far plane → z=1\n//\n// Related: plan-tasks.json w7; requirements in-scope #3;\n//          research Finding 3 (transformVec3 built-in w-divide).\n\n/**\n * Unproject an NDC point to world space.\n *\n * `ndcPoint` is in NDC space: x,y ∈ [-1,1], z ∈ [0,1] (WebGPU convention).\n * `invVP` is the inverse of the view-projection matrix.\n *\n * @example\n * ```ts\n * const worldPoint = vec3.create();\n * mat4.unproject(worldPoint, [0, 0, 0], invVP); // near-plane centre → world\n * mat4.unproject(worldPoint, [0, 0, 1], invVP); // far-plane centre → world\n * ```\n */\nexport function unproject(out: Vec3, ndcPoint: Vec3Like, invVP: Mat4Like): Vec3 {\n  return transformVec3(out, invVP, ndcPoint);\n}\n\n// ============================================================\n// projectPoint — world → NDC dual of unproject\n// (roadmap 2026-06-15 game-demo-engine-gaps G-4: HUD anchor / worldToScreen)\n// ============================================================\n//\n// Map a world-space point to NDC via the view-projection matrix. Caller maps\n// NDC.xy ∈ [-1,1] to viewport pixels (DOM y-down → flip y), and inspects NDC.z\n// for \"behind camera\" / \"outside far plane\" culling.\n//\n// Pairs with unproject (NDC → world); both are intent-revealing aliases of\n// transformVec3 + perspective divide (D-4 silent w'=0 → out=(0,0,0) inherited).\n\n/**\n * Project a world-space point to NDC space through a view-projection matrix.\n *\n * `worldPos` is a position (treated with translation column, not a direction).\n * `viewProj` is `proj × view` (eye→clip composed with world→eye).\n * Output NDC is WebGPU convention: x,y ∈ [-1,1], z ∈ [0,1] (near=0 / far=1).\n *\n * To map NDC to viewport pixels (DOM y-down):\n *   px = (ndc.x * 0.5 + 0.5) * vpWidth\n *   py = (1 - (ndc.y * 0.5 + 0.5)) * vpHeight\n * `ndc.z < 0` or `ndc.z > 1` means the point is outside the depth range\n * (behind near or beyond far); callers typically skip drawing the HUD anchor.\n *\n * @degrade w' = 0 (point lies on the camera plane) → out = (0, 0, 0)\n *          (D-4 silent convention; inherited from transformVec3).\n *\n * @example\n * ```ts\n * const ndc = vec3.create();\n * mat4.projectPoint(ndc, worldPos, viewProj);\n * if (ndc[2] >= 0 && ndc[2] <= 1) {\n *   const px = (ndc[0] * 0.5 + 0.5) * canvas.width;\n *   const py = (1 - (ndc[1] * 0.5 + 0.5)) * canvas.height;\n *   // anchor DOM tooltip at (px, py)\n * }\n * ```\n */\nexport function projectPoint(out: Vec3, worldPos: Vec3Like, viewProj: Mat4Like): Vec3 {\n  return transformVec3(out, viewProj, worldPos);\n}\n\n// ============================================================\n// computeViewProj (feat-20260617-host-engine-contract-and-video-cutscene M2 w6)\n// ============================================================\n//\n// Convenience composition: out = perspective(fov,aspect,near,far) * lookAt(eye,target,up).\n// Plain numeric / Vec3Like params only — keeps math zero-dep (plan-strategy D-1).\n//\n// Related: requirements AC-03; plan-strategy D-1; research Finding 4.\n\n/**\n * Compute a combined view-projection matrix from camera parameters.\n *\n * This is a convenience composition of `mat4.perspective * mat4.lookAt`, not a primitive.\n * All parameters are plain numbers / Vec3Like — no runtime POD types (math zero-dep).\n *\n * @param out Mat4 to write the result into.\n * @param eye Camera position in world space.\n * @param target Point the camera looks at.\n * @param up Approximate up direction.\n * @param fovYRadians Vertical field of view in radians.\n * @param aspect Aspect ratio (width / height).\n * @param near Near clip distance (positive).\n * @param far Far clip distance (positive, or Infinity for infinite-far).\n * @returns `out` (same Mat4 instance).\n */\nexport function computeViewProj(\n  out: Mat4,\n  eye: Vec3Like,\n  target: Vec3Like,\n  up: Vec3Like,\n  fovYRadians: number,\n  aspect: number,\n  near: number,\n  far: number,\n): Mat4 {\n  const view = lookAt(create(), eye, target, up);\n  const proj = perspective(create(), fovYRadians, aspect, near, far);\n  return multiply(out, proj, view);\n}\n","// noise.ts — noise-function namespace (solo round 20260716-212942)\n//\n// 1-function surface: perlin1d — 1D Perlin noise returning [-1, 1]. The growable home for\n// further noise variants (2D Perlin, simplex, Worley, etc.).\n//\n// The permutation table is the canonical 256-entry table from Bevy's 2d_screen_shake example.\n// The fade function is the smootherstep polynomial (6t⁵−15t⁴+10t³), matching the Perlin\n// reference implementation — forgeax's own easing.smootherstep is the same polynomial but we\n// inline it here to keep the noise namespace self-contained (no cross-namespace dependency).\n\n// Canonical Perlin permutation table — a random sequence of 0-255.\nconst PERM: Readonly<Uint8Array> = new Uint8Array([\n  0x97, 0xa0, 0x89, 0x5b, 0x5a, 0x0f, 0x83, 0x0d, 0xc9, 0x5f, 0x60, 0x35, 0xc2, 0xe9, 0x07, 0xe1,\n  0x8c, 0x24, 0x67, 0x1e, 0x45, 0x8e, 0x08, 0x63, 0x25, 0xf0, 0x15, 0x0a, 0x17, 0xbe, 0x06, 0x94,\n  0xf7, 0x78, 0xea, 0x4b, 0x00, 0x1a, 0xc5, 0x3e, 0x5e, 0xfc, 0xdb, 0xcb, 0x75, 0x23, 0x0b, 0x20,\n  0x39, 0xb1, 0x21, 0x58, 0xed, 0x95, 0x38, 0x57, 0xae, 0x14, 0x7d, 0x88, 0xab, 0xa8, 0x44, 0xaf,\n  0x4a, 0xa5, 0x47, 0x86, 0x8b, 0x30, 0x1b, 0xa6, 0x4d, 0x92, 0x9e, 0xe7, 0x53, 0x6f, 0xe5, 0x7a,\n  0x3c, 0xd3, 0x85, 0xe6, 0xdc, 0x69, 0x5c, 0x29, 0x37, 0x2e, 0xf5, 0x28, 0xf4, 0x66, 0x8f, 0x36,\n  0x41, 0x19, 0x3f, 0xa1, 0x01, 0xd8, 0x50, 0x49, 0xd1, 0x4c, 0x84, 0xbb, 0xd0, 0x59, 0x12, 0xa9,\n  0xc8, 0xc4, 0x87, 0x82, 0x74, 0xbc, 0x9f, 0x56, 0xa4, 0x64, 0x6d, 0xc6, 0xad, 0xba, 0x03, 0x40,\n  0x34, 0xd9, 0xe2, 0xfa, 0x7c, 0x7b, 0x05, 0xca, 0x26, 0x93, 0x76, 0x7e, 0xff, 0x52, 0x55, 0xd4,\n  0xcf, 0xce, 0x3b, 0xe3, 0x2f, 0x10, 0x3a, 0x11, 0xb6, 0xbd, 0x1c, 0x2a, 0xdf, 0xb7, 0xaa, 0xd5,\n  0x77, 0xf8, 0x98, 0x02, 0x2c, 0x9a, 0xa3, 0x46, 0xdd, 0x99, 0x65, 0x9b, 0xa7, 0x2b, 0xac, 0x09,\n  0x81, 0x16, 0x27, 0xfd, 0x13, 0x62, 0x6c, 0x6e, 0x4f, 0x71, 0xe0, 0xe8, 0xb2, 0xb9, 0x70, 0x68,\n  0xda, 0xf6, 0x61, 0xe4, 0xfb, 0x22, 0xf2, 0xc1, 0xee, 0xd2, 0x90, 0x0c, 0xbf, 0xb3, 0xa2, 0xf1,\n  0x51, 0x33, 0x91, 0xeb, 0xf9, 0x0e, 0xef, 0x6b, 0x31, 0xc0, 0xd6, 0x1f, 0xb5, 0xc7, 0x6a, 0x9d,\n  0xb8, 0x54, 0xcc, 0xb0, 0x73, 0x79, 0x32, 0x2d, 0x7f, 0x04, 0x96, 0xfe, 0x8a, 0xec, 0xcd, 0x5d,\n  0xde, 0x72, 0x43, 0x1d, 0x18, 0x48, 0xf3, 0x8d, 0x80, 0xc3, 0x4e, 0x42, 0xd7, 0x3d, 0x9c, 0xb4,\n]);\n\n/**\n * Perlin smootherstep fade curve: `6t⁵ − 15t⁴ + 10t³`. The canonical Perlin fade — same\n * polynomial as {@link easing!smootherstep} but inlined so the noise namespace stays\n * self-contained. Input expected in [0, 1]; output is the smoothed value.\n */\nfunction fade(t: number): number {\n  return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n}\n\n/**\n * Dot product of a 1D gradient with the distance vector. The gradient is +1 or -1 based on\n * the lowest bit of the hash; the distance is the fractional offset from the integer lattice\n * point.\n */\nfunction dotGrad(hash: number, xf: number): number {\n  return hash & 0x1 ? xf : -xf;\n}\n\n/**\n * 1D Perlin noise. Returns a value in [-1, 1] that varies smoothly with the input `x` —\n * small changes in `x` produce small changes in output (no wild jumps). Three separate calls\n * with different `x` offsets (e.g. `perlin1d(t)`, `perlin1d(t + 100)`, `perlin1d(t + 200)`)\n * produce three independent but individually smooth noise channels.\n *\n * This is the canonical Perlin noise algorithm with the 256-entry permutation table from\n * Bevy's `2d_screen_shake` example. Use for camera shake, procedural terrain, organic\n * motion, and any effect that needs smooth pseudo-random variation.\n */\nexport function perlin1d(x: number): number {\n  const xFloor = Math.floor(x);\n  const xi0 = xFloor & 0xff;\n  const xi1 = (xFloor + 1) & 0xff;\n\n  const xf0 = x - xFloor;\n  const xf1 = xf0 - 1.0;\n\n  const t = fade(xf0);\n\n  const h0 = PERM[xi0] ?? 0;\n  const h1 = PERM[xi1] ?? 0;\n\n  const a = dotGrad(h0, xf0);\n  const b = dotGrad(h1, xf1);\n\n  // Linear interpolation between the two gradient dots.\n  // Using the standard lerp: a + t * (b - a) where t is the faded xf0.\n  return a + t * (b - a);\n}\n","// ray.ts — ray primitive namespace (feat-20260529-picking-raycasting-screen-to-entity M1 / w3 + M2 / w7).\n//\n// Storage layout: Float32Array length 6 [ox, oy, oz, dx, dy, dz], direction normalized.\n// default: origin=(0,0,0), direction=(0,0,-1).\n//\n// Surface: create / getOrigin / getDirection / setOrigin / setDirection /\n//          rayAabbIntersects (slab method, 6 degenerate cases) /\n//          screenToRay (M2 w7, two-point unproject with WebGPU [0,1] NDC z).\n//\n// Design locks:\n//   - branded `Ray` Float32Array local to this module; cast funneled through `create`\n//   - pure-function / out-param style consistent with box3 / vec3 / mat4;\n//   - `rayAabbIntersects` uses the slab method with inv precomputation,\n//     `inv[i] < 0` sign test (not direction test — avoids -0 pitfall),\n//     NaN-safe edge/corner handling (Research Finding 2 #5).\n//\n// Related: requirements AC-01 / AC-02 / AC-03;\n//          research Finding 2 (slab algorithm + 6 degenerate table);\n//          research Finding 6 (WebGPU [0,1] NDC z);\n//          plan-tasks.json w3 + w7 acceptanceChecks.\n\nimport type { Box3Like } from './box3';\nimport * as mat4 from './mat4';\nimport type { Mat4Like, Vec2, Vec3, Vec3Like } from './types';\n\n/**\n * Result of a ray-triangle intersection test (Moller-Trumbore).\n * `t` = ray parameter, `u`/`v` = barycentric coordinates.\n */\nexport interface RayTriResult {\n  hit: boolean;\n  t: number;\n  u: number;\n  v: number;\n}\n\n/**\n * Ray storage: Float32Array length 6 [ox, oy, oz, dx, dy, dz], direction normalized.\n * Local brand (not part of the seven-piece SSOT; same rationale as Box3).\n */\nexport type Ray = Float32Array & { readonly __ray: void };\n\n/**\n * Ray readable input: ArrayLike<number> of length 6 (ordering identical to Ray).\n */\nexport type RayLike = ArrayLike<number>;\n\n/**\n * Create a Ray. Defaults to origin=(0,0,0), direction=(0,0,-1) normalized.\n *\n * When `out` is not provided, a new Float32Array is allocated.\n * When `origin` / `direction` are provided, direction is normalized\n * (zero-length direction falls back to (0,0,0) per gl-matrix style).\n */\nexport function create(out?: Float32Array, origin?: Vec3Like, direction?: Vec3Like): Ray {\n  const r = out ?? new Float32Array(6);\n  if (origin) {\n    r[0] = origin[0] as number;\n    r[1] = origin[1] as number;\n    r[2] = origin[2] as number;\n  } else {\n    r[0] = 0;\n    r[1] = 0;\n    r[2] = 0;\n  }\n  if (direction) {\n    const dx = direction[0] as number;\n    const dy = direction[1] as number;\n    const dz = direction[2] as number;\n    const lenSq = dx * dx + dy * dy + dz * dz;\n    if (lenSq < 1e-12) {\n      r[3] = 0;\n      r[4] = 0;\n      r[5] = 0;\n    } else {\n      const inv = 1 / Math.sqrt(lenSq);\n      r[3] = dx * inv;\n      r[4] = dy * inv;\n      r[5] = dz * inv;\n    }\n  } else {\n    r[3] = 0;\n    r[4] = 0;\n    r[5] = -1;\n  }\n  return r as Ray;\n}\n\n/**\n * Copy the origin of `r` into `out`. Returns `out`.\n */\nexport function getOrigin(out: Vec3, r: RayLike): Vec3 {\n  out[0] = r[0] as number;\n  out[1] = r[1] as number;\n  out[2] = r[2] as number;\n  return out;\n}\n\n/**\n * Copy the direction of `r` into `out`. Returns `out`.\n */\nexport function getDirection(out: Vec3, r: RayLike): Vec3 {\n  out[0] = r[3] as number;\n  out[1] = r[4] as number;\n  out[2] = r[5] as number;\n  return out;\n}\n\n/**\n * Overwrite the origin of `r` with `o`. Returns `r`.\n */\nexport function setOrigin(r: Ray, o: Vec3Like): Ray {\n  r[0] = o[0] as number;\n  r[1] = o[1] as number;\n  r[2] = o[2] as number;\n  return r;\n}\n\n/**\n * Overwrite the direction of `r` with `d` and normalize it.\n * Zero-length direction falls back to (0,0,0) (gl-matrix style).\n * Returns `r`.\n */\nexport function setDirection(r: Ray, d: Vec3Like): Ray {\n  const dx = d[0] as number;\n  const dy = d[1] as number;\n  const dz = d[2] as number;\n  const lenSq = dx * dx + dy * dy + dz * dz;\n  if (lenSq < 1e-12) {\n    r[3] = 0;\n    r[4] = 0;\n    r[5] = 0;\n  } else {\n    const inv = 1 / Math.sqrt(lenSq);\n    r[3] = dx * inv;\n    r[4] = dy * inv;\n    r[5] = dz * inv;\n  }\n  return r;\n}\n\n/**\n * Result of a ray-AABB intersection test.\n */\nexport interface RayAabbResult {\n  hit: boolean;\n  /** Entry distance along the ray (clamped to 0 when origin is inside the box). */\n  tmin: number;\n}\n\n/**\n * Test whether a ray intersects an axis-aligned bounding box using the\n * slab (Kay-Kajiya) method.\n *\n * Six degenerate cases per research Finding 2:\n *   1. hit from outside → `tmin > 0`\n *   2. hit from inside → `tmin = 0`\n *   3. miss (ray away) → `hit = false`\n *   4. parallel-axis miss → natural via ±Inf propagation\n *   5. edge/corner NaN-safe → guard `t1 > t2` NaN scenarios with `Number.isNaN`\n *   6. thin box (1D/2D) → correct via interval shrink\n *\n * Algorithm: precompute `inv = 1/D`, use `inv[i] < 0` (not direction[i] < 0)\n * to handle `-0` direction correctly. On each axis compute `(min - O)*inv` and\n * `(max - O)*inv`, swap when `inv < 0`, then accumulate `t_near = max(t_near, t1)`,\n * `t_far = min(t_far, t2)`. Hit when `t_far >= max(t_near, 0)`.\n *\n * Input: `r` (Ray with normalized direction) + `aabb` (Box3Like, 6 floats).\n * Output: `{ hit: boolean, tmin: number }`.\n */\nexport function rayAabbIntersects(r: RayLike, aabb: Box3Like): RayAabbResult {\n  const ox = r[0] as number;\n  const oy = r[1] as number;\n  const oz = r[2] as number;\n  const dx = r[3] as number;\n  const dy = r[4] as number;\n  const dz = r[5] as number;\n\n  const minX = aabb[0] as number;\n  const minY = aabb[1] as number;\n  const minZ = aabb[2] as number;\n  const maxX = aabb[3] as number;\n  const maxY = aabb[4] as number;\n  const maxZ = aabb[5] as number;\n\n  // precomputed inverse (Research Finding 2 #2: IEEE 754 ±Inf for D_i = 0)\n  const invX = 1 / dx;\n  const invY = 1 / dy;\n  const invZ = 1 / dz;\n\n  // X axis\n  let t1x = (minX - ox) * invX;\n  let t2x = (maxX - ox) * invX;\n  // sign test on inv, not direction — avoids -0 pitfall (Finding 2 #3)\n  if (invX < 0) {\n    const tmp = t1x;\n    t1x = t2x;\n    t2x = tmp;\n  }\n  // NaN-safe: when t1x or t2x is NaN (0*∞ from origin on face), skip this axis\n  // for tnear accumulation (interval unbounded on this axis)\n  let tnear = Number.isNaN(t1x) ? -Infinity : t1x;\n  let tfar = Number.isNaN(t2x) ? Infinity : t2x;\n\n  // Y axis\n  let t1y = (minY - oy) * invY;\n  let t2y = (maxY - oy) * invY;\n  if (invY < 0) {\n    const tmp = t1y;\n    t1y = t2y;\n    t2y = tmp;\n  }\n  if (!Number.isNaN(t1y) && t1y > tnear) tnear = t1y;\n  if (!Number.isNaN(t2y) && t2y < tfar) tfar = t2y;\n\n  // early out: interval already invalid\n  if (tnear > tfar) return { hit: false, tmin: 0 };\n\n  // Z axis\n  let t1z = (minZ - oz) * invZ;\n  let t2z = (maxZ - oz) * invZ;\n  if (invZ < 0) {\n    const tmp = t1z;\n    t1z = t2z;\n    t2z = tmp;\n  }\n  if (!Number.isNaN(t1z) && t1z > tnear) tnear = t1z;\n  if (!Number.isNaN(t2z) && t2z < tfar) tfar = t2z;\n\n  // Kay-Kajiya hit criterion: tfar >= max(tnear, 0) and tfar >= 0\n  if (tfar >= 0 && tfar >= tnear) {\n    return { hit: true, tmin: tnear > 0 ? tnear : 0 };\n  }\n  return { hit: false, tmin: 0 };\n}\n\n// ============================================================\n// screenToRay (feat-20260529-picking-raycasting-screen-to-entity M2 w7)\n// ============================================================\n//\n// Two-point unproject method: unproject near (z=0) and far (z=1) NDC points\n// through invVP, then ray.origin = nearWorld, ray.direction = normalize(farWorld - nearWorld).\n//\n// WebGPU [0,1] NDC z convention (D-NDC / research Finding 6):\n//   near plane → ndc_z = 0, far plane → ndc_z = 1.\n//\n// y-flip: ndc_y = 1 - 2*screenY/viewportH (screen y-down → NDC y-up).\n//\n// Input sanitization: clamp screen coords to [0, vpW/vpH]; NaN/Inf inputs\n// fall back to centre (0,0,0,0,0,-1) to guarantee a defined Ray.\n//\n// Related: plan-tasks.json w7; requirements in-scope #3 + edge cases;\n//          research Finding 6 (WebGPU z) + Finding 3 (y-flip formula).\n\nconst _nearNdC = new Float32Array(3);\nconst _farNdC = new Float32Array(3);\nconst _nearWorld = new Float32Array(3);\nconst _farWorld = new Float32Array(3);\nconst _tmpInvVP = new Float32Array(16);\n\n/**\n * Project a screen-space coordinate into a world-space Ray.\n *\n * `screenX` / `screenY` are in pixels relative to the top-left corner of the viewport\n * (DOM convention: y-down). They are clamped to `[0, vpWidth]` / `[0, vpHeight]` and\n * sanitized against NaN/Inf.\n *\n * `kind` discriminates the projection type so callers can branch on the result if needed;\n * both paths use the same two-point unproject algorithm.\n *\n * @param out The Ray to write into.\n * @param screenX Horizontal pixel coordinate (y-down origin, top-left).\n * @param screenY Vertical pixel coordinate.\n * @param vpWidth Viewport width in pixels.\n * @param vpHeight Viewport height in pixels.\n * @param view Camera view matrix (world→eye).\n * @param proj Camera projection matrix (eye→clip).\n * @param kind `'perspective'` or `'orthographic'`.\n * @returns `out` (same Ray instance).\n */\nexport function screenToRay(\n  out: Ray,\n  screenX: number,\n  screenY: number,\n  vpWidth: number,\n  vpHeight: number,\n  view: Mat4Like,\n  proj: Mat4Like,\n  _kind: 'perspective' | 'orthographic',\n): Ray {\n  // --- input sanitization ---\n  if (\n    !Number.isFinite(screenX) ||\n    !Number.isFinite(screenY) ||\n    !Number.isFinite(vpWidth) ||\n    !Number.isFinite(vpHeight) ||\n    vpWidth <= 0 ||\n    vpHeight <= 0\n  ) {\n    // Degenerate viewport or non-finite input: return a safe centre ray\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = -1;\n    return out;\n  }\n\n  // Clamp to viewport bounds\n  const sx = screenX < 0 ? 0 : screenX > vpWidth ? vpWidth : screenX;\n  const sy = screenY < 0 ? 0 : screenY > vpHeight ? vpHeight : screenY;\n\n  // --- screen → NDC (y-flip) ---\n  const ndcX = (2 * sx) / vpWidth - 1;\n  const ndcY = 1 - (2 * sy) / vpHeight;\n\n  // --- build invVP = invert(proj * view) ---\n  mat4.multiply(_tmpInvVP as unknown as import('./types').Mat4, proj, view);\n  mat4.invert(_tmpInvVP as unknown as import('./types').Mat4, _tmpInvVP);\n\n  // Projection coefficients determine the Z direction for both perspective\n  // and orthographic matrices. Use an interior point for the direction so an\n  // infinite far plane never divides by zero.\n  const reversed = (proj[10] as number) >= 0;\n  _nearNdC[0] = ndcX;\n  _nearNdC[1] = ndcY;\n  _nearNdC[2] = reversed ? 1 : 0;\n\n  _farNdC[0] = ndcX;\n  _farNdC[1] = ndcY;\n  _farNdC[2] = 0.5;\n\n  mat4.unproject(_nearWorld as unknown as Vec3, _nearNdC, _tmpInvVP as unknown as Mat4Like);\n  mat4.unproject(_farWorld as unknown as Vec3, _farNdC, _tmpInvVP as unknown as Mat4Like);\n\n  // --- write origin = nearWorld ---\n  out[0] = _nearWorld[0] as number;\n  out[1] = _nearWorld[1] as number;\n  out[2] = _nearWorld[2] as number;\n\n  // --- compute direction = normalize(far - near) ---\n  const dx = (_farWorld[0] as number) - (_nearWorld[0] as number);\n  const dy = (_farWorld[1] as number) - (_nearWorld[1] as number);\n  const dz = (_farWorld[2] as number) - (_nearWorld[2] as number);\n  const lenSq = dx * dx + dy * dy + dz * dz;\n  if (lenSq < 1e-12) {\n    // Degenerate: far == near (e.g. infinite-far projection, zero-depth frustum)\n    // Fall back to camera forward direction\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = -1;\n  } else {\n    const inv = 1 / Math.sqrt(lenSq);\n    out[3] = dx * inv;\n    out[4] = dy * inv;\n    out[5] = dz * inv;\n  }\n\n  return out;\n}\n\n// ============================================================\n// worldToScreen (feat-20260617-host-engine-contract-and-video-cutscene M2 w5)\n// ============================================================\n//\n// Self-contained mat4 * vec4 to get pre-divide w (do NOT wrap projectPoint — it discards w,\n// research Finding 3). behind = w<0; onScreen = NDC xyz all in [-1,1] for xy and [0,1] for z.\n// Pixel map y-down top-left: px=(ndc.x*0.5+0.5)*w, py=(1-(ndc.y*0.5+0.5))*h.\n// out-param writes Vec2; returns plain {onScreen, behind} flags (no allocation).\n//\n// Related: requirements AC-01; plan-strategy D-2; research Finding 3/5/6.\n\n/** Result of projecting a world-space point to screen-space pixel coordinates. */\nexport interface WorldToScreenResult {\n  /** True if the NDC coordinates are within clip-space bounds. */\n  onScreen: boolean;\n  /** True if the original world-space point is behind the camera (w < 0).\n   *  When true, `out` is meaningless (requirements §7). */\n  behind: boolean;\n}\n\n/**\n * Project a world-space point to screen-space pixel coordinates.\n *\n * Performs a full mat4 * vec4 internally to capture the pre-divide `w` component\n * (projectPoint discards `w`, so it cannot report `behind`).\n *\n * Pixel mapping: top-left origin, y-down (DOM convention).\n *   px = (ndc.x * 0.5 + 0.5) * canvasW\n *   py = (1 - (ndc.y * 0.5 + 0.5)) * canvasH\n *\n * Degenerate viewport (canvasW <= 0 || canvasH <= 0): returns { onScreen: false, behind: false },\n * leaves `out` untouched.\n *\n * @param out Vec2 to write pixel coordinates into (y-down, top-left origin).\n * @param worldPos World-space point (3 floats).\n * @param viewProj Combined view-projection matrix (proj * view, 16 floats).\n * @param canvasW Canvas width in pixels.\n * @param canvasH Canvas height in pixels.\n * @returns { onScreen: boolean, behind: boolean } — pure data flags, no allocation.\n */\nexport function worldToScreen(\n  out: Vec2,\n  worldPos: Vec3Like,\n  viewProj: Mat4Like,\n  canvasW: number,\n  canvasH: number,\n): WorldToScreenResult {\n  // Degenerate viewport: leave `out` untouched, report off-screen.\n  if (!(canvasW > 0) || !(canvasH > 0)) {\n    return { onScreen: false, behind: false };\n  }\n\n  const x = worldPos[0] as number;\n  const y = worldPos[1] as number;\n  const z = worldPos[2] as number;\n\n  // clip = viewProj * [x, y, z, 1]  (column-major: m[col*4 + row])\n  const clipX =\n    (viewProj[0] as number) * x +\n    (viewProj[4] as number) * y +\n    (viewProj[8] as number) * z +\n    (viewProj[12] as number);\n  const clipY =\n    (viewProj[1] as number) * x +\n    (viewProj[5] as number) * y +\n    (viewProj[9] as number) * z +\n    (viewProj[13] as number);\n  const clipZ =\n    (viewProj[2] as number) * x +\n    (viewProj[6] as number) * y +\n    (viewProj[10] as number) * z +\n    (viewProj[14] as number);\n  const clipW =\n    (viewProj[3] as number) * x +\n    (viewProj[7] as number) * y +\n    (viewProj[11] as number) * z +\n    (viewProj[15] as number);\n\n  // behind = camera-space point is behind the eye (w < 0); `out` is then meaningless.\n  if (clipW < 0) {\n    return { onScreen: false, behind: true };\n  }\n\n  const invW = 1 / clipW;\n  const ndcX = clipX * invW;\n  const ndcY = clipY * invW;\n  const ndcZ = clipZ * invW;\n\n  // y-down pixel map, top-left origin (DOM convention).\n  out[0] = (ndcX * 0.5 + 0.5) * canvasW;\n  out[1] = (1 - (ndcY * 0.5 + 0.5)) * canvasH;\n\n  // onScreen: NDC xy in [-1, 1], NDC z in [0, 1] (WebGPU clip-space z convention).\n  const onScreen = ndcX >= -1 && ndcX <= 1 && ndcY >= -1 && ndcY <= 1 && ndcZ >= 0 && ndcZ <= 1;\n\n  return { onScreen, behind: false };\n}\n\n// ============================================================\n// rayTriangleIntersects (feat-20260630-vertex-snapping-picking M1)\n// ============================================================\n//\n// Moller-Trumbore algorithm. Returns RayTriResult { hit, t, u, v }.\n// Double-sided: uses abs(det) < epsilon (no backface culling).\n// Degenerate (collinear/zero-area/parallel) triangles return hit=false to avoid NaN propagation.\n// t <= 0 rejected (behind ray origin).\n// Barycentric boundary: u >= 0, v >= 0, u + v <= 1.\n// NaN guard on all inputs.\n//\n// Related: requirements AC-06; plan-strategy D-1;\n//          KB 2026-06-30-scratchapixel-moller-trumbore.md;\n//          plan-tasks.json w2 acceptanceCheck.\n\nconst RAY_TRI_EPSILON = 1e-8;\n\n/**\n * Test whether a ray intersects a triangle using the Moller-Trumbore algorithm.\n *\n * Double-sided: both front and back faces are checked (abs(det) < epsilon).\n * Degenerate triangles (collinear / zero-area) return hit=false.\n * Ray origin behind the triangle (t <= 0) is rejected.\n * NaN inputs are guarded against — any NaN input returns hit=false.\n *\n * @param r Ray (RayLike, 6 floats: ox,oy,oz,dx,dy,dz with normalized direction).\n * @param a Triangle vertex A (Vec3Like, 3 floats).\n * @param b Triangle vertex B (Vec3Like, 3 floats).\n * @param c Triangle vertex C (Vec3Like, 3 floats).\n * @returns RayTriResult with hit flag, t (ray parameter), and u/v (barycentric coordinates).\n */\nexport function rayTriangleIntersects(\n  r: RayLike,\n  a: Vec3Like,\n  b: Vec3Like,\n  c: Vec3Like,\n): RayTriResult {\n  // NaN guard: any NaN input → miss (prevents NaN propagation through the algorithm)\n  if (\n    Number.isNaN(r[0] as number) ||\n    Number.isNaN(r[1] as number) ||\n    Number.isNaN(r[2] as number) ||\n    Number.isNaN(r[3] as number) ||\n    Number.isNaN(r[4] as number) ||\n    Number.isNaN(r[5] as number) ||\n    Number.isNaN(a[0] as number) ||\n    Number.isNaN(a[1] as number) ||\n    Number.isNaN(a[2] as number) ||\n    Number.isNaN(b[0] as number) ||\n    Number.isNaN(b[1] as number) ||\n    Number.isNaN(b[2] as number) ||\n    Number.isNaN(c[0] as number) ||\n    Number.isNaN(c[1] as number) ||\n    Number.isNaN(c[2] as number)\n  ) {\n    return { hit: false, t: 0, u: 0, v: 0 };\n  }\n\n  const ox = r[0] as number;\n  const oy = r[1] as number;\n  const oz = r[2] as number;\n  const dx = r[3] as number;\n  const dy = r[4] as number;\n  const dz = r[5] as number;\n\n  // E1 = B - A, E2 = C - A\n  const e1x = (b[0] as number) - (a[0] as number);\n  const e1y = (b[1] as number) - (a[1] as number);\n  const e1z = (b[2] as number) - (a[2] as number);\n  const e2x = (c[0] as number) - (a[0] as number);\n  const e2y = (c[1] as number) - (a[1] as number);\n  const e2z = (c[2] as number) - (a[2] as number);\n\n  // P = D x E2\n  const px = dy * e2z - dz * e2y;\n  const py = dz * e2x - dx * e2z;\n  const pz = dx * e2y - dy * e2x;\n\n  // det = E1 . P\n  const det = e1x * px + e1y * py + e1z * pz;\n\n  // Double-sided: abs(det) < epsilon → parallel / degenerate → miss\n  if (Math.abs(det) < RAY_TRI_EPSILON) {\n    return { hit: false, t: 0, u: 0, v: 0 };\n  }\n\n  const invDet = 1 / det;\n\n  // T = O - A\n  const tx = ox - (a[0] as number);\n  const ty = oy - (a[1] as number);\n  const tz = oz - (a[2] as number);\n\n  // u = (T . P) * invDet\n  const u = (tx * px + ty * py + tz * pz) * invDet;\n  if (u < 0 || u > 1) {\n    return { hit: false, t: 0, u, v: 0 };\n  }\n\n  // Q = T x E1\n  const qx = ty * e1z - tz * e1y;\n  const qy = tz * e1x - tx * e1z;\n  const qz = tx * e1y - ty * e1x;\n\n  // v = (D . Q) * invDet\n  const v = (dx * qx + dy * qy + dz * qz) * invDet;\n  if (v < 0 || u + v > 1) {\n    return { hit: false, t: 0, u, v };\n  }\n\n  // t = (E2 . Q) * invDet\n  const t = (e2x * qx + e2y * qy + e2z * qz) * invDet;\n  if (t <= 0) {\n    return { hit: false, t, u, v };\n  }\n\n  return { hit: true, t, u, v };\n}\n","// ray2.ts — finite 2D ray and bounding-volume casts (P12 / bounding_2d).\n//\n// Ray2 storage: Float32Array [originX, originY, directionX, directionY, maxDistance].\n// Direction is normalized at construction, matching ray.create. A finite max distance\n// keeps ordinary ray tests and swept-volume tests on one small, composable surface.\n\nimport type { Box2Like } from './box2';\nimport type { Circle2Like } from './circle2';\nimport type { Vec2, Vec2Like } from './types';\n\n/** 2D ray storage: [originX, originY, directionX, directionY, maxDistance]. */\nexport type Ray2 = Float32Array & { readonly __ray2: void };\n\n/** Readable 2D ray input. */\nexport type Ray2Like = ArrayLike<number>;\n\n/** Result shared by AABB, circle, and swept-volume intersection tests. */\nexport interface Ray2Intersection {\n  hit: boolean;\n  /** Entry distance along the normalized ray, clamped to zero when inside. */\n  t: number;\n}\n\n/** Create a normalized finite 2D ray. `maxDistance` defaults to infinity. */\nexport function create(\n  out?: Float32Array,\n  origin?: Vec2Like,\n  direction?: Vec2Like,\n  maxDistance = Number.POSITIVE_INFINITY,\n): Ray2 {\n  const ray = out ?? new Float32Array(5);\n  ray[0] = origin ? (origin[0] as number) : 0;\n  ray[1] = origin ? (origin[1] as number) : 0;\n  const dx = direction ? (direction[0] as number) : 0;\n  const dy = direction ? (direction[1] as number) : 1;\n  const lengthSq = dx * dx + dy * dy;\n  if (lengthSq < 1e-12) {\n    ray[2] = 0;\n    ray[3] = 0;\n  } else {\n    const invLength = 1 / Math.sqrt(lengthSq);\n    ray[2] = dx * invLength;\n    ray[3] = dy * invLength;\n  }\n  ray[4] = maxDistance < 0 ? 0 : maxDistance;\n  return ray as Ray2;\n}\n\n/** Copy the ray origin to out. */\nexport function getOrigin(out: Vec2, ray: Ray2Like): Vec2 {\n  out[0] = ray[0] as number;\n  out[1] = ray[1] as number;\n  return out;\n}\n\n/** Copy the normalized ray direction to out. */\nexport function getDirection(out: Vec2, ray: Ray2Like): Vec2 {\n  out[0] = ray[2] as number;\n  out[1] = ray[3] as number;\n  return out;\n}\n\n/** Return the ray's finite travel limit. */\nexport function getMaxDistance(ray: Ray2Like): number {\n  return ray[4] as number;\n}\n\n/** Set the ray origin. */\nexport function setOrigin(ray: Ray2, origin: Vec2Like): Ray2 {\n  ray[0] = origin[0] as number;\n  ray[1] = origin[1] as number;\n  return ray;\n}\n\n/** Set and normalize the ray direction. */\nexport function setDirection(ray: Ray2, direction: Vec2Like): Ray2 {\n  const dx = direction[0] as number;\n  const dy = direction[1] as number;\n  const lengthSq = dx * dx + dy * dy;\n  if (lengthSq < 1e-12) {\n    ray[2] = 0;\n    ray[3] = 0;\n  } else {\n    const invLength = 1 / Math.sqrt(lengthSq);\n    ray[2] = dx * invLength;\n    ray[3] = dy * invLength;\n  }\n  return ray;\n}\n\n/** Set the ray's non-negative travel limit. */\nexport function setMaxDistance(ray: Ray2, maxDistance: number): Ray2 {\n  ray[4] = maxDistance < 0 ? 0 : maxDistance;\n  return ray;\n}\n\n/** Intersect a finite ray with an AABB using the 2D slab method. */\nexport function rayAabbIntersects(ray: Ray2Like, box: Box2Like): Ray2Intersection {\n  return rayAabbValues(ray, box[0] as number, box[1] as number, box[2] as number, box[3] as number);\n}\n\n/** Intersect a finite ray with a bounding circle. */\nexport function rayCircleIntersects(ray: Ray2Like, circle: Circle2Like): Ray2Intersection {\n  return rayCircleValues(ray, circle[0] as number, circle[1] as number, circle[2] as number);\n}\n\n/** Sweep an AABB along a finite ray and intersect it with a target AABB. */\nexport function aabbCastIntersects(\n  ray: Ray2Like,\n  moving: Box2Like,\n  target: Box2Like,\n): Ray2Intersection {\n  // Minkowski difference: target ⊖ moving. This also preserves the moving\n  // volume's offset relative to the ray origin, matching Bevy AabbCast2d.\n  return rayAabbValues(\n    ray,\n    (target[0] as number) - (moving[2] as number),\n    (target[1] as number) - (moving[3] as number),\n    (target[2] as number) - (moving[0] as number),\n    (target[3] as number) - (moving[1] as number),\n  );\n}\n\n/** Sweep a circle along a finite ray and intersect it with a target circle. */\nexport function circleCastIntersects(\n  ray: Ray2Like,\n  moving: Circle2Like,\n  target: Circle2Like,\n): Ray2Intersection {\n  return rayCircleValues(\n    ray,\n    (target[0] as number) - (moving[0] as number),\n    (target[1] as number) - (moving[1] as number),\n    (target[2] as number) + (moving[2] as number),\n  );\n}\n\nfunction rayAabbValues(\n  ray: Ray2Like,\n  minX: number,\n  minY: number,\n  maxX: number,\n  maxY: number,\n): Ray2Intersection {\n  const ox = ray[0] as number;\n  const oy = ray[1] as number;\n  const dx = ray[2] as number;\n  const dy = ray[3] as number;\n  let near = 0;\n  let far = ray[4] as number;\n\n  if (minX > maxX || minY > maxY || far < 0) return miss();\n  if (Math.abs(dx) < 1e-12) {\n    if (ox < minX || ox > maxX) return miss();\n  } else {\n    let a = (minX - ox) / dx;\n    let b = (maxX - ox) / dx;\n    if (a > b) [a, b] = [b, a];\n    if (a > near) near = a;\n    if (b < far) far = b;\n  }\n  if (Math.abs(dy) < 1e-12) {\n    if (oy < minY || oy > maxY) return miss();\n  } else {\n    let a = (minY - oy) / dy;\n    let b = (maxY - oy) / dy;\n    if (a > b) [a, b] = [b, a];\n    if (a > near) near = a;\n    if (b < far) far = b;\n  }\n  return near <= far && far >= 0 ? { hit: true, t: near } : miss();\n}\n\nfunction rayCircleValues(ray: Ray2Like, cx: number, cy: number, radius: number): Ray2Intersection {\n  const ox = (ray[0] as number) - cx;\n  const oy = (ray[1] as number) - cy;\n  const dx = ray[2] as number;\n  const dy = ray[3] as number;\n  const maxDistance = ray[4] as number;\n  if (radius < 0 || maxDistance < 0) return miss();\n  const directionLengthSq = dx * dx + dy * dy;\n  const radiusSq = radius * radius;\n  const originDistanceSq = ox * ox + oy * oy;\n  if (originDistanceSq <= radiusSq) return maxDistance >= 0 ? { hit: true, t: 0 } : miss();\n  if (directionLengthSq < 1e-12) return miss();\n\n  const projected = ox * dx + oy * dy;\n  const constant = originDistanceSq - radiusSq;\n  const discriminant = projected * projected - directionLengthSq * constant;\n  if (discriminant < 0) return miss();\n  const entry = (-projected - Math.sqrt(discriminant)) / directionLengthSq;\n  const t = entry < 0 ? 0 : entry;\n  return t <= maxDistance ? { hit: true, t } : miss();\n}\n\nfunction miss(): Ray2Intersection {\n  return { hit: false, t: 0 };\n}\n","// sphere.ts — bounding sphere namespace (M3 / w7).\n//\n// 5-function surface (plan-tasks.json w7): create / expandByPoint / containsPoint / intersectsBox / fromPoints.\n//\n// Storage layout: Float32Array length 4 [cx, cy, cz, radius].\n// Negative radius is the \"empty sphere\" sentinel — expandByPoint on an empty\n// sphere seeds center + zero radius at the input point; containsPoint always\n// returns false on an empty sphere.\n//\n// `fromPoints` uses the tight axis-aligned-bounding-box center + max distance\n// bound as a fast approximation (Ritter is one option; we pick the simpler\n// AABB-center variant because it is the common three.js/babylon default and\n// is sufficient for v1 frustum-culling / broadphase needs — Welzl and Ritter\n// are future spinoffs if tighter bounds become necessary).\n//\n// Related: requirements §AC-16 (Box3 / Sphere pure functions);\n//          plan-strategy M3 range; plan-tasks.json w7 acceptanceCheck.\n\nimport * as box3 from './box3';\nimport type { Vec3Like } from './types';\n\n/**\n * Sphere storage: Float32Array length 4 [cx, cy, cz, radius].\n * Local brand (not part of the seven-piece SSOT); see box3.ts rationale.\n */\nexport type Sphere = Float32Array & { readonly __sphere: void };\n\n/**\n * Sphere readable input: ArrayLike<number> of length 4 (ordering identical to Sphere).\n */\nexport type SphereLike = ArrayLike<number>;\n\n/**\n * Create a Sphere. Defaults to a zero-radius sphere at the origin.\n */\nexport function create(cx = 0, cy = 0, cz = 0, radius = 0): Sphere {\n  return Float32Array.of(cx, cy, cz, radius) as Sphere;\n}\n\n/**\n * Grow the sphere so `point` lies inside (boundary inclusive). Returns `out`.\n *\n * If the sphere was empty (radius < 0) the call re-seeds the center to `point`\n * with radius 0. Otherwise the radius is set to max(current, distance(center, point)).\n */\nexport function expandByPoint(out: Sphere, point: Vec3Like): Sphere {\n  const r = out[3] as number;\n  const px = point[0] as number;\n  const py = point[1] as number;\n  const pz = point[2] as number;\n  if (r < 0) {\n    out[0] = px;\n    out[1] = py;\n    out[2] = pz;\n    out[3] = 0;\n    return out;\n  }\n  const dx = px - (out[0] as number);\n  const dy = py - (out[1] as number);\n  const dz = pz - (out[2] as number);\n  const d = Math.sqrt(dx * dx + dy * dy + dz * dz);\n  if (d > r) out[3] = d;\n  return out;\n}\n\n/**\n * True when `point` is inside `sphere` (boundary inclusive). Empty sphere\n * (radius < 0) contains nothing.\n */\nexport function containsPoint(s: SphereLike, point: Vec3Like): boolean {\n  const r = s[3] as number;\n  if (r < 0) return false;\n  const dx = (point[0] as number) - (s[0] as number);\n  const dy = (point[1] as number) - (s[1] as number);\n  const dz = (point[2] as number) - (s[2] as number);\n  return dx * dx + dy * dy + dz * dz <= r * r;\n}\n\n/**\n * True when `sphere` overlaps `box` (boundary inclusive). Uses the standard\n * closest-point-on-AABB distance test.\n */\nexport function intersectsBox(s: SphereLike, b: box3.Box3Like): boolean {\n  const r = s[3] as number;\n  if (r < 0) return false;\n  const cx = s[0] as number;\n  const cy = s[1] as number;\n  const cz = s[2] as number;\n  const minX = b[0] as number;\n  const minY = b[1] as number;\n  const minZ = b[2] as number;\n  const maxX = b[3] as number;\n  const maxY = b[4] as number;\n  const maxZ = b[5] as number;\n  const qx = cx < minX ? minX : cx > maxX ? maxX : cx;\n  const qy = cy < minY ? minY : cy > maxY ? maxY : cy;\n  const qz = cz < minZ ? minZ : cz > maxZ ? maxZ : cz;\n  const dx = cx - qx;\n  const dy = cy - qy;\n  const dz = cz - qz;\n  return dx * dx + dy * dy + dz * dz <= r * r;\n}\n\n/**\n * Build an enclosing sphere from `points` via AABB-center + max-distance\n * approximation. Empty `points` leaves the negative-radius empty sphere at\n * the origin.\n */\nexport function fromPoints(out: Sphere, points: readonly Vec3Like[]): Sphere {\n  if (points.length === 0) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = -1;\n    return out;\n  }\n  const aabb = box3.create();\n  for (let i = 0; i < points.length; i++) {\n    box3.expandByPoint(aabb, points[i] as Vec3Like);\n  }\n  const cx = ((aabb[0] as number) + (aabb[3] as number)) * 0.5;\n  const cy = ((aabb[1] as number) + (aabb[4] as number)) * 0.5;\n  const cz = ((aabb[2] as number) + (aabb[5] as number)) * 0.5;\n  let rSq = 0;\n  for (let i = 0; i < points.length; i++) {\n    const p = points[i] as Vec3Like;\n    const dx = (p[0] as number) - cx;\n    const dy = (p[1] as number) - cy;\n    const dz = (p[2] as number) - cz;\n    const d2 = dx * dx + dy * dy + dz * dz;\n    if (d2 > rSq) rSq = d2;\n  }\n  out[0] = cx;\n  out[1] = cy;\n  out[2] = cz;\n  out[3] = Math.sqrt(rSq);\n  return out;\n}\n","// vec2.ts — 2D vector namespace (M2 / T-013)\n//\n// 19-function surface (≥ 14 lower bound; includes perp 2D 90° rotation, excludes cross):\n//   create / clone / copy / set / equals / add / sub / scale / negate /\n//   dot / lengthSq / length / distance / normalize / lerp / smoothDamp / catmullRom / min / max / perp\n//\n// Design locks:\n//   - branded Float32Array storage (types.ts SSOT); `as Vec2` casts are funneled through factory\n//     functions (D-P15 / lint-brand-cast.mjs guard).\n//   - Out-param first + aliasing-safe (gl-matrix four ironclad rules): every function reads\n//     a/b components into locals before writing out, so vec2.add(v, v, v) / vec2.lerp(out, out, b, t)\n//     are legal.\n//   - degenerate silent fall-back (D-P12 / AC-06): normalize(0-vec) → 0-vec, no NaN, no throw.\n//   - mandatory `export function` (D-P10) so grep + count-math-exports.mjs AST can count exports.\n//\n// Related: requirements §Surface vec2 lower bound 14; plan-strategy §6 M2 + §1.1 vec2.ts LOC 220;\n//          wiki/typescript-branded-types §7.2 factory template;\n//          wiki/gl-matrix-overview Out-param four ironclad rules + degenerate-semantics anchor.\n\nimport { EPS_NORMALIZE } from './_internal/epsilon';\nimport { catmullRomScalar, lerp as scalarLerp, smoothDecayFactor } from './_internal/scalar';\nimport type { Vec2, Vec2Like } from './types';\n\n/** Create a Vec2 (zero vector by default). */\nexport function create(x = 0, y = 0): Vec2 {\n  return Float32Array.of(x, y) as Vec2;\n}\n\n/** Allocate a new Vec2 copy. Difference from copy: clone allocates, copy writes into an existing out. */\nexport function clone(a: Vec2Like): Vec2 {\n  return Float32Array.of(a[0] as number, a[1] as number) as Vec2;\n}\n\n/** out = a. Returns out. aliasing-safe (copy(v, v) is a no-op). */\nexport function copy(out: Vec2, a: Vec2Like): Vec2 {\n  out[0] = a[0] as number;\n  out[1] = a[1] as number;\n  return out;\n}\n\n/** Write the components and return out. */\nexport function set(out: Vec2, x: number, y: number): Vec2 {\n  out[0] = x;\n  out[1] = y;\n  return out;\n}\n\n/**\n * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (matches IEEE 754).\n */\nexport function equals(a: Vec2Like, b: Vec2Like, epsilon = 1e-6): boolean {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  if (Number.isNaN(ax) || Number.isNaN(ay) || Number.isNaN(bx) || Number.isNaN(by)) return false;\n  return Math.abs(ax - bx) <= epsilon && Math.abs(ay - by) <= epsilon;\n}\n\n/** out = a + b. aliasing-safe. */\nexport function add(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  out[0] = ax + bx;\n  out[1] = ay + by;\n  return out;\n}\n\n/** out = a - b. aliasing-safe. */\nexport function sub(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  out[0] = ax - bx;\n  out[1] = ay - by;\n  return out;\n}\n\n/** out = a * s. */\nexport function scale(out: Vec2, a: Vec2Like, s: number): Vec2 {\n  out[0] = (a[0] as number) * s;\n  out[1] = (a[1] as number) * s;\n  return out;\n}\n\n/** out = -a. The `0 - x` form avoids -0 (test toBe(0) uses Object.is and distinguishes ±0). */\nexport function negate(out: Vec2, a: Vec2Like): Vec2 {\n  out[0] = 0 - (a[0] as number);\n  out[1] = 0 - (a[1] as number);\n  return out;\n}\n\n/** Dot product a · b. */\nexport function dot(a: Vec2Like, b: Vec2Like): number {\n  return (a[0] as number) * (b[0] as number) + (a[1] as number) * (b[1] as number);\n}\n\n/** Squared length |a|² (avoids sqrt overhead; useful on hot paths comparing distances). */\nexport function lengthSq(a: Vec2Like): number {\n  const x = a[0] as number;\n  const y = a[1] as number;\n  return x * x + y * y;\n}\n\n/** Euclidean length |a|. */\nexport function length(a: Vec2Like): number {\n  const x = a[0] as number;\n  const y = a[1] as number;\n  return Math.sqrt(x * x + y * y);\n}\n\n/** Distance between two points |a - b|. */\nexport function distance(a: Vec2Like, b: Vec2Like): number {\n  const dx = (a[0] as number) - (b[0] as number);\n  const dy = (a[1] as number) - (b[1] as number);\n  return Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * out = a / |a| (unit-length).\n *\n * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector;\n * no NaN, no throw (gl-matrix style, AC-06 / D-P12).\n * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS`\n * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation;\n * still does not throw).\n *\n * @example\n * ```ts\n * vec2.normalize(out, [3, 4]);     // → (0.6, 0.8)\n * vec2.normalize(out, [0, 0]);     // → (0, 0) zero vector falls back (no NaN; AC-06 no throw)\n * vec2.normalize(out, [NaN, 1]);   // → (NaN, NaN) IEEE-754 propagation\n * ```\n */\nexport function normalize(out: Vec2, a: Vec2Like): Vec2 {\n  const x = a[0] as number;\n  const y = a[1] as number;\n  const lenSq = x * x + y * y;\n  if (lenSq < EPS_NORMALIZE) {\n    out[0] = 0;\n    out[1] = 0;\n    return out;\n  }\n  const inv = 1 / Math.sqrt(lenSq);\n  out[0] = x * inv;\n  out[1] = y * inv;\n  return out;\n}\n\n/** out = lerp(a, b, t). t is not clamped (extrapolation semantics matches glam / wgpu-matrix). aliasing-safe. */\nexport function lerp(out: Vec2, a: Vec2Like, b: Vec2Like, t: number): Vec2 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  out[0] = scalarLerp(ax, bx, t);\n  out[1] = scalarLerp(ay, by, t);\n  return out;\n}\n\n/**\n * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`:\n * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy\n * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` (1st-order decay, NOT Unity\n * `SmoothDamp`'s 2nd-order spring). `dt=0` → out=current; large `decayRate·dt` → out≈target.\n * Frame-rate independent by construction (one `dt` step = two composed `dt/2` steps). aliasing-safe.\n * See vec3.smoothDamp for the full contract. */\nexport function smoothDamp(\n  out: Vec2,\n  current: Vec2Like,\n  target: Vec2Like,\n  decayRate: number,\n  dt: number,\n): Vec2 {\n  return lerp(out, current, target, smoothDecayFactor(decayRate, dt));\n}\n\n/**\n * out = Catmull-Rom spline point on the segment between `p1` and `p2`, with `p0` / `p3` the\n * neighbor control points setting the endpoint tangents (tension 0.5 — the Bevy\n * `CubicCardinalSpline::new_catmull_rom` / three.js default). Interpolates the control points\n * (`t=0` → `p1`, `t=1` → `p2`). See vec3.catmullRom for the full contract + whole-polyline\n * sampling. aliasing-safe. */\nexport function catmullRom(\n  out: Vec2,\n  p0: Vec2Like,\n  p1: Vec2Like,\n  p2: Vec2Like,\n  p3: Vec2Like,\n  t: number,\n): Vec2 {\n  const x = catmullRomScalar(p0[0] as number, p1[0] as number, p2[0] as number, p3[0] as number, t);\n  const y = catmullRomScalar(p0[1] as number, p1[1] as number, p2[1] as number, p3[1] as number, t);\n  out[0] = x;\n  out[1] = y;\n  return out;\n}\n\n/** Component-wise min. */\nexport function min(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n  out[0] = Math.min(a[0] as number, b[0] as number);\n  out[1] = Math.min(a[1] as number, b[1] as number);\n  return out;\n}\n\n/** Component-wise max. */\nexport function max(out: Vec2, a: Vec2Like, b: Vec2Like): Vec2 {\n  out[0] = Math.max(a[0] as number, b[0] as number);\n  out[1] = Math.max(a[1] as number, b[1] as number);\n  return out;\n}\n\n/**\n * out = perp(a) — 2D counter-clockwise 90° rotation: (x, y) → (-y, x).\n *\n * Derives from cross(a, b) reducing to a scalar determinant in 2D; this API serves hot paths\n * (collision / normals).\n * aliasing-safe: reads a's components into locals before writing out.\n */\nexport function perp(out: Vec2, a: Vec2Like): Vec2 {\n  const x = a[0] as number;\n  const y = a[1] as number;\n  out[0] = 0 - y;\n  out[1] = x;\n  return out;\n}\n","// vec4.ts — 4D vector / homogeneous coordinate namespace (M2 / T-015)\n//\n// 18-function surface (≥ 14 lower bound; same shape as vec2/vec3, no cross / perp):\n//   create / clone / copy / set / equals / add / sub / scale / negate /\n//   dot / lengthSq / length / distance / normalize / lerp / smoothDamp / min / max\n//\n// Design locks:\n//   - branded Float32Array (types.ts SSOT); factory `as Vec4` casts are funneled (D-P15).\n//   - Out-param first + aliasing-safe (gl-matrix four ironclad rules).\n//   - normalize(0-vec) → 0-vec silent fall-back (D-P12 / AC-06).\n//   - mandatory `export function` (D-P10).\n//   - reuses lerp from _internal/scalar.ts (strategy D mixed; duplicate-code elimination).\n//   - Vec4 ≠ Quat (same length=4 brand mutual exclusion; types.ts SSOT keeps each brand independent).\n//\n// Related: requirements §Surface vec4 lower bound 14; plan-strategy §6 M2 + §1.1 vec4.ts LOC 240;\n//          wiki/typescript-branded-types §7.2 factory template;\n//          wiki/gl-matrix-overview Out-param four ironclad rules.\n\nimport { EPS_NORMALIZE } from './_internal/epsilon';\nimport { lengthSq4, normalize4, lerp as scalarLerp, smoothDecayFactor } from './_internal/scalar';\nimport type { Vec4, Vec4Like } from './types';\n\n/** Create a Vec4 (zero vector by default). */\nexport function create(x = 0, y = 0, z = 0, w = 0): Vec4 {\n  return Float32Array.of(x, y, z, w) as Vec4;\n}\n\n/** Allocate a new Vec4 copy. */\nexport function clone(a: Vec4Like): Vec4 {\n  return Float32Array.of(a[0] as number, a[1] as number, a[2] as number, a[3] as number) as Vec4;\n}\n\n/** out = a. aliasing-safe (copy(v, v) is a no-op). */\nexport function copy(out: Vec4, a: Vec4Like): Vec4 {\n  out[0] = a[0] as number;\n  out[1] = a[1] as number;\n  out[2] = a[2] as number;\n  out[3] = a[3] as number;\n  return out;\n}\n\n/** Write the components and return out. */\nexport function set(out: Vec4, x: number, y: number, z: number, w: number): Vec4 {\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  out[3] = w;\n  return out;\n}\n\n/**\n * Approximate equality: every component differs by ≤ epsilon. NaN inputs always return false (IEEE 754).\n */\nexport function equals(a: Vec4Like, b: Vec4Like, epsilon = 1e-6): boolean {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const aw = a[3] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  const bw = b[3] as number;\n  if (\n    Number.isNaN(ax) ||\n    Number.isNaN(ay) ||\n    Number.isNaN(az) ||\n    Number.isNaN(aw) ||\n    Number.isNaN(bx) ||\n    Number.isNaN(by) ||\n    Number.isNaN(bz) ||\n    Number.isNaN(bw)\n  ) {\n    return false;\n  }\n  return (\n    Math.abs(ax - bx) <= epsilon &&\n    Math.abs(ay - by) <= epsilon &&\n    Math.abs(az - bz) <= epsilon &&\n    Math.abs(aw - bw) <= epsilon\n  );\n}\n\n/** out = a + b. aliasing-safe. */\nexport function add(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const aw = a[3] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  const bw = b[3] as number;\n  out[0] = ax + bx;\n  out[1] = ay + by;\n  out[2] = az + bz;\n  out[3] = aw + bw;\n  return out;\n}\n\n/** out = a - b. aliasing-safe. */\nexport function sub(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const aw = a[3] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  const bw = b[3] as number;\n  out[0] = ax - bx;\n  out[1] = ay - by;\n  out[2] = az - bz;\n  out[3] = aw - bw;\n  return out;\n}\n\n/** out = a * s. */\nexport function scale(out: Vec4, a: Vec4Like, s: number): Vec4 {\n  out[0] = (a[0] as number) * s;\n  out[1] = (a[1] as number) * s;\n  out[2] = (a[2] as number) * s;\n  out[3] = (a[3] as number) * s;\n  return out;\n}\n\n/** out = -a. The `0 - x` form avoids -0. */\nexport function negate(out: Vec4, a: Vec4Like): Vec4 {\n  out[0] = 0 - (a[0] as number);\n  out[1] = 0 - (a[1] as number);\n  out[2] = 0 - (a[2] as number);\n  out[3] = 0 - (a[3] as number);\n  return out;\n}\n\n/** Dot product a · b (4 components). */\nexport function dot(a: Vec4Like, b: Vec4Like): number {\n  return (\n    (a[0] as number) * (b[0] as number) +\n    (a[1] as number) * (b[1] as number) +\n    (a[2] as number) * (b[2] as number) +\n    (a[3] as number) * (b[3] as number)\n  );\n}\n\n/** Squared length |a|² (avoids sqrt overhead). */\nexport function lengthSq(a: Vec4Like): number {\n  return lengthSq4(a);\n}\n\n/** Euclidean length |a|. */\nexport function length(a: Vec4Like): number {\n  return Math.sqrt(lengthSq4(a));\n}\n\n/** Distance between two points |a - b|. */\nexport function distance(a: Vec4Like, b: Vec4Like): number {\n  const dx = (a[0] as number) - (b[0] as number);\n  const dy = (a[1] as number) - (b[1] as number);\n  const dz = (a[2] as number) - (b[2] as number);\n  const dw = (a[3] as number) - (b[3] as number);\n  return Math.sqrt(dx * dx + dy * dy + dz * dz + dw * dw);\n}\n\n/**\n * out = a / |a| (unit-length).\n *\n * @degrade Zero vector (|a|² < EPS_NORMALIZE) silently falls back to the zero vector;\n * no NaN, no throw (gl-matrix style, AC-06 / D-P12).\n * @degrade NaN inputs → NaN outputs: when a component is NaN, lenSq=NaN; the `lenSq < EPS`\n * branch is false → goes through 1/sqrt(NaN)=NaN → output is all NaN (IEEE-754 NaN propagation;\n * still does not throw).\n *\n * @example\n * ```ts\n * vec4.normalize(out, [1, 2, 2, 0]);    // → (1/3, 2/3, 2/3, 0)\n * vec4.normalize(out, [0, 0, 0, 0]);    // → (0, 0, 0, 0) zero vector falls back (AC-06 no throw)\n * vec4.normalize(out, [NaN, 1, 0, 0]);  // → all NaN, IEEE-754 propagation\n * ```\n */\nexport function normalize(out: Vec4, a: Vec4Like): Vec4 {\n  normalize4(out, a, EPS_NORMALIZE);\n  return out;\n}\n\n/** out = lerp(a, b, t). t is not clamped (extrapolation semantics). aliasing-safe. */\nexport function lerp(out: Vec4, a: Vec4Like, b: Vec4Like, t: number): Vec4 {\n  const ax = a[0] as number;\n  const ay = a[1] as number;\n  const az = a[2] as number;\n  const aw = a[3] as number;\n  const bx = b[0] as number;\n  const by = b[1] as number;\n  const bz = b[2] as number;\n  const bw = b[3] as number;\n  out[0] = scalarLerp(ax, bx, t);\n  out[1] = scalarLerp(ay, by, t);\n  out[2] = scalarLerp(az, bz, t);\n  out[3] = scalarLerp(aw, bw, t);\n  return out;\n}\n\n/**\n * out = frame-rate-INDEPENDENT exponential smoothing of `current` toward `target`:\n * `lerp(current, target, 1 − exp(−decayRate · dt))`. Semantics match Bevy\n * `StableInterpolate::smooth_nudge` / three.js `MathUtils.damp` (1st-order decay, NOT Unity\n * `SmoothDamp`'s 2nd-order spring). `dt=0` → out=current; large `decayRate·dt` → out≈target.\n * Frame-rate independent by construction (one `dt` step = two composed `dt/2` steps). aliasing-safe.\n * See vec3.smoothDamp for the full contract. */\nexport function smoothDamp(\n  out: Vec4,\n  current: Vec4Like,\n  target: Vec4Like,\n  decayRate: number,\n  dt: number,\n): Vec4 {\n  return lerp(out, current, target, smoothDecayFactor(decayRate, dt));\n}\n\n/** Component-wise min. */\nexport function min(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n  out[0] = Math.min(a[0] as number, b[0] as number);\n  out[1] = Math.min(a[1] as number, b[1] as number);\n  out[2] = Math.min(a[2] as number, b[2] as number);\n  out[3] = Math.min(a[3] as number, b[3] as number);\n  return out;\n}\n\n/** Component-wise max. */\nexport function max(out: Vec4, a: Vec4Like, b: Vec4Like): Vec4 {\n  out[0] = Math.max(a[0] as number, b[0] as number);\n  out[1] = Math.max(a[1] as number, b[1] as number);\n  out[2] = Math.max(a[2] as number, b[2] as number);\n  out[3] = Math.max(a[3] as number, b[3] as number);\n  return out;\n}\n"]}