[
  {
    "module": "angle-field",
    "summary": "angle-field",
    "attributes": [
      {
        "name": "value",
        "default": "0` / `arcOf(0, 90)",
        "description": "degrees, or an `Arc`"
      },
      {
        "name": "label",
        "default": "—",
        "description": "drawn above the dial"
      },
      {
        "name": "limits",
        "default": "full circle",
        "description": "`angle3d` only — the permitted sector; the handle CATCHES at a stop"
      },
      {
        "name": "envelope",
        "default": "full circle",
        "description": "`arc3d` only — the arc may only lie within this"
      },
      {
        "name": "minWidth",
        "default": "0",
        "description": "`arc3d` only"
      },
      {
        "name": "maxWidth",
        "default": "360",
        "description": "`arc3d` only"
      },
      {
        "name": "size",
        "default": "0",
        "description": "ring diameter; `0` fits the row to the panel width"
      },
      {
        "name": "handleChange",
        "description": "live, every frame the pointer moves"
      },
      {
        "name": "handleCommit",
        "description": "once per gesture — your undo step"
      }
    ]
  },
  {
    "module": "b3d-aircraft",
    "tag": "tosi-b3d-aircraft",
    "summary": "b3d-aircraft",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "url",
        "default": "''",
        "description": "GLB model URL (direct load — collapsed through the same canonical frame as a library load: author Blender-default, facing −Y, transforms applied)"
      },
      {
        "name": "library",
        "default": "''",
        "description": "Library type to source mesh from"
      },
      {
        "name": "meshName",
        "default": "''",
        "description": "Node name to instantiate from library"
      },
      {
        "name": "player"
      },
      {
        "name": "enterable",
        "default": "false",
        "description": "Whether a biped can enter"
      },
      {
        "name": "ceiling"
      },
      {
        "name": "hudChaseOff",
        "default": "false",
        "description": "Hide the HUD entirely in chase view. By default chase shows the HUD **without the artificial horizon** (which would contradict the real one behind the aircraft); cockpit shows everything, in-scene"
      },
      {
        "name": "hudSize",
        "default": "0.7",
        "description": "In-cockpit HUD plane size (metres)"
      },
      {
        "name": "hudForward",
        "default": "1.6",
        "description": "How far ahead of the pilot's eye the HUD floats (metres)"
      },
      {
        "name": "maxSpeed",
        "default": "50",
        "description": "Normal top speed (m/s) — the cruise cap a released throttle settles at"
      },
      {
        "name": "afterburnerSpeed",
        "default": "75",
        "description": "Speed ceiling while the throttle is held past `maxSpeed`; releasing bleeds back to `maxSpeed`. ≤ `maxSpeed` disables afterburner."
      },
      {
        "name": "acceleration",
        "default": "12",
        "description": "Throttle / lean authority (speed change rate)"
      },
      {
        "name": "vtolSpeed",
        "default": "6",
        "description": "Forward ground speed splitting hover (below) from plane (above). 0 = pure aeroplane, no hover regime."
      },
      {
        "name": "reverseSpeed",
        "default": "5",
        "description": "How fast the craft may back up in a hover (m/s); nose up to reverse"
      },
      {
        "name": "throttleRate",
        "default": "0.8",
        "description": "How fast the trigger moves the throttle LEVER (full travel per second)"
      },
      {
        "name": "autoGear",
        "default": "'on'",
        "description": "Find the model's gear-retract animations by NAME and run them from height above ground. `'off'` = manual (`setGear(up)`)"
      },
      {
        "name": "gearAltitude",
        "default": "40",
        "description": "Height above ground (m) at which the gear retracts; it extends again at 60% of this (hysteresis)"
      },
      {
        "name": "gearSound",
        "default": "''",
        "description": "Optional URL played spatially at the airframe on each gear transition"
      },
      {
        "name": "gearVolume",
        "default": "0.6",
        "description": "Volume for `gearSound`"
      },
      {
        "name": "gearTime",
        "default": "2.5",
        "description": "Seconds for a full gear cycle"
      },
      {
        "name": "lookRange",
        "default": "120",
        "description": "How far the right stick can swing the view (degrees each way)"
      },
      {
        "name": "maxPitch",
        "default": "35",
        "description": "Max nose-UP attitude the stick commands (degrees)"
      },
      {
        "name": "maxDive",
        "default": "0",
        "description": "Max nose-DOWN attitude (degrees); 0 = symmetric with `maxPitch`"
      },
      {
        "name": "lookRate",
        "default": "150",
        "description": "Look slew rate (degrees/sec at full stick)"
      },
      {
        "name": "lookReturn",
        "default": "4",
        "description": "How fast the view springs back to centre when released"
      },
      {
        "name": "chasePitchFollow",
        "default": "0",
        "description": "How much airframe PITCH the chase inherits. `0` = level pivot (plane pitches within the frame); `1` = as if parented to the airframe (a climb aims the view up)"
      },
      {
        "name": "chasePitchLag",
        "default": "3",
        "description": "How fast that inherited pitch catches up (per second) — the low-pass that keeps attitude jitter out of the chase"
      },
      {
        "name": "hoverCeiling",
        "default": "140",
        "description": "Height above ground above which the trigger is forward thrust regardless of speed (take off vertically, then fly) and the brake can't stall you below `vtolSpeed`. Below it, slowing to a hover gives the vertical trigger back for a vertical landing. 0 = off."
      },
      {
        "name": "groundY",
        "default": "0",
        "description": "Assumed ground-plane height (a floor in addition to any terrain colliders)"
      },
      {
        "name": "submersible",
        "default": "false",
        "description": "Pass THROUGH a water surface instead of treating it as ground. Off by default — a plane hitting the sea should crash"
      },
      {
        "name": "waterDrag",
        "default": "10",
        "description": "Submersible only: how much thicker water is than air, as a drag multiplier. At ×10, full throttle settles at ~32% of `maxSpeed` underwater"
      },
      {
        "name": "turbulence",
        "default": "'on'",
        "description": "The weather reaches the airframe: wind makes it drift and crab, storms (storminess) and strong wind buffet it. Changes nothing in a calm scene; `'off'` ignores the weather"
      },
      {
        "name": "turbulenceScale",
        "default": "1",
        "description": "Scales the buffeting"
      },
      {
        "name": "waterTransition",
        "default": "2",
        "description": "Metres over which drag blends from air to water across the surface"
      },
      {
        "name": "crashSpeed",
        "default": "8",
        "description": "Vertical impact speed (m/s) above which a ground contact is a crash"
      },
      {
        "name": "weapons",
        "default": "'on'",
        "description": "`'off'` disarms all weapons"
      },
      {
        "name": "gunRate",
        "default": "9",
        "description": "Cannon shots/sec while `shoot` is held"
      },
      {
        "name": "gunSpeed",
        "default": "130",
        "description": "Cannon muzzle speed (added to airspeed)"
      },
      {
        "name": "gunDamage",
        "default": "8",
        "description": "Per-shell damage"
      },
      {
        "name": "gunMode",
        "default": "'direct'",
        "description": "`'direct'` damages what the shell passes through; `'blast'` is the old AOE"
      },
      {
        "name": "gunFullRadius",
        "default": "0.5",
        "description": "Only for `gunMode=\"blast\"`"
      },
      {
        "name": "gunBlastRadius",
        "default": "1.5",
        "description": "Only for `gunMode=\"blast\"`"
      },
      {
        "name": "destroyable",
        "default": "'off'",
        "description": "`'on'` gives the aircraft hit points and a death outcome"
      },
      {
        "name": "capacity",
        "default": "30",
        "description": "Combat stats"
      },
      {
        "name": "armor",
        "default": "0",
        "description": "Combat stats"
      },
      {
        "name": "regenRate",
        "default": "0",
        "description": "Combat stats"
      },
      {
        "name": "regenDelay",
        "default": "0.5",
        "description": "Combat stats"
      },
      {
        "name": "explode",
        "default": "'on'",
        "description": "Death outcome"
      },
      {
        "name": "explodeForce",
        "default": "8",
        "description": "Death outcome"
      },
      {
        "name": "blip",
        "default": "'off'",
        "description": "`'on'` puts it on radar, so a missile can lock it"
      },
      {
        "name": "blipProfile",
        "default": "1",
        "description": "Radar detectability and side"
      },
      {
        "name": "faction",
        "default": "'neutral'",
        "description": "Radar detectability and side"
      },
      {
        "name": "missileSpeed",
        "default": "55",
        "description": "Guided-missile cruise speed"
      },
      {
        "name": "missileAccel"
      },
      {
        "name": "missileBoost"
      },
      {
        "name": "missileTurnRate",
        "default": "3",
        "description": "Guided-missile agility (rad/sec)"
      },
      {
        "name": "missileDamage",
        "default": "30",
        "description": "Missile warhead full damage"
      },
      {
        "name": "bombDamage",
        "default": "45",
        "description": "Bomb warhead full damage"
      },
      {
        "name": "lockRange",
        "default": "140",
        "description": "Max range to acquire a missile target"
      },
      {
        "name": "lockConeDeg",
        "default": "35",
        "description": "Half-angle of the forward cone missiles lock within"
      },
      {
        "name": "reticle"
      },
      {
        "name": "reticleRange"
      }
    ]
  },
  {
    "module": "b3d-ambient",
    "tag": "tosi-b3d-ambient",
    "summary": "b3d-ambient",
    "attributes": [
      {
        "name": "preset",
        "default": "'motes'",
        "description": "`motes` / `bubbles` / `rain` / `snow` / `dust` / `leaves`"
      },
      {
        "name": "where",
        "default": "'always'",
        "description": "`always` / `underwater` / `above` — emission ramps with depth, it doesn't switch"
      },
      {
        "name": "count",
        "default": "auto",
        "description": "Capacity to ASK for (`auto` = what the preset's look needs). You may not get it — the scene divides a shared pool"
      },
      {
        "name": "minCount",
        "default": "auto",
        "description": "Below this the effect is a lie, so it switches **off** instead. `auto` = the preset's floor (rain needs density; a few motes still read fine as motes)"
      },
      {
        "name": "minTier",
        "default": "'low'",
        "description": "Never run below this device tier, at any budget"
      },
      {
        "name": "priority",
        "default": "0",
        "description": "Higher survives longer when the pool is squeezed. Shed lowest-first"
      },
      {
        "name": "radius",
        "default": "18",
        "description": "Size of the box around the camera that particles spawn in"
      },
      {
        "name": "lookAhead",
        "default": "0.35",
        "description": "Push the spawn box along the VIEW, in units of `radius` — a camera sees a frustum, not a sphere, so a centred box births most of its particles behind you (#18)"
      },
      {
        "name": "lead",
        "default": "0.25",
        "description": "Push it along MOTION, in seconds of travel — at speed you outrun a centred box, which empties the view ahead exactly when you want it fullest (#17)"
      },
      {
        "name": "speedCap",
        "default": "40",
        "description": "Speed (m/s) past which `lead` stops growing"
      },
      {
        "name": "rate",
        "default": "0",
        "description": "Particles/sec (0 = derive from the preset)"
      },
      {
        "name": "color",
        "default": "''",
        "description": "Override the preset's colour"
      },
      {
        "name": "size",
        "default": "0",
        "description": "Scale the preset's sprite size"
      },
      {
        "name": "windX",
        "default": "0",
        "description": "World wind (rain slants, dust blows)"
      },
      {
        "name": "windZ",
        "default": "0"
      },
      {
        "name": "wind"
      },
      {
        "name": "disabled",
        "default": "false",
        "description": "Stop emitting"
      },
      {
        "name": "weather",
        "default": "'off'",
        "description": "`'rain'` / `'snow'`: emission follows the PRECIPITATION where the viewer is (weather cells), so a storm brings its own rain; the local temperature splits rain from snow (sleet between). `'off'` = always on"
      }
    ]
  },
  {
    "module": "b3d-beacon",
    "tag": "tosi-b3d-beacon",
    "summary": "b3d-beacon",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "position, used when `follow` is off or there is nothing to follow"
      },
      {
        "name": "y",
        "default": "0",
        "description": "position, used when `follow` is off or there is nothing to follow"
      },
      {
        "name": "z",
        "default": "0",
        "description": "position, used when `follow` is off or there is nothing to follow"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "name",
        "default": "''",
        "description": "what this beacon stands for, for a readout or a list"
      },
      {
        "name": "size",
        "default": "0.5",
        "description": "cube edge, in metres"
      },
      {
        "name": "width",
        "default": "0",
        "description": "per-axis extent; `0` means \"use `size`\""
      },
      {
        "name": "height",
        "default": "0",
        "description": "per-axis extent; `0` means \"use `size`\""
      },
      {
        "name": "depth",
        "default": "0",
        "description": "per-axis extent; `0` means \"use `size`\""
      },
      {
        "name": "shape",
        "default": "'box'",
        "description": "`'box'` or `'sphere'`"
      },
      {
        "name": "show",
        "default": "'off'",
        "description": "`'on'` draws it as a wireframe — for debugging, not for play"
      },
      {
        "name": "follow",
        "default": "'on'",
        "description": "track the element this is nested in, rather than its own `x`/`y`/`z`"
      }
    ]
  },
  {
    "module": "b3d-biped",
    "tag": "tosi-b3d-biped",
    "summary": "b3d-biped",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "url",
        "default": "''",
        "description": "GLB model URL"
      },
      {
        "name": "skin",
        "default": "''",
        "description": "Optional albedo texture URL applied to the `skin` material (reskin)"
      },
      {
        "name": "scale",
        "default": "1",
        "description": "Uniform scale applied to the loaded model"
      },
      {
        "name": "player",
        "default": "false",
        "description": "Whether this biped receives input"
      },
      {
        "name": "cameraType",
        "default": "'none'",
        "description": "`'follow'`, `'xr'`, or `'none'`"
      },
      {
        "name": "animation",
        "default": "''",
        "description": "Current animation state name"
      },
      {
        "name": "animationSpeed",
        "default": "1",
        "description": "Playback speed multiplier (0–2)"
      },
      {
        "name": "initialState"
      },
      {
        "name": "turnSpeed",
        "default": "180",
        "description": "Degrees per second"
      },
      {
        "name": "forwardSpeed",
        "default": "2",
        "description": "Walk speed"
      },
      {
        "name": "runSpeed",
        "default": "5",
        "description": "Sprint speed"
      },
      {
        "name": "backwardSpeed",
        "default": "1",
        "description": "Backward speed"
      },
      {
        "name": "cameraHeightOffset",
        "default": "1",
        "description": "Camera height above target"
      },
      {
        "name": "cameraTargetHeight",
        "default": "0.75",
        "description": "Height of the point the camera looks at"
      },
      {
        "name": "cameraMinFollowDistance",
        "default": "2",
        "description": "Closest follow distance"
      },
      {
        "name": "cameraMaxFollowDistance",
        "default": "5",
        "description": "Furthest follow distance"
      },
      {
        "name": "groundY"
      },
      {
        "name": "eyeHeight"
      },
      {
        "name": "lookRate"
      },
      {
        "name": "aiming"
      },
      {
        "name": "aimFreeYaw"
      },
      {
        "name": "aimMaxYaw"
      },
      {
        "name": "maxLookPitch"
      },
      {
        "name": "eyeForward"
      },
      {
        "name": "invertLookY"
      },
      {
        "name": "cameraMinHeight"
      },
      {
        "name": "jumpSpeed"
      },
      {
        "name": "sneakSpeed"
      },
      {
        "name": "strafeSpeed"
      },
      {
        "name": "climbReach"
      },
      {
        "name": "wadeDepth"
      },
      {
        "name": "strafing"
      },
      {
        "name": "buoyancy"
      }
    ]
  },
  {
    "module": "b3d-black-hole",
    "tag": "tosi-b3d-black-hole",
    "summary": "b3d-black-hole",
    "attributes": [
      {
        "name": "radius",
        "default": "10",
        "description": "Event horizon radius"
      },
      {
        "name": "diskInnerRadius",
        "default": "1.5",
        "description": "Inner edge of accretion disk (multiple of radius)"
      },
      {
        "name": "diskOuterRadius",
        "default": "4.0",
        "description": "Outer edge of accretion disk (multiple of radius)"
      },
      {
        "name": "diskBrightness",
        "default": "1.5",
        "description": "Accretion disk emissive brightness"
      },
      {
        "name": "rotationSpeed",
        "default": "0.3",
        "description": "Disk rotation speed (rad/sec)"
      },
      {
        "name": "lensing",
        "default": "'on'",
        "description": "Show gravitational lensing ring"
      },
      {
        "name": "photonRing",
        "default": "'on'",
        "description": "Show photon ring at event horizon"
      },
      {
        "name": "photonRingBrightness",
        "default": "2.0",
        "description": "Photon ring glow intensity"
      },
      {
        "name": "wireframe",
        "default": "false",
        "description": "Debug wireframe"
      },
      {
        "name": "seed",
        "default": "12345",
        "description": "Noise seed for disk turbulence"
      },
      {
        "name": "subdivisions",
        "default": "64",
        "description": "Mesh detail level (lower = faster)"
      }
    ]
  },
  {
    "module": "b3d-button",
    "tag": "tosi-b3d-button",
    "attributes": [
      {
        "name": "caption"
      },
      {
        "name": "textColor"
      },
      {
        "name": "fontSize"
      },
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      }
    ]
  },
  {
    "module": "b3d-car",
    "tag": "tosi-b3d-car",
    "summary": "b3d-car",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "url",
        "default": "''",
        "description": "GLB model URL"
      },
      {
        "name": "enterable",
        "default": "false",
        "description": "Whether a biped can enter this vehicle"
      },
      {
        "name": "maxSpeed",
        "default": "15",
        "description": "Maximum forward speed"
      },
      {
        "name": "acceleration",
        "default": "8",
        "description": "Acceleration rate"
      },
      {
        "name": "braking",
        "default": "15",
        "description": "Braking rate"
      },
      {
        "name": "turnRate",
        "default": "90",
        "description": "Degrees per second at full speed"
      },
      {
        "name": "friction",
        "default": "3",
        "description": "Deceleration when coasting"
      }
    ]
  },
  {
    "module": "b3d-cloud-deck",
    "summary": "b3d-cloud-deck",
    "attributes": [
      {
        "name": "altitude",
        "default": "140",
        "description": "Height of the deck. Moving it is ONE number"
      },
      {
        "name": "size",
        "default": "14000",
        "description": "World extent of the deck. Big enough to reach the horizon — a flat grid is nearly free"
      },
      {
        "name": "subdivisions",
        "default": "64",
        "description": "Grid resolution — see \"A grid, not a quad\""
      },
      {
        "name": "coverage",
        "default": "0.5",
        "description": "Clear `0` → solid `1` → thickening to `2`. LIVE, and shared with the shadow"
      },
      {
        "name": "thickenDepth",
        "default": "900",
        "description": "MAX thickening — how far the cloud TOP rises above `altitude` at `coverage: 2`"
      },
      {
        "name": "cirrus",
        "default": "0",
        "description": "Rounded heaps `0` → long wispy streaks at `±1`: positive streaks ALONG the wind heading, negative ACROSS it. Rebakes the field"
      },
      {
        "name": "wind",
        "default": "8",
        "description": "Metres per second the deck drifts. Nothing rebakes"
      },
      {
        "name": "windHeadingDeg",
        "default": "0",
        "description": "Which way it drifts — and the direction cirrus streaks run"
      },
      {
        "name": "evolve",
        "default": "0.5",
        "description": "How fast shapes change, `0` rigid → `1` restless"
      },
      {
        "name": "follow",
        "default": "'on'",
        "description": "Keep the deck centred under the camera. A deck is finite; the world is not"
      },
      {
        "name": "ambientGloomBelow",
        "default": "0.7",
        "description": "`transmission` below which the AMBIENT fill starts to go. `0` disables"
      },
      {
        "name": "ambientGloom",
        "default": "0.45",
        "description": "How far the ambient may be taken down"
      },
      {
        "name": "sunGloomBelow",
        "default": "0.25",
        "description": "`transmission` below which the SUN starts to go — later than the ambient, on purpose"
      },
      {
        "name": "sunGloom",
        "default": "0.65",
        "description": "How far the sun may be taken down at zero transmission"
      },
      {
        "name": "localRise",
        "default": "1200",
        "description": "How far a local weather field can lift the cloud TOP, at `coverage: 2`. Large because the orographic field is attenuated at massif scale — see the attribute note"
      },
      {
        "name": "stormRise",
        "default": "0",
        "description": "Opt-in STORM TOWER: how far the top skin rises over a cell whose coverage passes 1 (domed). Off by default: a storm is more cover and lightning, not geometry of its own — lightning lights the underside from below, the whiteout from inside, and the top from above"
      },
      {
        "name": "localCoverage",
        "default": "1",
        "description": "How much a unit of local weather adds to `coverage`. What the field does BELOW an overcast"
      },
      {
        "name": "orographic",
        "default": "0",
        "description": "Cloud gathers over high ground, `0…1`: most over RIDGES (ground above its surroundings), some over high plateaus, measured from the SEA (the scene's water surface), so a high sea does not make all land a mountain. Needs a terrain in the scene"
      },
      {
        "name": "orographicPeak",
        "default": "260",
        "description": "Height ABOVE THE SEA at which `orographic` is at full strength"
      },
      {
        "name": "shadows",
        "default": "'on'",
        "description": "Cloud shadows on the ground"
      },
      {
        "name": "shadowResolution",
        "default": "0",
        "description": "Shadow texture size. Deliberately coarser than the cloud — a soft cue does not need the detail"
      },
      {
        "name": "shadowRange",
        "default": "6000",
        "description": "Width in metres of the shadow window, centred on the camera"
      },
      {
        "name": "shadowStrength",
        "default": "0.75",
        "description": "Shadow darkness at zero transmission. Scaled down as `transmission` rises — a cloud you can see daylight through does not cast a hard shadow"
      },
      {
        "name": "transmission",
        "default": "-1",
        "description": "How much light comes THROUGH: `0` storm-dark underside, `1` glowing. `-1` = auto from `coverage`"
      },
      {
        "name": "thickness",
        "default": "180",
        "description": "Whiteout depth at FULL coverage. Thinner skies scale it down — passing through always whites out, coverage decides for how long"
      },
      {
        "name": "haze",
        "default": "0.6",
        "description": "How much the air under the deck takes the cloud's colour. Hides the rim"
      },
      {
        "name": "seed",
        "default": "1337",
        "description": "Same seed, same weather"
      },
      {
        "name": "frequency",
        "default": "3",
        "description": "Field repeats across its own width. Higher = smaller puffs"
      },
      {
        "name": "octaves",
        "default": "6",
        "description": "Detail octaves. Billow needs more than fBm — folding eats fine structure"
      },
      {
        "name": "fieldSize",
        "default": "1024",
        "description": "Texels per edge of the baked density field. More texels = finer cloud, 1 byte each"
      },
      {
        "name": "period",
        "default": "1800",
        "description": "Metres per repeat of the field — the size of the CLOUDS, independent of the size of the deck"
      },
      {
        "name": "edgeFade",
        "default": "0.45",
        "description": "Where the radial fade starts, as a fraction of the half-size. The deck has no visible rim at any coverage"
      },
      {
        "name": "color",
        "default": "'#ffffff'",
        "description": "Lit top colour"
      },
      {
        "name": "underColor",
        "default": "'#3a4350'",
        "description": "Shadowed underside"
      },
      {
        "name": "fringe",
        "default": "0.9",
        "description": "Brightness of the lit edges seen from below. ADDED, so it can exceed 1, and it takes the scene light's colour and direction — brightest with the sun behind the cloud"
      },
      {
        "name": "bump",
        "default": "34",
        "description": "Faux-bump strength. Higher = more pronounced relief"
      },
      {
        "name": "underBump",
        "default": "0.85",
        "description": "How much relief the UNDERSIDE shows. Borrowed from the top's lighting, so both faces share one shape"
      },
      {
        "name": "shade",
        "default": "0.22",
        "description": "How much of the top's brightness the lighting may take. Small on purpose — cloud is near-white, and a wide swing reads as water"
      }
    ]
  },
  {
    "module": "b3d-clouds",
    "tag": "tosi-b3d-clouds",
    "summary": "b3d-clouds",
    "attributes": [
      {
        "name": "count",
        "default": "36",
        "description": "Blob POOL size (fixed — they recycle, they don't grow). `coverage` decides how many are active"
      },
      {
        "name": "model",
        "default": "''",
        "description": "GLB whose mesh is the cloud LOBE (normalized to the blob radius, bottom-aligned). Empty = the procedural lobe"
      },
      {
        "name": "altitude",
        "default": "140",
        "description": "Centre height of the layer"
      },
      {
        "name": "thickness",
        "default": "36",
        "description": "Vertical spread of the layer"
      },
      {
        "name": "spread",
        "default": "1200",
        "description": "Radius of the disc of cloud around you"
      },
      {
        "name": "size",
        "default": "70",
        "description": "Blob radius — also the distance at which whiteout is total. Set at build"
      },
      {
        "name": "color",
        "default": "'#ffffff'",
        "description": "Cloud (and whiteout) colour"
      },
      {
        "name": "opacity",
        "default": "1",
        "description": "Blob alpha. Default OPAQUE — translucent clouds read badly. Set < 1 only for deliberate wisps"
      },
      {
        "name": "fogDensity",
        "default": "1.0",
        "description": "Whiteout density (EXP2, the scene's mode). HIGH on purpose — inside a cloud you should see nothing but white within a few metres"
      },
      {
        "name": "approach",
        "default": "0.5",
        "description": "Where the whiteout BEGINS, × `size` outside the blob. It's TOTAL well before the surface (you never see the geometry edge) and stays total until you leave"
      },
      {
        "name": "selfIllum",
        "default": "0.35",
        "description": "Self-illumination 0…1 — `1` ≈ fully self-lit (old look), `0` = only sun-lit (dark undersides)"
      },
      {
        "name": "coverage",
        "default": "0.5",
        "description": "Weather dial 0…1: wisps → overcast/thunderheads. LIVE. Gates active count + opacity + darkness + self-illum"
      },
      {
        "name": "castShadows",
        "default": "false",
        "description": "Opt-in: project the field's shadows onto every shadow-receiving surface ([cloud-shadows](?cloud-shadows.ts))"
      },
      {
        "name": "shadowStrength",
        "default": "0.65",
        "description": "Darkness of those shadows 0…1, scaled further by `coverage` (≈50% darkening at typical coverage)"
      },
      {
        "name": "seed",
        "default": "1",
        "description": "Deterministic layout — same seed, same sky"
      },
      {
        "name": "windX"
      },
      {
        "name": "windZ"
      },
      {
        "name": "wind"
      }
    ]
  },
  {
    "module": "b3d-collisions",
    "tag": "tosi-b3d-collisions",
    "summary": "b3d-collisions",
    "attributes": [
      {
        "name": "debug"
      }
    ]
  },
  {
    "module": "b3d-controller",
    "tag": "tosi-b3d-controller",
    "summary": "b3d-controller",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "mapping",
        "default": "'biped'",
        "description": "Which control scheme maps the gamepad to `ControlInput`: `'biped'`, `'car'`, or `'aircraft'`"
      },
      {
        "name": "player"
      }
    ]
  },
  {
    "module": "b3d-crowd",
    "tag": "tosi-b3d-crowd",
    "summary": "b3d-crowd",
    "attributes": [
      {
        "name": "count",
        "default": "200",
        "description": "How many figures. One draw call whatever it is"
      },
      {
        "name": "spread",
        "default": "60",
        "description": "Metres across the field they scatter over"
      },
      {
        "name": "bakeFps",
        "default": "10",
        "description": "Frames baked per second of clip — the memory knob"
      },
      {
        "name": "interpolate",
        "default": "'on'",
        "description": "`'off'` snaps to the nearest frame: cheaper, jerkier"
      },
      {
        "name": "skinned",
        "default": "0",
        "description": "How many SKINNED clones to spawn alongside, as the baseline"
      },
      {
        "name": "skinnedUrl",
        "default": "'/omnidude.glb'",
        "description": "The GLB the baseline clones"
      },
      {
        "name": "url",
        "default": "a rigged GLB to bake from; empty = the synthetic figure"
      },
      {
        "name": "clips",
        "default": "''",
        "description": "Which of its clips to bake, comma-separated. Empty = all"
      },
      {
        "name": "figureScale",
        "default": "1",
        "description": "Scale applied to the baked figure (omnidude is 0.88m)"
      }
    ]
  },
  {
    "module": "b3d-death",
    "tag": "tosi-b3d-death",
    "summary": "b3d-death",
    "attributes": [
      {
        "name": "title",
        "default": "'DOWN'",
        "description": "Heading on the panel"
      },
      {
        "name": "delay",
        "default": "1.4",
        "description": "Seconds between the bang and the panel (let the player watch it burn)"
      },
      {
        "name": "orbitRadius",
        "default": "14",
        "description": "Camera distance from the wreck"
      },
      {
        "name": "orbitHeight",
        "default": "6",
        "description": "Camera height above the wreck"
      },
      {
        "name": "orbitSpeed",
        "default": "6",
        "description": "Degrees/sec — slow. This is a moment, not a ride"
      },
      {
        "name": "spectate",
        "default": "'orbit'",
        "description": "`orbit` circles the wreck; `chase` freezes the third-person shot you died in (static). Flat only"
      },
      {
        "name": "wreckage",
        "default": "'on'",
        "description": "Explode + leave burning wreckage (`'off'` = just the panel)"
      },
      {
        "name": "blastRadius",
        "default": "6",
        "description": "Size of the fireball"
      }
    ]
  },
  {
    "module": "b3d-decorator",
    "tag": "tosi-b3d-decorator",
    "summary": "b3d-decorator",
    "attributes": [
      {
        "name": "budget",
        "default": "2000",
        "description": "How many things to place. Performance cares about this, not density"
      },
      {
        "name": "radius",
        "default": "900",
        "description": "Metres around the camera to fill"
      },
      {
        "name": "seed",
        "default": "1",
        "description": "Same seed, same forest"
      },
      {
        "name": "url",
        "default": "''",
        "description": "The model library; empty = Kenney's Nature Kit on the CDN"
      },
      {
        "name": "scale",
        "default": "1",
        "description": "Multiplies every rule's scale range"
      },
      {
        "name": "follow",
        "default": "'on'",
        "description": "Re-scatter as the camera moves"
      },
      {
        "name": "shadows",
        "default": "'off'",
        "description": "Cast shadows — from the NEAR copies only (`shadowRange`, `shadowBudget`), through a shadow-only twin of each part. Copies always RECEIVE shadows. Live"
      },
      {
        "name": "colliders",
        "default": "'on'",
        "description": "The nearby collider pool"
      },
      {
        "name": "colliderRange",
        "default": "60",
        "description": "Metres around the camera that get colliders"
      },
      {
        "name": "colliderPool",
        "default": "48",
        "description": "How many colliders at most"
      },
      {
        "name": "shadowRange",
        "default": "200",
        "description": "Metres around the camera whose copies cast shadows (with `shadows: 'on'`)"
      },
      {
        "name": "shadowBudget",
        "default": "600",
        "description": "How many of the nearest copies cast, at most"
      }
    ]
  },
  {
    "module": "b3d-destroyable",
    "tag": "tosi-b3d-destroyable",
    "summary": "b3d-destroyable",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "meshName"
      },
      {
        "name": "library"
      },
      {
        "name": "destroyable"
      },
      {
        "name": "size"
      },
      {
        "name": "scale"
      },
      {
        "name": "color"
      },
      {
        "name": "capacity"
      },
      {
        "name": "armor"
      },
      {
        "name": "regenRate"
      },
      {
        "name": "regenDelay"
      },
      {
        "name": "protectedBy"
      },
      {
        "name": "protection"
      },
      {
        "name": "remains"
      },
      {
        "name": "sound"
      },
      {
        "name": "soundVolume"
      },
      {
        "name": "explode"
      },
      {
        "name": "explodeForce"
      },
      {
        "name": "deathBlast"
      },
      {
        "name": "blastDamage"
      },
      {
        "name": "blastFullRadius"
      },
      {
        "name": "blastRadius"
      },
      {
        "name": "blastDelay"
      }
    ]
  },
  {
    "module": "b3d-elevator",
    "summary": "b3d-elevator",
    "attributes": [
      {
        "name": "mode",
        "default": "'cycle'",
        "description": "`'cycle'` runs forever; `'pressure'` moves while something stands on it; `'switch'` waits for `call()`"
      },
      {
        "name": "travel",
        "default": "3",
        "description": "Metres between the bottom stop and the top"
      },
      {
        "name": "stops",
        "default": "2",
        "description": "How many stops, evenly spaced. `2` is bottom and top"
      },
      {
        "name": "speed",
        "default": "1.2",
        "description": "Metres per second"
      },
      {
        "name": "pause",
        "default": "1.5",
        "description": "Seconds held at each stop"
      },
      {
        "name": "width",
        "default": "2",
        "description": "Platform size"
      },
      {
        "name": "depth",
        "default": "2",
        "description": "Platform size"
      },
      {
        "name": "thickness",
        "default": "0.2",
        "description": "Platform thickness — it gets a collision proxy like any thin solid"
      },
      {
        "name": "color",
        "default": "'#8a8f98'"
      }
    ]
  },
  {
    "module": "b3d-fog",
    "tag": "tosi-b3d-fog",
    "summary": "b3d-fog",
    "attributes": [
      {
        "name": "mode",
        "default": "'linear'",
        "description": "`'linear'`, `'exp'`, or `'exp2'`"
      },
      {
        "name": "color",
        "default": "'#bfd9f2'",
        "description": "Fog color (hex, ignored when `syncSkybox` is true)"
      },
      {
        "name": "start",
        "default": "60",
        "description": "Start distance (linear mode)"
      },
      {
        "name": "end",
        "default": "120",
        "description": "End distance (linear mode)"
      },
      {
        "name": "density",
        "default": "0.01",
        "description": "Density (exp/exp2 modes)"
      },
      {
        "name": "syncSkybox",
        "default": "false",
        "description": "Automatically match fog color to skybox horizon"
      }
    ]
  },
  {
    "module": "b3d-galaxy",
    "tag": "tosi-b3d-galaxy",
    "summary": "b3d-galaxy",
    "attributes": [
      {
        "name": "seed",
        "default": "1234",
        "description": "Galaxy seed"
      },
      {
        "name": "starCount",
        "default": "10000",
        "description": "The galaxy's BRIGHT budget — the stars visible across it (±noise; counts round per voxel). The dim population is local and not loaded here yet"
      },
      {
        "name": "dimBudget",
        "default": "95000",
        "description": "The DIM population's budget. Its interesting share (~5%, HI ≤ 2) is drawn globally; the boring rest only near a point (the baker's eye)"
      },
      {
        "name": "radius",
        "default": "100",
        "description": "Galaxy radius in scene units"
      },
      {
        "name": "spiralArms",
        "default": "4",
        "description": "Number of spiral arms"
      },
      {
        "name": "spiralAngle",
        "default": "240",
        "description": "Spiral arm sweep in degrees"
      },
      {
        "name": "thickness",
        "default": "0.06",
        "description": "Disk thickness (fraction of radius)"
      },
      {
        "name": "particleSize",
        "default": "1.0",
        "description": "Base star particle diameter"
      },
      {
        "name": "coreSize",
        "default": "0.12",
        "description": "Central black hole radius. Disk radii are multiples of it, so this scales the whole assembly"
      },
      {
        "name": "distantGalaxies",
        "default": "500",
        "description": "External galaxies scattered isotropically outside the disc — what keeps the off-band sky from reading as empty"
      },
      {
        "name": "distantStars",
        "default": "3000",
        "description": "Dim far-out stars scattered isotropically outside the disc — the same emptiness budget, but for POINTS. They carry no name or system; they exist so the sky outside the band has texture"
      },
      {
        "name": "maxStarApparentSize",
        "default": "0.01",
        "description": "Cap on a star's apparent size as a fraction of its distance. `0` = off. Only affects the near end"
      }
    ]
  },
  {
    "module": "b3d-hud",
    "tag": "tosi-b3d-hud",
    "summary": "b3d-hud",
    "attributes": [
      {
        "name": "url",
        "default": "''",
        "description": "Empty = the built-in code HUD (fully wired); set to a designer SVG to load one"
      },
      {
        "name": "size",
        "default": "70",
        "description": "HUD height as a % of the canvas's smaller dimension"
      },
      {
        "name": "pxPerDeg",
        "default": "8",
        "description": "Pitch-ladder pixels per degree"
      }
    ]
  },
  {
    "module": "b3d-input-focus",
    "tag": "tosi-b3d-input-focus",
    "summary": "b3d-input-focus",
    "attributes": [
      {
        "name": "enterDistance",
        "default": "3",
        "description": "Max distance to enter a vehicle"
      }
    ]
  },
  {
    "module": "b3d-interactive",
    "tag": "tosi-b3d-interactive",
    "summary": "b3d-interactive",
    "attributes": [
      {
        "name": "target",
        "default": "''",
        "description": "Mesh or node name to make touchable. Empty = the mesh of the element this one is nested inside"
      },
      {
        "name": "include",
        "default": "'subtree'",
        "description": "`'subtree'` counts the named node and everything under it; `'self'` counts only the node itself"
      },
      {
        "name": "reach",
        "default": "0",
        "description": "Max distance **from the player**, in world units; `0` means no limit"
      },
      {
        "name": "disabled",
        "default": "false",
        "description": "Refuses hover, and drops a press already in flight"
      },
      {
        "name": "highlight",
        "default": "'#ffcc44'",
        "description": "Hover outline colour; `'none'` for no highlight"
      }
    ]
  },
  {
    "module": "b3d-lamp (tosi-b3d-point-light)",
    "tag": "tosi-b3d-point-light",
    "summary": "Lamps",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Position"
      },
      {
        "name": "y",
        "default": "3",
        "description": "Position"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Position"
      },
      {
        "name": "intensity",
        "default": "1",
        "description": "Brightness. With `modulation`, this is the MAXIMUM"
      },
      {
        "name": "diffuse",
        "default": "'#ffffff'",
        "description": "Colour"
      },
      {
        "name": "specular",
        "default": "'#ffffff'",
        "description": "Specular colour"
      },
      {
        "name": "range",
        "default": "10",
        "description": "Falloff distance (point / spot)"
      },
      {
        "name": "on",
        "default": "true",
        "description": "`false` plays the DECAY region; it does not kill the light"
      },
      {
        "name": "geometry",
        "default": "'on'",
        "description": "`'off'` for no fixture"
      },
      {
        "name": "geometryScale",
        "default": "1",
        "description": "Size multiplier for the default fixture"
      },
      {
        "name": "url",
        "default": "—",
        "description": "GLB fixture, in place of the primitive"
      },
      {
        "name": "shadows",
        "default": "'off'",
        "description": "`'on'` for a shadow generator (point / spot only)"
      },
      {
        "name": "timeSource"
      },
      {
        "name": "shadowTextureSize",
        "default": "0",
        "description": "Resolves against the device budget"
      }
    ]
  },
  {
    "module": "b3d-lamp (tosi-b3d-spot-light)",
    "tag": "tosi-b3d-spot-light",
    "summary": "Lamps",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Position"
      },
      {
        "name": "y",
        "default": "3",
        "description": "Position"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Position"
      },
      {
        "name": "intensity",
        "default": "1",
        "description": "Brightness. With `modulation`, this is the MAXIMUM"
      },
      {
        "name": "diffuse",
        "default": "'#ffffff'",
        "description": "Colour"
      },
      {
        "name": "specular",
        "default": "'#ffffff'",
        "description": "Specular colour"
      },
      {
        "name": "range",
        "default": "10",
        "description": "Falloff distance (point / spot)"
      },
      {
        "name": "on",
        "default": "true",
        "description": "`false` plays the DECAY region; it does not kill the light"
      },
      {
        "name": "geometry",
        "default": "'on'",
        "description": "`'off'` for no fixture"
      },
      {
        "name": "geometryScale",
        "default": "1",
        "description": "Size multiplier for the default fixture"
      },
      {
        "name": "url",
        "default": "—",
        "description": "GLB fixture, in place of the primitive"
      },
      {
        "name": "shadows",
        "default": "'off'",
        "description": "`'on'` for a shadow generator (point / spot only)"
      },
      {
        "name": "timeSource"
      },
      {
        "name": "shadowTextureSize",
        "default": "0",
        "description": "Resolves against the device budget"
      },
      {
        "name": "angle",
        "default": "60",
        "description": "**spot** — cone angle in degrees"
      },
      {
        "name": "exponent",
        "default": "2",
        "description": "**spot** — falloff sharpness (standard falloff)"
      },
      {
        "name": "innerAngle",
        "default": "0",
        "description": "**spot** — inner cone in degrees; above `0` gives a true penumbra and switches to glTF falloff"
      },
      {
        "name": "shape",
        "default": "'circle'",
        "description": "**spot** — cone cross-section: `circle` / `square` / `none`. Projected as a gel, so an explicit `gel` wins"
      },
      {
        "name": "shapeAspect",
        "default": "1",
        "description": "**spot** — width/height; `2` is an ellipse or letterbox"
      },
      {
        "name": "shapeSoftness",
        "default": "0.25",
        "description": "**spot** — edge feather, as a fraction of the radius"
      },
      {
        "name": "dirX"
      },
      {
        "name": "dirY"
      },
      {
        "name": "dirZ"
      },
      {
        "name": "gel",
        "default": "—",
        "description": "**spot** — projection texture URL (bitmap or SVG file)"
      },
      {
        "name": "gelSvg",
        "default": "—",
        "description": "**spot** — inline SVG source or an `SVGElement`"
      }
    ]
  },
  {
    "module": "b3d-lamp (tosi-b3d-area-light)",
    "tag": "tosi-b3d-area-light",
    "summary": "Lamps",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Position"
      },
      {
        "name": "y",
        "default": "3",
        "description": "Position"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Position"
      },
      {
        "name": "intensity",
        "default": "1",
        "description": "Brightness. With `modulation`, this is the MAXIMUM"
      },
      {
        "name": "diffuse",
        "default": "'#ffffff'",
        "description": "Colour"
      },
      {
        "name": "specular",
        "default": "'#ffffff'",
        "description": "Specular colour"
      },
      {
        "name": "range",
        "default": "10",
        "description": "Falloff distance (point / spot)"
      },
      {
        "name": "on",
        "default": "true",
        "description": "`false` plays the DECAY region; it does not kill the light"
      },
      {
        "name": "geometry",
        "default": "'on'",
        "description": "`'off'` for no fixture"
      },
      {
        "name": "geometryScale",
        "default": "1",
        "description": "Size multiplier for the default fixture"
      },
      {
        "name": "url",
        "default": "—",
        "description": "GLB fixture, in place of the primitive"
      },
      {
        "name": "shadows",
        "default": "'off'",
        "description": "`'on'` for a shadow generator (point / spot only)"
      },
      {
        "name": "timeSource"
      },
      {
        "name": "shadowTextureSize",
        "default": "0",
        "description": "Resolves against the device budget"
      },
      {
        "name": "width",
        "default": "2",
        "description": "**area** — panel size"
      },
      {
        "name": "height",
        "default": "1",
        "description": "**area** — panel size"
      }
    ]
  },
  {
    "module": "b3d-launcher",
    "tag": "tosi-b3d-launcher",
    "summary": "b3d-launcher",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Launcher position (muzzle offset forward from here)"
      },
      {
        "name": "y",
        "default": "0",
        "description": "Launcher position (muzzle offset forward from here)"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Launcher position (muzzle offset forward from here)"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "meshName"
      },
      {
        "name": "library"
      },
      {
        "name": "grip"
      },
      {
        "name": "socket"
      },
      {
        "name": "modelScale"
      },
      {
        "name": "muzzleSpeed",
        "default": "30",
        "description": "Launch speed (units/sec) along the fire direction"
      },
      {
        "name": "fireRate",
        "default": "5",
        "description": "Max shots per second (cadence gate)"
      },
      {
        "name": "ammo",
        "default": "40",
        "description": "Magazine capacity (a `Resource`)"
      },
      {
        "name": "reloadRate",
        "default": "8",
        "description": "Ammo regenerated per second (0 = no reload)"
      },
      {
        "name": "reloadDelay",
        "default": "1",
        "description": "Seconds after firing before reload resumes"
      },
      {
        "name": "gravity",
        "default": "-9.81",
        "description": "Vertical acceleration on the shell"
      },
      {
        "name": "drag",
        "default": "0.01",
        "description": "Quadratic drag coefficient (0 = vacuum)"
      },
      {
        "name": "mass",
        "default": "1",
        "description": "Shell mass (higher flies flatter/further under drag)"
      },
      {
        "name": "missileSpeed",
        "default": "22",
        "description": "Cruise speed of a guided shot (`fireAt`)"
      },
      {
        "name": "turnRate",
        "default": "3",
        "description": "Guided-missile agility (rad/sec)"
      },
      {
        "name": "projRadius",
        "default": "0.12",
        "description": "Shell visual radius"
      },
      {
        "name": "missileTrail",
        "default": "'off'",
        "description": "`'on'` leaves a smoke ribbon behind each guided missile (`fireAt`); see [b3d-trail](/b3d-trail/). For your own rounds, pass `trail` to `spawnProjectile`/`spawnMissile`"
      },
      {
        "name": "projColor",
        "default": "'#ffdd55'",
        "description": "Shell emissive colour"
      },
      {
        "name": "maxLifetime",
        "default": "6",
        "description": "Seconds before an un-impacted shell self-disposes"
      },
      {
        "name": "damage",
        "default": "20",
        "description": "Warhead full damage (see b3d-warhead)"
      },
      {
        "name": "fullRadius",
        "default": "1",
        "description": "Warhead full-damage radius"
      },
      {
        "name": "blastRadius",
        "default": "3",
        "description": "Warhead falloff radius"
      },
      {
        "name": "los",
        "default": "'on'",
        "description": "Warhead line-of-sight gating"
      }
    ]
  },
  {
    "module": "b3d-library",
    "tag": "tosi-b3d-library",
    "summary": "b3d-library",
    "attributes": [
      {
        "name": "url",
        "default": "''",
        "description": "GLB/glTF file URL"
      },
      {
        "name": "type",
        "default": "''",
        "description": "Library type for scene registry lookup"
      }
    ]
  },
  {
    "module": "b3d-light-shafts",
    "tag": "tosi-b3d-light-shafts",
    "summary": "b3d-light-shafts",
    "attributes": [
      {
        "name": "count",
        "default": "14",
        "description": "How many sky shafts at most (the budget). `0` = off"
      },
      {
        "name": "radius",
        "default": "3000",
        "description": "How far from you (m) to look for gaps. Shafts read best from a distance"
      },
      {
        "name": "width",
        "default": "40",
        "description": "The BROADEST sky shaft at the cloud (m), at the coverage threshold (0.5); narrower as the cover closes, down to 10% of this near 1. Kept SMALL on purpose: the wider a shaft, the more obvious any mismatch with the gap it comes from"
      },
      {
        "name": "spread",
        "default": "0",
        "description": "Extra width per metre of length. `0`: RECTANGULAR shafts, so all the apparent widening is perspective, and they radiate from the sun because they are parallel to its light"
      },
      {
        "name": "strength",
        "default": "0.35",
        "description": "Brightness at the edge the light comes through; it falls linearly to 0"
      },
      {
        "name": "rainBoost",
        "default": "0.5",
        "description": "How much precipitation where you are multiplies the strength"
      },
      {
        "name": "color",
        "default": "''",
        "description": "The light's colour; empty = the sun's (whitish by day)"
      },
      {
        "name": "underwater",
        "default": "'on'",
        "description": "Shafts under the water surface too"
      },
      {
        "name": "underwaterCount",
        "default": "12",
        "description": "Their budget"
      }
    ]
  },
  {
    "module": "b3d-light",
    "tag": "tosi-b3d-light",
    "summary": "b3d-light",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Light direction X (the \"up\" direction)"
      },
      {
        "name": "y",
        "default": "1",
        "description": "Light direction Y"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Light direction Z"
      },
      {
        "name": "intensity",
        "default": "1",
        "description": "Brightness multiplier"
      },
      {
        "name": "diffuse",
        "default": "'#ffffff'",
        "description": "Diffuse color (hex)"
      },
      {
        "name": "specular",
        "default": "'#808080'",
        "description": "Specular color (hex)"
      },
      {
        "name": "groundColor",
        "default": "'#000000'",
        "description": "Bounce from below (hex). Babylon's default is black, which is why vertical faces look unlit however high `intensity` goes — set a dim version of your ground colour"
      }
    ]
  },
  {
    "module": "b3d-lightning",
    "tag": "tosi-b3d-lightning",
    "summary": "b3d-lightning",
    "attributes": [
      {
        "name": "seed",
        "default": "1",
        "description": "Same seed, same storm"
      },
      {
        "name": "bolts",
        "default": "'on'",
        "description": "Draw the bolt for cloud-to-ground strikes"
      },
      {
        "name": "sprites",
        "default": "'on'",
        "description": "Red-pink sprites above strong storms"
      },
      {
        "name": "thunder",
        "default": "'on'",
        "description": "Procedural thunder, delayed by distance"
      },
      {
        "name": "volume",
        "default": "0.8",
        "description": "Thunder loudness"
      },
      {
        "name": "groundLight",
        "default": "2.5",
        "description": "How hard a ground strike's own light hits the scene: from the middle of the channel (halfway between the cloud base and the ground under the strike), the one that casts the shadows (the whole-sky fill is separate)"
      },
      {
        "name": "darken",
        "default": "0.5",
        "description": "How much a storm near you takes from the sun AND the ambient light (half, at full storm, easing with distance), so the flashes stand out. Applied through the cloud deck, which owns those lights"
      },
      {
        "name": "shadows",
        "default": "'on'",
        "description": "Hard shadows from the strike. ONE shadow map, kept, re-rendered once per new brightest ground strike (never per frame)"
      },
      {
        "name": "shadowSize",
        "default": "1024",
        "description": "Its resolution"
      },
      {
        "name": "shadowRange",
        "default": "600",
        "description": "How far from you (m) things cast them: the shadows you can see, and a tight set keeps the map sharp"
      },
      {
        "name": "flashLight",
        "default": "'point'",
        "description": "The strike's shadowed light. `'point'`: shadows radiate from the bolt in every direction (a cube map: six shadow renders, once per new strike). `'directional'`: one render, correct looking toward the strike; the cheap choice for low-end devices"
      },
      {
        "name": "color",
        "default": "'#dce4ff'",
        "description": "The flash's colour"
      },
      {
        "name": "rate",
        "default": "1",
        "description": "How OFTEN, as a multiple of the natural rate (about 0.6 strikes a second over a storm at storminess 1; at most 4)"
      },
      {
        "name": "brightness",
        "default": "1",
        "description": "How DRAMATIC a flash is: the whole landscape lit from above (falling off with the storm's distance), the cloud lit from inside, and the bolt's glow, together"
      }
    ]
  },
  {
    "module": "b3d-loader",
    "tag": "tosi-b3d-loader",
    "summary": "b3d-loader",
    "attributes": [
      {
        "name": "url",
        "default": "''",
        "description": "URL of the GLB/glTF file"
      },
      {
        "name": "lightIntensityScale",
        "default": "0.05",
        "description": "Scale factor for imported lights"
      },
      {
        "name": "destroyable",
        "default": "'off'",
        "description": "`'on'` gives the model hit points + a death outcome"
      },
      {
        "name": "capacity",
        "default": "10",
        "description": "Combat stats (when destroyable)"
      },
      {
        "name": "armor",
        "default": "0",
        "description": "Combat stats (when destroyable)"
      },
      {
        "name": "regenRate",
        "default": "0",
        "description": "Combat stats (when destroyable)"
      },
      {
        "name": "regenDelay",
        "default": "0.5",
        "description": "Combat stats (when destroyable)"
      },
      {
        "name": "explode",
        "default": "'off'",
        "description": "Shatter on death (best for single-mesh models)"
      },
      {
        "name": "explodeForce",
        "default": "6",
        "description": "Shatter on death (best for single-mesh models)"
      },
      {
        "name": "deathBlast"
      },
      {
        "name": "blastDamage"
      },
      {
        "name": "blastFullRadius"
      },
      {
        "name": "blastRadius"
      },
      {
        "name": "blastDelay"
      }
    ]
  },
  {
    "module": "b3d-manipulator",
    "tag": "tosi-b3d-manipulator",
    "summary": "b3d-manipulator",
    "attributes": [
      {
        "name": "target",
        "default": "''",
        "description": "CSS selector for the element to manipulate. Or set `.node` in JS"
      },
      {
        "name": "meshName",
        "default": "''",
        "description": "a mesh in the scene, by name — for things that are not elements"
      },
      {
        "name": "move",
        "default": "'on'",
        "description": "`'on'`/`'off'` — arrows and plane pads"
      },
      {
        "name": "turn",
        "default": "'off'",
        "description": "`'on'`/`'off'` — rings"
      },
      {
        "name": "scale",
        "default": "'off'",
        "description": "`'on'`/`'off'` — cubes, plus the uniform centre cube"
      },
      {
        "name": "gridSnap",
        "default": "0",
        "description": "position snap in metres. `0` is off"
      },
      {
        "name": "angleSnap",
        "default": "0",
        "description": "angle snap in degrees. `0` is off"
      },
      {
        "name": "size",
        "default": "0.13",
        "description": "apparent size — the widget is this fraction of its distance from the camera, so it stays constant on screen"
      },
      {
        "name": "disabled",
        "default": "false",
        "description": "hide the handles and ignore input"
      }
    ]
  },
  {
    "module": "b3d-moon",
    "tag": "tosi-b3d-moon",
    "summary": "b3d-moon",
    "attributes": [
      {
        "name": "azimuth",
        "default": "0",
        "description": "Degrees AROUND the star sphere. Like right ascension: the moon rides with the stars, rising and setting with them"
      },
      {
        "name": "elevation",
        "default": "20",
        "description": "Degrees from the celestial equator (like declination)"
      },
      {
        "name": "size",
        "default": "0.5",
        "description": "Angular DIAMETER in degrees (the real moon is about 0.5)"
      },
      {
        "name": "color",
        "default": "'#dddddd'",
        "description": "Its colour where lit"
      },
      {
        "name": "brightness",
        "default": "1",
        "description": "Multiplies the lit side"
      }
    ]
  },
  {
    "module": "b3d-panel",
    "tag": "tosi-b3d-panel",
    "summary": "b3d-panel",
    "attributes": [
      {
        "name": "frame",
        "default": "eye",
        "description": "`eye` / `rig` / `world` / `body` / `neck` / `face` / `left-hand` / `right-hand`"
      },
      {
        "name": "preset",
        "default": "''",
        "description": "A named anchor (`waist`, `left-shoulder`, `right-shoulder`, `overhead`, `wrist`). Overrides the angular fields."
      },
      {
        "name": "azimuth",
        "default": "0",
        "description": "Degrees off the frame's eye: +az right, +el up"
      },
      {
        "name": "elevation",
        "default": "0",
        "description": "Degrees off the frame's eye: +az right, +el up"
      },
      {
        "name": "distance",
        "default": "1.4",
        "description": "Metres from the eye"
      },
      {
        "name": "position",
        "default": "''",
        "description": "Explicit `\"x y z\"` local position (overrides az/el/distance)"
      },
      {
        "name": "roll",
        "default": "0",
        "description": "Roll about the panel normal (deg)"
      },
      {
        "name": "reveal",
        "default": "gaze",
        "description": "`gaze` (look toward it) or `always`"
      },
      {
        "name": "blend",
        "default": "composite",
        "description": "`composite` or `add` (additive HUD glyphs)"
      },
      {
        "name": "view",
        "default": "both",
        "description": "`first` / `third` / `both` — restrict to a camera view"
      },
      {
        "name": "title",
        "default": "''",
        "description": "Placeholder card title (ignored if `url` set)"
      },
      {
        "name": "url",
        "default": "''",
        "description": "SVG URL (e.g. a reticle)"
      },
      {
        "name": "width",
        "default": "0.26",
        "description": "Panel width (m); height follows aspect"
      },
      {
        "name": "revealStart"
      },
      {
        "name": "revealFull"
      },
      {
        "name": "maxDistance"
      },
      {
        "name": "presence",
        "default": "'xr'",
        "description": "`'xr'` — only in an immersive session; `'both'` — also in the flat view, on frames derived from the flat camera"
      },
      {
        "name": "flatFrame",
        "default": "''",
        "description": "The frame to use in the FLAT view: required for a hand panel (a monitor has no hands); `'face'` measures elevation from the view instead of the horizon, so a menu stays centred under a pitched camera"
      },
      {
        "name": "resolution",
        "default": "0",
        "description": "Texture size in px (square); `0` = 384. Raise it for a menu with text"
      }
    ]
  },
  {
    "module": "b3d-particles",
    "tag": "tosi-b3d-particles",
    "summary": "b3d-particles",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Emitter X position"
      },
      {
        "name": "y",
        "default": "0",
        "description": "Emitter Y position"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Emitter Z position"
      },
      {
        "name": "capacity",
        "default": "500",
        "description": "Maximum particle count"
      },
      {
        "name": "emitRate",
        "default": "50",
        "description": "Particles emitted per frame"
      },
      {
        "name": "minLifeTime",
        "default": "0.3",
        "description": "Minimum particle lifetime (seconds)"
      },
      {
        "name": "maxLifeTime",
        "default": "1.5",
        "description": "Maximum particle lifetime (seconds)"
      },
      {
        "name": "minSize",
        "default": "0.1",
        "description": "Minimum particle size"
      },
      {
        "name": "maxSize",
        "default": "0.5",
        "description": "Maximum particle size"
      },
      {
        "name": "minEmitPower",
        "default": "1",
        "description": "Minimum emission speed"
      },
      {
        "name": "maxEmitPower",
        "default": "3",
        "description": "Maximum emission speed"
      },
      {
        "name": "gravityX",
        "default": "0",
        "description": "Gravity X component"
      },
      {
        "name": "gravityY",
        "default": "-9.81",
        "description": "Gravity Y component"
      },
      {
        "name": "gravityZ",
        "default": "0",
        "description": "Gravity Z component"
      },
      {
        "name": "color1",
        "default": "'#ffff00'",
        "description": "Start color 1"
      },
      {
        "name": "color2",
        "default": "'#ff6600'",
        "description": "Start color 2"
      },
      {
        "name": "colorDead",
        "default": "'#000000'",
        "description": "End-of-life color"
      },
      {
        "name": "blendMode",
        "default": "'standard'",
        "description": "`'standard'` or `'additive'`"
      },
      {
        "name": "texture",
        "default": "''",
        "description": "Particle texture URL (empty = default flare)"
      },
      {
        "name": "emitterShape",
        "default": "'point'",
        "description": "`'point'`, `'box'`, `'sphere'`, `'cone'`"
      },
      {
        "name": "emitterRadius",
        "default": "0.5",
        "description": "Radius for sphere/cone emitters"
      },
      {
        "name": "useSceneGravity",
        "default": "false",
        "description": "Use scene physics gravity instead of gravityX/Y/Z"
      },
      {
        "name": "autoStart",
        "default": "false",
        "description": "Start emitting when scene is ready"
      },
      {
        "name": "targetStopDuration",
        "default": "0",
        "description": "Auto-stop after N seconds (0 = forever)"
      },
      {
        "name": "disposeOnStop",
        "default": "false",
        "description": "Dispose when stopped"
      },
      {
        "name": "attachTo",
        "default": "''",
        "description": "Mesh name to attach emitter to"
      }
    ]
  },
  {
    "module": "b3d-physics",
    "tag": "tosi-b3d-physics",
    "summary": "b3d-physics",
    "attributes": [
      {
        "name": "gravityX",
        "default": "0",
        "description": "Gravity X component"
      },
      {
        "name": "gravityY",
        "default": "-9.81",
        "description": "Gravity Y component"
      },
      {
        "name": "gravityZ",
        "default": "0",
        "description": "Gravity Z component"
      },
      {
        "name": "debug",
        "default": "false",
        "description": "Show wireframe physics collider shapes"
      },
      {
        "name": "wasmUrl"
      }
    ]
  },
  {
    "module": "b3d-planet",
    "tag": "tosi-b3d-planet",
    "summary": "b3d-planet",
    "attributes": [
      {
        "name": "biome"
      },
      {
        "name": "seed",
        "default": "12345",
        "description": "Noise seed"
      },
      {
        "name": "radius",
        "default": "50",
        "description": "Base sphere radius"
      },
      {
        "name": "subdivisions",
        "default": "64",
        "description": "Grid subdivisions per cube face"
      },
      {
        "name": "grossScale",
        "default": "0.005",
        "description": "Gross noise frequency"
      },
      {
        "name": "detailScale",
        "default": "0.02",
        "description": "Detail noise frequency"
      },
      {
        "name": "grossAmplitude",
        "default": "5",
        "description": "Gross height multiplier"
      },
      {
        "name": "detailAmplitude",
        "default": "1",
        "description": "Detail height multiplier"
      },
      {
        "name": "atmosphere",
        "default": "0.08",
        "description": "Atmosphere thickness (fraction of radius, 0=none)"
      },
      {
        "name": "atmosphereColor"
      },
      {
        "name": "atmosphereTurbulence"
      },
      {
        "name": "ocean",
        "default": "0.6",
        "description": "Ocean coverage (0=none, 0.6=60% of surface underwater)"
      },
      {
        "name": "rings"
      },
      {
        "name": "wireframe",
        "default": "false",
        "description": "Debug: render as wireframe"
      },
      {
        "name": "rotationSpeed",
        "default": "0",
        "description": "Auto-rotation speed (radians/sec)"
      }
    ]
  },
  {
    "module": "b3d-primitives (tosi-b3d-sphere)",
    "tag": "tosi-b3d-sphere",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "meshName"
      },
      {
        "name": "segments"
      },
      {
        "name": "diameter"
      },
      {
        "name": "color"
      },
      {
        "name": "glow"
      },
      {
        "name": "glowColor"
      },
      {
        "name": "mirror"
      },
      {
        "name": "solid"
      },
      {
        "name": "solidProxy"
      }
    ]
  },
  {
    "module": "b3d-primitives (tosi-b3d-box)",
    "tag": "tosi-b3d-box",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "meshName"
      },
      {
        "name": "size"
      },
      {
        "name": "width"
      },
      {
        "name": "height"
      },
      {
        "name": "depth"
      },
      {
        "name": "color"
      },
      {
        "name": "mirror"
      },
      {
        "name": "glow"
      },
      {
        "name": "glowColor"
      },
      {
        "name": "solid"
      },
      {
        "name": "solidProxy"
      }
    ]
  },
  {
    "module": "b3d-primitives (tosi-b3d-ground)",
    "tag": "tosi-b3d-ground",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "meshName"
      },
      {
        "name": "size"
      },
      {
        "name": "width"
      },
      {
        "name": "height"
      },
      {
        "name": "color"
      },
      {
        "name": "texture"
      },
      {
        "name": "textureTiles"
      }
    ]
  },
  {
    "module": "b3d-probe",
    "tag": "tosi-b3d-probe",
    "summary": "b3d-probe",
    "attributes": [
      {
        "name": "force"
      },
      {
        "name": "ttlDays"
      }
    ]
  },
  {
    "module": "b3d-prop",
    "tag": "tosi-b3d-prop",
    "summary": "b3d-prop",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "position"
      },
      {
        "name": "y",
        "default": "0",
        "description": "position"
      },
      {
        "name": "z",
        "default": "0",
        "description": "position"
      },
      {
        "name": "rx",
        "default": "0",
        "description": "rotation, in DEGREES"
      },
      {
        "name": "ry",
        "default": "0",
        "description": "rotation, in DEGREES"
      },
      {
        "name": "rz",
        "default": "0",
        "description": "rotation, in DEGREES"
      },
      {
        "name": "axes"
      },
      {
        "name": "library",
        "default": "''",
        "description": "`type` of a `<tosi-b3d-library>` in the scene"
      },
      {
        "name": "libraryUrl",
        "default": "''",
        "description": "glb URL — mounts a library for you; use instead of `library`"
      },
      {
        "name": "meshName",
        "default": "''",
        "description": "model name within the library"
      },
      {
        "name": "scale",
        "default": "1",
        "description": "uniform scale applied to the instance root"
      }
    ]
  },
  {
    "module": "b3d-radar-blip",
    "tag": "tosi-b3d-radar-blip",
    "summary": "b3d-radar-blip",
    "attributes": [
      {
        "name": "profile",
        "default": "1",
        "description": "Detectability: `1` = seen at the platform's nominal radar range, `2` = out to 2×, `0.05` = very stealthy; **negative = always detectable** (e.g. waypoints)."
      },
      {
        "name": "faction",
        "default": "'neutral'",
        "description": "`friendly` / `neutral` / `hostile` / `waypoint` — drives the radar-trace colour."
      },
      {
        "name": "x",
        "default": "0",
        "description": "World position when standalone (ignored while following a target's mesh)."
      },
      {
        "name": "y",
        "default": "0",
        "description": "World position when standalone (ignored while following a target's mesh)."
      },
      {
        "name": "z",
        "default": "0",
        "description": "World position when standalone (ignored while following a target's mesh)."
      }
    ]
  },
  {
    "module": "b3d-radar",
    "tag": "tosi-b3d-radar",
    "summary": "b3d-radar",
    "attributes": [
      {
        "name": "range",
        "default": "250",
        "description": "Nominal range — a `profile 1` blip is detected within this."
      },
      {
        "name": "coneDeg",
        "default": "90",
        "description": "Detection cone HALF-angle (deg). `90` = front hemisphere."
      },
      {
        "name": "lockTime",
        "default": "1.5",
        "description": "Seconds of continuous detection to acquire a lock (`0` = instant)."
      },
      {
        "name": "maxLocks",
        "default": "2",
        "description": "Max simultaneous locks (the nearest opposed contacts)."
      },
      {
        "name": "acquireConeDeg"
      },
      {
        "name": "acquireRange"
      },
      {
        "name": "alignment",
        "default": "'friendly'",
        "description": "This radar's own faction. It locks only **opposed** blips (friendly⇄hostile); neutrals/waypoints show but never lock."
      },
      {
        "name": "updateInterval",
        "default": "100",
        "description": "Radar refresh period (ms). Runs below frame-rate and is dithered across frames so many radars don't all recompute the same frame."
      }
    ]
  },
  {
    "module": "b3d-reflections",
    "tag": "tosi-b3d-reflections",
    "summary": "b3d-reflections",
    "attributes": [
      {
        "name": "refreshRate",
        "default": "5",
        "description": "Frames between probe refreshes inside `farDistance`"
      },
      {
        "name": "probeSize",
        "default": "auto",
        "description": "Cubemap resolution per face; `auto` = device tier"
      },
      {
        "name": "maxDistance",
        "default": "100",
        "description": "Distance beyond which probes freeze entirely"
      },
      {
        "name": "farDistance",
        "default": "30",
        "description": "Distance at which the rate starts ramping toward `farRefreshRate`"
      },
      {
        "name": "farRefreshRate",
        "default": "30",
        "description": "Probe refresh rate at `maxDistance`"
      },
      {
        "name": "distanceCheckInterval",
        "default": "13",
        "description": "Frames between camera-distance re-checks"
      }
    ]
  },
  {
    "module": "b3d-shadows",
    "tag": "tosi-b3d-sun",
    "summary": "b3d-shadows",
    "attributes": [
      {
        "name": "shadowMaxZ",
        "default": "100",
        "description": "Far plane of the cascaded shadow frustum"
      },
      {
        "name": "shadowDarkness",
        "default": "0.1",
        "description": "0 = fully dark shadow, 1 = no shadow"
      },
      {
        "name": "shadowNormalBias",
        "default": "0.05",
        "description": "Offset along the surface normal — **the shadow-acne knob**. Lower it if shadows detach from small casters"
      },
      {
        "name": "shadowBias",
        "default": "0.00005",
        "description": "Depth-direction bias; peter-pans sooner than `shadowNormalBias`, so tune that one first"
      },
      {
        "name": "shadowTextureSize",
        "default": "auto",
        "description": "Shadow map resolution (per cascade); `auto` = device tier"
      },
      {
        "name": "activeDistance",
        "default": "30",
        "description": "Max camera-to-mesh distance a caster participates from"
      },
      {
        "name": "numCascades",
        "default": "auto",
        "description": "Number of cascade splits (1–4); `auto` = device tier"
      },
      {
        "name": "stabilizeCascades",
        "default": "'on'",
        "description": "Reduce shadow-edge \"swimming\" under motion"
      },
      {
        "name": "lambda",
        "default": "0.8",
        "description": "Cascade split blend (0 = uniform, 1 = logarithmic)"
      },
      {
        "name": "cascadeBlendPercentage",
        "default": "0.1",
        "description": "Soft blend across cascade seams"
      },
      {
        "name": "x",
        "default": "0",
        "description": "Sun direction X (overridden by skybox when present)"
      },
      {
        "name": "y",
        "default": "-1",
        "description": "Sun direction Y"
      },
      {
        "name": "z",
        "default": "-0.5",
        "description": "Sun direction Z"
      },
      {
        "name": "intensity",
        "default": "1",
        "description": "Sun intensity (overridden by skybox when present)"
      },
      {
        "name": "updateIntervalMs",
        "default": "1000",
        "description": "How often to re-evaluate active casters"
      }
    ]
  },
  {
    "module": "b3d-skybox",
    "tag": "tosi-b3d-skybox",
    "summary": "b3d-skybox",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "turbidity",
        "default": "10",
        "description": "Atmospheric haze"
      },
      {
        "name": "spaceStart",
        "default": "0",
        "description": "Altitude (m) where the fade to space BEGINS"
      },
      {
        "name": "spaceFull",
        "default": "0",
        "description": "Altitude (m) of full vacuum. Feature is off unless this exceeds `spaceStart`"
      },
      {
        "name": "atmosphere",
        "default": "1",
        "description": "How much air this WORLD has: `1` Earth, `0` the Moon (black sky at noon, stars out, no haze, a hard sun). Deliberately steep — only the last stretch toward 0 thins the sky (vacuum is `(1 − atmosphere)⁴`) — and it multiplies with the space band"
      },
      {
        "name": "dust",
        "default": "0",
        "description": "Suspended dust, 0…1: bright, coloured haze that is never blue. Independent of `atmosphere`, so Mars is almost no air and lots of dust, and the Moon is neither"
      },
      {
        "name": "zenithTint",
        "default": "'#ffffff'",
        "description": "The sky's colour overhead — the scattered light's own brightness in this hue, by `tintStrength`. Stars and moon are behind the air and untinted"
      },
      {
        "name": "horizonTint",
        "default": "'#ffffff'",
        "description": "The same at the horizon. `zenithTint: '#c8a070', horizonTint: '#e0b080', tintStrength: 1` is a butterscotch Mars"
      },
      {
        "name": "tintStrength",
        "default": "0",
        "description": "How much the sky takes the tints, `0` (Earth, untouched) … `1`"
      },
      {
        "name": "starfieldCube",
        "default": "''",
        "description": "Root path of a baked cube (`<root>_px.png` …). Replaces `starfield`"
      },
      {
        "name": "starfieldData",
        "default": "''",
        "description": "Root path of a DATA cube (`<root>_px.png` …) encoded by `starfield-codec`. Not a picture of a starfield — a table of stars the shader decodes into points that stay sharp at any zoom. Composes with `starfieldCube` rather than replacing it"
      },
      {
        "name": "starfieldDataSize",
        "default": "1024",
        "description": "Texels per face of `starfieldData`. Must match what encoded it. 1024 is the size to ship — at 512 a packed texel reads as a lattice through the dense band"
      },
      {
        "name": "starfieldSharpness",
        "default": "3",
        "description": "How sharp a decoded point is — higher is tighter. 3 tucks the gaussian tail in so a star reads as a point"
      },
      {
        "name": "starfieldGain",
        "default": "0.9",
        "description": "How bright the decoded stars are — the intensity cap on the whole point sky"
      },
      {
        "name": "starfieldFloor",
        "default": "0.4",
        "description": "The faint mass's brightness — most stars sit on it; `starfieldGain` only moves the bright few above it"
      },
      {
        "name": "starfieldTwinkle",
        "default": "0.35",
        "description": "Scintillation strength. Scaled by the gas (none in vacuum), strongest at the horizon"
      },
      {
        "name": "starfieldSizeScale",
        "default": "3",
        "description": "How much bigger a full-size object (a distant galaxy) is than a star"
      },
      {
        "name": "starfieldTilt",
        "default": "'0,0,0'",
        "description": "Degrees `rx,ry,rz` rotating the sampling direction — both cubes — where a galactic tilt belongs"
      },
      {
        "name": "starfield",
        "default": "0",
        "description": "How many background stars to build. `0` = none"
      },
      {
        "name": "nebulae",
        "default": "0",
        "description": "Soft emission clouds behind the stars. `0` = none"
      },
      {
        "name": "nebulaBrightness",
        "default": "1",
        "description": "Nebula brightness 0…1"
      },
      {
        "name": "nebulaSize",
        "default": "0.045",
        "description": "Nebula size as a fraction of the sky radius"
      },
      {
        "name": "nebulaTexture",
        "default": "''",
        "description": "Black-backed image stamped per nebula; empty = a plain procedural falloff"
      },
      {
        "name": "spaceColor",
        "default": "'#05070f'",
        "description": "What is behind the stars in vacuum. Just north of black, so a black hole still has somewhere darker to go"
      },
      {
        "name": "starfieldSeed",
        "default": "12345",
        "description": "Seed for the starfield — same seed, same constellations"
      },
      {
        "name": "starDistance",
        "default": "0",
        "description": "Park a `<tosi-b3d-star>` child this far along the sun vector. `0` = leave it alone"
      },
      {
        "name": "luminance",
        "default": "1",
        "description": "Sky brightness"
      },
      {
        "name": "azimuth",
        "default": "0",
        "description": "**Ignored** — the sun is placed by `latitude` and `timeOfDay`, and the sky material accepts this and discards it. Kept so old markup doesn't break; not in `skyboxSchema()` (tosijs-3d#86)"
      },
      {
        "name": "latitude",
        "default": "40",
        "description": "Geographic latitude in DEGREES (affects the sun's arc)"
      },
      {
        "name": "realtimeScale",
        "default": "10",
        "description": "Realtime speed multiplier"
      },
      {
        "name": "updateFrequencyMs"
      },
      {
        "name": "sunColor",
        "default": "'#eeeeff'",
        "description": "Midday sun color"
      },
      {
        "name": "duskColor",
        "default": "'#ffaa22'",
        "description": "Dawn/dusk sun color"
      },
      {
        "name": "moonColor",
        "default": "'#6688cc'",
        "description": "Night light color"
      },
      {
        "name": "moonIntensity",
        "default": "0.15",
        "description": "Night light intensity"
      },
      {
        "name": "sunSize",
        "default": "1",
        "description": "The sun's apparent size, 1 = as seen from Earth. Mars 0.66, Venus 1.39, Io 0.19, Titan 0.11 (it goes as 1/distance from the star)"
      },
      {
        "name": "sunBrightness",
        "default": "1",
        "description": "Multiplies the sun's light. A distant world gets less light, but the eye adapts, so set it by how it looks rather than by the inverse square"
      },
      {
        "name": "timeOfDay",
        "default": "6.5",
        "description": "0-24 hours"
      },
      {
        "name": "rayleigh",
        "default": "2",
        "description": "Rayleigh scattering"
      },
      {
        "name": "mieDirectionalG"
      },
      {
        "name": "mieCoefficient"
      },
      {
        "name": "skyboxSize"
      },
      {
        "name": "applyFog",
        "default": "false",
        "description": "Whether scene fog affects the skybox"
      }
    ]
  },
  {
    "module": "b3d-sound",
    "tag": "tosi-b3d-sound",
    "summary": "b3d-sound",
    "attributes": [
      {
        "name": "url",
        "default": "''",
        "description": "Audio file URL"
      },
      {
        "name": "volume",
        "default": "1",
        "description": "Volume (0-1)"
      },
      {
        "name": "loop",
        "default": "false",
        "description": "Loop playback"
      },
      {
        "name": "autoplay",
        "default": "false",
        "description": "Auto-start on connect"
      },
      {
        "name": "spatialSound",
        "default": "false",
        "description": "Enable 3D positional audio"
      },
      {
        "name": "x",
        "default": "0",
        "description": "Position X (spatial mode)"
      },
      {
        "name": "y",
        "default": "0",
        "description": "Position Y (spatial mode)"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Position Z (spatial mode)"
      },
      {
        "name": "refDistance",
        "default": "1",
        "description": "Distance at full volume"
      },
      {
        "name": "rolloffFactor",
        "default": "1",
        "description": "Attenuation rate"
      },
      {
        "name": "maxDistance",
        "default": "100",
        "description": "Cutoff distance"
      },
      {
        "name": "distanceModel",
        "default": "'linear'",
        "description": "`'linear'`, `'inverse'`, `'exponential'`"
      },
      {
        "name": "attachTo",
        "default": "''",
        "description": "Mesh name to follow"
      },
      {
        "name": "playbackRate",
        "default": "1",
        "description": "Playback speed"
      }
    ]
  },
  {
    "module": "b3d-spawner",
    "tag": "tosi-b3d-spawner",
    "summary": "b3d-spawner",
    "attributes": [
      {
        "name": "prefab",
        "default": "''",
        "description": "Prefab name to spawn (usually an encounter)"
      },
      {
        "name": "maxAlive",
        "default": "2",
        "description": "How many groups may exist at once"
      },
      {
        "name": "interval",
        "default": "8",
        "description": "Seconds between spawn attempts"
      },
      {
        "name": "minDistance",
        "default": "600",
        "description": "Nearest a group may appear (from the player)"
      },
      {
        "name": "maxDistance",
        "default": "1400",
        "description": "Furthest a group may appear"
      },
      {
        "name": "anchor",
        "default": "'player'",
        "description": "`'player'` = a ring around the player (an encounter); `'place'` = exactly at `x`/`y`/`z` (a launchpad)"
      },
      {
        "name": "x",
        "default": "0",
        "description": "Spawn point, when `anchor=\"place\"`. Ignored otherwise"
      },
      {
        "name": "y",
        "default": "0",
        "description": "Base height for the spawn point (the prefab places its own members)"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Spawn point, when `anchor=\"place\"`. Ignored otherwise"
      },
      {
        "name": "facingDeg",
        "default": "0",
        "description": "Facing for a placed spawn, degrees about Y — reaches the prefab as `rotation`"
      },
      {
        "name": "seed",
        "default": "1",
        "description": "Deterministic placement — same seed, same battles"
      },
      {
        "name": "disabled",
        "default": "false",
        "description": "Stop spawning (a boolean can't default to true — see CLAUDE.md)"
      }
    ]
  },
  {
    "module": "b3d-star-system",
    "tag": "tosi-b3d-star-system",
    "summary": "b3d-star-system",
    "attributes": [
      {
        "name": "galaxySeed",
        "default": "1234",
        "description": "Galaxy seed for deterministic generation"
      },
      {
        "name": "starCount",
        "default": "10000",
        "description": "The galaxy's bright budget (needed to regenerate the same galaxy)"
      },
      {
        "name": "starIndex",
        "default": "0",
        "description": "Which star to render, by position in the galaxy's view (moves if `starCount` does)"
      },
      {
        "name": "star",
        "default": "''",
        "description": "A star's ADDRESS (`1234:bright:5021:0`, the `id` on every star). Stable, and wins over `starIndex`"
      },
      {
        "name": "scale",
        "default": "5",
        "description": "Visual scale factor for star/planet sizes"
      },
      {
        "name": "orbitScale",
        "default": "3",
        "description": "Multiplier for orbital distances"
      },
      {
        "name": "animate",
        "default": "'on'",
        "description": "Animate planet orbital motion"
      },
      {
        "name": "showOrbits",
        "default": "'on'",
        "description": "Show orbital path lines"
      },
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      }
    ]
  },
  {
    "module": "b3d-star",
    "tag": "tosi-b3d-star",
    "summary": "b3d-star",
    "attributes": [
      {
        "name": "seed",
        "default": "12345",
        "description": "Noise seed for surface features"
      },
      {
        "name": "radius",
        "default": "20",
        "description": "Star radius"
      },
      {
        "name": "subdivisions",
        "default": "32",
        "description": "Grid subdivisions per cube face"
      },
      {
        "name": "spectralClass",
        "default": "'G'",
        "description": "Spectral class: O, B, A, F, G, K, M"
      },
      {
        "name": "surfaceDetail",
        "default": "0.5",
        "description": "Surface noise intensity (0=uniform, 1=strong spots)"
      },
      {
        "name": "coronaSize",
        "default": "0.15",
        "description": "Corona thickness as fraction of radius (0=none)"
      },
      {
        "name": "rotationSpeed",
        "default": "0.02",
        "description": "Auto-rotation (radians/sec)"
      },
      {
        "name": "wireframe",
        "default": "false",
        "description": "Debug wireframe"
      },
      {
        "name": "glowIntensity",
        "default": "2.0",
        "description": "Emissive brightness multiplier"
      },
      {
        "name": "pointLight",
        "default": "false",
        "description": "Create a point light at star center"
      },
      {
        "name": "lightIntensity",
        "default": "1.0",
        "description": "Point light intensity"
      },
      {
        "name": "lightRange",
        "default": "500",
        "description": "Point light range"
      }
    ]
  },
  {
    "module": "b3d-svg-plane",
    "tag": "tosi-b3d-svg-plane",
    "summary": "b3d-svg-plane",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "castShadow"
      },
      {
        "name": "receiveShadows"
      },
      {
        "name": "width",
        "default": "1",
        "description": "Plane width in scene units"
      },
      {
        "name": "height",
        "default": "1",
        "description": "Plane height"
      },
      {
        "name": "resolution",
        "default": "512",
        "description": "Texture resolution (square, px)"
      },
      {
        "name": "url",
        "default": "''",
        "description": "SVG URL — fetched and rendered once"
      },
      {
        "name": "updateInterval",
        "default": "30",
        "description": "Re-render interval in ms (dynamic mode)"
      },
      {
        "name": "materialChannel",
        "default": "'emissive'",
        "description": "`'emissive'` (unlit) or `'diffuse'` (lit)"
      },
      {
        "name": "cameraRelative",
        "default": "false",
        "description": "Parent plane to active camera (HUD mode)"
      },
      {
        "name": "placement"
      },
      {
        "name": "xrFrame",
        "default": "''",
        "description": "In a headset with `cameraRelative`, parent to this XR reference frame instead of the head camera. `'body'` (torso, damped yaw) keeps a panel in front of you without jittering on every head movement; leave unset for a HUD that should stay head-locked"
      },
      {
        "name": "pointerEvents",
        "default": "'on'",
        "description": "Map 3D pick hits → SVG pointer events"
      },
      {
        "name": "doubleSided",
        "default": "'on'",
        "description": "Render both faces"
      },
      {
        "name": "cornerRadius",
        "default": "0",
        "description": "Corner radius in WORLD units. `0` = a plain rectangle. Rounds the MESH, so corners cost triangles instead of alpha — see **Opaque panels** below"
      },
      {
        "name": "transparent",
        "default": "'on'",
        "description": "`'off'` drops the opacity texture so the plane writes depth. Pair with `cornerRadius`"
      }
    ]
  },
  {
    "module": "b3d-terrain",
    "tag": "tosi-b3d-terrain",
    "summary": "b3d-terrain",
    "attributes": [
      {
        "name": "biome"
      },
      {
        "name": "biomeSeaLevel",
        "default": "0",
        "description": "Sea level for the biome classifier (`biome=\"on\"`) — keep it equal to your water plane's `y`"
      },
      {
        "name": "biomeLapseRate",
        "default": "0",
        "description": "Height→temperature lapse. ⚠️ Must be scaled to your vertical range: `≈ baseTemperature / relief`. The 0.004 default is a small-world number and renders a 340m world entirely as snow"
      },
      {
        "name": "biomeTemperature",
        "default": "-1",
        "description": "Sea-level temperature, `0…1` cold → warm. LIVE"
      },
      {
        "name": "biomeMoisture",
        "default": "-1",
        "description": "Land moisture, `0…1`: dead → dry (dune) → medium (steppe) → **wet (forest, ≈0.75)**. The default is steppe; a green world wants ~0.7. LIVE"
      },
      {
        "name": "biomeVolcanicScale",
        "default": "-1",
        "description": "Volcanic plate frequency, 1/m. Scale to the volcano: 0.09 suits a ~50 m cone; a 400 m one wants ~0.02. LIVE"
      },
      {
        "name": "normalSmoothing",
        "default": "0.6",
        "description": "Low-pass the NORMALS' height field (positions stay crisp) — kills cliff-face zigzag"
      },
      {
        "name": "seed",
        "default": "12345",
        "description": "Noise seed"
      },
      {
        "name": "surfaceType",
        "default": "'cylinder'",
        "description": "`'cylinder'`, `'torus'`, or `'sphere'`"
      },
      {
        "name": "majorRadius",
        "default": "100",
        "description": "Torus major radius"
      },
      {
        "name": "minorRadius",
        "default": "40",
        "description": "Torus minor radius"
      },
      {
        "name": "radius",
        "default": "200",
        "description": "Sphere/cylinder radius"
      },
      {
        "name": "cylinderHeight",
        "default": "200",
        "description": "Cylinder height (v range before reflection)"
      },
      {
        "name": "tileSize",
        "default": "10",
        "description": "World-space size of a level-0 (finest) tile"
      },
      {
        "name": "hiResSubdivisions",
        "default": "auto",
        "description": "Vertices per tile edge (same at every level); `auto` = device tier"
      },
      {
        "name": "lodLevels",
        "default": "5",
        "description": "Number of LOD levels; level k tiles are `tileSize × 2^k`"
      },
      {
        "name": "poolSize",
        "default": "auto",
        "description": "Shared tile budget; the pool renders the top-priority cells (`auto` = device tier)"
      },
      {
        "name": "fillBudget",
        "default": "auto",
        "description": "Max tiles (re)built per frame — a churn backstop (`auto` = device tier)"
      },
      {
        "name": "splitFactor",
        "default": "2",
        "description": "LOD falloff: subdivide a cell when nearer than `splitFactor × tileSize`"
      },
      {
        "name": "reach",
        "default": "0",
        "description": "Terrain radius (0 = auto from the coarsest tile). Clamped against `tileSize` — the product is the footgun. Import `budgetedReach` from `tosijs-3d/terrain-grid` to clamp a slider against the same limit"
      },
      {
        "name": "grossScale",
        "default": "0.015",
        "description": "Gross noise frequency — a RECIPROCAL wavelength, so SMALL numbers make BIG landforms (0.015 ≈ 65m features before `horizScale`)"
      },
      {
        "name": "detailScale",
        "default": "0.09",
        "description": "Detail noise frequency, same units"
      },
      {
        "name": "horizScale",
        "default": "1",
        "description": "Horizontal world scale — scales every tile's size AND the sampling together (>1 = bigger terrain that reaches further; a clean zoom, not just a frequency change)"
      },
      {
        "name": "grossAmplitude",
        "default": "8",
        "description": "Gross height multiplier. ⚠️ Meaningless on its own: it's spread over `grossScale`/`horizScale`, so the same number is a mountain range at one scale and a plain at another"
      },
      {
        "name": "detailAmplitude",
        "default": "3",
        "description": "Detail height multiplier. Landscape reads best when this does REAL work rather than 5% — big gross features, small gross amplitude, busy detail"
      },
      {
        "name": "baseHeight",
        "default": "0",
        "description": "Flat vertical offset (m). The noise is 0..amplitude; `-grossAmplitude/2` centres the terrain on 0 so a water plane at 0 floods the valleys into a sea"
      },
      {
        "name": "center"
      },
      {
        "name": "debugColor",
        "default": "false",
        "description": "Debug: tint each tile a distinct hashed colour to expose the tile/LOD layout"
      },
      {
        "name": "tileBuildMs",
        "default": "auto",
        "description": "**Milliseconds of tile building allowed per frame** — the cap that actually bounds the worst frame. A tile COUNT bounds it only by accident (a tile's cost swings with subdivisions, octaves, device and JS engine); a time cap bounds it by construction everywhere, and self-corrects when you raise detail. Always builds ≥1 tile. (`auto` = device tier)"
      },
      {
        "name": "profile",
        "default": "false",
        "description": "Debug: time tile building and report it on `debugState` (see below). Off = zero cost"
      },
      {
        "name": "originResetThreshold",
        "default": "500",
        "description": "Distance before origin rebase"
      },
      {
        "name": "maxTravelDistance",
        "default": "5000",
        "description": "Distance before firing recenter-needed event"
      },
      {
        "name": "wireframe",
        "default": "false",
        "description": "Debug: render terrain as wireframe"
      }
    ]
  },
  {
    "module": "b3d-trail",
    "tag": "tosi-b3d-trail",
    "summary": "b3d-trail",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Where the ribbon starts, in the HOST's local space (an engine pod, a nozzle)"
      },
      {
        "name": "y",
        "default": "0",
        "description": "Where the ribbon starts, in the HOST's local space (an engine pod, a nozzle)"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Where the ribbon starts, in the HOST's local space (an engine pod, a nozzle)"
      },
      {
        "name": "diameter",
        "default": "0.06",
        "description": "Ribbon width (m)"
      },
      {
        "name": "length",
        "default": "45",
        "description": "Ribbon length, in segments (one a frame, so length ≈ how many frames of history)"
      },
      {
        "name": "color",
        "default": "'#ffffff'",
        "description": "Its colour (emissive, unlit)"
      },
      {
        "name": "underwaterColor",
        "default": "''",
        "description": "The colour below a `<tosi-b3d-water>` surface; empty = same as `color`"
      },
      {
        "name": "alpha",
        "default": "0.16",
        "description": "Opacity. Low on purpose: you should see through a contrail"
      },
      {
        "name": "minSpeed",
        "default": "8",
        "description": "Below this speed (m/s, measured at the emitter) the ribbon fades out, so a hover does not smear"
      }
    ]
  },
  {
    "module": "b3d-trigger",
    "tag": "tosi-b3d-trigger",
    "summary": "b3d-trigger",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Center X"
      },
      {
        "name": "y",
        "default": "0",
        "description": "Center Y"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Center Z"
      },
      {
        "name": "radius",
        "default": "5",
        "description": "Trigger sphere radius"
      },
      {
        "name": "disabled",
        "default": "false",
        "description": "Disable the trigger (default: active)"
      },
      {
        "name": "target",
        "default": "'camera'",
        "description": "`'camera'` or a mesh name to watch"
      },
      {
        "name": "debug",
        "default": "false",
        "description": "Show wireframe sphere"
      },
      {
        "name": "once",
        "default": "false",
        "description": "Fire `whenEnter` once then deactivate"
      }
    ]
  },
  {
    "module": "b3d-turret",
    "tag": "tosi-b3d-turret",
    "summary": "b3d-turret",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Turret base position"
      },
      {
        "name": "y",
        "default": "0",
        "description": "Turret base position"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Turret base position"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "meshName"
      },
      {
        "name": "library"
      },
      {
        "name": "muzzleSpeed",
        "default": "35",
        "description": "Shell launch speed (also the lead-solver's projectile speed)"
      },
      {
        "name": "fireRate",
        "default": "2",
        "description": "Max shots per second"
      },
      {
        "name": "range",
        "default": "30",
        "description": "Won't fire beyond this distance"
      },
      {
        "name": "traverseRate",
        "default": "2.5",
        "description": "Max barrel slew rate (rad/sec)"
      },
      {
        "name": "smart",
        "default": "0",
        "description": "Skill curve 0..1: **lead** ramps to full by **0.5**, **drop** compensation to full by **1** (0 = aim at the target's current spot). 0.5–1 reserved for acceleration/turn-rate prediction later"
      },
      {
        "name": "aimTolerance",
        "default": "6",
        "description": "Fires only when the barrel is within this many degrees of the solution"
      },
      {
        "name": "gravity",
        "default": "-9.81",
        "description": "Shell ballistics (see b3d-launcher)"
      },
      {
        "name": "drag",
        "default": "0.01",
        "description": "Shell ballistics (see b3d-launcher)"
      },
      {
        "name": "mass",
        "default": "1",
        "description": "Shell ballistics (see b3d-launcher)"
      },
      {
        "name": "damage",
        "default": "20",
        "description": "Warhead payload (see b3d-warhead)"
      },
      {
        "name": "fullRadius",
        "default": "1",
        "description": "Warhead payload (see b3d-warhead)"
      },
      {
        "name": "blastRadius",
        "default": "2.5",
        "description": "Warhead payload (see b3d-warhead)"
      },
      {
        "name": "los",
        "default": "'on'",
        "description": "Warhead payload (see b3d-warhead)"
      },
      {
        "name": "idleColor",
        "default": "'#4a5560'",
        "description": "Barrel colour with no firing solution"
      },
      {
        "name": "armedColor",
        "default": "'#e04030'",
        "description": "Barrel colour when it can bear (has a solution, in range)"
      }
    ]
  },
  {
    "module": "b3d-warhead",
    "tag": "tosi-b3d-warhead",
    "summary": "b3d-warhead",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Detonation point when `detonate()` is called with no argument"
      },
      {
        "name": "y",
        "default": "0",
        "description": "Detonation point when `detonate()` is called with no argument"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Detonation point when `detonate()` is called with no argument"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "damage",
        "default": "20",
        "description": "Full damage `D` (direct hit + within `fullRadius`)"
      },
      {
        "name": "fullRadius",
        "default": "1.5",
        "description": "Within this distance the blast deals full `D`"
      },
      {
        "name": "blastRadius",
        "default": "5",
        "description": "Falloff from `D` (at `fullRadius`) to 1 here; 0 beyond"
      },
      {
        "name": "los",
        "default": "'on'",
        "description": "Line-of-sight occlusion (a wall between blast + target spares it)"
      },
      {
        "name": "by"
      }
    ]
  },
  {
    "module": "b3d-water",
    "tag": "tosi-b3d-water",
    "summary": "b3d-water",
    "attributes": [
      {
        "name": "x"
      },
      {
        "name": "y"
      },
      {
        "name": "z"
      },
      {
        "name": "rx"
      },
      {
        "name": "ry"
      },
      {
        "name": "rz"
      },
      {
        "name": "axes"
      },
      {
        "name": "underwaterFog"
      },
      {
        "name": "fogColor",
        "default": "'#00264d'",
        "description": "The colour of the water you are IN (the underwater fog). Sea blue by default; a methane sea (Titan) is dark amber"
      },
      {
        "name": "underwaterMurk"
      },
      {
        "name": "fogTransition"
      },
      {
        "name": "underside",
        "default": "'auto'",
        "description": "Snell's window from below: straight up, a bright window onto the sky; toward grazing angles, a mirror of the depths. `'auto'` = on whenever `twoSided`; `'on'`/`'off'` force it. Fades in with the underwater fog"
      },
      {
        "name": "undersideColor",
        "default": "'#9fdcf0'",
        "description": "The window: the sky's light, looking up"
      },
      {
        "name": "undersideDepthColor",
        "default": "'#06283a'",
        "description": "The mirror: the dark water, at grazing angles"
      },
      {
        "name": "undersideSky",
        "default": "1",
        "description": "From below, the window REFRACTS THE REAL SKY (the sun included), distorted by the ripples — clearest in the shallows, fading with depth, giving way to the dark mirror toward grazing angles. `0` = the flat `undersideColor` only"
      },
      {
        "name": "caustics",
        "default": "'auto'",
        "description": "Light through the moving surface, dancing on everything beneath it (terrain, hulls, the player). `'auto'` = on whenever `twoSided`. Fades with depth and fog; follows the sun"
      },
      {
        "name": "causticsStrength",
        "default": "0.6",
        "description": "How bright the web gets"
      },
      {
        "name": "causticsScale",
        "default": "6",
        "description": "Metres per caustic cell: bigger is coarser and calmer"
      },
      {
        "name": "spherical",
        "default": "false",
        "description": "Use a sphere instead of a plane"
      },
      {
        "name": "waterSize",
        "default": "128",
        "description": "Size of the water plane"
      },
      {
        "name": "subdivisions",
        "default": "32",
        "description": "Mesh subdivisions"
      },
      {
        "name": "textureSize"
      },
      {
        "name": "twoSided",
        "default": "false",
        "description": "Render both sides"
      },
      {
        "name": "follow",
        "default": "false",
        "description": "Ride the camera in x/z (endless sea): the plane snaps to a coarse grid under you, ripples stay anchored in world space"
      },
      {
        "name": "normalMap"
      },
      {
        "name": "windForce",
        "default": "-5",
        "description": "Wind strength"
      },
      {
        "name": "waveHeight",
        "default": "0",
        "description": "Wave amplitude"
      },
      {
        "name": "bumpHeight",
        "default": "0.1",
        "description": "Normal map bump intensity"
      },
      {
        "name": "waveLength"
      },
      {
        "name": "waterColor",
        "default": "'#0066cc'",
        "description": "Water tint color"
      },
      {
        "name": "colorBlendFactor",
        "default": "0.1",
        "description": "How much color tints the water"
      },
      {
        "name": "windDirectionX"
      },
      {
        "name": "windDirectionY"
      },
      {
        "name": "wind"
      }
    ]
  },
  {
    "module": "b3d-weather-cell",
    "tag": "tosi-b3d-weather-cell",
    "summary": "b3d-weather-cell",
    "attributes": [
      {
        "name": "x",
        "default": "0",
        "description": "Centre, world XZ"
      },
      {
        "name": "z",
        "default": "0",
        "description": "Centre, world XZ"
      },
      {
        "name": "radius",
        "default": "200",
        "description": "Reach (m); influence eases to nothing at the rim"
      },
      {
        "name": "windSpeed",
        "default": "0",
        "description": "Wind this cell ADDS at its centre (bearing: where it goes, north-up, clockwise). A lee adds the opposite of the scene's"
      },
      {
        "name": "windBearingDeg",
        "default": "0",
        "description": "Wind this cell ADDS at its centre (bearing: where it goes, north-up, clockwise). A lee adds the opposite of the scene's"
      },
      {
        "name": "coverage",
        "default": "0",
        "description": "Cloud cover it adds (summed, clamped 0–2). A storm counts IN FULL, so a cell past 1 closes the sky over its inner part; past 1 it is also darker underneath. (A tower rising out of the deck is opt-in, the deck's `stormRise`.) `0` = no opinion"
      },
      {
        "name": "precipitation",
        "default": "0",
        "description": "Rain/snow 0–1 (the max of overlapping cells wins)"
      },
      {
        "name": "storminess",
        "default": "0",
        "description": "Lightning likelihood 0–1 (max wins)"
      },
      {
        "name": "temperature",
        "default": "0",
        "description": "Temperature offset in degrees (summed)"
      },
      {
        "name": "drift",
        "default": "'off'",
        "description": "`'wind'` = a weather system: it travels with the scene's wind"
      },
      {
        "name": "lifetime",
        "default": "0",
        "description": "Seconds; grows, holds and dies over it (`0` = permanent). An ended cell does nothing and fires `ended`"
      },
      {
        "name": "grow",
        "default": "0",
        "description": "Seconds to GATHER from nothing to full (`0` = at once). Independent of `lifetime`, so a permanent storm can still build; with both, it gathers and then ends on its lifetime"
      }
    ]
  },
  {
    "module": "control-input",
    "summary": "control-input",
    "attributes": [
      {
        "name": "forward",
        "default": "-1..1",
        "description": "Forward/backward movement"
      },
      {
        "name": "strafe",
        "default": "-1..1",
        "description": "Left/right strafe"
      },
      {
        "name": "lookX",
        "default": "-1..1",
        "description": "Camera look — swings the view, springs back on release"
      },
      {
        "name": "lookY",
        "default": "-1..1",
        "description": "Camera look — swings the view, springs back on release"
      },
      {
        "name": "turn",
        "default": "-1..1",
        "description": "Turning"
      },
      {
        "name": "pitch",
        "default": "-1..1",
        "description": "Pitch (aircraft)"
      },
      {
        "name": "throttle",
        "default": "0..1",
        "description": "Continuous throttle"
      },
      {
        "name": "jump",
        "default": "0..1",
        "description": "Jump"
      },
      {
        "name": "shoot",
        "default": "0..1",
        "description": "Fire weapon"
      },
      {
        "name": "sprint",
        "default": "0..1",
        "description": "Sprint modifier"
      },
      {
        "name": "interact",
        "default": "0..1",
        "description": "Enter vehicle / pick up / use"
      },
      {
        "name": "aim",
        "default": "0..1",
        "description": "Aim down sights"
      },
      {
        "name": "weapon",
        "default": "0..1",
        "description": "Raise/lower the weapon — edge-detected by consumers, so it TOGGLES"
      },
      {
        "name": "cameraZoom",
        "default": "-1..1",
        "description": "Camera zoom"
      },
      {
        "name": "sneak",
        "default": "0\\",
        "description": "1"
      }
    ]
  },
  {
    "module": "game-controller",
    "tag": "tosi-game-controller",
    "summary": "game-controller",
    "attributes": [
      {
        "name": "wheelSensitivity"
      },
      {
        "name": "updateIntervalMs"
      },
      {
        "name": "mouseLook"
      },
      {
        "name": "mouseSensitivity"
      }
    ]
  },
  {
    "module": "gamepad-svg",
    "summary": "gamepad-svg",
    "attributes": [
      {
        "name": "strokeColor",
        "default": "#000000",
        "description": "All stroked elements"
      },
      {
        "name": "strokeWidth",
        "default": "16",
        "description": "All stroked elements"
      },
      {
        "name": "widgetColor",
        "default": "#ffffff",
        "description": "Bumpers, triggers, dpad, sticks, menu, view"
      },
      {
        "name": "controllerColor",
        "default": "#aaaaaa",
        "description": "Controller body"
      },
      {
        "name": "stickTravelColor",
        "default": "#505050",
        "description": "Stick travel circles"
      },
      {
        "name": "fillA",
        "default": "#ff1d25",
        "description": "A button (red)"
      },
      {
        "name": "fillB",
        "default": "#fcee22",
        "description": "B button (yellow)"
      },
      {
        "name": "fillX",
        "default": "#8cc63f",
        "description": "X button (green)"
      },
      {
        "name": "fillY",
        "default": "#3ea9f5",
        "description": "Y button (blue)"
      }
    ]
  },
  {
    "module": "glass-gamepad",
    "tag": "tosi-b3d-gamepad",
    "summary": "glass-gamepad (b3dGamepad)",
    "attributes": [
      {
        "name": "controls",
        "default": "''",
        "description": "**Comma**-separated piece list, e.g. `'a,b,right_stick(40,0),menu'`. Empty (the default) shows everything. `a/b/x/y` map to `A/B/X/Y`; `dpad` expands to the four directions; `name(dx,dy)` nudges one piece"
      },
      {
        "name": "scale"
      },
      {
        "name": "deadzone"
      },
      {
        "name": "maxZone"
      },
      {
        "name": "idleSeconds",
        "default": "10",
        "description": "Seconds of silence before a faded pad comes back"
      },
      {
        "name": "fade",
        "default": "'on'",
        "description": "Hide the pad once a real input device is in use. `'off'` pins it visible — what you want on a page where the pad itself is the subject"
      },
      {
        "name": "fadedOpacity",
        "default": "0",
        "description": "How faded is faded. `0` is invisible; a low value like `0.15` leaves a hint that the fallback exists"
      }
    ]
  },
  {
    "module": "gradient-editor",
    "tag": "tosi-gradient-editor",
    "attributes": [
      {
        "name": "width"
      },
      {
        "name": "height"
      }
    ]
  },
  {
    "module": "icon-name",
    "summary": "icon-name",
    "attributes": [
      {
        "name": "r",
        "default": "rotate N°",
        "description": "`chevron90r`"
      },
      {
        "name": "f",
        "default": "flip (`0f` = H, `1f` = V)",
        "description": "`chevron0f`"
      },
      {
        "name": "s",
        "default": "scale N%",
        "description": "`star75s`"
      },
      {
        "name": "x",
        "default": "translateX N%",
        "description": "`plus20x`"
      },
      {
        "name": "y",
        "default": "translateY N%",
        "description": "`plus_10y`"
      },
      {
        "name": "o",
        "default": "opacity N%",
        "description": "`camera50o`"
      }
    ]
  },
  {
    "module": "key-layout",
    "summary": "key-layout",
    "attributes": [
      {
        "name": "alpha",
        "default": "shift"
      },
      {
        "name": "symbols",
        "default": "punctuation and symbols"
      },
      {
        "name": "dial",
        "default": "a telephone keypad — `*` `0` `#`, `+` for international"
      }
    ]
  },
  {
    "module": "keyboard-gamepad",
    "tag": "tosi-keyboard-gamepad",
    "summary": "keyboard-gamepad",
    "attributes": [
      {
        "name": "wheelSensitivity"
      },
      {
        "name": "updateIntervalMs"
      }
    ]
  },
  {
    "module": "light-modulation",
    "summary": "Light programs",
    "attributes": [
      {
        "name": "brightness",
        "default": "**multiplies** the base intensity — `0` off, `1` as declared",
        "description": "\"off\" has to be reachable; it is the value you flicker to"
      },
      {
        "name": "range",
        "default": "**multiplies** the base range",
        "description": "a range of zero is a light that lights nothing"
      },
      {
        "name": "saturation",
        "default": "**multiplies** saturation — `0` is white, `saturationScale` sets what `1` means",
        "description": "saturation has a meaningful zero and reaching it is the point"
      },
      {
        "name": "hue",
        "default": "**shifts** the base hue, `0.5` = unchanged, scaled by `hueShiftDeg",
        "description": "hue is circular with no meaningful zero, so an absolute mapping would discard the colour you chose"
      }
    ]
  },
  {
    "module": "lightning",
    "summary": "lightning",
    "attributes": [
      {
        "name": "ground",
        "default": "cloud to ground: a bolt, the brightest flash, thunder",
        "description": "most"
      },
      {
        "name": "cloud",
        "default": "inside the cloud: the tower lit from within, no bolt",
        "description": "many"
      },
      {
        "name": "sprite",
        "default": "ABOVE the storm, 50–90 km up in reality: brief red-pink crowns and tendrils, only over strong storms",
        "description": "rare"
      }
    ]
  },
  {
    "module": "manipulator",
    "summary": "manipulator",
    "attributes": [
      {
        "name": "translate",
        "default": "the point on the axis closest to the pointer's ray"
      },
      {
        "name": "rotate",
        "default": "the angle around the axis where the ray crosses its plane"
      }
    ]
  },
  {
    "module": "picker",
    "summary": "picker",
    "attributes": [
      {
        "name": "options",
        "description": "`string[]`, or `{value, label?, group?}[]`"
      },
      {
        "name": "value",
        "default": "''",
        "description": "the current selection"
      },
      {
        "name": "label",
        "default": "—",
        "description": "drawn to the left of the closed control"
      },
      {
        "name": "filter",
        "default": "'auto'",
        "description": "`'auto'` shows the query field above `filterAbove` options"
      },
      {
        "name": "filterAbove",
        "default": "12",
        "description": "where `'auto'` starts showing it"
      },
      {
        "name": "groups",
        "default": "'auto'",
        "description": "`'auto'` shows the group chooser when there is more than one group"
      },
      {
        "name": "placeholder",
        "default": "'choose…'",
        "description": "shown when nothing is selected"
      },
      {
        "name": "handleChange",
        "description": "the chosen value; fires on pick, and the popup closes"
      }
    ]
  },
  {
    "module": "rocket-ascent",
    "summary": "Rocket Ascent",
    "attributes": [
      {
        "name": "cloudAltitude",
        "default": "140",
        "description": "Centre of the cloud deck (m)"
      },
      {
        "name": "spaceStart",
        "default": "500",
        "description": "Where the sky begins to fade (m)"
      },
      {
        "name": "spaceFull",
        "default": "2400",
        "description": "Full vacuum (m)"
      },
      {
        "name": "apogee",
        "default": "3200",
        "description": "Where it stops and resets (m)"
      },
      {
        "name": "accel",
        "default": "9",
        "description": "Net acceleration (m/s²) — thrust already minus gravity"
      },
      {
        "name": "holdSeconds",
        "default": "2.5",
        "description": "Pause on the pad, and again at apogee"
      },
      {
        "name": "starfield",
        "default": "2500",
        "description": "Background stars (see [b3d-skybox](?b3d-skybox.ts))"
      },
      {
        "name": "nebulae",
        "default": "0",
        "description": "Sprite nebulae, OFF — superseded by baking the galaxy"
      },
      {
        "name": "rocketScale",
        "default": "4",
        "description": "Uniform scale on the Kenney parts"
      },
      {
        "name": "timeOfDay",
        "default": "14",
        "description": "Broad daylight — so the stars appear because the AIR ran out, not because night fell"
      }
    ]
  },
  {
    "module": "slope-profile",
    "summary": "slope-profile",
    "attributes": [
      {
        "name": "cliffProfile",
        "default": "flat low shelf → sharp riser → flat top",
        "description": "sea cliffs (Dover)"
      },
      {
        "name": "beachProfile",
        "default": "wide gentle low shelf, easing rise",
        "description": "beaches, coastal plain"
      },
      {
        "name": "rollingProfile",
        "default": "contrast-compressed midtones",
        "description": "rolling hills"
      },
      {
        "name": "mesaProfile",
        "default": "plateauFilter",
        "description": "mesas, mid-level plateaus"
      },
      {
        "name": "terraceProfile",
        "default": "steps with sloped risers",
        "description": "terraced hills"
      }
    ]
  },
  {
    "module": "tosi-b3d",
    "tag": "tosi-b3d",
    "summary": "b3d",
    "attributes": [
      {
        "name": "glowLayerIntensity",
        "default": "0",
        "description": "Glow effect intensity (0 = off)"
      },
      {
        "name": "clearColor"
      },
      {
        "name": "frameRate",
        "default": "30",
        "description": "Target frame rate"
      },
      {
        "name": "minElevation",
        "default": "5",
        "description": "Default orbit-camera elevation limits (degrees above the horizon)"
      },
      {
        "name": "maxElevation",
        "default": "70",
        "description": "Default orbit-camera elevation limits (degrees above the horizon)"
      },
      {
        "name": "minDistance",
        "default": "2",
        "description": "Default orbit-camera zoom limits"
      },
      {
        "name": "maxDistance",
        "default": "50",
        "description": "Default orbit-camera zoom limits"
      },
      {
        "name": "noXr"
      },
      {
        "name": "xrGrid"
      },
      {
        "name": "xrReticle"
      },
      {
        "name": "scenePanelOpen"
      },
      {
        "name": "panelSections"
      },
      {
        "name": "gamepadScale",
        "default": "1",
        "description": "Scale factor for the glass gamepad clusters"
      },
      {
        "name": "gamepadFade",
        "default": "'on'",
        "description": "`'off'` keeps the glass gamepad visible instead of fading it once a mouse/keyboard/hardware pad is used"
      },
      {
        "name": "quality"
      },
      {
        "name": "pixelRatio"
      },
      {
        "name": "stats"
      },
      {
        "name": "pauseWhenHidden"
      },
      {
        "name": "startPaused"
      },
      {
        "name": "reseatFreeze"
      },
      {
        "name": "timeScale"
      },
      {
        "name": "windSpeed"
      },
      {
        "name": "windBearingDeg"
      },
      {
        "name": "windGust"
      },
      {
        "name": "enterXrOnResume"
      }
    ]
  },
  {
    "module": "voxel-galaxy",
    "summary": "voxel-galaxy",
    "attributes": [
      {
        "name": "seed",
        "default": "—",
        "description": "Galaxy seed: shapes the density AND derives every voxel's seeds"
      },
      {
        "name": "brightBudget",
        "default": "5000",
        "description": "Stars in the global pass"
      },
      {
        "name": "dimBudget",
        "default": "95000",
        "description": "Stars across all voxels' dim passes — most are never generated"
      },
      {
        "name": "samples",
        "default": "100000",
        "description": "Positions drawn from the spiral model (`sampleSpiral`) to impute the density"
      },
      {
        "name": "galaxyOptions",
        "default": "{}",
        "description": "Passed to the sampler (`spiralArms`, `thickness`, …)"
      },
      {
        "name": "nx",
        "default": "64",
        "description": "Grid resolution across the disc (x)"
      },
      {
        "name": "ny",
        "default": "64",
        "description": "Grid resolution across the disc (y)"
      },
      {
        "name": "nz",
        "default": "60",
        "description": "Grid resolution through the disc (z). Must resolve the disc's thickness: at 20 a layer (0.03) was as thick as the disc itself, so stars sat in flat slabs with hard edges, read as columns at 1M stars"
      },
      {
        "name": "halfXY",
        "default": "1.05",
        "description": "Grid half-extent across the disc"
      },
      {
        "name": "halfZ",
        "default": "0.3",
        "description": "Grid half-extent through the disc — room for a halo"
      },
      {
        "name": "smoothPasses",
        "default": "1",
        "description": "Blur passes over the sampled histogram (calms sparse voxels)"
      },
      {
        "name": "fringeShare",
        "default": "0.02",
        "description": "Share of the budget spread across EMPTY voxels"
      },
      {
        "name": "fringeFalloff",
        "default": "3",
        "description": "Falloff length for the fringe, in voxels"
      },
      {
        "name": "brightMix",
        "default": "O–G5",
        "description": "The bright population's spectral mix — the bright/dim cut is here"
      },
      {
        "name": "dimMix",
        "default": "G6–M",
        "description": "The dim population's spectral mix — underweight late M freely"
      }
    ]
  },
  {
    "module": "weather",
    "summary": "weather",
    "attributes": [
      {
        "name": "wind",
        "default": "vector SUM",
        "description": "a lee subtracts, a gust adds"
      },
      {
        "name": "temperature",
        "default": "signed SUM",
        "description": "a cold cell beside a warm one cancels"
      },
      {
        "name": "coverage",
        "default": "SUM, clamped 0–2",
        "description": "a storm thickens the sky, a clear cell thins it; past 1 is THICKNESS (a storm tower), as on the deck's own dial"
      },
      {
        "name": "precipitation",
        "default": "MAX",
        "description": "two storms overlapping do not rain twice as hard"
      },
      {
        "name": "storminess",
        "default": "MAX",
        "description": "like volcanism: the worst one wins"
      }
    ]
  },
  {
    "module": "widgets3d",
    "summary": "widgets3d",
    "attributes": [
      {
        "name": "panel3d",
        "default": "width",
        "description": "`360`"
      },
      {
        "name": "label3d",
        "default": "collapsible",
        "description": "`false`"
      },
      {
        "name": "row3d",
        "default": "weights",
        "description": "equal"
      },
      {
        "name": "slider3d",
        "default": "min` / `max",
        "description": "`0` / `1`"
      },
      {
        "name": "toggle3d",
        "default": "label` / `value"
      },
      {
        "name": "select3d",
        "default": "options"
      },
      {
        "name": "inputField",
        "default": "type",
        "description": "`'text'`"
      },
      {
        "name": "list3d",
        "default": "items` / `onSelect"
      },
      {
        "name": "button3d",
        "default": "label` / `onClick"
      },
      {
        "name": "menu3d",
        "default": "items` / `handleSelect"
      },
      {
        "name": "iconBar3d",
        "default": "items"
      },
      {
        "name": "tabs3d",
        "default": "tabs` / `active` / `handleSelect",
        "description": "`0`"
      },
      {
        "name": "spinner3d",
        "default": "label` / `size"
      },
      {
        "name": "progress3d",
        "default": "label` / `value` / `showValue"
      }
    ]
  },
  {
    "module": "xr-frames",
    "summary": "xr-frames",
    "attributes": [
      {
        "name": "world",
        "default": "the play space",
        "description": "a hologram on a table"
      },
      {
        "name": "rig",
        "default": "the locomotion rig (vehicle)",
        "description": "a piloting HUD that flies with you"
      },
      {
        "name": "body",
        "default": "your torso (head x/z + **damped** yaw)",
        "description": "waist inventory, over-shoulder backpack"
      },
      {
        "name": "neck",
        "default": "your neck pivot",
        "description": "UI you can look *past*"
      },
      {
        "name": "face",
        "default": "your eyes (head-locked)",
        "description": "a reticle, a vignette, sunglasses"
      }
    ]
  },
  {
    "module": "xr-gamepad",
    "summary": "xr-gamepad",
    "attributes": [
      {
        "name": "leftBumper",
        "default": "xr-standard-squeeze` (grip)"
      },
      {
        "name": "rightBumper",
        "default": "xr-standard-squeeze` (grip)"
      }
    ]
  }
]