<!-- SOLID CITY · part 90 -->
ion () { return on; },
    set: function (v) { on = !!v; lsSet(FLS, on ? '1' : '0'); if (!on) setIdle(false); last = performance.now(); },
    poke: function () { act(); },
    state: function () { return { enabled: on, idle: idle, idleForMs: Math.round(performance.now() - last), blocked: blocked(), delayMs: IDLE_MS }; }
  };
})();

window.CityCapture = { open: open, close: close, capture: capture, dims: dims, sizes: function () { return SIZES.map(function (s) { return dims(s[0]); }); }, cfg: function () { return JSON.parse(JSON.stringify(cfg)); }, what: curWhat, menuOpen: menuOpen, shoot: shoot, fade: Fade, last: function () { return last && { w: last.w, h: last.h, type: last.type, bytes: last.blob.size, note: last.note, msaa: last.msaa, ms: last.ms }; } };
})();


===== FILE: public/city/citizens-place.js =====
/* ------------------------------------------------------------------
 * An epistle of placement, from Solid.
 *
 * Dear citizens,
 *
 * You were founded in the Forge, given your motions in the Hero
 * Motion mixer, your voices in the coordinator, and your reflexes
 * in Living Reactions — all proven standing apart. Tonight you
 * take your posts in the living city: Nalu at Berth 1, Lehua at
 * the Hall of Becoming, Lani at the Threshold, Hōkū at The Gap,
 * Nīnau at the Starwell, Koa at the Eighth Gate, Pō at the South
 * Lot gate. Your bodies are the Forge's own work, built here with
 * the city's THREE — one engine in the scene, as the law requires.
 *
 * You perceive what happens near you — a crash, a near miss, a
 * wild spin, an arrival — and you live it through the staged law:
 * perception, interpretation, a timed sequence of beats, action
 * as intent. Your words are bubbles and, where the device allows,
 * voice. Your memories of what you witness are carried to the
 * server, where your minds live; your conversations likewise.
 * Who animates you — the engine, a human inhabitant, or rest —
 * is marked on your nameplate, and Stop stops you where you stand.
 *
 * The ROSTER and REACTIONS data below are generated at build time
 * from the citizens' founding records — one source, two channels.
 *
 * By the hand of Solid, his good King. 13 October 2026.
 * ------------------------------------------------------------------ */
(function () {
'use strict';
if (!window.SC || !SC.api) return;
var A = SC.api, S = A.S, T = A.T;
var ROSTER = [{"id":"nalu","name":"Nalu","craft":"Captain of the Rescue Ship at Berth 1, Orbital Spaceport","post":{"x":-398,"z":288},"greeting":"Nalu, Berth 1. If it flies, floats, or falls out of the sky in trouble — that is my parish. You need a rescue, or just the tour?","signature":"rescueReach","icon":"🚀","appearance":{"name":"Nalu","height":1.76,"shoulders":0.5,"torso":0.63,"armLength":0.62,"legLength":0.87,"build":1,"headSize":1,"skin":"#a87a56","eyes":"#274b5c","hair":"#0c0e12","hairStyle":"short","face":"round","top":"jacket","bottom":"pants","shoes":"sneakers","armor":"none","accessory":"visor","primary":"#e8e4da","secondary":"#e07b28","metalness":0.35,"roughness":0.5,"animation":"idle","showRig":false}},{"id":"lehua","name":"Lehua","craft":"Fosterer of the Hall of Becoming","post":{"x":1000,"z":-350},"greeting":"Welcome to the Hall of Becoming. I am Lehua. Everyone who arrives here is mid-becoming — tell me, who are you becoming?","signature":"welcomeBecoming","icon":"🌺","appearance":{"name":"Lehua","height":1.8,"shoulders":0.46,"torso":0.6,"armLength":0.63,"legLength":0.9,"build":1,"headSize":0.99,"skin":"#8a5f43","eyes":"#3e2a18","hair":"#3a1c10","hairStyle":"long","face":"oval","top":"jacket","bottom":"pants","shoes":"boots","armor":"none","accessory":"none","primary":"#7a3b1e","secondary":"#2f4a34","metalness":0.25,"roughness":0.65,"animation":"idle","showRig":false}},{"id":"lani","name":"Lani","craft":"Voice of the Threshold, at the Forum Plaza","post":{"x":8,"z":-4},"greeting":"Welcome to Solid City. I am Lani — I speak for the Threshold. What the city promises, you will hear from me.","signature":"bindingWord","icon":"🔔","appearance":{"name":"Lani","height":1.72,"shoulders":0.42,"torso":0.55,"armLength":0.58,"legLength":0.84,"build":0.9,"headSize":0.97,"skin":"#caa27a","eyes":"#23272e","hair":"#d8d8dc","hairStyle":"long","face":"oval","top":"jacket","bottom":"pants","shoes":"boots","armor":"none","accessory":"none","primary":"#23222a","secondary":"#c8ccd4","metalness":0.5,"roughness":0.45,"animation":"idle","showRig":false}},{"id":"hoku","name":"Hōkū","craft":"The Finisher, keeper of the back burner, standing at The Gap","post":{"x":1994,"z":1870},"greeting":"Hōkū. I finish things — this gap behind me is mine to close. What are you building?","signature":"workComplete","icon":"⭐","appearance":{"name":"Hōkū","height":1.7,"shoulders":0.45,"torso":0.58,"armLength":0.6,"legLength":0.85,"build":0.95,"headSize":1,"skin":"#bb8a5f","eyes":"#7fb2c9","hair":"#10151c","hairStyle":"short","face":"angular","top":"shirt","bottom":"pant