{
  "loop.hz": { "value": 60, "min": 30, "max": 120, "step": 30, "group": "loop", "note": "fixed update steps per second" },
  "loop.maxFrame": { "value": 0.1, "min": 0.05, "max": 0.25, "step": 0.01, "group": "loop", "note": "the elapsed-time clamp (s)" },
  "view.maxScale": { "value": 1.6, "min": 1, "max": 3, "step": 0.1, "group": "view", "note": "the drawing buffer's cap over 960 x 540 (look5.js caps at 1.6)" },
  "kit.rerollMs": { "value": 400, "min": 100, "max": 1000, "step": 50, "group": "kit", "note": "facet re-roll interval in ms (style 31)" },
  "kit.rerollShare": { "value": 0.12, "min": 0, "max": 0.3, "step": 0.01, "group": "kit", "note": "share of facets stepped per re-roll (style 31)" },
  "cam.fov": { "value": 30, "min": 15, "max": 60, "step": 1, "group": "camera", "note": "the side camera's vertical field of view in degrees (look5.js)" },
  "cam.y0": { "value": 2.35, "min": 0, "max": 5, "step": 0.05, "group": "camera", "note": "camera height at floor 0, units (31a)" },
  "cam.yPerFloor": { "value": 0.6, "min": 0, "max": 1.5, "step": 0.05, "group": "camera", "note": "camera rise per unit of floor (31a)" },
  "cam.z": { "value": 7.8, "min": 4, "max": 14, "step": 0.1, "group": "camera", "note": "camera distance, units (31a)" },
  "cam.lookY0": { "value": 1.4, "min": 0, "max": 3, "step": 0.05, "group": "camera", "note": "look-at height at floor 0, units (31a)" },
  "dev.step": { "value": -1, "min": -1, "max": 4, "step": 0.1, "group": "dev", "note": "colour step override; -1 keeps the scene's own" },
  "knot.start": { "value": 8, "min": 0, "max": 10, "step": 1, "group": "knot", "note": "level 1's loops at the start: the knock's knot.knock, as the opening leaves it (N3c: the opening's sit is gone)" },
  "knot.knock": { "value": 8, "min": 0, "max": 10, "step": 1, "group": "knot", "note": "the opening's knock fills his bubble to this (GDD: the knock fills the knot to 8); level 1 starts there (N3b)" },
  "knot.floor1": { "value": 6, "min": 0, "max": 10, "step": 1, "group": "knot", "note": "level 1's floor: rest never takes the knot below it" },
  "knot.floor2": { "value": 5, "min": 0, "max": 10, "step": 1, "group": "knot", "note": "the floor after the sun; the knot is set to it" },
  "knot.floor3": { "value": 4, "min": 0, "max": 10, "step": 1, "group": "knot", "note": "the floor after the warm cup; the knot is set to it (GDD: 6, then 5, 4 and 3)" },
  "knot.floor4": { "value": 3, "min": 0, "max": 10, "step": 1, "group": "knot", "note": "the floor after the blackbird (N3b; GDD: 6, then 5, 4 and 3)" },
  "knot.floor5": { "value": 0, "min": 0, "max": 10, "step": 1, "group": "knot", "note": "the floor at her door: the Knot coming apart sets the knot to it (N4; GDD: 0 at the door)" },
  "knot.floorCat": { "value": 2, "min": 0, "max": 10, "step": 1, "group": "knot", "note": "N5: the floor after the yards' cat: it sets the knot to it; the stairs and his room's wait start at it (GDD: one floor a good thing) [S10]" },
  "colour.cat": { "value": 3.5, "min": 0, "max": 4, "step": 0.05, "group": "knot", "note": "N5: the colour step the yards' cat brings (from the kit's 3); the stairs start at it [S9]" },
  "colour.face": { "value": 4, "min": 0, "max": 4, "step": 0.05, "group": "knot", "note": "N5: the colour step her face brings at her door (the last)" },
  "knot.gap": { "value": 2.4, "min": 0.5, "max": 5, "step": 0.1, "group": "crisis", "note": "the Knot on the landing holds this far behind him (its front to his back) while he walks toward her door, units (N4 [S5]; Daniel 2026-10-31: Knot A)" },
  "knot.pace": { "value": 0.6, "min": 0, "max": 2, "step": 0.05, "group": "crisis", "note": "the Knot comes on at this while he stands or walks back, and eases back out to its gap at it while he walks on, units/s (N4 [S6]; Daniel 2026-10-31: Knot A)" },
  "knot.r": { "value": 0.9, "min": 0.2, "max": 2, "step": 0.05, "group": "crisis", "note": "the Knot's reach from its centre to its front, units (noise.js makeKnot: r 0.9)" },
  "knot.riseT": { "value": 1.2, "min": 0.1, "max": 4, "step": 0.1, "group": "crisis", "note": "the Knot rises from the stairwell behind him over this as he steps onto the landing, s (N4 [S13])" },
  "knot.backT": { "value": 1, "min": 0.1, "max": 4, "step": 0.1, "group": "crisis", "note": "after its touch the Knot falls back to its gap over this, s (N4 [S14]: his grace, hit.grace)" },
  "knot.apartT": { "value": 1.4, "min": 0.3, "max": 4, "step": 0.1, "group": "crisis", "note": "after the knock the Knot comes apart over this, three untangles, s (N4; Kit.md round 3)" },
  "hit.knot": { "value": 3, "min": 0, "max": 6, "step": 1, "group": "crisis", "note": "loops the Knot's touch adds (N4; GDD and Kit.md round 3: +3)" },
  "hit.sweller": { "value": 3, "min": 0, "max": 6, "step": 1, "group": "hit", "note": "N5: loops a sweller's touch adds (Kit.md round 3: +3)" },
  "sweller.reach": { "value": 0.4, "min": 0.1, "max": 1.5, "step": 0.01, "group": "hit", "note": "N5: a sweller's touch radius, units: its tangle at full swell, makeSweller's 0.2 x 3.1 is 0.62, spike tips 0.81 to 1.18 [S2]; after Daniel's stop answer its dense core, 0.5 (the drifter's precedent, hit.reach); N5b: 0.4 (Daniel's pick, 2026-11-01 23:48 UTC: a pinpoint jump at 0.5)" },
  "sweller.near": { "value": 1.6, "min": 0.3, "max": 4, "step": 0.05, "group": "hit", "note": "N5, Daniel's stop answer: a sweller swells while his hurt shape is within this of its centre, units (makeSweller's own reach, 1.6)" },
  "sweller.rise": { "value": 4, "min": 0.2, "max": 6, "step": 0.05, "group": "hit", "note": "N5, Daniel's stop answer: its swell from small to full while he is near, s" },
  "sweller.fall": { "value": 1, "min": 0.2, "max": 6, "step": 0.05, "group": "hit", "note": "N5, Daniel's stop answer: its swell from full back to small once he is away, s" },
  "scrap.reach": { "value": 0.35, "min": 0.1, "max": 1, "step": 0.01, "group": "scrap", "note": "N5b [S2]: a scrap's glint box, its half size, units: touching it takes it (goods.js scrapPickup draws it 0.42 wide), brushing past doesn't" },
  "scrap.raise": { "value": 0, "min": 0, "max": 2, "step": 0.05, "group": "scrap", "note": "N5b: every scrap's glint raised by this above its table height, units: 0 at his head as he walks (the kit's floorAt + 1.15), 1.1 just out of his walking reach so a jump takes it (the look page's R)" },
  "scrap.fly": { "value": 0.6, "min": 0.1, "max": 3, "step": 0.05, "group": "scrap", "note": "N5b: a taken scrap lifts, turns and flies off screen toward home over this, s" },
  "scrap.flyLift": { "value": 0.5, "min": 0, "max": 2, "step": 0.05, "group": "scrap", "note": "N5b: the taken scrap's first lift before it flies, units" },
  "scrap.flyTurn": { "value": 2, "min": 0, "max": 6, "step": 0.1, "group": "scrap", "note": "N5b: the taken scrap's turns as it flies off, turns" },
  "scrap.paste": { "value": 0.5, "min": 0.1, "max": 2, "step": 0.05, "group": "scrap", "note": "N5b: each scrap he took flies in, turns and presses flat on his wall over this, s (the kit's scrapWall.set(n, u))" },
  "thin.reach": { "value": 2, "min": 0.5, "max": 6, "step": 0.05, "group": "thin", "note": "N5c: a figure with a clear bubble thins the noise within this of its x, units (the share half at the edge) [S3]" },
  "thin.alpha": { "value": 0.45, "min": 0, "max": 1, "step": 0.05, "group": "thin", "note": "N5c: the noise's opacity, as a share of its own, where it is fully thinned [S4]" },
  "thin.hit": { "value": 1, "min": 0, "max": 3, "step": 1, "group": "thin", "note": "N5c: a hit inside a figure's thin.reach costs this many loops less, never below none; knockback and grace stay [S5]" },
  "thin.ease": { "value": 0.5, "min": 0.05, "max": 2, "step": 0.05, "group": "thin", "note": "N5c: the fade eases over this, units, centred on thin.reach's edge [S6]" },
  "yn.lookAt": { "value": 5.6, "min": 1, "max": 10, "step": 0.1, "group": "town", "note": "N5c: the Yard Neighbour stops wringing and looks to him once he is this far before her x, units (look19.js line 56) [S1]" },
  "yn.greetAt": { "value": 3.4, "min": 0.5, "max": 8, "step": 0.1, "group": "town", "note": "N5c: she greets him (glad, one nod) once he is this far before her x, units (look19.js line 56) [S2]" },
  "yn.bubbleDx": { "value": 0.08, "min": -0.6, "max": 0.6, "step": 0.01, "group": "town", "note": "N5c, Daniel at the stop (2026-11-02): her bubble's tail tip this far right of her head, units, so it points to her head (the town figures' 0.08, look2.js placeBubble; look19.js's -0.1 with centre 0.78 put the tail 0.54 left of it: a sprite's negative scale.x never mirrors in three r186)" },
  "door.reach": { "value": 0.6, "min": 0.1, "max": 2, "step": 0.05, "group": "crisis", "note": "E knocks at her door while he is within this of the stand before it, units (N4 [S15])" },
  "door.rapT": { "value": 0.8, "min": 0.3, "max": 2, "step": 0.05, "group": "crisis", "note": "one rap of the knock, s (lodger.js ANIMS.knock 800 ms: one rap a loop)" },
  "door.raps": { "value": 3, "min": 1, "max": 6, "step": 1, "group": "crisis", "note": "his knock's raps at her door (N4: three)" },
  "end.curtain": { "value": 2.5, "min": 0.5, "max": 6, "step": 0.1, "group": "ending", "note": "the slow curtain after her face at her door, s (N4 [S8])" },
  "end.hold": { "value": 8, "min": 3, "max": 20, "step": 0.5, "group": "ending", "note": "the Key Image holds this long before the title, s (N4 [S9])" },
  "end.minHold": { "value": 3, "min": 0, "max": 10, "step": 0.5, "group": "ending", "note": "a key or click moves on from the Key Image only after this, and the helpline fades in then, s (N4 [S10])" },
  "hit.drifter": { "value": 2, "min": 0, "max": 5, "step": 1, "group": "hit", "note": "loops a drifter touch adds" },
  "hit.rain": { "value": 1, "min": 0, "max": 5, "step": 1, "group": "hit", "note": "loops a rain touch adds (N3)" },
  "hit.roller": { "value": 2, "min": 0, "max": 5, "step": 1, "group": "hit", "note": "loops a roller's touch adds (N3b)" },
  "hit.reach": { "value": 0.18, "min": 0.1, "max": 0.8, "step": 0.01, "group": "hit", "note": "a drifter's contact radius, units (the kit draws a dense core of about 0.1 in a 0.3 halo; Daniel's playtest, 2026-10-30 18:27 UTC: 0.18)" },
  "hit.knock": { "value": 1.2, "min": 0, "max": 3, "step": 0.1, "group": "hit", "note": "knockback distance away from the noise, units" },
  "hit.knockT": { "value": 0.25, "min": 0.05, "max": 1, "step": 0.05, "group": "hit", "note": "knockback time, s" },
  "hit.grace": { "value": 1, "min": 0, "max": 3, "step": 0.1, "group": "hit", "note": "no hits for this long after one, s" },
  "hit.flicker": { "value": 4, "min": 1, "max": 8, "step": 1, "group": "hit", "note": "his facets' re-roll rate during grace, times the usual [S10]" },
  "rest.every": { "value": 1.5, "min": 0.5, "max": 5, "step": 0.1, "group": "rest", "note": "seated: one loop off every this many s, down to the floor" },
  "rest.getupT": { "value": 0.75, "min": 0, "max": 1.5, "step": 0.05, "group": "rest", "note": "getting up from a rest holds control this long, s (round 11's restup is 750 ms)" },
  "rest.reach": { "value": 0.35, "min": 0.05, "max": 1, "step": 0.05, "group": "rest", "note": "stopping on the floor within this of a bench's spot sits him, units [S3]" },
  "rest.turn": { "value": 0.25, "min": 0.05, "max": 1, "step": 0.05, "group": "rest", "note": "he eases from his line onto the seat's spot and back over this, s" },
  "fail.drain": { "value": 1.5, "min": 0.2, "max": 4, "step": 0.1, "group": "fail", "note": "full knot: the post's saturation drains to 0 over this, s" },
  "fail.hold": { "value": 0.5, "min": 0, "max": 2, "step": 0.1, "group": "fail", "note": "full knot: the grey view holds this long before the cut, s" },
  "fail.back": { "value": 3, "min": 0, "max": 5, "step": 1, "group": "fail", "note": "full knot: back at the checkpoint with floor + this many loops" },
  "fail.restore": { "value": 0.5, "min": 0.1, "max": 2, "step": 0.1, "group": "fail", "note": "full knot: saturation comes back over this after the cut, s" },
  "fail.getupT": { "value": 1.1, "min": 0, "max": 2.5, "step": 0.05, "group": "fail", "note": "full knot: getting up at the checkpoint holds control this long, s (round 11's knotup is 1100 ms) [S4]" },
  "move.walk0": { "value": 1.7, "min": 1, "max": 8, "step": 0.1, "group": "move", "note": "walk speed at 0 loops, units/s (N3c: Daniel's pick, walk B; N3b 4)" },
  "move.walk10": { "value": 1.3, "min": 1, "max": 8, "step": 0.1, "group": "move", "note": "walk speed at 10 loops, units/s (N3c: walk B, 1.5 at the street's start knot; N3b 3)" },
  "move.slowCap": { "value": 0.25, "min": 0, "max": 0.75, "step": 0.05, "group": "move", "note": "the knot never slows the walk below walk0 x (1 - this)" },
  "move.accel": { "value": 40, "min": 5, "max": 200, "step": 5, "group": "move", "note": "acceleration, units/s2 [S6]" },
  "move.decel": { "value": 50, "min": 5, "max": 200, "step": 5, "group": "move", "note": "deceleration and turning, units/s2 [S6]" },
  "move.stepUp": { "value": 0.2, "min": 0, "max": 0.5, "step": 0.05, "group": "move", "note": "rises up to this are stepped up without a jump, units [S8]" },
  "move.stepUp.street": { "value": 0.46, "min": 0, "max": 0.8, "step": 0.01, "group": "move", "note": "the street's step-up: its 0.45 kerbs are walked up, units (N3 [S5])" },
  "move.stepUp.stairs": { "value": 0.41, "min": 0, "max": 0.8, "step": 0.01, "group": "move", "note": "the closing level's step-up: its 0.4 risers are walked up, units (N4 [S2])" },
  "jump.apexT": { "value": 0.38, "min": 0.2, "max": 0.8, "step": 0.01, "group": "jump", "note": "time to the apex, s, the same every press" },
  "jump.h0": { "value": 1.6, "min": 0.5, "max": 3, "step": 0.05, "group": "jump", "note": "apex height at 0 loops, units" },
  "jump.h10": { "value": 1.25, "min": 0.5, "max": 3, "step": 0.05, "group": "jump", "note": "apex height at 10 loops, units" },
  "jump.coyote": { "value": 0.1, "min": 0, "max": 0.3, "step": 0.01, "group": "jump", "note": "a jump still works this long after leaving a top, s" },
  "jump.buffer": { "value": 0.12, "min": 0, "max": 0.3, "step": 0.01, "group": "jump", "note": "a press this long before landing still jumps, s" },
  "jump.corner": { "value": 0.12, "min": 0, "max": 0.4, "step": 0.01, "group": "jump", "note": "a landing missing a top by up to this, while above it, is nudged on, units" },
  "body.w": { "value": 0.5, "min": 0.2, "max": 1, "step": 0.05, "group": "body", "note": "his box's width, units" },
  "body.h": { "value": 1.9, "min": 1, "max": 2.5, "step": 0.05, "group": "body", "note": "his box's height, units (Kit.md: about 1.9 standing)" },
  "hurt.w": { "value": 0.4, "min": 0.1, "max": 1, "step": 0.01, "group": "hurt", "note": "his hurt box's width, units: what noise touches (lodger.js: the jersey about 0.5 deep, loose knit and arms at the edges) [S1]" },
  "hurt.h": { "value": 1.5, "min": 0.5, "max": 2.2, "step": 0.01, "group": "hurt", "note": "his hurt box's top above his feet, units: the collar (lodger.js P: hips 0.82 + torso 0.64) [S1]" },
  "hurt.headR": { "value": 0.16, "min": 0, "max": 0.4, "step": 0.01, "group": "hurt", "note": "his head circle's radius, units (lodger.js: the skull's ico 0.16) [S1]" },
  "hurt.headY": { "value": 1.68, "min": 1, "max": 2.4, "step": 0.01, "group": "hurt", "note": "his head circle's centre above his feet, units (the head group at 1.46, the skull 0.22 above it) [S1]" },
  "pose.perStep": { "value": 0.25, "min": 0, "max": 1, "step": 0.05, "group": "pose", "note": "posture per colour step: 0 slumped, 1 upright" },
  "face.low": { "value": 6, "min": 0, "max": 10, "step": 1, "group": "pose", "note": "his face is low above this many loops, mid otherwise; up only at the good thing [S9]" },
  "good.reach": { "value": 0.6, "min": 0.1, "max": 2, "step": 0.05, "group": "good", "note": "grounded within this of the good thing's x reaches it, units" },
  "good.picDelay": { "value": 0.4, "min": 0, "max": 2, "step": 0.05, "group": "good", "note": "the bubble's picture starts this long after he arrives, s (look5.js goodAt)" },
  "good.picFade": { "value": 0.3, "min": 0.05, "max": 1, "step": 0.05, "group": "good", "note": "the picture's fade in and out, s" },
  "good.flicker": { "value": 1.2, "min": 0, "max": 4, "step": 0.1, "group": "good", "note": "the picture holds this long, s" },
  "good.bloomT": { "value": 1.2, "min": 0.2, "max": 4, "step": 0.1, "group": "good", "note": "the colour step rises one step over this, s" },
  "good.curtain": { "value": 1, "min": 0.2, "max": 3, "step": 0.1, "group": "good", "note": "the slow fade into the room between levels, s" },
  "good.turn": { "value": 0.6, "min": 0.1, "max": 2, "step": 0.05, "group": "good", "note": "at the good thing he turns to face it over this before his reaction, s (look5.js's 600 ms turn)" },
  "good.smell.walk": { "value": 0.6, "min": 0.1, "max": 2, "step": 0.05, "group": "good", "note": "the cup: his last step from the stand onto the pavement, to round 12's placement, s (N3b [S])" },
  "good.perchY": { "value": 4, "min": 0, "max": 6, "step": 0.05, "group": "good", "note": "the blackbird's perch: on a branch of the drawn tree at this height, units (N3c item 6: Daniel's pick, blackbird A [S7]; 0: the tree's highest tip, spots.treeTop)" },
  "good.lookMax": { "value": 1.2, "min": 0.3, "max": 1.5, "step": 0.05, "group": "good", "note": "the blackbird: his lookup's head turn and chin lift toward it at most, rad (N3c item 6)" },
  "good.smell.bend": { "value": 0.8, "min": 0.2, "max": 2, "step": 0.05, "group": "good", "note": "the cup: the bend in (smell), s (the kit's SMELL_ANIMS.smell 800 ms) (N3b)" },
  "good.smell.breath": { "value": 2.4, "min": 0.5, "max": 5, "step": 0.1, "group": "good", "note": "the cup: one breath (smelling), s (the kit's SMELL_ANIMS.smelling 2400 ms) (N3b)" },
  "good.smell.breaths": { "value": 2, "min": 1, "max": 4, "step": 1, "group": "good", "note": "the cup: breaths before he straightens (N3b [S1])" },
  "good.smell.up": { "value": 0.8, "min": 0.2, "max": 2, "step": 0.05, "group": "good", "note": "the cup: the straightening (smellup), s (the kit's SMELL_ANIMS.smellup 800 ms) (N3b)" },
  "good.smell.posture": { "value": 0.7, "min": 0, "max": 1, "step": 0.05, "group": "good", "note": "the cup: his posture after smellup, from his slump (look12.js line 56: 0.35 to 0.7) (N3b)" },
  "good.cat.posture": { "value": 0.7, "min": 0, "max": 1, "step": 0.05, "group": "good", "note": "N5: the cat: his posture after kneelup, from his slump (look14.js line 85: 0.35 to 0.7)" },
  "good.cat.toStand": { "value": 0.4, "min": 0.05, "max": 2, "step": 0.05, "group": "good", "note": "N5: the cat: his ease from where he stopped onto the kit's stand (spots.yardCat.kneel), s" },
  "good.listen.picDelay": { "value": 1.8, "min": 0, "max": 4, "step": 0.05, "group": "good", "note": "the blackbird: the picture after he stops under the tree, s: one song cycle (goods.js blackbird 1800 ms) (N3b [S8])" },
  "open.a.walk": { "value": 1.4, "min": 0.2, "max": 4, "step": 0.1, "group": "opening", "note": "(a) Next Door walks in to his door, s" },
  "open.a.turn": { "value": 0.4, "min": 0, "max": 2, "step": 0.1, "group": "opening", "note": "(a) she turns to the door, s (look2.js)" },
  "open.a.knock": { "value": 1.6, "min": 0.4, "max": 4, "step": 0.1, "group": "opening", "note": "(a) she knocks, two raps, s (look2.js)" },
  "open.a.breath": { "value": 0.8, "min": 0, "max": 3, "step": 0.1, "group": "opening", "note": "(a) a breath, still, s [S2]" },
  "open.a.setcup": { "value": 1.8, "min": 0.5, "max": 4, "step": 0.1, "group": "opening", "note": "(a) she sets the cup on his step, s (look2.js, the setcup animation)" },
  "open.a.away": { "value": 1.4, "min": 0.2, "max": 4, "step": 0.1, "group": "opening", "note": "(a) she goes back toward her door, s" },
  "open.b.hold": { "value": 0.8, "min": 0, "max": 3, "step": 0.1, "group": "opening", "note": "(b) the dark room before the knock, s" },
  "open.b.knock": { "value": 1.6, "min": 0.4, "max": 4, "step": 0.1, "group": "opening", "note": "(b) the knock heard at his door, s" },
  "open.b.fill": { "value": 1.2, "min": 0.2, "max": 4, "step": 0.1, "group": "opening", "note": "(b) his bubble fills 0 to knot.start over this, from the first rap, s" },
  "open.b.breath": { "value": 0.8, "min": 0, "max": 3, "step": 0.1, "group": "opening", "note": "(b) a breath after the knocking stops, s [S2]" },
  "open.b.getup": { "value": 0.7, "min": 0.2, "max": 2, "step": 0.1, "group": "opening", "note": "(b) he gets up, s" },
  "open.b.turn": { "value": 1, "min": 0.2, "max": 3, "step": 0.1, "group": "opening", "note": "(b) he turns toward the window light, s" },
  "open.c.out": { "value": 1.5, "min": 0.2, "max": 4, "step": 0.1, "group": "opening", "note": "(c) the camera glides to the good thing, s" },
  "open.c.rest": { "value": 1, "min": 0, "max": 4, "step": 0.1, "group": "opening", "note": "(c) it rests on the good thing, s" },
  "open.c.back": { "value": 1.5, "min": 0.2, "max": 4, "step": 0.1, "group": "opening", "note": "(c) it glides back to him, s" },
  "teach.leash": { "value": 2, "min": 0.5, "max": 6, "step": 0.1, "group": "teach", "note": "level 1: until his first sit he can't go further than this past his bed's spot, units (N3c [S3])" },
  "teach.slow": { "value": 0.6, "min": 0.05, "max": 2, "step": 0.05, "group": "teach", "note": "level 1: he slows to a stop over this before the leash, units (N3c)" },
  "teach.look": { "value": 1.2, "min": 0, "max": 2.5, "step": 0.05, "group": "teach", "note": "level 1: at the leash his head turns back toward his bed this far, rad (N3c)" },
  "teach.lookT": { "value": 0.6, "min": 0.1, "max": 2, "step": 0.05, "group": "teach", "note": "level 1: the look back turns in and out over this, s (N3c)" },
  "teach.firstLoop": { "value": 1.2, "min": 0.2, "max": 4, "step": 0.1, "group": "teach", "note": "level 1: the first loop his first rest takes off leaves his bubble over this, s (N3c [S4]; later loops bubble.ease)" },
  "teach.fade": { "value": 0.6, "min": 0.1, "max": 2, "step": 0.05, "group": "teach", "note": "level 1: the sit keycap fades over this once he sits, s (N3c)" },
  "teach.capY": { "value": 1.45, "min": 0.6, "max": 3, "step": 0.05, "group": "teach", "note": "level 1: the sit keycap's centre above the floor at his bed, units (N3c)" },
  "teach.capSize": { "value": 0.42, "min": 0.15, "max": 1, "step": 0.01, "group": "teach", "note": "level 1: the sit keycap's width, units (the title's 44 x 42 px key) (N3c)" },
  "teach.bob": { "value": 0.05, "min": 0, "max": 0.3, "step": 0.01, "group": "teach", "note": "level 1: the sit keycap bobs up and down by this, units (N3c)" },
  "teach.bobT": { "value": 1.6, "min": 0.4, "max": 4, "step": 0.1, "group": "teach", "note": "level 1: one bob of the sit keycap, s (N3c)" },
  "post.fill": { "value": 1, "min": 0.2, "max": 3, "step": 0.1, "group": "post", "note": "the shelf's card fills over this, s" },
  "post.hold": { "value": 2.5, "min": 0.5, "max": 6, "step": 0.1, "group": "post", "note": "the room between levels holds this long, s" },
  "split.time": { "value": 2.5, "min": 0.5, "max": 6, "step": 0.1, "group": "split", "note": "the room splits open over this, eased, s" },
  "split.wipe": { "value": 0.6, "min": 0.1, "max": 2, "step": 0.05, "group": "split", "note": "the facet wipe onto the street, cover and uncover, s [S11]" },
  "pre.glide": { "value": 1.5, "min": 0.2, "max": 4, "step": 0.1, "group": "pre", "note": "the camera glides to the baker's warm door and back, each way, s" },
  "pre.rest": { "value": 1, "min": 0, "max": 4, "step": 0.1, "group": "pre", "note": "it rests on the good thing, s" },
  "pre.walk": { "value": 3, "min": 0, "max": 10, "step": 0.5, "group": "pre", "note": "control on the street before the fade, s [S12]" },
  "pre.fade": { "value": 1, "min": 0.2, "max": 3, "step": 0.1, "group": "pre", "note": "the fade back to the title, s" },
  "cam.lead": { "value": 0.6, "min": 0, "max": 2, "step": 0.05, "group": "camera", "note": "the side camera's lead ahead of his x, units" },
  "cam.ease": { "value": 0.25, "min": 0.02, "max": 1, "step": 0.01, "group": "camera", "note": "the camera's ease on floor height: its time constant, s" },
  "cam.street.y0": { "value": 2.35, "min": 0, "max": 6, "step": 0.05, "group": "camera", "note": "the street's camera height at floor 0, units (N3b [S12]; N3: cam.y0)" },
  "cam.street.yPerFloor": { "value": 0.6, "min": 0, "max": 1.5, "step": 0.05, "group": "camera", "note": "the street's camera rise per unit of floor (N3b)" },
  "cam.street.z": { "value": 10.8, "min": 4, "max": 16, "step": 0.1, "group": "camera", "note": "the street's camera distance, units (N3b: Daniel's pick, camera B)" },
  "cam.street.lookY0": { "value": 1.4, "min": 0, "max": 4, "step": 0.05, "group": "camera", "note": "the street's look-at height at floor 0, units (N3b)" },
  "cam.yards.y0": { "value": 2.35, "min": 0, "max": 6, "step": 0.05, "group": "camera", "note": "N5: the yards' camera height at floor 0, units (the street's framing [S1])" },
  "cam.yards.yPerFloor": { "value": 0.6, "min": 0, "max": 1.5, "step": 0.05, "group": "camera", "note": "N5: the yards' camera rise per unit of floor" },
  "cam.yards.z": { "value": 10.8, "min": 4, "max": 16, "step": 0.1, "group": "camera", "note": "N5: the yards' camera distance, units" },
  "cam.yards.lookY0": { "value": 1.4, "min": 0, "max": 4, "step": 0.05, "group": "camera", "note": "N5: the yards' look-at height at floor 0, units" },
  "cam.square.y0": { "value": 2.35, "min": 0, "max": 6, "step": 0.05, "group": "camera", "note": "the square's camera height at floor 0, units (N3b [S12])" },
  "cam.square.yPerFloor": { "value": 0.6, "min": 0, "max": 1.5, "step": 0.05, "group": "camera", "note": "the square's camera rise per unit of floor (N3b)" },
  "cam.square.z": { "value": 10.8, "min": 4, "max": 16, "step": 0.1, "group": "camera", "note": "the square's camera distance, units (N3b: the street's pick, camera B)" },
  "cam.square.lookY0": { "value": 1.4, "min": 0, "max": 4, "step": 0.05, "group": "camera", "note": "the square's look-at height at floor 0, units (N3b)" },
  "cam.stairs.y0": { "value": 2.35, "min": 0, "max": 6, "step": 0.05, "group": "camera", "note": "the closing level's camera height at floor 0, units (N4: look9.js line 180)" },
  "cam.stairs.yPerFloor": { "value": 1, "min": 0, "max": 1.5, "step": 0.05, "group": "camera", "note": "the closing level's camera rise per unit of floor: 1, the same tilt on every floor, never looking down the stair (N4: look9.js line 180)" },
  "cam.stairs.z": { "value": 7.8, "min": 4, "max": 16, "step": 0.1, "group": "camera", "note": "the closing level's camera distance, units (N4: look9.js line 180)" },
  "cam.stairs.lookY0": { "value": 1.4, "min": 0, "max": 4, "step": 0.05, "group": "camera", "note": "the closing level's look-at height at floor 0, units (N4: look9.js line 180)" },
  "cam.square.listenLift": { "value": 0, "min": 0, "max": 4, "step": 0.05, "group": "camera", "note": "the square: the camera's added lift for the blackbird, eased in over cam.square.listenFrom before the stand and held through the listen, units (N3c item 6; 0: none)" },
  "cam.square.listenFrom": { "value": 8, "min": 1, "max": 16, "step": 0.5, "group": "camera", "note": "the square: units before the blackbird's stand over which cam.square.listenLift eases in (N3c)" },
  "cam.headroom": { "value": 0.06, "min": 0, "max": 0.25, "step": 0.01, "group": "camera", "note": "street and square: his bubble's top at the top of a jump, and the figures' in view, stay this share of the frame's height inside its top (N3b [S13])" },
  "cam.feet": { "value": 0.06, "min": 0, "max": 0.25, "step": 0.01, "group": "camera", "note": "street and square: his feet stay this share of the frame's height above its bottom while the rule lifts the camera (N3b)" },
  "bubble.dy": { "value": 2.25, "min": 1.5, "max": 3, "step": 0.05, "group": "bubble", "note": "the bubble's tail above his feet, units" },
  "bubble.ease": { "value": 0.25, "min": 0, "max": 1, "step": 0.05, "group": "bubble", "note": "the bubble's loops ease toward the knot over this, s" },
  "fx.pool": { "value": 6, "min": 1, "max": 12, "step": 1, "group": "fx", "note": "each effect's pool size; a full pool reuses its oldest" },
  "drift.wobble": { "value": 0.08, "min": 0, "max": 0.3, "step": 0.01, "group": "drifters", "note": "the drifters' seeded wobble amplitude, units" },
  "drift.1.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 1: its path's rate, 1 = the level table's period" },
  "drift.1.amp": { "value": 1.5, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 1: its path's amplitude, units" },
  "drift.2.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 2: its path's rate, 1 = the level table's period" },
  "drift.2.amp": { "value": 1, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 2: its path's amplitude, units" },
  "drift.3.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 3: its path's rate, 1 = the level table's period" },
  "drift.3.amp": { "value": 1.3, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 3: its path's amplitude, units" },
  "drift.4.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 4: its path's rate, 1 = the level table's period" },
  "drift.4.amp": { "value": 1, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 4: its path's amplitude, units" },
  "drift.5.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 5: its path's rate, 1 = the level table's period" },
  "drift.5.amp": { "value": 1.4, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 5: its path's amplitude, units" },
  "drift.6.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 6: its path's rate, 1 = the level table's period" },
  "drift.6.amp": { "value": 1.4, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "drifter 6: its path's amplitude, units" },
  "drift.s1.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "the street's drifter 1 (by bench 40.8): its path's rate, 1 = the level table's period" },
  "drift.s1.amp": { "value": 1, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "the street's drifter 1: its path's amplitude, units" },
  "drift.s2.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "the street's drifter 2 (at the top): its path's rate, 1 = the level table's period" },
  "drift.s2.amp": { "value": 1.2, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "the street's drifter 2: its path's amplitude, units" },
  "drift.q1.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "the square's drifter 1 (beside bench 10.6, bobbing): its speed, times its period's (N3b)" },
  "drift.q1.amp": { "value": 1, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "the square's drifter 1: its path's amplitude, units (N3b)" },
  "drift.q2.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "the square's drifter 2 (low over the open flags): its speed (N3b)" },
  "drift.q2.amp": { "value": 0.9, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "the square's drifter 2: its path's amplitude, units (N3b)" },
  "drift.q3.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "the square's drifter 3 (low before the tree bench): its speed (N3b)" },
  "drift.q3.amp": { "value": 0.8, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "the square's drifter 3: its path's amplitude, units (N3b)" },
  "drift.y1.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "N5: the yards' drifter 1 (the entry, after his yard door): its speed, times its period's" },
  "drift.y1.amp": { "value": 0.9, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "N5: the yards' drifter 1: its path's amplitude, units" },
  "drift.y2.speed": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "drifters", "note": "N5: the yards' drifter 2 (bobbing before the end gate): its speed" },
  "drift.y2.amp": { "value": 0.15, "min": 0, "max": 3, "step": 0.05, "group": "drifters", "note": "N5: the yards' drifter 2: its path's amplitude, units" },
  "roller.speed": { "value": 1.2, "min": 0.2, "max": 4, "step": 0.05, "group": "rollers", "note": "a roller's speed along its run, units/s (Kit.md round 3's reel) (N3b)" },
  "roller.pause": { "value": 0.4, "min": 0, "max": 2, "step": 0.05, "group": "rollers", "note": "a roller's pause at each stop before it turns, s (N3b [S4])" },
  "roller.reach": { "value": 0.3, "min": 0.1, "max": 0.8, "step": 0.01, "group": "rollers", "note": "a roller's touch radius, units: makeRoller's drawn r (N3b [S5])" },
  "roller.wobble": { "value": 0.1, "min": 0, "max": 0.5, "step": 0.01, "group": "rollers", "note": "the seeded shift of a roller's timing, s (N3b)" },
  "pigeon.scatter": { "value": 1, "min": 0.25, "max": 3, "step": 0.05, "group": "pigeons", "note": "each flock's scatter distance, times the kit's (levels.js flocks: 2.5, 2.6, 2.2) (N3b)" },
  "pigeon.delay": { "value": 1, "min": 0, "max": 3, "step": 0.05, "group": "pigeons", "note": "each bird's take-off delay, times the kit's (k 110 + r 90 ms) (N3b)" },
  "win.res": { "value": 512, "min": 128, "max": 1024, "step": 32, "group": "window", "note": "post's window view: the texture's height, px (one render on entering post) (N3b [S11])" },
  "win.fov": { "value": 32, "min": 10, "max": 70, "step": 1, "group": "window", "note": "post's window view: its camera's field of view, degrees (N3b)" },
  "win.x": { "value": 0.5, "min": 0, "max": 1, "step": 0.01, "group": "window", "note": "post's window view: where along the place it looks, a share of its width (N3b)" },
  "win.y": { "value": 3, "min": 0, "max": 10, "step": 0.1, "group": "window", "note": "post's window view: its camera's height, units (N3b)" },
  "win.lookY": { "value": 1.8, "min": 0, "max": 6, "step": 0.1, "group": "window", "note": "post's window view: the height it looks at, units (N3b)" },
  "win.dist": { "value": 20, "min": 4, "max": 60, "step": 0.5, "group": "window", "note": "post's window view: its camera's distance, units: small and far (N3b)" },
  "win.on": { "value": 1, "min": 0, "max": 1, "step": 1, "group": "window", "note": "post's window shows the next place (1) or stays as built (0: the before reading) (N3b [S11])" },
  "win.fold": { "value": 2.6, "min": 0, "max": 3.1, "step": 0.05, "group": "window", "note": "post's window: the shutters' columns turned back from shut, rad (N3b [S10]; used with win.stack 0)" },
  "win.stack": { "value": 1, "min": 0, "max": 1, "step": 1, "group": "window", "note": "post's window: 1 both shutter columns stacked to the window's left, clear of the shelf (N3c [S5]); 0 N3b's fold, the right column over the sun card" },
  "win.stackFold": { "value": 2.9, "min": 0, "max": 3.1, "step": 0.05, "group": "window", "note": "post's window with win.stack 1: the stacked columns turned back from shut, rad (pi: flat on the wall)" },
  "win.stackGap": { "value": 0.03, "min": 0, "max": 0.1, "step": 0.005, "group": "window", "note": "post's window with win.stack 1: the right column's lift in front of the left one, units" },
  "pigeonman.shift": { "value": 0.25, "min": 0, "max": 0.5, "step": 0.01, "group": "pigeons", "note": "Pigeon Man moved along his bench toward his bag, units, so the Lodger at its free end never meets him (N3b; 0: look8.js's placement)" },
  "pigeonman.watchAt": { "value": 0.15, "min": 0, "max": 2, "step": 0.05, "group": "pigeons", "note": "Pigeon Man's watch after his flock is scattered, s (Kit.md round 8: 150 ms) (N3b)" },
  "rain.w": { "value": 0.5, "min": 0.1, "max": 1.5, "step": 0.05, "group": "rain", "note": "a rain column's width, what touches him, units [S6]" },
  "rain.on": { "value": 1.4, "min": 0.2, "max": 5, "step": 0.1, "group": "rain", "note": "a column's full fall lasts this, s [S7]" },
  "rain.off": { "value": 1.8, "min": 0.2, "max": 5, "step": 0.1, "group": "rain", "note": "between falls, from the full fall's end to the next warning, s [S7]; its first rain.end is the fall ending (N3d)" },
  "rain.warn": { "value": 0.35, "min": 0, "max": 1.5, "step": 0.05, "group": "rain", "note": "thin lines before each full fall, harmless, s [S8]" },
  "rain.end": { "value": 0.9, "min": 0, "max": 2, "step": 0.05, "group": "rain", "note": "the fall ends over this, harmless: no new drops from the edge, the ones in the air fall on, its sound fades; taken from rain.off, so the cycle keeps its length, s (N3d [S4])" },
  "rain.wobble": { "value": 0.15, "min": 0, "max": 0.5, "step": 0.01, "group": "rain", "note": "each column's seeded drift in its timing, s (slow: the cycle never runs backwards)" },
  "rain.off.paired": { "value": 3.6, "min": 0.2, "max": 8, "step": 0.1, "group": "rain", "note": "a paired column's dry time (its rain.off), s: the other noise is free in its first part and back at its hold for pair.window before the warning; unpaired columns keep rain.off (N3e item 5, Daniel 2026-10-31)" },
  "pair.reach": { "value": 1.5, "min": 0, "max": 4, "step": 0.05, "group": "rain", "note": "a roller or drifter whose touch comes within this of a rain column's along x takes turns with it, units (N3e item 5 [S3]; read at a level's start)" },
  "pair.window": { "value": 1.5, "min": 0.2, "max": 4, "step": 0.05, "group": "rain", "note": "the clear window at a paired column before its warning, the other noise held out of reach, s (N3e item 5 [S5])" },
  "roller.idleSpin": { "value": 0.8, "min": 0, "max": 4, "step": 0.05, "group": "rollers", "note": "a held roller's slow turn in place, rad/s, so it reads as waiting (N3e item 5 [S6])" },
  "reflect.on": { "value": 1, "min": 0, "max": 1, "step": 1, "group": "reflection", "note": "his reflection in each place's glass shown (1) or left out (0: the before reading, level-heavy's off case), read as a scene starts (N3e)" },
  "clarity.room": { "value": 0.1, "min": 0, "max": 1, "step": 0.05, "group": "reflection", "note": "his reflection's clarity in his room's mirror: 0 all squiggle, 1 clear (Kit.md round 16 CLARITY.room) (N3e [S1])" },
  "clarity.street": { "value": 0.4, "min": 0, "max": 1, "step": 0.05, "group": "reflection", "note": "his reflection's clarity in the cobbler's window (CLARITY.street) (N3e [S1])" },
  "clarity.square": { "value": 0.7, "min": 0, "max": 1, "step": 0.05, "group": "reflection", "note": "his reflection's clarity in the hat stall's glass (CLARITY.square) (N3e [S1])" },
  "clarity.yards": { "value": 0.85, "min": 0, "max": 1, "step": 0.05, "group": "reflection", "note": "his reflection's clarity in the yards' shaving mirror (CLARITY.yards, Kit.md round 19) (N5c)" },
  "mirror.yards.dz": { "value": 0.1, "min": 0, "max": 0.3, "step": 0.01, "group": "reflection", "note": "N5c, Daniel at the stop (2026-11-02): the shaving mirror and its glass moved out from the scullery wall, units of z, read when the yards are built. Turned at ry -0.5, its left side reached z -2.468, 0.088 behind the window frame's face (-2.38; places.js line 114); 0.1 clears it by 0.012 and leaves the foot's back on the sill (-2.43 to -2.25)" },
  "clarity.landing": { "value": 1, "min": 0, "max": 1, "step": 0.05, "group": "reflection", "note": "his reflection's clarity in the half-landing mirror: clear, no squiggles (CLARITY.landing, Kit.md rounds 16 and 17) (N4)" },
  "mirror.lift": { "value": 0.1, "min": 0, "max": 0.5, "step": 0.01, "group": "reflection", "note": "his posture lifts this much, once, as he passes the half-landing mirror, of posture (N4 [S3])" },
  "mirror.liftT": { "value": 1, "min": 0.1, "max": 4, "step": 0.1, "group": "reflection", "note": "the mirror's lift eases in over this, s (N4 [S12])" },
  "stretch.stairsKeep": { "value": 28, "min": 23.05, "max": 32.35, "step": 0.05, "group": "stretch", "note": "the closing level keeps stretch 1 shown until he is past this x (Kit.md round 9: 28), units (N4)" },
  "end.camT": { "value": 1.2, "min": 0, "max": 4, "step": 0.1, "group": "ending", "note": "the camera eases from the side camera into the handover's frame (look9.js line 177) over this, s (N4)" },
  "rain.drops": { "value": 15, "min": 2, "max": 24, "step": 1, "group": "rain", "note": "drops in a column's full fall, through makeRain's own option (kit default 9) (N3b: Daniel's pick, hazards B)" },
  "noise.lineW": { "value": 2, "min": 0.5, "max": 4, "step": 0.05, "group": "noise", "note": "every noise kind's ink line, times the kit's width, set on its line materials at creation (N3b [S14]: Daniel's pick, hazards B)" },
  "bench.hint": { "value": 3, "min": 0.5, "max": 8, "step": 0.1, "group": "bench", "note": "a bench he hasn't sat on this level glows while he is this near it and his knot is above its floor, units (N3b [S17])" },
  "bench.fade": { "value": 0.5, "min": 0.05, "max": 2, "step": 0.05, "group": "bench", "note": "the bench glow fades in and out over this, s (N3b)" },
  "bench.glow": { "value": 0, "min": 0, "max": 2, "step": 1, "group": "bench", "note": "the bench glow: 0 the good things' pale shards; 1 a warm pool on the seat and the floor in front (N3d; N3b's flat seat light replaced); 2 both (N3b, read at a level's start; Daniel's pick, glow A)" },
  "bench.shardScale": { "value": 1, "min": 0.5, "max": 3, "step": 0.05, "group": "bench", "note": "the glow's shards' size and height, times N3b's (N3d, read at a level's start)" },
  "bench.shardAlpha": { "value": 1, "min": 0.5, "max": 6, "step": 0.1, "group": "bench", "note": "the glow's shards' alpha, times N3b's 0.05 to 0.13 (N3d, read at a level's start)" },
  "bench.warm": { "value": 0, "min": 0, "max": 1, "step": 0.05, "group": "bench", "note": "the glow's shards' colours toward LIGHT's warm end (goods.js LIGHT[0]), share (N3d, read at a level's start)" },
  "bench.poolA": { "value": 0.5, "min": 0, "max": 1, "step": 0.05, "group": "bench", "note": "the pool's opacity, additive, in the sun stripe's colour (N3d, read at a level's start)" },
  "bench.poolW": { "value": 1.6, "min": 0.5, "max": 3, "step": 0.05, "group": "bench", "note": "the pool's width along the seat, units (N3d, read at a level's start)" },
  "bench.poolD": { "value": 0.9, "min": 0.2, "max": 2, "step": 0.05, "group": "bench", "note": "the pool reaches this far onto the floor in front of the seat, units (N3d, read at a level's start)" },
  "bench.pulse": { "value": 2.4, "min": 0, "max": 6, "step": 0.1, "group": "bench", "note": "the glow pulses slowly over this, s; 0 the cat glow's breath (N3b) (N3d [S5]; Daniel's pick, D+F strong)" },
  "bench.pulseDepth": { "value": 0.4, "min": 0, "max": 1, "step": 0.05, "group": "bench", "note": "the pulse dips the glow by this share at its low (N3d)" },
  "bench.pocketA": { "value": 0.75, "min": 0, "max": 1, "step": 0.05, "group": "bench", "note": "the pocket of colour (Daniel's D): a soft patch on the seat and the floor in front in the kit's step-4 ochre, drawn after the grade, opacity; 0 none (N3d, read at a level's start; Daniel's pick, D+F strong)" },
  "bench.motes": { "value": 10, "min": 0, "max": 20, "step": 1, "group": "bench", "note": "motes rising from the seat (Daniel's F), in the kit's step-4 ochre, drawn after the grade, count; 0 none (N3d, read at a level's start; Daniel's pick, D+F strong)" },
  "bench.moteT": { "value": 2.6, "min": 0.5, "max": 8, "step": 0.1, "group": "bench", "note": "a mote rises over this, s (N3d)" },
  "bench.moteRise": { "value": 0.9, "min": 0.2, "max": 3, "step": 0.05, "group": "bench", "note": "a mote rises this high above the seat, units (N3d)" },
  "bench.moteSize": { "value": 0.13, "min": 0.02, "max": 0.4, "step": 0.01, "group": "bench", "note": "a mote's size, units (N3d; Daniel's pick, D+F strong)" },
  "bench.glance": { "value": 0.6, "min": 0, "max": 1.5, "step": 0.05, "group": "bench", "note": "his head turns this far toward a glowing bench as he passes it, once, rad (N3b)" },
  "bench.glanceT": { "value": 1, "min": 0.2, "max": 3, "step": 0.05, "group": "bench", "note": "the glance there and back takes this, s (N3b)" },
  "bench.glanceAt": { "value": 1, "min": 0, "max": 4, "step": 0.1, "group": "bench", "note": "he glances when he walks within this of the glowing bench, units (N3b)" },
  "town.look.behind": { "value": 2.5, "min": 0, "max": 6, "step": 0.1, "group": "town", "note": "the sign-painter looks up from when the Lodger is this far before him, units (look7.js line 103: f.x - 2.5)" },
  "town.look.ahead": { "value": 3, "min": 0, "max": 6, "step": 0.1, "group": "town", "note": "until the Lodger is this far past him, units (look7.js line 103: f.x + 3)" },
  "town.paint.turn": { "value": 0, "min": -1, "max": 1, "step": 0.05, "group": "town", "note": "the sign-painter faces his board's centre, turned this much more (+ toward the street), rad (N3d: look7.js line 53's ry -0.75 had his back to it)" },
  "town.paint.dx": { "value": -0.07, "min": -1, "max": 1, "step": 0.01, "group": "town", "note": "the sign-painter moved along the street from look7.js's spot, units; the board stays (N4 item 1: look7.js's spot stood him 0.22 into the street's paint table at x 37.4; with dz the least move clear of the table, its pots and the board through his loop and lookup)" },
  "town.paint.dz": { "value": 0.52, "min": -1, "max": 1, "step": 0.01, "group": "town", "note": "the sign-painter moved toward the street (+) from z -2.1, units: in front of his table, painting across it (N4 item 1)" },
  "stretch.margin": { "value": 0.25, "min": 0, "max": 4, "step": 0.05, "group": "stretch", "note": "a stretch behind him stays shown until it is this far out of the camera's view, units" },
  "stretch.depth": { "value": 2.2, "min": 0, "max": 6, "step": 0.1, "group": "stretch", "note": "the view's width is taken this far behind his line, at the back wall, units" },
  "sound.bus.master": { "value": 1, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "master bus level (the sound lists: 100 %); mute and a hidden tab take it to 0" },
  "sound.bus.music": { "value": 0.7, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "music bus level (the sound lists: 50 %; Daniel 2026-10-30 20:31 UTC: 70 %, the music on top)" },
  "sound.bus.effects": { "value": 0.85, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "effects bus level (the sound lists: 85 %)" },
  "sound.bus.noise": { "value": 0.35, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "noise bus level (the sound lists: 70 %; Daniel 2026-10-30 20:31 UTC: 35 %, the drifters were too loud)" },
  "sound.bus.ambience": { "value": 0.45, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "ambience bus level, the beds (the sound lists: 45 %)" },
  "sound.bus.voice": { "value": 0.7, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "voice bus level, his breath and sighs (the sound lists: 70 %)" },
  "sound.bus.interface": { "value": 0.6, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "interface bus level, the pause icons (the sound lists: 60 %)" },
  "sound.voices": { "value": 16, "min": 4, "max": 32, "step": 1, "group": "sound", "note": "one-shot voices in the pool; a full pool reuses the lowest priority's oldest (N2c's pick) (read at load)" },
  "sound.beat": { "value": 0.75, "min": 0.3, "max": 2, "step": 0.05, "group": "sound", "note": "one beat of the theme, s (the lists: 33,075 samples at 44.1 kHz)" },
  "sound.music.xfade": { "value": 1, "min": 0, "max": 4, "step": 0.5, "group": "sound", "note": "a music change crossfades over this many beats [S6]" },
  "sound.stem.fade": { "value": 1, "min": 0, "max": 4, "step": 0.5, "group": "sound", "note": "an nd-walk stem fades in over this many beats (the lists' stemFadeBeats)" },
  "sound.same": { "value": 0.04, "min": 0, "max": 0.2, "step": 0.01, "group": "sound", "note": "the same cue twice within this plays once, s (the lists' sameCueWithinSec)" },
  "sound.duck.db": { "value": 3, "min": 0, "max": 12, "step": 0.5, "group": "sound", "note": "the music ducks this many dB under the reads (the lists' duckOn and duckMusicDb)" },
  "sound.duck.down": { "value": 0.03, "min": 0, "max": 0.3, "step": 0.01, "group": "sound", "note": "the duck goes down over this, s" },
  "sound.duck.back": { "value": 0.3, "min": 0, "max": 2, "step": 0.05, "group": "sound", "note": "the duck comes back over this after the read ends, s" },
  "sound.heavy.at": { "value": 10, "min": 1, "max": 10, "step": 1, "group": "sound", "note": "the heavy-knot state is full at this many loops (the lists' heavyKnot.at)" },
  "sound.heavy.lowpass": { "value": 900, "min": 200, "max": 20000, "step": 50, "group": "sound", "note": "the music's low-pass at the heavy knot, Hz; from 20 kHz exponentially with his loops (the lists)" },
  "sound.heavy.gainDb": { "value": -3, "min": -24, "max": 0, "step": 0.5, "group": "sound", "note": "the music's gain at the heavy knot, dB, linear in dB with his loops (the lists)" },
  "sound.heavy.topDb": { "value": -6, "min": -24, "max": 0, "step": 0.5, "group": "sound", "note": "the top nd-walk stem a further this many dB down at the heavy knot (the lists)" },
  "sound.noise.max": { "value": 3, "min": 0, "max": 6, "step": 1, "group": "sound", "note": "noise loops at once, nearest first (the lists' noiseLoopsMax)" },
  "sound.drift.full": { "value": 1.25, "min": 0, "max": 8, "step": 0.25, "group": "sound", "note": "a drifter's loop is at full gain within this distance of his chest, units [S5] (Daniel 2026-10-30 20:31 UTC: 1.25, was 2)" },
  "sound.drift.silent": { "value": 8, "min": 1, "max": 20, "step": 0.25, "group": "sound", "note": "a drifter's loop is silent from this distance on, units [S5]" },
  "sound.rain.near": { "value": 3, "min": 0, "max": 10, "step": 0.25, "group": "sound", "note": "a rain column's loop is at full gain within this x distance of him, units (N3d [S1]: about two seconds' walk)" },
  "sound.rain.far": { "value": 8, "min": 1, "max": 20, "step": 0.25, "group": "sound", "note": "a rain column's loop is silent from this x distance on; nothing beyond it, the music never ducked, units (N3d [S2])" },
  "sound.rain.warnGain": { "value": 0.4, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "a column in its warning is heard at this share of its gain; dry, silent; in its end it fades to 0 over rain.end (N3d [S3])" },
  "sound.near.full": { "value": 3, "min": 0, "max": 20, "step": 0.25, "group": "sound", "note": "the place's near loop (the square's blackbird from the tree) is at full gain within this x distance of the good thing, units (N3b)" },
  "sound.near.silent": { "value": 16, "min": 1, "max": 40, "step": 0.5, "group": "sound", "note": "the near loop is silent from this x distance on, units (N3b)" },
  "sound.near.out": { "value": 0.6, "min": 0, "max": 3, "step": 0.1, "group": "sound", "note": "the near loop fades out over this when he looks up (the full song plays), s (N3b)" },
  "sound.pan.span": { "value": 8, "min": 1, "max": 20, "step": 0.5, "group": "sound", "note": "noise pans fully to one side at this x distance from him, units (N2c's pick)" },
  "sound.pan.max": { "value": 0.7, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "the widest pan, gentle (N2c's pick)" },
  "sound.hidden.back": { "value": 0.8, "min": 0, "max": 3, "step": 0.1, "group": "sound", "note": "a hidden tab is silent; on return the master comes back over this, s (the lists)" },
  "sound.mute.sec": { "value": 0.03, "min": 0, "max": 0.5, "step": 0.01, "group": "sound", "note": "mute and unmute ramp the master over this, s (N2c's pick)" },
  "sound.bed.fade": { "value": 1.5, "min": 0, "max": 4, "step": 0.1, "group": "sound", "note": "a bed fades in or out over this when the scene changes it, s (N2c's pick, the split's room fade)" },
  "sound.door.lowpass": { "value": 1500, "min": 200, "max": 20000, "step": 50, "group": "sound", "note": "the room's knock heard through his door: low-pass, Hz [S2]" },
  "sound.door.gainDb": { "value": -6, "min": -24, "max": 0, "step": 0.5, "group": "sound", "note": "the room's knock heard through his door: gain, dB [S2]" },
  "sound.sync.knock": { "value": 0, "min": 0, "max": 0.5, "step": 0.01, "group": "sound", "note": "ev-knock's first knock into its file, s (measured from the WAV master: 0.00; its knocks at 0.00, 0.32, 0.62); it lands on the figure's first rap" },
  "sound.sync.cup": { "value": 0, "min": 0, "max": 0.5, "step": 0.01, "group": "sound", "note": "ev-cup-step's saucer into its file, s (WAV master: 0.00, the cup at 0.14); it lands as the cup shows on the boards" },
  "sound.sync.door": { "value": 0.55, "min": 0, "max": 1.5, "step": 0.01, "group": "sound", "note": "ev-door-close's door meeting its frame into its file, s (WAV master: 0.551); it lands at the end of a.away" },
  "sound.sync.logo": { "value": 1.05, "min": 0, "max": 3, "step": 0.01, "group": "sound", "note": "nd-logo's pluck into its file, s (measured from the WAV master: 1.052; the piano note at 1.60); it lands on the intro's taut frame" },
  "sound.good.after": { "value": 0.4, "min": 0, "max": 2, "step": 0.05, "group": "sound", "note": "nd-good plays this long after the good thing's own sound, s (the levels' goodThings)" },
  "sound.sit.gainDb": { "value": -6, "min": -24, "max": 0, "step": 0.5, "group": "sound", "note": "the full knot: the music sinks this many dB (the levels' lgSit)" },
  "sound.sit.lowpass": { "value": 1500, "min": 200, "max": 20000, "step": 50, "group": "sound", "note": "the full knot: the music's low-pass, Hz (the levels' lgSit)" },
  "sound.sit.down": { "value": 1.2, "min": 0, "max": 4, "step": 0.1, "group": "sound", "note": "the full knot: the music sinks over this, s (the levels' lgSit)" },
  "sound.getup.up": { "value": 1.5, "min": 0, "max": 4, "step": 0.1, "group": "sound", "note": "the return: the sound comes back over this, s (the levels' lgGetup)" },
  "sound.grey.sec": { "value": 1.5, "min": 0, "max": 4, "step": 0.1, "group": "sound", "note": "the grey: music and bed dull and slow over this, s (the levels' lgGrey)" },
  "sound.grey.lowpass": { "value": 1200, "min": 200, "max": 20000, "step": 50, "group": "sound", "note": "the grey: the music's low-pass, Hz (the levels' lgGrey)" },
  "sound.grey.bedLowpass": { "value": 1500, "min": 200, "max": 20000, "step": 50, "group": "sound", "note": "the grey: the bed's low-pass, Hz (the levels' lgGrey)" },
  "sound.grey.gainDb": { "value": -4, "min": -24, "max": 0, "step": 0.5, "group": "sound", "note": "the grey: the music a further this many dB down (the levels' lgGrey)" },
  "sound.grey.rate": { "value": 0.94, "min": 0.5, "max": 1, "step": 0.01, "group": "sound", "note": "the grey: music and bed play at this rate (the levels' lgGrey)" },
  "sound.rest.bedDb": { "value": -3, "min": -24, "max": 0, "step": 0.5, "group": "sound", "note": "resting at a seat: the bed eases this many dB (the levels' bnRest)" },
  "sound.rest.open": { "value": 0.3, "min": 0, "max": 1, "step": 0.05, "group": "sound", "note": "resting: the heavy-knot low-pass opens this share of the way to 20 kHz (the levels' bnRest)" },
  "sound.rest.over": { "value": 1.5, "min": 0, "max": 4, "step": 0.1, "group": "sound", "note": "resting: the bed and the music ease over this, s (the levels' bnRest)" },
  "sound.pause.lowpass": { "value": 700, "min": 200, "max": 20000, "step": 50, "group": "sound", "note": "paused: everything but the interface low-passed to this, Hz (the levels' uiPause)" },
  "sound.pause.gainDb": { "value": -8, "min": -24, "max": 0, "step": 0.5, "group": "sound", "note": "paused: everything but the interface this many dB down (the levels' uiPause)" },
  "sound.pause.sec": { "value": 0.25, "min": 0, "max": 2, "step": 0.05, "group": "sound", "note": "paused: the muffle comes over this, s (the levels' uiPause)" },
  "sound.split.streetAt": { "value": 0.3, "min": 0, "max": 3, "step": 0.1, "group": "sound", "note": "the split: amb-street starts this long after ev-split, s (the levels' split)" },
  "sound.split.streetIn": { "value": 2, "min": 0, "max": 6, "step": 0.1, "group": "sound", "note": "the split: amb-street fades in over this, s (the levels' split)" },
  "sound.split.roomOut": { "value": 1.5, "min": 0, "max": 6, "step": 0.1, "group": "sound", "note": "the split: amb-room fades out over this, s (the levels' split)" },
  "front.intro.boil": { "value": 0.6, "min": 0, "max": 2, "step": 0.05, "group": "front", "note": "the intro: the tangle boils this long before the pull, s [S2]" },
  "front.intro.pull": { "value": 1, "min": 0.2, "max": 3, "step": 0.05, "group": "front", "note": "the intro: the tangle pulls straight into the cat over this, s [S2]" },
  "front.intro.hold": { "value": 1, "min": 0, "max": 3, "step": 0.05, "group": "front", "note": "the intro: the cat holds this long after the line goes taut, s [S2]" },
  "front.intro.fade": { "value": 0.4, "min": 0.05, "max": 2, "step": 0.05, "group": "front", "note": "the intro: the cat fades to the dark ground over this, then the title, s [S2]" },
  "front.intro.ease": { "value": 3, "min": 1, "max": 6, "step": 0.25, "group": "front", "note": "the pull's ease: in and out at this power (1 linear)" },
  "front.intro.twang": { "value": 2.5, "min": 0, "max": 8, "step": 0.25, "group": "front", "note": "the pluck: the taut line's wobble, px at 960 x 540" },
  "front.intro.twangT": { "value": 0.35, "min": 0.05, "max": 1.5, "step": 0.05, "group": "front", "note": "the pluck: the wobble dies away over about this, s" },
  "front.intro.points": { "value": 240, "min": 60, "max": 600, "step": 10, "group": "front", "note": "the thread's point count: the tangle and the cat resampled to it" },
  "front.tangle.loops": { "value": 6, "min": 1, "max": 10, "step": 1, "group": "front", "note": "the intro's tangle: the kit bubble's strokes at this many loops (makeBubble)" },
  "front.tangle.size": { "value": 0.55, "min": 0.2, "max": 1.5, "step": 0.05, "group": "front", "note": "the intro's tangle: its scale from bubble px at a 230 px cat" },
  "front.tangle.seed": { "value": 51, "min": 1, "max": 200, "step": 1, "group": "front", "note": "the intro's tangle: the kit bubble's seed (makeBubble's default 51)" },
  "front.cat.x": { "value": 480, "min": 0, "max": 960, "step": 1, "group": "front", "note": "the cat's pivot (bottom centre on its line), view px" },
  "front.cat.y": { "value": 395, "min": 0, "max": 540, "step": 1, "group": "front", "note": "the cat's line, view px from the top" },
  "front.cat.height": { "value": 230, "min": 60, "max": 480, "step": 5, "group": "front", "note": "the cat from its line to the ears, view px" },
  "front.cat.line": { "value": 4.5, "min": 1, "max": 10, "step": 0.25, "group": "front", "note": "the cat's ink line, px at 960 x 540 (scaled with the buffer as setLineScale scales the kit's lines)" },
  "front.cat.colour": { "value": 0, "min": 0, "max": 1, "step": 1, "group": "front", "note": "the cat's line: 0 the loading mark's paper line on the dark ground, 1 the kit's ink on a cut-paper card" },
  "front.cat.eye": { "value": 0, "min": 0, "max": 1, "step": 1, "group": "front", "note": "the cat's eye: 0 the traced almond, 1 a dot" },
  "front.cat.sitLine": { "value": 1, "min": 0, "max": 1, "step": 1, "group": "front", "note": "the line the cat sits on: 1 drawn, 0 none" },
  "front.cat.lineW": { "value": 1.5, "min": 0.5, "max": 4, "step": 0.1, "group": "front", "note": "the line the cat sits on: its length, times the cat's width" },
  "front.cat.marks": { "value": 0.6, "min": 0.2, "max": 1.5, "step": 0.05, "group": "front", "note": "the eye and stripes: their line, times the cat's line" },
  "front.cat.marksT": { "value": 0.4, "min": 0.05, "max": 1.5, "step": 0.05, "group": "front", "note": "the eye, stripes and the line under the cat come in over this after the taut frame, s" },
  "front.logo.x": { "value": 480, "min": 0, "max": 960, "step": 1, "group": "front", "note": "the logo's centre, view px" },
  "front.logo.y": { "value": 46, "min": 0, "max": 400, "step": 1, "group": "front", "note": "the top of the logo's capitals, view px" },
  "front.logo.h": { "value": 96, "min": 40, "max": 200, "step": 2, "group": "front", "note": "the logo's capital height, view px" },
  "front.logo.paper": { "value": 4, "min": 0, "max": 5, "step": 1, "group": "front", "note": "the letters' papers: 0 newsprint, 1 ochre and newsprint by turns, 2 the jumper's navy for Next and newsprint for Door; unravelled from the ink tangle: 3 Synthetic facets, 4 Analytic facets stepping up to Synthetic, 5 collage papers" },
  "front.logo.boil": { "value": 0.4, "min": 0, "max": 2, "step": 0.05, "group": "front", "note": "papers 3 to 5: the tangle boils this long before its thread runs out, s" },
  "front.logo.unravel": { "value": 2.2, "min": 0.3, "max": 6, "step": 0.05, "group": "front", "note": "papers 3 to 5: the thread runs through every letter in this, s (at a steady speed)" },
  "front.logo.paste": { "value": 0.3, "min": 0.05, "max": 1.5, "step": 0.05, "group": "front", "note": "papers 3 to 5: a letter's colour pastes in over this once its edge is closed, s" },
  "front.logo.bloom": { "value": 0.8, "min": 0.05, "max": 3, "step": 0.05, "group": "front", "note": "paper 4: the word steps up from the Analytic ramps to the Synthetic twins over this after the last paste, s" },
  "front.logo.knot": { "value": 0.4, "min": 0.1, "max": 1.2, "step": 0.05, "group": "front", "note": "papers 3 to 5: the tangle's size, times the logo's capital height over the kit bubble's" },
  "front.logo.loops": { "value": 4, "min": 1, "max": 10, "step": 1, "group": "front", "note": "papers 3 to 5: the tangle's strokes (the kit bubble's loops)" },
  "front.logo.line": { "value": 3, "min": 1, "max": 8, "step": 0.25, "group": "front", "note": "papers 3 to 5: the ink thread's width, px" },
  "front.logo.cuts": { "value": 3, "min": 0, "max": 5, "step": 1, "group": "front", "note": "papers 3 and 4: straight cuts through each letter, making its facets" },
  "front.logo.slip": { "value": 3, "min": 0, "max": 10, "step": 0.5, "group": "front", "note": "papers 3 to 5: each facet or paper pasted off the ink line by up to this, px" },
  "front.logo.rot": { "value": 0.05, "min": 0, "max": 0.3, "step": 0.01, "group": "front", "note": "each letter turned by up to this, rad (seeded)" },
  "front.logo.overlap": { "value": 6, "min": -10, "max": 20, "step": 1, "group": "front", "note": "the letters overlap by this, units of a 100-unit capital" },
  "front.logo.seed": { "value": 7, "min": 1, "max": 200, "step": 1, "group": "front", "note": "the logo's seed: the letters' turns, lifts, dashes and torn edges" },
  "front.keys.x": { "value": 40, "min": 0, "max": 900, "step": 1, "group": "front", "note": "the keycaps' block, left edge, view px" },
  "front.keys.y": { "value": 300, "min": 0, "max": 520, "step": 1, "group": "front", "note": "the keycaps' block, top edge, view px" },
  "front.keys.scale": { "value": 1, "min": 0.5, "max": 2, "step": 0.05, "group": "front", "note": "the keycaps' block scale (a key 44 x 42 px at 1)" },
  "front.keys.space": { "value": 0, "min": 0, "max": 1, "step": 1, "group": "front", "note": "the spacebar: 0 a blank wide key, 1 the open-box sign drawn on it [S3]" },
  "front.keys.walkT": { "value": 0.9, "min": 0.3, "max": 3, "step": 0.05, "group": "front", "note": "the walking figure's stride cycle, s" },
  "front.keys.jumpT": { "value": 1.3, "min": 0.4, "max": 4, "step": 0.05, "group": "front", "note": "the jumping figure's cycle, s" },
  "front.keys.figure": { "value": 1, "min": 0, "max": 2, "step": 1, "group": "front", "note": "the keycaps' figures: 0 a line figure, 1 the Lodger in cut paper, 2 the Lodger in Synthetic papers with the ink line off-register" },
  "front.start.size": { "value": 40, "min": 10, "max": 160, "step": 1, "group": "front", "note": "the start tap's play triangle, its height, view px (in the loading mark's place, the view's centre)" },
  "front.start.line": { "value": 3, "min": 1, "max": 10, "step": 0.25, "group": "front", "note": "the start tap's triangle, its line, view px (the loading mark's line at 0.75 opacity)" },
  "front.title.finishedStep": { "value": 4, "min": 0, "max": 4, "step": 0.25, "group": "front", "note": "the title's colour step after a finished game (0 before)" },
  "title.nd.dx": { "value": -1.4, "min": -3, "max": 2, "step": 0.05, "group": "front", "note": "N6: the finished title after the knock: Next Door's x from his picture's centre (scrapWall x0 to x1), units [S2]; Daniel at the N6 stop: to the left, between her mirror and trunk, all of her in view (x 6.4)" },
  "title.nd.z": { "value": 1.65, "min": 0.3, "max": 3, "step": 0.05, "group": "front", "note": "N6: the finished title after the knock: Next Door's z out from his picture's wall, units" },
  "title.nd.turn": { "value": -0.5, "min": -1.57, "max": 1.57, "step": 0.01, "group": "front", "note": "N6: the finished title after the knock: Next Door's turn, rad (0 faces the camera; less turns her toward him, on her left)" },
  "title.nd.face": { "value": 0, "min": 0, "max": 1, "step": 1, "group": "front", "note": "N6: the finished title after the knock: her face, 0 the kit's glad (the brief), 1 the smile over it (faces.js)" },
  "title.nd.breathe": { "value": 0, "min": 0, "max": 1, "step": 1, "group": "front", "note": "N6: the finished title after the knock: 0 her still pose held [S3], 1 the kit's breathing in it" },
  "front.play.x": { "value": 480, "min": 0, "max": 960, "step": 1, "group": "front", "note": "the title's play triangle, centre, view px" },
  "front.play.y": { "value": 470, "min": 0, "max": 540, "step": 1, "group": "front", "note": "the title's play triangle, centre, view px" },
  "front.play.size": { "value": 30, "min": 10, "max": 80, "step": 1, "group": "front", "note": "the title's play triangle, height px" },
  "front.help.x": { "value": 872, "min": 0, "max": 960, "step": 1, "group": "front", "note": "the helpline bubble's centre, view px [S4: bottom-right]" },
  "front.help.y": { "value": 466, "min": 0, "max": 540, "step": 1, "group": "front", "note": "the helpline bubble's centre, view px [S4: bottom-right]" },
  "front.help.w": { "value": 132, "min": 48, "max": 320, "step": 2, "group": "front", "note": "the helpline bubble's width, view px" },
  "front.help.angle": { "value": -0.5, "min": -1.6, "max": 1.6, "step": 0.05, "group": "front", "note": "the handset's turn in the bubble, rad" },
  "front.help.hand": { "value": 0.5, "min": 0.2, "max": 0.8, "step": 0.02, "group": "front", "note": "the handset's length, times the bubble's width" },
  "front.help.pulse": { "value": 0.06, "min": 0, "max": 0.2, "step": 0.01, "group": "front", "note": "the bubble's pulse: scale 1 to 1 + this [S5]; none under prefers-reduced-motion [S7]" },
  "front.help.period": { "value": 2.4, "min": 0.5, "max": 6, "step": 0.1, "group": "front", "note": "the bubble's pulse: one cycle, s [S5]" },
  "front.help.fadeT": { "value": 1.2, "min": 0, "max": 4, "step": 0.1, "group": "front", "note": "N4: the bubble's fade in on the Key Image after end.minHold, s [S16]" },
  "end.liftT": { "value": 1.2, "min": 0, "max": 4, "step": 0.1, "group": "ending", "note": "N4: the Key Image comes up from the handover's curtain over this, s [S17]" },
  "sound.knot.full": { "value": 2, "min": 0, "max": 8, "step": 0.25, "group": "sound", "note": "N4: the Knot's loops at full gain within this distance of him along the landing, units [S18]" },
  "sound.knot.silent": { "value": 9, "min": 1, "max": 20, "step": 0.25, "group": "sound", "note": "N4: the Knot's loops silent from this distance on, units [S18]" },
  "sound.landing.holdIn": { "value": 2, "min": 0, "max": 6, "step": 0.25, "group": "sound", "note": "N4: nd-landing's hold stem fades in (and out) over this as the Knot comes on, s (its list: 2 s)" },
  "sound.landing.toBare": { "value": 2, "min": 0, "max": 8, "step": 0.5, "group": "sound", "note": "N7b: onto the landing the walk at step 3 crossfades to nd-landing's base over this many beats [S1]" },
  "knot.chase": { "value": 1.5, "min": 0, "max": 3, "step": 0.05, "group": "crisis", "note": "N4b: the Knot chases him up the stairs at this along x, units/s (N4b's chase A 0.9; N4c: 1.5, Daniel 02:51 UTC)" },
  "knot.maxGap": { "value": 6, "min": 1, "max": 15, "step": 0.25, "group": "crisis", "note": "N4b: on the stairs the Knot is never further behind him than this (its front to his back), units; it closes to it at once [S4]" },
  "knot.hallRise": { "value": 0.2, "min": -1, "max": 4, "step": 0.05, "group": "crisis", "note": "N4b: the Knot rises in the hall at this x, by the street door, on his first move [S2]" },
  "knot.closeT": { "value": 1, "min": 0.1, "max": 4, "step": 0.1, "group": "crisis", "note": "N4b: onto the top landing the chasing Knot closes to knot.gap over this, s; then N4's rule (as knot.backT)" },
  "knot.yT": { "value": 0.4, "min": 0.05, "max": 2, "step": 0.05, "group": "crisis", "note": "N4b: the Knot's drawn height eases from the stairs' floor under it to the landing's over this, s (the chase handing over to N4's rule)" },
  "knot.pulse": { "value": 0.06, "min": 0, "max": 0.3, "step": 0.01, "group": "crisis", "note": "N4b: the Knot held at his threshold pulses by this share of its size" },
  "knot.pulseT": { "value": 1.1, "min": 0.3, "max": 4, "step": 0.1, "group": "crisis", "note": "N4b: one pulse of the Knot at his threshold, s" },
  "knot.stop": { "value": 0.5, "min": 0, "max": 3, "step": 0.05, "group": "crisis", "note": "N4b: the stay ending: the Knot's front stops this short of his door's centre and comes no further, units" },
  "door.capIn": { "value": 0.4, "min": 0.05, "max": 2, "step": 0.05, "group": "doors", "note": "N4b: the E keycap at a door fades in (and out) over this, s [S7]" },
  "door.capPlace": { "value": 0, "min": 0, "max": 1, "step": 1, "group": "doors", "note": "N4b: the E keycap's place: 0 A above the door's lintel, 1 B beside the door at his eye height (Daniel's pick: keycap A)" },
  "door.capA.y": { "value": 2.65, "min": 1.5, "max": 3.5, "step": 0.05, "group": "doors", "note": "N4b: placement A, the keycap's centre above the door's floor, units (the kit's lintel at 2.3 to 2.37)" },
  "door.capB.y": { "value": 1.5, "min": 0.8, "max": 2.5, "step": 0.05, "group": "doors", "note": "N4b: placement B, the keycap's centre above the door's floor, units (his eye height)" },
  "door.capB.dx": { "value": -0.95, "min": -2, "max": 2, "step": 0.05, "group": "doors", "note": "N4b: placement B, the keycap's offset along the door's own x, units (the frame's post at 0.6)" },
  "door.capSize": { "value": 0.42, "min": 0.15, "max": 1, "step": 0.01, "group": "doors", "note": "N4b: the E keycap's width, units (as the sit keycap, teach.capSize)" },
  "stay.wait": { "value": 8, "min": 1, "max": 20, "step": 0.5, "group": "ending", "note": "N4b: the stay ending's wait in his room before her knock, s [S8] (the sound list's stKnock.afterStSitRoomSec 8)" },
  "stay.doorT": { "value": 1.2, "min": 0.2, "max": 4, "step": 0.1, "group": "ending", "note": "N4b: his door swings open over this, s (the landing's and his room's)" },
  "stay.camX": { "value": 5.5, "min": 2, "max": 9, "step": 0.05, "group": "ending", "note": "N4b: his room's side camera x in the stay ending, so his bed and his door are both in the frame" },
  "stay.camBack": { "value": 2, "min": 0, "max": 8, "step": 0.1, "group": "ending", "note": "N4b: his room's side camera pulled back by this in the stay ending, units" },
  "stay.inT": { "value": 0.9, "min": 0.2, "max": 3, "step": 0.1, "group": "ending", "note": "N4b: he steps in through his open door over this before the cut to his room, s" },
  "roller.safe.z": { "value": -1.7, "min": -6, "max": 0, "step": 0.05, "group": "rollers", "note": "N4b: the square's safe roller's run behind the trough, z (N3b: -1.0; the lane's back edge before the houses at -2.1) [S1]" },
  "town.sweep.dy": { "value": 0.133, "min": 0, "max": 0.5, "step": 0.001, "group": "town", "note": "N5 item 6: the Sweeper's root lift, units: his planted (right) sole on the pavement under it through his loop (N4b's 0.351 held his broom's head on the kerb and his soles 0.218 above it); no street placement (kit-child's search: x 6 to 18, z -2 to 0.2, ry 0.6 to 1.2) put soles and broom both within 0.01 clear of the props, the kit's pose draws the broom 0.26 below his soles: the broom's worst reading (0.131 under the road) goes to Kit-Ask" },
  "town.sweep.dx": { "value": 0, "min": -8, "max": 8, "step": 0.05, "group": "town", "note": "N5 item 6: the Sweeper moved along x from his spot (spots.figures.sweeper 12.0), units; the search's one spot with soles and broom both within 0.01 (-5.25, z -1.1, turn +0.15) stood him inside a shop's board and under a ledge" },
  "town.sweep.dz": { "value": 0, "min": -1.5, "max": 1, "step": 0.05, "group": "town", "note": "N5 item 6: the Sweeper moved across the street from z -0.75, units" },
  "town.sweep.dry": { "value": 0, "min": -0.6, "max": 0.6, "step": 0.05, "group": "town", "note": "N5 item 6: the Sweeper's added turn from look7.js's 0.9, rad" },
  "town.baker.dx": { "value": -0.08, "min": -0.5, "max": 0.5, "step": 0.01, "group": "town", "note": "N4b: the Baker moved along x from his spot, units: the least move that clears his board of loaves and arm of the shop front's cut shape beside his door (they met in every frame of his loop; -0.04 still meets, -0.16 meets the window on his left)" },
  "yn.dy": { "value": 0.023, "min": 0, "max": 0.2, "step": 0.001, "group": "town", "note": "N5c: the Yard Neighbour's root lift, units: her planted clog within 0.01 of the flags as she wrings, looks and greets (0.017 to 0.028 into them at the kit's y 0 before; figures check)" },
  "town.baker.dy": { "value": 0.063, "min": 0, "max": 0.2, "step": 0.001, "group": "town", "note": "N4b: the Baker's root lift, units: his toe within 0.01 of his doorstep as he rocks on his heels (0.072 into it before)" },
  "town.paint.dy": { "value": 0.021, "min": 0, "max": 0.2, "step": 0.001, "group": "town", "note": "N4b: the sign-painter's root lift, units: his toe within 0.01 of the step as he paints (0.03 into it before)" },
  "face.smile": { "value": 1, "min": 0, "max": 1, "step": 1, "group": "pose", "note": "N4c: the smile for both: 1 the kit's soft eyes over its cup stroke (eyeSoft + mouthDown, cubist.js line 245: drawn as a cup, a smile on screen; Daniel at the stop: mouthSoft reads as a sad arch), 0 the kit's own faces (his up, her glad)" },
  "face.smileT": { "value": 0.6, "min": 0, "max": 3, "step": 0.1, "group": "pose", "note": "N4c: at the handover his smile comes this long after the cup is his, s (the lift at the cup's pass first) [S1]" },
  "panel.minHold": { "value": 3, "min": 0, "max": 10, "step": 0.5, "group": "panel", "note": "N4c: a key or a click on the room moves on from the final panel only after this, s (as end.minHold) [S7]" },
  "panel.dim": { "value": 0.55, "min": 0, "max": 1, "step": 0.05, "group": "panel", "note": "N4c: the room's brightness under the final panel (1 the Key Image as it is, 0 dark) [S4]" },
  "panel.inT": { "value": 0.6, "min": 0, "max": 3, "step": 0.1, "group": "panel", "note": "N4c: the panel's dim and link fade in over this from the Key Image, s" },
  "panel.w": { "value": 300, "min": 120, "max": 560, "step": 2, "group": "panel", "note": "N4c: the panel's bubble width, view px (960 x 540)" },
  "panel.y": { "value": 225, "min": 100, "max": 400, "step": 1, "group": "panel", "note": "N4c: the panel's bubble centre, view px from the top (centred on x)" },
  "panel.faceSize": { "value": 0.36, "min": 0.2, "max": 0.5, "step": 0.01, "group": "panel", "note": "N4c: each face's width in the bubble, times the bubble's width" },
  "panel.urlSize": { "value": 28, "min": 14, "max": 48, "step": 1, "group": "panel", "note": "N4c: the address's text size, px at a 1280-wide canvas, scaling with it (21 at 960) [S5]" },
  "panel.stripPad": { "value": 14, "min": 4, "max": 40, "step": 1, "group": "panel", "note": "N4c: the address strip's paper round its text, px at 1280 wide" },
  "panel.gap": { "value": 6, "min": -40, "max": 60, "step": 1, "group": "panel", "note": "N4c: the address strip's top below the bubble's box, view px" },
  "panel.hoverLift": { "value": 4, "min": 0, "max": 16, "step": 1, "group": "panel", "note": "N4c: the link lifts this far on hover and on keyboard focus, view px [S6]" }
}
