{"version":3,"sources":["machine-icons.mjs"],"sourcesContent":["// MACHINE ICONS ON THE 20 x 20 MACHINE LATTICE (the owner, Oct 4: \"re-do all machine texture under the attached machine\n// lattice\"; picked from ten designs each on the Machine Lattice 20 review page, artifact 1GWypPPgxCLjFcKj3BiL1J, db\n// picks/machine-lattice20-<key>). It replaces the Oct 3 lattice of 8 x 8 cells split into four triangles each.\n//\n// A machine's icon is a KUBE whose three visible faces are each a plain grid of square pixels: 20 x 20 on a kube face,\n// 20 x 10 on a SLAB's side (the Solar Panel, half a cell tall). Each pixel takes a palette key. Faces are shaded as the\n// kube icons are (top 1, left 0.84, right 0.68); lights (G g W R N A, and P / Q when lit) keep their full strength.\n//\n// The owner's lessons (Oct 3) carried over: a face reads as clean masses of whole pixels, and NOTHING may show between\n// pixels. So the icon is not drawn as one transformed rectangle per pixel (whose anti-aliased edges let the background\n// through as a ghost grid): every canvas pixel inside the kube is mapped back to the one face pixel under its centre.\n// Only the kube's outline is smoothed.\n//\n// Face orientation, the same as before (app.js drawMachineLattice projects the corners with the kube icons' camera):\n//   top   : (0,0) at the left corner, x runs to the back corner, y to the front corner\n//   left  : (0,0) top-left as seen, x runs to the near edge, y down        (+z, the \"front\")\n//   right : (0,0) at the near edge, x runs away to the right corner, y down (+x, the \"side\")\n//\n// Pure 2D: no THREE here, so tests/machine-icons.test.mjs runs it.\n\nimport { baseItemOf, itemHexOf } from './item-ids.mjs';   // a material variant (\"Toolbench (Iron)\") is its base machine, in its own colour\n\n// ---- colours ----\nconst hx = (h) => [parseInt(h.slice(1, 3), 16), parseInt(h.slice(3, 5), 16), parseInt(h.slice(5, 7), 16)];\nconst toHex = (c) => '#' + c.map((v) => Math.max(0, Math.min(255, Math.round(v))).toString(16).padStart(2, '0')).join('');\nconst shade = (h, k) => toHex(hx(h).map((v) => v * k));\nconst mix = (a, b, t) => { const A = hx(a), B = hx(b); return toHex(A.map((v, i) => v + (B[i] - v) * t)); };\n// The machine palette (machine-models.mjs palette()), plus E (deeper body), H (pale body), m (dark steel) and c (copper\n// shadow), so a face can bevel with whole pixels instead of per-pixel tones.\n// `extra` adds a design's own keys (the vending machine's glass and goods), kept by every material variant of it.\nfunction palette(hex, glow, extra) {\n  return { B: hex, D: shade(hex, 0.6), E: shade(hex, 0.4), L: mix(hex, '#ffffff', 0.35), H: mix(hex, '#ffffff', 0.62),\n    M: '#8d939b', m: '#5c6168', S: '#c9cfd6', K: '#2a2d33', O: '#2a2f36', C: '#b87333', c: '#7a4a22', Y: '#e8c13a',\n    G: glow, g: mix(glow, '#ffffff', 0.45), W: mix(glow, '#dff4ff', 0.6), R: '#ff4b3a', N: '#5dff8a', A: '#ffb02e', ...(extra || {}) };\n}\nconst LIT = new Set(['G', 'g', 'W', 'R', 'N', 'A']);   // lights: full strength on every face. Y is hazard PAINT, shaded.\n// A MACHINE THAT IS DARK (a vending machine that is not open: the owner, \"its screen and lamps glow only while active\")\n// shows its lamps (G, g) as the off light and lets its lit goods take the light of the world like paint.\nconst LAMPS = new Set(['G', 'g']);\nconst SHADE = { t: 1, l: 0.84, r: 0.68 };              // the kube icons' order: top brightest, then left, then right\n// The power light (P) and a battery's status light (Q), as machine-models.mjs LIGHTS: until cables exist (Oct 1) no\n// machine is powered, so P shows off; Q is green charging, amber powering, dark idle.\nexport const MACHINE_LIGHTS = Object.freeze({ on: '#5dff8a', off: '#3a3f46', charging: '#5dff8a', powering: '#ffb02e' });\nconst IDLE = Object.freeze({ powered: false, mode: 'idle' });\n\n// ---- a face: w x h pixels of palette keys ----\nexport const LATTICE = 20;\n// `st` is what the machine is doing, for a design that shows it (storage-machines.mjs paintStateOf): a crate's gauge\n// colour (`gaugeColour`, its fill being `f`), whether a vending machine is dark.\nexport function face(f = 0, h = LATTICE, st = null) {\n  const w = LATTICE, k = new Array(w * h).fill('B');\n  const set = (x, y, key) => { if (x >= 0 && y >= 0 && x < w && y < h) k[y * w + x] = key; };\n  const F = { w, h, f, k, st: st || {},\n    fill(key) { k.fill(key); return F; },\n    rect(x, y, rw, rh, key) { for (let j = y; j < y + rh; j++) for (let i = x; i < x + rw; i++) set(i, j, key); return F; },\n    hl(x0, x1, y, key) { for (let x = x0; x <= x1; x++) set(x, y, key); return F; },\n    vl(x, y0, y1, key) { for (let y = y0; y <= y1; y++) set(x, y, key); return F; },\n    frame(x, y, rw, rh, key) { return F.hl(x, x + rw - 1, y, key).hl(x, x + rw - 1, y + rh - 1, key).vl(x, y, y + rh - 1, key).vl(x + rw - 1, y, y + rh - 1, key); },\n    set(x, y, key) { set(x, y, key); return F; } };\n  return F;\n}\nconst lvl = (F, n) => Math.max(0, Math.min(n, Math.round((F.f || 0) * n)));\nconst P2 = (F, x, y) => F.rect(x, y, 2, 2, 'P');                         // a 2 x 2 power light\nconst edge = (F, key = 'D') => F.frame(0, 0, F.w, F.h, key);\n\n// ---- the owner's picks (Oct 4): [top, left (front), right (side)] ----\nconst benchSide = (F) => F.fill('B').rect(0, 0, 20, 3, 'L').hl(0, 19, 3, 'D').rect(0, 4, 4, 16, 'D').rect(16, 4, 4, 16, 'D').vl(3, 4, 19, 'E').vl(19, 4, 19, 'E')\n  .rect(4, 12, 12, 2, 'M').hl(4, 15, 12, 'S').hl(4, 15, 14, 'D');\nconst heatWindow = (F) => edge(F.fill('B')).rect(3, 3, 14, 14, 'M').hl(3, 16, 3, 'S').vl(3, 3, 16, 'S').hl(3, 16, 16, 'm').vl(16, 3, 16, 'm')\n  .rect(5, 5, 10, 10, 'K').rect(5, 10, 10, 5, 'G').hl(5, 14, 10, 'g');\nconst cellStack = (F) => { edge(F.fill('B')); for (const y of [2, 5, 8, 11, 14]) F.rect(2, y, 16, 2, 'W'); return F.rect(1, 17, 18, 2, 'E'); };\nconst beaker = (F, x, top, key) => F.rect(x, 5, 5, 11, 'K').hl(x, x + 4, 5, 'S').rect(x + 1, top, 3, 15 - top, key);\nconst qubits = (F, mask) => { F.fill('K'); for (let i = 0; i < 4; i++) for (let j = 0; j < 4; j++) { const on = (mask >> (j * 4 + i)) & 1, x = 1 + 5 * i, y = 1 + 5 * j; F.rect(x, y, 3, 3, on ? 'G' : 'D'); if (on) F.set(x + 1, y + 1, 'g'); } return F; };\nconst batLevel = (F) => { edge(F.fill('B')).rect(0, 0, 3, 20, 'O').rect(17, 0, 3, 20, 'O'); const n = lvl(F, 10) * 2; if (n) F.rect(0, 20 - n, 3, n, 'G').rect(17, 20 - n, 3, n, 'G');\n  return F.rect(4, 7, 12, 6, 'K').rect(5, 8, 10, 4, 'O').rect(5, 8, lvl(F, 5) * 2, 4, 'G'); };\nconst conduits = (F) => F.fill('D').rect(0, 0, 20, 2, 'M').rect(0, 18, 20, 2, 'M').rect(3, 2, 2, 16, 'G').rect(9, 2, 2, 16, 'G').rect(15, 2, 2, 16, 'G');\nconst slabSide = (F) => F.fill('M').hl(0, 19, 0, 'S').hl(0, 19, F.h - 1, 'D');\n\n// ---- THE STORAGE MACHINES (the owner's picks, Oct 11, on the machines proposal page: the crate's \"Drawer cabinet\" and the\n// kiosk's \"Vending unit\", DESIGNS.c.drawers and DESIGNS.k.vending there) -------------------------------------------------\n// Drawn CALL FOR CALL as the page drew them: its helpers R_, FR, PX and goods, as page.r / page.fr / page.px / page.goods\n// on a 20 x 20 grid of keys in the same palette, then laid onto the face. Its front and side run as this file's left and\n// right do (from the left corner and from the near edge, down), so they copy straight across. Its TOP was drawn from the\n// BACK corner (x towards the right corner, y towards the left); this file's starts at the LEFT corner (x to the back, y\n// to the front), so the top is turned as it is copied: this face's (x, y) is the page's (y, 19 - x) — the page's row j\n// of the top is this face's column 19 - j, which is the same picture seen from the same place.\n// Two keys of the page are renamed for this palette, where they already meant something else: its plain glass blue `W`\n// is `b` here (`W` is a lit glow-glass), and its goods' violet `V` and dark glass `w` are added (VENDING_EXTRA).\nfunction page() {\n  const g = []; for (let j = 0; j < LATTICE; j++) g.push(new Array(LATTICE).fill('B'));\n  const r = (x, y, w, h, k) => { for (let j = y; j < y + h; j++) for (let i = x; i < x + w; i++) if (i >= 0 && i < LATTICE && j >= 0 && j < LATTICE) g[j][i] = k; };\n  return { g, r,\n    fr: (k, t = 1, x = 0, y = 0, w = LATTICE, h = LATTICE) => { r(x, y, w, t, k); r(x, y + h - t, w, t, k); r(x, y, t, h, k); r(x + w - t, y, t, h, k); },\n    px: (pts, k) => { for (const [x, y] of pts) r(x, y, 1, 1, k); },\n    goods: (x, y, w, h) => { const cs = ['A', 'N', 'C', 'b', 'S', 'R', 'Y', 'V']; let n = 0; for (let j = y; j < y + h; j += 3) for (let i = x; i < x + w; i += 3) r(i, j, 2, 2, cs[(n++ * 5 + j) % cs.length]); } };\n}\nconst onFace = (F, p, top) => { for (let y = 0; y < F.h; y++) for (let x = 0; x < F.w; x++) F.set(x, y, top ? p.g[19 - x][y] : p.g[y][x]); return F; };\n// THE CRATE'S FILL GAUGE (the owner: \"a strip of lit pixels on the FRONT face fills with the crate's contents, green, then\n// amber near full, then red when full\"): the front's bottom edge, under the third drawer, eighteen pixels between the\n// frame's corners, lit from the left as far as the crate is full (storage-machines.mjs crateGauge: nine steps of two),\n// in the gauge's colour; the rest is the off light. In a backpack a crate is empty, and its strip dark.\nconst crateGaugeStrip = (F) => { const lit = Math.round(Math.max(0, Math.min(1, F.f || 0)) * 18), c = F.st.gaugeColour || 'N';\n  for (let x = 1; x <= 18; x++) F.set(x, 19, x <= lit ? c : 'O'); return F; };\nconst VENDING_EXTRA = { b: '#6f9fc0', w: '#3e5f78', V: '#7a5bd6' };   // the page's glass blue, its dark glass and its violet goods\n\n// ---- THE CARGO CRATE, TWO KUBES WIDE (the owner, Oct 21: \"The machine's look spans both cells (left half / right half\n// faces), recoloured per material\") ------------------------------------------------------------------------------------\n// In the world each half is a kube wearing its half of one picture: the front three long drawers across both halves, their\n// pulls meeting at the seam, the gauge one strip of 38 pixels along the foot, lit from the left (the base) into the right\n// (the side); the top a frame round slats running the crate's length; each end the crate's old side. A half's tiles are\n// drawn here in its CANONICAL form, outer edge at x 0 and the seam at x 19, and turned to where the world's face mapping\n// puts the seam (storage-machines.mjs paintStateOf: frontSeam 'a' u 0 / 'b' u 1; topSeam 0 u 1, 1 u 0, 2 v 1, 3 v 0), as\n// tile pixels (x along u, y along v), so they are never turned again as an icon's top is (onFace).\nconst WIDE_STRIP = 38;\n// ONE DRAWER'S FACE (the owner's pick, Oct 22, Storage Looks 'drawers'), w x h face pixels with x 0 at its left as seen: a\n// dark border, a light label patch at the left, a light steel handle in the middle (eight pixels long on the world's\n// 38-wide front, four on an icon's 18). The board texture of the world's drawer fronts (cabinetDoorCanvas).\nexport const CRATE_DRAWER_W = 38;\nexport function crateDrawerKey(x, y, w = CRATE_DRAWER_W, h = 6) {\n  if (x === 0 || y === 0 || x === w - 1 || y === h - 1) return 'D';\n  const hl = w >= 30 ? 4 : 2, my = Math.floor(h / 2);\n  if (y === my && x >= w / 2 - hl && x <= w / 2 + hl - 1) return 'S';\n  if (w >= 30 ? (x >= 3 && x <= 8 && y >= 2 && y <= h - 3) : (x >= 2 && x <= 4 && y >= 2 && y <= h - 3)) return 'L';\n  return 'B';\n}\nfunction wideFrontKey(x, y, half, fill, colour) {\n  if (y === 19) { if (x === 0) return 'D'; const lit = Math.round(Math.max(0, Math.min(1, fill || 0)) * WIDE_STRIP), n = half === 'R' ? Math.max(0, lit - 19) : Math.min(19, lit);\n    return (half === 'R' ? 20 - x : x) <= n ? (colour || 'N') : 'O'; }\n  if (x === 0 || y === 0) return 'D';\n  // THE THREE DRAWERS (the owner's pick, Oct 22: 'drawers') are real fronts standing on this tile (system-view.js,\n  // storage-motion.mjs drawerRects: rows 1..18, x 1..38 of the 40), so it is the Framed body under them: and the world draws\n  // the front tile on the crate's BACK as well (machineAtlasGLSL: ±tB alike), which must not wear painted drawers (live QA,\n  // Oct 22). Seen there: the dark border round the whole two-kube face, the plain body, the gauge strip along the foot.\n  return 'B';\n}\n// A WIDE CRATE'S END (its half's side tile, each half's outer end; the seam's face is never seen): the Framed body, a dark\n// border round the face and the plain base inside, as the Cabinet's and the Locker's bodies (live QA, Oct 22: the ends\n// still wore the Oct 11 crate's three light skirt stripes).\nconst crateEnd = (F) => { for (let y = 0; y < F.h; y++) for (let x = 0; x < F.w; x++) F.set(x, y, frame1(x, y, LATTICE, LATTICE) ? 'D' : 'B'); return F; };\nconst wideTopKey = (x, y) => (x === 0 || y === 0 || y === 19 ? 'D' : (y === 4 || y === 8 || y === 11 || y === 15) ? 'L' : 'B');\n// A canonical half's key at tile pixel (x, y), its seam moved to `seam` (front: 'a' | 'b'; top: 0..3).\nfunction seamed(keyAt, x, y, seam) {\n  if (seam === 'b' || seam === 0) return keyAt(x, y);\n  if (seam === 'a' || seam === 1) return keyAt(19 - x, y);\n  if (seam === 2) return keyAt(y, x);\n  return keyAt(19 - y, x);\n}\nconst wideFront = (F) => { const st = F.st; for (let y = 0; y < F.h; y++) for (let x = 0; x < F.w; x++) F.set(x, y, seamed((u, v) => wideFrontKey(u, v, st.half, F.f, st.gaugeColour), x, y, st.frontSeam)); return F; };\nconst wideTop = (F) => { for (let y = 0; y < F.h; y++) for (let x = 0; x < F.w; x++) F.set(x, y, seamed(wideTopKey, x, y, F.st.topSeam)); return F; };\n\n// ---- THE LOCKER (the owner, Oct 21: \"1 kube wide × 2 high … A locker look (two cells: lower and upper faces; tall narrow\n// door with vents/handle, flat, recolourable)\"); then TWIN TALL DOORS (the owner's pick, Oct 22, Storage Looks 'twin') -----\n// Its front is two narrow doors, each 10 face pixels wide and the Locker's full height (H: 40 in the world, rows 0..19 the\n// upper cell and 20..39 the lower; 20 on the icon, the whole locker in one kube), meeting at the seam: each a dark border,\n// three vent slots near its top (black rows y 4, 6, 8, x 3..6) and a steel pull by the seam at mid height (x 7, one pixel\n// wide and H/5 long: 1 x 8 in the world), the right door the left mirrored. Its body, Framed as the Cabinet's: one dark\n// border round each whole face (the sides 20 x 40), the plain base inside. Every key is the body's (B D) or steel and shadow\n// (M K), so a locker of any wood or metal wears its own colour. In the world `st.part` says which half a tile is ('U' the\n// upper, 'B' the base) and, with `st.world` (a placed Locker standing with its upper half), the front tile is the body: the\n// doors stand on it as real boards (lockerDoorKey, cabinetDoorCanvas), and the black inside shows only while they are open.\nexport const LOCKER_DOOR_W = 10;\nexport function lockerDoorKey(x, y, H = 40) {   // one door, x 0 its hinge, x 9 the seam\n  if (frame1(x, y, LOCKER_DOOR_W, H)) return 'D';\n  if ((y === 4 || y === 6 || y === 8) && x >= 3 && x <= 6) return 'K';\n  const pl = H / 10;\n  if (x === 7 && y >= H / 2 - pl && y <= H / 2 + pl - 1) return 'M';\n  return 'B';\n}\nconst lockerTwinKey = (x, y, H) => lockerDoorKey(x < LOCKER_DOOR_W ? x : LATTICE - 1 - x, y, H);\nconst lockerBodyKey = (x, y, H) => (frame1(x, y, LATTICE, H) ? 'D' : 'B');\nconst lockerFace = (keyAt) => (F) => { const part = F.st && F.st.part, y0 = part === 'U' ? 0 : 20;\n  for (let y = 0; y < F.h; y++) for (let x = 0; x < F.w; x++) F.set(x, y, part ? keyAt(x, y + y0, 40) : keyAt(x, y, LATTICE)); return F; };\nconst lockerDef = (pick, upper) => ({ pick, pal: palette('#6E4A30', '#ffd27a'), ...(upper ? { upper: true } : {}), faces: [cabinetBody, lockerFace(lockerTwinKey), lockerFace(lockerBodyKey)], bottom: cabinetBody,\n  worldFront: lockerFace(lockerBodyKey), boards: { w: LOCKER_DOOR_W, h: 40, key: (x, y) => lockerDoorKey(x, y, 40) } });\n\nexport const MACHINE_ICONS = {\n  // 1, Cutting grid (the Oct 3 pick, redrawn): a checkered mat on top; a lip, two legs and a steel shelf on the sides.\n  'Toolbench': { pick: 'Cutting grid', pal: palette('#8E8E8E', '#ffd27a'), faces: [\n    (F) => { F.fill('D').rect(1, 1, 18, 18, 'B'); for (let i = 0; i < 4; i++) for (let j = 0; j < 4; j++) if ((i + j) % 2 === 0) F.rect(2 + 4 * i, 2 + 4 * j, 4, 4, 'L'); return F; },\n    benchSide, benchSide] },\n  // 6, Heat window: a framed window of melt on each side, its surface a bright line; a slotted vent glowing on top.\n  'Induction Smelter': { pick: 'Heat window', pal: palette('#A87F6B', '#FF6A1F'), power: true, faces: [\n    (F) => { edge(F.fill('B')); for (const y of [3, 7, 11, 15]) F.rect(3, y, 14, 2, 'K').hl(5, 14, y + 1, 'G'); return F; },\n    (F) => heatWindow(F).set(7, 12, 'g').set(12, 13, 'g').set(10, 11, 'g'),\n    (F) => P2(heatWindow(F).set(8, 13, 'g').set(12, 11, 'g'), 17, 1)] },\n  // 1, Cell stack (the Oct 3 pick, redrawn): five glass cells on each side; a deep frame round a window on top.\n  'Electrolyzer': { pick: 'Cell stack', pal: palette('#6F8FA6', '#7FD8FF'), power: true, faces: [\n    (F) => F.fill('B').rect(2, 2, 16, 16, 'D').rect(5, 5, 10, 10, 'W'),\n    cellStack,\n    (F) => P2(cellStack(F), 16, 17)] },\n  // 3, Beaker shelf: green, amber and blue beakers on a shelf; a coloured rack on top; the power light on the side.\n  'Chemical Synthesizer': { pick: 'Beaker shelf', pal: palette('#7FA391', '#8FE07A'), power: true, faces: [\n    (F) => { F.fill('D'); const c = [['G', 'A', 'W'], ['K', 'G', 'K'], ['A', 'K', 'G']]; for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) F.rect(2 + 6 * i, 2 + 6 * j, 4, 4, c[j][i]); return F; },\n    (F) => beaker(beaker(beaker(edge(F.fill('B')), 2, 10, 'G'), 8, 8, 'A'), 14, 12, 'W').rect(1, 16, 18, 2, 'M').hl(1, 18, 16, 'S'),\n    (F) => { P2(edge(F.fill('B')), 3, 3); for (const y of [8, 11, 14]) F.rect(3, y, 14, 1, 'D'); return F; }] },\n  // 5, Qubit grid: sixteen qubits on each face, some lit, a different pattern on every face.\n  'Quantum Assembler': { pick: 'Qubit grid', pal: palette('#9A90B8', '#C9A7FF'), power: true, faces: [\n    (F) => qubits(F, 0b1010011010010101), (F) => qubits(F, 0b0110100101101001), (F) => qubits(F, 0b1001010110100110)] },\n  // 1, Level bar (the Oct 3 pick, redrawn): edge columns and a middle bar fill with the charge; on top, a red power\n  // diode and one lit while there is any charge.\n  'Battery': { pick: 'Level bar', pal: palette('#4FB8F0', '#9fe8ff'), fill: true, power: true, faces: [\n    (F) => edge(F.fill('B')).rect(3, 7, 6, 6, 'K').rect(11, 7, 6, 6, 'K').rect(4, 8, 4, 4, 'R').rect(12, 8, 4, 4, (F.f || 0) > 0 ? 'G' : 'O'),\n    batLevel, batLevel] },\n  // 5, Conduits: three energy conduits up each side, a pulse at a different height in each; their ends glow on top.\n  'Power Core': { pick: 'Conduits', pal: palette('#7FE0FF', '#3FB0E0'), power: true, faces: [\n    (F) => { F.fill('D').frame(0, 0, 20, 20, 'M'); for (const x of [3, 9, 15]) for (const y of [3, 9, 15]) F.rect(x, y, 2, 2, 'G'); return F.rect(9, 9, 2, 2, 'g'); },\n    (F) => conduits(F).rect(3, 5, 2, 2, 'g').rect(9, 12, 2, 2, 'g').rect(15, 8, 2, 2, 'g'),\n    (F) => P2(conduits(F).rect(3, 11, 2, 2, 'g').rect(9, 4, 2, 2, 'g').rect(15, 14, 2, 2, 'g'), 6, 0)] },\n  // 1, Thin film (the Oct 3 pick, redrawn): fine stripes in a silver frame; steel edges, the power light on the front.\n  'Solar Panel': { pick: 'Thin film', pal: palette('#16233F', '#6fa8ff'), slab: true, power: true, faces: [\n    (F) => { F.fill('B'); for (let x = 2; x < 18; x += 2) F.vl(x, 1, 18, 'D'); return F.frame(0, 0, 20, 20, 'S'); },\n    (F) => P2(slabSide(F), 15, 3), slabSide] },\n  // Drawer cabinet: three drawers with pulls in an edge frame, top slats, a deep skirt on the side; the gauge along the\n  // front's foot. Its body is its material (a crate of Oak is oak brown: the proposal's own swatch, '#9a6a3c').\n  'Cargo Crate': { pick: 'Drawer cabinet', pal: palette('#9A6A3C', '#58e0a8'), gauge: true, faces: [\n    (F) => { if (F.st.half) return wideTop(F); const p = page(); p.fr('D'); for (let j = 3; j < 19; j += 4) p.r(1, j, 18, 1, 'L'); return onFace(F, p, true); },\n    // its front: the three drawers of the owner's pick (Oct 22: crateDrawerKey), one kube's worth of them on the icon\n    (F) => { if (F.st.half) return wideFront(F); const p = page(); p.fr('D');\n      for (const y of [1, 7, 13]) for (let j = 0; j < 6; j++) for (let i = 0; i < 18; i++) p.r(1 + i, y + j, 1, 1, crateDrawerKey(i, j, 18, 6));\n      return crateGaugeStrip(onFace(F, p, false)); },\n    (F) => (F.st.half ? crateEnd(F) : (() => { const p = page(); p.fr('D'); p.r(1, 18, 18, 1, 'E'); for (let j = 3; j < 18; j += 5) p.r(2, j, 16, 1, 'L'); return onFace(F, p, false); })())],\n    // …and its BOTTOM, in the same hand (the owner asked for one): the deep body inside the frame, on two skids.\n    bottom: (F) => { const p = page(); p.fr('D'); p.r(1, 1, 18, 18, 'E'); p.r(2, 3, 16, 2, 'D'); p.r(2, 15, 16, 2, 'D'); return onFace(F, p, true); },\n    // …and in the world, its drawers are real fronts on its two-kube front (storage-motion.mjs; cabinetDoorCanvas).\n    boards: { w: CRATE_DRAWER_W, h: 6, key: (x, y) => crateDrawerKey(x, y, CRATE_DRAWER_W, 6) } },\n  // Vending unit: a glass front with rows of goods and a side keypad, a top light strip; the light strip runs down the\n  // side too. The glow is the owner's G = #ffc94a, and the lamps and the goods behind the glass are lit only while the\n  // machine is open (`dark` otherwise: pixelColour).\n  'Vending Machine': { pick: 'Vending unit', pal: palette('#7C8590', '#ffc94a', VENDING_EXTRA), extra: VENDING_EXTRA, lights: true, faces: [\n    (F) => { const p = page(); p.fr('D'); p.r(3, 3, 14, 14, 'D'); p.r(4, 4, 12, 3, 'G'); return onFace(F, p, true); },\n    (F) => { const p = page(); p.fr('D'); p.r(2, 2, 12, 13, 'w');\n      for (let j = 3; j < 15; j += 4) { p.goods(3, j, 10, 2); p.r(2, j + 3, 12, 1, 'm'); }\n      p.r(15, 3, 3, 3, 'G'); for (let j = 7; j < 13; j += 2) for (let i = 15; i < 18; i += 2) p.r(i, j, 1, 1, 'S');\n      p.r(3, 16, 10, 2, 'K'); p.r(2, 2, 1, 5, 'H');\n      return onFace(F, p, false); },\n    (F) => { const p = page(); p.fr('D'); p.r(3, 2, 14, 2, 'G'); p.r(3, 6, 14, 10, 'D'); for (let j = 7; j < 15; j += 2) p.r(4, j, 12, 1, 'B'); return onFace(F, p, false); }],\n    // Its BOTTOM: the deep body on four steel feet, a vent across the middle.\n    bottom: (F) => { const p = page(); p.fr('D'); p.r(1, 1, 18, 18, 'E'); for (const [x, y] of [[1, 1], [16, 1], [1, 16], [16, 16]]) p.r(x, y, 3, 3, 'm');\n      for (let j = 7; j < 14; j += 3) p.r(5, j, 10, 1, 'K'); return onFace(F, p, true); } },\n};\n\n// ---- VESSELS, PHASE 2 (Oct 12): the Suit Dock, drawn in the same hand. A TALL part (1×2 upright) is two machines, its\n// base and its upper half, each a kube with its own faces, so the pair reads as one thing two kubes tall: the dock's alcove\n// with its boot clamps, charge strip and helmet ring. (The Air Recycler and the Airlock Door went with vessels' insides,\n// Oct 13.)\nconst dockSide = (F) => edge(F.fill('B')).rect(8, 0, 4, 20, 'D').rect(9, 2, 2, 16, 'M');\n\nexport const VESSEL_ICONS = {\n  // The dock's lower half: an alcove between two posts, boot clamps on its floor, a green charge strip up its post.\n  'Suit Dock': { pick: 'Rack, lower', pal: palette('#8A96A8', '#5dff8a'), power: true, faces: [\n    (F) => F.fill('D').rect(2, 2, 16, 16, 'B'),\n    (F) => P2(F.fill('B').rect(0, 0, 3, 20, 'D').rect(17, 0, 3, 20, 'D').rect(3, 0, 14, 20, 'E').rect(4, 15, 5, 3, 'M').rect(11, 15, 5, 3, 'M')\n      .hl(4, 8, 15, 'S').hl(11, 15, 15, 'S').rect(3, 18, 14, 2, 'D').rect(1, 4, 1, 10, 'G'), 17, 2),\n    dockSide] },\n  // …and its upper half: the alcove's header with its lamp, a helmet ring, the shoulder bar.\n  'Suit Dock Upper': { pick: 'Rack, upper', pal: palette('#8A96A8', '#5dff8a'), faces: [\n    (F) => edge(F.fill('B')).rect(4, 4, 12, 12, 'L'),\n    (F) => F.fill('B').rect(0, 0, 3, 20, 'D').rect(17, 0, 3, 20, 'D').rect(3, 3, 14, 17, 'E').rect(0, 0, 20, 3, 'D').rect(8, 1, 4, 1, 'G')\n      .frame(6, 5, 8, 8, 'S').rect(7, 6, 6, 6, 'W').rect(3, 15, 14, 2, 'M'),\n    dockSide] },\n};\nObject.assign(MACHINE_ICONS, VESSEL_ICONS);\n\n// ---- VESSELS, PHASE 3 (Oct 12): the two drives that make a station a ship, in the same hand. Each shows what it is from\n// any side, since a machine is never turned: the EM Drive its copper coil wound round a glowing core, the Methalox Thruster\n// its nozzle bell over two propellant lines (methane amber, oxygen blue) and a hazard band. The EM drive, electrical,\n// carries the power light that follows the vessel's pool; the thruster burns fuel and has none.\nconst coilSide = (F) => { edge(F.fill('B')); for (let y = 2; y < 18; y += 4) F.rect(2, y, 16, 2, 'C').hl(2, 17, y + 1, 'c'); return F.rect(7, 8, 6, 4, 'D').rect(8, 9, 4, 2, 'G'); };\nconst nozzleSide = (F) => { F.fill('B').rect(0, 0, 20, 2, 'D').rect(0, 18, 20, 2, 'D'); F.rect(3, 2, 2, 16, 'M').vl(3, 2, 17, 'S').rect(15, 2, 2, 16, 'M').vl(15, 2, 17, 'S');\n  F.rect(6, 4, 8, 3, 'A').rect(6, 13, 8, 3, 'W'); for (let x = 1; x < 19; x += 4) F.rect(x, 8, 2, 4, 'Y').rect(x + 2, 8, 2, 4, 'K'); return F; };\nexport const SHIP_ICONS = {\n  // The coil seen end-on on top (rings round the core), wound across the front with the power light, and along the side.\n  'EM Drive': { pick: 'Coil drive', pal: palette('#5E7FA6', '#7fd6ff'), power: true, faces: [\n    (F) => { edge(F.fill('D')); F.frame(2, 2, 16, 16, 'C').frame(3, 3, 14, 14, 'c').frame(5, 5, 10, 10, 'C').frame(6, 6, 8, 8, 'c'); return F.rect(8, 8, 4, 4, 'G').rect(9, 9, 2, 2, 'W'); },\n    (F) => P2(coilSide(F), 16, 1),\n    coilSide] },\n  // The nozzle bell from above (its throat glowing), a bell under two tank caps on the front, the lines down the side.\n  'Methalox Thruster': { pick: 'Bell nozzle', pal: palette('#8C6F5A', '#ff9a3a'), faces: [\n    (F) => { edge(F.fill('B')); F.rect(2, 2, 16, 16, 'm').rect(4, 4, 12, 12, 'K').rect(6, 6, 8, 8, 'E').rect(8, 8, 4, 4, 'A').rect(9, 9, 2, 2, 'g'); return F; },\n    (F) => { F.fill('B').rect(0, 0, 20, 2, 'D'); F.rect(2, 2, 6, 5, 'A').hl(2, 7, 2, 'g').rect(12, 2, 6, 5, 'W').hl(12, 17, 2, 'S');\n      F.rect(4, 8, 12, 2, 'M').rect(5, 10, 10, 2, 'm').rect(4, 12, 12, 2, 'm').rect(3, 14, 14, 4, 'K').rect(5, 15, 10, 2, 'A').rect(7, 15, 6, 1, 'g'); return F.rect(0, 18, 20, 2, 'D'); },\n    nozzleSide] },\n};\nObject.assign(MACHINE_ICONS, SHIP_ICONS);\n\n// ---- THE FURNITURE (Oct 19; storage-machines.mjs FURNITURE): fourteen kube-sized pieces, in the same hand. Each is a whole\n// kube, so what is open space in the piece (under a table, between a bench's legs) is drawn as its deep shadow, E. Its own\n// colours ride in `extra` (linen, a blanket, books, soil and leaves, stone, water), kept by every material variant; its\n// wood or metal is its body, B, and so the variant's own.\nconst BED_EXTRA = { w: '#E6E1D6', u: '#8E3E3A', U: '#B4615A' };            // linen, the blanket and its fold\nconst SHELF_EXTRA = { r: '#9A3D33', n: '#34598A', y: '#C6A03C', v: '#4F7A3D', w: '#E2DCCB' };   // book spines\nconst PLANTER_EXTRA = { s: '#4A3524', f: '#4C9638', F: '#7DC35A' };         // soil, leaves and their light\nconst DISPLAY_EXTRA = { j: '#9FCADB', J: '#E4F4F9', y: '#C9A43A' };          // the glass, a glint on it, the gold of what it shows\nconst COUNTER_EXTRA = { t: '#D8D3C6', T: '#B5AF9F' };                       // the stone top and its veins\nconst TROUGH_EXTRA = { b: '#4F86B8', h: '#9CC2E0' };                        // water and a glint on it\nconst planks = (F, step = 5, key = 'D') => { for (let y = step - 1; y < F.h - 1; y += step) F.hl(1, F.w - 2, y, key); return F; };\nconst staves = (F) => { for (let x = 3; x < 19; x += 4) F.vl(x, 0, 19, 'D'); return F; };\nconst hoops = (F) => { for (const y of [2, 9, 16]) F.rect(0, y, 20, 2, 'M').hl(0, 19, y, 'S'); return F; };\n// A round top (a barrel's lid): `inner` inside radius r0, a hoop to r1, the deep shadow outside.\nconst disc = (F, r0, r1, inner, ring) => { for (let y = 0; y < 20; y++) for (let x = 0; x < 20; x++) { const d = Math.hypot(x - 9.5, y - 9.5); F.set(x, y, d <= r0 ? inner : d <= r1 ? ring : 'E'); } return F; };\nconst tableSide = (F) => F.fill('E').rect(0, 0, 20, 4, 'B').hl(0, 19, 0, 'L').hl(0, 19, 3, 'D').rect(1, 4, 3, 16, 'D').rect(16, 4, 3, 16, 'D').vl(1, 4, 19, 'B').vl(16, 4, 19, 'B');\nconst benchSeat = (F) => F.fill('E').rect(0, 6, 20, 4, 'B').hl(0, 19, 6, 'L').hl(0, 19, 9, 'D').rect(2, 10, 3, 10, 'D').rect(15, 10, 3, 10, 'D');\nconst books = (F, y0, y1) => { const ks = ['r', 'n', 'y', 'v', 'w', 'r', 'v', 'n']; let x = 2;\n  for (let i = 0; x < 18; i++) { const w = 1 + (i % 3 === 1 ? 2 : 1), top = y0 + (i % 4 === 2 ? 1 : 0); F.rect(x, top, Math.min(w, 18 - x), y1 - top + 1, ks[i % ks.length]); x += w; } return F; };\nconst shelfFront = (F) => { F.fill('E').rect(0, 0, 2, 20, 'D').rect(18, 0, 2, 20, 'D').rect(0, 0, 20, 1, 'D');\n  for (const y of [6, 12, 18]) F.rect(2, y, 16, 2, 'L').hl(2, 17, y + 1, 'B');\n  return books(books(books(F, 2, 5), 8, 11), 14, 17); };\nconst planterSide = (F) => { F.fill('B').rect(0, 0, 20, 4, 'f').rect(2, 0, 4, 2, 'F').rect(10, 1, 5, 2, 'F').rect(0, 4, 20, 2, 'D').hl(0, 19, 4, 'L'); planks(F, 5); return F.rect(0, 18, 20, 2, 'E'); };\nconst hearthSide = (F) => { edge(F.fill('B')).rect(0, 0, 20, 2, 'L'); for (const y of [6, 9, 12]) F.rect(4, y, 12, 1, 'K'); for (const [x, y] of [[2, 3], [17, 3], [2, 16], [17, 16]]) F.set(x, y, 'S'); return F.rect(0, 18, 20, 2, 'm'); };\nconst troughSide = (F) => F.fill('E').rect(0, 0, 20, 3, 'L').hl(0, 19, 2, 'D').rect(0, 3, 20, 11, 'B').hl(0, 19, 13, 'D').rect(1, 14, 3, 6, 'D').rect(16, 14, 3, 6, 'D')\n  .set(3, 6, 'S').set(16, 6, 'S').set(3, 10, 'S').set(16, 10, 'S');\n\n// THE CABINET, FRAMED (the owner, Oct 21: Framed, doors always 3D: the 'frame' look of the Cabinet Looks page, on this\n// 20 x 20 grid in the palette's letters). frame1: a pixel on a face's outer ring.\nconst frame1 = (x, y, w, h) => x === 0 || y === 0 || x === w - 1 || y === h - 1;\n// THE BODY (top, sides, back and bottom): a one-pixel dark border round the face, the plain base inside. Nothing raised.\nexport const cabinetBodyKey = (x, y) => (frame1(x, y, LATTICE, LATTICE) ? 'D' : 'B');\n// ONE DOOR'S FACE, 10 wide by 20 high: x 0 its hinge side, x 9 the seam. A dark border round the door, the plain base\n// inside, and a small steel pull, one pixel wide and four high, by the seam at mid height (x 8, y 8..11).\nexport const CABINET_DOOR_W = 10;\nexport const cabinetDoorKey = (x, y) => (frame1(x, y, CABINET_DOOR_W, LATTICE) ? 'D' : (x === 8 && y >= 8 && y <= 11 ? 'M' : 'B'));\nconst cabinetBody = (F) => { for (let y = 0; y < F.h; y++) for (let x = 0; x < F.w; x++) F.set(x, y, cabinetBodyKey(x, y)); return F; };\n// THE FRONT IN THE ICON: the two doors side by side, the left x 0..9 as drawn and the right x 10..19 its mirror image (its\n// hinge at x 19), so the two pulls stand either side of the seam. In the world the doors are real boards (system-view.js\n// cabinet doors) wearing these same faces, over a front of plain body (worldFront).\nconst cabinetDoors = (F) => { for (let y = 0; y < F.h; y++) for (let x = 0; x < F.w; x++) F.set(x, y, x < CABINET_DOOR_W ? cabinetDoorKey(x, y) : cabinetDoorKey(LATTICE - 1 - x, y)); return F; };\n\n// A display case's face: a two-pixel frame of its material round the glass, a glint across the pane; on a side, the shown\n// thing (a small gold kube) on its plinth.\nconst displayGlass = (side) => (F) => { F.fill('j').frame(0, 0, 20, 20, 'B').frame(1, 1, 18, 18, 'D');\n  for (let i = 0; i < 6; i++) F.set(4 + i, 3 + i, 'J');\n  if (side) F.rect(7, 15, 6, 3, 'E').rect(8, 9, 4, 4, 'y').hl(8, 11, 9, 'J');\n  return F; };\n// The Hide Rug's edge (a slab side, 20 x 10): the hide's fold, its stitched hem along the top. The Bone Chandelier's side: the\n// plate on the ceiling, its stem, the arms and their lit beads, the gland glowing under them; the rest the shadow behind.\nconst rugSide = (F) => { F.fill('B').hl(0, 19, 0, 'L').hl(0, 19, F.h - 1, 'D').hl(0, 19, F.h - 2, 'D'); for (let x = 1; x < 20; x += 3) F.set(x, 2, 'H'); return F; };\nconst chandelierSide = (F) => F.fill('E').rect(5, 0, 10, 2, 'B').hl(5, 14, 1, 'D').rect(9, 2, 2, 6, 'B').rect(2, 8, 16, 2, 'B').hl(2, 17, 9, 'D')\n  .rect(2, 10, 2, 3, 'B').rect(16, 10, 2, 3, 'B').rect(2, 13, 2, 2, 'G').rect(16, 13, 2, 2, 'G')\n  .rect(7, 10, 6, 5, 'G').rect(8, 11, 4, 3, 'g').rect(9, 15, 2, 2, 'B');\nexport const FURNITURE_ICONS = {\n  // A pillow at the head, the blanket folded back over the rest; the foot of the frame with its legs; the long side.\n  'Bed': { pick: 'Made bed', pal: palette('#8A5A44', '#ffd27a', BED_EXTRA), extra: BED_EXTRA, faces: [\n    (F) => F.fill('D').rect(1, 1, 18, 18, 'w').rect(3, 2, 14, 4, 'w').frame(3, 2, 14, 4, 'H').rect(1, 8, 18, 11, 'u').hl(1, 18, 8, 'U').hl(1, 18, 9, 'U'),\n    (F) => F.fill('E').rect(0, 0, 3, 20, 'D').rect(17, 0, 3, 20, 'D').rect(3, 3, 14, 3, 'B').hl(3, 16, 3, 'L').rect(3, 6, 14, 2, 'w').rect(3, 8, 14, 4, 'u').rect(3, 12, 14, 3, 'B').hl(3, 16, 14, 'D'),\n    (F) => F.fill('E').rect(0, 6, 20, 2, 'w').rect(5, 6, 15, 5, 'u').hl(5, 19, 6, 'U').rect(0, 11, 20, 4, 'B').hl(0, 19, 11, 'L').hl(0, 19, 14, 'D')\n      .rect(0, 15, 3, 5, 'D').rect(17, 15, 3, 5, 'D').rect(0, 0, 3, 15, 'D').vl(1, 1, 14, 'B')] },\n  // Planks under a lip; the top and its two legs on every side, the space under it in shadow.\n  'Table': { pick: 'Plank table', pal: palette('#A07850', '#ffd27a'), faces: [\n    (F) => planks(edge(F.fill('B')), 5), tableSide, tableSide] },\n  // Two seat planks across; the seat on two legs; the end, one leg under the middle.\n  'Bench': { pick: 'Plank seat', pal: palette('#94704A', '#ffd27a'), faces: [\n    (F) => F.fill('E').rect(0, 4, 20, 6, 'B').rect(0, 11, 20, 6, 'B').hl(0, 19, 4, 'L').hl(0, 19, 11, 'L').hl(0, 19, 9, 'D').hl(0, 19, 16, 'D'),\n    benchSeat,\n    (F) => F.fill('E').rect(0, 6, 20, 4, 'B').hl(0, 19, 6, 'L').hl(0, 19, 9, 'D').rect(8, 10, 4, 10, 'D').rect(4, 18, 12, 2, 'D')] },\n  // Books in three rows between the boards, on the front and along the side; the top board.\n  'Shelf': { pick: 'Book rows', pal: palette('#7E5A3A', '#ffd27a', SHELF_EXTRA), extra: SHELF_EXTRA, faces: [\n    (F) => planks(edge(F.fill('B')), 10), shelfFront, shelfFront] },\n  // CABINETS INSTEAD OF CHESTS (the owner, Oct 21: \"i want to remove chests and just use cabinets of varying wood color\n  // instead\"), then TWIN DOORS (the owner, Oct 21: \"the entire texture should be twin side by side doors … It should be\n  // possible to make cabinets out of wood or metal\"), then FRAMED, DOORS ALWAYS 3D (the owner, Oct 21, on the Cabinet Looks\n  // page: \"I'd like the cabinet texture to be more solid … without the bulging 3d elements. I would like the doors to be\n  // 3d though\"; the look 'Framed'). Every face of the body is flat: a one-pixel dark border, the plain base inside\n  // (cabinetBodyKey); no raised panels, no planks. The front is the two doors (cabinetDoors), each framed in the dark tone\n  // with a small steel pull by the seam. Every key is the body's (B D) or steel (M), so a cabinet of any wood or metal\n  // wears its own colour. IN THE WORLD (worldFront, machineAtlasCanvas st.world) the front tile is plain body too: the\n  // doors stand on it as real boards (cabinetDoorCanvas), and the black inside shows only while they are open.\n  'Cabinet': { pick: 'Framed', pal: palette('#7A4E2C', '#ffd27a'), faces: [cabinetBody, cabinetDoors, cabinetBody],\n    bottom: cabinetBody, worldFront: cabinetBody, boards: { w: CABINET_DOOR_W, h: LATTICE, key: cabinetDoorKey } },\n  // Staves and three hoops round it; its round lid in its rim, the bung in the middle.\n  'Barrel': { pick: 'Hooped barrel', pal: palette('#86603C', '#ffd27a'), faces: [\n    (F) => { disc(F, 8, 9.9, 'B', 'M'); for (const y of [5, 10, 15]) for (let x = 2; x < 18; x++) if (Math.hypot(x - 9.5, y - 9.5) < 8) F.set(x, y, 'D'); return F.rect(9, 9, 2, 2, 'E'); },\n    (F) => hoops(staves(F.fill('B'))), (F) => hoops(staves(F.fill('B')))] },\n  // A pale stone top over two cabinet doors with their pulls; the end panel.\n  'Counter': { pick: 'Stone counter', pal: palette('#8C6A48', '#ffd27a', COUNTER_EXTRA), extra: COUNTER_EXTRA, faces: [\n    (F) => F.fill('t').frame(0, 0, 20, 20, 'T').hl(3, 9, 6, 'T').hl(9, 15, 7, 'T').hl(5, 12, 13, 'T').hl(12, 16, 14, 'T'),\n    (F) => F.fill('B').rect(0, 0, 20, 3, 't').hl(0, 19, 2, 'T').rect(0, 3, 20, 1, 'D').frame(1, 5, 8, 13, 'D').frame(11, 5, 8, 13, 'D').rect(7, 10, 1, 3, 'M').rect(12, 10, 1, 3, 'M').rect(0, 18, 20, 2, 'E'),\n    (F) => F.fill('B').rect(0, 0, 20, 3, 't').hl(0, 19, 2, 'T').rect(0, 3, 20, 1, 'D').frame(2, 5, 16, 13, 'D').rect(0, 18, 20, 2, 'E')] },\n  // A thick top with a vice at its corner and a saw and a hammer laid on it; legs, a drawer and a low shelf.\n  'Workbench': { pick: 'Vice bench', pal: palette('#9C7246', '#ffd27a'), faces: [\n    (F) => planks(edge(F.fill('B')), 4).rect(2, 2, 10, 3, 'S').hl(2, 11, 4, 'M').rect(12, 2, 2, 3, 'D').rect(14, 10, 2, 7, 'D').rect(12, 9, 6, 2, 'm').rect(1, 15, 4, 4, 'm').set(2, 16, 'S'),\n    (F) => F.fill('E').rect(0, 0, 20, 4, 'B').hl(0, 19, 0, 'L').hl(0, 19, 3, 'D').rect(1, 4, 3, 16, 'D').rect(16, 4, 3, 16, 'D').rect(4, 5, 12, 4, 'B').frame(4, 5, 12, 4, 'D').rect(9, 6, 2, 2, 'M')\n      .rect(4, 15, 12, 2, 'B').hl(4, 15, 15, 'L').rect(1, 1, 5, 6, 'm').hl(1, 5, 1, 'S').rect(2, 7, 1, 3, 'S'),\n    (F) => F.fill('E').rect(0, 0, 20, 4, 'B').hl(0, 19, 0, 'L').hl(0, 19, 3, 'D').rect(1, 4, 3, 16, 'D').rect(16, 4, 3, 16, 'D').rect(4, 15, 12, 2, 'B').hl(4, 15, 15, 'L')\n      .rect(6, 6, 2, 6, 'M').rect(10, 7, 4, 2, 'm').rect(11, 9, 2, 4, 'D')] },\n  // THE LOCKER (the Wardrobe until the owner, Oct 21): one tall vented door then (Oct 21), a plain top.\n  // …TWIN TALL DOORS (the owner's pick, Oct 22: lockerDoorKey), the body Framed; in the world the doors are real boards.\n  'Locker': lockerDef('Twin tall doors'),\n  // …and its upper half, wearing its base's material in the world (system-view.js draws it as 'm:<its Locker>|U').\n  'Locker Upper': lockerDef('Twin tall doors, upper', true),\n  // THE DISPLAY CASE (the owner, Oct 21): glass in a frame of its material on every side, a plinth inside. The world draws\n  // it as a case of its own (system-view.js DISPLAY CASES): frame, panes and the item it shows, turning.\n  'Display Case': { pick: 'Glass case', pal: palette('#B7CFD6', '#ffd27a', DISPLAY_EXTRA), extra: DISPLAY_EXTRA, faces: [displayGlass(false), displayGlass(true), displayGlass(true)] },\n  // Leaves over the soil; the box of planks with leaves spilling over its rim.\n  'Planter': { pick: 'Leafy box', pal: palette('#7C6440', '#ffd27a', PLANTER_EXTRA), extra: PLANTER_EXTRA, faces: [\n    (F) => F.fill('D').rect(1, 1, 18, 18, 's').rect(2, 2, 6, 5, 'f').rect(9, 3, 7, 6, 'f').rect(3, 9, 7, 7, 'f').rect(12, 11, 5, 6, 'f')\n      .rect(3, 3, 3, 2, 'F').rect(11, 4, 3, 2, 'F').rect(5, 11, 3, 2, 'F').rect(13, 12, 2, 2, 'F'),\n    planterSide, planterSide] },\n  // A fire window on the front, flames glowing in the box; a grate on top, the fire under its bars; the side's vents.\n  'Hearth': { pick: 'Fire box', pal: palette('#6A6662', '#FF7A2A'), faces: [\n    (F) => { edge(F.fill('B')).rect(3, 3, 14, 14, 'K'); for (const y of [4, 7, 10, 13]) F.rect(4, y, 12, 2, 'G').hl(4, 15, y, 'g'); for (const x of [6, 10, 14]) F.vl(x, 3, 16, 'm'); return F; },\n    (F) => edge(F.fill('B')).rect(0, 0, 20, 2, 'L').rect(3, 4, 14, 12, 'M').frame(3, 4, 14, 12, 'S').rect(5, 6, 10, 8, 'K').rect(5, 10, 10, 4, 'G').rect(7, 8, 2, 2, 'G').rect(11, 7, 2, 3, 'G')\n      .set(8, 11, 'g').set(11, 10, 'g').set(12, 12, 'g').rect(0, 18, 20, 2, 'm'),\n    hearthSide] },\n  // A lamp head of glowing glass in its frame over the post's plinth; its cap lit from inside.\n  'Lamp Post': { pick: 'Lamp head', pal: palette('#5E646C', '#FFCF6A'), faces: [\n    (F) => edge(F.fill('B')).rect(4, 4, 12, 12, 'D').rect(6, 6, 8, 8, 'G').rect(8, 8, 4, 4, 'g'),\n    (F) => F.fill('E').rect(3, 0, 14, 2, 'D').rect(4, 2, 12, 8, 'D').rect(5, 3, 10, 6, 'W').rect(7, 4, 6, 4, 'G').rect(3, 10, 14, 1, 'D').rect(8, 11, 4, 7, 'B').vl(8, 11, 17, 'L').rect(5, 18, 10, 2, 'D'),\n    (F) => F.fill('E').rect(3, 0, 14, 2, 'D').rect(4, 2, 12, 8, 'D').rect(5, 3, 10, 6, 'W').rect(7, 4, 6, 4, 'G').rect(3, 10, 14, 1, 'D').rect(8, 11, 4, 7, 'B').vl(8, 11, 17, 'L').rect(5, 18, 10, 2, 'D')] },\n  // Water in a riveted metal trough on two legs.\n  'Trough': { pick: 'Water trough', pal: palette('#727A80', '#ffd27a', TROUGH_EXTRA), extra: TROUGH_EXTRA, faces: [\n    (F) => F.fill('L').frame(0, 0, 20, 20, 'D').rect(2, 2, 16, 16, 'b').hl(4, 9, 5, 'h').hl(10, 14, 11, 'h').hl(5, 8, 15, 'h'),\n    troughSide, troughSide] },\n  // WHAT ANIMALS GIVE (the owner's Alien Animals items, Oct 29). THE HIDE RUG is a SLAB (it lies flat on the floor, half a cell,\n  // as the Solar Panel does: its sides 20 x 10): stitched hide with a pale patch of fur, its hem a shade darker.\n  'Hide Rug': { pick: 'Stitched hide', pal: palette('#A0623E', '#ffd27a'), slab: true, faces: [\n    (F) => { F.fill('B').frame(0, 0, 20, 20, 'D'); for (let i = 2; i < 18; i += 3) F.set(i, 1, 'H').set(i, 18, 'H').set(1, i, 'H').set(18, i, 'H');\n      return F.rect(5, 5, 10, 10, 'L').rect(7, 7, 6, 6, 'H').rect(4, 8, 2, 4, 'L').rect(14, 8, 2, 4, 'L').rect(8, 4, 4, 2, 'L').rect(8, 14, 4, 2, 'L'); },\n    rugSide, rugSide] },\n  // THE BONE CHANDELIER hangs from a ceiling: a bone plate at the top, a stem, four arms with a lit bead at each tip and the\n  // Glow Gland lit at its heart; underneath, the gland seen from below.\n  'Bone Chandelier': { pick: 'Bone arms', pal: palette('#F2E6C9', '#FFD070'), faces: [\n    (F) => F.fill('E').rect(6, 6, 8, 8, 'B').frame(6, 6, 8, 8, 'D').rect(8, 8, 4, 4, 'G').rect(9, 9, 2, 2, 'g')\n      .rect(1, 9, 5, 2, 'B').rect(14, 9, 5, 2, 'B').rect(9, 1, 2, 5, 'B').rect(9, 14, 2, 5, 'B'),\n    chandelierSide, chandelierSide] },\n};\nObject.assign(MACHINE_ICONS, FURNITURE_ICONS);\n\n// A MATERIAL VARIANT wears its base machine's design with its own body colour, as its model did (machine-models.mjs).\n// THE CARGO CRATE'S SIDE (Oct 21) is drawn as its crate's right half (system-view.js draws it as 'm:<its crate>|<state>').\nMACHINE_ICONS['Cargo Crate Side'] = { ...MACHINE_ICONS['Cargo Crate'], pick: 'Drawer cabinet, right' };\nconst _own = (name) => Object.prototype.hasOwnProperty.call(MACHINE_ICONS, name);\nconst _pals = new Map();\nfunction resolve(name) {\n  if (_own(name)) return { m: MACHINE_ICONS[name], pal: MACHINE_ICONS[name].pal };\n  const base = baseItemOf(name);\n  if (base === name || !_own(base)) return null;\n  const m = MACHINE_ICONS[base], hex = itemHexOf(name);\n  if (!hex || !/^#[0-9a-f]{6}$/i.test(hex)) return { m, pal: m.pal };\n  if (!_pals.has(name)) _pals.set(name, { ...palette(hex, m.pal.G, m.extra) });\n  return { m, pal: _pals.get(name) };\n}\nexport const hasMachineIcon = (name) => !!resolve(name);\nexport const isSlabIcon = (name) => !!(resolve(name) && resolve(name).m.slab);\n// Does this machine show what it is doing on its faces (a crate's gauge, a vending machine's lights)? Then the world\n// draws it per state (system-view.js machineAtlasTexture, keyed by storage-machines.mjs stateKeyOf).\nexport const hasStateFaces = (name) => !!(resolve(name) && (resolve(name).m.gauge || resolve(name).m.lights));\n// …and does it show POWER (a power light, a battery's gauge)? Aboard a vessel those follow the vessel's power pool\n// (vessel-life.mjs powerKey), so the world draws such a machine per power state there; on a world they stay dark.\nexport const hasPowerFaces = (name) => !!(resolve(name) && (resolve(name).m.power || resolve(name).m.fill));\n\n// The three faces of a machine, painted: [{ w, h, keys, which }] in the order top, left, right. `fill` is a battery's\n// charge, 0..1, or a crate's fullness; `st` the rest of what it shows (face()). A slab's sides are 20 x 10.\nexport function machineFaces(name, fill = 0, st = IDLE) {\n  const r = resolve(name); if (!r) return null; const m = r.m;\n  return ['t', 'l', 'r'].map((which, n) => { const F = face(fill, m.slab && n ? LATTICE / 2 : LATTICE, st); m.faces[n](F); return { w: F.w, h: F.h, keys: F.k, which }; });\n}\n// …and its BOTTOM, for a design that has one (the storage machines); null for one drawn as its body's dark tone.\nexport function machineBottomFace(name, st = IDLE) {\n  const r = resolve(name); if (!r || !r.m.bottom) return null;\n  const F = face(0, LATTICE, st); r.m.bottom(F); return { w: F.w, h: F.h, keys: F.k, which: 't' };\n}\n// The colour a pixel is drawn in, on face `which` ('t' | 'l' | 'r'), for a machine in state { powered, mode, dark }.\nexport function pixelColour(name, key, which, st = IDLE) {\n  const pal = resolve(name).pal;\n  let hex, lit;\n  if (key === 'P') { lit = !!st.powered; hex = lit ? MACHINE_LIGHTS.on : MACHINE_LIGHTS.off; }\n  else if (key === 'Q') { lit = st.mode === 'charging' || st.mode === 'powering'; hex = lit ? MACHINE_LIGHTS[st.mode] : MACHINE_LIGHTS.off; }\n  else if (st.dark && LAMPS.has(key)) { hex = MACHINE_LIGHTS.off; lit = false; }\n  else { hex = pal[key] || pal.B; lit = LIT.has(key) && !st.dark; }\n  return shade(hex, lit ? 1 : SHADE[which] || 1);   // always lower-case #rrggbb\n}\nconst rgbOf = (name, F, st, shaded) => {\n  const memo = {}, rgb = new Uint8ClampedArray(F.w * F.h * 3);\n  F.keys.forEach((k, i) => { const c = memo[k] || (memo[k] = hx(pixelColour(name, k, shaded ? F.which : 't', st))); rgb[i * 3] = c[0]; rgb[i * 3 + 1] = c[1]; rgb[i * 3 + 2] = c[2]; });\n  return { ...F, rgb };\n};\nconst facesRGB = (name, fill, st, shaded) => machineFaces(name, fill, st).map((F) => rgbOf(name, F, st, shaded));\n\n// The kube's outline: the convex hull of its three faces' corners, for smoothing the edge pixels only.\nfunction hull(pts) {\n  const p = pts.slice().sort((a, b) => a[0] - b[0] || a[1] - b[1]), cr = (o, a, b) => (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);\n  const lo = [], up = [];\n  for (const q of p) { while (lo.length >= 2 && cr(lo[lo.length - 2], lo[lo.length - 1], q) <= 0) lo.pop(); lo.push(q); }\n  for (const q of p.reverse()) { while (up.length >= 2 && cr(up[up.length - 2], up[up.length - 1], q) <= 0) up.pop(); up.push(q); }\n  return lo.slice(0, -1).concat(up.slice(0, -1));\n}\n\n// PAINT a machine onto a 2D context. `quads` gives each visible face as [O, U, V] in canvas pixels: O the face's\n// top-left corner as seen, U the end of its x axis, V the end of its y axis (down the side; toward the front on top).\n// The caller projects these from the same cube the kube icons render, so the silhouette is identical. `st` is the\n// machine's light state (default: unpowered, idle). Composites over what the canvas holds.\nexport function paintMachineIcon(ctx, name, quads, fill = 0, st = IDLE) {\n  if (!resolve(name)) return false;\n  const faces = facesRGB(name, fill, st, true);\n  const Q = quads.map(([O, U, V], n) => { const t = faces[n], ax = (U[0] - O[0]) / t.w, ay = (U[1] - O[1]) / t.w, bx = (V[0] - O[0]) / t.h, by = (V[1] - O[1]) / t.h, det = ax * by - bx * ay;\n    return { ox: O[0], oy: O[1], a: by / det, b: -bx / det, c: -ay / det, e: ax / det, t }; });\n  const hit = (x, y) => { for (const q of Q) { const dx = x - q.ox, dy = y - q.oy, u = q.a * dx + q.b * dy, v = q.c * dx + q.e * dy;\n    if (u >= -1e-3 && u < q.t.w + 1e-3 && v >= -1e-3 && v < q.t.h + 1e-3) return (Math.min(q.t.h - 1, Math.max(0, Math.floor(v))) * q.t.w + Math.min(q.t.w - 1, Math.max(0, Math.floor(u)))) * 3 + 1 + Q.indexOf(q) * 1e7; } return -1; };\n  const H = hull(quads.flatMap(([O, U, V]) => [O, U, V, [U[0] + V[0] - O[0], U[1] + V[1] - O[1]]]));\n  const mid = H.reduce((s, p) => [s[0] + p[0] / H.length, s[1] + p[1] / H.length], [0, 0]);\n  const ed = H.map((p, i) => { const q = H[(i + 1) % H.length], ex = q[0] - p[0], ey = q[1] - p[1], L = Math.hypot(ex, ey) || 1, f = ((mid[0] - p[0]) * ey - (mid[1] - p[1]) * ex) >= 0 ? 1 : -1;\n    return [p[0], p[1], f * ey / L, -f * ex / L]; });   // each edge's normal pointing into the kube\n  const inside = (x, y) => { let m = Infinity; for (const [px, py, nx, ny] of ed) m = Math.min(m, (x - px) * nx + (y - py) * ny); return m; };   // distance to the outline, > 0 inside\n  const cw = ctx.canvas.width, chh = ctx.canvas.height;\n  const xs = H.map((p) => p[0]), ys = H.map((p) => p[1]);\n  const x0 = Math.max(0, Math.floor(Math.min(...xs)) - 1), x1 = Math.min(cw - 1, Math.ceil(Math.max(...xs)) + 1), y0 = Math.max(0, Math.floor(Math.min(...ys)) - 1), y1 = Math.min(chh - 1, Math.ceil(Math.max(...ys)) + 1);\n  if (x1 < x0 || y1 < y0) return true;\n  const img = ctx.getImageData(x0, y0, x1 - x0 + 1, y1 - y0 + 1), d = img.data, iw = img.width;\n  for (let py = y0; py <= y1; py++) for (let px = x0; px <= x1; px++) {\n    const cx = px + 0.5, cy = py + 0.5;\n    let h = hit(cx, cy), cov = 4;\n    if (inside(cx, cy) < 1.2) { cov = 0; let any = -1; for (const [sx, sy] of [[0.25, 0.25], [0.75, 0.25], [0.25, 0.75], [0.75, 0.75]]) { const s = hit(px + sx, py + sy); if (s >= 0) { cov++; any = s; } } if (h < 0) h = any; }\n    if (h < 0 || !cov) continue;\n    const n = Math.floor(h / 1e7), i = h - n * 1e7 - 1, rgb = Q[n].t.rgb, o = ((py - y0) * iw + (px - x0)) * 4, a = cov / 4, ba = d[o + 3] / 255, oa = a + ba * (1 - a);\n    for (let k = 0; k < 3; k++) d[o + k] = Math.round((rgb[i + k] * a + d[o + k] * ba * (1 - a)) / (oa || 1));\n    d[o + 3] = Math.round(oa * 255);\n  }\n  ctx.putImageData(img, x0, y0);\n  return true;\n}\n\n// ---- THE SAME FACES IN THE WORLD (the owner, Oct 3: \"the items textures for machines we just created in inventory\n// should match their actual textures in game\"). A placed machine is a kube wearing these faces, so its texture is an\n// ATLAS of four square tiles side by side: top | front | side | bottom (MACHINE_ATLAS_TILES). The world lights the\n// faces itself, so every tile is painted UNSHADED (as a top face); its lights keep their full strength. Each face pixel\n// fills a whole block of tile pixels with integer edges, so no two face pixels blend; a tile a multiple of 20 wide gives\n// every pixel the same size. A slab's sides (the Solar Panel, 20 x 10) are stretched to fill their tile: the shader maps\n// the slab's own height onto it. The bottom, which nobody sees from above, is the body in its dark tone, or the design's\n// own bottom where it has one (the storage machines, Oct 11).\n// `fill` and `st` are what the machine shows (a crate's gauge, a vending machine's lights: storage-machines.mjs\n// paintStateOf), so a machine in another state is another atlas, made once per state (system-view.js machineAtlasTexture).\nexport const MACHINE_ATLAS_TILES = 4;\n// THE KEYS OF THE ATLAS'S TILES, as machineAtlasCanvas paints them: [top, front, side, bottom (or null: the body's dark\n// tone)], each { w, h, keys, which }. The icons that draw a machine as the world draws it (app.js, icon-world.mjs) read\n// which of a tile's pixels are its lights from these, so the world's front (st.world) and a swapped atlas are told right.\nexport function machineAtlasKeys(name, fill = 0, st = IDLE) {\n  const r = resolve(name); if (!r) return null;\n  const faces = machineFaces(name, fill, st);\n  // st.swap: a machine whose front faces the cell's FIRST tangent (the world shows the front tile on the second tangent's\n  // faces and the side tile on the first's: system-view.js machineAtlasGLSL), so the two trade places. (The Cabinet used it\n  // until its doors became boards, Oct 21; its world atlas is alike on every side now.)\n  // A MACHINE WHOSE FRONT THE WORLD DRAWS IN 3D (the Cabinet: the owner, Oct 21, Framed, doors always 3D): the world's\n  // atlas (st.world) wears its worldFront there, and the doors are boards of their own (cabinetDoorCanvas).\n  const wf = st && st.world && r.m.worldFront;\n  if (wf) { const F = face(0, LATTICE, st); wf(F); faces[1] = { w: F.w, h: F.h, keys: F.k, which: 'l' }; }\n  if (st && st.swap) { const t = faces[1]; faces[1] = faces[2]; faces[2] = t; }\n  faces.push(machineBottomFace(name, st));\n  return faces;\n}\nexport function machineAtlasCanvas(name, tile = 240, fill = 0, makeCanvas, st = IDLE) {\n  if (!resolve(name)) return null;\n  const keyed = machineAtlasKeys(name, fill, st), bottom = keyed[3];\n  const faces = keyed.slice(0, 3).map((F) => rgbOf(name, F, st, false));\n  if (bottom) faces.push(rgbOf(name, bottom, st, false));\n  const cv = makeCanvas ? makeCanvas(tile * MACHINE_ATLAS_TILES, tile) : Object.assign(document.createElement('canvas'), { width: tile * MACHINE_ATLAS_TILES, height: tile });\n  const ctx = cv.getContext('2d'), pal = resolve(name).pal;\n  ctx.setTransform(1, 0, 0, 1, 0, 0);\n  faces.forEach((F, n) => {\n    for (let j = 0; j < F.h; j++) for (let i = 0; i < F.w; i++) {\n      const xa = Math.round(i * tile / F.w), xb = Math.round((i + 1) * tile / F.w), ya = Math.round(j * tile / F.h), yb = Math.round((j + 1) * tile / F.h), o = (j * F.w + i) * 3;\n      ctx.fillStyle = toHex([F.rgb[o], F.rgb[o + 1], F.rgb[o + 2]]); ctx.fillRect(n * tile + xa, ya, xb - xa, yb - ya);\n    }\n  });\n  if (!bottom) { ctx.fillStyle = pal.D; ctx.fillRect(3 * tile, 0, tile, tile); }\n  return cv;\n}\n\n// ---- A CABINET'S DOOR BOARDS (the owner, Oct 21: Framed, doors always 3D; cabinet-doors.mjs cabinetShutBoards) ----------\n// Their texture, two tiles side by side: [the door's face | its edges]. Tile 0 is ONE door's face (cabinetDoorKey: 10 x 20,\n// x 0 at the hinge), stretched over the board; the right door wears it mirrored (its u runs from its own hinge). Tile 1 is\n// the material's DARK tone, for the board's edges and back (the owner's pick). Unshaded, as the atlas is: the world lights\n// it. `px` is how many canvas pixels a face pixel spans (whole blocks, so no two face pixels blend). Null for a machine\n// whose front is not drawn in 3D.\n// …AND THE LOCKER'S AND THE CARGO CRATE'S (the owner's picks, Oct 22: storage-motion.mjs): each design's `boards` names its\n// one board's face, { w, h, key }: a Cabinet door 10 x 20, a Locker door 10 x 40 (lockerDoorKey), a drawer front 38 x 6\n// (crateDrawerKey).\nexport function cabinetDoorCanvas(name, px = 12, makeCanvas) {\n  const r = resolve(name); if (!r || !r.m.boards) return null;\n  const { w, h, key } = r.m.boards, tw = w * px, th = h * px;\n  const cv = makeCanvas ? makeCanvas(tw * 2, th) : Object.assign(document.createElement('canvas'), { width: tw * 2, height: th });\n  const ctx = cv.getContext('2d'), memo = {};\n  ctx.setTransform(1, 0, 0, 1, 0, 0);\n  for (let j = 0; j < h; j++) for (let i = 0; i < w; i++) {\n    const k = key(i, j); ctx.fillStyle = memo[k] || (memo[k] = pixelColour(name, k, 't', IDLE)); ctx.fillRect(i * px, j * px, px, px);\n  }\n  ctx.fillStyle = pixelColour(name, 'D', 't', IDLE); ctx.fillRect(tw, 0, tw, th);\n  return cv;\n}\n"],"mappings":"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","names":[],"file":"machine-icons.mjs"}