dsh-team 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":["NEAR","round","useRef","useState","useCallback","css","css","useId","css","css","useState","useMemo","useRef","StateDot","css","createSnapshotStore"],"sources":["../src/client/icons.tsx","../src/client/room.ts","../src/client/stagecraft.ts","../src/client/walk.ts","../src/client/crew.tsx","../src/client/flora.tsx","../src/client/props.tsx","../src/client/TeamStage.tsx","../src/client/composer.tsx","../src/client/locales.ts","../src/client/index.ts"],"sourcesContent":["/**\n * ic_ds_team_* glyphs for the agent-team stage view. Same language as the\n * shipped icon set: 16px viewBox, single-color outline, fill=currentColor.\n */\nimport type { CSSProperties } from 'react'\n\nexport interface TeamIconProps {\n readonly size?: number\n readonly className?: string\n readonly style?: CSSProperties\n}\n\n/** Leader crown: three-point crown over a base band. */\nexport function IconTeamLeader16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.8 5.1 2.8 10.9 13.2 10.9 13.2 5.1 10.9 6.9 8 4.2 5.1 6.9 Z M1.8 4.05 C 1.8 3.45 2.55 3.15 2.95 3.6 L 5.2 6.05 8 3.35 10.8 6.05 13.05 3.6 C 13.45 3.15 14.2 3.45 14.2 4.05 L 14.2 11.4 C 14.2 11.68 13.98 11.9 13.7 11.9 L 2.3 11.9 C 2.02 11.9 1.8 11.68 1.8 11.4 Z M1.4 12.6 L 14.6 12.6 L 14.6 14.2 L 1.4 14.2 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n\n/** Team mailbox: envelope with a delivery arrow entering the slot. */\nexport function IconTeamMailbox16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.6 3.7 L 14.4 3.7 C 14.62 3.7 14.8 3.88 14.8 4.1 L 14.8 11.6 C 14.8 11.82 14.62 12 14.4 12 L 1.6 12 C 1.38 12 1.2 11.82 1.2 11.6 L 1.2 4.1 C 1.2 3.88 1.38 3.7 1.6 3.7 Z M2.2 5.35 L 8 9.15 13.8 5.35 L 13.8 10.9 L 2.2 10.9 Z M1.2 3.2 C 1.2 2.92 1.42 2.7 1.7 2.7 L 14.3 2.7 C 14.58 2.7 14.8 2.92 14.8 3.2 L 14.8 3.2 C 14.8 3.48 14.58 3.7 14.3 3.7 L 1.7 3.7 C 1.42 3.7 1.2 3.48 1.2 3.2 Z M6.5 1.1 C 6.78 1.1 7 1.32 7 1.6 L 7 2.3 L 5 2.3 L 5 1.6 C 5 1.32 5.22 1.1 5.5 1.1 Z M10.7 1.1 C 10.98 1.1 11.2 1.32 11.2 1.6 L 11.2 2.3 L 9.2 2.3 L 9.2 1.6 C 9.2 1.32 9.42 1.1 9.7 1.1 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n\n/** Team task: clipboard with a check stroke. */\nexport function IconTeamTask16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5 1.1 C 5.22 1.1 5.4 1.28 5.4 1.5 L 5.4 2.4 L 10.6 2.4 L 10.6 1.5 C 10.6 1.28 10.78 1.1 11 1.1 C 11.22 1.1 11.4 1.28 11.4 1.5 L 11.4 2.4 L 12.6 2.4 C 12.88 2.4 13.1 2.62 13.1 2.9 L 13.1 14.1 C 13.1 14.38 12.88 14.6 12.6 14.6 L 3.4 14.6 C 3.12 14.6 2.9 14.38 2.9 14.1 L 2.9 2.9 C 2.9 2.62 3.12 2.4 3.4 2.4 L 4.6 2.4 L 4.6 1.5 C 4.6 1.28 4.78 1.1 5 1.1 Z M3.7 3.4 L 3.7 13.8 L 12.3 13.8 L 12.3 3.4 L 3.7 3.4 Z M10.4 6.4 C 10.62 6.4 10.8 6.58 10.8 6.8 L 10.8 7.9 C 10.8 8.12 10.62 8.3 10.4 8.3 L 6.1 8.3 C 5.88 8.3 5.7 8.12 5.7 7.9 L 5.7 6.8 C 5.7 6.58 5.88 6.4 6.1 6.4 Z M5.6 8.9 L 7 10.3 L 9.7 7.6 L 8.65 6.55 L 7 8.2 L 6.65 7.85 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n/** Team peer link: two nodes joined by a horizontal link. */\nexport function IconTeamPeer16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.6 4.2 C 2.72 4.2 2 4.92 2 5.8 C 2 6.68 2.72 7.4 3.6 7.4 C 4.48 7.4 5.2 6.68 5.2 5.8 C 5.2 4.92 4.48 4.2 3.6 4.2 Z M1 5.8 C 1 4.36 2.16 3.2 3.6 3.2 C 5.04 3.2 6.2 4.36 6.2 5.8 C 6.2 7.24 5.04 8.4 3.6 8.4 C 2.16 8.4 1 7.24 1 5.8 Z M12.4 8.6 C 11.52 8.6 10.8 9.32 10.8 10.2 C 10.8 11.08 11.52 11.8 12.4 11.8 C 13.28 11.8 14 11.08 14 10.2 C 14 9.32 13.28 8.6 12.4 8.6 Z M9.8 10.2 C 9.8 8.76 10.96 7.6 12.4 7.6 C 13.84 7.6 15 8.76 15 10.2 C 15 11.64 13.84 12.8 12.4 12.8 C 10.96 12.8 9.8 11.64 9.8 10.2 Z M5.9 8.1 L 10.1 9.9 L 10.1 8.2 L 5.9 6.4 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n/** Team message: paper plane with a motion trail. */\nexport function IconTeamMessage16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.9 1.4 C 14.12 1.4 14.3 1.58 14.3 1.8 C 14.3 1.88 14.28 1.96 14.25 2.04 L 10.35 14.04 C 10.24 14.36 9.88 14.5 9.6 14.34 C 9.47 14.27 9.38 14.14 9.35 14 L 7.8 8.8 L 2.6 7.25 C 2.34 7.17 2.17 6.9 2.22 6.63 C 2.25 6.5 2.34 6.39 2.46 6.33 L 14.46 2.33 C 14.62 2.28 14.78 2.33 14.9 2.45 Z M4.5 6.4 L 7.9 7.7 L 8.6 11.9 L 11.8 3.4 Z M8.4 8.1 L 12.4 4.2 L 7.1 6.1 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n/** The team mark: three nodes around a hub. */\nexport function IconTeam16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 1.2 C 8.28 1.2 8.5 1.42 8.5 1.7 L 8.5 4 L 11.2 4 C 11.48 4 11.7 4.22 11.7 4.5 C 11.7 4.78 11.48 5 11.2 5 L 8.5 5 L 8.5 7.7 C 8.5 7.98 8.28 8.2 8 8.2 C 7.72 8.2 7.5 7.98 7.5 7.7 L 7.5 5 L 4.8 5 C 4.52 5 4.3 4.78 4.3 4.5 C 4.3 4.22 4.52 4 4.8 4 L 7.5 4 L 7.5 1.7 C 7.5 1.42 7.72 1.2 8 1.2 Z M2.6 9.4 C 2.88 9.4 3.1 9.62 3.1 9.9 L 3.1 11.5 L 4.7 11.5 C 4.98 11.5 5.2 11.72 5.2 12 C 5.2 12.28 4.98 12.5 4.7 12.5 L 3.1 12.5 L 3.1 14.1 C 3.1 14.38 2.88 14.6 2.6 14.6 C 2.32 14.6 2.1 14.38 2.1 14.1 L 2.1 12.5 L 0.5 12.5 C 0.22 12.5 0 12.28 0 12 C 0 11.72 0.22 11.5 0.5 11.5 L 2.1 11.5 L 2.1 9.9 C 2.1 9.62 2.32 9.4 2.6 9.4 Z M12.9 8.9 C 13.18 8.9 13.4 9.12 13.4 9.4 L 13.4 10.8 L 14.8 10.8 C 15.08 10.8 15.3 11.02 15.3 11.3 C 15.3 11.58 15.08 11.8 14.8 11.8 L 13.4 11.8 L 13.4 13.2 C 13.4 13.48 13.18 13.7 12.9 13.7 C 12.62 13.7 12.4 13.48 12.4 13.2 L 12.4 11.8 L 11 11.8 C 10.72 11.8 10.5 11.58 10.5 11.3 C 10.5 11.02 10.72 10.8 11 10.8 L 12.4 10.8 L 12.4 9.4 C 12.4 9.12 12.62 8.9 12.9 8.9 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n/** Mailbox-send glyph for the roster mail affordance. */\nexport function IconTeamSend16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.7 1.1 C 7.98 1.1 8.2 1.32 8.2 1.6 L 8.2 6.1 L 10.9 3.4 C 11.1 3.2 11.4 3.2 11.6 3.4 C 11.8 3.6 11.8 3.9 11.6 4.1 L 8.7 7 L 11.6 9.9 C 11.8 10.1 11.8 10.4 11.6 10.6 C 11.4 10.8 11.1 10.8 10.9 10.6 L 8.2 7.9 L 8.2 12.4 C 8.2 12.68 7.98 12.9 7.7 12.9 C 7.42 12.9 7.2 12.68 7.2 12.4 L 7.2 7.9 L 4.5 10.6 C 4.3 10.8 4 10.8 3.8 10.6 C 3.6 10.4 3.6 10.1 3.8 9.9 L 6.7 7 L 3.8 4.1 C 3.6 3.9 3.6 3.6 3.8 3.4 C 4 3.2 4.3 3.2 4.5 3.4 L 7.2 6.1 L 7.2 1.6 C 7.2 1.32 7.42 1.1 7.7 1.1 Z M0.8 13.6 C 1.08 13.6 1.3 13.82 1.3 14.1 C 1.3 14.38 1.08 14.6 0.8 14.6 C 0.52 14.6 0.3 14.38 0.3 14.1 C 0.3 13.82 0.52 13.6 0.8 13.6 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n\n\n/** Team workspace: a shared board with two pinned notes. */\nexport function IconTeamWorkspace16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.1 2.4 C 1.82 2.4 1.6 2.62 1.6 2.9 L 1.6 12.2 C 1.6 12.48 1.82 12.7 2.1 12.7 L 13.9 12.7 C 14.18 12.7 14.4 12.48 14.4 12.2 L 14.4 2.9 C 14.4 2.62 14.18 2.4 13.9 2.4 Z M2.6 3.4 L 13.4 3.4 L 13.4 11.7 L 2.6 11.7 Z M4.2 5 L 7.4 5 C 7.62 5 7.8 5.18 7.8 5.4 L 7.8 8 C 7.8 8.22 7.62 8.4 7.4 8.4 L 4.2 8.4 C 3.98 8.4 3.8 8.22 3.8 8 L 3.8 5.4 C 3.8 5.18 3.98 5 4.2 5 Z M9.1 5 L 11.8 5 C 12.02 5 12.2 5.18 12.2 5.4 C 12.2 5.62 12.02 5.8 11.8 5.8 L 9.1 5.8 C 8.88 5.8 8.7 5.62 8.7 5.4 C 8.7 5.18 8.88 5 9.1 5 Z M9.1 6.9 L 11.8 6.9 C 12.02 6.9 12.2 7.08 12.2 7.3 C 12.2 7.52 12.02 7.7 11.8 7.7 L 9.1 7.7 C 8.88 7.7 8.7 7.52 8.7 7.3 C 8.7 7.08 8.88 6.9 9.1 6.9 Z M4.2 9.5 L 11.8 9.5 C 12.02 9.5 12.2 9.68 12.2 9.9 C 12.2 10.12 12.02 10.3 11.8 10.3 L 4.2 10.3 C 3.98 10.3 3.8 10.12 3.8 9.9 C 3.8 9.68 3.98 9.5 4.2 9.5 Z M6.6 13.6 L 9.4 13.6 L 9.4 14.6 L 6.6 14.6 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n","/**\n * The room's own arithmetic: where every workstation stands, what its owner is\n * doing there, and how a member walks from one place on the floor to another.\n *\n * All of it is pure geometry over the roster — a place comes from a member's\n * index, never from a DOM measurement. A walk is planned on a visibility graph\n * built from the furniture itself: every desk, the sofa, the low table, the\n * cooler and the plant carry a rectangle of floor nobody may cross, the corners\n * of those rectangles are the only places worth turning at, and the shortest\n * chain of clear straight lines between them is the walk. Furniture moves, the\n * routes move with it; nothing is hard-coded to a lane.\n *\n * How the flat plan here becomes the box you look into is `stagecraft.ts`'s\n * job, not this module's: the floor is 0–100 square and knows nothing about\n * perspective.\n */\n\n/** A point on the floor, in the room's own 0–100 space. */\nexport interface Point {\n readonly x: number\n readonly y: number\n}\n\n/** A rectangle of the floor, in the same space. */\nexport interface Rect extends Point {\n readonly w: number\n readonly h: number\n}\n\n/**\n * A place a member stands: the point under its feet, how much clear floor it\n * has beside it (where a visitor stops to talk), and how large it draws there\n * — a desk further back stands smaller, so the room has depth.\n */\nexport interface Post extends Point {\n readonly gap: number\n readonly scale: number\n}\n\n/** One workstation, and the row of desks it belongs to. */\nexport interface Desk extends Post {\n readonly row: number\n readonly rows: number\n readonly columns: number\n}\n\n/** The floor the desks are laid out on. */\nexport const FIELD: Rect = { x: 7, y: 32, w: 60, h: 60 }\n\n/** The break corner, in the near right of the room. */\nexport const LOUNGE: Rect = { x: 69, y: 40, w: 29, h: 46 }\n\n/** The walkway across the front of the room: every cross-row trip uses it. */\nexport const CORRIDOR = 91\n\n/** The two vertical lanes down the sides of the desk field. */\nexport const LANES = { left: 3.5, right: 68.5 } as const\n\n/** How far in front of a desk its own aisle runs. */\nconst AISLE = 5.5\n\n/** Half the height of the floor one desk and its chair take up. */\nconst FOOT_HEIGHT = 4.4\n\n/** Two places closer than this are the same place. */\nconst NEAR = 0.5\n\n/** Rows of desks that differ by less than this share one aisle. */\nconst BAND = 4\n\n/** How much clear floor a walker keeps between itself and the furniture. */\nconst CLEARANCE = 2.4\n\n/** The strip along each wall a route never turns into. */\nconst MARGIN = 2.5\n\n/** Round geometry so a style, a test and a route all read the same number. */\nfunction round(value: number): number {\n return Math.round(value * 100) / 100\n}\n\n/** Keep a place on the floor rather than through a wall. */\nfunction clamp(value: number, low: number, high: number): number {\n return Math.min(high, Math.max(low, value))\n}\n\n/**\n * How many rows of desks a roster of this size stands in. Rows stay wide and\n * shallow: a room reads better across than back, and three rows is as deep as\n * the aisles between them can stay walkable.\n * @param count - how many members the room seats.\n * @returns the number of rows.\n */\nexport function rowsFor(count: number): number {\n if (count <= 3) return 1\n return count <= 8 ? 2 : 3\n}\n\n/**\n * One member's own desk: the same seat for the same roster index, every\n * render. Desks fill left to right and front rows draw larger than back ones.\n * @param index - the member's index on the roster (the leader takes the first).\n * @param count - how many members the room seats.\n * @returns the workstation.\n */\nexport function deskOf(index: number, count: number): Desk {\n const rows = rowsFor(count)\n const columns = Math.max(1, Math.ceil(count / rows))\n const row = Math.min(rows - 1, Math.floor(index / columns))\n const column = index % columns\n // A short last row is centered under the full ones rather than left-hung.\n const filled = Math.min(columns, count - row * columns)\n const slack = (columns - filled) / 2\n const cell = FIELD.w / columns\n const depth = rows === 1 ? 1 : row / (rows - 1)\n return {\n x: round(FIELD.x + cell * (column + slack + 0.5)),\n y: round(FIELD.y + FIELD.h * ((row + 0.5) / rows)),\n gap: round(cell / 2),\n scale: round((0.84 + 0.16 * depth) * (columns <= 3 ? 1 : columns === 4 ? 0.88 : 0.76)),\n row,\n rows,\n columns,\n }\n}\n\n/**\n * Where the break corner puts the nth member taking one. There are three\n * places to stand around the sofa, all of them in front of the furniture and\n * close enough to it to belong to it — a member on a break stands at the\n * coffee table, never in it, and never marooned on the floor below it — and a\n * fourth member shares the first.\n * @param index - the member's index among those on a break.\n * @returns the place it stands.\n */\nexport function breakAt(index: number): Post {\n const spots: readonly Point[] = [\n { x: LOUNGE.x + 8, y: LOUNGE.y + 29 },\n { x: LOUNGE.x + 20, y: LOUNGE.y + 34 },\n { x: LOUNGE.x + 14, y: LOUNGE.y + 23 },\n ]\n const spot = spots[index % spots.length] ?? spots[0]!\n return { x: round(spot.x), y: round(spot.y), gap: 7, scale: 0.9 }\n}\n\n/**\n * Where a visitor stops to talk: beside its host, on the side it arrived from,\n * one step in front so neither of them is hidden behind the other.\n * @param host - the place the member being visited stands.\n * @param fromX - where the visitor is coming from.\n * @returns the place the visitor stands while it talks.\n */\nexport function visitAt(host: Post, fromX: number): Point {\n const side = fromX < host.x ? -1 : 1\n return { x: round(clamp(host.x + side * host.gap, 4, 96)), y: round(host.y + 2) }\n}\n\n/** The floor one desk and its chair take up; a route must not cross it. */\nexport function footprintOf(post: Post): Rect {\n return {\n x: round(post.x - post.gap * 0.84),\n y: round(post.y - FOOT_HEIGHT),\n w: round(post.gap * 1.68),\n h: FOOT_HEIGHT * 2,\n }\n}\n\n/** The walkway in front of whatever stands at this depth. */\nexport function aisleFor(y: number): number {\n return round(Math.min(CORRIDOR, y + AISLE))\n}\n\n/* ------------------------------------------------------------- the furniture */\n\n/**\n * The standing furniture of the break corner, in the same 0–100 plan the desks\n * use. These are the floor rectangles the pieces occupy, which is what a walk\n * has to know about them; the stylesheet draws them inside the projected\n * lounge box at the matching fractions of it.\n */\nexport const ROOM_BLOCKS: readonly Rect[] = [\n /** The sofa, along the back of the corner. */\n { x: LOUNGE.x + 2.3, y: LOUNGE.y + 1, w: 14.5, h: 7 },\n /** The low table in front of it. */\n { x: LOUNGE.x + 4.9, y: LOUNGE.y + 11, w: 10, h: 4.5 },\n /** The plant, in the far corner. */\n { x: LOUNGE.x + 21, y: LOUNGE.y + 2, w: 6, h: 6 },\n /** The water cooler, against the right wall. */\n { x: LOUNGE.x + 22, y: LOUNGE.y + 12, w: 6, h: 6.5 },\n /** The filing cabinet and printer, along the left wall of the room. */\n { x: 0.5, y: 24, w: 6, h: 7 },\n]\n\n/**\n * Everything a walk goes around: the standing furniture of the room plus one\n * rectangle per workstation.\n * @param posts - the desks currently on the floor.\n * @returns every rectangle of floor a route must stay out of.\n */\nexport function obstaclesOf(posts: Iterable<Post>): readonly Rect[] {\n return [...ROOM_BLOCKS, ...[...posts].map(footprintOf)]\n}\n\n/** A rectangle grown by the clearance a walker keeps around it. */\nfunction inflate(rect: Rect, by: number): Rect {\n return { x: rect.x - by, y: rect.y - by, w: rect.w + by * 2, h: rect.h + by * 2 }\n}\n\n/** Whether a point lies inside a rectangle. */\nfunction inside(point: Point, rect: Rect): boolean {\n return point.x > rect.x && point.x < rect.x + rect.w\n && point.y > rect.y && point.y < rect.y + rect.h\n}\n\n/**\n * Whether a straight leg passes through the inside of a rectangle. Running\n * along an edge is not crossing it: a walker may graze the furniture it has\n * just left without the route being called blocked.\n */\nfunction crossesRect(from: Point, to: Point, rect: Rect): boolean {\n const edge = 0.01\n const left = rect.x + edge\n const right = rect.x + rect.w - edge\n const top = rect.y + edge\n const bottom = rect.y + rect.h - edge\n if (right <= left || bottom <= top) return false\n const dx = to.x - from.x\n const dy = to.y - from.y\n let enter = 0\n let leave = 1\n /** Clip the leg against one of the four slabs; false when it misses entirely. */\n const clip = (slope: number, distance: number): boolean => {\n if (Math.abs(slope) < 1e-9) return distance >= 0\n const cut = distance / slope\n if (slope < 0) {\n if (cut > leave) return false\n if (cut > enter) enter = cut\n } else {\n if (cut < enter) return false\n if (cut < leave) leave = cut\n }\n return true\n }\n return clip(-dx, from.x - left)\n && clip(dx, right - from.x)\n && clip(-dy, from.y - top)\n && clip(dy, bottom - from.y)\n && leave > enter + 1e-6\n}\n\n/** Which side lane a trip between these two columns goes around by. */\nfunction laneFor(fromX: number, toX: number): number {\n return (fromX + toX) / 2 < FIELD.x + FIELD.w / 2 ? LANES.left : LANES.right\n}\n\n/** Drop the legs a walk would not take: zero-length ones, and straight-throughs. */\nfunction prune(points: readonly Point[]): readonly Point[] {\n const out: Point[] = []\n for (const point of points) {\n const last = out[out.length - 1]\n if (last !== undefined && Math.abs(last.x - point.x) < NEAR && Math.abs(last.y - point.y) < NEAR) continue\n const before = out[out.length - 2]\n // Three points on one line are two legs of the same walk: keep the far end.\n if (\n last !== undefined && before !== undefined\n && ((Math.abs(before.x - last.x) < NEAR && Math.abs(last.x - point.x) < NEAR)\n || (Math.abs(before.y - last.y) < NEAR && Math.abs(last.y - point.y) < NEAR))\n ) {\n out.pop()\n }\n out.push(point)\n }\n return out\n}\n\n/**\n * The old lane route, kept as the way out when the graph cannot find one: out\n * to your own aisle, down a side lane, in along the destination's aisle. It\n * crosses furniture rather than leaving somebody stranded, which is the right\n * trade for a room that has been packed too tight to walk through.\n */\nfunction laneRoute(from: Point, to: Point): readonly Point[] {\n if (Math.abs(from.y - to.y) <= BAND) {\n const aisle = aisleFor(Math.max(from.y, to.y))\n return prune([from, { x: from.x, y: aisle }, { x: to.x, y: aisle }, to])\n }\n const lane = laneFor(from.x, to.x)\n const out = aisleFor(from.y)\n const back = aisleFor(to.y)\n return prune([\n from,\n { x: from.x, y: out },\n { x: lane, y: out },\n { x: lane, y: back },\n { x: to.x, y: back },\n to,\n ])\n}\n\n/** How far apart two places are. */\nfunction span(from: Point, to: Point): number {\n return Math.hypot(to.x - from.x, to.y - from.y)\n}\n\n/**\n * The corners worth turning at: each blocking rectangle's four corners, pushed\n * out by the clearance, dropped when they fall inside another piece or off the\n * floor. A shortest path around rectangles only ever turns at one of these.\n */\nfunction cornersOf(blocks: readonly Rect[]): readonly Point[] {\n const out: Point[] = []\n for (const block of blocks) {\n const grown = inflate(block, CLEARANCE)\n const candidates: Point[] = [\n { x: grown.x, y: grown.y },\n { x: grown.x + grown.w, y: grown.y },\n { x: grown.x, y: grown.y + grown.h },\n { x: grown.x + grown.w, y: grown.y + grown.h },\n ]\n for (const corner of candidates) {\n const spot = { x: clamp(corner.x, MARGIN, 100 - MARGIN), y: clamp(corner.y, MARGIN, 100 - MARGIN) }\n if (blocks.some(other => inside(spot, inflate(other, CLEARANCE * 0.6)))) continue\n out.push(spot)\n }\n }\n return out\n}\n\n/**\n * The walk from one place on the floor to another, as the corners it turns.\n *\n * A member leaves its own desk and walks around everything else: the route is\n * the shortest chain of clear straight lines between the corners of the\n * furniture. Whatever the walker is standing in — its own workstation — stops\n * blocking for the length of that trip, because you are allowed to walk out of\n * your own chair.\n * @param from - where the walk starts.\n * @param to - where it ends.\n * @param obstacles - the furniture on the floor; defaults to the fixed pieces.\n * @returns the corners, starting at `from` and ending at `to`.\n */\nexport function routeBetween(\n from: Point,\n to: Point,\n obstacles: readonly Rect[] = ROOM_BLOCKS,\n): readonly Point[] {\n if (Math.abs(from.x - to.x) < NEAR && Math.abs(from.y - to.y) < NEAR) return [from]\n // The two ends stand in their own furniture; that furniture cannot block the\n // trip out of it, or nobody would ever leave a desk.\n const blocks = obstacles.filter(rect => {\n const grown = inflate(rect, CLEARANCE * 0.5)\n return !inside(from, grown) && !inside(to, grown)\n })\n const clear = (a: Point, b: Point): boolean => !blocks.some(rect => crossesRect(a, b, rect))\n if (clear(from, to)) return [from, to]\n\n const nodes: Point[] = [from, ...cornersOf(blocks), to]\n const goal = nodes.length - 1\n const best = nodes.map(() => Infinity)\n const via = nodes.map(() => -1)\n const done = nodes.map(() => false)\n best[0] = 0\n for (;;) {\n let at = -1\n for (const [index, cost] of best.entries()) {\n if (!done[index] && cost < (at < 0 ? Infinity : best[at]!)) at = index\n }\n if (at < 0 || at === goal) break\n done[at] = true\n const here = nodes[at]!\n for (const [index, node] of nodes.entries()) {\n if (done[index] || index === at || !clear(here, node)) continue\n const cost = best[at]! + span(here, node)\n if (cost < best[index]!) {\n best[index] = cost\n via[index] = at\n }\n }\n }\n if (best[goal] === Infinity) return laneRoute(from, to)\n\n const path: Point[] = []\n for (let at = goal; at >= 0; at = via[at]!) {\n path.unshift(nodes[at]!)\n if (at === 0) break\n }\n return prune(path)\n}\n\n/** How far into a leg a turn starts rounding off. */\nconst SHOULDER = 2.2\n\n/** How many samples one rounded corner is drawn from. */\nconst ARC = 3\n\n/**\n * The same walk with its corners rounded off. A person turning a corner does\n * not stop dead and set off again at a right angle: each turn is replaced by a\n * short arc that starts before the corner and finishes after it, cut back\n * whenever the legs are too short to give it room.\n * @param points - the corners of the walk.\n * @param blocks - furniture the rounded corner still may not cut through.\n * @returns the walk, as points to be followed in a straight line between.\n */\nexport function smooth(points: readonly Point[], blocks: readonly Rect[] = []): readonly Point[] {\n if (points.length < 3) return points\n const out: Point[] = [points[0]!]\n for (let index = 1; index < points.length - 1; index += 1) {\n const before = points[index - 1]!\n const corner = points[index]!\n const after = points[index + 1]!\n const back = Math.min(SHOULDER, span(before, corner) * 0.4)\n const on = Math.min(SHOULDER, span(corner, after) * 0.4)\n if (back < 0.2 || on < 0.2) {\n out.push(corner)\n continue\n }\n const start = along(corner, before, back)\n const end = along(corner, after, on)\n if (blocks.some(rect => crossesRect(start, end, rect))) {\n out.push(corner)\n continue\n }\n out.push(start)\n for (let step = 1; step < ARC; step += 1) out.push(bend(start, corner, end, step / ARC))\n out.push(end)\n }\n out.push(points[points.length - 1]!)\n return out\n}\n\n/** The point this far from `corner` along the line toward `toward`. */\nfunction along(corner: Point, toward: Point, distance: number): Point {\n const length = span(corner, toward) || 1\n return {\n x: round(corner.x + ((toward.x - corner.x) / length) * distance),\n y: round(corner.y + ((toward.y - corner.y) / length) * distance),\n }\n}\n\n/** One sample of the quadratic curve that rounds a corner off. */\nfunction bend(start: Point, corner: Point, end: Point, at: number): Point {\n const rest = 1 - at\n return {\n x: round(rest * rest * start.x + 2 * rest * at * corner.x + at * at * end.x),\n y: round(rest * rest * start.y + 2 * rest * at * corner.y + at * at * end.y),\n }\n}\n\n/** How long a walk of this length takes, at a walking pace. */\nexport function walkMs(distance: number, speed = 34): number {\n return Math.max(140, Math.round((distance / speed) * 1000))\n}\n\n/** The whole length of a walk, corner to corner. */\nexport function lengthOf(points: readonly Point[]): number {\n let total = 0\n for (let index = 1; index < points.length; index += 1) total += span(points[index - 1]!, points[index]!)\n return round(total)\n}\n\n/* ------------------------------------------------------------- idle errands */\n\n/**\n * The places a member with nothing on its plate drifts off to: the cooler, the\n * two windows, and the plant in the corner. Somewhere to be that is not a\n * chair — an office where nobody ever gets up is a diorama.\n */\nexport const HAUNTS: readonly Post[] = [\n /** At the water cooler, filling a cup. */\n { x: 93, y: 58, gap: 5, scale: 0.92 },\n /** At the left-hand window, looking out. */\n { x: 34, y: 20, gap: 6, scale: 0.86 },\n /** At the right-hand window. */\n { x: 58, y: 20, gap: 6, scale: 0.86 },\n /** Stretching by the plant. */\n { x: 88, y: 47, gap: 5, scale: 0.9 },\n]\n\n/** A stable number in 0–1 for a pair of integers: the same seat, the same trip. */\nfunction hash(a: number, b: number): number {\n let value = Math.imul(a + 1, 374761393) + Math.imul(b + 1, 668265263)\n value = Math.imul(value ^ (value >>> 13), 1274126177)\n return ((value ^ (value >>> 16)) >>> 0) / 4294967296\n}\n\n/**\n * Where a member with nothing to do wanders on the nth turn of the room's\n * clock, if it wanders anywhere at all. Most turns it stays where it is: an\n * office in which everybody is always on their feet is as wrong as one in\n * which nobody ever is.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @param tick - which turn of the room's clock this is.\n * @returns the place it drifts to, or nothing if it stays put.\n */\nexport function wanderOf(seat: number, tick: number): Post | undefined {\n // The first turn keeps everybody put: nobody arrives in the room already\n // out of its chair.\n if (tick === 0) return undefined\n if (hash(seat, tick) < 0.62) return undefined\n const pick = Math.floor(hash(seat, tick + 7919) * HAUNTS.length)\n const haunt = HAUNTS[Math.min(HAUNTS.length - 1, pick)]\n if (haunt === undefined) return undefined\n // Two members who drift to the same haunt stand beside each other rather than\n // inside each other: each seat keeps its own place at the cooler.\n const step = ((seat + 1) % 3) - 1\n return { ...haunt, x: round(clamp(haunt.x + step * 4.5, MARGIN, 100 - MARGIN)) }\n}\n\n/** How far apart two members standing still push each other. */\nconst PERSONAL = 5\n\n/**\n * The same places with nobody standing inside anybody else. Two members sent\n * to the same corner would otherwise draw one on top of the other; one pass of\n * separation is enough to tell them apart without moving either far enough to\n * leave the spot it was sent to.\n * @param spots - where each member has been told to stand, in roster order.\n * @returns the same list, nudged apart.\n */\nexport function spread(spots: readonly Point[]): readonly Point[] {\n const out = spots.map(spot => ({ x: spot.x, y: spot.y }))\n for (const [index, spot] of out.entries()) {\n for (let other = index + 1; other < out.length; other += 1) {\n const mate = out[other]!\n const apart = span(spot, mate)\n if (apart >= PERSONAL) continue\n // Two members sent to exactly one point are parted along the floor, not\n // along a zero-length line: the tie is broken by roster order.\n const push = (PERSONAL - apart) / 2\n const dx = apart < 0.01 ? 1 : (mate.x - spot.x) / apart\n const dy = apart < 0.01 ? 0 : (mate.y - spot.y) / apart\n spot.x = clamp(spot.x - dx * push, MARGIN, 100 - MARGIN)\n spot.y = clamp(spot.y - dy * push, MARGIN, 100 - MARGIN)\n mate.x = clamp(mate.x + dx * push, MARGIN, 100 - MARGIN)\n mate.y = clamp(mate.y + dy * push, MARGIN, 100 - MARGIN)\n }\n }\n return out.map(spot => ({ x: round(spot.x), y: round(spot.y) }))\n}\n\n/** The last thing that happened to one member in the visible mailbox tail. */\nexport type Touch = 'got' | 'sent' | 'reported'\n\n/** Where a member is: at its own desk, or taking a break in the corner. */\nexport type Station = 'desk' | 'break'\n\n/** What a member is doing there. */\nexport type Pose = 'working' | 'reading' | 'idle'\n\n/**\n * Whether a member is at its desk or on a break. A member keeps its own desk\n * for good — it only leaves it once its own report is the last thing it did\n * and nothing open is left with its name on it.\n * @param running - whether the member is mid-turn.\n * @param touch - the last mailbox event that named it, if any.\n * @param openTasks - how many unfinished tasks name it as assignee.\n * @returns where it stands.\n */\nexport function stationFor(running: boolean, touch: Touch | undefined, openTasks: number): Station {\n if (running || touch === 'got') return 'desk'\n return touch === 'reported' && openTasks === 0 ? 'break' : 'desk'\n}\n\n/**\n * What a member is doing where it stands: mid-turn it works, with mail or open\n * work on its plate it reads, and with neither it idles.\n * @param running - whether the member is mid-turn.\n * @param touch - the last mailbox event that named it, if any.\n * @param openTasks - how many unfinished tasks name it as assignee.\n * @returns the pose.\n */\nexport function poseFor(running: boolean, touch: Touch | undefined, openTasks: number): Pose {\n if (running) return 'working'\n return touch === 'got' || openTasks > 0 ? 'reading' : 'idle'\n}\n","/**\n * The room's perspective: how a place on the floor plan becomes a place on the\n * screen.\n *\n * `room.ts` owns a flat 0–100 floor plan — where the desks are, where the\n * aisles run, what a walk avoids — and knows nothing about how the room is\n * drawn. This module is the other half: it takes a point on that plan and puts\n * it inside a box you are looking into, where the floor narrows toward a back\n * wall, the two side walls close in with it, and something standing further\n * back draws smaller because the floor under it is narrower there.\n *\n * The screen space is 0–100 in each axis as well, so every style stays a plain\n * `left: X%; top: Y%` and nothing in the room has to be measured.\n */\nimport type { CSSProperties } from 'react'\nimport type { Point } from './room.ts'\n\n/**\n * The shape of the box, as fractions of the stage.\n *\n * `far` is how wide the floor still is where it meets the back wall, `top` and\n * `bottom` are the band of the stage the floor covers, and `bend` is how fast\n * depth runs away from the viewer: below 1 the far half of the plan is squeezed\n * into a thin strip at the back, which is what makes floorboards bunch up.\n */\nexport const SHELL = {\n far: 0.72,\n top: 23,\n bottom: 100,\n bend: 0.55,\n} as const\n\n/** How high the back wall stands, as a fraction of the stage. */\nexport const WALL_TOP = 3\n\n/** A place on the screen: where it goes, and how large it draws there. */\nexport interface Screen {\n /** Percent across the stage. */\n readonly left: number\n /** Percent down the stage. */\n readonly top: number\n /** How wide the floor still is at this depth: one number for every size. */\n readonly scale: number\n}\n\n/** Round geometry so a style, a test and a route all read the same number. */\nfunction round(value: number): number {\n return Math.round(value * 100) / 100\n}\n\n/**\n * How far into the room a plan depth lies, after perspective: 0 at the near\n * edge of the floor, 1 where it meets the back wall. The plan runs the other\n * way — y grows toward the viewer — and the curve is the perspective divide,\n * so equal steps back cover less and less of the screen.\n * @param y - the plan depth, 0 at the back wall and 100 at the near edge.\n * @returns the screen depth, 0 near and 1 far.\n */\nexport function depthOf(y: number): number {\n const back = Math.min(1, Math.max(0, 1 - y / 100))\n return back / (back + SHELL.bend * (1 - back))\n}\n\n/**\n * How wide the floor is at a screen depth, as a fraction of the stage: 1 across\n * the near edge, `SHELL.far` where it meets the back wall.\n * @param depth - the screen depth, 0 near and 1 far.\n * @returns the fraction of the stage the floor spans there.\n */\nexport function widthAt(depth: number): number {\n return 1 + (SHELL.far - 1) * depth\n}\n\n/**\n * One place on the floor plan, as a place on the screen. The scale it comes\n * back with is the floor's own narrowing at that depth, so a member, its desk\n * and the aisle it walks all shrink by exactly the same amount and nothing\n * drifts off its own feet.\n * @param point - the place on the 0–100 floor plan.\n * @returns where it draws, and how large.\n */\nexport function project(point: Point): Screen {\n const depth = depthOf(point.y)\n const scale = widthAt(depth)\n return {\n left: round(50 + (point.x - 50) * scale),\n top: round(SHELL.bottom - (SHELL.bottom - SHELL.top) * depth),\n scale: round(scale),\n }\n}\n\n/**\n * Where a fixture on the back wall goes across the stage. The wall stands at\n * the far end of the floor, so it is only `SHELL.far` of the stage wide: a\n * window hung at plan x lands here, which is what lets a member walk up to the\n * window it is actually standing under.\n * @param x - the place across the floor plan the fixture hangs above.\n * @returns the percent across the stage.\n */\nexport function onWall(x: number): number {\n return round(50 + (x - 50) * SHELL.far)\n}\n\n/**\n * The box's own numbers, as custom properties. The shell's five faces are cut\n * out of `clip-path` polygons, and the polygons and this module's arithmetic\n * have to agree to the percent or the walls will not meet the floor — so they\n * read the same variables rather than each carrying their own copy.\n * @returns the style to hang on the room.\n */\nexport function shellVars(): CSSProperties {\n const inset = round(((1 - SHELL.far) / 2) * 100)\n return {\n '--team-far-inset': `${inset}%`,\n '--team-floor-top': `${SHELL.top}%`,\n '--team-wall-top': `${WALL_TOP}%`,\n '--team-far-width': `${round(SHELL.far * 100)}%`,\n } as CSSProperties\n}\n","/**\n * Walking, as one continuous motion.\n *\n * `routeBetween` gives the corners of a trip and `smooth` rounds them off; this\n * hook walks that line. It parametrises the whole path by arc length and eases\n * once across the trip — a member leans into its first step and slows into its\n * last, rather than stopping dead at every corner — and it drives a gait phase\n * off distance covered, so the legs swing at the speed the member is actually\n * moving instead of at a fixed rate.\n *\n * The frame loop writes `left`, `top`, the depth and the gait STRAIGHT onto the\n * node. React is told only when the member turns or stops, which is a handful\n * of renders in a whole trip; the position itself never round-trips through\n * state, so a roomful of members walking at once costs one style write each per\n * frame instead of a render tree each.\n */\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n lengthOf, routeBetween, smooth, walkMs, wanderOf,\n type Point, type Post, type Rect,\n} from './room.ts'\nimport { project } from './stagecraft.ts'\n\n/**\n * Which way a member is turned. `front` faces the room, `away` is somebody\n * walking off into it, and `back` is the different thing of sitting at your own\n * computer — the stylesheet poses those two apart.\n */\nexport type Facing = 'left' | 'right' | 'front' | 'away' | 'back'\n\n/** What the room needs back: where to hang the member, and how it is posed. */\nexport interface Gait {\n /** Attach to the element that stands on the floor. */\n readonly ref: (node: HTMLElement | null) => void\n readonly facing: Facing\n readonly walking: boolean\n}\n\n/** Two places closer than this are the same place. */\nconst NEAR = 0.5\n\n/** How much floor one full swing of the legs covers. */\nconst STRIDE = 13\n\n/** Whether the reader asked for no motion. */\nfunction still(): boolean {\n return typeof window !== 'undefined'\n && typeof window.matchMedia === 'function'\n && window.matchMedia('(prefers-reduced-motion: reduce)').matches\n}\n\n/** The clock the frame loop runs on, where there is one. */\nfunction now(): number {\n return typeof performance === 'undefined' ? Date.now() : performance.now()\n}\n\n/** Which way a step is headed: across the room, or into and out of it. */\nfunction facingOf(dx: number, dy: number): Facing {\n if (Math.abs(dx) >= Math.abs(dy)) return dx >= 0 ? 'right' : 'left'\n return dy > 0 ? 'front' : 'away'\n}\n\n/** Ease across the whole trip: lean into the first step, slow into the last. */\nfunction ease(at: number): number {\n return at * at * (3 - 2 * at)\n}\n\n/**\n * Walk a member from where it is to where it should be.\n *\n * A target that changes mid-trip is re-planned from the exact place the member\n * has reached, not from the end of some leg it was committed to: it turns\n * around where it stands.\n * @param home - where the member starts, before it has walked anywhere.\n * @param target - where it should be standing now.\n * @param obstacles - the furniture on the floor, to walk around.\n * @param base - the member's own size at this station, before perspective.\n * @returns the ref to hang it on, and the pose it is in.\n */\nexport function useWalk(\n home: Point,\n target: Point,\n obstacles: readonly Rect[],\n base: number,\n): Gait {\n const node = useRef<HTMLElement | null>(null)\n /** Where the member is right now, to the frame. */\n const at = useRef<Point>({ x: home.x, y: home.y })\n /** How far into a stride the legs are, kept across trips so they never jump. */\n const gait = useRef(0)\n const facing = useRef<Facing>('front')\n const scale = useRef(base)\n scale.current = base\n const [pose, setPose] = useState<{ readonly facing: Facing, readonly walking: boolean }>(\n { facing: 'front', walking: false },\n )\n\n /** Put the member on the floor: the one place position is ever written. */\n const place = useCallback((point: Point): void => {\n const element = node.current\n if (element === null) return\n const screen = project(point)\n element.style.left = `${screen.left}%`\n element.style.top = `${screen.top}%`\n element.style.setProperty('--team-scale', `${screen.scale * scale.current}`)\n element.style.setProperty('--team-depth', `${Math.round(point.y)}`)\n element.style.setProperty('--team-gait', `${gait.current}`)\n }, [])\n\n const hang = useCallback((element: HTMLElement | null): void => {\n node.current = element\n place(at.current)\n }, [place])\n\n // A member that is standing still still has to be re-hung when the room\n // rescales it — a new teammate arrives and every desk shrinks.\n useEffect(() => { place(at.current) }, [place, base])\n\n useEffect(() => {\n const start = at.current\n if (Math.abs(start.x - target.x) < NEAR && Math.abs(start.y - target.y) < NEAR) return undefined\n if (still()) {\n at.current = { x: target.x, y: target.y }\n place(at.current)\n setPose({ facing: 'front', walking: false })\n return undefined\n }\n\n const path = smooth(routeBetween(start, target, obstacles), obstacles)\n const total = lengthOf(path)\n if (total < NEAR) {\n at.current = { x: target.x, y: target.y }\n place(at.current)\n return undefined\n }\n /** Distance along the path at which each corner is reached. */\n const marks: number[] = [0]\n for (let index = 1; index < path.length; index += 1) {\n marks.push(marks[index - 1]! + Math.hypot(\n path[index]!.x - path[index - 1]!.x,\n path[index]!.y - path[index - 1]!.y,\n ))\n }\n const span = walkMs(total)\n const began = now()\n const from = gait.current\n let frame = 0\n\n const tick = (): void => {\n const through = Math.min(1, (now() - began) / span)\n const covered = ease(through) * total\n let leg = 1\n while (leg < marks.length - 1 && marks[leg]! < covered) leg += 1\n const back = path[leg - 1]!\n const ahead = path[leg]!\n const run = marks[leg]! - marks[leg - 1]!\n const into = run < 1e-6 ? 1 : (covered - marks[leg - 1]!) / run\n at.current = {\n x: back.x + (ahead.x - back.x) * into,\n y: back.y + (ahead.y - back.y) * into,\n }\n gait.current = (from + covered / STRIDE) % 1\n place(at.current)\n\n const turned = facingOf(ahead.x - back.x, ahead.y - back.y)\n if (turned !== facing.current) {\n facing.current = turned\n setPose({ facing: turned, walking: true })\n }\n if (through < 1) {\n frame = requestAnimationFrame(tick)\n return\n }\n at.current = { x: target.x, y: target.y }\n place(at.current)\n facing.current = 'front'\n setPose({ facing: 'front', walking: false })\n }\n\n facing.current = facingOf(path[1]!.x - path[0]!.x, path[1]!.y - path[0]!.y)\n setPose({ facing: facing.current, walking: true })\n frame = requestAnimationFrame(tick)\n return () => { cancelAnimationFrame(frame) }\n }, [target.x, target.y, obstacles, place])\n\n return { ref: hang, facing: pose.facing, walking: pose.walking }\n}\n\n/** How long the room waits between one member's idle errands. */\nconst WANDER_MS = 45_000\n\n/**\n * Where a member with nothing to do has drifted off to right now. The clock\n * turns on its own and `wanderOf` decides — most turns it decides the member\n * stays exactly where it is, which is what makes the one that gets up worth\n * looking at. The first turn always keeps it put: nobody arrives at the room\n * already out of its chair.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @param loose - whether the member is free to wander at all.\n * @returns the place it has wandered to, if anywhere.\n */\nexport function useIdleErrand(seat: number, loose: boolean): Post | undefined {\n const [tick, setTick] = useState(0)\n useEffect(() => {\n if (!loose || still()) return undefined\n // Members do not all get up on the same beat: each seat's clock is offset.\n const timer = setInterval(() => { setTick(count => count + 1) }, WANDER_MS + ((seat + 1) % 5) * 1_700)\n return () => { clearInterval(timer) }\n }, [seat, loose])\n return loose ? wanderOf(seat, tick) : undefined\n}\n","/**\n * The team's cast: one crew member per seat, and a different sea-creature\n * hood per seat, so a member is recognizable in the room before its nameplate\n * is read.\n *\n * Every character is a person — shoes, trousers, a shirt, arms at its sides —\n * wearing a whale or shark as a hood: the hood is drawn in profile, snout\n * forward and flukes over the back of the head, because a whale reads as a\n * whale from the side and as a blob from the front. The face looks out from\n * under its chin. A kind is what the hood adds (a dorsal fin, a tusk, a\n * blowhole spout, a blocky brow, gill slits), never a different body: one\n * figure, seven hoods. Legs and arms are their own groups so the stylesheet\n * can swing them while the member walks.\n *\n * Under the hood everybody is their own person: a hairstyle, a hair colour, a\n * skin tone, an outfit, shoes and one piece of gear, all picked by seat index\n * so a member looks the same on every render and no two neighbours are twins.\n * Tone and skin ride data attributes rather than inline colours, so the theme\n * still owns the palette.\n *\n * A member at work is drawn from BEHIND: the screen faces the room, so its\n * owner faces the screen. The back view keeps the same figure and turns the\n * hood the other way — snout toward the monitor on its left — so the hood is\n * still read in profile while the human face, which nobody needs while somebody\n * is typing, is simply not there to draw.\n */\nimport type { CSSProperties } from 'react'\nimport css from './TeamStage.module.css'\n\n/** The sea-creature hoods a seat can wear, in the order seats take them. */\nexport const MASKS = ['blue', 'orca', 'humpback', 'narwhal', 'beluga', 'sperm', 'shark'] as const\n\n/** One kind of sea-creature hood. */\nexport type MaskKind = typeof MASKS[number]\n\n/** Hue shifts of the room's colour, one per seat: stable, distinct, theme-owned. */\nconst ACCENTS = [0, 46, 96, 148, 200, 252, 296, 330] as const\n\n/**\n * The seat's own accent, as a style object: the room's one saturated token\n * turned by this much, never a literal color, so a theme change carries every\n * member along. The leader keeps the unturned blue its whale is named for, and\n * the teammates start one step past it.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the custom property the stage styles read.\n */\nexport function accentOf(seat: number): CSSProperties {\n const shift = seat < 0 ? 0 : ACCENTS[(seat + 1) % ACCENTS.length] ?? 0\n return { '--team-accent-shift': `${shift}deg` } as CSSProperties\n}\n\n/** Pick the nth entry of a wardrobe rack, counting the leader as the first. */\nfunction pick<T>(rack: readonly T[], seat: number): T {\n return rack[(Math.max(0, seat + 1)) % rack.length] ?? rack[0]!\n}\n\n/**\n * The hood one seat wears: the leader takes the blue whale the room is built\n * around, teammates take the rest in roster order.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function maskOf(seat: number): MaskKind {\n if (seat < 0) return 'blue'\n return pick(MASKS, seat)\n}\n\n/** The outfits a seat can wear, in the order seats take them. */\nexport const OUTFITS = [\n 'shirt', 'tee', 'sweater', 'polo', 'hoodie', 'tunic', 'vest', 'jacket', 'stripes', 'dungarees',\n] as const\n\n/** One kind of outfit. */\nexport type OutfitKind = typeof OUTFITS[number]\n\n/** The shoes a seat can wear, in the order seats take them. */\nexport const SHOE_KINDS = ['sneaker', 'boot', 'loafer', 'hightop', 'sandal'] as const\n\n/** One kind of shoe. */\nexport type ShoeKind = typeof SHOE_KINDS[number]\n\n/** The hairstyles a seat can wear, in the order seats take them. */\nexport const HAIRS = ['fringe', 'bun', 'curls', 'crop', 'ponytail', 'buzz'] as const\n\n/** One hairstyle. */\nexport type HairKind = typeof HAIRS[number]\n\n/** The one thing a member carries or wears besides its clothes. */\nexport const GEARS = ['none', 'glasses', 'headphones', 'scarf', 'lanyard', 'backpack'] as const\n\n/** One piece of gear. */\nexport type GearKind = typeof GEARS[number]\n\n/** How many hair colours the stylesheet keeps. */\nconst HAIR_TONES = 5\n\n/** How many skin tones the stylesheet keeps. */\nconst SKIN_TONES = 4\n\n/**\n * The outfit one seat wears: the leader keeps the tailored shirt, teammates\n * take the rest in roster order, so a full team is not a row of identical\n * shirts.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function outfitOf(seat: number): OutfitKind {\n if (seat < 0) return 'shirt'\n return pick(OUTFITS, seat)\n}\n\n/**\n * The shoes one seat wears; each pair is tinted by the seat's own accent.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function shoeOf(seat: number): ShoeKind {\n if (seat < 0) return 'sneaker'\n return pick(SHOE_KINDS, seat)\n}\n\n/**\n * The hairstyle one seat wears. It is picked off a different-length rack to\n * the outfits and the hoods, so the three cycles fall out of step and two\n * members never end up dressed identically from head to foot.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function hairOf(seat: number): HairKind {\n if (seat < 0) return 'crop'\n return pick(HAIRS, seat)\n}\n\n/**\n * Which of the stylesheet's hair colours this seat has. Hair is NOT tinted by\n * the seat accent: rotating the room's blue would give a team with green and\n * magenta hair, and the accent is already carried by the hood, the mug and the\n * shoes.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the tone index the stylesheet keys on.\n */\nexport function toneOf(seat: number): number {\n return (Math.max(0, seat + 1) * 3) % HAIR_TONES\n}\n\n/**\n * Which of the stylesheet's skin tones this seat has.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the tone index the stylesheet keys on.\n */\nexport function skinOf(seat: number): number {\n return (Math.max(0, seat + 1) * 5) % SKIN_TONES\n}\n\n/**\n * The one thing this seat wears besides its clothes. A third of the team\n * carries nothing: gear reads as a detail only while it is not universal.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function gearOf(seat: number): GearKind {\n if (seat < 0) return 'lanyard'\n return pick(GEARS, seat)\n}\n\n/** One shoe path, mirrored per side. */\nfunction shoePath(kind: ShoeKind, side: 'left' | 'right'): string {\n const flip = side === 'right'\n const inner = flip ? 32.9 : 31.1\n const outer = flip ? 45.2 : 18.8\n const toe = flip ? 41.5 : 22.5\n const way = flip ? -1 : 1\n if (kind === 'boot') {\n return `M${toe} 79 H${inner} V95 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.4 L${outer} 94 L${outer + way * 2} 92.6 L${toe} 91 Z`\n }\n if (kind === 'loafer') {\n return `M${toe} 94 H${inner} V97 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.4 Q${outer} 96.8 ${outer + way * 2} 95.9 L${toe} 94.8 Z`\n }\n if (kind === 'hightop') {\n return `M${toe} 86 H${inner} V96 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.2 Q${outer} 96 ${outer + way * 2} 95 L${toe} 93.6 Z`\n }\n if (kind === 'sandal') {\n return `M${toe} 95.5 H${inner} V97.5 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.6 Q${outer} 97.4 ${outer + way * 2} 96.8 L${toe} 96.2 Z`\n }\n return `M${toe} 91 H${inner} V97 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.4 Q${outer} 96.6 ${outer + way * 2} 95.6 L${toe} 94.6 Z`\n}\n\n/** The sole edge under a shoe, and the laces or straps across it. */\nfunction shoeTrim(kind: ShoeKind, side: 'left' | 'right') {\n const flip = side === 'right'\n const at = flip ? 37 : 27\n if (kind === 'sandal') {\n return <path className={css.crewShoeTrim} d={`M${at - 4} 97.5 L${at + 4} 96.5 M${at - 4} 99 L${at + 4} 98.2`} />\n }\n if (kind === 'boot') {\n return <path className={css.crewShoeTrim} d={`M${at - 4.2} 83 H${at + 4.2} M${at - 4.2} 88 H${at + 4.2}`} />\n }\n if (kind === 'hightop') {\n return <path className={css.crewShoeTrim} d={`M${at - 3.6} 89 H${at + 3.6} M${at - 3.6} 92.5 H${at + 3.6}`} />\n }\n if (kind === 'loafer') return <path className={css.crewShoeTrim} d={`M${at - 3.4} 96 H${at + 3.4}`} />\n return <path className={css.crewShoeTrim} d={`M${at - 3.6} 93.4 H${at + 3.6} M${at - 3} 95.6 H${at + 3}`} />\n}\n\n/** The whale worn as a hood: flukes at the left, snout out to the right. */\nconst WHALE = 'M10 10 C10 -6 21 -16 37 -16 C51 -16 61 -8 65 2 '\n + 'C66.5 5 65 9 61 9.5 C52 11 44 15 36 20 C28 25 19 26 14 24 '\n + 'C10.5 22 10 17 10 10 Z'\n\n/** The flukes, one lobe over the back of the head and one below it. */\nconst FLUKES = 'M11 3 C5 -1 1 -7 0 -14 C6 -11 10 -6 13 -1 Z '\n + 'M10 14 C5 17 1 22 -1 28 C5 27 10 23 13.5 18 Z'\n\n/** The pale underside, from the throat to the tip of the jaw. */\nconst BELLY = 'M15 21 C21 24 29 23 36 19 C43 15 52 10.5 60 9.5 '\n + 'C52 15 44 19 36 22.5 C28 26 19 26 15 21 Z'\n\n/** The shirt: shoulders, a straight body, a hem over the hips. */\nconst SHIRT = 'M32 46 C40 46 45.5 50.5 46.5 58.5 L47.5 76 C47.5 79 45.8 80.5 42.8 80.5 '\n + 'L21.2 80.5 C18.2 80.5 16.5 79 16.5 76 L17.5 58.5 C18.5 50.5 24 46 32 46 Z'\n\n/** The seam over each shoulder, where the sleeve is set into the body. */\nconst SHOULDER_SEAM = 'M21.5 51.5 C23.5 55 24 60 24 64 M42.5 51.5 C40.5 55 40 60 40 64'\n\n/** The fold the hem falls into over the hips. */\nconst HEM_FOLD = 'M18 77.5 C24 79.5 40 79.5 46 77.5'\n\n/**\n * The back of the head is not a bald oval: whichever way a member is turned it\n * has hair on it, cut in one of the room's six styles. The cap is the mass\n * that shows either way; the back view fills in everything below it.\n */\nconst CAPS: Record<HairKind, string> = {\n fringe: 'M18 30 C18 18 23 11 32 11 C41 11 46 18 46 30 C46 33 44.5 35 42.5 35 '\n + 'C40 35 39 32 36 32 C33 32 32 35 29 35 C26 35 25 32 23 32 C21 32 19.5 34 18 34 Z',\n crop: 'M18.5 28 C18.5 17.5 24 11 32 11 C40 11 45.5 17.5 45.5 28 C45.5 30.4 44.4 31.2 42.8 30.4 '\n + 'C40.6 29.3 39.4 26 32 26 C24.6 26 23.4 29.3 21.2 30.4 C19.6 31.2 18.5 30.4 18.5 28 Z',\n buzz: 'M19 27 C19 17.5 24.5 11.5 32 11.5 C39.5 11.5 45 17.5 45 27 C45 28.6 44 29 43 28.2 '\n + 'C40.5 26 37 24.6 32 24.6 C27 24.6 23.5 26 21 28.2 C20 29 19 28.6 19 27 Z',\n curls: 'M18 29 C18 18 23 11 32 11 C41 11 46 18 46 29 C46 32 44 33 42.6 31.6 '\n + 'C41.4 30.4 40.4 31.6 39 31 C37.6 30.4 37.4 28.6 35.6 28.6 C33.8 28.6 33.4 30.6 32 30.6 '\n + 'C30.6 30.6 30.2 28.6 28.4 28.6 C26.6 28.6 26.4 30.4 25 31 C23.6 31.6 22.6 30.4 21.4 31.6 '\n + 'C20 33 18 32 18 29 Z',\n bun: 'M18.5 29 C18.5 18 23.5 11 32 11 C40.5 11 45.5 18 45.5 29 C45.5 31.5 44 33 42 32 '\n + 'C40 31 39 27 32 27 C25 27 24 31 22 32 C20 33 18.5 31.5 18.5 29 Z',\n ponytail: 'M18.5 30 C18.5 18 23.5 11 32 11 C40.5 11 45.5 18 45.5 30 C45.5 32.5 44 33.5 42 32.5 '\n + 'C40 31.5 39 27.5 32 27.5 C25 27.5 24 31.5 22 32.5 C20 33.5 18.5 32.5 18.5 30 Z',\n}\n\n/** The mass of hair that only shows when you are looking at the back of a head. */\nconst NAPE = 'M19 27 C19 39.5 24 44.5 32 44.5 C40 44.5 45 39.5 45 27 Z'\n\n/** A soft highlight across the crown of the hair. */\nconst HAIR_SHINE = 'M24 21 C26 16 29 13.5 33 13 C30.5 16.5 28.5 20 27.5 24 Z'\n\n/** A cool highlight along the whale hood's back, so it reads as a smooth hood. */\nconst HOOD_SHEEN = 'M17 -3 C18 -10 23 -15 30 -16 C25 -12 21 -8 19 -2 Z'\n\n/** A soft shadow under the whale's jaw, where the hood meets the collar. */\nconst HOOD_SHADE = 'M14 21 C20 24.5 28 24.5 35 21.5 C42 18.5 50 14 59 11 '\n + 'C52 15.5 45 18.5 38 21 C30 23.8 21 24.5 14 21 Z'\n\n/** A ribbed hem across the bottom of a sweater. */\nconst RIB_HEM = 'M16.5 74 L47.5 74 L47.5 80.5 L16.5 80.5 Z'\n\n/** A kangaroo pocket across the front of a hoodie. */\nconst POCKET = 'M27 57 C29 53.5 35 53.5 37 57 L38 63 L26 63 Z'\n\n/** The hood lying around the neck of a hoodie. */\nconst HOOD_FABRIC = 'M24 44 C24 33 28 28.5 32 28.5 C36 28.5 40 33 40 44 '\n + 'L40 47 C36 48 28 48 24 47 Z'\n\n/** A knitted vest, open at the neck and stopping short of the hem. */\nconst VEST = 'M32 47 C38 47 42.5 50.5 43.5 57 L44.5 73 C44.5 75.5 43 76.5 40.5 76.5 '\n + 'L23.5 76.5 C21 76.5 19.5 75.5 19.5 73 L20.5 57 C21.5 50.5 26 47 32 47 Z '\n + 'M32 47 L27 56 L32 62 L37 56 Z'\n\n/** The two front panels of an open jacket. */\nconst JACKET = 'M23.5 47.5 C20.5 50 18.8 54.5 18.3 59 L17.4 76.5 L27 76.5 L29 52 Z '\n + 'M40.5 47.5 C43.5 50 45.2 54.5 45.7 59 L46.6 76.5 L37 76.5 L35 52 Z'\n\n/** The bib and straps of a pair of dungarees. */\nconst BIB = 'M25.5 58 H38.5 V72 H25.5 Z'\n\n/** The straps over the shoulders of a pair of dungarees. */\nconst STRAPS = 'M26 58 L23.5 48 M38 58 L40.5 48'\n\n/** Stripes across the front of a jersey. */\nconst STRIPES = 'M18 56 H46 M17.7 62 H46.3 M17.5 68 H46.5 M17.3 74 H46.7'\n\n/** What one kind wears behind the whale, so its base merges into the hood. */\nfunction behind(kind: MaskKind) {\n switch (kind) {\n case 'orca':\n return <path className={css.crewHood} d=\"M26 -12 C27 -22 32 -29 40 -32 C37 -24 33 -17 32 -12 Z\" />\n case 'humpback':\n // The long pectoral flipper, swept forward under the throat: the whale's\n // belly already lies over the person's brow, so the only room left for a\n // fin that reads at this size is in front of the jaw.\n return <path className={css.crewHood} d=\"M43 16 C50 20 56 26 60 34 C58 24 52 17 45 13 Z\" />\n case 'narwhal':\n return <path className={css.crewTusk} d=\"M63 6 L81 -2\" />\n case 'sperm':\n return <path className={css.crewHood} d=\"M40 -15 L58 -15 C62 -15 65 -12 65 -8 L65 9.5 C56 10.5 47 14 40 17 Z\" />\n case 'shark':\n // A taller, swept-back dorsal fin: the silhouette that says \"shark\".\n return <path className={css.crewHood} d=\"M36 -20 C38 -27 43 -32 51 -34 C48 -25 44 -18 40 -11 Z\" />\n case 'beluga':\n case 'blue':\n default:\n return null\n }\n}\n\n/** What one kind adds over the whale. */\nfunction front(kind: MaskKind) {\n switch (kind) {\n case 'orca':\n return <ellipse className={css.crewPatch} cx=\"47\" cy=\"-4\" rx=\"6.5\" ry=\"3.2\" transform=\"rotate(-16 47 -4)\" />\n case 'humpback':\n return (\n <>\n {[[45, -6], [51, -2], [56, 1], [60, 3.5]].map(([x, y]) => (\n <circle key={`${x}`} className={css.crewKnob} cx={x} cy={y} r=\"1.5\" />\n ))}\n </>\n )\n case 'beluga':\n return <path className={css.crewMelon} d=\"M22 -9 C28 -18 42 -18 50 -11 C40 -12.5 29 -11.5 22 -9 Z\" />\n case 'shark':\n return (\n <>\n <path className={css.crewGill} d=\"M39 5 C41.5 6.5 41.5 9.5 39 11\" />\n <path className={css.crewGill} d=\"M43 4 C45.5 5.5 45.5 8.5 43 10\" />\n <path className={css.crewGill} d=\"M47 3.5 C49 5 49 7.5 47 9\" />\n </>\n )\n case 'blue':\n return (\n <>\n <path className={css.crewSpout} d=\"M44 -15 C43 -21 42 -25 39 -28\" />\n <path className={css.crewSpout} d=\"M44 -15 C46 -21 48 -24 52 -26\" />\n <path className={css.crewSpout} d=\"M44 -15 C41 -19 38 -21 34 -22\" />\n </>\n )\n default:\n return null\n }\n}\n\n/** The part of a hairstyle that hangs behind the head, drawn under the face. */\nfunction hairBehind(kind: HairKind, back: boolean) {\n if (kind === 'ponytail') {\n return (\n <path\n className={css.crewHair}\n d={back\n ? 'M32 24 C36 24 38 28 38 34 C38 42 36.5 48 34.5 52 L29.5 52 C31.5 48 33 42 33 34 C33 28 30 26 32 24 Z'\n : 'M44 26 C48 28 50 33 49.5 39 C49 45 46.5 49 44 51 C46 46 46.5 40 45.5 35 C44.8 31 44 28 44 26 Z'}\n />\n )\n }\n if (kind === 'curls' && back) {\n return <path className={css.crewHair} d=\"M17 30 C13.5 32 13 38 16 41 C18 43 20 42 20.5 39 Z M47 30 C50.5 32 51 38 48 41 C46 43 44 42 43.5 39 Z\" />\n }\n return null\n}\n\n/** The part of a hairstyle that sits over everything, like a bun. */\nfunction hairAbove(kind: HairKind) {\n if (kind !== 'bun') return null\n return (\n <>\n <circle className={css.crewHair} cx=\"32\" cy=\"8\" r=\"6.2\" />\n <path className={css.crewHairShine} d=\"M28.5 5.5 C29.5 3.5 31.5 2.6 33.5 3 C31.5 3.6 30 4.6 29.4 6.4 Z\" />\n </>\n )\n}\n\n/**\n * Gear worn UNDER the hood. Headphones go on before the whale does: the band\n * runs over the head and the hood lies over it where they cross, so the cups\n * hang under the jaw instead of being glued to the outside of it.\n */\nfunction headGearUnder(kind: GearKind, back: boolean) {\n if (kind !== 'headphones') return null\n return (\n <g className={css.crewCans}>\n <path className={css.crewCansBand} d=\"M16.5 31 C16.5 16 23.5 9 32 9 C40.5 9 47.5 16 47.5 31\" />\n <rect className={css.crewCansCup} x=\"12.6\" y=\"26\" width=\"8\" height=\"12\" rx=\"4\" />\n {back && <rect className={css.crewCansCup} x=\"43.4\" y=\"26\" width=\"8\" height=\"12\" rx=\"4\" />}\n </g>\n )\n}\n\n/**\n * Gear worn OVER everything: glasses sit on the face, and the hood's jaw\n * stays clear of them, so the lenses read as lenses and not as a strip under\n * the whale's chin.\n */\nfunction headGearOver(kind: GearKind, back: boolean) {\n if (kind !== 'glasses' || back) return null\n return (\n <g className={css.crewGlasses}>\n <rect x=\"21\" y=\"26.6\" width=\"9.4\" height=\"7.4\" rx=\"3.2\" />\n <rect x=\"33.6\" y=\"26.6\" width=\"9.4\" height=\"7.4\" rx=\"3.2\" />\n <path d=\"M30.4 29.8 H33.6 M21 29.4 L17.6 30.4 M43 29.4 L46.4 30.4\" />\n </g>\n )\n}\n\n/** Whatever a member wears over its clothes. */\nfunction bodyGear(kind: GearKind, back: boolean) {\n switch (kind) {\n case 'scarf':\n return (\n <>\n <path className={css.crewScarf} d=\"M23 45 C27 50 37 50 41 45 L42.5 53 C37 56.5 27 56.5 21.5 53 Z\" />\n <path className={css.crewScarf} d={back ? 'M29 54 L27.5 68 L33 68.5 L34.5 54 Z' : 'M39 54 L41.5 69 L36 69.5 L34.5 54 Z'} />\n </>\n )\n case 'lanyard':\n return (\n <>\n <path className={css.crewCord} d=\"M27 48 L31 62 M37 48 L33 62\" />\n {!back && <rect className={css.crewBadge} x=\"28.6\" y=\"61\" width=\"6.8\" height=\"9\" rx=\"1.4\" />}\n {!back && <path className={css.crewBadgeLine} d=\"M30 64.5 H34 M30 67 H33\" />}\n </>\n )\n case 'backpack':\n return back\n ? (\n <>\n <path className={css.crewPack} d=\"M23 52 C23 48.5 26 47 32 47 C38 47 41 48.5 41 52 L41 70 C41 73 38.5 74 32 74 C25.5 74 23 73 23 70 Z\" />\n <path className={css.crewPackTrim} d=\"M25 62 H39 M28 55 H36\" />\n </>\n )\n : <path className={css.crewStrap} d=\"M25.5 48 C25 56 25.5 64 26.5 71 M38.5 48 C39 56 38.5 64 37.5 71\" />\n default:\n return null\n }\n}\n\n/**\n * The head. Face on: the person looks out from under the whale's chin. From\n * behind — which is how you see somebody who is at their own computer — there\n * is no face to draw, both ears show, the back of the head is all hair, and\n * the whale looks the other way.\n */\nfunction head(kind: MaskKind, hair: HairKind, gear: GearKind, back: boolean) {\n return (\n <>\n {hairBehind(hair, back)}\n <ellipse className={css.crewEar} cx=\"17.5\" cy=\"32\" rx=\"3.4\" ry=\"3.8\" />\n {back && <ellipse className={css.crewEar} cx=\"46.5\" cy=\"32\" rx=\"3.4\" ry=\"3.8\" />}\n <path\n className={css.crewFace}\n d=\"M32 12 C41.5 12 46 20 46 29 C46 38.5 40 44 32 44 C24 44 18 38.5 18 29 C18 20 22.5 12 32 12 Z\"\n />\n {back && <path className={css.crewHair} d={NAPE} />}\n {!back && (\n <>\n <path className={css.crewBrow} d=\"M22 25.5 Q26 23 30.2 24.6\" />\n <path className={css.crewBrow} d=\"M33.8 24.6 Q38 23 42 25.5\" />\n <circle className={css.crewPupil} cx=\"27\" cy=\"30\" r=\"1.5\" />\n <circle className={css.crewPupil} cx=\"37\" cy=\"30\" r=\"1.5\" />\n <circle className={css.crewEyeGlint} cx=\"27.6\" cy=\"29.4\" r=\"0.55\" />\n <circle className={css.crewEyeGlint} cx=\"37.6\" cy=\"29.4\" r=\"0.55\" />\n <path className={css.crewSmile} d=\"M28.5 35.5 Q32 38.5 35.5 35.5\" />\n <circle className={css.crewBlush} cx=\"21.5\" cy=\"33\" r=\"1.9\" />\n <circle className={css.crewBlush} cx=\"42.5\" cy=\"33\" r=\"1.9\" />\n </>\n )}\n <path className={css.crewHair} d={CAPS[hair]} />\n <path className={css.crewHairShine} d={HAIR_SHINE} />\n {headGearUnder(gear, back)}\n {/* The whale is worn in profile either way, pulled down over the brow so\n it reads as a hood rather than a hat; from behind it faces the other\n side, which is what turning around does to a hood. Drawn after the\n headgear, so anything worn under it — the headphone band — tucks\n under the hood instead of sitting on top of it. */}\n <g transform={back ? 'translate(64 3) scale(-1 1)' : 'translate(0 3)'}>\n {behind(kind)}\n <path className={css.crewHood} d={WHALE} />\n <path className={css.crewHood} d={FLUKES} />\n <path className={css.crewBelly} d={BELLY} />\n {front(kind)}\n <path className={css.crewHoodSheen} d={HOOD_SHEEN} />\n <path className={css.crewHoodShade} d={HOOD_SHADE} />\n <circle className={css.crewEye} cx=\"53\" cy=\"0\" r=\"2.6\" />\n <circle className={css.crewPupil} cx=\"53.7\" cy=\"0.4\" r=\"1.2\" />\n <circle className={css.crewEyeGlint} cx=\"54.2\" cy=\"-0.1\" r=\"0.45\" />\n <path className={css.crewMouth} d=\"M49 9.6 C54 7.7 59 6.1 63 5.7\" />\n </g>\n {hairAbove(hair)}\n {headGearOver(gear, back)}\n </>\n )\n}\n\n/** What one outfit adds over the plain body, seen from the front. */\nfunction outfitFront(outfit: OutfitKind) {\n switch (outfit) {\n case 'shirt':\n return (\n <>\n <path className={css.crewCollar} d=\"M25.5 48.5 C28 52.5 36 52.5 38.5 48.5\" />\n <path className={css.crewPlacket} d=\"M32 50 L32 79\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"55\" r=\"0.8\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"63\" r=\"0.8\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"71\" r=\"0.8\" />\n <path className={css.crewStitch} d=\"M38 57 H44 V64 H38 Z\" />\n </>\n )\n case 'polo':\n return (\n <>\n <path className={css.crewCollar} d=\"M25.5 48.5 C28 52.5 36 52.5 38.5 48.5\" />\n <path className={css.crewPlacket} d=\"M32 49 L32 60\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"54\" r=\"0.8\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"58.5\" r=\"0.8\" />\n </>\n )\n case 'tee':\n return <path className={css.crewNeckBand} d=\"M25 48 C28 51.5 36 51.5 39 48 C38 53 26 53 25 48 Z\" />\n case 'sweater':\n return (\n <>\n <path className={css.crewNeckBand} d=\"M24.5 46.5 C28 51 36 51 39.5 46.5 C38 53.5 26 53.5 24.5 46.5 Z\" />\n <path className={css.crewRib} d={RIB_HEM} />\n </>\n )\n case 'hoodie':\n return (\n <>\n <path className={css.crewDraw} d=\"M29 47 L30.5 55\" />\n <path className={css.crewDraw} d=\"M35 47 L33.5 55\" />\n <path className={css.crewPocket} d={POCKET} />\n </>\n )\n case 'tunic':\n return (\n <>\n <path className={css.crewStitch} d=\"M21 50 L21 78 M43 50 L43 78\" />\n <path className={css.crewBelt} d=\"M18 68 Q32 72 46 68\" />\n </>\n )\n case 'vest':\n return (\n <>\n <path className={css.crewCollar} d=\"M25.5 48.5 C28 52.5 36 52.5 38.5 48.5\" />\n <path className={css.crewVest} d={VEST} />\n <path className={css.crewRib} d=\"M19.5 73 L44.5 73 L44.5 76.5 L19.5 76.5 Z\" />\n </>\n )\n case 'jacket':\n return (\n <>\n <path className={css.crewJacket} d={JACKET} />\n <path className={css.crewCollar} d=\"M24 48 L29 52 M40 48 L35 52\" />\n <circle className={css.crewButton} cx=\"28\" cy=\"62\" r=\"0.9\" />\n <circle className={css.crewButton} cx=\"28\" cy=\"70\" r=\"0.9\" />\n </>\n )\n case 'stripes':\n return (\n <>\n <path className={css.crewNeckBand} d=\"M25 48 C28 51.5 36 51.5 39 48 C38 53 26 53 25 48 Z\" />\n <path className={css.crewStripes} d={STRIPES} />\n </>\n )\n case 'dungarees':\n default:\n return (\n <>\n <path className={css.crewNeckBand} d=\"M25 48 C28 51.5 36 51.5 39 48 C38 53 26 53 25 48 Z\" />\n <path className={css.crewBib} d={BIB} />\n <path className={css.crewDraw} d={STRAPS} />\n <circle className={css.crewButton} cx=\"26.6\" cy=\"58.6\" r=\"0.9\" />\n <circle className={css.crewButton} cx=\"37.4\" cy=\"58.6\" r=\"0.9\" />\n </>\n )\n }\n}\n\n/** What one outfit adds over the plain body, seen from behind. */\nfunction outfitBack(outfit: OutfitKind) {\n switch (outfit) {\n case 'shirt':\n case 'polo':\n return (\n <>\n <path className={css.crewCollar} d=\"M25 49 L39 49\" />\n <path className={css.crewStitch} d=\"M26 57 C29 60 35 60 38 57\" />\n </>\n )\n case 'sweater':\n case 'vest':\n return <path className={css.crewRib} d={RIB_HEM} />\n case 'jacket':\n return <path className={css.crewStitch} d=\"M32 48 L32 79\" />\n case 'stripes':\n return <path className={css.crewStripes} d={STRIPES} />\n case 'dungarees':\n return <path className={css.crewDraw} d=\"M26 76 L23.5 48 M38 76 L40.5 48\" />\n default:\n return null\n }\n}\n\n/**\n * One member of the crew.\n * @param props - the whale it wears, whether you are behind it, whether only\n * the head is wanted (a portrait), and everything it is dressed in.\n * @returns the character.\n */\nexport function Crew(props: {\n readonly kind: MaskKind\n readonly className?: string\n /** Seen from behind: the pose of somebody facing their own computer. */\n readonly back?: boolean\n /** A portrait: the hooded head alone, framed for a small round avatar. */\n readonly portrait?: boolean\n /** The outfit the member wears; teammates rotate through the wardrobe. */\n readonly outfit?: OutfitKind\n /** The shoes the member wears; teammates rotate through the shoe rack. */\n readonly shoes?: ShoeKind\n /** The hairstyle under the hood. */\n readonly hair?: HairKind\n /** The one thing it wears besides its clothes. */\n readonly gear?: GearKind\n /** Which of the stylesheet's hair colours it has. */\n readonly tone?: number\n /** Which of the stylesheet's skin tones it has. */\n readonly skin?: number\n}) {\n const {\n kind, className, back = false, portrait = false, outfit = 'shirt', shoes = 'sneaker',\n hair = 'crop', gear = 'none', tone = 0, skin = 0,\n } = props\n return (\n <svg\n className={`${css.crew} ${className ?? ''}`}\n viewBox={portrait ? '-1 -20 70 70' : '-6 -26 80 134'}\n data-kind={kind}\n data-back={back ? 'true' : undefined}\n data-outfit={outfit}\n data-shoes={shoes}\n data-hair={hair}\n data-gear={gear}\n data-tone={tone}\n data-skin={skin}\n aria-hidden\n focusable=\"false\"\n >\n {!portrait && (\n <>\n <g className={css.crewLimbBack}>\n <rect className={css.crewTrouser} x=\"22.5\" y=\"70\" width=\"8.6\" height=\"27\" rx=\"3.8\" />\n <path className={css.crewShoe} d={shoePath(shoes, 'left')} />\n {shoeTrim(shoes, 'left')}\n </g>\n <g className={css.crewLimbFront}>\n <rect className={css.crewTrouser} x=\"32.9\" y=\"70\" width=\"8.6\" height=\"27\" rx=\"3.8\" />\n <path className={css.crewShoe} d={shoePath(shoes, 'right')} />\n {shoeTrim(shoes, 'right')}\n </g>\n <g className={css.crewArmBack}>\n <rect className={css.crewSleeve} x=\"12\" y=\"53\" width=\"7.8\" height=\"22\" rx=\"3.9\" />\n <path className={css.crewCuff} d=\"M12 71.5 H19.8\" />\n <circle className={css.crewHand} cx=\"15.9\" cy=\"76.5\" r=\"3.8\" />\n </g>\n <g className={css.crewArmFront}>\n <rect className={css.crewSleeve} x=\"44.2\" y=\"53\" width=\"7.8\" height=\"22\" rx=\"3.9\" />\n <path className={css.crewCuff} d=\"M44.2 71.5 H52\" />\n <circle className={css.crewHand} cx=\"48.1\" cy=\"76.5\" r=\"3.8\" />\n </g>\n <rect className={css.crewNeck} x=\"28.2\" y=\"40\" width=\"7.6\" height=\"11\" rx=\"3.2\" />\n <path className={css.crewShirt} d={SHIRT} />\n <path className={css.crewSeam} d={SHOULDER_SEAM} />\n <path className={css.crewSeam} d={HEM_FOLD} />\n {outfit === 'hoodie' && <path className={css.crewHoodFabric} d={HOOD_FABRIC} />}\n {back ? outfitBack(outfit) : outfitFront(outfit)}\n {bodyGear(gear, back)}\n </>\n )}\n {head(kind, hair, gear, back)}\n </svg>\n )\n}\n","/**\n * The room's greenery.\n *\n * A plant used to be three overlapping radial gradients, which reads as a green\n * cloud in a pot. These are drawn the way the crew are: real blades with a\n * midrib and side veins, a light layer and a dark one so the foliage has a\n * front and a back to it, and a thrown pot with a rolled rim, a glaze\n * highlight, crumbed soil and a saucer under it.\n *\n * Every kind shares the same pot and the same frame — the pot's mouth is at\n * (50, 84), foliage grows up out of it — so a plant can be swapped for another\n * anywhere in the room without moving anything around it. Each blade is its own\n * group hinged at the point it joins the stem, so the stylesheet can sway them\n * out of step and the plant breathes instead of wobbling as one lump.\n */\nimport type { CSSProperties } from 'react'\nimport css from './TeamStage.module.css'\n\n/** The plants the room keeps, in the order places take them. */\nexport const PLANTS = ['monstera', 'sansevieria', 'pothos', 'cactus', 'ficus', 'palm'] as const\n\n/** One kind of plant. */\nexport type PlantKind = typeof PLANTS[number]\n\n/**\n * Which plant stands in the nth green spot of the room: stable, so the corner\n * you learned is the corner you come back to.\n * @param index - the spot's index.\n * @returns the kind that stands there.\n */\nexport function plantOf(index: number): PlantKind {\n return PLANTS[((index % PLANTS.length) + PLANTS.length) % PLANTS.length] ?? 'monstera'\n}\n\n/** One blade of foliage: its shape, where it joins the plant, and its veins. */\ninterface Blade {\n /** The outline, drawn from the joint at (0, 0) outward. */\n readonly d: string\n /** Where on the plant it joins, and how it is turned. */\n readonly at: string\n /** The lit layer catches the window; the rest sits behind it. */\n readonly lit?: boolean\n /** The midrib and whatever branches off it. */\n readonly vein?: string\n /** Foliage that hangs rather than stands: it swings from its top edge. */\n readonly hang?: boolean\n}\n\n/** A split leaf: two notches cut into each side of a broad heart. */\nconst MONSTERA = 'M0 -2 C-4 -10 -12 -13 -17 -17 L-9 -19 C-13 -23 -19 -25 -22 -30 '\n + 'L-11.5 -30.5 C-16 -36 -14 -42 0 -46 C14 -42 16 -36 11.5 -30.5 '\n + 'L22 -30 C19 -25 13 -23 9 -19 L17 -17 C12 -13 4 -10 0 -2 Z'\n\n/** The midrib of a split leaf, with a pair of ribs running into each lobe. */\nconst MONSTERA_VEIN = 'M0 -3 L0 -42 M0 -14 L-14 -18 M0 -14 L14 -18 '\n + 'M0 -24 L-17 -29 M0 -24 L17 -29 M0 -33 L-11 -38 M0 -33 L11 -38'\n\n/** An upright sword, thickest at the middle and drawn to a point. */\nconst SWORD = 'M0 0 C-5 -7 -7.5 -22 -6.5 -36 C-5.5 -48 -3 -56 0 -60 '\n + 'C3 -56 5.5 -48 6.5 -36 C7.5 -22 5 -7 0 0 Z'\n\n/** The pale stripe up the edge of a snake plant's blade. */\nconst SWORD_EDGE = 'M4.6 -12 C6 -24 6.4 -40 3.4 -52 C5.4 -42 5 -26 3 -12 Z'\n\n/** A heart, hanging point-down the way a trailing leaf does. */\nconst HEART = 'M0 0 C-8 -4 -13 -10 -13 -16.5 C-13 -22 -8.5 -25 -4.5 -23 '\n + 'C-2 -21.6 -0.6 -19.4 0 -17.4 C0.6 -19.4 2 -21.6 4.5 -23 '\n + 'C8.5 -25 13 -22 13 -16.5 C13 -10 8 -4 0 0 Z'\n\n/** The midrib of a hanging heart. */\nconst HEART_VEIN = 'M0 -2 L0 -18 M0 -8 L-7 -14 M0 -8 L7 -14'\n\n/** A plain oval leaf, for a plant whose interest is in how many it has. */\nconst OVAL = 'M0 0 C-6 -5 -9 -11 -9 -17 C-9 -23 -5 -27 0 -28 C5 -27 9 -23 9 -17 C9 -11 6 -5 0 0 Z'\n\n/** A long frond, tapering to a point. */\nconst FROND = 'M0 0 C-3.5 -14 -6 -28 -4 -42 L0 -50 L4 -42 C6 -28 3.5 -14 0 0 Z'\n\n/** The leaflets combed off both sides of a frond. */\nconst FROND_VEIN = 'M0 -2 L0 -47 M0 -10 L-5.5 -16 M0 -10 L5.5 -16 M0 -19 L-6 -25 '\n + 'M0 -19 L6 -25 M0 -28 L-5.5 -34 M0 -28 L5.5 -34 M0 -36 L-4 -41 M0 -36 L4 -41'\n\n/** A ribbed column, for the one plant in the room nobody has to water. */\nconst COLUMN = 'M0 0 C-9.5 0 -12.5 -5 -12.5 -15 L-12.5 -34 C-12.5 -45 -8 -50 0 -50 '\n + 'C8 -50 12.5 -45 12.5 -34 L12.5 -15 C12.5 -5 9.5 0 0 0 Z'\n\n/** A shorter column, for an arm off the side of one. */\nconst LIMB = 'M0 0 C-6.5 0 -8.5 -3.5 -8.5 -10 L-8.5 -22 C-8.5 -30 -5.5 -33.5 0 -33.5 '\n + 'C5.5 -33.5 8.5 -30 8.5 -22 L8.5 -10 C8.5 -3.5 6.5 0 0 0 Z'\n\n/** The ribs down a cactus, and the ones down its arms. */\nconst RIBS = 'M-6 -6 C-7.5 -18 -7.5 -32 -6 -43 M0 -4 L0 -47 M6 -6 C7.5 -18 7.5 -32 6 -43'\n\n/** The blades of one kind, back layer first. */\nfunction bladesOf(kind: PlantKind): readonly Blade[] {\n switch (kind) {\n case 'monstera':\n return [\n { d: MONSTERA, at: 'translate(50 82) rotate(-38) scale(0.86)', vein: MONSTERA_VEIN },\n { d: MONSTERA, at: 'translate(50 82) rotate(36) scale(0.9)', vein: MONSTERA_VEIN },\n { d: MONSTERA, at: 'translate(50 80) rotate(-14) scale(1.02)', lit: true, vein: MONSTERA_VEIN },\n { d: MONSTERA, at: 'translate(50 80) rotate(16) scale(0.94)', lit: true, vein: MONSTERA_VEIN },\n { d: MONSTERA, at: 'translate(50 78) rotate(2) scale(0.74)', lit: true, vein: MONSTERA_VEIN },\n ]\n case 'sansevieria':\n return [\n { d: SWORD, at: 'translate(50 84) rotate(-22) scale(0.82)' },\n { d: SWORD, at: 'translate(50 84) rotate(20) scale(0.88)' },\n { d: SWORD, at: 'translate(50 84) rotate(-8) scale(1)', lit: true, vein: SWORD_EDGE },\n { d: SWORD, at: 'translate(50 84) rotate(7) scale(0.94)', lit: true, vein: SWORD_EDGE },\n { d: SWORD, at: 'translate(50 84) rotate(-15) scale(0.66)', lit: true, vein: SWORD_EDGE },\n ]\n case 'pothos':\n return [\n { d: SWORD, at: 'translate(50 82) rotate(-10) scale(0.5)' },\n { d: SWORD, at: 'translate(50 82) rotate(12) scale(0.44)', lit: true },\n { d: HEART, at: 'translate(28 84) rotate(196) scale(0.78)', hang: true, vein: HEART_VEIN },\n { d: HEART, at: 'translate(22 96) rotate(184) scale(0.7)', hang: true, lit: true, vein: HEART_VEIN },\n { d: HEART, at: 'translate(74 86) rotate(166) scale(0.76)', hang: true, vein: HEART_VEIN },\n { d: HEART, at: 'translate(80 99) rotate(176) scale(0.66)', hang: true, lit: true, vein: HEART_VEIN },\n { d: HEART, at: 'translate(50 70) rotate(180) scale(0.6)', hang: true, lit: true, vein: HEART_VEIN },\n ]\n case 'cactus':\n return [\n { d: LIMB, at: 'translate(30 62) rotate(-24)', vein: RIBS },\n { d: LIMB, at: 'translate(70 58) rotate(22) scale(0.9)', vein: RIBS },\n { d: COLUMN, at: 'translate(50 82)', lit: true, vein: RIBS },\n ]\n case 'ficus':\n return [\n { d: OVAL, at: 'translate(36 56) rotate(-40)' },\n { d: OVAL, at: 'translate(64 54) rotate(42)' },\n { d: OVAL, at: 'translate(32 70) rotate(-62) scale(0.86)' },\n { d: OVAL, at: 'translate(68 68) rotate(64) scale(0.86)' },\n { d: OVAL, at: 'translate(44 42) rotate(-16)', lit: true },\n { d: OVAL, at: 'translate(58 40) rotate(18)', lit: true },\n { d: OVAL, at: 'translate(50 32) rotate(0) scale(0.9)', lit: true },\n ]\n case 'palm':\n default:\n return [\n { d: FROND, at: 'translate(50 82) rotate(-52) scale(0.92)', vein: FROND_VEIN },\n { d: FROND, at: 'translate(50 82) rotate(50) scale(0.96)', vein: FROND_VEIN },\n { d: FROND, at: 'translate(50 80) rotate(-26)', lit: true, vein: FROND_VEIN },\n { d: FROND, at: 'translate(50 80) rotate(24) scale(0.96)', lit: true, vein: FROND_VEIN },\n { d: FROND, at: 'translate(50 78) rotate(-2) scale(0.88)', lit: true, vein: FROND_VEIN },\n ]\n }\n}\n\n/** The woody stems a kind shows between the soil and its foliage. */\nfunction stemsOf(kind: PlantKind): string | undefined {\n switch (kind) {\n case 'monstera':\n return 'M50 84 C46 72 40 66 34 62 M50 84 C54 72 60 68 65 64 M50 84 L50 66'\n case 'ficus':\n return 'M50 84 L50 40 M50 68 C46 62 42 58 37 55 M50 66 C54 60 59 56 63 53 '\n + 'M50 56 C47 50 45 46 43 43 M50 54 C53 48 55 45 57 42'\n case 'pothos':\n return 'M48 82 C40 80 32 82 28 86 M52 82 C60 80 68 82 74 88 M28 86 C24 90 22 94 22 97 '\n + 'M74 88 C78 92 80 96 80 100'\n case 'palm':\n return 'M50 84 C48 78 44 72 38 66 M50 84 C52 78 56 72 62 66'\n case 'sansevieria':\n case 'cactus':\n default:\n return undefined\n }\n}\n\n/**\n * One plant, pot and all.\n * @param props - which kind it is, and the class the room sizes it with.\n * @returns the plant.\n */\nexport function Plant(props: { readonly kind: PlantKind, readonly className?: string }) {\n const { kind, className } = props\n const blades = bladesOf(kind)\n const stems = stemsOf(kind)\n return (\n <svg\n className={`${css.flora} ${className ?? ''}`}\n viewBox=\"0 0 100 128\"\n data-plant={kind}\n aria-hidden\n focusable=\"false\"\n >\n {/* The saucer and the shadow it casts go down first: everything else in\n the pot stands on them. */}\n <ellipse className={css.floraShade} cx=\"50\" cy=\"121\" rx=\"27\" ry=\"5\" />\n <path className={css.floraSaucer} d=\"M29 116 H71 Q75 116 75 119.5 Q75 123 71 123 H29 Q25 123 25 119.5 Q25 116 29 116 Z\" />\n\n {stems !== undefined && <path className={css.floraStem} d={stems} />}\n\n {blades.map((blade, index) => (\n <g key={`${blade.at}-${index}`} transform={blade.at}>\n <g\n className={css.floraLeaf}\n data-hang={blade.hang === true ? 'true' : undefined}\n style={{ '--team-leaf-delay': `${-((index * 0.83) % 4).toFixed(2)}s` } as CSSProperties}\n >\n <path className={blade.lit === true ? css.floraBladeLit : css.floraBlade} d={blade.d} />\n {blade.vein !== undefined && <path className={css.floraVein} d={blade.vein} />}\n </g>\n </g>\n ))}\n\n {kind === 'cactus' && (\n <>\n <path className={css.floraSpine} d=\"M42 44 L38 41 M42 54 L38 51 M42 64 L38 61 M58 42 L62 39 M58 52 L62 49 M58 62 L62 59\" />\n <circle className={css.floraBloom} cx=\"50\" cy=\"31\" r=\"3.6\" />\n <circle className={css.floraBloomHeart} cx=\"50\" cy=\"31\" r=\"1.5\" />\n </>\n )}\n\n {/* The pot last, so a leaf that leans over the rim is tucked behind it. */}\n <path className={css.floraPot} d=\"M28 87 H72 L67.5 117 Q67 120 63 120 H37 Q33 120 32.5 117 Z\" />\n <path className={css.floraPotShade} d=\"M60 87 L72 87 L67.5 117 Q67 120 63 120 H57 Q61 106 60 87 Z\" />\n <path className={css.floraGlaze} d=\"M36 92 C33.5 101 34 110 36.5 117 L40 117 C37.5 109 37 101 39 92 Z\" />\n <path className={css.floraRim} d=\"M25 79 H75 Q78 79 78 82 V86 Q78 89 75 89 H25 Q22 89 22 86 V82 Q22 79 25 79 Z\" />\n <path className={css.floraRimLip} d=\"M24 80.5 H76\" />\n <ellipse className={css.floraSoil} cx=\"50\" cy=\"81.5\" rx=\"24\" ry=\"4\" />\n <circle className={css.floraCrumb} cx=\"40\" cy=\"81\" r=\"1.4\" />\n <circle className={css.floraCrumb} cx=\"59\" cy=\"82.5\" r=\"1.1\" />\n <circle className={css.floraCrumb} cx=\"52\" cy=\"79.6\" r=\"0.9\" />\n </svg>\n )\n}\n","/**\n * The things standing in the room, drawn as objects rather than as stickers.\n *\n * Every prop here is built the same way: a TOP face, a FRONT face and one SIDE\n * face, receding up and to the right by a fixed amount, over a soft contact\n * shadow on the floor. That is the whole trick of the room's 2.5D — a rectangle\n * with a lid and a flank reads as a box, and a rectangle on its own reads as a\n * sticker — and keeping the recede in one direction for every prop is what\n * stops the corner looking like six objects lit by six different suns.\n *\n * They live here rather than in `TeamStage.tsx` because a stage that draws the\n * team should not also be the file that knows how a coffee machine is shaped.\n */\nimport { useId } from 'react'\nimport css from './TeamStage.module.css'\n\n/** Strip the colons React puts in a generated id, so it is safe in a url(). */\nfunction safeId(raw: string): string {\n return raw.replaceAll(':', '')\n}\n\n/**\n * The water cooler: a bottled jug on a cabinet with a real lid and flank, its\n * own water line, two taps and a drip tray that reads as a tray because it is\n * drawn as an ellipse seen from above rather than as a bar.\n * @returns the cooler.\n */\nexport function CoolerFigure() {\n const uid = safeId(useId())\n return (\n <svg className={css.coolerSvg} viewBox=\"0 0 72 100\" aria-hidden focusable=\"false\">\n <defs>\n <linearGradient id={`${uid}-cabinet`} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0.4\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-cooler-lit)' }} />\n <stop offset=\"0.45\" style={{ stopColor: 'var(--team-cooler)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-cooler-dark)' }} />\n </linearGradient>\n <linearGradient id={`${uid}-bottle`} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-cooler-bottle-dark)' }} />\n <stop offset=\"0.3\" style={{ stopColor: 'var(--team-cooler-bottle)' }} />\n <stop offset=\"0.66\" style={{ stopColor: 'var(--team-cooler-bottle-lit)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-cooler-bottle-dark)' }} />\n </linearGradient>\n <linearGradient id={`${uid}-water`} x1=\"0\" y1=\"0\" x2=\"0.3\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-cooler-water-lit)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-cooler-water)' }} />\n </linearGradient>\n </defs>\n\n <ellipse className={css.propShade} cx=\"34\" cy=\"92\" rx=\"26\" ry=\"6\" />\n\n {/* The cabinet: front, flank, lid. */}\n <path className={css.propSide} d=\"M52 48 L62 41 L62 84 Q62 88 58 90 L52 90 Z\" />\n <path className={css.coolerCabinet} d=\"M12 48 H52 V85 Q52 90 47 90 H17 Q12 90 12 85 Z\" fill={`url(#${uid}-cabinet)`} />\n <path className={css.propTop} d=\"M12 48 L22 41 H62 L52 48 Z\" />\n <path className={css.coolerCabinetEdge} d=\"M12 48 H52 V85 Q52 90 47 90 H17 Q12 90 12 85 Z\" />\n\n <path className={css.coolerPanel} d=\"M17 58 H47 V80 H17 Z\" />\n <path className={css.coolerDoorSeam} d=\"M32 58 V80\" />\n <path className={css.coolerTap} d=\"M22 62 H30 M34 62 H42\" />\n <circle className={css.coolerHandleWarm} cx=\"26\" cy=\"59\" r=\"2\" />\n <circle className={css.coolerHandleCool} cx=\"38\" cy=\"59\" r=\"2\" />\n {/* A tray is a shallow dish seen from above, so it is an ellipse. */}\n <ellipse className={css.coolerDrip} cx=\"32\" cy=\"84\" rx=\"15\" ry=\"3.4\" />\n <ellipse className={css.coolerDripWell} cx=\"32\" cy=\"83.6\" rx=\"12\" ry=\"2.2\" />\n\n {/* The jug. Its own top face is the ring the neck sits in. */}\n <path className={css.coolerBottle} d=\"M19 48 C19 33 22.5 21 28 14 L40 14 C45.5 21 49 33 49 48 Z\" fill={`url(#${uid}-bottle)`} />\n <path className={css.coolerWater} d=\"M21 48 C21 35.5 23.8 24 28.3 18.5 L39.7 18.5 C44.2 24 47 35.5 47 48 Z\" fill={`url(#${uid}-water)`} />\n <path className={css.coolerNeck} d=\"M28 14 L28 6 C28 4.5 29 3.5 30.5 3.5 L37.5 3.5 C39 3.5 40 4.5 40 6 L40 14 Z\" fill={`url(#${uid}-bottle)`} />\n <ellipse className={css.coolerCap} cx=\"34\" cy=\"3\" rx=\"8\" ry=\"2.6\" />\n <path className={css.coolerShine} d=\"M22.5 46 C22.5 34.5 25.3 23.5 30 17 C27.2 23 24.5 32.5 24.5 46 Z\" />\n <circle className={css.coolerBubble} cx=\"28\" cy=\"34\" r=\"1\" style={{ animationDelay: '0s' }} />\n <circle className={css.coolerBubble} cx=\"39\" cy=\"39\" r=\"1.3\" style={{ animationDelay: '-1.7s' }} />\n <circle className={css.coolerBubble} cx=\"33\" cy=\"29\" r=\"0.8\" style={{ animationDelay: '-3.1s' }} />\n <circle className={css.coolerBubble} cx=\"43\" cy=\"30\" r=\"0.9\" style={{ animationDelay: '-4.4s' }} />\n </svg>\n )\n}\n\n/**\n * A chair seen from behind: a curved shell, a mesh panel, a lumbar pad, a seat\n * pan with a lid on it, a gas lift and a five-star base. The base ellipse is\n * flattened to the floor's own foreshortening, so the chair stands on the room\n * rather than in front of it.\n * @returns the chair.\n */\nexport function ChairFigure() {\n const uid = safeId(useId())\n return (\n <svg className={css.chairSvg} viewBox=\"0 0 64 95\" aria-hidden focusable=\"false\">\n <defs>\n <linearGradient id={`${uid}-shell`} x1=\"0\" y1=\"0\" x2=\"0.35\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-chair-lit)' }} />\n <stop offset=\"0.55\" style={{ stopColor: 'var(--team-chair)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-chair-dark)' }} />\n </linearGradient>\n <linearGradient id={`${uid}-mesh`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'color-mix(in srgb, var(--team-chair-lit) 58%, transparent)' }} />\n <stop offset=\"1\" style={{ stopColor: 'color-mix(in srgb, var(--team-chair) 42%, transparent)' }} />\n </linearGradient>\n <linearGradient id={`${uid}-lift`} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-chair-dark)' }} />\n <stop offset=\"0.35\" style={{ stopColor: 'var(--team-chair-lit)' }} />\n <stop offset=\"0.65\" style={{ stopColor: 'var(--team-chair)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-chair-dark)' }} />\n </linearGradient>\n </defs>\n <g className={css.chairRide}>\n <path\n className={css.chairShell}\n d=\"M12 12 C12 4 20 1.5 32 1.5 C44 1.5 52 4 52 12 L52 44 C52 51 45 53.5 32 53.5 C19 53.5 12 51 12 44 Z\"\n fill={`url(#${uid}-shell)`}\n />\n <path\n className={css.chairShellEdge}\n d=\"M12 12 C12 4 20 1.5 32 1.5 C44 1.5 52 4 52 12 L52 44 C52 51 45 53.5 32 53.5 C19 53.5 12 51 12 44 Z\"\n />\n <path\n className={css.chairMesh}\n d=\"M18 14 C18 10.5 23 8 32 8 C41 8 46 10.5 46 14 L46 40 C46 45.5 40 47.5 32 47.5 C24 47.5 18 45.5 18 40 Z\"\n fill={`url(#${uid}-mesh)`}\n />\n <path className={css.chairMeshLine} d=\"M19 17 L45 17 M19 22 L45 22 M19 27 L45 27 M19 32 L45 32 M19 37 L45 37 M19 42 L45 42\" />\n <path className={css.chairLumbar} d=\"M20 30 C24 27.5 40 27.5 44 30 L44 37 C40 40 24 40 20 37 Z\" fill={`url(#${uid}-shell)`} />\n {/* The seat pan, with its own lid: from behind you see the back edge of\n the cushion over the front of the pan, not a flat post. */}\n <path className={css.chairPan} d=\"M15 52 H49 Q52 52 52 55 L50 61 Q49.5 63 47 63 H17 Q14.5 63 14 61 L12 55 Q12 52 15 52 Z\" />\n <path className={css.chairPanTop} d=\"M15 52 H49 Q52 52 52 54.5 H12 Q12 52 15 52 Z\" />\n <rect className={css.chairMechanism} x=\"24\" y=\"62\" width=\"16\" height=\"6\" rx=\"2.5\" />\n </g>\n <rect className={css.chairLift} x=\"30\" y=\"68\" width=\"4\" height=\"15\" rx=\"2\" fill={`url(#${uid}-lift)`} />\n <ellipse className={css.chairHub} cx=\"32\" cy=\"86\" rx=\"6.5\" ry=\"2.4\" />\n <g className={css.chairSpokes}>\n <path d=\"M32 85.5 L8 90.5\" />\n <path d=\"M32 85.5 L19 93\" />\n <path d=\"M32 85.5 L45 93\" />\n <path d=\"M32 85.5 L56 90.5\" />\n <path d=\"M32 85.5 L32 94\" />\n </g>\n <g className={css.chairCasters}>\n <ellipse cx=\"8\" cy=\"90.5\" rx=\"2.6\" ry=\"2\" />\n <ellipse cx=\"19\" cy=\"93\" rx=\"2.6\" ry=\"2\" />\n <ellipse cx=\"45\" cy=\"93\" rx=\"2.6\" ry=\"2\" />\n <ellipse cx=\"56\" cy=\"90.5\" rx=\"2.6\" ry=\"2\" />\n <ellipse cx=\"32\" cy=\"94\" rx=\"2.6\" ry=\"2\" />\n </g>\n </svg>\n )\n}\n\n/**\n * The office printer: a box with a lid, an out-tray with a sheet still in it,\n * a paper cassette pulled a little proud of the body, and a status light.\n * @returns the printer.\n */\nexport function PrinterFigure() {\n return (\n <svg className={css.propSvg} viewBox=\"0 0 84 74\" aria-hidden focusable=\"false\">\n <ellipse className={css.propShade} cx=\"40\" cy=\"69\" rx=\"32\" ry=\"5\" />\n <path className={css.propSide} d=\"M64 24 L76 16 L76 62 L64 70 Z\" />\n <path className={css.propFront} d=\"M8 24 H64 V70 H8 Z\" />\n <path className={css.propTop} d=\"M8 24 L20 16 H76 L64 24 Z\" />\n <path className={css.propSeam} d=\"M8 24 H64 V70 H8 Z\" />\n {/* The lid, sunk into the top face so the scanner reads as a scanner. */}\n <path className={css.propInset} d=\"M15 22.5 L24.5 18 H68 L58.5 22.5 Z\" />\n {/* Paper standing out of the feeder at the back. */}\n <path className={css.propPaper} d=\"M32 16 L41 10.5 H60 L51 16 Z\" />\n {/* The out-tray with a printed sheet lying in it. */}\n <path className={css.propTray} d=\"M12 38 H58 L54 45 H12 Z\" />\n <path className={css.propPaper} d=\"M16 38 H50 L47 43.5 H16 Z\" />\n <path className={css.propInset} d=\"M12 52 H58 V64 H12 Z\" />\n <path className={css.propSeam} d=\"M12 58 H58\" />\n <circle className={css.propLampLive} cx=\"52\" cy=\"30\" r=\"2\" />\n <circle className={css.propLampIdle} cx=\"45\" cy=\"30\" r=\"2\" />\n </svg>\n )\n}\n\n/**\n * The coffee machine: a hopper, a group head with a cup under it, and a jug on\n * a warmer plate. Somebody's mug is on top, because somebody's mug always is.\n * @returns the coffee machine.\n */\nexport function CoffeeFigure() {\n return (\n <svg className={css.propSvg} viewBox=\"0 0 68 92\" aria-hidden focusable=\"false\">\n <ellipse className={css.propShade} cx=\"33\" cy=\"87\" rx=\"26\" ry=\"5\" />\n <path className={css.propSide} d=\"M50 30 L60 23 L60 82 L50 88 Z\" />\n <path className={css.propFront} d=\"M10 30 H50 V88 H10 Z\" />\n <path className={css.propTop} d=\"M10 30 L20 23 H60 L50 30 Z\" />\n <path className={css.propSeam} d=\"M10 30 H50 V88 H10 Z\" />\n {/* The bean hopper, standing on the lid. */}\n <path className={css.propInset} d=\"M22 23 L28 12 H44 L50 23 Z\" />\n <path className={css.propGlass} d=\"M25 20 L29.5 14 H42.5 L47 20 Z\" />\n {/* The group head and the cup under it. */}\n <path className={css.propSeam} d=\"M20 42 H40\" />\n <rect className={css.propInset} x=\"17\" y=\"46\" width=\"26\" height=\"16\" rx=\"2\" />\n <path className={css.propSpout} d=\"M26 46 V52 M34 46 V52\" />\n <path className={css.propCup} d=\"M25 55 H35 L33.5 62 Q33 63.5 30 63.5 Q27 63.5 26.5 62 Z\" />\n {/* The jug on its warmer plate. */}\n <path className={css.propTray} d=\"M14 78 H46 V81 H14 Z\" />\n <path className={css.propGlass} d=\"M20 66 H40 L38 77 H22 Z\" />\n <path className={css.propBrew} d=\"M21.4 71 H38.6 L38 77 H22 Z\" />\n <circle className={css.propLampLive} cx=\"45\" cy=\"36\" r=\"1.8\" />\n {/* The mug on the lid. */}\n <path className={css.propCup} d=\"M52 18 H61 L59.8 24 Q59.4 25.4 56.5 25.4 Q53.6 25.4 53.2 24 Z\" />\n </svg>\n )\n}\n\n/**\n * The filing cabinet: three drawers with pull handles and a label card, a\n * folder standing out of the top one, and a box of files on the lid.\n * @returns the filing cabinet.\n */\nexport function CabinetFigure() {\n return (\n <svg className={css.propSvg} viewBox=\"0 0 72 108\" aria-hidden focusable=\"false\">\n <ellipse className={css.propShade} cx=\"34\" cy=\"103\" rx=\"27\" ry=\"5\" />\n <path className={css.propSide} d=\"M54 30 L64 23 L64 96 L54 102 Z\" />\n <path className={css.propFront} d=\"M10 30 H54 V102 H10 Z\" />\n <path className={css.propTop} d=\"M10 30 L20 23 H64 L54 30 Z\" />\n <path className={css.propSeam} d=\"M10 30 H54 V102 H10 Z\" />\n {[36, 60, 84].map(top => (\n <g key={top}>\n <path className={css.propInset} d={`M14 ${top} H50 V${top + 18} H14 Z`} />\n <rect className={css.propHandle} x=\"26\" y={top + 6} width=\"12\" height=\"3\" rx=\"1.5\" />\n <rect className={css.propLabel} x=\"17\" y={top + 4} width=\"7\" height=\"5\" rx=\"1\" />\n </g>\n ))}\n {/* A folder somebody never filed, standing out of the top drawer. */}\n <path className={css.propFolder} d=\"M22 36 L28 26 H42 L36 36 Z\" />\n <path className={css.propPaper} d=\"M25 34 L30 27 H40 L35 34 Z\" />\n {/* The archive box on the lid. */}\n <path className={css.propSide} d=\"M44 16 L52 11 L52 23 L44 28 Z\" />\n <path className={css.propBox} d=\"M24 16 H44 V28 H24 Z\" />\n <path className={css.propBoxTop} d=\"M24 16 L32 11 H52 L44 16 Z\" />\n <path className={css.propSeam} d=\"M28 21 H40\" />\n </svg>\n )\n}\n\n/**\n * A pendant lamp over the room: a flex, a cone shade with a lit rim, and the\n * pool of light it throws. It hangs from the ceiling strip, which is what\n * finally tells the reader the room has one.\n * @returns the pendant.\n */\nexport function PendantFigure() {\n return (\n <svg className={css.pendantSvg} viewBox=\"0 0 60 100\" aria-hidden focusable=\"false\">\n {/* The flex fills the element: however high the ceiling is above the\n lamp's own depth, the wire reaches it. */}\n <path className={css.pendantFlex} d=\"M30 0 V74\" />\n <path className={css.pendantGlow} d=\"M30 88 L58 100 H2 Z\" />\n <path className={css.pendantShade} d=\"M30 74 L48 92 H12 Z\" />\n <ellipse className={css.pendantMouth} cx=\"30\" cy=\"92\" rx=\"18\" ry=\"4.6\" />\n <ellipse className={css.pendantBulb} cx=\"30\" cy=\"90\" rx=\"6\" ry=\"3\" />\n </svg>\n )\n}\n\n/**\n * The cat that lives here. It walks the front of the room now and again and is\n * the one thing in the office nobody assigned a task to.\n * @returns the cat.\n */\nexport function CatFigure() {\n return (\n <svg className={css.catSvg} viewBox=\"0 0 64 40\" aria-hidden focusable=\"false\">\n <ellipse className={css.propShade} cx=\"32\" cy=\"37\" rx=\"20\" ry=\"3\" />\n <path className={css.catTail} d=\"M12 24 C4 22 2 14 7 9 C5 15 8 20 13 20 Z\" />\n <path className={css.catBody} d=\"M14 22 C14 15 20 12 30 12 C41 12 47 15 47 22 L47 30 C47 34 44 36 40 36 L21 36 C17 36 14 34 14 30 Z\" />\n <path className={css.catLeg} d=\"M20 32 H24 V37 H20 Z M28 32 H32 V37 H28 Z M36 32 H40 V37 H36 Z\" />\n <path className={css.catBody} d=\"M44 16 C51 16 55 20 55 25 C55 30 51 33 45 33 C41 33 39 30 39 25 C39 20 41 16 44 16 Z\" />\n <path className={css.catEar} d=\"M42 17 L41 9 L48 14 Z M52 14 L57 9 L57 17 Z\" />\n <circle className={css.catEye} cx=\"48\" cy=\"24\" r=\"1.5\" />\n <circle className={css.catEye} cx=\"54\" cy=\"24\" r=\"1.5\" />\n <path className={css.catWhisker} d=\"M52 28 L60 26 M52 29 L60 30\" />\n <path className={css.catStripe} d=\"M22 14 L24 20 M29 13 L31 19 M36 14 L38 20\" />\n </svg>\n )\n}\n","/**\n * The agent-team stage: a conversation view tab that draws the team as a room\n * you can look into — every member has a desk of its own with its own computer\n * on it, stands where its live state puts it, and walks the floor to say\n * something to somebody else. The room is the whole tab: while the stage is on\n * screen it holds the composer seat, so nothing is left over the floor; the\n * mailbox, the shared workspace and the task board wait behind a dock of doors\n * on the right edge and open as a glass drawer over the room.\n *\n * Every value it renders is the host's own `team` projection, delivered\n * through the injected store: the browser folds nothing. Geometry comes from\n * the roster alone (no DOM measurement), so the picture is a function of the\n * durable state and nothing else.\n */\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport type { CSSProperties, ReactNode } from 'react'\nimport { StateDot } from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { PropsLocale, PropsRuntime, SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { SessionId, SessionListState } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type {\n TeamBoardEntryView, TeamMemberView, TeamMessageView, TeamTaskStatus, TeamTaskView,\n} from '../contract.ts'\nimport {\n IconTeam16, IconTeamLeader16, IconTeamMailbox16, IconTeamMessage16,\n IconTeamPeer16, IconTeamSend16, IconTeamTask16, IconTeamWorkspace16,\n} from './icons.tsx'\nimport {\n ROOM_BLOCKS, breakAt, deskOf, obstaclesOf, poseFor, spread, stationFor, visitAt,\n type Desk, type Point, type Pose, type Post, type Rect, type Touch,\n} from './room.ts'\nimport { onWall, project, shellVars } from './stagecraft.ts'\nimport { useIdleErrand, useWalk, type Facing } from './walk.ts'\nimport {\n Crew, accentOf, gearOf, hairOf, maskOf, outfitOf, shoeOf, skinOf, toneOf,\n} from './crew.tsx'\nimport { Plant, plantOf } from './flora.tsx'\nimport {\n CabinetFigure, CatFigure, ChairFigure, CoffeeFigure, CoolerFigure, PendantFigure, PrinterFigure,\n} from './props.tsx'\nimport css from './TeamStage.module.css'\n\n/** What the plugin's session follower publishes to this entry. */\nexport interface TeamPanelState {\n /** The session whose log owns the team; absent while no team is in view. */\n readonly leaderId?: string\n /** The session currently open, so the stage can mark the one you are reading. */\n readonly currentId?: string\n readonly members: readonly TeamMemberView[]\n readonly tasks: readonly TeamTaskView[]\n readonly messages: readonly TeamMessageView[]\n /** The shared workspace as the leader's log last recorded it. */\n readonly board: readonly TeamBoardEntryView[]\n /** When that snapshot was taken; absent while the leader has never looked. */\n readonly boardAt?: number\n}\n\n/** Navigation and chrome the plugin body owns (it holds the client services). */\nexport interface TeamInjected {\n /** Open one teammate's transcript through its durable parent address. */\n readonly openMember: (leaderId: string, memberId: string) => void\n /** Return to the leader's own conversation. */\n readonly openLeader: (leaderId: string) => void\n /**\n * Take the composer seat for as long as the room is on screen; the returned\n * disposer hands it back. The room is a picture, not a place you type into,\n * and the tab is worth more than the strip of window the input card takes.\n */\n readonly holdComposer?: () => () => void\n}\n\n/** Complete view-tab props: the root kit, the locale, and the inject face. */\nexport type TeamStageProps =\n PropsRuntime<'conversation.view'>\n & PropsLocale<'team'>\n & TeamInjected\n & { readonly useTeam: SnapshotSelectorHook<TeamPanelState> }\n\ntype Translate = PropsLocale<'team'>['t']\n\n/** How far back the mailbox counts as \"this is what the member is doing now\". */\nconst LIVE_MESSAGES = 4\n\n/** How much of a message one member says out loud while it delivers it. */\nconst SPEECH_CHARS = 44\n\n/** How much of a message one log row carries. */\nconst LOG_CHARS = 110\n\n/** How long one delivery keeps its carrier away from its own desk. */\nconst ERRAND_MS = 9_000\n\n/** The board's columns, left to right. */\nconst COLUMNS: readonly TeamTaskStatus[] = ['pending', 'active', 'done']\n\n/** Join the non-empty parts of a meta line. */\nfunction meta(...parts: (string | undefined)[]): string {\n return parts.filter(part => part !== undefined && part !== '').join(' · ')\n}\n\n/** Wall-clock hh:mm for one mailbox row. */\nfunction clock(time: number): string {\n try {\n return new Date(time).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })\n } catch {\n // Swallows only a RangeError from an out-of-range logged timestamp: a\n // mailbox row must render even when its clock cannot.\n return ''\n }\n}\n\n/** The glyph one small avatar carries: the member's first character. */\nfunction initial(name: string): string {\n return [...name][0]?.toUpperCase() ?? '?'\n}\n\n/** One line of a message, short enough to read where it is shown. */\nfunction short(text: string, limit: number): string {\n const line = text.replace(/\\s+/gu, ' ').trim()\n return [...line].length <= limit ? line : `${[...line].slice(0, limit).join('')}…`\n}\n\n/** Stagger the entry animation of a list without hard-coding per-row CSS. */\nfunction stagger(index: number): CSSProperties {\n return { animationDelay: `${Math.min(index, 10) * 30}ms` }\n}\n\n/** The three ledgers waiting behind the dock on the right edge of the room. */\ntype PanelId = 'feed' | 'workspace' | 'tasks'\n\n/** The preset pictures a workstation monitor can show. */\nconst APPS = ['code', 'chart', 'doc', 'mail', 'grid', 'term'] as const\ntype AppKind = typeof APPS[number]\n\n/** How many bars each preset picture is drawn from. */\nconst APP_BARS: Record<AppKind, number> = { code: 5, chart: 5, doc: 4, mail: 3, grid: 4, term: 4 }\n\n/** Which picture one seat's monitor shows; the leader watches the dashboard. */\nfunction appOf(seat: number): AppKind {\n if (seat < 0) return 'chart'\n return APPS[seat % APPS.length] ?? 'code'\n}\n\n/** One preset screen picture, drawn from bars alone so the theme owns it. */\nfunction ScreenApp(props: { readonly app: AppKind }) {\n const { app } = props\n return (\n <span className={css.screenApp} data-app={app} aria-hidden>\n {Array.from({ length: APP_BARS[app] }, (_, index) => <i key={index} />)}\n </span>\n )\n}\n\n/** A member as a tiny portrait: its own mask in its own accent. */\nfunction Cameo(props: { readonly seat: number | undefined, readonly name: string }) {\n const { seat, name } = props\n if (seat === undefined) return <span className={css.discGlyph}>{initial(name)}</span>\n return (\n <span className={css.cameo} data-cameo-species={maskOf(seat)} style={accentOf(seat)}>\n <Crew\n kind={maskOf(seat)}\n className={css.cameoCrew}\n portrait\n hair={hairOf(seat)}\n gear={gearOf(seat)}\n tone={toneOf(seat)}\n skin={skinOf(seat)}\n />\n </span>\n )\n}\n\n/** Where one thing stands on the floor, and how big it draws there. */\nfunction at(post: Post | Point, scale: number): CSSProperties {\n const screen = project(post)\n return {\n left: `${screen.left}%`,\n top: `${screen.top}%`,\n // Depth rides a variable rather than an inline z-index: an inline z-index\n // would outrank the stylesheet and pin a hovered member under its desk.\n '--team-depth': Math.round(post.y),\n // Perspective and the member's own size are one number by the time the\n // stylesheet sees them: something further back is smaller by exactly the\n // amount the floor under it is narrower.\n '--team-scale': Math.round(screen.scale * scale * 1000) / 1000,\n } as CSSProperties\n}\n\n/** Stagger each chair's occasional settle, so the office does not bounce in unison. */\nfunction chairDelay(seat: number): CSSProperties {\n return { '--team-chair-delay': `${-((seat + 1) % 5) * 1.35}s` } as CSSProperties\n}\n\n/**\n * The delivery currently being carried across the room. One message keeps its\n * carrier away from its own desk for a while and then lets it walk back: the\n * room shows what just happened, not the whole history at once.\n * @param latest - the newest mailbox row.\n * @returns the row while its errand is running.\n */\nfunction useVisit(latest: TeamMessageView | undefined): TeamMessageView | undefined {\n const [live, setLive] = useState<string | undefined>(undefined)\n // A settlement is the runtime's own account of an activation ending; nobody\n // walks across the room to deliver it.\n const id = latest !== undefined && latest.kind !== 'settled' ? latest.messageId : undefined\n useEffect(() => {\n if (id === undefined) return undefined\n setLive(id)\n const timer = setTimeout(() => { setLive(undefined) }, ERRAND_MS)\n return () => { clearTimeout(timer) }\n }, [id])\n return live !== undefined && live === id ? latest : undefined\n}\n\n/**\n * The team stage. Rendered as one conversation view tab, so it exists only\n * while the surrounding session has a team — an ordinary conversation never\n * grows a tab it cannot fill.\n */\nexport function TeamStage(props: TeamStageProps) {\n const { useTeam, useSessions, openMember, openLeader, holdComposer, t } = props\n const state = useTeam(snapshot => snapshot)\n const sessions: SessionListState = useSessions(snapshot => snapshot)\n /** The member the pointer is over, anywhere on the stage. */\n const [focus, setFocus] = useState<string | undefined>(undefined)\n /** Which ledger the drawer is showing; the room stands alone by default. */\n const [panel, setPanel] = useState<PanelId | undefined>(undefined)\n\n const { leaderId, currentId, members, tasks, messages, board, boardAt } = state\n const visit = useVisit(messages[messages.length - 1])\n\n // The room is the whole tab: the composer seat stays ours until the reader\n // leaves this view, and the plugin body gives it straight back.\n useEffect(() => holdComposer?.(), [holdComposer])\n\n const running = useMemo(\n () => new Set(members\n .filter(member => sessions.byId[member.memberId as SessionId]?.running === true)\n .map(member => member.memberId)),\n [members, sessions.byId],\n )\n\n /** The last thing the visible mailbox tail says about each member. */\n const touched = useMemo(() => {\n const out = new Map<string, Touch>()\n for (const message of messages.slice(-LIVE_MESSAGES)) {\n if (message.from !== undefined) out.set(message.from, message.kind === 'message' ? 'sent' : 'reported')\n if (message.to !== undefined) out.set(message.to, 'got')\n }\n return out\n }, [messages])\n\n /** Mail counted as read: everything that had arrived when the feed was last open. */\n const seenMessages = useRef(messages.length)\n useEffect(() => {\n if (panel === 'feed') seenMessages.current = messages.length\n }, [panel, messages.length])\n const freshMail = panel !== 'feed' && messages.length > seenMessages.current\n\n if (leaderId === undefined || members.length === 0) {\n return (\n <div className={css.stage} data-agent-team-stage>\n <p className={css.blankTitle}>{t('stage.noTeam')}</p>\n <p className={css.blankHint}>{t('stage.noTeamHint')}</p>\n </div>\n )\n }\n\n const names = new Map<string, string>([[leaderId, t('member.leader')]])\n for (const member of members) names.set(member.memberId, member.name)\n /** Roster seat per member id, so the ledgers can draw the same cast. */\n const seats = new Map<string, number>([[leaderId, -1]])\n members.forEach((member, index) => seats.set(member.memberId, index))\n const openOf = (memberId: string): number =>\n tasks.filter(task => task.assigneeId === memberId && task.status !== 'done').length\n\n // The leader takes the first desk and every teammate the next, in roster\n // order — a member keeps the same desk for as long as it is on the team.\n const roster = [leaderId, ...members.map(member => member.memberId)]\n const desks = new Map<string, Desk>(roster.map((id, index) => [id, deskOf(index, roster.length)]))\n\n /** Where each member is standing right now: its own desk, or the break corner. */\n const homes = new Map<string, Post>()\n /** Who is away from its own desk, so the desk can be drawn empty. */\n const away = new Set<string>()\n const stations: Post[] = []\n let breaks = 0\n for (const id of roster) {\n const desk = desks.get(id) ?? deskOf(0, roster.length)\n const station = id === leaderId\n ? 'desk'\n : stationFor(running.has(id), touched.get(id), openOf(id))\n if (station === 'break') away.add(id)\n stations.push(station === 'break' ? breakAt(breaks++) : desk)\n }\n // Four members on a break share three places to stand around the sofa; one\n // pass of separation keeps the fourth beside the first rather than inside it.\n const parted = spread(stations)\n roster.forEach((id, index) => {\n const post = stations[index]!\n homes.set(id, { ...post, ...parted[index]! })\n })\n\n /**\n * Where one piece of the break corner stands, and how large it draws there.\n * A piece is placed by its OWN plan rectangle — the same rectangle a walk\n * goes around — so the furniture it is drawn as and the furniture it is\n * walked around as are the same furniture, and it can never creep off the\n * floor and up a wall.\n */\n const loungePiece = (rect: Rect): CSSProperties => {\n const screen = project({ x: rect.x + rect.w / 2, y: rect.y + rect.h / 2 })\n return {\n left: `${screen.left}%`,\n top: `${screen.top}%`,\n width: `${Math.round(rect.w * screen.scale * 100) / 100}%`,\n height: `${Math.round(rect.h * screen.scale * 100) / 100}%`,\n '--team-depth': Math.round(rect.y + rect.h / 2),\n } as CSSProperties\n }\n /** The rug and the floor lamp are furniture too, so they get plan rects. */\n const rugRect: Rect = { x: 70.5, y: 53.5, w: 21, h: 7.5 }\n const lampRect: Rect = { x: 70, y: 47.5, w: 3, h: 7 }\n const [sofaBlock, tableBlock, plantBlock, coolerBlock] = ROOM_BLOCKS\n\n const peers = members.filter(member => member.relation === 'peer')\n const openTasks = tasks.filter(task => task.status !== 'done').length\n const leaderRunning = sessions.byId[leaderId as SessionId]?.running === true\n\n /** The delivery on its feet: who carries it, to whom, and where they meet. */\n const errand = errandOf(visit, leaderId, homes)\n const visitOf = (id: string): Point | undefined =>\n errand !== undefined && errand.fromId === id ? errand.meet : undefined\n /** Which way the two ends of a delivery turn while they talk. */\n const turnOf = (id: string): Facing | undefined => {\n if (errand === undefined) return undefined\n if (errand.fromId === id) return errand.meet.x < errand.host.x ? 'right' : 'left'\n if (errand.toId === id) return errand.meet.x < errand.host.x ? 'left' : 'right'\n return undefined\n }\n\n const toggle = (id: PanelId): void => { setPanel(current => current === id ? undefined : id) }\n const titleOf = (id: PanelId): string =>\n id === 'feed' ? t('stage.feed') : id === 'workspace' ? t('stage.workspace') : t('stage.board')\n\n const tileOf = (id: string, seat: number, member?: TeamMemberView) => {\n const desk = desks.get(id) ?? deskOf(0, roster.length)\n const home = homes.get(id) ?? desk\n const live = seat < 0 ? leaderRunning : running.has(id)\n const name = member?.name ?? t('member.leader')\n return (\n <MemberTile\n key={id}\n id={id}\n name={name}\n seat={seat}\n home={home}\n errand={visitOf(id)}\n count={roster.length}\n scale={home.scale}\n relation={member?.relation ?? 'lead'}\n role={member?.role}\n current={currentId === id}\n running={live}\n pose={poseFor(live, touched.get(id), openOf(id))}\n away={away.has(id)}\n focused={focus === id}\n talking={errand === undefined ? undefined : errand.fromId === id ? 'from' : errand.toId === id ? 'to' : undefined}\n turn={turnOf(id)}\n speech={errand !== undefined && errand.fromId === id ? short(errand.message.text, SPEECH_CHARS) : undefined}\n tasks={openOf(id)}\n label={member === undefined ? t('member.openLeader') : t('member.open', { name })}\n title={member === undefined\n ? t('member.leader')\n : meta(\n member.name,\n member.role,\n member.model,\n member.effort,\n member.relation === 'peer' ? t('relation.peer') : t('relation.managed'),\n )}\n onOpen={() => {\n if (member === undefined) openLeader(leaderId)\n else openMember(leaderId, id)\n }}\n onFocus={setFocus}\n t={t}\n />\n )\n }\n\n return (\n <div className={css.stage} data-agent-team-stage>\n <header className={css.bar}>\n <span className={css.barTitle}>\n <IconTeam16 size={15} className={css.barIcon} />\n {t('stage.title')}\n </span>\n <span className={css.barHint}>\n <IconTeamPeer16 size={13} />\n {peers.length > 1 ? t('stage.peerRing') : t('stage.roomHint')}\n </span>\n <span className={css.barStats}>\n <span className={css.stat}>{t('stage.members', { count: members.length + 1 })}</span>\n <span className={`${css.stat} ${running.size > 0 ? css.statLive : ''}`}>\n {running.size > 0 ? t('stage.running', { count: running.size }) : t('stage.idle')}\n </span>\n {tasks.length > 0 && (\n <span className={css.stat}>{t('stage.tasks', { open: openTasks, total: tasks.length })}</span>\n )}\n </span>\n </header>\n\n <div className={css.scene}>\n <section className={css.roomPane} aria-label={t('stage.room')}>\n <div className={css.floor} style={shellVars()}>\n {/* The box you are looking into. Five faces, all cut from the same\n numbers the floor arithmetic uses, so the walls meet the floor\n exactly where a member standing at the back wall would. */}\n <span className={css.shell} aria-hidden>\n <span className={css.ceiling} />\n <span className={css.wallLeft} />\n <span className={css.wallRight} />\n <span className={css.wallBack} />\n <span className={css.floorPlane} />\n <span className={css.skirting} />\n </span>\n\n <RoomWall />\n\n {/* Over the desk field and the shelf: the ceiling between the\n windows is where a real office hangs its lamps. */}\n <span className={css.pendant} style={{ left: `${onWall(50)}%` }} aria-hidden>\n <PendantFigure />\n </span>\n\n {/* The service wall on the left: the things an office has that\n nobody has a desk for. */}\n <span className={css.utility} style={at({ x: 3.5, y: 31 }, 1)} aria-hidden>\n <span className={css.utilityCabinet} data-prop=\"cabinet\"><CabinetFigure /></span>\n <span className={css.utilityPrinter} data-prop=\"printer\"><PrinterFigure /></span>\n <span className={css.utilityCoffee} data-prop=\"coffee\"><CoffeeFigure /></span>\n </span>\n\n <span className={css.cat} data-prop=\"cat\" aria-hidden>\n <CatFigure />\n </span>\n\n <div className={css.lounge} aria-hidden>\n <span className={css.rug} data-prop=\"rug\" style={loungePiece(rugRect)} />\n <span className={css.sofa} data-prop=\"sofa\" style={loungePiece(sofaBlock!)} />\n <span className={css.table} data-prop=\"table\" style={loungePiece(tableBlock!)} />\n <span className={css.lamp} data-prop=\"lamp\" style={loungePiece(lampRect)} />\n <span className={css.plant} data-prop=\"plant\" style={loungePiece(plantBlock!)}>\n <Plant kind={plantOf(0)} />\n </span>\n <span className={css.cooler} data-prop=\"cooler\" style={loungePiece(coolerBlock!)}>\n <CoolerFigure />\n </span>\n </div>\n\n {roster.map((id, index) => {\n const seat = index - 1\n const desk = desks.get(id) ?? deskOf(index, roster.length)\n const live = seat < 0 ? leaderRunning : running.has(id)\n return (\n <Workstation\n key={`desk-${id}`}\n id={id}\n desk={desk}\n seat={seat}\n pose={poseFor(live, touched.get(id), openOf(id))}\n line={screenLineOf(id, tasks, messages)}\n empty={away.has(id) || (errand !== undefined && errand.fromId === id)}\n t={t}\n />\n )\n })}\n\n {roster.map((id, index) => tileOf(id, index - 1, members[index - 1]))}\n </div>\n </section>\n\n <nav className={css.dock} aria-label={t('stage.dock')}>\n <DockButton\n id=\"feed\"\n label={t('stage.feed')}\n count={messages.length}\n active={panel === 'feed'}\n fresh={freshMail}\n onToggle={toggle}\n >\n <IconTeamMailbox16 size={15} />\n </DockButton>\n <DockButton\n id=\"workspace\"\n label={t('stage.workspace')}\n count={board.length}\n active={panel === 'workspace'}\n fresh={false}\n onToggle={toggle}\n >\n <IconTeamWorkspace16 size={15} />\n </DockButton>\n <DockButton\n id=\"tasks\"\n label={t('stage.board')}\n count={openTasks}\n active={panel === 'tasks'}\n fresh={false}\n onToggle={toggle}\n >\n <IconTeamTask16 size={15} />\n </DockButton>\n </nav>\n\n {panel !== undefined && (\n <aside className={css.drawer} data-panel={panel} aria-label={titleOf(panel)}>\n <header className={css.drawerHead}>\n <h3 className={css.paneTitle}>\n {panel === 'feed' && <IconTeamMailbox16 size={13} />}\n {panel === 'workspace' && <IconTeamWorkspace16 size={13} />}\n {panel === 'tasks' && <IconTeamTask16 size={13} />}\n {titleOf(panel)}\n {panel === 'workspace' && boardAt !== undefined && (\n <span className={css.paneNote} title={t('stage.boardStale')}>\n {t('stage.boardAt', { time: clock(boardAt) })}\n </span>\n )}\n </h3>\n <button\n type=\"button\"\n className={css.drawerClose}\n onClick={() => { setPanel(undefined) }}\n aria-label={t('drawer.close')}\n >\n ×\n </button>\n </header>\n <div className={css.drawerBody}>\n {panel === 'feed' && (\n <MessageFeed\n roster={roster.map((id, index) => ({\n id,\n name: names.get(id) ?? id,\n seat: index - 1,\n running: index === 0 ? leaderRunning : running.has(id),\n open: openOf(id),\n }))}\n messages={messages}\n names={names}\n seats={seats}\n leaderLabel={t('member.leader')}\n focus={focus}\n onFocus={setFocus}\n t={t}\n />\n )}\n {panel === 'workspace' && (\n board.length === 0\n ? (\n <>\n <p className={css.empty}>{t('stage.noNotes')}</p>\n <p className={css.emptyHint}>{t('stage.noNotesHint')}</p>\n </>\n )\n : (\n <div className={css.notes}>\n {board.map((entry, index) => (\n <NoteCard\n key={entry.key}\n entry={entry}\n index={index}\n seats={seats}\n focus={focus}\n onFocus={onFocus => { setFocus(onFocus) }}\n />\n ))}\n </div>\n )\n )}\n {panel === 'tasks' && (\n tasks.length === 0\n ? <p className={css.empty}>{t('stage.noTasks')}</p>\n : (\n <div className={css.columns}>\n {COLUMNS.map(status => (\n <TaskColumn\n key={status}\n status={status}\n tasks={tasks.filter(task => task.status === status)}\n names={names}\n seats={seats}\n focus={focus}\n onFocus={setFocus}\n t={t}\n />\n ))}\n </div>\n )\n )}\n </div>\n </aside>\n )}\n </div>\n </div>\n )\n}\n\n/** One door on the dock: an icon, a count of what waits behind it, a pulse for news. */\nfunction DockButton(props: {\n readonly id: PanelId\n readonly label: string\n readonly count: number\n readonly active: boolean\n readonly fresh: boolean\n readonly onToggle: (id: PanelId) => void\n readonly children: ReactNode\n}) {\n const { id, label, count, active, fresh, onToggle, children } = props\n return (\n <button\n type=\"button\"\n className={css.dockButton}\n aria-label={label}\n title={label}\n aria-pressed={active}\n data-panel-id={id}\n data-fresh={fresh ? 'true' : undefined}\n onClick={() => { onToggle(id) }}\n >\n {children}\n {count > 0 && <span className={css.dockCount}>{count > 99 ? '99+' : count}</span>}\n </button>\n )\n}\n\n/** One delivery being carried across the room. */\ninterface Errand {\n readonly message: TeamMessageView\n readonly fromId: string\n readonly toId: string\n /** Where the recipient is standing. */\n readonly host: Post\n /** Where the carrier stops to talk. */\n readonly meet: Point\n}\n\n/**\n * The delivery in flight as an errand between two members. Absent when either\n * end is off the roster (a dismissed sender) or when nobody had to move.\n */\nfunction errandOf(\n message: TeamMessageView | undefined,\n leaderId: string,\n homes: ReadonlyMap<string, Post>,\n): Errand | undefined {\n if (message === undefined) return undefined\n const fromId = message.from ?? leaderId\n const toId = message.to ?? leaderId\n const from = homes.get(fromId)\n const host = homes.get(toId)\n if (from === undefined || host === undefined || fromId === toId) return undefined\n return { message, fromId, toId, host, meet: visitAt(host, from.x) }\n}\n\n/**\n * What one member's monitor is showing: the task it is on, or the last thing\n * that was said to it. A screen with nothing on it is a screen switched off.\n */\nfunction screenLineOf(\n memberId: string,\n tasks: readonly TeamTaskView[],\n messages: readonly TeamMessageView[],\n): string | undefined {\n const active = tasks.find(task => task.assigneeId === memberId && task.status === 'active')\n ?? tasks.find(task => task.assigneeId === memberId && task.status !== 'done')\n if (active !== undefined) return short(active.title, 34)\n const inbound = [...messages].reverse().find(message => message.to === memberId)\n return inbound === undefined ? undefined : short(inbound.text, 34)\n}\n\n/**\n * The back wall of the room, and everything hung on it.\n *\n * Every fixture is placed by the SAME floor coordinate a member would stand at\n * to look at it: `onWall` maps a place on the plan onto the wall's own width,\n * so the window somebody wanders over to is the window they end up under. The\n * wall itself is a face of the shell; this is only what is screwed to it.\n */\nfunction RoomWall() {\n return (\n <span className={css.wall} aria-hidden>\n <span className={css.whiteboard} data-prop=\"whiteboard\" style={{ left: `${onWall(16)}%` }}>\n <span className={css.boardGhost} />\n <span className={css.boardInk} />\n <span className={css.boardNote} data-note=\"a\" />\n <span className={css.boardNote} data-note=\"b\" />\n <span className={css.boardTray} />\n <span className={css.boardTrayTop} />\n <span className={css.boardPens} />\n <span className={css.boardEraser} />\n </span>\n\n <span className={css.hanger} style={{ left: `${onWall(25)}%` }}>\n <span className={css.hangerBracket} />\n <Plant kind=\"pothos\" className={css.hangerPlant} />\n </span>\n\n {[30, 62].map(where => (\n <span key={where} className={css.window} data-prop=\"window\" style={{ left: `${onWall(where)}%` }}>\n <span className={css.pane}>\n <span className={css.sky} />\n <span className={css.cloud} data-cloud=\"near\" />\n <span className={css.cloud} data-cloud=\"far\" />\n <span className={css.sea} />\n <span className={css.sail} />\n </span>\n {/* The reveal: two faces of the opening, so the glass is set into a\n wall with thickness rather than painted onto a flat one. */}\n <span className={css.reveal} />\n <span className={css.mullion} />\n <span className={css.sillTop} />\n <span className={css.sill} />\n <span className={css.beam} />\n </span>\n ))}\n\n <span className={css.shelf} data-prop=\"shelf\" style={{ left: `${onWall(46)}%` }}>\n <span className={css.books} />\n <span className={css.bookLeaning} />\n <span className={css.trophy} />\n <Plant kind=\"cactus\" className={css.shelfPlant} />\n <span className={css.plankTop} />\n <span className={css.plank} />\n <span className={css.plankBracket} />\n </span>\n\n <span className={css.clockProp} data-prop=\"clock\" style={{ left: `${onWall(74)}%` }}>\n <span className={css.clockTicks} />\n <span className={css.clockHand} data-hand=\"hour\" />\n <span className={css.clockHand} data-hand=\"minute\" />\n <span className={css.clockHand} data-hand=\"second\" />\n <span className={css.clockPin} />\n </span>\n\n <span className={css.poster} data-prop=\"poster\" style={{ left: `${onWall(86)}%` }}>\n <span className={css.posterArt} />\n </span>\n\n <span className={css.calendar} data-prop=\"calendar\" style={{ left: `${onWall(8)}%` }}>\n <span className={css.calendarHead} />\n <span className={css.calendarGrid} />\n </span>\n </span>\n )\n}\n\n/**\n * One workstation: the desk, the computer on it, the keyboard and the mug. It\n * belongs to the member whose desk it is and stays furnished while its owner\n * is away — a member walks off, its screen keeps working.\n */\nfunction Workstation(props: {\n readonly id: string\n readonly desk: Desk\n readonly seat: number\n readonly pose: Pose\n readonly line: string | undefined\n /** Whether the owner is somewhere else right now. */\n readonly empty: boolean\n readonly t: Translate\n}) {\n const { id, desk, seat, pose, line, empty, t } = props\n const screen = pose === 'working' ? 'working' : line !== undefined ? 'reading' : 'off'\n return (\n <>\n <div\n className={css.desk}\n style={{ ...at(desk, desk.scale), ...accentOf(seat) }}\n data-desk={id}\n data-screen={screen}\n data-empty={empty ? 'true' : undefined}\n aria-hidden\n >\n {/* The slab is a box: a lid you can see across, an apron under its near\n edge and one flank. Everything standing on the desk is placed on the\n lid, so a mug sits back on the surface instead of on the front rail. */}\n <span className={css.deskTop} data-prop=\"desk\">\n <span className={css.deskFlank} />\n <span className={css.deskSurface} />\n <span className={css.deskApron} />\n <span className={css.deskGrain} />\n </span>\n <span className={css.deskLegs} />\n <span className={css.deskModesty} />\n <span className={css.monitor} data-prop=\"monitor\" title={line}>\n {/* The machine is never blank: an idle seat still shows its own\n preset picture, only dimmer. A dark rectangle would read as a\n broken screen rather than as a member with nothing to do. */}\n <span className={css.screen}>\n <ScreenApp app={appOf(seat)} />\n <span className={css.screenText}>{line ?? t('screen.working')}</span>\n <span className={css.glare} />\n </span>\n <span className={css.neck} />\n <span className={css.base} />\n </span>\n {/* Drawn after the computer, because they sit on the near half of the\n lid while it stands at the back of it. */}\n <span className={css.keyboard} data-prop=\"keyboard\" />\n <span className={css.mug} data-prop=\"mug\" />\n <span className={css.papers} data-prop=\"papers\" />\n <span className={css.deskPlant} data-prop=\"deskPlant\">\n <Plant kind={plantOf(seat + 2)} />\n </span>\n </div>\n {/* The chair is the nearest layer at the seat: the backrest reads in\n front of the member, and the SVG keeps its edges crisp at any size. */}\n <span\n className={css.chair}\n style={{ ...at(desk, desk.scale), ...chairDelay(seat) }}\n data-chair={id}\n data-prop=\"chair\"\n aria-hidden\n >\n <ChairFigure />\n </span>\n </>\n )\n}\n\n/** One member of the team, standing — or walking — where its own state puts it. */\nfunction MemberTile(props: {\n readonly id: string\n readonly name: string\n readonly seat: number\n readonly home: Post\n /** Where a delivery has called it away to, while one is in flight. */\n readonly errand: Point | undefined\n /** How many members the room seats, so the tile knows the furniture. */\n readonly count: number\n readonly scale: number\n readonly relation: 'peer' | 'managed' | 'lead'\n readonly role: string | undefined\n readonly current: boolean\n readonly running: boolean\n readonly pose: Pose\n /** Whether the member is away from its own desk. */\n readonly away: boolean\n readonly focused: boolean\n readonly talking: 'from' | 'to' | undefined\n readonly turn: Facing | undefined\n readonly speech: string | undefined\n readonly tasks: number\n readonly label: string\n readonly title: string\n readonly onOpen: () => void\n readonly onFocus: (memberId: string | undefined) => void\n readonly t: Translate\n}) {\n const {\n id, name, seat, home, errand, count, scale, relation, role, current, running, pose, away,\n focused, talking, turn, speech, tasks, label, title, onOpen, onFocus, t,\n } = props\n // The furniture only changes when the roster does, and the walk hook keys its\n // frame loop on this list: rebuilding it every render would restart the trip.\n const obstacles = useMemo(\n () => obstaclesOf(Array.from({ length: count }, (_, index) => deskOf(index, count))),\n [count],\n )\n // Somebody with nothing on their plate and nowhere to be drifts off now and\n // then. A delivery outranks a daydream, and the leader keeps its seat — the\n // first desk is the room's anchor, and a wandering host is a dropped mail.\n const loose = seat >= 0 && pose === 'idle' && errand === undefined && talking === undefined\n const wander = useIdleErrand(seat, loose)\n const spot: Point = errand ?? (loose ? wander ?? home : home)\n const walk = useWalk(home, spot, obstacles, scale)\n const mask = maskOf(seat)\n const outfit = outfitOf(seat)\n const shoes = shoeOf(seat)\n // At its own desk a member faces its own computer, so you see it from\n // behind; on its feet or away from its desk it turns back around.\n const seated = !walk.walking && !away && talking === undefined && wander === undefined\n const facing = walk.walking ? walk.facing : turn ?? (seated ? 'back' : 'front')\n const relationLabel = relation === 'lead'\n ? undefined\n : relation === 'peer' ? t('relation.peer') : t('relation.managed')\n return (\n <button\n type=\"button\"\n ref={walk.ref}\n className={css.person}\n style={{\n ...accentOf(seat),\n ...chairDelay(seat),\n ...stagger(seat + 1),\n }}\n onClick={onOpen}\n onMouseEnter={() => { onFocus(id) }}\n onMouseLeave={() => { onFocus(undefined) }}\n aria-label={label}\n aria-current={current}\n title={title}\n data-member={id}\n data-relation={relation}\n data-species={mask}\n data-pose={pose}\n data-away={away ? 'true' : undefined}\n data-walk={walk.walking ? 'true' : undefined}\n data-facing={facing}\n data-running={running ? 'true' : undefined}\n data-focus={focused ? 'true' : undefined}\n data-talking={talking}\n >\n {speech !== undefined && !walk.walking && (\n <span className={css.speech} data-speech={id}>{speech}</span>\n )}\n {talking === 'to' && !walk.walking && <span className={css.listening} aria-hidden>···</span>}\n {pose === 'idle' && !away && talking === undefined && <span className={css.doze} aria-hidden>zZ</span>}\n\n <span className={css.body}>\n <Crew\n kind={mask}\n back={facing === 'back' || facing === 'away'}\n outfit={outfit}\n shoes={shoes}\n hair={hairOf(seat)}\n gear={gearOf(seat)}\n tone={toneOf(seat)}\n skin={skinOf(seat)}\n className={css.figure}\n />\n {relation === 'lead' && (\n <span className={css.crown} aria-hidden>\n <IconTeamLeader16 size={12} />\n </span>\n )}\n {tasks > 0 && <span className={css.load}>{tasks}</span>}\n </span>\n\n <span className={css.plate}>\n <span className={css.plateName}>{name}</span>\n {(role !== undefined || relationLabel !== undefined) && (\n <span className={css.plateMeta}>{meta(role, relationLabel)}</span>\n )}\n </span>\n <span className={css.state} title={t(running ? 'status.running' : 'status.idle')}>\n <StateDot state={running ? 'ongoing' : 'done'} size={6} />\n </span>\n </button>\n )\n}\n\n/** One member's line in the roster strip: what it is doing, and its latest word. */\ninterface CrewRow {\n readonly id: string\n readonly name: string\n readonly seat: number\n readonly running: boolean\n readonly open: number\n}\n\n/**\n * The mailbox, as a log rather than a chat: a roster strip that keeps one\n * refreshed line per member — the newest thing it said or was told, truncated\n * so a long turn cannot push the room's cast off the pane — over the traffic\n * itself, newest last. Every member of the team writes on the same side; the\n * right-hand side belongs to the reader, and the reader does not post here.\n */\nfunction MessageFeed(props: {\n readonly roster: readonly CrewRow[]\n readonly messages: readonly TeamMessageView[]\n readonly names: ReadonlyMap<string, string>\n readonly seats: ReadonlyMap<string, number>\n readonly leaderLabel: string\n readonly focus: string | undefined\n readonly onFocus: (memberId: string | undefined) => void\n readonly t: Translate\n}) {\n const { roster, messages, names, seats, leaderLabel, focus, onFocus, t } = props\n const scroller = useRef<HTMLDivElement>(null)\n\n // A new delivery is the point of the log: keep the newest row in view.\n useEffect(() => {\n const node = scroller.current\n if (node !== null) node.scrollTop = node.scrollHeight\n }, [messages.length])\n\n return (\n <div className={css.feed}>\n <div className={css.crewList} aria-label={t('feed.crew')}>\n {roster.map(row => {\n const latest = latestOf(row.id, messages)\n return (\n <div\n key={row.id}\n className={css.crewRow}\n data-crew-row={row.id}\n data-focus={focus === row.id ? 'true' : undefined}\n onMouseEnter={() => { onFocus(row.id) }}\n onMouseLeave={() => { onFocus(undefined) }}\n >\n <span className={css.cameoDot} aria-hidden>\n <Cameo seat={row.seat} name={row.name} />\n </span>\n <span className={css.crewName}>{row.name}</span>\n <span className={css.crewState} data-state={row.running ? 'running' : 'idle'}>\n {t(row.running ? 'status.running' : 'status.idle')}\n </span>\n {row.open > 0 && <span className={css.crewOpen}>{t('feed.open', { count: row.open })}</span>}\n <span className={css.crewLine} title={latest?.text}>\n {latest === undefined\n ? t('feed.quiet')\n : `${latest.way === 'got' ? '←' : '→'} ${short(latest.text, 40)}`}\n </span>\n </div>\n )\n })}\n </div>\n\n <h4 className={css.feedTitle}>{t('feed.log')}</h4>\n {messages.length === 0\n ? <p className={css.empty}>{t('stage.noMessages')}</p>\n : (\n <div className={css.log} ref={scroller}>\n {messages.map((message, index) => (\n <LogRow\n key={message.messageId}\n message={message}\n index={index}\n names={names}\n seats={seats}\n leaderLabel={leaderLabel}\n focus={focus}\n onFocus={onFocus}\n t={t}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n\n/** The newest traffic naming one member, and which way it went. */\nfunction latestOf(\n memberId: string,\n messages: readonly TeamMessageView[],\n): { readonly text: string, readonly way: 'got' | 'sent' } | undefined {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index]\n if (message === undefined) continue\n if (message.from === memberId) return { text: message.text, way: 'sent' }\n if (message.to === memberId) return { text: message.text, way: 'got' }\n }\n return undefined\n}\n\n/** One row of the log: who said what to whom, on one line, cut to fit. */\nfunction LogRow(props: {\n readonly message: TeamMessageView\n readonly index: number\n readonly names: ReadonlyMap<string, string>\n readonly seats: ReadonlyMap<string, number>\n readonly leaderLabel: string\n readonly focus: string | undefined\n readonly onFocus: (memberId: string | undefined) => void\n readonly t: Translate\n}) {\n const { message, index, names, seats, leaderLabel, focus, onFocus, t } = props\n const label = (id: string | undefined): string =>\n id === undefined ? leaderLabel : names.get(id) ?? id.slice(0, 6)\n const partner = message.from ?? message.to\n const author = label(message.from)\n return (\n <div\n className={css.logRow}\n data-message-kind={message.kind}\n data-hop={message.hop === undefined ? undefined : String(message.hop)}\n data-focus={partner !== undefined && focus === partner ? 'true' : undefined}\n style={stagger(index)}\n onMouseEnter={() => { onFocus(partner) }}\n onMouseLeave={() => { onFocus(undefined) }}\n >\n <span className={css.logAvatar} aria-hidden>\n <Cameo seat={message.from === undefined ? -1 : seats.get(message.from)} name={author} />\n </span>\n <div className={css.logBody}>\n <span className={css.logHead}>\n <span className={css.logAuthor}>{author}</span>\n <span className={css.logArrow}>→</span>\n <span className={css.logTo}>{label(message.to)}</span>\n {message.kind !== 'message' && (\n <span className={css.logKind}>\n {message.kind === 'report' ? t('message.report') : t('message.settled')}\n </span>\n )}\n {message.hop !== undefined && message.hop > 0 && (\n <span className={css.logHop} title={t('message.hopHint')}>\n {t('message.hop', { hop: message.hop })}\n </span>\n )}\n <span className={css.logTime}>{clock(message.time)}</span>\n </span>\n <span className={css.logText} title={message.text}>{short(message.text, LOG_CHARS)}</span>\n </div>\n <span className={css.logTail} aria-hidden>\n {message.from === undefined ? <IconTeamSend16 size={12} /> : <IconTeamMessage16 size={12} />}\n </span>\n </div>\n )\n}\n\n/** One note pinned to the shared workspace, as the leader last saw it. */\nfunction NoteCard(props: {\n readonly entry: TeamBoardEntryView\n readonly index: number\n readonly seats: ReadonlyMap<string, number>\n readonly focus: string | undefined\n readonly onFocus: (memberId: string | undefined) => void\n}) {\n const { entry, index, seats, focus, onFocus } = props\n return (\n <div\n className={css.note}\n data-note-key={entry.key}\n data-focus={focus === entry.authorId ? 'true' : undefined}\n style={stagger(index)}\n onMouseEnter={() => { onFocus(entry.authorId) }}\n onMouseLeave={() => { onFocus(undefined) }}\n >\n <span className={css.noteKey} title={entry.key}>{entry.key}</span>\n <span className={css.notePreview} title={entry.preview}>{entry.preview}</span>\n <span className={css.noteFoot}>\n <span className={css.noteAuthor}>\n <span className={css.cameoDot} aria-hidden>\n <Cameo seat={seats.get(entry.authorId)} name={entry.authorName} />\n </span>\n {entry.authorName}\n </span>\n <span className={css.noteTime}>{clock(entry.updatedAt)}</span>\n </span>\n </div>\n )\n}\n\n/** One lane of the shared task board. */\nfunction TaskColumn(props: {\n readonly status: TeamTaskStatus\n readonly tasks: readonly TeamTaskView[]\n readonly names: ReadonlyMap<string, string>\n readonly seats: ReadonlyMap<string, number>\n readonly focus: string | undefined\n readonly onFocus: (memberId: string | undefined) => void\n readonly t: Translate\n}) {\n const { status, tasks, names, seats, focus, onFocus, t } = props\n const title = status === 'done' ? t('task.done') : status === 'active' ? t('task.active') : t('task.pending')\n return (\n <div className={css.column} data-column={status}>\n <h4 className={css.columnTitle}>\n {title}\n <span className={css.columnCount}>{tasks.length}</span>\n </h4>\n {tasks.map((task, index) => (\n <div\n key={task.taskId}\n className={css.card}\n data-task-status={task.status}\n data-focus={task.assigneeId !== undefined && focus === task.assigneeId ? 'true' : undefined}\n style={stagger(index)}\n onMouseEnter={() => { onFocus(task.assigneeId) }}\n onMouseLeave={() => { onFocus(undefined) }}\n >\n <span className={css.cardTitle} title={task.title}>{task.title}</span>\n <span className={css.cardFoot}>\n <span className={css.cardWho}>\n {task.assigneeId !== undefined && (\n <span className={css.cameoDot} aria-hidden>\n <Cameo\n seat={seats.get(task.assigneeId)}\n name={names.get(task.assigneeId) ?? task.assigneeId}\n />\n </span>\n )}\n {task.assigneeId === undefined\n ? t('task.unassigned')\n : names.get(task.assigneeId) ?? task.assigneeId.slice(0, 6)}\n </span>\n {task.note !== undefined && <span className={css.cardNote} title={task.note}>{task.note}</span>}\n </span>\n </div>\n ))}\n </div>\n )\n}\n","/**\n * The composer seat, while the team room is on screen.\n *\n * A conversation view tab cannot reach the composer on its own — the composer\n * chain's selectors never see which view is active — so the plugin body puts\n * this entry on the chain for exactly as long as a stage is mounted. Winning\n * the election hides the whole composer stack (the card, its docks and the\n * stats line) without touching one node of the host tree, and the marker\n * attribute hands the freed height to the view: the room gets the tab, and the\n * reader gets its input back the moment it opens another tab.\n */\nimport css from './TeamStage.module.css'\n\n/** The empty composer: a zero-height marker where the input card would be. */\nexport function ComposerAway() {\n return <span className={css.composerAway} data-conversation-composer-overlay aria-hidden />\n}\n","/** Locale copy for the agent-team stage view. Product copy is Chinese. */\nexport const NS = 'team'\n\nexport const zh = {\n 'view.title': 'Agent 团队',\n 'stage.title': '团队协作室',\n 'stage.room': '协作室',\n 'stage.feed': '消息流',\n 'stage.board': '任务板',\n 'stage.workspace': '共享工作区',\n 'stage.members': '{count} 名成员',\n 'stage.running': '{count} 名工作中',\n 'stage.idle': '全部空闲',\n 'stage.tasks': '{open}/{total} 项任务',\n 'stage.noTeam': '这个会话还没有组建团队',\n 'stage.noTeamHint': '让主会话调用 team_spawn 派生第一名队友。',\n 'stage.noMessages': '还没有消息往来',\n 'stage.noTasks': '还没有任务',\n 'stage.noNotes': '共享工作区还是空的',\n 'stage.noNotesHint': '成员用 team_note 把结论写在这里,不必互相发消息。',\n 'stage.boardAt': '{time} 的快照',\n 'stage.boardStale': '队友的写入直接进持久工作区,不经过主会话的日志——这里是主会话最后一次读写时的样子',\n 'stage.peerRing': '同级成员可以直接走过去找对方;受管成员只找主会话',\n 'stage.roomHint': '每个成员都有自己的工位;要说话就走过去说',\n 'stage.dock': '协作面板',\n 'drawer.close': '收起面板',\n 'feed.crew': '成员状态',\n 'feed.log': '往来记录',\n 'feed.open': '在手 {count}',\n 'feed.quiet': '还没有往来',\n 'screen.working': '工作中…',\n 'member.leader': '主会话',\n 'member.open': '打开 {name} 的会话',\n 'member.openLeader': '回到主会话',\n 'member.here': '你正在看这个会话',\n 'relation.managed': '受管',\n 'relation.peer': '同级',\n 'status.running': '工作中',\n 'status.idle': '空闲',\n 'task.pending': '待办',\n 'task.active': '进行中',\n 'task.done': '已完成',\n 'task.unassigned': '未指派',\n 'message.report': '汇报',\n 'message.settled': '已收工',\n 'message.hop': '第 {hop} 跳',\n 'message.hopHint': '这条消息在一次队友间对话里的转发深度;深度用完只能回到主会话',\n} as const\n\n/** The namespace's dictionary key union (literal keys, locale-typed seats). */\nexport type TeamKey = keyof typeof zh\n\nexport const en: Record<TeamKey, string> = {\n 'view.title': 'Agent team',\n 'stage.title': 'Team room',\n 'stage.room': 'Team room',\n 'stage.feed': 'Mailbox',\n 'stage.board': 'Task board',\n 'stage.workspace': 'Shared workspace',\n 'stage.members': '{count} members',\n 'stage.running': '{count} working',\n 'stage.idle': 'All idle',\n 'stage.tasks': '{open}/{total} tasks',\n 'stage.noTeam': 'This session has no team yet',\n 'stage.noTeamHint': 'Ask the main session to call team_spawn for the first teammate.',\n 'stage.noMessages': 'No messages yet',\n 'stage.noTasks': 'No tasks yet',\n 'stage.noNotes': 'The shared workspace is empty',\n 'stage.noNotesHint': 'Members write conclusions here with team_note instead of messaging them around.',\n 'stage.boardAt': 'as of {time}',\n 'stage.boardStale': 'Teammates write straight to the durable workspace, which no session log records — this is how it looked when the main session last read or wrote it',\n 'stage.peerRing': 'Peers may walk straight over to each other; managed members only reach the main session',\n 'stage.roomHint': 'Everyone keeps a desk of their own and walks over to say something',\n 'stage.dock': 'Panels',\n 'drawer.close': 'Close the panel',\n 'feed.crew': 'Who is doing what',\n 'feed.log': 'Traffic',\n 'feed.open': '{count} open',\n 'feed.quiet': 'Nothing said yet',\n 'screen.working': 'working…',\n 'member.leader': 'Main session',\n 'member.open': 'Open the session of {name}',\n 'member.openLeader': 'Back to the main session',\n 'member.here': 'You are reading this session',\n 'relation.managed': 'Managed',\n 'relation.peer': 'Peer',\n 'status.running': 'Working',\n 'status.idle': 'Idle',\n 'task.pending': 'To do',\n 'task.active': 'In progress',\n 'task.done': 'Done',\n 'task.unassigned': 'Unassigned',\n 'message.report': 'report',\n 'message.settled': 'finished',\n 'message.hop': 'hop {hop}',\n 'message.hopHint': 'How far this delivery relayed inside one teammate conversation; a spent budget leaves only the leader',\n}\n","/**\n * Browser half of dsh-team: follow the current session's `team` projection and\n * contribute the team stage as one conversation view tab.\n *\n * There is no client-side fold. The host computes the team value once and the\n * framework pushes it here (history tail baseline + `session/projection`\n * frames), so this module only tracks WHICH session's value is on screen — and\n * whether that session has a team at all, because the tab exists exactly while\n * it does: an ordinary conversation never grows a view it cannot fill.\n */\nimport type { ClientContext, ISessions, SessionId, SubagentAddress } from '@deepseek-ai/dsh-client-runtime/client'\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-locale/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type { TeamView } from '../contract.ts'\nimport { TeamStage, type TeamInjected, type TeamPanelState } from './TeamStage.tsx'\nimport { ComposerAway } from './composer.tsx'\nimport { en, NS, zh, type TeamKey } from './locales.ts'\n\ndeclare module '@deepseek-ai/dsh-client-ui-slots' {\n interface LocaleNamespaceMap {\n /** Agent-team stage copy. */\n team: TeamKey\n }\n}\n\n/** Required services: the slot registry, the session domain, and locale. */\nexport const inject = ['slots', 'sessions', 'locale']\n\n/** No session in view, or a session with no team. */\nconst EMPTY: TeamPanelState = { members: [], tasks: [], messages: [], board: [] }\n\n/** View-ring position: after the shipped chat and trajectory tabs. */\nconst VIEW_ORDER = 20\n\n/**\n * Chain position of the empty composer: tried after everything else, so a\n * pending approval — or any other takeover — keeps the seat and the blocked\n * agent can still be answered from this tab.\n */\nconst COMPOSER_LAST = 100\n\n/** Project one session's folded team value into the stage state. */\nfunction panelState(leaderId: SessionId, currentId: SessionId, team: TeamView): TeamPanelState {\n return {\n leaderId,\n currentId,\n members: team.members,\n tasks: team.tasks,\n messages: team.messages,\n board: team.board,\n ...team.boardAt !== undefined ? { boardAt: team.boardAt } : {},\n }\n}\n\n/** Whether the state on screen names a team worth a tab of its own. */\nfunction present(state: TeamPanelState): boolean {\n return state.leaderId !== undefined && state.members.length > 0\n}\n\n/**\n * Register the locale dictionary and the view tab, and keep the stage store\n * pointed at the right session.\n * @param ctx - client root context.\n */\nexport function apply(ctx: ClientContext): void {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'dsh-team: dictionaries')\n const t = ctx.locale.bind(NS)\n\n // The host `dsh-session` merge types ctx.sessions as the SessionStore; the\n // browser service is the client ISessions face (same value, other shape).\n const sessions = ctx.sessions as unknown as ISessions\n const store = createSnapshotStore<TeamPanelState>(EMPTY)\n\n let followed: SessionId | undefined\n let disposeFace: (() => void) | null = null\n /**\n * The leader's own projection, watched while somebody else's transcript is\n * the one on screen. Reading a teammate attaches the follower to a session\n * that folds no team of its own, so without this the room would freeze at the\n * last value it saw — and would go on drawing a team that had already been\n * disbanded. Watching the leader keeps the room live, and lets it close.\n */\n let disposeLeader: (() => void) | null = null\n\n const dropLeader = (): void => {\n disposeLeader?.()\n disposeLeader = null\n }\n\n /** No team on screen: the room, and the tab it lives in, both go. */\n const clear = (): void => {\n dropLeader()\n store.set(EMPTY)\n }\n\n /**\n * Follow the leader of the team on screen while its own transcript is not.\n * @param leaderId - the session whose log owns the team.\n * @param current - the session being read, kept as the \"you are here\" marker.\n */\n const watchLeader = (leaderId: SessionId, current: SessionId): void => {\n dropLeader()\n const binding = sessions.binding(leaderId)\n // The leader is unloaded: the team is still there, only nobody is folding\n // it right now. The room holds what it last saw until the leader is back.\n if (binding === undefined) return\n const face = binding.session.projections.faceOf('team')\n const pull = (): void => {\n const team = face.getSnapshot() as TeamView | undefined\n // Disbanded, or down to its last dismissed teammate: nothing to draw.\n if (team === undefined || team.members.length === 0) {\n clear()\n return\n }\n store.set(panelState(leaderId, current, team))\n }\n disposeLeader = face.subscribe(pull)\n pull()\n }\n\n /**\n * The session in view folds no team of its own. While it belongs to the team\n * already on screen, keep showing that team and just move the \"you are here\"\n * marker — navigating into a member must not make the stage vanish under the\n * cursor — and follow the leader from there, so the room closes with the team.\n */\n const holdOrClear = (current: SessionId): void => {\n const held = store.getSnapshot()\n if (held.leaderId === undefined || !held.members.some(member => member.memberId === current)) {\n clear()\n return\n }\n store.set({ ...held, currentId: current })\n watchLeader(held.leaderId as SessionId, current)\n }\n\n const follow = (): void => {\n const current = sessions.list.getSnapshot().current\n // Re-run while no face is held: the current id can be published before its\n // binding exists, and the retry is one map lookup.\n if (current === followed && (current === undefined || disposeFace !== null)) return\n followed = current\n disposeFace?.()\n disposeFace = null\n if (current === undefined) {\n clear()\n return\n }\n const binding = sessions.binding(current)\n if (binding === undefined) {\n holdOrClear(current)\n return\n }\n const face = binding.session.projections.faceOf('team')\n const pull = (): void => {\n const team = face.getSnapshot() as TeamView | undefined\n if (team !== undefined && team.members.length > 0) {\n // This session folds the team itself; no second subscription needed.\n dropLeader()\n store.set(panelState(current, current, team))\n return\n }\n holdOrClear(current)\n }\n pull()\n disposeFace = face.subscribe(pull)\n }\n\n follow()\n const disposeList = sessions.list.subscribe(follow)\n ctx.effect(() => () => {\n disposeList()\n disposeFace?.()\n disposeFace = null\n dropLeader()\n followed = undefined\n store.set(EMPTY)\n }, 'dsh-team: session follower')\n\n /** Open one teammate transcript through its durable direct-parent address. */\n const openMember = (leaderId: string, memberId: string): void => {\n const address: SubagentAddress = sessions.subagentAddress(memberId as SessionId)\n ?? { parentSessionId: leaderId as SessionId, childSessionId: memberId as SessionId, mode: 'continuable' }\n try {\n sessions.openSubagent(address)\n } catch {\n // Swallows only \"not a healthy catalog child\": the parent's child catalog\n // has not been fetched yet in this client. Refresh it, then try once more.\n void sessions.refreshSubagents(leaderId as SessionId).then(() => {\n try {\n sessions.openSubagent(address)\n } catch {\n // The child is genuinely absent from the refreshed catalog (dismissed\n // and pruned, or a backend read failure); the stage stays put.\n }\n })\n }\n }\n\n /**\n * How many stages are on screen. A view tab renders once, but the seat is\n * keyed on the count: a re-mount that overlaps its own teardown must not\n * hand the composer back under a live room.\n */\n const rooms = createSnapshotStore<number>(0)\n\n /** Take the composer seat for one mounted stage; the disposer gives it back. */\n const holdComposer = (): (() => void) => {\n rooms.set(rooms.getSnapshot() + 1)\n let held = true\n return () => {\n if (!held) return\n held = false\n rooms.set(Math.max(0, rooms.getSnapshot() - 1))\n }\n }\n\n const injectFace = (): TeamInjected & { readonly hooks: { readonly team: typeof store } } => ({\n hooks: { team: store },\n openMember,\n openLeader: (leaderId: string) => { sessions.open(leaderId as SessionId) },\n holdComposer,\n })\n\n /**\n * The composer chain entry that empties the composer seat while a room is on\n * screen. Registering and withdrawing it is what re-runs the election — the\n * selector itself cannot see the active view — so the seat follows the tab\n * without the stage ever touching a node it does not own.\n */\n ctx.slots.inject('conversation.composer', () => {\n let disposeSeat: (() => void) | null = null\n const sync = (): void => {\n const wanted = rooms.getSnapshot() > 0\n if (wanted === (disposeSeat !== null)) return\n if (!wanted) {\n disposeSeat?.()\n disposeSeat = null\n return\n }\n disposeSeat = ctx.slots.register({\n name: 'conversation.composer',\n priority: COMPOSER_LAST,\n select: () => ({}),\n }, ComposerAway)\n }\n sync()\n const disposeStore = rooms.subscribe(sync)\n return () => {\n disposeStore()\n disposeSeat?.()\n disposeSeat = null\n }\n })\n\n /**\n * The tab follows the team, not the plugin: it is registered while a team is\n * on screen and withdrawn when the team ends, so the view ring shows an\n * agent-team tab exactly in the sessions that have one. An unknown active\n * view id falls back to chat, so withdrawing the tab under the reader is safe.\n */\n ctx.slots.inject('conversation.view', () => {\n let disposeTab: (() => void) | null = null\n const sync = (): void => {\n const wanted = present(store.getSnapshot())\n if (wanted === (disposeTab !== null)) return\n if (!wanted) {\n disposeTab?.()\n disposeTab = null\n return\n }\n disposeTab = ctx.slots.register({\n name: 'conversation.view',\n id: 'agent-team',\n order: VIEW_ORDER,\n locale: NS,\n label: () => t('view.title'),\n inject: injectFace,\n }, TeamStage)\n }\n sync()\n const disposeStore = store.subscribe(sync)\n return () => {\n disposeStore()\n disposeTab?.()\n disposeTab = null\n }\n })\n}\n\nexport type { TeamPanelState }\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["NEAR","round","useRef","useState","useCallback","css","css","useId","css","css","useState","useMemo","useRef","StateDot","css","createSnapshotStore"],"sources":["../src/client/icons.tsx","../src/client/room.ts","../src/client/stagecraft.ts","../src/client/walk.ts","../src/client/crew.tsx","../src/client/flora.tsx","../src/client/props.tsx","../src/client/TeamStage.tsx","../src/client/composer.tsx","../src/client/locales.ts","../src/client/index.ts"],"sourcesContent":["/**\n * ic_ds_team_* glyphs for the agent-team stage view. Same language as the\n * shipped icon set: 16px viewBox, single-color outline, fill=currentColor.\n */\nimport type { CSSProperties } from 'react'\n\nexport interface TeamIconProps {\n readonly size?: number\n readonly className?: string\n readonly style?: CSSProperties\n}\n\n/** Leader crown: three-point crown over a base band. */\nexport function IconTeamLeader16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.8 5.1 2.8 10.9 13.2 10.9 13.2 5.1 10.9 6.9 8 4.2 5.1 6.9 Z M1.8 4.05 C 1.8 3.45 2.55 3.15 2.95 3.6 L 5.2 6.05 8 3.35 10.8 6.05 13.05 3.6 C 13.45 3.15 14.2 3.45 14.2 4.05 L 14.2 11.4 C 14.2 11.68 13.98 11.9 13.7 11.9 L 2.3 11.9 C 2.02 11.9 1.8 11.68 1.8 11.4 Z M1.4 12.6 L 14.6 12.6 L 14.6 14.2 L 1.4 14.2 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n\n/** Team mailbox: envelope with a delivery arrow entering the slot. */\nexport function IconTeamMailbox16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.6 3.7 L 14.4 3.7 C 14.62 3.7 14.8 3.88 14.8 4.1 L 14.8 11.6 C 14.8 11.82 14.62 12 14.4 12 L 1.6 12 C 1.38 12 1.2 11.82 1.2 11.6 L 1.2 4.1 C 1.2 3.88 1.38 3.7 1.6 3.7 Z M2.2 5.35 L 8 9.15 13.8 5.35 L 13.8 10.9 L 2.2 10.9 Z M1.2 3.2 C 1.2 2.92 1.42 2.7 1.7 2.7 L 14.3 2.7 C 14.58 2.7 14.8 2.92 14.8 3.2 L 14.8 3.2 C 14.8 3.48 14.58 3.7 14.3 3.7 L 1.7 3.7 C 1.42 3.7 1.2 3.48 1.2 3.2 Z M6.5 1.1 C 6.78 1.1 7 1.32 7 1.6 L 7 2.3 L 5 2.3 L 5 1.6 C 5 1.32 5.22 1.1 5.5 1.1 Z M10.7 1.1 C 10.98 1.1 11.2 1.32 11.2 1.6 L 11.2 2.3 L 9.2 2.3 L 9.2 1.6 C 9.2 1.32 9.42 1.1 9.7 1.1 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n\n/** Team task: clipboard with a check stroke. */\nexport function IconTeamTask16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5 1.1 C 5.22 1.1 5.4 1.28 5.4 1.5 L 5.4 2.4 L 10.6 2.4 L 10.6 1.5 C 10.6 1.28 10.78 1.1 11 1.1 C 11.22 1.1 11.4 1.28 11.4 1.5 L 11.4 2.4 L 12.6 2.4 C 12.88 2.4 13.1 2.62 13.1 2.9 L 13.1 14.1 C 13.1 14.38 12.88 14.6 12.6 14.6 L 3.4 14.6 C 3.12 14.6 2.9 14.38 2.9 14.1 L 2.9 2.9 C 2.9 2.62 3.12 2.4 3.4 2.4 L 4.6 2.4 L 4.6 1.5 C 4.6 1.28 4.78 1.1 5 1.1 Z M3.7 3.4 L 3.7 13.8 L 12.3 13.8 L 12.3 3.4 L 3.7 3.4 Z M10.4 6.4 C 10.62 6.4 10.8 6.58 10.8 6.8 L 10.8 7.9 C 10.8 8.12 10.62 8.3 10.4 8.3 L 6.1 8.3 C 5.88 8.3 5.7 8.12 5.7 7.9 L 5.7 6.8 C 5.7 6.58 5.88 6.4 6.1 6.4 Z M5.6 8.9 L 7 10.3 L 9.7 7.6 L 8.65 6.55 L 7 8.2 L 6.65 7.85 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n/** Team peer link: two nodes joined by a horizontal link. */\nexport function IconTeamPeer16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.6 4.2 C 2.72 4.2 2 4.92 2 5.8 C 2 6.68 2.72 7.4 3.6 7.4 C 4.48 7.4 5.2 6.68 5.2 5.8 C 5.2 4.92 4.48 4.2 3.6 4.2 Z M1 5.8 C 1 4.36 2.16 3.2 3.6 3.2 C 5.04 3.2 6.2 4.36 6.2 5.8 C 6.2 7.24 5.04 8.4 3.6 8.4 C 2.16 8.4 1 7.24 1 5.8 Z M12.4 8.6 C 11.52 8.6 10.8 9.32 10.8 10.2 C 10.8 11.08 11.52 11.8 12.4 11.8 C 13.28 11.8 14 11.08 14 10.2 C 14 9.32 13.28 8.6 12.4 8.6 Z M9.8 10.2 C 9.8 8.76 10.96 7.6 12.4 7.6 C 13.84 7.6 15 8.76 15 10.2 C 15 11.64 13.84 12.8 12.4 12.8 C 10.96 12.8 9.8 11.64 9.8 10.2 Z M5.9 8.1 L 10.1 9.9 L 10.1 8.2 L 5.9 6.4 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n/** Team message: paper plane with a motion trail. */\nexport function IconTeamMessage16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.9 1.4 C 14.12 1.4 14.3 1.58 14.3 1.8 C 14.3 1.88 14.28 1.96 14.25 2.04 L 10.35 14.04 C 10.24 14.36 9.88 14.5 9.6 14.34 C 9.47 14.27 9.38 14.14 9.35 14 L 7.8 8.8 L 2.6 7.25 C 2.34 7.17 2.17 6.9 2.22 6.63 C 2.25 6.5 2.34 6.39 2.46 6.33 L 14.46 2.33 C 14.62 2.28 14.78 2.33 14.9 2.45 Z M4.5 6.4 L 7.9 7.7 L 8.6 11.9 L 11.8 3.4 Z M8.4 8.1 L 12.4 4.2 L 7.1 6.1 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n/** The team mark: three nodes around a hub. */\nexport function IconTeam16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 1.2 C 8.28 1.2 8.5 1.42 8.5 1.7 L 8.5 4 L 11.2 4 C 11.48 4 11.7 4.22 11.7 4.5 C 11.7 4.78 11.48 5 11.2 5 L 8.5 5 L 8.5 7.7 C 8.5 7.98 8.28 8.2 8 8.2 C 7.72 8.2 7.5 7.98 7.5 7.7 L 7.5 5 L 4.8 5 C 4.52 5 4.3 4.78 4.3 4.5 C 4.3 4.22 4.52 4 4.8 4 L 7.5 4 L 7.5 1.7 C 7.5 1.42 7.72 1.2 8 1.2 Z M2.6 9.4 C 2.88 9.4 3.1 9.62 3.1 9.9 L 3.1 11.5 L 4.7 11.5 C 4.98 11.5 5.2 11.72 5.2 12 C 5.2 12.28 4.98 12.5 4.7 12.5 L 3.1 12.5 L 3.1 14.1 C 3.1 14.38 2.88 14.6 2.6 14.6 C 2.32 14.6 2.1 14.38 2.1 14.1 L 2.1 12.5 L 0.5 12.5 C 0.22 12.5 0 12.28 0 12 C 0 11.72 0.22 11.5 0.5 11.5 L 2.1 11.5 L 2.1 9.9 C 2.1 9.62 2.32 9.4 2.6 9.4 Z M12.9 8.9 C 13.18 8.9 13.4 9.12 13.4 9.4 L 13.4 10.8 L 14.8 10.8 C 15.08 10.8 15.3 11.02 15.3 11.3 C 15.3 11.58 15.08 11.8 14.8 11.8 L 13.4 11.8 L 13.4 13.2 C 13.4 13.48 13.18 13.7 12.9 13.7 C 12.62 13.7 12.4 13.48 12.4 13.2 L 12.4 11.8 L 11 11.8 C 10.72 11.8 10.5 11.58 10.5 11.3 C 10.5 11.02 10.72 10.8 11 10.8 L 12.4 10.8 L 12.4 9.4 C 12.4 9.12 12.62 8.9 12.9 8.9 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n/** Mailbox-send glyph for the roster mail affordance. */\nexport function IconTeamSend16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.7 1.1 C 7.98 1.1 8.2 1.32 8.2 1.6 L 8.2 6.1 L 10.9 3.4 C 11.1 3.2 11.4 3.2 11.6 3.4 C 11.8 3.6 11.8 3.9 11.6 4.1 L 8.7 7 L 11.6 9.9 C 11.8 10.1 11.8 10.4 11.6 10.6 C 11.4 10.8 11.1 10.8 10.9 10.6 L 8.2 7.9 L 8.2 12.4 C 8.2 12.68 7.98 12.9 7.7 12.9 C 7.42 12.9 7.2 12.68 7.2 12.4 L 7.2 7.9 L 4.5 10.6 C 4.3 10.8 4 10.8 3.8 10.6 C 3.6 10.4 3.6 10.1 3.8 9.9 L 6.7 7 L 3.8 4.1 C 3.6 3.9 3.6 3.6 3.8 3.4 C 4 3.2 4.3 3.2 4.5 3.4 L 7.2 6.1 L 7.2 1.6 C 7.2 1.32 7.42 1.1 7.7 1.1 Z M0.8 13.6 C 1.08 13.6 1.3 13.82 1.3 14.1 C 1.3 14.38 1.08 14.6 0.8 14.6 C 0.52 14.6 0.3 14.38 0.3 14.1 C 0.3 13.82 0.52 13.6 0.8 13.6 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\n\n\n/** Team workspace: a shared board with two pinned notes. */\nexport function IconTeamWorkspace16({ size = 16, className, style }: TeamIconProps) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={className} style={style} aria-hidden>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.1 2.4 C 1.82 2.4 1.6 2.62 1.6 2.9 L 1.6 12.2 C 1.6 12.48 1.82 12.7 2.1 12.7 L 13.9 12.7 C 14.18 12.7 14.4 12.48 14.4 12.2 L 14.4 2.9 C 14.4 2.62 14.18 2.4 13.9 2.4 Z M2.6 3.4 L 13.4 3.4 L 13.4 11.7 L 2.6 11.7 Z M4.2 5 L 7.4 5 C 7.62 5 7.8 5.18 7.8 5.4 L 7.8 8 C 7.8 8.22 7.62 8.4 7.4 8.4 L 4.2 8.4 C 3.98 8.4 3.8 8.22 3.8 8 L 3.8 5.4 C 3.8 5.18 3.98 5 4.2 5 Z M9.1 5 L 11.8 5 C 12.02 5 12.2 5.18 12.2 5.4 C 12.2 5.62 12.02 5.8 11.8 5.8 L 9.1 5.8 C 8.88 5.8 8.7 5.62 8.7 5.4 C 8.7 5.18 8.88 5 9.1 5 Z M9.1 6.9 L 11.8 6.9 C 12.02 6.9 12.2 7.08 12.2 7.3 C 12.2 7.52 12.02 7.7 11.8 7.7 L 9.1 7.7 C 8.88 7.7 8.7 7.52 8.7 7.3 C 8.7 7.08 8.88 6.9 9.1 6.9 Z M4.2 9.5 L 11.8 9.5 C 12.02 9.5 12.2 9.68 12.2 9.9 C 12.2 10.12 12.02 10.3 11.8 10.3 L 4.2 10.3 C 3.98 10.3 3.8 10.12 3.8 9.9 C 3.8 9.68 3.98 9.5 4.2 9.5 Z M6.6 13.6 L 9.4 13.6 L 9.4 14.6 L 6.6 14.6 Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n","/**\n * The room's own arithmetic: where every workstation stands, what its owner is\n * doing there, and how a member walks from one place on the floor to another.\n *\n * All of it is pure geometry over the roster — a place comes from a member's\n * index, never from a DOM measurement. A walk is planned on a visibility graph\n * built from the furniture itself: every desk, the sofa, the low table, the\n * cooler and the plant carry a rectangle of floor nobody may cross, the corners\n * of those rectangles are the only places worth turning at, and the shortest\n * chain of clear straight lines between them is the walk. Furniture moves, the\n * routes move with it; nothing is hard-coded to a lane.\n *\n * How the flat plan here becomes the box you look into is `stagecraft.ts`'s\n * job, not this module's: the floor is 0–100 square and knows nothing about\n * perspective.\n */\n\n/** A point on the floor, in the room's own 0–100 space. */\nexport interface Point {\n readonly x: number\n readonly y: number\n}\n\n/** A rectangle of the floor, in the same space. */\nexport interface Rect extends Point {\n readonly w: number\n readonly h: number\n}\n\n/**\n * A place a member stands: the point under its feet, how much clear floor it\n * has beside it (where a visitor stops to talk), and how large it draws there\n * — a desk further back stands smaller, so the room has depth.\n */\nexport interface Post extends Point {\n readonly gap: number\n readonly scale: number\n}\n\n/** One workstation, and the row of desks it belongs to. */\nexport interface Desk extends Post {\n readonly row: number\n readonly rows: number\n readonly columns: number\n}\n\n/** The floor the desks are laid out on. */\nexport const FIELD: Rect = { x: 7, y: 32, w: 60, h: 60 }\n\n/** The break corner, in the near right of the room. */\nexport const LOUNGE: Rect = { x: 69, y: 40, w: 29, h: 46 }\n\n/** The walkway across the front of the room: every cross-row trip uses it. */\nexport const CORRIDOR = 91\n\n/** The two vertical lanes down the sides of the desk field. */\nexport const LANES = { left: 3.5, right: 68.5 } as const\n\n/** How far in front of a desk its own aisle runs. */\nconst AISLE = 5.5\n\n/** Half the height of the floor one desk and its chair take up. */\nconst FOOT_HEIGHT = 4.4\n\n/** Two places closer than this are the same place. */\nconst NEAR = 0.5\n\n/** Rows of desks that differ by less than this share one aisle. */\nconst BAND = 4\n\n/** How much clear floor a walker keeps between itself and the furniture. */\nconst CLEARANCE = 2.4\n\n/** The strip along each wall a route never turns into. */\nconst MARGIN = 2.5\n\n/** Round geometry so a style, a test and a route all read the same number. */\nfunction round(value: number): number {\n return Math.round(value * 100) / 100\n}\n\n/** Keep a place on the floor rather than through a wall. */\nfunction clamp(value: number, low: number, high: number): number {\n return Math.min(high, Math.max(low, value))\n}\n\n/**\n * How many rows of desks a roster of this size stands in. Rows stay wide and\n * shallow: a room reads better across than back, and three rows is as deep as\n * the aisles between them can stay walkable.\n * @param count - how many members the room seats.\n * @returns the number of rows.\n */\nexport function rowsFor(count: number): number {\n if (count <= 3) return 1\n return count <= 8 ? 2 : 3\n}\n\n/**\n * One member's own desk: the same seat for the same roster index, every\n * render. Desks fill left to right and front rows draw larger than back ones.\n * @param index - the member's index on the roster (the leader takes the first).\n * @param count - how many members the room seats.\n * @returns the workstation.\n */\nexport function deskOf(index: number, count: number): Desk {\n const rows = rowsFor(count)\n const columns = Math.max(1, Math.ceil(count / rows))\n const row = Math.min(rows - 1, Math.floor(index / columns))\n const column = index % columns\n // A short last row is centered under the full ones rather than left-hung.\n const filled = Math.min(columns, count - row * columns)\n const slack = (columns - filled) / 2\n const cell = FIELD.w / columns\n const depth = rows === 1 ? 1 : row / (rows - 1)\n return {\n x: round(FIELD.x + cell * (column + slack + 0.5)),\n y: round(FIELD.y + FIELD.h * ((row + 0.5) / rows)),\n gap: round(cell / 2),\n scale: round((0.84 + 0.16 * depth) * (columns <= 3 ? 1 : columns === 4 ? 0.88 : 0.76)),\n row,\n rows,\n columns,\n }\n}\n\n/**\n * Where the break corner puts the nth member taking one. There are three\n * places to stand around the sofa, all of them in front of the furniture and\n * close enough to it to belong to it — a member on a break stands at the\n * coffee table, never in it, and never marooned on the floor below it — and a\n * fourth member shares the first. The rightmost place stays clear of the\n * treadmill in the corner beyond it: somebody standing in the machine's way\n * would be drawn into its deck.\n * @param index - the member's index among those on a break.\n * @returns the place it stands.\n */\nexport function breakAt(index: number): Post {\n const spots: readonly Point[] = [\n { x: LOUNGE.x + 8, y: LOUNGE.y + 29 },\n { x: LOUNGE.x + 15, y: LOUNGE.y + 33 },\n { x: LOUNGE.x + 14, y: LOUNGE.y + 23 },\n ]\n const spot = spots[index % spots.length] ?? spots[0]!\n return { x: round(spot.x), y: round(spot.y), gap: 7, scale: 0.9 }\n}\n\n/**\n * Where a visitor stops to talk: beside its host, on the side it arrived from,\n * one step in front so neither of them is hidden behind the other.\n * @param host - the place the member being visited stands.\n * @param fromX - where the visitor is coming from.\n * @returns the place the visitor stands while it talks.\n */\nexport function visitAt(host: Post, fromX: number): Point {\n const side = fromX < host.x ? -1 : 1\n return { x: round(clamp(host.x + side * host.gap, 4, 96)), y: round(host.y + 2) }\n}\n\n/** The floor one desk and its chair take up; a route must not cross it. */\nexport function footprintOf(post: Post): Rect {\n return {\n x: round(post.x - post.gap * 0.84),\n y: round(post.y - FOOT_HEIGHT),\n w: round(post.gap * 1.68),\n h: FOOT_HEIGHT * 2,\n }\n}\n\n/** The walkway in front of whatever stands at this depth. */\nexport function aisleFor(y: number): number {\n return round(Math.min(CORRIDOR, y + AISLE))\n}\n\n/* ------------------------------------------------------------- the furniture */\n\n/**\n * The standing furniture of the break corner, in the same 0–100 plan the desks\n * use. These are the floor rectangles the pieces occupy, which is what a walk\n * has to know about them; the stylesheet draws them inside the projected\n * lounge box at the matching fractions of it.\n */\nexport const ROOM_BLOCKS: readonly Rect[] = [\n /** The sofa, along the back of the corner. */\n { x: LOUNGE.x + 2.3, y: LOUNGE.y + 1, w: 14.5, h: 7 },\n /** The low table in front of it. */\n { x: LOUNGE.x + 4.9, y: LOUNGE.y + 11, w: 10, h: 4.5 },\n /** The plant, in the far corner. */\n { x: LOUNGE.x + 21, y: LOUNGE.y + 2, w: 6, h: 6 },\n /** The water cooler, against the right wall. */\n { x: LOUNGE.x + 22, y: LOUNGE.y + 12, w: 6, h: 6.5 },\n /**\n * The treadmill, in the front-right corner: the wellness zone, in front of\n * the lounge and out of every walkway. The rectangle covers the whole drawn\n * machine, deck and console, because the part of a tall prop that reads as\n * \"here\" on a shallow floor is its full visual bulk, not just its feet.\n */\n { x: 86, y: 70, w: 12, h: 17 },\n /**\n * The filing cabinet, printer and coffee machine, clustered against the\n * left wall beside the desks. The rectangle spans the cluster's full drawn\n * height — a tall cabinet's screen area reaches well back of its base on a\n * floor seen this shallow — so a walker is kept out of the machine, not\n * merely out from under it.\n */\n { x: 0.5, y: 41, w: 12, h: 24 },\n]\n\n/**\n * Everything a walk goes around: the standing furniture of the room plus one\n * rectangle per workstation.\n * @param posts - the desks currently on the floor.\n * @returns every rectangle of floor a route must stay out of.\n */\nexport function obstaclesOf(posts: Iterable<Post>): readonly Rect[] {\n return [...ROOM_BLOCKS, ...[...posts].map(footprintOf)]\n}\n\n/** A rectangle grown by the clearance a walker keeps around it. */\nfunction inflate(rect: Rect, by: number): Rect {\n return { x: rect.x - by, y: rect.y - by, w: rect.w + by * 2, h: rect.h + by * 2 }\n}\n\n/** Whether a point lies inside a rectangle. */\nfunction inside(point: Point, rect: Rect): boolean {\n return point.x > rect.x && point.x < rect.x + rect.w\n && point.y > rect.y && point.y < rect.y + rect.h\n}\n\n/**\n * Whether a straight leg passes through the inside of a rectangle. Running\n * along an edge is not crossing it: a walker may graze the furniture it has\n * just left without the route being called blocked.\n */\nfunction crossesRect(from: Point, to: Point, rect: Rect): boolean {\n const edge = 0.01\n const left = rect.x + edge\n const right = rect.x + rect.w - edge\n const top = rect.y + edge\n const bottom = rect.y + rect.h - edge\n if (right <= left || bottom <= top) return false\n const dx = to.x - from.x\n const dy = to.y - from.y\n let enter = 0\n let leave = 1\n /** Clip the leg against one of the four slabs; false when it misses entirely. */\n const clip = (slope: number, distance: number): boolean => {\n if (Math.abs(slope) < 1e-9) return distance >= 0\n const cut = distance / slope\n if (slope < 0) {\n if (cut > leave) return false\n if (cut > enter) enter = cut\n } else {\n if (cut < enter) return false\n if (cut < leave) leave = cut\n }\n return true\n }\n return clip(-dx, from.x - left)\n && clip(dx, right - from.x)\n && clip(-dy, from.y - top)\n && clip(dy, bottom - from.y)\n && leave > enter + 1e-6\n}\n\n/** Which side lane a trip between these two columns goes around by. */\nfunction laneFor(fromX: number, toX: number): number {\n return (fromX + toX) / 2 < FIELD.x + FIELD.w / 2 ? LANES.left : LANES.right\n}\n\n/** Drop the legs a walk would not take: zero-length ones, and straight-throughs. */\nfunction prune(points: readonly Point[]): readonly Point[] {\n const out: Point[] = []\n for (const point of points) {\n const last = out[out.length - 1]\n if (last !== undefined && Math.abs(last.x - point.x) < NEAR && Math.abs(last.y - point.y) < NEAR) continue\n const before = out[out.length - 2]\n // Three points on one line are two legs of the same walk: keep the far end.\n if (\n last !== undefined && before !== undefined\n && ((Math.abs(before.x - last.x) < NEAR && Math.abs(last.x - point.x) < NEAR)\n || (Math.abs(before.y - last.y) < NEAR && Math.abs(last.y - point.y) < NEAR))\n ) {\n out.pop()\n }\n out.push(point)\n }\n return out\n}\n\n/**\n * The old lane route, kept as the way out when the graph cannot find one: out\n * to your own aisle, down a side lane, in along the destination's aisle. It\n * crosses furniture rather than leaving somebody stranded, which is the right\n * trade for a room that has been packed too tight to walk through.\n */\nfunction laneRoute(from: Point, to: Point): readonly Point[] {\n if (Math.abs(from.y - to.y) <= BAND) {\n const aisle = aisleFor(Math.max(from.y, to.y))\n return prune([from, { x: from.x, y: aisle }, { x: to.x, y: aisle }, to])\n }\n const lane = laneFor(from.x, to.x)\n const out = aisleFor(from.y)\n const back = aisleFor(to.y)\n return prune([\n from,\n { x: from.x, y: out },\n { x: lane, y: out },\n { x: lane, y: back },\n { x: to.x, y: back },\n to,\n ])\n}\n\n/** How far apart two places are. */\nfunction span(from: Point, to: Point): number {\n return Math.hypot(to.x - from.x, to.y - from.y)\n}\n\n/**\n * The corners worth turning at: each blocking rectangle's four corners, pushed\n * out by the clearance, dropped when they fall inside another piece or off the\n * floor. A shortest path around rectangles only ever turns at one of these.\n */\nfunction cornersOf(blocks: readonly Rect[]): readonly Point[] {\n const out: Point[] = []\n for (const block of blocks) {\n const grown = inflate(block, CLEARANCE)\n const candidates: Point[] = [\n { x: grown.x, y: grown.y },\n { x: grown.x + grown.w, y: grown.y },\n { x: grown.x, y: grown.y + grown.h },\n { x: grown.x + grown.w, y: grown.y + grown.h },\n ]\n for (const corner of candidates) {\n const spot = { x: clamp(corner.x, MARGIN, 100 - MARGIN), y: clamp(corner.y, MARGIN, 100 - MARGIN) }\n if (blocks.some(other => inside(spot, inflate(other, CLEARANCE * 0.6)))) continue\n out.push(spot)\n }\n }\n return out\n}\n\n/**\n * The walk from one place on the floor to another, as the corners it turns.\n *\n * A member leaves its own desk and walks around everything else: the route is\n * the shortest chain of clear straight lines between the corners of the\n * furniture. Whatever the walker is standing in — its own workstation — stops\n * blocking for the length of that trip, because you are allowed to walk out of\n * your own chair.\n * @param from - where the walk starts.\n * @param to - where it ends.\n * @param obstacles - the furniture on the floor; defaults to the fixed pieces.\n * @returns the corners, starting at `from` and ending at `to`.\n */\nexport function routeBetween(\n from: Point,\n to: Point,\n obstacles: readonly Rect[] = ROOM_BLOCKS,\n): readonly Point[] {\n if (Math.abs(from.x - to.x) < NEAR && Math.abs(from.y - to.y) < NEAR) return [from]\n // The two ends stand in their own furniture; that furniture cannot block the\n // trip out of it, or nobody would ever leave a desk.\n const blocks = obstacles.filter(rect => {\n const grown = inflate(rect, CLEARANCE * 0.5)\n return !inside(from, grown) && !inside(to, grown)\n })\n const clear = (a: Point, b: Point): boolean => !blocks.some(rect => crossesRect(a, b, rect))\n if (clear(from, to)) return [from, to]\n\n const nodes: Point[] = [from, ...cornersOf(blocks), to]\n const goal = nodes.length - 1\n const best = nodes.map(() => Infinity)\n const via = nodes.map(() => -1)\n const done = nodes.map(() => false)\n best[0] = 0\n for (;;) {\n let at = -1\n for (const [index, cost] of best.entries()) {\n if (!done[index] && cost < (at < 0 ? Infinity : best[at]!)) at = index\n }\n if (at < 0 || at === goal) break\n done[at] = true\n const here = nodes[at]!\n for (const [index, node] of nodes.entries()) {\n if (done[index] || index === at || !clear(here, node)) continue\n const cost = best[at]! + span(here, node)\n if (cost < best[index]!) {\n best[index] = cost\n via[index] = at\n }\n }\n }\n if (best[goal] === Infinity) return laneRoute(from, to)\n\n const path: Point[] = []\n for (let at = goal; at >= 0; at = via[at]!) {\n path.unshift(nodes[at]!)\n if (at === 0) break\n }\n return prune(path)\n}\n\n/** How far into a leg a turn starts rounding off. */\nconst SHOULDER = 2.2\n\n/** How many samples one rounded corner is drawn from. */\nconst ARC = 3\n\n/**\n * The same walk with its corners rounded off. A person turning a corner does\n * not stop dead and set off again at a right angle: each turn is replaced by a\n * short arc that starts before the corner and finishes after it, cut back\n * whenever the legs are too short to give it room.\n * @param points - the corners of the walk.\n * @param blocks - furniture the rounded corner still may not cut through.\n * @returns the walk, as points to be followed in a straight line between.\n */\nexport function smooth(points: readonly Point[], blocks: readonly Rect[] = []): readonly Point[] {\n if (points.length < 3) return points\n const out: Point[] = [points[0]!]\n for (let index = 1; index < points.length - 1; index += 1) {\n const before = points[index - 1]!\n const corner = points[index]!\n const after = points[index + 1]!\n const back = Math.min(SHOULDER, span(before, corner) * 0.4)\n const on = Math.min(SHOULDER, span(corner, after) * 0.4)\n if (back < 0.2 || on < 0.2) {\n out.push(corner)\n continue\n }\n const start = along(corner, before, back)\n const end = along(corner, after, on)\n if (blocks.some(rect => crossesRect(start, end, rect))) {\n out.push(corner)\n continue\n }\n out.push(start)\n for (let step = 1; step < ARC; step += 1) out.push(bend(start, corner, end, step / ARC))\n out.push(end)\n }\n out.push(points[points.length - 1]!)\n return out\n}\n\n/** The point this far from `corner` along the line toward `toward`. */\nfunction along(corner: Point, toward: Point, distance: number): Point {\n const length = span(corner, toward) || 1\n return {\n x: round(corner.x + ((toward.x - corner.x) / length) * distance),\n y: round(corner.y + ((toward.y - corner.y) / length) * distance),\n }\n}\n\n/** One sample of the quadratic curve that rounds a corner off. */\nfunction bend(start: Point, corner: Point, end: Point, at: number): Point {\n const rest = 1 - at\n return {\n x: round(rest * rest * start.x + 2 * rest * at * corner.x + at * at * end.x),\n y: round(rest * rest * start.y + 2 * rest * at * corner.y + at * at * end.y),\n }\n}\n\n/** How long a walk of this length takes, at a walking pace. */\nexport function walkMs(distance: number, speed = 34): number {\n return Math.max(140, Math.round((distance / speed) * 1000))\n}\n\n/** The whole length of a walk, corner to corner. */\nexport function lengthOf(points: readonly Point[]): number {\n let total = 0\n for (let index = 1; index < points.length; index += 1) total += span(points[index - 1]!, points[index]!)\n return round(total)\n}\n\n/* ------------------------------------------------------------- idle errands */\n\n/**\n * The places a member with nothing on its plate drifts off to: the cooler, the\n * two windows, and the plant in the corner. Somewhere to be that is not a\n * chair — an office where nobody ever gets up is a diorama.\n */\nexport const HAUNTS: readonly Post[] = [\n /** At the water cooler, filling a cup. */\n { x: 93, y: 58, gap: 5, scale: 0.92 },\n /** At the left-hand window, looking out. */\n { x: 34, y: 20, gap: 6, scale: 0.86 },\n /** At the right-hand window. */\n { x: 58, y: 20, gap: 6, scale: 0.86 },\n /** Stretching by the plant. */\n { x: 88, y: 47, gap: 5, scale: 0.9 },\n]\n\n/** A stable number in 0–1 for a pair of integers: the same seat, the same trip. */\nfunction hash(a: number, b: number): number {\n let value = Math.imul(a + 1, 374761393) + Math.imul(b + 1, 668265263)\n value = Math.imul(value ^ (value >>> 13), 1274126177)\n return ((value ^ (value >>> 16)) >>> 0) / 4294967296\n}\n\n/**\n * Where a member with nothing to do wanders on the nth turn of the room's\n * clock, if it wanders anywhere at all. Most turns it stays where it is: an\n * office in which everybody is always on their feet is as wrong as one in\n * which nobody ever is.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @param tick - which turn of the room's clock this is.\n * @returns the place it drifts to, or nothing if it stays put.\n */\nexport function wanderOf(seat: number, tick: number): Post | undefined {\n // The first turn keeps everybody put: nobody arrives in the room already\n // out of its chair.\n if (tick === 0) return undefined\n if (hash(seat, tick) < 0.62) return undefined\n const pick = Math.floor(hash(seat, tick + 7919) * HAUNTS.length)\n const haunt = HAUNTS[Math.min(HAUNTS.length - 1, pick)]\n if (haunt === undefined) return undefined\n // Two members who drift to the same haunt stand beside each other rather than\n // inside each other: each seat keeps its own place at the cooler.\n const step = ((seat + 1) % 3) - 1\n return { ...haunt, x: round(clamp(haunt.x + step * 4.5, MARGIN, 100 - MARGIN)) }\n}\n\n/** How far apart two members standing still push each other. */\nconst PERSONAL = 5\n\n/**\n * The same places with nobody standing inside anybody else. Two members sent\n * to the same corner would otherwise draw one on top of the other; one pass of\n * separation is enough to tell them apart without moving either far enough to\n * leave the spot it was sent to.\n * @param spots - where each member has been told to stand, in roster order.\n * @returns the same list, nudged apart.\n */\nexport function spread(spots: readonly Point[]): readonly Point[] {\n const out = spots.map(spot => ({ x: spot.x, y: spot.y }))\n for (const [index, spot] of out.entries()) {\n for (let other = index + 1; other < out.length; other += 1) {\n const mate = out[other]!\n const apart = span(spot, mate)\n if (apart >= PERSONAL) continue\n // Two members sent to exactly one point are parted along the floor, not\n // along a zero-length line: the tie is broken by roster order.\n const push = (PERSONAL - apart) / 2\n const dx = apart < 0.01 ? 1 : (mate.x - spot.x) / apart\n const dy = apart < 0.01 ? 0 : (mate.y - spot.y) / apart\n spot.x = clamp(spot.x - dx * push, MARGIN, 100 - MARGIN)\n spot.y = clamp(spot.y - dy * push, MARGIN, 100 - MARGIN)\n mate.x = clamp(mate.x + dx * push, MARGIN, 100 - MARGIN)\n mate.y = clamp(mate.y + dy * push, MARGIN, 100 - MARGIN)\n }\n }\n return out.map(spot => ({ x: round(spot.x), y: round(spot.y) }))\n}\n\n/** The last thing that happened to one member in the visible mailbox tail. */\nexport type Touch = 'got' | 'sent' | 'reported'\n\n/** Where a member is: at its own desk, or taking a break in the corner. */\nexport type Station = 'desk' | 'break'\n\n/** What a member is doing there. */\nexport type Pose = 'working' | 'reading' | 'idle'\n\n/**\n * Whether a member is at its desk or on a break. A member keeps its own desk\n * for good — it only leaves it once its own report is the last thing it did\n * and nothing open is left with its name on it.\n * @param running - whether the member is mid-turn.\n * @param touch - the last mailbox event that named it, if any.\n * @param openTasks - how many unfinished tasks name it as assignee.\n * @returns where it stands.\n */\nexport function stationFor(running: boolean, touch: Touch | undefined, openTasks: number): Station {\n if (running || touch === 'got') return 'desk'\n return touch === 'reported' && openTasks === 0 ? 'break' : 'desk'\n}\n\n/**\n * What a member is doing where it stands: mid-turn it works, with mail or open\n * work on its plate it reads, and with neither it idles.\n * @param running - whether the member is mid-turn.\n * @param touch - the last mailbox event that named it, if any.\n * @param openTasks - how many unfinished tasks name it as assignee.\n * @returns the pose.\n */\nexport function poseFor(running: boolean, touch: Touch | undefined, openTasks: number): Pose {\n if (running) return 'working'\n return touch === 'got' || openTasks > 0 ? 'reading' : 'idle'\n}\n","/**\n * The room's perspective: how a place on the floor plan becomes a place on the\n * screen.\n *\n * `room.ts` owns a flat 0–100 floor plan — where the desks are, where the\n * aisles run, what a walk avoids — and knows nothing about how the room is\n * drawn. This module is the other half: it takes a point on that plan and puts\n * it inside a box you are looking into, where the floor narrows toward a back\n * wall, the two side walls close in with it, and something standing further\n * back draws smaller because the floor under it is narrower there.\n *\n * The screen space is 0–100 in each axis as well, so every style stays a plain\n * `left: X%; top: Y%` and nothing in the room has to be measured.\n */\nimport type { CSSProperties } from 'react'\nimport type { Point } from './room.ts'\n\n/**\n * The shape of the box, as fractions of the stage.\n *\n * `far` is how wide the floor still is where it meets the back wall, `top` and\n * `bottom` are the band of the stage the floor covers, and `bend` is how fast\n * depth runs away from the viewer: below 1 the far half of the plan is squeezed\n * into a thin strip at the back, which is what makes floorboards bunch up.\n */\nexport const SHELL = {\n far: 0.72,\n top: 23,\n bottom: 100,\n bend: 0.55,\n} as const\n\n/** How high the back wall stands, as a fraction of the stage. */\nexport const WALL_TOP = 3\n\n/** A place on the screen: where it goes, and how large it draws there. */\nexport interface Screen {\n /** Percent across the stage. */\n readonly left: number\n /** Percent down the stage. */\n readonly top: number\n /** How wide the floor still is at this depth: one number for every size. */\n readonly scale: number\n}\n\n/** Round geometry so a style, a test and a route all read the same number. */\nfunction round(value: number): number {\n return Math.round(value * 100) / 100\n}\n\n/**\n * How far into the room a plan depth lies, after perspective: 0 at the near\n * edge of the floor, 1 where it meets the back wall. The plan runs the other\n * way — y grows toward the viewer — and the curve is the perspective divide,\n * so equal steps back cover less and less of the screen.\n * @param y - the plan depth, 0 at the back wall and 100 at the near edge.\n * @returns the screen depth, 0 near and 1 far.\n */\nexport function depthOf(y: number): number {\n const back = Math.min(1, Math.max(0, 1 - y / 100))\n return back / (back + SHELL.bend * (1 - back))\n}\n\n/**\n * How wide the floor is at a screen depth, as a fraction of the stage: 1 across\n * the near edge, `SHELL.far` where it meets the back wall.\n * @param depth - the screen depth, 0 near and 1 far.\n * @returns the fraction of the stage the floor spans there.\n */\nexport function widthAt(depth: number): number {\n return 1 + (SHELL.far - 1) * depth\n}\n\n/**\n * One place on the floor plan, as a place on the screen. The scale it comes\n * back with is the floor's own narrowing at that depth, so a member, its desk\n * and the aisle it walks all shrink by exactly the same amount and nothing\n * drifts off its own feet.\n * @param point - the place on the 0–100 floor plan.\n * @returns where it draws, and how large.\n */\nexport function project(point: Point): Screen {\n const depth = depthOf(point.y)\n const scale = widthAt(depth)\n return {\n left: round(50 + (point.x - 50) * scale),\n top: round(SHELL.bottom - (SHELL.bottom - SHELL.top) * depth),\n scale: round(scale),\n }\n}\n\n/**\n * Where a fixture on the back wall goes across the stage. The wall stands at\n * the far end of the floor, so it is only `SHELL.far` of the stage wide: a\n * window hung at plan x lands here, which is what lets a member walk up to the\n * window it is actually standing under.\n * @param x - the place across the floor plan the fixture hangs above.\n * @returns the percent across the stage.\n */\nexport function onWall(x: number): number {\n return round(50 + (x - 50) * SHELL.far)\n}\n\n/**\n * The box's own numbers, as custom properties. The shell's five faces are cut\n * out of `clip-path` polygons, and the polygons and this module's arithmetic\n * have to agree to the percent or the walls will not meet the floor — so they\n * read the same variables rather than each carrying their own copy.\n * @returns the style to hang on the room.\n */\nexport function shellVars(): CSSProperties {\n const inset = round(((1 - SHELL.far) / 2) * 100)\n return {\n '--team-far-inset': `${inset}%`,\n '--team-floor-top': `${SHELL.top}%`,\n '--team-wall-top': `${WALL_TOP}%`,\n '--team-far-width': `${round(SHELL.far * 100)}%`,\n } as CSSProperties\n}\n","/**\n * Walking, as one continuous motion.\n *\n * `routeBetween` gives the corners of a trip and `smooth` rounds them off; this\n * hook walks that line. It parametrises the whole path by arc length and eases\n * once across the trip — a member leans into its first step and slows into its\n * last, rather than stopping dead at every corner — and it drives a gait phase\n * off distance covered, so the legs swing at the speed the member is actually\n * moving instead of at a fixed rate.\n *\n * The frame loop writes `left`, `top`, the depth and the gait STRAIGHT onto the\n * node. React is told only when the member turns or stops, which is a handful\n * of renders in a whole trip; the position itself never round-trips through\n * state, so a roomful of members walking at once costs one style write each per\n * frame instead of a render tree each.\n */\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n lengthOf, routeBetween, smooth, walkMs, wanderOf,\n type Point, type Post, type Rect,\n} from './room.ts'\nimport { project } from './stagecraft.ts'\n\n/**\n * Which way a member is turned. `front` faces the room, `away` is somebody\n * walking off into it, and `back` is the different thing of sitting at your own\n * computer — the stylesheet poses those two apart.\n */\nexport type Facing = 'left' | 'right' | 'front' | 'away' | 'back'\n\n/** What the room needs back: where to hang the member, and how it is posed. */\nexport interface Gait {\n /** Attach to the element that stands on the floor. */\n readonly ref: (node: HTMLElement | null) => void\n readonly facing: Facing\n readonly walking: boolean\n}\n\n/** Two places closer than this are the same place. */\nconst NEAR = 0.5\n\n/** How much floor one full swing of the legs covers. */\nconst STRIDE = 13\n\n/** Whether the reader asked for no motion. */\nfunction still(): boolean {\n return typeof window !== 'undefined'\n && typeof window.matchMedia === 'function'\n && window.matchMedia('(prefers-reduced-motion: reduce)').matches\n}\n\n/** The clock the frame loop runs on, where there is one. */\nfunction now(): number {\n return typeof performance === 'undefined' ? Date.now() : performance.now()\n}\n\n/** Which way a step is headed: across the room, or into and out of it. */\nfunction facingOf(dx: number, dy: number): Facing {\n if (Math.abs(dx) >= Math.abs(dy)) return dx >= 0 ? 'right' : 'left'\n return dy > 0 ? 'front' : 'away'\n}\n\n/** Ease across the whole trip: lean into the first step, slow into the last. */\nfunction ease(at: number): number {\n return at * at * (3 - 2 * at)\n}\n\n/**\n * Walk a member from where it is to where it should be.\n *\n * A target that changes mid-trip is re-planned from the exact place the member\n * has reached, not from the end of some leg it was committed to: it turns\n * around where it stands.\n * @param home - where the member starts, before it has walked anywhere.\n * @param target - where it should be standing now.\n * @param obstacles - the furniture on the floor, to walk around.\n * @param base - the member's own size at this station, before perspective.\n * @returns the ref to hang it on, and the pose it is in.\n */\nexport function useWalk(\n home: Point,\n target: Point,\n obstacles: readonly Rect[],\n base: number,\n): Gait {\n const node = useRef<HTMLElement | null>(null)\n /** Where the member is right now, to the frame. */\n const at = useRef<Point>({ x: home.x, y: home.y })\n /** How far into a stride the legs are, kept across trips so they never jump. */\n const gait = useRef(0)\n const facing = useRef<Facing>('front')\n const scale = useRef(base)\n scale.current = base\n const [pose, setPose] = useState<{ readonly facing: Facing, readonly walking: boolean }>(\n { facing: 'front', walking: false },\n )\n\n /** Put the member on the floor: the one place position is ever written. */\n const place = useCallback((point: Point): void => {\n const element = node.current\n if (element === null) return\n const screen = project(point)\n element.style.left = `${screen.left}%`\n element.style.top = `${screen.top}%`\n element.style.setProperty('--team-scale', `${screen.scale * scale.current}`)\n element.style.setProperty('--team-depth', `${Math.round(point.y)}`)\n element.style.setProperty('--team-gait', `${gait.current}`)\n }, [])\n\n const hang = useCallback((element: HTMLElement | null): void => {\n node.current = element\n place(at.current)\n }, [place])\n\n // A member that is standing still still has to be re-hung when the room\n // rescales it — a new teammate arrives and every desk shrinks.\n useEffect(() => { place(at.current) }, [place, base])\n\n useEffect(() => {\n const start = at.current\n if (Math.abs(start.x - target.x) < NEAR && Math.abs(start.y - target.y) < NEAR) return undefined\n if (still()) {\n at.current = { x: target.x, y: target.y }\n place(at.current)\n setPose({ facing: 'front', walking: false })\n return undefined\n }\n\n const path = smooth(routeBetween(start, target, obstacles), obstacles)\n const total = lengthOf(path)\n if (total < NEAR) {\n at.current = { x: target.x, y: target.y }\n place(at.current)\n return undefined\n }\n /** Distance along the path at which each corner is reached. */\n const marks: number[] = [0]\n for (let index = 1; index < path.length; index += 1) {\n marks.push(marks[index - 1]! + Math.hypot(\n path[index]!.x - path[index - 1]!.x,\n path[index]!.y - path[index - 1]!.y,\n ))\n }\n const span = walkMs(total)\n const began = now()\n const from = gait.current\n let frame = 0\n\n const tick = (): void => {\n const through = Math.min(1, (now() - began) / span)\n const covered = ease(through) * total\n let leg = 1\n while (leg < marks.length - 1 && marks[leg]! < covered) leg += 1\n const back = path[leg - 1]!\n const ahead = path[leg]!\n const run = marks[leg]! - marks[leg - 1]!\n const into = run < 1e-6 ? 1 : (covered - marks[leg - 1]!) / run\n at.current = {\n x: back.x + (ahead.x - back.x) * into,\n y: back.y + (ahead.y - back.y) * into,\n }\n gait.current = (from + covered / STRIDE) % 1\n place(at.current)\n\n const turned = facingOf(ahead.x - back.x, ahead.y - back.y)\n if (turned !== facing.current) {\n facing.current = turned\n setPose({ facing: turned, walking: true })\n }\n if (through < 1) {\n frame = requestAnimationFrame(tick)\n return\n }\n at.current = { x: target.x, y: target.y }\n place(at.current)\n facing.current = 'front'\n setPose({ facing: 'front', walking: false })\n }\n\n facing.current = facingOf(path[1]!.x - path[0]!.x, path[1]!.y - path[0]!.y)\n setPose({ facing: facing.current, walking: true })\n frame = requestAnimationFrame(tick)\n return () => { cancelAnimationFrame(frame) }\n }, [target.x, target.y, obstacles, place])\n\n return { ref: hang, facing: pose.facing, walking: pose.walking }\n}\n\n/** How long the room waits between one member's idle errands. */\nconst WANDER_MS = 45_000\n\n/**\n * Where a member with nothing to do has drifted off to right now. The clock\n * turns on its own and `wanderOf` decides — most turns it decides the member\n * stays exactly where it is, which is what makes the one that gets up worth\n * looking at. The first turn always keeps it put: nobody arrives at the room\n * already out of its chair.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @param loose - whether the member is free to wander at all.\n * @returns the place it has wandered to, if anywhere.\n */\nexport function useIdleErrand(seat: number, loose: boolean): Post | undefined {\n const [tick, setTick] = useState(0)\n useEffect(() => {\n if (!loose || still()) return undefined\n // Members do not all get up on the same beat: each seat's clock is offset.\n const timer = setInterval(() => { setTick(count => count + 1) }, WANDER_MS + ((seat + 1) % 5) * 1_700)\n return () => { clearInterval(timer) }\n }, [seat, loose])\n return loose ? wanderOf(seat, tick) : undefined\n}\n","/**\n * The team's cast: one crew member per seat, and a different sea-creature\n * hood per seat, so a member is recognizable in the room before its nameplate\n * is read.\n *\n * Every character is a person — shoes, trousers, a shirt, arms at its sides —\n * wearing a whale or shark as an exquisite plush hood: the hood is drawn in\n * profile, snout forward and flukes over the back of the head, because a whale\n * reads as a whale from the side and as a blob from the front. The face looks out\n * from under its chin with delicate chibi-style catchlights and expressions.\n * Legs and arms are their own groups so the stylesheet can swing them while the\n * member walks.\n *\n * Under the hood everybody is their own person: a hairstyle, a hair colour, a\n * skin tone, an outfit, shoes and one piece of gear, all picked by seat index\n * so a member looks the same on every render and no two neighbours are twins.\n * Tone and skin ride data attributes rather than inline colours, so the theme\n * still owns the palette.\n *\n * A member at work is drawn from BEHIND: the screen faces the room, so its\n * owner faces the screen. The back view keeps the same figure and turns the\n * hood the other way — snout toward the monitor on its left — so the hood is\n * still read in profile while the human face, which nobody needs while somebody\n * is typing, is simply not there to draw.\n */\nimport type { CSSProperties } from 'react'\nimport css from './TeamStage.module.css'\n\n/** The sea-creature hoods a seat can wear, in the order seats take them. */\nexport const MASKS = ['blue', 'orca', 'humpback', 'narwhal', 'beluga', 'sperm', 'shark'] as const\n\n/** One kind of sea-creature hood. */\nexport type MaskKind = typeof MASKS[number]\n\n/** Hue shifts of the room's colour, one per seat: stable, distinct, theme-owned. */\nconst ACCENTS = [0, 46, 96, 148, 200, 252, 296, 330] as const\n\n/**\n * The seat's own accent, as a style object: the room's one saturated token\n * turned by this much, never a literal color, so a theme change carries every\n * member along. The leader keeps the unturned blue its whale is named for, and\n * the teammates start one step past it.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the custom property the stage styles read.\n */\nexport function accentOf(seat: number): CSSProperties {\n const shift = seat < 0 ? 0 : ACCENTS[(seat + 1) % ACCENTS.length] ?? 0\n return { '--team-accent-shift': `${shift}deg` } as CSSProperties\n}\n\n/** Pick the nth entry of a wardrobe rack, counting the leader as the first. */\nfunction pick<T>(rack: readonly T[], seat: number): T {\n return rack[(Math.max(0, seat + 1)) % rack.length] ?? rack[0]!\n}\n\n/**\n * The hood one seat wears: the leader takes the blue whale the room is built\n * around, teammates take the rest in roster order.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function maskOf(seat: number): MaskKind {\n if (seat < 0) return 'blue'\n return pick(MASKS, seat)\n}\n\n/** The outfits a seat can wear, in the order seats take them. */\nexport const OUTFITS = [\n 'shirt', 'tee', 'sweater', 'polo', 'hoodie', 'tunic', 'vest', 'jacket', 'stripes', 'dungarees',\n] as const\n\n/** One kind of outfit. */\nexport type OutfitKind = typeof OUTFITS[number]\n\n/** The shoes a seat can wear, in the order seats take them. */\nexport const SHOE_KINDS = ['sneaker', 'boot', 'loafer', 'hightop', 'sandal'] as const\n\n/** One kind of shoe. */\nexport type ShoeKind = typeof SHOE_KINDS[number]\n\n/** The hairstyles a seat can wear, in the order seats take them. */\nexport const HAIRS = ['fringe', 'bun', 'curls', 'crop', 'ponytail', 'buzz'] as const\n\n/** One hairstyle. */\nexport type HairKind = typeof HAIRS[number]\n\n/** The one thing a member carries or wears besides its clothes. */\nexport const GEARS = ['none', 'glasses', 'headphones', 'scarf', 'lanyard', 'backpack'] as const\n\n/** One piece of gear. */\nexport type GearKind = typeof GEARS[number]\n\n/** How many hair colours the stylesheet keeps. */\nconst HAIR_TONES = 5\n\n/** How many skin tones the stylesheet keeps. */\nconst SKIN_TONES = 4\n\n/**\n * The outfit one seat wears: the leader keeps the tailored shirt, teammates\n * take the rest in roster order, so a full team is not a row of identical\n * shirts.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function outfitOf(seat: number): OutfitKind {\n if (seat < 0) return 'shirt'\n return pick(OUTFITS, seat)\n}\n\n/**\n * The shoes one seat wears; each pair is tinted by the seat's own accent.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function shoeOf(seat: number): ShoeKind {\n if (seat < 0) return 'sneaker'\n return pick(SHOE_KINDS, seat)\n}\n\n/**\n * The hairstyle one seat wears. It is picked off a different-length rack to\n * the outfits and the hoods, so the three cycles fall out of step and two\n * members never end up dressed identically from head to foot.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function hairOf(seat: number): HairKind {\n if (seat < 0) return 'crop'\n return pick(HAIRS, seat)\n}\n\n/**\n * Which of the stylesheet's hair colours this seat has. Hair is NOT tinted by\n * the seat accent: rotating the room's blue would give a team with green and\n * magenta hair, and the accent is already carried by the hood, the mug and the\n * shoes.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the tone index the stylesheet keys on.\n */\nexport function toneOf(seat: number): number {\n return (Math.max(0, seat + 1) * 3) % HAIR_TONES\n}\n\n/**\n * Which of the stylesheet's skin tones this seat has.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the tone index the stylesheet keys on.\n */\nexport function skinOf(seat: number): number {\n return (Math.max(0, seat + 1) * 5) % SKIN_TONES\n}\n\n/**\n * The one thing this seat wears besides its clothes. A third of the team\n * carries nothing: gear reads as a detail only while it is not universal.\n * @param seat - the member's index on the roster; the leader passes -1.\n * @returns the kind.\n */\nexport function gearOf(seat: number): GearKind {\n if (seat < 0) return 'lanyard'\n return pick(GEARS, seat)\n}\n\n/** One shoe path, mirrored per side. */\nfunction shoePath(kind: ShoeKind, side: 'left' | 'right'): string {\n const flip = side === 'right'\n const inner = flip ? 32.9 : 31.1\n const outer = flip ? 45.2 : 18.8\n const toe = flip ? 42 : 22\n const way = flip ? -1 : 1\n if (kind === 'boot') {\n return `M${toe} 78 H${inner} V95 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.4 L${outer} 93.5 L${outer + way * 2} 92 L${toe} 90.5 Z`\n }\n if (kind === 'loafer') {\n return `M${toe} 93 H${inner} V97 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.4 Q${outer} 96.8 ${outer + way * 2} 95.9 L${toe} 94.8 Z`\n }\n if (kind === 'hightop') {\n return `M${toe} 85 H${inner} V96 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.2 Q${outer} 96 ${outer + way * 2} 94.8 L${toe} 93.2 Z`\n }\n if (kind === 'sandal') {\n return `M${toe} 95.5 H${inner} V97.5 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.6 Q${outer} 97.4 ${outer + way * 2} 96.8 L${toe} 96.2 Z`\n }\n return `M${toe} 90 H${inner} V97 Q${inner} 100 ${inner - way * 3.5} 100 `\n + `H${outer + way * 1.6} Q${outer} 100 ${outer} 98.4 Q${outer} 96.6 ${outer + way * 2} 95.4 L${toe} 94.2 Z`\n}\n\n/** The sole edge under a shoe, and the laces, buckles or straps across it. */\nfunction shoeTrim(kind: ShoeKind, side: 'left' | 'right') {\n const flip = side === 'right'\n const at = flip ? 37 : 27\n const toeX = flip ? 41 : 23\n if (kind === 'sandal') {\n return (\n <>\n <path className={css.crewShoeTrim} d={`M${at - 4.5} 97.5 L${at + 4.5} 96.5 M${at - 4.5} 99 L${at + 4.5} 98.2`} />\n <path className={css.crewShoeSole} d={`M${at - 5} 99.5 H${at + 5}`} />\n </>\n )\n }\n if (kind === 'boot') {\n return (\n <>\n <path className={css.crewShoeTrim} d={`M${at - 4.2} 82.5 H${at + 4.2} M${at - 4.2} 86.5 H${at + 4.2} M${at - 4.2} 90.5 H${at + 4.2}`} />\n <path className={css.crewShoeSole} d={`M${at - 5.5} 99.2 H${at + 5.5}`} />\n <circle className={css.crewShoeEyelet} cx={at - 2.5} cy={82.5} r={0.6} />\n <circle className={css.crewShoeEyelet} cx={at + 2.5} cy={82.5} r={0.6} />\n <circle className={css.crewShoeEyelet} cx={at - 2.5} cy={86.5} r={0.6} />\n <circle className={css.crewShoeEyelet} cx={at + 2.5} cy={86.5} r={0.6} />\n </>\n )\n }\n if (kind === 'hightop') {\n return (\n <>\n <path className={css.crewShoeTrim} d={`M${at - 3.8} 88.5 H${at + 3.8} M${at - 3.8} 92 H${at + 3.8}`} />\n <circle className={css.crewShoeBadge} cx={flip ? at - 2 : at + 2} cy={89} r={1.6} />\n <path className={css.crewShoeToe} d={`M${toeX - 2.2} 95.5 Q${toeX} 93.5 ${toeX + 2.2} 95.5`} />\n <path className={css.crewShoeSole} d={`M${at - 5.2} 99 H${at + 5.2}`} />\n </>\n )\n }\n if (kind === 'loafer') {\n return (\n <>\n <path className={css.crewShoeTrim} d={`M${at - 3.5} 95.5 H${at + 3.5}`} />\n <rect className={css.crewShoeBuckle} x={at - 2} y={94.5} width={4} height={2} rx={0.6} />\n <path className={css.crewShoeSole} d={`M${at - 5} 99.2 H${at + 5}`} />\n </>\n )\n }\n // Sneaker\n return (\n <>\n <path className={css.crewShoeTrim} d={`M${at - 3.8} 93 H${at + 3.8} M${at - 3.2} 95.2 H${at + 3.2}`} />\n <path className={css.crewShoeToe} d={`M${toeX - 2} 96 Q${toeX} 94.2 ${toeX + 2} 96`} />\n <path className={css.crewShoeSole} d={`M${at - 5.2} 99 H${at + 5.2}`} />\n <path className={css.crewShoeStripe} d={`M${at - 3} 94.5 Q${at} 96.5 ${at + 3} 94.5`} />\n </>\n )\n}\n\n/** The whale worn as a hood: flukes at the left, snout out to the right, contoured curves. */\nconst WHALE = 'M9 10 C9 -7 20 -17 37 -17 C52 -17 62 -9 66 1.5 '\n + 'C67.5 5 66 9.2 61.5 9.8 C52 11.5 44 15.5 36 20.5 C28 25.5 18.5 26.5 13.5 24.5 '\n + 'C9.8 22.5 9 17 9 10 Z'\n\n/** The flukes, one upper lobe and one lower lobe with refined scalloped curve. */\nconst FLUKES = 'M10 2.5 C4.5 -1.5 0.5 -7.5 -0.5 -15 C5.5 -12 10 -6.5 12.5 -1.5 Z '\n + 'M9 14.5 C4 17.5 0 23 -2 29.5 C4.5 28 9.5 23.5 13 18.5 Z'\n\n/** The pale underside, from the throat pleats to the tip of the lower jaw. */\nconst BELLY = 'M14 21.5 C20.5 24.5 28.5 23.5 35.5 19.5 C42.5 15.5 51.5 11 59.5 10 '\n + 'C51.5 15.5 43.5 19.5 35.5 23 C27.5 26.5 18 26.5 14 21.5 Z'\n\n/** The inner face opening of the plush hood, casting an ambient shadow over the face. */\nconst HOOD_OPENING_RIM = 'M18 28.5 C18 19.5 23.5 13 32 13 C40.5 13 46 19.5 46 28.5 C46 36.5 40 43 32 43 C24 43 18 36.5 18 28.5 Z'\n\n/** The shirt: refined shoulder curve, straight body, tailored hem over the hips. */\nconst SHIRT = 'M32 46 C40.5 46 46 50.2 47 58.5 L48 76 C48 79 46.2 80.5 43 80.5 '\n + 'L21 80.5 C17.8 80.5 16 79 16 76 L17 58.5 C18 50.2 23.5 46 32 46 Z'\n\n/** The seam over each shoulder, where the sleeve is set into the body. */\nconst SHOULDER_SEAM = 'M21.5 51 C23.5 54.5 24 59.5 24 64 M42.5 51 C40.5 54.5 40 59.5 40 64'\n\n/** The fold the hem falls into over the hips. */\nconst HEM_FOLD = 'M17.5 77.5 C24 79.8 40 79.8 46.5 77.5'\n\n/**\n * The back of the head hairstyles, richly styled with layers, highlights,\n * textures and distinct shapes.\n */\nconst CAPS: Record<HairKind, string> = {\n fringe: 'M17.5 30 C17.5 17.5 23 10.5 32 10.5 C41 10.5 46.5 17.5 46.5 30 C46.5 33.5 44.8 35.5 42.5 35.5 '\n + 'C40 35.5 39 32 36 32 C33 32 32 35.5 29 35.5 C26 35.5 25 32 23 32 C21 32 19.2 34.5 17.5 34 Z',\n crop: 'M18 28 C18 17 23.5 10.5 32 10.5 C40.5 10.5 46 17 46 28 C46 30.8 44.6 31.8 42.8 30.8 '\n + 'C40.6 29.5 39.2 25.8 32 25.8 C24.8 25.8 23.4 29.5 21.2 30.8 C19.4 31.8 18 30.8 18 28 Z',\n buzz: 'M18.5 27 C18.5 17 24 11 32 11 C40 11 45.5 17 45.5 27 C45.5 28.8 44.2 29.2 43 28.4 '\n + 'C40.5 26.2 37 24.8 32 24.8 C27 24.8 23.5 26.2 21 28.4 C19.8 29.2 18.5 28.8 18.5 27 Z',\n curls: 'M17.5 29 C17.5 17.5 22.8 10.5 32 10.5 C41.2 10.5 46.5 17.5 46.5 29 C46.5 32.5 44.5 33.8 42.8 32 '\n + 'C41.5 30.6 40.5 32 39 31.2 C37.5 30.5 37.2 28.4 35.5 28.4 C33.6 28.4 33.2 30.8 32 30.8 '\n + 'C30.8 30.8 30.4 28.4 28.5 28.4 C26.8 28.4 26.5 30.5 25 31.2 C23.5 32 22.5 30.6 21.2 32 '\n + 'C19.5 33.8 17.5 32.5 17.5 29 Z',\n bun: 'M18 29 C18 17.5 23.2 10.5 32 10.5 C40.8 10.5 46 17.5 46 29 C46 31.8 44.2 33.2 42.2 32.2 '\n + 'C40.2 31.2 39 26.8 32 26.8 C25 26.8 23.8 31.2 21.8 32.2 C19.8 33.2 18 31.8 18 29 Z',\n ponytail: 'M18 30 C18 17.5 23.2 10.5 32 10.5 C40.8 10.5 46 17.5 46 30 C46 32.8 44.2 33.8 42.2 32.8 '\n + 'C40.2 31.8 39 27.2 32 27.2 C25 27.2 23.8 31.8 21.8 32.8 C19.8 33.8 18 32.8 18 30 Z',\n}\n\n/** The mass of hair that only shows when you are looking at the back of a head. */\nconst NAPE = 'M18.5 27 C18.5 40 23.8 45 32 45 C40.2 45 45.5 40 45.5 27 Z'\n\n/** Soft highlights across the hair strands. */\nconst HAIR_SHINE = 'M23.5 21 C25.5 15.5 29 13 33.5 12.5 C30.5 16 28.5 20 27 24 Z'\nconst HAIR_SHINE_SECONDARY = 'M36 14 C39 16.5 41 20 42 24.5 C40.5 21 38.5 17.5 36 14 Z'\n\n/** A cool highlight along the whale hood's dorsal curve, giving it smooth 3D luster. */\nconst HOOD_SHEEN = 'M16 -3.5 C17.5 -11 23 -15.5 31 -16.5 C25.5 -12.5 21 -8 18.5 -2.5 Z'\nconst HOOD_RIDGE_HIGHLIGHT = 'M32 -16.5 C45 -16.5 55 -9.5 60 1.5 C55 -6 44 -14.5 32 -15 Z'\n\n/** A soft shadow under the whale's jaw, where the hood meets the collar. */\nconst HOOD_SHADE = 'M13.5 21 C19.5 25 28 25 35 22 C42 19 50 14.5 59.5 11 '\n + 'C52 16 44.5 19 37.5 21.5 C29.5 24.2 20.5 24.8 13.5 21 Z'\n\n/** A ribbed hem across the bottom of a sweater. */\nconst RIB_HEM = 'M16 73.5 L48 73.5 L48 80.5 L16 80.5 Z'\n\n/** A kangaroo pocket across the front of a hoodie with reinforced corner bar-tacks. */\nconst POCKET = 'M26.5 56.5 C28.5 53 35.5 53 37.5 56.5 L39 63.5 L25 63.5 Z'\n\n/** The hood fabric lying around the neck of a hoodie. */\nconst HOOD_FABRIC = 'M23.5 43.5 C23.5 32 27.5 27.5 32 27.5 C36.5 27.5 40.5 32 40.5 43.5 '\n + 'L40.5 47.5 C36.5 49 27.5 49 23.5 47.5 Z'\n\n/** A knitted vest, open at the neck and stopping short of the hem. */\nconst VEST = 'M32 47 C38.5 47 43 50.5 44 57 L45 73 C45 75.5 43.5 76.5 41 76.5 '\n + 'L23 76.5 C20.5 76.5 19 75.5 19 73 L20 57 C21 50.5 25.5 47 32 47 Z '\n + 'M32 47 L26.5 56.5 L32 63 L37.5 56.5 Z'\n\n/** The two front panels of an open tailored jacket. */\nconst JACKET = 'M23.5 47.5 C20.5 50 18.5 54.5 18 59 L17 76.5 L27.5 76.5 L29.5 52 Z '\n + 'M40.5 47.5 C43.5 50 45.5 54.5 46 59 L47 76.5 L36.5 76.5 L34.5 52 Z'\n\n/** The bib and straps of a pair of dungarees. */\nconst BIB = 'M25 57.5 H39 V72.5 H25 Z'\n\n/** The straps over the shoulders of a pair of dungarees with buckles. */\nconst STRAPS = 'M25.5 57.5 L23 47.5 M38.5 57.5 L41 47.5'\n\n/** Stripes across the front of a jersey. */\nconst STRIPES = 'M17.5 54.5 H46.5 M17.2 60.5 H46.8 M17 66.5 H47 M16.8 72.5 H47.2 M16.5 78 H47.5'\n\n/** Whale ventral grooves (throat pleats) on Blue Whale and Humpback. */\nconst THROAT_PLEATS = 'M36 21.5 C42 18.5 50 13.5 57 11 M33 23 C39 20 46 16 53 13.5 M30 24.5 C36 21.5 42 18.5 48 16'\n\n/** What one kind wears behind the whale, so its base merges into the hood. */\nfunction behind(kind: MaskKind) {\n switch (kind) {\n case 'orca':\n return (\n <>\n <path className={css.crewHood} d=\"M25 -13 C26 -24 31 -31 40 -34 C37 -25 33 -18 31.5 -13 Z\" />\n {/* Orca saddle patch behind dorsal fin */}\n <path className={css.crewSaddle} d=\"M19 -10 C23 -14 28 -14 31 -11 C28 -8 22 -7 19 -10 Z\" />\n </>\n )\n case 'humpback':\n return (\n <>\n {/* Distinctive curved dorsal fin/hump on back of hood */}\n <path className={css.crewHood} d=\"M22 -14 C25 -20 30 -22 35 -17 Z\" />\n {/* Gracefully swept pectoral fin along the whale's flank */}\n <path className={css.crewHood} d=\"M30 14 C36 19 40 26 43 33 C40 25 36 18 31 13 Z\" />\n <path className={css.crewFlipperTrim} d=\"M38 24 C40 28 42 32 42.5 32\" />\n </>\n )\n case 'narwhal':\n return (\n <g className={css.crewTuskGroup}>\n {/* Spiral ivory tusk with shadow & helical ridge texture */}\n <path className={css.crewTusk} d=\"M63.5 5.5 L84 -3.5\" />\n <path className={css.crewTuskSpiral} d=\"M66 4.5 L67.5 3.8 M71 2.5 L72.5 1.8 M76 0.5 L77.5 -0.2 M80.5 -1.5 L82 -2.2\" />\n </g>\n )\n case 'sperm':\n return (\n <>\n {/* Square blunt brow with dorsal humps/ripples */}\n <path className={css.crewHood} d=\"M38 -16 L59 -16 C63.5 -16 66.5 -12.5 66.5 -8 L66.5 9.5 C57 10.5 47.5 14 38 17.5 Z\" />\n <path className={css.crewWrinkle} d=\"M24 -11 C26 -14 30 -14 32 -12 M34 -13 C36 -15 39 -15 41 -13\" />\n </>\n )\n case 'shark':\n return (\n <>\n {/* Tall swept-back dorsal fin */}\n <path className={css.crewHood} d=\"M34 -21 C37 -29 42 -35 52 -36 C48.5 -27 44 -19 39 -11 Z\" />\n <path className={css.crewHoodSheen} d=\"M46 -30 C43 -24 40 -18 37 -13\" />\n </>\n )\n case 'beluga':\n case 'blue':\n default:\n return null\n }\n}\n\n/** What one kind adds over the whale. */\nfunction front(kind: MaskKind) {\n switch (kind) {\n case 'orca':\n return (\n <>\n <ellipse className={css.crewPatch} cx=\"47\" cy=\"-4.5\" rx=\"7\" ry=\"3.4\" transform=\"rotate(-16 47 -4.5)\" />\n <circle className={css.crewEyeGlint} cx=\"48\" cy=\"-5\" r=\"0.7\" />\n </>\n )\n case 'humpback':\n return (\n <>\n <path className={css.crewPleat} d={THROAT_PLEATS} />\n {/* Raised sensory tubercles along snout and jaw */}\n {[[43, -7], [49, -3], [54, 0], [59, 2.5], [63, 4.5], [47, 8], [53, 6.5]].map(([x, y]) => (\n <g key={`${x}-${y}`}>\n <circle className={css.crewKnob} cx={x} cy={y} r=\"1.6\" />\n <circle className={css.crewKnobHighlight} cx={(x ?? 0) - 0.4} cy={(y ?? 0) - 0.4} r=\"0.6\" />\n </g>\n ))}\n </>\n )\n case 'beluga':\n return (\n <>\n {/* Bulbous rounded melon forehead */}\n <path className={css.crewMelon} d=\"M21 -9.5 C27 -19.5 43 -19.5 51 -11.5 C40.5 -13.5 28.5 -12 21 -9.5 Z\" />\n <path className={css.crewMelonHighlight} d=\"M28 -14.5 C34 -17.5 42 -17 46 -13\" />\n </>\n )\n case 'shark':\n return (\n <>\n <path className={css.crewGill} d=\"M37 4.5 C39.5 6 39.5 9.5 37 11.5\" />\n <path className={css.crewGill} d=\"M41 3.5 C43.5 5 43.5 8.5 41 10.5\" />\n <path className={css.crewGill} d=\"M45 2.5 C47.5 4 47.5 7.5 45 9.5\" />\n <path className={css.crewGill} d=\"M49 2 C51 3.5 51 6.5 49 8.5\" />\n </>\n )\n case 'blue':\n return (\n <>\n <path className={css.crewPleat} d={THROAT_PLEATS} />\n {/* Double water spout with delicate droplets */}\n <path className={css.crewSpout} d=\"M43 -15 C42 -22 40 -27 36 -30\" />\n <path className={css.crewSpout} d=\"M44 -15 C47 -22 50 -26 55 -28\" />\n <path className={css.crewSpout} d=\"M43.5 -15 C41 -20 37 -23 32 -24\" />\n <circle className={css.crewDroplet} cx=\"35\" cy=\"-31.5\" r=\"1.1\" />\n <circle className={css.crewDroplet} cx=\"56.5\" cy=\"-29\" r=\"1.2\" />\n <circle className={css.crewDroplet} cx=\"31\" cy=\"-25\" r=\"0.9\" />\n <circle className={css.crewDroplet} cx=\"46\" cy=\"-29\" r=\"0.8\" />\n </>\n )\n case 'sperm':\n return (\n <>\n {/* Blowhole on left snout corner */}\n <ellipse className={css.crewBlowhole} cx=\"63\" cy=\"-12\" rx=\"1.8\" ry=\"1.2\" transform=\"rotate(-15 63 -12)\" />\n <path className={css.crewSpout} d=\"M63 -13 C66 -19 71 -22 75 -24\" />\n <circle className={css.crewDroplet} cx=\"76\" cy=\"-25\" r=\"1\" />\n </>\n )\n case 'narwhal':\n return (\n <>\n {/* Narwhal skin speckles */}\n <circle className={css.crewSpeckle} cx=\"30\" cy=\"-6\" r=\"0.8\" />\n <circle className={css.crewSpeckle} cx=\"37\" cy=\"-9\" r=\"0.9\" />\n <circle className={css.crewSpeckle} cx=\"44\" cy=\"-5\" r=\"0.7\" />\n <circle className={css.crewSpeckle} cx=\"51\" cy=\"0\" r=\"0.8\" />\n </>\n )\n default:\n return null\n }\n}\n\n/** The part of a hairstyle that hangs behind the head, drawn under the face. */\nfunction hairBehind(kind: HairKind, back: boolean) {\n if (kind === 'ponytail') {\n return (\n <g className={css.crewHairGroup}>\n <path\n className={css.crewHair}\n d={back\n ? 'M32 23 C36.5 23 39 27.5 39 34 C39 42.5 37 49 35 53 L29 53 C31 49 33 42.5 33 34 C33 27.5 29.5 25.5 32 23 Z'\n : 'M43.5 25.5 C48 27.5 50.5 32.5 50 39 C49.5 45.5 47 49.5 44 52 C46.5 46.5 47 40 46 35 C45.2 30.5 44 27.5 43.5 25.5 Z'}\n />\n <path\n className={css.crewHairHighlight}\n d={back\n ? 'M35 28 C37 34 36.5 43 34 49'\n : 'M46.5 30 C48 35 47.5 41 45.5 46'}\n />\n </g>\n )\n }\n if (kind === 'curls' && back) {\n return (\n <g className={css.crewHairGroup}>\n <path className={css.crewHair} d=\"M16.5 29.5 C12.5 31.5 12 38 15.5 41.5 C17.8 43.8 20.2 42.5 21 39.5 Z M47.5 29.5 C51.5 31.5 52 38 48.5 41.5 C46.2 43.8 43.8 42.5 43 39.5 Z\" />\n <circle className={css.crewHair} cx=\"13\" cy=\"35\" r=\"2.5\" />\n <circle className={css.crewHair} cx=\"51\" cy=\"35\" r=\"2.5\" />\n </g>\n )\n }\n return null\n}\n\n/** The part of a hairstyle that sits over everything, like a bun. */\nfunction hairAbove(kind: HairKind) {\n if (kind !== 'bun') return null\n return (\n <g className={css.crewHairGroup}>\n <circle className={css.crewHair} cx=\"32\" cy=\"7.5\" r=\"6.6\" />\n <path className={css.crewHairShine} d=\"M28 4.8 C29.2 2.6 31.5 1.6 33.8 2.1 C31.6 2.8 29.8 4 29 5.8 Z\" />\n <ellipse className={css.crewScrunchie} cx=\"32\" cy=\"13.2\" rx=\"3.8\" ry=\"1.4\" />\n </g>\n )\n}\n\n/**\n * Gear worn UNDER the hood. Headphones go on before the whale does: the cushioned\n * band runs over the head, and the plush ear cups sit naturally on both ears\n * under the jawline with metal pivots.\n */\nfunction headGearUnder(kind: GearKind, back: boolean) {\n if (kind !== 'headphones') return null\n return (\n <g className={css.crewCans}>\n {/* Over-head headband */}\n <path className={css.crewCansBand} d=\"M16 31 C16 15.5 23 8.5 32 8.5 C41 8.5 48 15.5 48 31\" />\n {/* Left ear cup and plush cushion */}\n <rect className={css.crewCansCup} x=\"11.5\" y=\"25.5\" width=\"8.6\" height=\"13\" rx=\"4.3\" />\n <rect className={css.crewCansCushion} x=\"17.5\" y=\"27\" width=\"2.6\" height=\"10\" rx=\"1.3\" />\n <circle className={css.crewCansPivot} cx=\"15.8\" cy=\"27\" r=\"1.2\" />\n\n {/* Right ear cup and plush cushion */}\n <rect className={css.crewCansCup} x=\"43.9\" y=\"25.5\" width=\"8.6\" height=\"13\" rx=\"4.3\" />\n <rect className={css.crewCansCushion} x=\"43.9\" y=\"27\" width=\"2.6\" height=\"10\" rx=\"1.3\" />\n <circle className={css.crewCansPivot} cx=\"48.2\" cy=\"27\" r=\"1.2\" />\n </g>\n )\n}\n\n/**\n * Gear worn OVER everything: glasses sit on the face, and the hood's jaw\n * stays clear of them, so the lenses read as lenses with clear glass reflections.\n */\nfunction headGearOver(kind: GearKind, back: boolean) {\n if (kind !== 'glasses' || back) return null\n return (\n <g className={css.crewGlasses}>\n <rect className={css.crewGlassesFrame} x=\"20.5\" y=\"26\" width=\"10\" height=\"8\" rx=\"3.5\" />\n <rect className={css.crewGlassesFrame} x=\"33.5\" y=\"26\" width=\"10\" height=\"8\" rx=\"3.5\" />\n <path className={css.crewGlassesGlass} d=\"M22 28 L27 32 M35 28 L40 32\" />\n <path className={css.crewGlassesBridge} d=\"M30.5 29.5 H33.5 M20.5 29 L16.8 30.2 M43.5 29 L47.2 30.2\" />\n </g>\n )\n}\n\n/** Whatever a member wears over its clothes. */\nfunction bodyGear(kind: GearKind, back: boolean) {\n switch (kind) {\n case 'scarf':\n return (\n <g className={css.crewScarfGroup}>\n <path className={css.crewScarf} d=\"M22.5 44.5 C26.5 50 37.5 50 41.5 44.5 L43 53.5 C37 57 27 57 21 53.5 Z\" />\n <path className={css.crewScarfPattern} d=\"M24 47.5 L26 53 M29 48.5 L31 54.5 M34 48.5 L36 54.5 M39 47.5 L41 53\" />\n <path className={css.crewScarf} d={back ? 'M28.5 54 L27 68.5 L33 69 L34.5 54 Z' : 'M39 54 L41.5 69.5 L35.5 70 L34 54 Z'} />\n <path className={css.crewScarfFringe} d={back ? 'M27 68.5 L26.5 71.5 M29 68.7 L28.8 71.8 M31 68.9 L31.2 72 M33 69 L33.5 72' : 'M35.5 70 L35 73 M37.5 69.8 L37.5 73 M39.5 69.6 L40 72.8 M41.5 69.5 L42.2 72.5'} />\n </g>\n )\n case 'lanyard':\n return (\n <g className={css.crewLanyardGroup}>\n <path className={css.crewCord} d=\"M26.5 47.5 L31.2 62 M37.5 47.5 L32.8 62\" />\n <circle className={css.crewClip} cx=\"32\" cy=\"62\" r=\"1.2\" />\n {!back && (\n <>\n <rect className={css.crewBadge} x=\"28.2\" y=\"62.8\" width=\"7.6\" height=\"9.8\" rx=\"1.6\" />\n <rect className={css.crewBadgePhoto} x=\"29.4\" y=\"64\" width=\"2.6\" height=\"3\" rx=\"0.5\" />\n <path className={css.crewBadgeLine} d=\"M32.8 64.8 H34.8 M32.8 66.2 H34.5 M29.4 68.5 H34.6\" />\n </>\n )}\n </g>\n )\n case 'backpack':\n return back\n ? (\n <g className={css.crewBackpackGroup}>\n <path className={css.crewPack} d=\"M22.5 51.5 C22.5 47.5 26 46 32 46 C38 46 41.5 47.5 41.5 51.5 L41.5 71 C41.5 74.5 38.5 75.5 32 75.5 C25.5 75.5 22.5 74.5 22.5 71 Z\" />\n <path className={css.crewPackPocket} d=\"M24.5 59.5 H39.5 V71 C39.5 73 37.5 74 32 74 C26.5 74 24.5 73 24.5 71 Z\" />\n <path className={css.crewPackTrim} d=\"M25 59.5 H39 M27.5 53 H36.5\" />\n <rect className={css.crewPackZip} x=\"31\" y=\"58.5\" width=\"2\" height=\"2\" rx=\"0.5\" />\n <path className={css.crewPackHandle} d=\"M29 46 C29 43.5 35 43.5 35 46\" />\n </g>\n )\n : (\n <g className={css.crewBackpackGroup}>\n <path className={css.crewStrap} d=\"M25 47.5 C24.5 56 25 64.5 26 71.5 M39 47.5 C39.5 56 39 64.5 38 71.5\" />\n <rect className={css.crewStrapBuckle} x=\"24\" y=\"60\" width=\"2.4\" height=\"2\" rx=\"0.5\" />\n <rect className={css.crewStrapBuckle} x=\"37.6\" y=\"60\" width=\"2.4\" height=\"2\" rx=\"0.5\" />\n </g>\n )\n default:\n return null\n }\n}\n\n/**\n * The head. Face on: the person looks out from under the whale's chin. From\n * behind — which is how you see somebody who is at their own computer — there\n * is no face to draw, both ears show, the back of the head is all hair, and\n * the whale looks the other way.\n */\nfunction head(kind: MaskKind, hair: HairKind, gear: GearKind, back: boolean) {\n return (\n <>\n {hairBehind(hair, back)}\n <ellipse className={css.crewEar} cx=\"17.2\" cy=\"32\" rx=\"3.4\" ry=\"4\" />\n {back && <ellipse className={css.crewEar} cx=\"46.8\" cy=\"32\" rx=\"3.4\" ry=\"4\" />}\n <path\n className={css.crewFace}\n d=\"M32 11.5 C42 11.5 46.5 19.5 46.5 29 C46.5 39 40.5 44.5 32 44.5 C23.5 44.5 17.5 39 17.5 29 C17.5 19.5 22 11.5 32 11.5 Z\"\n />\n {back && <path className={css.crewHair} d={NAPE} />}\n {!back && (\n <g className={css.crewFacialGroup}>\n {/* Eyebrows with soft curves */}\n <path className={css.crewBrow} d=\"M21.5 25 Q25.5 22.5 29.8 24.2\" />\n <path className={css.crewBrow} d=\"M34.2 24.2 Q38.5 22.5 42.5 25\" />\n {/* Expressive eyes with dual sparkle catchlights */}\n <circle className={css.crewPupil} cx=\"26.8\" cy=\"30\" r=\"1.6\" />\n <circle className={css.crewPupil} cx=\"37.2\" cy=\"30\" r=\"1.6\" />\n <circle className={css.crewEyeGlint} cx=\"27.5\" cy=\"29.2\" r=\"0.65\" />\n <circle className={css.crewEyeGlint} cx=\"37.9\" cy=\"29.2\" r=\"0.65\" />\n <circle className={css.crewEyeGlintSub} cx=\"26.2\" cy=\"30.8\" r=\"0.35\" />\n <circle className={css.crewEyeGlintSub} cx=\"36.6\" cy=\"30.8\" r=\"0.35\" />\n {/* Cute nose dot & smile */}\n <circle className={css.crewNose} cx=\"32\" cy=\"32.8\" r=\"0.5\" />\n <path className={css.crewSmile} d=\"M28.2 35.8 Q32 39 35.8 35.8\" />\n {/* Delicate blush on cheeks */}\n <ellipse className={css.crewBlush} cx=\"21\" cy=\"33.2\" rx=\"2.4\" ry=\"1.5\" />\n <ellipse className={css.crewBlush} cx=\"43\" cy=\"33.2\" rx=\"2.4\" ry=\"1.5\" />\n </g>\n )}\n <path className={css.crewHair} d={CAPS[hair]} />\n <path className={css.crewHairShine} d={HAIR_SHINE} />\n <path className={css.crewHairShine} d={HAIR_SHINE_SECONDARY} />\n {headGearUnder(gear, back)}\n\n {/* The whale hood in profile, pulled down warmly over the head */}\n <g transform={back ? 'translate(64 3) scale(-1 1)' : 'translate(0 3)'}>\n {behind(kind)}\n <path className={css.crewHood} d={WHALE} />\n <path className={css.crewHood} d={FLUKES} />\n <path className={css.crewBelly} d={BELLY} />\n <path className={css.crewHoodOpening} d={HOOD_OPENING_RIM} />\n {front(kind)}\n <path className={css.crewHoodSheen} d={HOOD_SHEEN} />\n <path className={css.crewHoodRidge} d={HOOD_RIDGE_HIGHLIGHT} />\n <path className={css.crewHoodShade} d={HOOD_SHADE} />\n {/* Cute whale eye with glistening catchlight */}\n <circle className={css.crewEye} cx=\"53\" cy=\"0\" r=\"2.8\" />\n <circle className={css.crewPupil} cx=\"53.8\" cy=\"0.4\" r=\"1.3\" />\n <circle className={css.crewEyeGlint} cx=\"54.4\" cy=\"-0.2\" r=\"0.55\" />\n <circle className={css.crewEyeGlintSub} cx=\"53.2\" cy=\"0.8\" r=\"0.3\" />\n <path className={css.crewMouth} d=\"M48.5 9.8 C53.5 7.8 58.5 6.2 62.5 5.8\" />\n </g>\n {hairAbove(hair)}\n {headGearOver(gear, back)}\n </>\n )\n}\n\n/** What one outfit adds over the plain body, seen from the front. */\nfunction outfitFront(outfit: OutfitKind) {\n switch (outfit) {\n case 'shirt':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewCollar} d=\"M25 48.5 C28 52.8 36 52.8 39 48.5\" />\n <path className={css.crewPlacket} d=\"M32 50 L32 79\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"55\" r=\"0.9\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"63\" r=\"0.9\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"71\" r=\"0.9\" />\n <path className={css.crewPocketStitch} d=\"M37.5 57 H44 V64.5 H37.5 Z\" />\n <path className={css.crewPenClip} d=\"M41 55.5 V59.5\" />\n </g>\n )\n case 'polo':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewCollar} d=\"M25 48.5 C28 52.8 36 52.8 39 48.5\" />\n <path className={css.crewPlacket} d=\"M32 49 L32 60.5\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"53.5\" r=\"0.85\" />\n <circle className={css.crewButton} cx=\"32\" cy=\"58\" r=\"0.85\" />\n <circle className={css.crewCrest} cx=\"39\" cy=\"56\" r=\"1.4\" />\n </g>\n )\n case 'tee':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewNeckBand} d=\"M24.5 48 C27.5 51.8 36.5 51.8 39.5 48 C38.5 53.5 25.5 53.5 24.5 48 Z\" />\n <path className={css.crewStitch} d=\"M17.5 67 H23.5 M40.5 67 H46.5\" />\n </g>\n )\n case 'sweater':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewNeckBand} d=\"M24 46.5 C27.5 51.5 36.5 51.5 40 46.5 C38.5 54 25.5 54 24 46.5 Z\" />\n <path className={css.crewRib} d={RIB_HEM} />\n <path className={css.crewKnitLine} d=\"M28 54 V73.5 M32 54 V73.5 M36 54 V73.5\" />\n </g>\n )\n case 'hoodie':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewDraw} d=\"M28.5 47 L30 56\" />\n <path className={css.crewDraw} d=\"M35.5 47 L34 56\" />\n <circle className={css.crewAglet} cx=\"30\" cy=\"56\" r=\"0.6\" />\n <circle className={css.crewAglet} cx=\"34\" cy=\"56\" r=\"0.6\" />\n <path className={css.crewPocket} d={POCKET} />\n </g>\n )\n case 'tunic':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewStitch} d=\"M20.5 50 L20.5 78 M43.5 50 L43.5 78\" />\n <path className={css.crewBelt} d=\"M17.5 68 Q32 72.5 46.5 68\" />\n <rect className={css.crewBuckle} x=\"30.2\" y=\"68.2\" width=\"3.6\" height=\"3\" rx=\"0.6\" />\n </g>\n )\n case 'vest':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewCollar} d=\"M25 48.5 C28 52.8 36 52.8 39 48.5\" />\n <path className={css.crewVest} d={VEST} />\n <path className={css.crewRib} d=\"M19 73 L45 73 L45 76.5 L19 76.5 Z\" />\n </g>\n )\n case 'jacket':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewJacket} d={JACKET} />\n <path className={css.crewCollar} d=\"M23.5 48 L29 52.5 M40.5 48 L35 52.5\" />\n <circle className={css.crewButton} cx=\"27.5\" cy=\"62\" r=\"1\" />\n <circle className={css.crewButton} cx=\"27.5\" cy=\"70\" r=\"1\" />\n </g>\n )\n case 'stripes':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewNeckBand} d=\"M24.5 48 C27.5 51.8 36.5 51.8 39.5 48 C38.5 53.5 25.5 53.5 24.5 48 Z\" />\n <path className={css.crewStripes} d={STRIPES} />\n </g>\n )\n case 'dungarees':\n default:\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewNeckBand} d=\"M24.5 48 C27.5 51.8 36.5 51.8 39.5 48 C38.5 53.5 25.5 53.5 24.5 48 Z\" />\n <path className={css.crewBib} d={BIB} />\n <path className={css.crewDraw} d={STRAPS} />\n <circle className={css.crewButton} cx=\"26.2\" cy=\"58.2\" r=\"1\" />\n <circle className={css.crewButton} cx=\"37.8\" cy=\"58.2\" r=\"1\" />\n <path className={css.crewStitch} d=\"M28 62 H36 V68 H28 Z\" />\n </g>\n )\n }\n}\n\n/** What one outfit adds over the plain body, seen from behind. */\nfunction outfitBack(outfit: OutfitKind) {\n switch (outfit) {\n case 'shirt':\n case 'polo':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewCollar} d=\"M24.5 49 L39.5 49\" />\n <path className={css.crewStitch} d=\"M25.5 57 C29 60.5 35 60.5 38.5 57\" />\n </g>\n )\n case 'sweater':\n case 'vest':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewRib} d={RIB_HEM} />\n <path className={css.crewKnitLine} d=\"M28 54 V73.5 M32 54 V73.5 M36 54 V73.5\" />\n </g>\n )\n case 'jacket':\n return <path className={css.crewStitch} d=\"M32 48 L32 79\" />\n case 'stripes':\n return <path className={css.crewStripes} d={STRIPES} />\n case 'dungarees':\n return (\n <g className={css.crewOutfitDetails}>\n <path className={css.crewDraw} d=\"M25.5 76 L23 47.5 M38.5 76 L41 47.5\" />\n <path className={css.crewCrossStrap} d=\"M23 58 L41 68 M41 58 L23 68\" />\n </g>\n )\n default:\n return null\n }\n}\n\n/**\n * One member of the crew.\n * @param props - the whale it wears, whether you are behind it, whether only\n * the head is wanted (a portrait), and everything it is dressed in.\n * @returns the character.\n */\nexport function Crew(props: {\n readonly kind: MaskKind\n readonly className?: string\n /** Seen from behind: the pose of somebody facing their own computer. */\n readonly back?: boolean\n /** A portrait: the hooded head alone, framed for a small round avatar. */\n readonly portrait?: boolean\n /** The outfit the member wears; teammates rotate through the wardrobe. */\n readonly outfit?: OutfitKind\n /** The shoes the member wears; teammates rotate through the shoe rack. */\n readonly shoes?: ShoeKind\n /** The hairstyle under the hood. */\n readonly hair?: HairKind\n /** The one thing it wears besides its clothes. */\n readonly gear?: GearKind\n /** Which of the stylesheet's hair colours it has. */\n readonly tone?: number\n /** Which of the stylesheet's skin tones it has. */\n readonly skin?: number\n}) {\n const {\n kind, className, back = false, portrait = false, outfit = 'shirt', shoes = 'sneaker',\n hair = 'crop', gear = 'none', tone = 0, skin = 0,\n } = props\n return (\n <svg\n className={`${css.crew} ${className ?? ''}`}\n viewBox={portrait ? '-1 -22 70 72' : '-6 -28 80 138'}\n data-kind={kind}\n data-back={back ? 'true' : undefined}\n data-outfit={outfit}\n data-shoes={shoes}\n data-hair={hair}\n data-gear={gear}\n data-tone={tone}\n data-skin={skin}\n aria-hidden\n focusable=\"false\"\n >\n {!portrait && (\n <>\n <g className={css.crewLimbBack}>\n <rect className={css.crewTrouser} x=\"22\" y=\"70\" width=\"9.2\" height=\"27\" rx=\"4\" />\n <path className={css.crewTrouserCrease} d=\"M26.6 74 V95\" />\n <path className={css.crewShoe} d={shoePath(shoes, 'left')} />\n {shoeTrim(shoes, 'left')}\n </g>\n <g className={css.crewLimbFront}>\n <rect className={css.crewTrouser} x=\"32.8\" y=\"70\" width=\"9.2\" height=\"27\" rx=\"4\" />\n <path className={css.crewTrouserCrease} d=\"M37.4 74 V95\" />\n <path className={css.crewShoe} d={shoePath(shoes, 'right')} />\n {shoeTrim(shoes, 'right')}\n </g>\n <g className={css.crewArmBack}>\n <rect className={css.crewSleeve} x=\"11.5\" y=\"52.5\" width=\"8.4\" height=\"22.5\" rx=\"4.2\" />\n <path className={css.crewCuff} d=\"M11.5 71.5 H19.9\" />\n <circle className={css.crewHand} cx=\"15.7\" cy=\"77\" r=\"4\" />\n </g>\n <g className={css.crewArmFront}>\n <rect className={css.crewSleeve} x=\"44.1\" y=\"52.5\" width=\"8.4\" height=\"22.5\" rx=\"4.2\" />\n <path className={css.crewCuff} d=\"M44.1 71.5 H52.5\" />\n <circle className={css.crewHand} cx=\"48.3\" cy=\"77\" r=\"4\" />\n </g>\n <rect className={css.crewNeck} x=\"28\" y=\"40\" width=\"8\" height=\"11.5\" rx=\"3.5\" />\n <path className={css.crewShirt} d={SHIRT} />\n <path className={css.crewSeam} d={SHOULDER_SEAM} />\n <path className={css.crewSeam} d={HEM_FOLD} />\n {outfit === 'hoodie' && <path className={css.crewHoodFabric} d={HOOD_FABRIC} />}\n {back ? outfitBack(outfit) : outfitFront(outfit)}\n {bodyGear(gear, back)}\n </>\n )}\n {head(kind, hair, gear, back)}\n </svg>\n )\n}\n","/**\n * The room's greenery.\n *\n * A plant used to be three overlapping radial gradients, which reads as a green\n * cloud in a pot. These are drawn the way the crew are: real blades with a\n * midrib and side veins, a light layer and a dark one so the foliage has a\n * front and a back to it, and a thrown pot with a rolled rim, a glaze\n * highlight, crumbed soil and a saucer under it.\n *\n * Every kind shares the same pot and the same frame — the pot's mouth is at\n * (50, 84), foliage grows up out of it — so a plant can be swapped for another\n * anywhere in the room without moving anything around it. Each blade is its own\n * group hinged at the point it joins the stem, so the stylesheet can sway them\n * out of step and the plant breathes instead of wobbling as one lump.\n */\nimport type { CSSProperties } from 'react'\nimport css from './TeamStage.module.css'\n\n/** The plants the room keeps, in the order places take them. */\nexport const PLANTS = ['monstera', 'sansevieria', 'pothos', 'cactus', 'ficus', 'palm'] as const\n\n/** One kind of plant. */\nexport type PlantKind = typeof PLANTS[number]\n\n/**\n * Which plant stands in the nth green spot of the room: stable, so the corner\n * you learned is the corner you come back to.\n * @param index - the spot's index.\n * @returns the kind that stands there.\n */\nexport function plantOf(index: number): PlantKind {\n return PLANTS[((index % PLANTS.length) + PLANTS.length) % PLANTS.length] ?? 'monstera'\n}\n\n/** One blade of foliage: its shape, where it joins the plant, and its veins. */\ninterface Blade {\n /** The outline, drawn from the joint at (0, 0) outward. */\n readonly d: string\n /** Where on the plant it joins, and how it is turned. */\n readonly at: string\n /** The lit layer catches the window; the rest sits behind it. */\n readonly lit?: boolean\n /** The midrib and whatever branches off it. */\n readonly vein?: string\n /** Foliage that hangs rather than stands: it swings from its top edge. */\n readonly hang?: boolean\n /** Secondary detail or variegation on the blade. */\n readonly detail?: string\n}\n\n/** A split leaf: organic notches cut into each side of a broad monstera heart. */\nconst MONSTERA = 'M0 -2 C-4 -10 -12 -13 -17 -17 L-8.5 -19 C-13 -23 -19 -25 -22 -30 '\n + 'L-11.5 -30.5 C-16 -36 -14 -42 0 -46 C14 -42 16 -36 11.5 -30.5 '\n + 'L22 -30 C19 -25 13 -23 8.5 -19 L17 -17 C12 -13 4 -10 0 -2 Z'\n\n/** Monstera leaf fenestration (inner perforations) and veins. */\nconst MONSTERA_VEIN = 'M0 -3 L0 -43 M0 -14 L-14 -18 M0 -14 L14 -18 '\n + 'M0 -24 L-17 -29 M0 -24 L17 -29 M0 -33 L-11 -38 M0 -33 L11 -38 '\n + 'M-6 -22 C-7 -25 -7 -27 -5 -28 C-4 -27 -4 -24 -5 -22 Z '\n + 'M6 -22 C7 -25 7 -27 5 -28 C4 -27 4 -24 5 -22 Z'\n\n/** An upright sword, thickest at the middle with elegant wavy edges and drawn to a sharp tip. */\nconst SWORD = 'M0 0 C-5.5 -7 -8 -22 -7 -36 C-6 -48 -3.5 -57 0 -62 '\n + 'C3.5 -57 6 -48 7 -36 C8 -22 5.5 -7 0 0 Z'\n\n/** The golden variegated margin along the edges of a snake plant's blade. */\nconst SWORD_EDGE = 'M-6.2 -22 C-7.2 -32 -6 -44 -2.8 -54 C-1.8 -46 -4.8 -32 -4.8 -20 Z '\n + 'M6.2 -22 C7.2 -32 6 -44 2.8 -54 C1.8 -46 4.8 -32 4.8 -20 Z'\n\n/** Transverse zebra banding on the snake plant blade. */\nconst SWORD_BANDING = 'M-4 -16 Q0 -14 4 -16 M-5 -26 Q0 -24 5 -26 M-5.5 -36 Q0 -34 5.5 -36 M-4 -46 Q0 -44 4 -46'\n\n/** A lush heart, hanging point-down the way a trailing pothos leaf does. */\nconst HEART = 'M0 0 C-8.5 -4 -13.5 -10 -13.5 -17 C-13.5 -22.5 -9 -25.5 -4.5 -23.5 '\n + 'C-2 -22 -0.6 -19.6 0 -17.5 C0.6 -19.6 2 -22 4.5 -23.5 '\n + 'C9 -25.5 13.5 -22.5 13.5 -17 C13.5 -10 8.5 -4 0 0 Z'\n\n/** The midrib and branching lateral veins of a hanging heart. */\nconst HEART_VEIN = 'M0 -2 L0 -19 M0 -7 L-7.5 -13.5 M0 -7 L7.5 -13.5 M0 -13 L-6 -17.5 M0 -13 L6 -17.5'\n\n/** Variegated marble splashes on pothos leaves. */\nconst HEART_SPLASH = 'M-3 -10 C-5 -12 -3 -15 -1 -13 C-2 -11 -3 -10 -3 -10 Z M4 -8 C6 -10 5 -13 2 -11 C4 -9 4 -8 4 -8 Z'\n\n/** A broad oval fiddle leaf with glossy curvature. */\nconst OVAL = 'M0 0 C-7 -5 -10 -11.5 -10 -18 C-10 -24.5 -5.5 -28.5 0 -29.5 C5.5 -28.5 10 -24.5 10 -18 C10 -11.5 7 -5 0 0 Z'\nconst OVAL_VEIN = 'M0 -2 L0 -27 M0 -9 L-7 -14 M0 -9 L7 -14 M0 -17 L-7.5 -21 M0 -17 L7.5 -21'\n\n/** A long graceful palm frond. */\nconst FROND = 'M0 0 C-3.8 -14 -6.5 -28 -4.2 -43 L0 -52 L4.2 -43 C6.5 -28 3.8 -14 0 0 Z'\n\n/** The leaflets combed off both sides of a frond. */\nconst FROND_VEIN = 'M0 -2 L0 -49 M0 -10 L-6 -16.5 M0 -10 L6 -16.5 M0 -19 L-6.8 -25.5 '\n + 'M0 -19 L6.8 -25.5 M0 -28 L-6.2 -34.5 M0 -28 L6.2 -34.5 M0 -36 L-4.5 -42 M0 -36 L4.5 -42'\n\n/** A ribbed 3D column, for a saguaro / barrel cactus. */\nconst COLUMN = 'M0 0 C-10 0 -13 -5 -13 -15.5 L-13 -35 C-13 -46.5 -8.5 -52 0 -52 '\n + 'C8.5 -52 13 -46.5 13 -35 L13 -15.5 C13 -5 10 0 0 0 Z'\n\n/** A shorter column, for an arm off the side of one. */\nconst LIMB = 'M0 0 C-7 0 -9 -3.5 -9 -10.5 L-9 -23 C-9 -31.5 -6 -35 0 -35 '\n + 'C6 -35 9 -31.5 9 -23 L9 -10.5 C9 -3.5 7 0 0 0 Z'\n\n/** The vertical contour ribs down a cactus. */\nconst RIBS = 'M-6.5 -6 C-8 -18 -8 -33 -6.5 -44 M0 -4 L0 -49 M6.5 -6 C8 -18 8 -33 6.5 -44'\n\n/**\n * The blades of one kind, back layer first. Built once at module load — the\n * stage re-renders its greenery on every snapshot, and rebuilding these\n * little arrays each time is the one allocation it can do without.\n */\nconst BLADES: Record<PlantKind, readonly Blade[]> = {\n monstera: [\n { d: MONSTERA, at: 'translate(50 82) rotate(-38) scale(0.88)', vein: MONSTERA_VEIN },\n { d: MONSTERA, at: 'translate(50 82) rotate(36) scale(0.92)', vein: MONSTERA_VEIN },\n { d: MONSTERA, at: 'translate(50 80) rotate(-14) scale(1.04)', lit: true, vein: MONSTERA_VEIN },\n { d: MONSTERA, at: 'translate(50 80) rotate(16) scale(0.96)', lit: true, vein: MONSTERA_VEIN },\n { d: MONSTERA, at: 'translate(50 78) rotate(2) scale(0.76)', lit: true, vein: MONSTERA_VEIN },\n ],\n sansevieria: [\n { d: SWORD, at: 'translate(50 84) rotate(-22) scale(0.84)', vein: SWORD_BANDING, detail: SWORD_EDGE },\n { d: SWORD, at: 'translate(50 84) rotate(20) scale(0.9)', vein: SWORD_BANDING, detail: SWORD_EDGE },\n { d: SWORD, at: 'translate(50 84) rotate(-8) scale(1.02)', lit: true, vein: SWORD_BANDING, detail: SWORD_EDGE },\n { d: SWORD, at: 'translate(50 84) rotate(7) scale(0.96)', lit: true, vein: SWORD_BANDING, detail: SWORD_EDGE },\n { d: SWORD, at: 'translate(50 84) rotate(-15) scale(0.68)', lit: true, vein: SWORD_BANDING, detail: SWORD_EDGE },\n ],\n pothos: [\n { d: SWORD, at: 'translate(50 82) rotate(-10) scale(0.52)' },\n { d: SWORD, at: 'translate(50 82) rotate(12) scale(0.46)', lit: true },\n { d: HEART, at: 'translate(28 84) rotate(196) scale(0.8)', hang: true, vein: HEART_VEIN, detail: HEART_SPLASH },\n { d: HEART, at: 'translate(22 96) rotate(184) scale(0.72)', hang: true, lit: true, vein: HEART_VEIN, detail: HEART_SPLASH },\n { d: HEART, at: 'translate(74 86) rotate(166) scale(0.78)', hang: true, vein: HEART_VEIN, detail: HEART_SPLASH },\n { d: HEART, at: 'translate(80 99) rotate(176) scale(0.68)', hang: true, lit: true, vein: HEART_VEIN, detail: HEART_SPLASH },\n { d: HEART, at: 'translate(50 70) rotate(180) scale(0.62)', hang: true, lit: true, vein: HEART_VEIN, detail: HEART_SPLASH },\n ],\n cactus: [\n { d: LIMB, at: 'translate(29 62) rotate(-24)', vein: RIBS },\n { d: LIMB, at: 'translate(71 58) rotate(22) scale(0.92)', vein: RIBS },\n { d: COLUMN, at: 'translate(50 82)', lit: true, vein: RIBS },\n ],\n ficus: [\n { d: OVAL, at: 'translate(35 55) rotate(-42)', vein: OVAL_VEIN },\n { d: OVAL, at: 'translate(65 53) rotate(44)', vein: OVAL_VEIN },\n { d: OVAL, at: 'translate(31 70) rotate(-64) scale(0.88)', vein: OVAL_VEIN },\n { d: OVAL, at: 'translate(69 68) rotate(66) scale(0.88)', vein: OVAL_VEIN },\n { d: OVAL, at: 'translate(43 41) rotate(-18)', lit: true, vein: OVAL_VEIN },\n { d: OVAL, at: 'translate(59 39) rotate(20)', lit: true, vein: OVAL_VEIN },\n { d: OVAL, at: 'translate(50 31) rotate(0) scale(0.92)', lit: true, vein: OVAL_VEIN },\n ],\n palm: [\n { d: FROND, at: 'translate(50 82) rotate(-54) scale(0.94)', vein: FROND_VEIN },\n { d: FROND, at: 'translate(50 82) rotate(52) scale(0.98)', vein: FROND_VEIN },\n { d: FROND, at: 'translate(50 80) rotate(-26)', lit: true, vein: FROND_VEIN },\n { d: FROND, at: 'translate(50 80) rotate(24) scale(0.98)', lit: true, vein: FROND_VEIN },\n { d: FROND, at: 'translate(50 78) rotate(-2) scale(0.9)', lit: true, vein: FROND_VEIN },\n ],\n}\n\n/** The woody stems a kind shows between the soil and its foliage. */\nconst STEMS: Record<PlantKind, string | undefined> = {\n monstera: 'M50 84 C46 72 40 66 34 62 M50 84 C54 72 60 68 65 64 M50 84 L50 66',\n ficus: 'M50 84 L50 40 M50 68 C46 62 42 58 37 55 M50 66 C54 60 59 56 63 53 '\n + 'M50 56 C47 50 45 46 43 43 M50 54 C53 48 55 45 57 42',\n pothos: 'M48 82 C40 80 32 82 28 86 M52 82 C60 80 68 82 74 88 M28 86 C24 90 22 94 22 97 '\n + 'M74 88 C78 92 80 96 80 100',\n palm: 'M50 84 C48 78 44 72 38 66 M50 84 C52 78 56 72 62 66',\n sansevieria: undefined,\n cactus: undefined,\n}\n\n/**\n * One plant, pot and all.\n * @param props - which kind it is, and the class the room sizes it with.\n * @returns the plant.\n */\nexport function Plant(props: { readonly kind: PlantKind, readonly className?: string }) {\n const { kind, className } = props\n const blades = BLADES[kind]\n const stems = STEMS[kind]\n return (\n <svg\n className={`${css.flora} ${className ?? ''}`}\n viewBox=\"0 0 100 128\"\n data-plant={kind}\n aria-hidden\n focusable=\"false\"\n >\n {/* The saucer and the soft shadow it casts */}\n <ellipse className={css.floraShade} cx=\"50\" cy=\"122\" rx=\"28\" ry=\"5.5\" />\n <path className={css.floraSaucer} d=\"M28 116 H72 Q76 116 76 119.5 Q76 123.5 72 123.5 H28 Q24 123.5 24 119.5 Q24 116 28 116 Z\" />\n <path className={css.floraSaucerLip} d=\"M26 117.5 H74\" />\n\n {stems !== undefined && <path className={css.floraStem} d={stems} />}\n\n {blades.map((blade, index) => (\n <g key={`${blade.at}-${index}`} transform={blade.at}>\n <g\n className={css.floraLeaf}\n data-hang={blade.hang === true ? 'true' : undefined}\n style={{ '--team-leaf-delay': `${-((index * 0.83) % 4).toFixed(2)}s` } as CSSProperties}\n >\n <path className={blade.lit === true ? css.floraBladeLit : css.floraBlade} d={blade.d} />\n {blade.detail !== undefined && <path className={css.floraBladeDetail} d={blade.detail} />}\n {blade.vein !== undefined && <path className={css.floraVein} d={blade.vein} />}\n </g>\n </g>\n ))}\n\n {kind === 'cactus' && (\n <g className={css.floraCactusDetails}>\n {/* Spine clusters with radial needle rays */}\n <path className={css.floraSpine} d=\"M42 44 L38 41 M42 44 L37 44 M42 44 L38 47 M42 54 L38 51 M42 54 L37 54 M42 54 L38 57 M42 64 L38 61 M42 64 L37 64 M58 42 L62 39 M58 42 L63 42 M58 42 L62 45 M58 52 L62 49 M58 52 L63 52 M58 62 L62 59 M58 62 L63 62\" />\n {/* Beautiful desert cactus flower bloom */}\n <circle className={css.floraBloomOuter} cx=\"50\" cy=\"30\" r=\"5\" />\n <circle className={css.floraBloom} cx=\"50\" cy=\"30\" r=\"3.8\" />\n <circle className={css.floraBloomHeart} cx=\"50\" cy=\"30\" r=\"1.6\" />\n <circle className={css.floraBloomStamen} cx=\"49.3\" cy=\"29.3\" r=\"0.6\" />\n <circle className={css.floraBloomStamen} cx=\"50.7\" cy=\"30.5\" r=\"0.6\" />\n </g>\n )}\n\n {/* The planter pot: thrown terracotta with rolled rim, rim lip, glaze specular shine, soil and pebbles */}\n <path className={css.floraPot} d=\"M28 87 H72 L67.5 117 Q67 120 63 120 H37 Q33 120 32.5 117 Z\" />\n <path className={css.floraPotShade} d=\"M60 87 L72 87 L67.5 117 Q67 120 63 120 H57 Q61 106 60 87 Z\" />\n <path className={css.floraGlaze} d=\"M35 91 C32.5 101 33 110 35.5 117 L39.5 117 C37 109 36.5 101 38.5 91 Z\" />\n <path className={css.floraRim} d=\"M25 78.5 H75 Q78.5 78.5 78.5 82 V86.5 Q78.5 89.5 75 89.5 H25 Q21.5 89.5 21.5 86.5 V82 Q21.5 78.5 25 78.5 Z\" />\n <path className={css.floraRimLip} d=\"M23.5 80.5 H76.5\" />\n <ellipse className={css.floraSoil} cx=\"50\" cy=\"81.5\" rx=\"24\" ry=\"4.2\" />\n {/* Rich potting soil texture crumbs and small moss pebbles */}\n <circle className={css.floraCrumb} cx=\"38\" cy=\"81\" r=\"1.5\" />\n <circle className={css.floraCrumb} cx=\"60\" cy=\"82.5\" r=\"1.2\" />\n <circle className={css.floraCrumb} cx=\"51\" cy=\"79.5\" r=\"1\" />\n <circle className={css.floraMoss} cx=\"44\" cy=\"82.8\" r=\"1.4\" />\n <circle className={css.floraMoss} cx=\"56\" cy=\"80.8\" r=\"1.2\" />\n </svg>\n )\n}\n","/**\n * The things standing in the room, drawn as objects rather than as stickers.\n *\n * Every prop here is built the same way: a TOP face, a FRONT face and one SIDE\n * face, receding up and to the right by a fixed amount, over a soft contact\n * shadow on the floor. That is the whole trick of the room's 2.5D — a rectangle\n * with a lid and a flank reads as a box, and a rectangle on its own reads as a\n * sticker — and keeping the recede in one direction for every prop is what\n * stops the corner looking like six objects lit by six different suns.\n *\n * They live here rather than in `TeamStage.tsx` because a stage that draws the\n * team should not also be the file that knows how a coffee machine is shaped.\n */\nimport { useId } from 'react'\nimport css from './TeamStage.module.css'\n\n/** Strip the colons React puts in a generated id, so it is safe in a url(). */\nfunction safeId(raw: string): string {\n return raw.replaceAll(':', '')\n}\n\n/**\n * The water cooler: a large 5-gallon bottled jug on a modern cabinet with\n * real lid, flank, water level, hot/cold taps, drip tray grille, LED lights,\n * and rising bubbles.\n * @returns the cooler.\n */\nexport function CoolerFigure() {\n const uid = safeId(useId())\n return (\n <svg className={css.coolerSvg} viewBox=\"0 0 80 115\" aria-hidden focusable=\"false\">\n <defs>\n <linearGradient id={`${uid}-cabinet`} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0.4\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-cooler-lit)' }} />\n <stop offset=\"0.45\" style={{ stopColor: 'var(--team-cooler)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-cooler-dark)' }} />\n </linearGradient>\n <linearGradient id={`${uid}-bottle`} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-cooler-bottle-dark)' }} />\n <stop offset=\"0.25\" style={{ stopColor: 'var(--team-cooler-bottle)' }} />\n <stop offset=\"0.65\" style={{ stopColor: 'var(--team-cooler-bottle-lit)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-cooler-bottle-dark)' }} />\n </linearGradient>\n <linearGradient id={`${uid}-water`} x1=\"0\" y1=\"0\" x2=\"0.3\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-cooler-water-lit)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-cooler-water)' }} />\n </linearGradient>\n </defs>\n\n {/* Ground contact shadow */}\n <ellipse className={css.propShade} cx=\"38\" cy=\"106\" rx=\"34\" ry=\"8\" />\n\n {/* The cabinet: front, flank, lid. */}\n <path className={css.propSide} d=\"M58 54 L70 45 L70 98 Q70 102 65 105 L58 105 Z\" />\n <path className={css.coolerCabinet} d=\"M12 54 H58 V99 Q58 105 52 105 H18 Q12 105 12 99 Z\" fill={`url(#${uid}-cabinet)`} />\n <path className={css.propTop} d=\"M12 54 L24 45 H70 L58 54 Z\" />\n <path className={css.coolerCabinetEdge} d=\"M12 54 H58 V99 Q58 105 52 105 H18 Q12 105 12 99 Z\" />\n\n {/* Recessed alcove panel for taps & drip tray */}\n <path className={css.coolerPanel} d=\"M18 64 H52 V94 H18 Z\" />\n <path className={css.coolerPanelDepth} d=\"M18 64 L21 61 H49 L52 64\" />\n <path className={css.coolerDoorSeam} d=\"M18 97 H52\" />\n\n {/* Hot and Cold taps with metallic faucets */}\n <path className={css.coolerTap} d=\"M24 72 H32 M38 72 H46\" />\n <path className={css.coolerFaucet} d=\"M28 72 V76 M42 72 V76\" />\n <circle className={css.coolerHandleWarm} cx=\"28\" cy=\"68\" r=\"2.6\" />\n <circle className={css.coolerHandleCool} cx=\"42\" cy=\"68\" r=\"2.6\" />\n\n {/* Drip tray with perforated grille */}\n <ellipse className={css.coolerDrip} cx=\"35\" cy=\"95\" rx=\"17\" ry=\"4.2\" />\n <ellipse className={css.coolerDripWell} cx=\"35\" cy=\"94.5\" rx=\"14\" ry=\"2.8\" />\n <path className={css.coolerGrille} d=\"M26 94.5 H44 M28 95.5 H42 M30 93.5 H40\" />\n\n {/* Status indicator LEDs */}\n <circle className={css.coolerLedPower} cx=\"16\" cy=\"59\" r=\"1.1\" />\n <circle className={css.coolerLedCold} cx=\"20\" cy=\"59\" r=\"1.1\" />\n\n {/* The 5-gallon water jug with realistic ribs and neck */}\n <path className={css.coolerBottle} d=\"M20 54 C20 36 24 22 31 15 L47 15 C54 22 58 36 58 54 Z\" fill={`url(#${uid}-bottle)`} />\n <path className={css.coolerWater} d=\"M22 54 C22 39 25.5 26 31.5 20 L46.5 20 C52.5 26 56 39 56 54 Z\" fill={`url(#${uid}-water)`} />\n\n {/* Polycarbonate ribbed strengthening rings */}\n <path className={css.coolerRib} d=\"M21.5 42 Q39 45 56.5 42 M23.5 30 Q39 33 54.5 30\" />\n\n <path className={css.coolerNeck} d=\"M31 15 L31 6 C31 4 32.5 3 34.5 3 L43.5 3 C45.5 3 47 4 47 6 L47 15 Z\" fill={`url(#${uid}-bottle)`} />\n <ellipse className={css.coolerCap} cx=\"39\" cy=\"3\" rx=\"9\" ry=\"3\" />\n <ellipse className={css.coolerCapTop} cx=\"39\" cy=\"2\" rx=\"6\" ry=\"2\" />\n\n {/* Specular gloss highlights */}\n <path className={css.coolerShine} d=\"M24 51 C24 38 27.5 25 33 18 C30 25 26.5 36 26.5 51 Z\" />\n <path className={css.coolerShineRim} d=\"M52 51 C54.5 39 55 28 53 21\" />\n\n {/* Rising animated micro-bubbles in the water */}\n <circle className={css.coolerBubble} cx=\"31\" cy=\"38\" r=\"1.3\" style={{ animationDelay: '0s' }} />\n <circle className={css.coolerBubble} cx=\"45\" cy=\"44\" r=\"1.6\" style={{ animationDelay: '-1.7s' }} />\n <circle className={css.coolerBubble} cx=\"37\" cy=\"32\" r=\"1.1\" style={{ animationDelay: '-3.1s' }} />\n <circle className={css.coolerBubble} cx=\"49\" cy=\"33\" r=\"1.2\" style={{ animationDelay: '-4.4s' }} />\n <circle className={css.coolerBubble} cx=\"29\" cy=\"47\" r=\"0.9\" style={{ animationDelay: '-5.2s' }} />\n </svg>\n )\n}\n\n/**\n * Modern Nordic 3-seater Sofa with deep tufted cushions, throw pillows,\n * rounded armrests, natural wood tapered legs, and contact shadows.\n * @returns the sofa figure.\n */\nexport function SofaFigure() {\n const uid = safeId(useId())\n return (\n <svg className={css.sofaSvg} viewBox=\"0 0 140 85\" aria-hidden focusable=\"false\">\n <defs>\n <linearGradient id={`${uid}-sofa-back`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-fabric-lit)' }} />\n <stop offset=\"0.6\" style={{ stopColor: 'var(--team-fabric)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-fabric-dark)' }} />\n </linearGradient>\n <linearGradient id={`${uid}-sofa-seat`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'color-mix(in srgb, var(--dsw-static-neutral-00) 24%, var(--team-fabric-lit))' }} />\n <stop offset=\"0.3\" style={{ stopColor: 'var(--team-fabric-lit)' }} />\n <stop offset=\"0.75\" style={{ stopColor: 'var(--team-fabric)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-fabric-dark)' }} />\n </linearGradient>\n </defs>\n\n {/* Floor contact shadow */}\n <ellipse className={css.propShade} cx=\"70\" cy=\"79\" rx=\"64\" ry=\"6\" />\n\n {/* Four tapered wooden legs */}\n <path className={css.sofaLeg} d=\"M18 68 L14 80 L18 80 L21 68 Z M122 68 L126 80 L122 80 L119 68 Z M36 68 L34 78 L37 78 L39 68 Z M104 68 L106 78 L103 78 L101 68 Z\" />\n\n {/* Sofa Backrest with 3 plush sections and button tufting */}\n <path\n className={css.sofaBack}\n d=\"M12 14 C12 6 22 2 70 2 C118 2 128 6 128 14 L128 48 C128 54 118 56 70 56 C22 56 12 54 12 48 Z\"\n fill={`url(#${uid}-sofa-back)`}\n />\n {/* Backrest top highlight */}\n <path className={css.sofaBackTop} d=\"M14 12 C24 5 116 5 126 12\" />\n\n {/* Cushion dividers & button tufts */}\n <path className={css.sofaSeam} d=\"M50 6 V46 M90 6 V46\" />\n <circle className={css.sofaButton} cx=\"31\" cy=\"24\" r=\"1.8\" />\n <circle className={css.sofaButton} cx=\"70\" cy=\"24\" r=\"1.8\" />\n <circle className={css.sofaButton} cx=\"109\" cy=\"24\" r=\"1.8\" />\n\n {/* Thick plush 3D Seat Cushions with piping seam */}\n <rect\n className={css.sofaSeat}\n x=\"10\"\n y=\"38\"\n width=\"120\"\n height=\"26\"\n rx=\"6\"\n fill={`url(#${uid}-sofa-seat)`}\n />\n <path className={css.sofaSeatSeam} d=\"M50 38 V64 M90 38 V64\" />\n <path className={css.sofaSeatPiping} d=\"M12 42 H128\" />\n\n {/* Rounded Armrests with 3D depth */}\n <path className={css.sofaArm} d=\"M6 24 C6 18 10 16 16 16 C20 16 22 20 22 28 L22 56 C22 62 18 64 12 64 C8 64 6 60 6 56 Z\" />\n <path className={css.sofaArmTop} d=\"M8 20 C10 18 16 18 18 20\" />\n <path className={css.sofaArm} d=\"M134 24 C134 18 130 16 124 16 C120 16 118 20 118 28 L118 56 C118 62 122 64 128 64 C132 64 134 60 134 56 Z\" />\n <path className={css.sofaArmTop} d=\"M126 20 C128 18 134 18 132 20\" />\n\n {/* Two colorful decorative throw pillows */}\n {/* Left pillow (warm terracotta / mustard) */}\n <rect className={css.sofaPillowWarm} x=\"20\" y=\"26\" width=\"18\" height=\"18\" rx=\"4\" transform=\"rotate(-12 29 35)\" />\n <path className={css.sofaPillowLine} d=\"M22 35 L36 35\" transform=\"rotate(-12 29 35)\" />\n {/* Right pillow (ocean blue / teal) */}\n <rect className={css.sofaPillowCool} x=\"102\" y=\"26\" width=\"18\" height=\"18\" rx=\"4\" transform=\"rotate(10 111 35)\" />\n <path className={css.sofaPillowLine} d=\"M104 35 L118 35\" transform=\"rotate(10 111 35)\" />\n </svg>\n )\n}\n\n/**\n * Natural Oak Coffee Table with chamfered edge, splayed wooden legs,\n * glossy design magazine and steaming coffee cup.\n * @returns the table figure.\n */\nexport function TableFigure() {\n const uid = safeId(useId())\n return (\n <svg className={css.tableSvg} viewBox=\"0 0 100 55\" aria-hidden focusable=\"false\">\n <defs>\n <linearGradient id={`${uid}-tabletop`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'color-mix(in srgb, var(--team-warm) 45%, var(--dsw-static-neutral-00))' }} />\n <stop offset=\"0.5\" style={{ stopColor: 'color-mix(in srgb, var(--team-warm) 50%, var(--dsw-static-neutral-00))' }} />\n <stop offset=\"1\" style={{ stopColor: 'color-mix(in srgb, var(--team-warm) 60%, var(--dsw-static-neutral-600))' }} />\n </linearGradient>\n </defs>\n\n {/* Floor shadow */}\n <ellipse className={css.propShade} cx=\"50\" cy=\"50\" rx=\"44\" ry=\"5\" />\n\n {/* Splayed wooden legs with brass ferrules */}\n <path className={css.tableLeg} d=\"M16 28 L10 49 L14 49 L20 28 Z M84 28 L90 49 L86 49 L80 28 Z M28 28 L25 46 L28 46 L31 28 Z M72 28 L75 46 L72 46 L69 28 Z\" />\n\n {/* Solid Oak Tabletop with 3D bevel and grain */}\n <path\n className={css.tableTop}\n d=\"M6 18 C6 12 16 8 50 8 C84 8 94 12 94 18 L94 25 C94 31 84 35 50 35 C16 35 6 31 6 25 Z\"\n fill={`url(#${uid}-tabletop)`}\n />\n <ellipse className={css.tableSurface} cx=\"50\" cy=\"18\" rx=\"42\" ry=\"9\" />\n <path className={css.tableEdge} d=\"M8 18 C8 27 92 27 92 18 L92 25 C92 34 8 34 8 25 Z\" />\n <path className={css.tableGrain} d=\"M22 17 C34 14 66 14 78 17 M28 20 C40 18 60 18 72 20\" />\n\n {/* Open design magazine */}\n <path className={css.tableMagazine} d=\"M22 16 L36 12 L44 15 L30 19 Z\" />\n <path className={css.tableMagPage} d=\"M24 16 L34 13 M38 13 L42 15\" />\n\n {/* Steaming ceramic coffee mug */}\n <ellipse className={css.tableSaucer} cx=\"68\" cy=\"18\" rx=\"8\" ry=\"3.5\" />\n <path className={css.tableCup} d=\"M63 12 H73 L71.5 18 C71 20 65 20 64.5 18 Z\" />\n <path className={css.tableMugHandle} d=\"M72 13 C75 13 75 16 71.5 17\" />\n <path className={css.propSteam} d=\"M66 10 Q68 7 66 5 M70 10 Q72 7 70 5\" />\n </svg>\n )\n}\n\n/**\n * Mid-century Arched Floor Lamp with brass stem, marble base,\n * warm glowing linen drum shade, and floor illumination.\n * @returns the floor lamp figure.\n */\nexport function LampFigure() {\n return (\n <svg className={css.lampSvg} viewBox=\"0 0 50 120\" aria-hidden focusable=\"false\">\n {/* Downward cone light pool */}\n <path className={css.lampBeam} d=\"M25 38 L48 116 H2 Z\" />\n\n {/* Heavy marble round base */}\n <ellipse className={css.propShade} cx=\"25\" cy=\"116\" rx=\"18\" ry=\"4\" />\n <ellipse className={css.lampBase} cx=\"25\" cy=\"114\" rx=\"12\" ry=\"3.2\" />\n\n {/* Arched brushed brass stem */}\n <path className={css.lampStem} d=\"M25 114 V55 C25 24 25 18 25 12\" />\n <circle className={css.lampFinial} cx=\"25\" cy=\"10\" r=\"2\" />\n\n {/* Warm glowing linen drum shade */}\n <path className={css.lampShade} d=\"M12 16 H38 L42 38 H8 Z\" />\n <ellipse className={css.lampShadeTop} cx=\"25\" cy=\"16\" rx=\"13\" ry=\"3.2\" />\n <ellipse className={css.lampShadeBottom} cx=\"25\" cy=\"38\" rx=\"17\" ry=\"4.2\" />\n <circle className={css.lampBulb} cx=\"25\" cy=\"37\" r=\"4\" />\n </svg>\n )\n}\n\n/**\n * Wall-mounted Split Air Conditioner with sleek louvers, digital 24°C LED display,\n * and refreshing cool breeze airflow.\n * @returns the air conditioner figure.\n */\nexport function AirConditionerFigure() {\n return (\n <svg className={css.acSvg} viewBox=\"0 0 90 45\" aria-hidden focusable=\"false\">\n {/* Wall shadow */}\n <rect className={css.propShade} x=\"4\" y=\"6\" width=\"82\" height=\"24\" rx=\"4\" />\n\n {/* 2.5D Isometric AC Housing: Top, Side, Front */}\n <path className={css.propSide} d=\"M80 8 L86 4 L86 24 L80 28 Z\" />\n <path className={css.acBody} d=\"M4 8 H80 V28 Q80 30 76 30 H8 Q4 30 4 28 Z\" />\n <path className={css.propTop} d=\"M4 8 L10 4 H86 L80 8 Z\" />\n <path className={css.acEdge} d=\"M4 8 H80 V28 Q80 30 76 30 H8 Q4 30 4 28 Z\" />\n\n {/* Air intake top grille */}\n <path className={css.acGrille} d=\"M12 6 H78 M14 7.5 H76\" />\n\n {/* Front panel display & brand line */}\n <path className={css.acSeam} d=\"M6 22 H78\" />\n\n {/* Oscillating airflow flap / louver */}\n <path className={css.acLouver} d=\"M8 24 H76 V27 H8 Z\" />\n\n {/* Digital LED temperature display (24°C) */}\n <text className={css.acTemp} x=\"64\" y=\"18\">24°</text>\n\n {/* Status indicator LEDs */}\n <circle className={css.acLedPower} cx=\"74\" cy=\"14.5\" r=\"1\" />\n <circle className={css.acLedCool} cx=\"74\" cy=\"18.5\" r=\"1\" />\n\n {/* Refreshing downward animated airflow breeze */}\n <path className={css.acBreeze} d=\"M14 31 Q20 38 16 44 M30 31 Q38 38 34 44 M46 31 Q54 38 50 44 M62 31 Q70 38 66 44\" />\n </svg>\n )\n}\n\n/**\n * A 2.5D fitness treadmill for the wellness corner: a low deck whose belt\n * disappears under a rounded motor hood, console uprights flanking the hood\n * (the near one clear of it, the far one rising behind it), handrails that\n * sweep back along the deck's sides with pulse grips on the run, and a touch\n * console with the safety key still in it and a bottle in the holder.\n * @returns the treadmill figure.\n */\nexport function TreadmillFigure() {\n const uid = safeId(useId())\n return (\n <svg className={css.treadmillSvg} viewBox=\"0 0 100 100\" aria-hidden focusable=\"false\">\n <defs>\n <linearGradient id={`${uid}-belt`} x1=\"0\" y1=\"0\" x2=\"0.3\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'var(--dsw-static-neutral-800)' }} />\n <stop offset=\"0.5\" style={{ stopColor: 'var(--dsw-static-neutral-900)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--dsw-static-neutral-1000)' }} />\n </linearGradient>\n </defs>\n\n {/* Floor contact shadow */}\n <ellipse className={css.propShade} cx=\"47\" cy=\"93\" rx=\"42\" ry=\"6.5\" />\n\n {/* The deck: far flank, front and top, in the room's shared 2.5D faces */}\n <path className={css.propSide} d=\"M80 56 L90 50 L90 84 L80 90 Z\" />\n <path className={css.treadmillBase} d=\"M12 62 L80 56 L80 90 L12 96 Z\" />\n <path className={css.propTop} d=\"M12 62 L22 56 L90 50 L80 56 Z\" />\n\n {/* The running belt, tucked under the motor hood at the far end */}\n <path className={css.treadmillBelt} d=\"M16 63 L66 60 L66 87 L16 90 Z\" fill={`url(#${uid}-belt)`} />\n <path className={css.treadmillTread} d=\"M20 66 L62 63.5 M20 71 L62 68.5 M20 76 L62 73.5 M20 81 L62 78.5 M20 86 L62 83.5\" />\n\n {/* The step rail along the near edge */}\n <path className={css.treadmillRail} d=\"M13 62.4 L16 62.1 L16 89.6 L13 89.9 Z\" />\n\n {/* The far upright, rising from behind the hood */}\n <path className={css.treadmillPost} d=\"M85 52 L85 13\" />\n\n {/* The rounded motor hood over the front roller, belt disappearing under it */}\n <path className={css.treadmillHood} d=\"M66 59 C66 48.5 70.5 42.5 77.5 42 L82 41.6 C87.5 41.4 90 44.5 90 49 L90 64.5 C90 69.5 86.8 72.5 81.8 72.5 L72 73 C67.5 73.2 66 69 66 64.5 Z\" />\n <path className={css.treadmillHoodSheen} d=\"M69 47.5 C71.5 43.8 76 42 81 41.8 C85.5 41.7 88 43.5 88.8 46.8\" />\n <path className={css.treadmillHoodVent} d=\"M70 55 L87 53.2 M70 59 L87 57.2 M70 63 L87 61.2\" />\n\n {/* The near upright, standing clear of the hood's flank */}\n <path className={css.treadmillPost} d=\"M63 61 L63 17\" />\n\n {/* Handrails sweeping back along the deck's sides, pulse grips on the run */}\n <path className={css.treadmillArm} d=\"M63 28 L21 33.5 L21 37 L63 31.5 Z\" />\n <path className={css.treadmillArm} d=\"M85 23 L35 32.5 L35 36 L85 26.5 Z\" />\n <path className={css.treadmillSensor} d=\"M28 33.6 H34 M42 32.2 H48\" />\n\n {/* The touch console carried across both uprights */}\n <path className={css.treadmillConsole} d=\"M56 18 L88 13 L84.5 3.5 L53 8.5 Z\" />\n <path className={css.treadmillScreen} d=\"M59.5 14.8 L84.5 10.9 L82 6.4 L57 10.3 Z\" />\n <path className={css.treadmillMetrics} d=\"M62 13 L80 10.2 M62 10.6 L75 8.5\" />\n\n {/* Safety key on its cord, and the bottle in the holder at the console's base */}\n <circle className={css.treadmillStopKey} cx=\"79\" cy=\"12.8\" r=\"1.4\" />\n <path className={css.treadmillKeyCord} d=\"M79 12.8 C76 16.5 73 20.5 70.5 24.5\" />\n <rect className={css.treadmillBottle} x=\"54.5\" y=\"14\" width=\"3.2\" height=\"6.5\" rx=\"1.2\" />\n </svg>\n )\n}\n\n/**\n * A chair seen from behind: a curved shell, a mesh panel, a lumbar pad, a seat\n * pan with a lid on it, a gas lift and a five-star base. The base ellipse is\n * flattened to the floor's own foreshortening, so the chair stands on the room\n * rather than in front of it.\n * @returns the chair.\n */\nexport function ChairFigure() {\n const uid = safeId(useId())\n return (\n <svg className={css.chairSvg} viewBox=\"0 0 64 95\" aria-hidden focusable=\"false\">\n <defs>\n <linearGradient id={`${uid}-shell`} x1=\"0\" y1=\"0\" x2=\"0.35\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-chair-lit)' }} />\n <stop offset=\"0.55\" style={{ stopColor: 'var(--team-chair)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-chair-dark)' }} />\n </linearGradient>\n <linearGradient id={`${uid}-mesh`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'color-mix(in srgb, var(--team-chair-lit) 58%, transparent)' }} />\n <stop offset=\"1\" style={{ stopColor: 'color-mix(in srgb, var(--team-chair) 42%, transparent)' }} />\n </linearGradient>\n <linearGradient id={`${uid}-lift`} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0\" style={{ stopColor: 'var(--team-chair-dark)' }} />\n <stop offset=\"0.35\" style={{ stopColor: 'var(--team-chair-lit)' }} />\n <stop offset=\"0.65\" style={{ stopColor: 'var(--team-chair)' }} />\n <stop offset=\"1\" style={{ stopColor: 'var(--team-chair-dark)' }} />\n </linearGradient>\n </defs>\n <g className={css.chairRide}>\n {/* Armrest brackets standing on sides */}\n <path className={css.chairArmrest} d=\"M8 32 C8 26 12 24 14 26 L14 44 C12 46 8 42 8 36 Z\" />\n <path className={css.chairArmrest} d=\"M56 32 C56 26 52 24 50 26 L50 44 C52 46 56 42 56 36 Z\" />\n\n {/* Ergonomic curved back shell */}\n <path\n className={css.chairShell}\n d=\"M12 12 C12 4 20 1.5 32 1.5 C44 1.5 52 4 52 12 L52 44 C52 51 45 53.5 32 53.5 C19 53.5 12 51 12 44 Z\"\n fill={`url(#${uid}-shell)`}\n />\n <path\n className={css.chairShellEdge}\n d=\"M12 12 C12 4 20 1.5 32 1.5 C44 1.5 52 4 52 12 L52 44 C52 51 45 53.5 32 53.5 C19 53.5 12 51 12 44 Z\"\n />\n <path\n className={css.chairMesh}\n d=\"M18 14 C18 10.5 23 8 32 8 C41 8 46 10.5 46 14 L46 40 C46 45.5 40 47.5 32 47.5 C24 47.5 18 45.5 18 40 Z\"\n fill={`url(#${uid}-mesh)`}\n />\n {/* Breathable mesh horizontal and vertical weave texture */}\n <path className={css.chairMeshLine} d=\"M19 17 L45 17 M19 22 L45 22 M19 27 L45 27 M19 32 L45 32 M19 37 L45 37 M19 42 L45 42\" />\n <path className={css.chairMeshSpine} d=\"M32 10 V46\" />\n\n {/* Dynamic lumbar support pad */}\n <path className={css.chairLumbar} d=\"M20 30 C24 27.5 40 27.5 44 30 L44 37 C40 40 24 40 20 37 Z\" fill={`url(#${uid}-shell)`} />\n <circle className={css.chairLumbarKnob} cx=\"32\" cy=\"33.5\" r=\"1.5\" />\n\n {/* Contoured 3D seat cushion with waterfall front edge */}\n <path className={css.chairPan} d=\"M15 52 H49 Q52 52 52 55 L50 61 Q49.5 63 47 63 H17 Q14.5 63 14 61 L12 55 Q12 52 15 52 Z\" />\n <path className={css.chairPanTop} d=\"M15 52 H49 Q52 52 52 54.5 H12 Q12 52 15 52 Z\" />\n <path className={css.chairPanStitch} d=\"M20 54 H44\" />\n <rect className={css.chairMechanism} x=\"24\" y=\"62\" width=\"16\" height=\"6\" rx=\"2.5\" />\n </g>\n\n {/* Gas lift cylinder & 5-star base */}\n <rect className={css.chairLift} x=\"30\" y=\"68\" width=\"4\" height=\"15\" rx=\"2\" fill={`url(#${uid}-lift)`} />\n <ellipse className={css.chairHub} cx=\"32\" cy=\"86\" rx=\"6.5\" ry=\"2.4\" />\n <g className={css.chairSpokes}>\n <path d=\"M32 85.5 L8 90.5\" />\n <path d=\"M32 85.5 L19 93\" />\n <path d=\"M32 85.5 L45 93\" />\n <path d=\"M32 85.5 L56 90.5\" />\n <path d=\"M32 85.5 L32 94\" />\n </g>\n {/* Dual wheel polyurethane casters with contact shadows */}\n <g className={css.chairCasters}>\n <ellipse cx=\"8\" cy=\"90.5\" rx=\"2.6\" ry=\"2\" />\n <ellipse cx=\"19\" cy=\"93\" rx=\"2.6\" ry=\"2\" />\n <ellipse cx=\"45\" cy=\"93\" rx=\"2.6\" ry=\"2\" />\n <ellipse cx=\"56\" cy=\"90.5\" rx=\"2.6\" ry=\"2\" />\n <ellipse cx=\"32\" cy=\"94\" rx=\"2.6\" ry=\"2\" />\n </g>\n </svg>\n )\n}\n\n/**\n * The office printer: a box with a lid, an out-tray with a sheet still in it,\n * a paper cassette pulled a little proud of the body, and a status light.\n * @returns the printer.\n */\nexport function PrinterFigure() {\n return (\n <svg className={css.propSvg} viewBox=\"0 0 84 74\" aria-hidden focusable=\"false\">\n <ellipse className={css.propShade} cx=\"40\" cy=\"69\" rx=\"32\" ry=\"5\" />\n <path className={css.propSide} d=\"M64 24 L76 16 L76 62 L64 70 Z\" />\n <path className={css.propFront} d=\"M8 24 H64 V70 H8 Z\" />\n <path className={css.propTop} d=\"M8 24 L20 16 H76 L64 24 Z\" />\n <path className={css.propSeam} d=\"M8 24 H64 V70 H8 Z\" />\n\n {/* Flatbed scanner lid with handle notch */}\n <path className={css.propInset} d=\"M15 22.5 L24.5 18 H68 L58.5 22.5 Z\" />\n <path className={css.propScannerHandle} d=\"M34 22 H48\" />\n\n {/* Angled touch screen control panel */}\n <path className={css.propScreen} d=\"M14 26 H30 V34 H14 Z\" />\n <path className={css.propScreenGlint} d=\"M16 28 L24 28 M16 31 L21 31\" />\n\n {/* Paper standing out of the feeder at the back. */}\n <path className={css.propPaper} d=\"M32 16 L41 10.5 H60 L51 16 Z\" />\n <path className={css.propPaperLine} d=\"M38 14.5 L46 14.5\" />\n\n {/* The out-tray with a printed sheet lying in it. */}\n <path className={css.propTray} d=\"M12 38 H58 L54 45 H12 Z\" />\n <path className={css.propPaper} d=\"M16 38 H50 L47 43.5 H16 Z\" />\n <path className={css.propTextLines} d=\"M20 40.5 H38 M20 42 H32\" />\n\n {/* Lower paper drawer cassette with level indicator */}\n <path className={css.propInset} d=\"M12 52 H58 V64 H12 Z\" />\n <path className={css.propSeam} d=\"M12 58 H58\" />\n <rect className={css.propDrawerHandle} x=\"30\" y=\"54\" width=\"10\" height=\"2\" rx=\"1\" />\n <rect className={css.propPaperGauge} x=\"16\" y=\"54\" width=\"3\" height=\"6\" rx=\"0.5\" />\n\n {/* Status LEDs */}\n <circle className={css.propLampLive} cx=\"52\" cy=\"30\" r=\"2.2\" />\n <circle className={css.propLampWifi} cx=\"45\" cy=\"30\" r=\"1.8\" />\n <circle className={css.propLampIdle} cx=\"38\" cy=\"30\" r=\"1.8\" />\n </svg>\n )\n}\n\n/**\n * The coffee machine: an Italian espresso & drip station with hopper, group head,\n * steaming cup, glass carafe on warmer plate, and barista details.\n * @returns the coffee machine.\n */\nexport function CoffeeFigure() {\n return (\n <svg className={css.propSvg} viewBox=\"0 0 68 92\" aria-hidden focusable=\"false\">\n <ellipse className={css.propShade} cx=\"33\" cy=\"87\" rx=\"26\" ry=\"5\" />\n <path className={css.propSide} d=\"M50 30 L60 23 L60 82 L50 88 Z\" />\n <path className={css.propFront} d=\"M10 30 H50 V88 H10 Z\" />\n <path className={css.propTop} d=\"M10 30 L20 23 H60 L50 30 Z\" />\n <path className={css.propSeam} d=\"M10 30 H50 V88 H10 Z\" />\n\n {/* The bean hopper with coffee beans visible through glass */}\n <path className={css.propInset} d=\"M22 23 L28 12 H44 L50 23 Z\" />\n <path className={css.propGlass} d=\"M25 20 L29.5 14 H42.5 L47 20 Z\" />\n <ellipse className={css.propBean} cx=\"33\" cy=\"17\" rx=\"1.5\" ry=\"1\" />\n <ellipse className={css.propBean} cx=\"38\" cy=\"18\" rx=\"1.4\" ry=\"1\" />\n\n {/* Pressure gauge dial */}\n <circle className={css.propGauge} cx=\"18\" cy=\"36\" r=\"3.2\" />\n <path className={css.propGaugeNeedle} d=\"M18 36 L19.5 34.5\" />\n\n {/* Group head and espresso cup */}\n <path className={css.propSeam} d=\"M20 42 H42\" />\n <rect className={css.propInset} x=\"17\" y=\"46\" width=\"26\" height=\"16\" rx=\"2\" />\n <path className={css.propSpout} d=\"M26 46 V52 M34 46 V52\" />\n <path className={css.propPortafilter} d=\"M17 48 H25 M35 48 H43\" />\n <path className={css.propCup} d=\"M25 55 H35 L33.5 62 Q33 63.5 30 63.5 Q27 63.5 26.5 62 Z\" />\n {/* Steam rising from cup */}\n <path className={css.propSteam} d=\"M28 53 Q30 50 28 48 M32 53 Q34 50 32 48\" />\n\n {/* The glass carafe jug on its warmer plate */}\n <path className={css.propTray} d=\"M14 78 H46 V81 H14 Z\" />\n <path className={css.propWarmerPlate} d=\"M16 78 H44\" />\n <path className={css.propGlass} d=\"M20 66 H40 L38 77 H22 Z\" />\n <path className={css.propBrew} d=\"M21.4 71 H38.6 L38 77 H22 Z\" />\n <path className={css.propCarafeHandle} d=\"M40 68 C43 68 43 75 39 76\" />\n\n <circle className={css.propLampLive} cx=\"45\" cy=\"36\" r=\"1.8\" />\n\n {/* The colorful mug resting on the warmer lid */}\n <path className={css.propCup} d=\"M52 18 H61 L59.8 24 Q59.4 25.4 56.5 25.4 Q53.6 25.4 53.2 24 Z\" />\n <path className={css.propMugHandle} d=\"M60.5 19.5 C63 20 63 23 59.5 23.5\" />\n </svg>\n )\n}\n\n/**\n * The filing cabinet: three drawers with pull handles and a label card, a\n * folder standing out of the top one, and a box of files on the lid.\n * @returns the filing cabinet.\n */\nexport function CabinetFigure() {\n return (\n <svg className={css.propSvg} viewBox=\"0 0 72 108\" aria-hidden focusable=\"false\">\n <ellipse className={css.propShade} cx=\"34\" cy=\"103\" rx=\"27\" ry=\"5\" />\n <path className={css.propSide} d=\"M54 30 L64 23 L64 96 L54 102 Z\" />\n <path className={css.propFront} d=\"M10 30 H54 V102 H10 Z\" />\n <path className={css.propTop} d=\"M10 30 L20 23 H64 L54 30 Z\" />\n <path className={css.propSeam} d=\"M10 30 H54 V102 H10 Z\" />\n {[36, 60, 84].map(top => (\n <g key={top}>\n <path className={css.propInset} d={`M14 ${top} H50 V${top + 18} H14 Z`} />\n <rect className={css.propHandle} x=\"26\" y={top + 6} width=\"12\" height=\"3\" rx=\"1.5\" />\n <rect className={css.propLabel} x=\"17\" y={top + 4} width=\"7\" height=\"5\" rx=\"1\" />\n <path className={css.propLabelLine} d={`M18.5 ${top + 6.5} H22.5`} />\n </g>\n ))}\n {/* A folder standing out of the top drawer */}\n <path className={css.propFolder} d=\"M22 36 L28 26 H42 L36 36 Z\" />\n <path className={css.propPaper} d=\"M25 34 L30 27 H40 L35 34 Z\" />\n <path className={css.propFolderTab} d=\"M30 26 H36 V24 H30 Z\" />\n\n {/* The archive box on the lid */}\n <path className={css.propSide} d=\"M44 16 L52 11 L52 23 L44 28 Z\" />\n <path className={css.propBox} d=\"M24 16 H44 V28 H24 Z\" />\n <path className={css.propBoxTop} d=\"M24 16 L32 11 H52 L44 16 Z\" />\n <path className={css.propSeam} d=\"M28 21 H40\" />\n <ellipse className={css.propBoxHole} cx=\"34\" cy=\"22\" rx=\"2\" ry=\"1.2\" />\n </svg>\n )\n}\n\n/**\n * A pendant lamp over the room: a flex, a cone shade with a lit rim, and the\n * pool of light it throws. It hangs from the ceiling strip, which is what\n * finally tells the reader the room has one.\n * @returns the pendant.\n */\nexport function PendantFigure() {\n const uid = safeId(useId())\n return (\n <svg className={css.pendantSvg} viewBox=\"0 0 60 100\" aria-hidden focusable=\"false\">\n <defs>\n <linearGradient id={`${uid}-beam`} x1=\"0.5\" y1=\"0\" x2=\"0.5\" y2=\"1\">\n <stop offset=\"0\" style={{ stopColor: 'color-mix(in srgb, var(--team-warm) 36%, transparent)' }} />\n <stop offset=\"0.6\" style={{ stopColor: 'color-mix(in srgb, var(--team-warm) 18%, transparent)' }} />\n <stop offset=\"1\" style={{ stopColor: 'transparent' }} />\n </linearGradient>\n </defs>\n {/* The flex suspension cord with brass ceiling rose canopy */}\n <rect className={css.pendantRose} x=\"27\" y=\"0\" width=\"6\" height=\"3.5\" rx=\"1.5\" />\n <path className={css.pendantFlex} d=\"M30 0 V72\" />\n\n {/* Decorative brass neck ring */}\n <rect className={css.pendantNeck} x=\"27\" y=\"70\" width=\"6\" height=\"4\" rx=\"1.5\" />\n\n {/* Atmospheric warm cone beam of downward light */}\n <path className={css.pendantGlow} d=\"M30 88 L58 100 H2 Z\" fill={`url(#${uid}-beam)`} />\n\n {/* Designer dome cone shade */}\n <path className={css.pendantShade} d=\"M30 74 L48 92 H12 Z\" />\n <ellipse className={css.pendantMouth} cx=\"30\" cy=\"92\" rx=\"18\" ry=\"4.6\" />\n <ellipse className={css.pendantBulb} cx=\"30\" cy=\"90\" rx=\"6\" ry=\"3\" />\n <circle className={css.pendantFilament} cx=\"30\" cy=\"89.5\" r=\"1.5\" />\n </svg>\n )\n}\n\n/**\n * The cat that lives here. It walks the front of the room now and again and is\n * the one thing in the office nobody assigned a task to.\n * @returns the cat.\n */\nexport function CatFigure() {\n return (\n <svg className={css.catSvg} viewBox=\"0 0 64 40\" aria-hidden focusable=\"false\">\n <ellipse className={css.propShade} cx=\"32\" cy=\"37\" rx=\"20\" ry=\"3\" />\n {/* Fluffy tail */}\n <path className={css.catTail} d=\"M12 24 C4 22 2 13 7 8 C5 14 8 19 13 19.5 Z\" />\n <path className={css.catTailTip} d=\"M7 8 C8 10 7 12 5 14 Z\" />\n\n {/* Body & legs */}\n <path className={css.catBody} d=\"M14 22 C14 15 20 12 30 12 C41 12 47 15 47 22 L47 30 C47 34 44 36 40 36 L21 36 C17 36 14 34 14 30 Z\" />\n <path className={css.catLeg} d=\"M19 32 H23 V37.5 H19 Z M27 32 H31 V37.5 H27 Z M35 32 H39 V37.5 H35 Z M42 32 H46 V37.5 H42 Z\" />\n\n {/* Head, ears with inner pink fuzz */}\n <path className={css.catBody} d=\"M44 16 C51 16 55 20 55 25 C55 30 51 33 45 33 C41 33 39 30 39 25 C39 20 41 16 44 16 Z\" />\n <path className={css.catEar} d=\"M42 17 L41 8.5 L48 14 Z M52 14 L57 8.5 L57 17 Z\" />\n <path className={css.catEarInner} d=\"M42.5 15.5 L42 10.5 L46.5 14 Z M53 14 L56 10.5 L56 15.5 Z\" />\n\n {/* Sparkling emerald eyes */}\n <circle className={css.catEye} cx=\"47.5\" cy=\"23.5\" r=\"1.6\" />\n <circle className={css.catEye} cx=\"53.5\" cy=\"23.5\" r=\"1.6\" />\n <circle className={css.catPupil} cx=\"47.5\" cy=\"23.5\" r=\"0.9\" />\n <circle className={css.catPupil} cx=\"53.5\" cy=\"23.5\" r=\"0.9\" />\n <circle className={css.catGlint} cx=\"48\" cy=\"23\" r=\"0.5\" />\n <circle className={css.catGlint} cx=\"54\" cy=\"23\" r=\"0.5\" />\n\n {/* Cute nose & whiskers */}\n <circle className={css.catNose} cx=\"50.5\" cy=\"26\" r=\"0.7\" />\n <path className={css.catWhisker} d=\"M51 28 L59 26 M51 29 L59 29.5 M51 30 L58 32 M41 27 L33 26 M41 29 L33 29 M41 30 L34 32\" />\n <path className={css.catStripe} d=\"M22 14 L24 20 M29 13 L31 19 M36 14 L38 20 M46 14 L47 17\" />\n </svg>\n )\n}\n","/**\n * The agent-team stage: a conversation view tab that draws the team as a room\n * you can look into — every member has a desk of its own with its own computer\n * on it, stands where its live state puts it, and walks the floor to say\n * something to somebody else. The room is the whole tab: while the stage is on\n * screen it holds the composer seat, so nothing is left over the floor; the\n * mailbox, the shared workspace and the task board wait behind a dock of doors\n * on the right edge and open as a glass drawer over the room.\n *\n * Every value it renders is the host's own `team` projection, delivered\n * through the injected store: the browser folds nothing. Geometry comes from\n * the roster alone (no DOM measurement), so the picture is a function of the\n * durable state and nothing else.\n */\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport type { CSSProperties, ReactNode } from 'react'\nimport { StateDot } from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { PropsLocale, PropsRuntime, SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { SessionId, SessionListState } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type {\n TeamBoardEntryView, TeamMemberView, TeamMessageView, TeamTaskStatus, TeamTaskView,\n} from '../contract.ts'\nimport {\n IconTeam16, IconTeamLeader16, IconTeamMailbox16, IconTeamMessage16,\n IconTeamPeer16, IconTeamSend16, IconTeamTask16, IconTeamWorkspace16,\n} from './icons.tsx'\nimport {\n ROOM_BLOCKS, breakAt, deskOf, obstaclesOf, poseFor, spread, stationFor, visitAt,\n type Desk, type Point, type Pose, type Post, type Rect, type Touch,\n} from './room.ts'\nimport { onWall, project, shellVars } from './stagecraft.ts'\nimport { useIdleErrand, useWalk, type Facing } from './walk.ts'\nimport {\n Crew, accentOf, gearOf, hairOf, maskOf, outfitOf, shoeOf, skinOf, toneOf,\n} from './crew.tsx'\nimport { Plant, plantOf } from './flora.tsx'\nimport {\n AirConditionerFigure, CabinetFigure, CatFigure, ChairFigure, CoffeeFigure, CoolerFigure, LampFigure, PendantFigure, PrinterFigure, SofaFigure, TableFigure, TreadmillFigure,\n} from './props.tsx'\nimport css from './TeamStage.module.css'\n\n/** What the plugin's session follower publishes to this entry. */\nexport interface TeamPanelState {\n /** The session whose log owns the team; absent while no team is in view. */\n readonly leaderId?: string\n /** The session currently open, so the stage can mark the one you are reading. */\n readonly currentId?: string\n readonly members: readonly TeamMemberView[]\n readonly tasks: readonly TeamTaskView[]\n readonly messages: readonly TeamMessageView[]\n /** The shared workspace as the leader's log last recorded it. */\n readonly board: readonly TeamBoardEntryView[]\n /** When that snapshot was taken; absent while the leader has never looked. */\n readonly boardAt?: number\n}\n\n/** Navigation and chrome the plugin body owns (it holds the client services). */\nexport interface TeamInjected {\n /** Open one teammate's transcript through its durable parent address. */\n readonly openMember: (leaderId: string, memberId: string) => void\n /** Return to the leader's own conversation. */\n readonly openLeader: (leaderId: string) => void\n /**\n * Take the composer seat for as long as the room is on screen; the returned\n * disposer hands it back. The room is a picture, not a place you type into,\n * and the tab is worth more than the strip of window the input card takes.\n */\n readonly holdComposer?: () => () => void\n}\n\n/** Complete view-tab props: the root kit, the locale, and the inject face. */\nexport type TeamStageProps =\n PropsRuntime<'conversation.view'>\n & PropsLocale<'team'>\n & TeamInjected\n & { readonly useTeam: SnapshotSelectorHook<TeamPanelState> }\n\ntype Translate = PropsLocale<'team'>['t']\n\n/** How far back the mailbox counts as \"this is what the member is doing now\". */\nconst LIVE_MESSAGES = 4\n\n/** How much of a message one member says out loud while it delivers it. */\nconst SPEECH_CHARS = 44\n\n/** How much of a message one log row carries. */\nconst LOG_CHARS = 110\n\n/** How long one delivery keeps its carrier away from its own desk. */\nconst ERRAND_MS = 9_000\n\n/** The board's columns, left to right. */\nconst COLUMNS: readonly TeamTaskStatus[] = ['pending', 'active', 'done']\n\n/** Join the non-empty parts of a meta line. */\nfunction meta(...parts: (string | undefined)[]): string {\n return parts.filter(part => part !== undefined && part !== '').join(' · ')\n}\n\n/** Wall-clock hh:mm for one mailbox row. */\nfunction clock(time: number): string {\n try {\n return new Date(time).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })\n } catch {\n // Swallows only a RangeError from an out-of-range logged timestamp: a\n // mailbox row must render even when its clock cannot.\n return ''\n }\n}\n\n/** The glyph one small avatar carries: the member's first character. */\nfunction initial(name: string): string {\n return [...name][0]?.toUpperCase() ?? '?'\n}\n\n/** One line of a message, short enough to read where it is shown. */\nfunction short(text: string, limit: number): string {\n const line = text.replace(/\\s+/gu, ' ').trim()\n return [...line].length <= limit ? line : `${[...line].slice(0, limit).join('')}…`\n}\n\n/** Stagger the entry animation of a list without hard-coding per-row CSS. */\nfunction stagger(index: number): CSSProperties {\n return { animationDelay: `${Math.min(index, 10) * 30}ms` }\n}\n\n/** The three ledgers waiting behind the dock on the right edge of the room. */\ntype PanelId = 'feed' | 'workspace' | 'tasks'\n\n/** The preset pictures a workstation monitor can show. */\nconst APPS = ['code', 'chart', 'doc', 'mail', 'grid', 'term'] as const\ntype AppKind = typeof APPS[number]\n\n/** How many bars each preset picture is drawn from. */\nconst APP_BARS: Record<AppKind, number> = { code: 5, chart: 5, doc: 4, mail: 3, grid: 4, term: 4 }\n\n/** Which picture one seat's monitor shows; the leader watches the dashboard. */\nfunction appOf(seat: number): AppKind {\n if (seat < 0) return 'chart'\n return APPS[seat % APPS.length] ?? 'code'\n}\n\n/** One preset screen picture, drawn from bars alone so the theme owns it. */\nfunction ScreenApp(props: { readonly app: AppKind }) {\n const { app } = props\n return (\n <span className={css.screenApp} data-app={app} aria-hidden>\n {Array.from({ length: APP_BARS[app] }, (_, index) => <i key={index} />)}\n </span>\n )\n}\n\n/** A member as a tiny portrait: its own mask in its own accent. */\nfunction Cameo(props: { readonly seat: number | undefined, readonly name: string }) {\n const { seat, name } = props\n if (seat === undefined) return <span className={css.discGlyph}>{initial(name)}</span>\n return (\n <span className={css.cameo} data-cameo-species={maskOf(seat)} style={accentOf(seat)}>\n <Crew\n kind={maskOf(seat)}\n className={css.cameoCrew}\n portrait\n hair={hairOf(seat)}\n gear={gearOf(seat)}\n tone={toneOf(seat)}\n skin={skinOf(seat)}\n />\n </span>\n )\n}\n\n/** Where one thing stands on the floor, and how big it draws there. */\nfunction at(post: Post | Point, scale: number): CSSProperties {\n const screen = project(post)\n return {\n left: `${screen.left}%`,\n top: `${screen.top}%`,\n // Depth rides a variable rather than an inline z-index: an inline z-index\n // would outrank the stylesheet and pin a hovered member under its desk.\n '--team-depth': Math.round(post.y),\n // Perspective and the member's own size are one number by the time the\n // stylesheet sees them: something further back is smaller by exactly the\n // amount the floor under it is narrower.\n '--team-scale': Math.round(screen.scale * scale * 1000) / 1000,\n } as CSSProperties\n}\n\n/** Stagger each chair's occasional settle, so the office does not bounce in unison. */\nfunction chairDelay(seat: number): CSSProperties {\n return { '--team-chair-delay': `${-((seat + 1) % 5) * 1.35}s` } as CSSProperties\n}\n\n/**\n * The delivery currently being carried across the room. One message keeps its\n * carrier away from its own desk for a while and then lets it walk back: the\n * room shows what just happened, not the whole history at once.\n * @param latest - the newest mailbox row.\n * @returns the row while its errand is running.\n */\nfunction useVisit(latest: TeamMessageView | undefined): TeamMessageView | undefined {\n const [live, setLive] = useState<string | undefined>(undefined)\n // A settlement is the runtime's own account of an activation ending; nobody\n // walks across the room to deliver it.\n const id = latest !== undefined && latest.kind !== 'settled' ? latest.messageId : undefined\n useEffect(() => {\n if (id === undefined) return undefined\n setLive(id)\n const timer = setTimeout(() => { setLive(undefined) }, ERRAND_MS)\n return () => { clearTimeout(timer) }\n }, [id])\n return live !== undefined && live === id ? latest : undefined\n}\n\n/**\n * The team stage. Rendered as one conversation view tab, so it exists only\n * while the surrounding session has a team — an ordinary conversation never\n * grows a tab it cannot fill.\n */\nexport function TeamStage(props: TeamStageProps) {\n const { useTeam, useSessions, openMember, openLeader, holdComposer, t } = props\n const state = useTeam(snapshot => snapshot)\n const sessions: SessionListState = useSessions(snapshot => snapshot)\n /** The member the pointer is over, anywhere on the stage. */\n const [focus, setFocus] = useState<string | undefined>(undefined)\n /** Which ledger the drawer is showing; the room stands alone by default. */\n const [panel, setPanel] = useState<PanelId | undefined>(undefined)\n\n const { leaderId, currentId, members, tasks, messages, board, boardAt } = state\n const visit = useVisit(messages[messages.length - 1])\n\n // The room is the whole tab: the composer seat stays ours until the reader\n // leaves this view, and the plugin body gives it straight back.\n useEffect(() => holdComposer?.(), [holdComposer])\n\n const running = useMemo(\n () => new Set(members\n .filter(member => sessions.byId[member.memberId as SessionId]?.running === true)\n .map(member => member.memberId)),\n [members, sessions.byId],\n )\n\n /** The last thing the visible mailbox tail says about each member. */\n const touched = useMemo(() => {\n const out = new Map<string, Touch>()\n for (const message of messages.slice(-LIVE_MESSAGES)) {\n if (message.from !== undefined) out.set(message.from, message.kind === 'message' ? 'sent' : 'reported')\n if (message.to !== undefined) out.set(message.to, 'got')\n }\n return out\n }, [messages])\n\n /** Mail counted as read: everything that had arrived when the feed was last open. */\n const seenMessages = useRef(messages.length)\n useEffect(() => {\n if (panel === 'feed') seenMessages.current = messages.length\n }, [panel, messages.length])\n const freshMail = panel !== 'feed' && messages.length > seenMessages.current\n\n if (leaderId === undefined || members.length === 0) {\n return (\n <div className={css.stage} data-agent-team-stage>\n <p className={css.blankTitle}>{t('stage.noTeam')}</p>\n <p className={css.blankHint}>{t('stage.noTeamHint')}</p>\n </div>\n )\n }\n\n const names = new Map<string, string>([[leaderId, t('member.leader')]])\n for (const member of members) names.set(member.memberId, member.name)\n /** Roster seat per member id, so the ledgers can draw the same cast. */\n const seats = new Map<string, number>([[leaderId, -1]])\n members.forEach((member, index) => seats.set(member.memberId, index))\n const openOf = (memberId: string): number =>\n tasks.filter(task => task.assigneeId === memberId && task.status !== 'done').length\n\n // The leader takes the first desk and every teammate the next, in roster\n // order — a member keeps the same desk for as long as it is on the team.\n const roster = [leaderId, ...members.map(member => member.memberId)]\n const desks = new Map<string, Desk>(roster.map((id, index) => [id, deskOf(index, roster.length)]))\n\n /** Where each member is standing right now: its own desk, or the break corner. */\n const homes = new Map<string, Post>()\n /** Who is away from its own desk, so the desk can be drawn empty. */\n const away = new Set<string>()\n const stations: Post[] = []\n let breaks = 0\n for (const id of roster) {\n const desk = desks.get(id) ?? deskOf(0, roster.length)\n const station = id === leaderId\n ? 'desk'\n : stationFor(running.has(id), touched.get(id), openOf(id))\n if (station === 'break') away.add(id)\n stations.push(station === 'break' ? breakAt(breaks++) : desk)\n }\n // Four members on a break share three places to stand around the sofa; one\n // pass of separation keeps the fourth beside the first rather than inside it.\n const parted = spread(stations)\n roster.forEach((id, index) => {\n const post = stations[index]!\n homes.set(id, { ...post, ...parted[index]! })\n })\n\n /**\n * Where one piece of the break corner stands, and how large it draws there.\n * A piece is placed by its OWN plan rectangle — the same rectangle a walk\n * goes around — so the furniture it is drawn as and the furniture it is\n * walked around as are the same furniture, and it can never creep off the\n * floor and up a wall.\n */\n const loungePiece = (rect: Rect): CSSProperties => {\n const screen = project({ x: rect.x + rect.w / 2, y: rect.y + rect.h / 2 })\n return {\n left: `${screen.left}%`,\n top: `${screen.top}%`,\n '--team-depth': Math.round(rect.y + rect.h / 2),\n '--team-scale': Math.round(screen.scale * 1000) / 1000,\n } as CSSProperties\n }\n /** The rug and the floor lamp are furniture too, so they get plan rects. */\n const rugRect: Rect = { x: 70.5, y: 53.5, w: 21, h: 7.5 }\n const lampRect: Rect = { x: 70, y: 47.5, w: 3, h: 7 }\n const [sofaBlock, tableBlock, plantBlock, coolerBlock] = ROOM_BLOCKS\n\n const peers = members.filter(member => member.relation === 'peer')\n const openTasks = tasks.filter(task => task.status !== 'done').length\n const leaderRunning = sessions.byId[leaderId as SessionId]?.running === true\n\n /** The delivery on its feet: who carries it, to whom, and where they meet. */\n const errand = errandOf(visit, leaderId, homes)\n const visitOf = (id: string): Point | undefined =>\n errand !== undefined && errand.fromId === id ? errand.meet : undefined\n /** Which way the two ends of a delivery turn while they talk. */\n const turnOf = (id: string): Facing | undefined => {\n if (errand === undefined) return undefined\n if (errand.fromId === id) return errand.meet.x < errand.host.x ? 'right' : 'left'\n if (errand.toId === id) return errand.meet.x < errand.host.x ? 'left' : 'right'\n return undefined\n }\n\n const toggle = (id: PanelId): void => { setPanel(current => current === id ? undefined : id) }\n const titleOf = (id: PanelId): string =>\n id === 'feed' ? t('stage.feed') : id === 'workspace' ? t('stage.workspace') : t('stage.board')\n\n const tileOf = (id: string, seat: number, member?: TeamMemberView) => {\n const desk = desks.get(id) ?? deskOf(0, roster.length)\n const home = homes.get(id) ?? desk\n const live = seat < 0 ? leaderRunning : running.has(id)\n const name = member?.name ?? t('member.leader')\n return (\n <MemberTile\n key={id}\n id={id}\n name={name}\n seat={seat}\n home={home}\n errand={visitOf(id)}\n count={roster.length}\n scale={home.scale}\n relation={member?.relation ?? 'lead'}\n role={member?.role}\n current={currentId === id}\n running={live}\n pose={poseFor(live, touched.get(id), openOf(id))}\n away={away.has(id)}\n focused={focus === id}\n talking={errand === undefined ? undefined : errand.fromId === id ? 'from' : errand.toId === id ? 'to' : undefined}\n turn={turnOf(id)}\n speech={errand !== undefined && errand.fromId === id ? short(errand.message.text, SPEECH_CHARS) : undefined}\n tasks={openOf(id)}\n label={member === undefined ? t('member.openLeader') : t('member.open', { name })}\n title={member === undefined\n ? t('member.leader')\n : meta(\n member.name,\n member.role,\n member.model,\n member.effort,\n member.relation === 'peer' ? t('relation.peer') : t('relation.managed'),\n )}\n onOpen={() => {\n if (member === undefined) openLeader(leaderId)\n else openMember(leaderId, id)\n }}\n onFocus={setFocus}\n t={t}\n />\n )\n }\n\n return (\n <div className={css.stage} data-agent-team-stage>\n <header className={css.bar}>\n <span className={css.barTitle}>\n <IconTeam16 size={15} className={css.barIcon} />\n {t('stage.title')}\n </span>\n <span className={css.barHint}>\n <IconTeamPeer16 size={13} />\n {peers.length > 1 ? t('stage.peerRing') : t('stage.roomHint')}\n </span>\n <span className={css.barStats}>\n <span className={css.stat}>{t('stage.members', { count: members.length + 1 })}</span>\n <span className={`${css.stat} ${running.size > 0 ? css.statLive : ''}`}>\n {running.size > 0 ? t('stage.running', { count: running.size }) : t('stage.idle')}\n </span>\n {tasks.length > 0 && (\n <span className={css.stat}>{t('stage.tasks', { open: openTasks, total: tasks.length })}</span>\n )}\n </span>\n </header>\n\n <div className={css.scene}>\n <section className={css.roomPane} aria-label={t('stage.room')}>\n <div className={css.floor} style={shellVars()}>\n {/* The box you are looking into. Five faces, all cut from the same\n numbers the floor arithmetic uses, so the walls meet the floor\n exactly where a member standing at the back wall would. */}\n <span className={css.shell} aria-hidden>\n <span className={css.ceiling} />\n <span className={css.wallLeft} />\n <span className={css.wallRight} />\n <span className={css.wallBack} />\n <span className={css.floorPlane} />\n <span className={css.skirting} />\n </span>\n\n <RoomWall />\n\n {/* Over the desk field and the shelf: the ceiling between the\n windows is where a real office hangs its lamps. */}\n <span className={css.pendant} style={{ left: `${onWall(50)}%` }} aria-hidden>\n <PendantFigure />\n </span>\n\n {/* The service wall on the left: the things an office has that\n nobody has a desk for. */}\n <span className={css.utility} style={at({ x: 4.5, y: 64 }, 1)} aria-hidden>\n <span className={css.utilityCabinet} data-prop=\"cabinet\"><CabinetFigure /></span>\n <span className={css.utilityPrinter} data-prop=\"printer\"><PrinterFigure /></span>\n <span className={css.utilityCoffee} data-prop=\"coffee\"><CoffeeFigure /></span>\n </span>\n\n <span className={css.cat} data-prop=\"cat\" aria-hidden>\n <CatFigure />\n </span>\n\n {/* The treadmill in the front-right corner: the wellness zone, in\n front of the lounge where the floor is empty, clear of the\n cooler above it and of everybody's way past it. */}\n <span className={css.treadmill} data-prop=\"treadmill\" style={at({ x: 93, y: 87 }, 1)} aria-hidden>\n <TreadmillFigure />\n </span>\n\n <div className={css.lounge} aria-hidden>\n <span className={css.rug} data-prop=\"rug\" style={loungePiece(rugRect)} />\n <span className={css.sofa} data-prop=\"sofa\" style={loungePiece(sofaBlock!)}>\n <SofaFigure />\n </span>\n <span className={css.table} data-prop=\"table\" style={loungePiece(tableBlock!)}>\n <TableFigure />\n </span>\n <span className={css.lamp} data-prop=\"lamp\" style={loungePiece(lampRect)}>\n <LampFigure />\n </span>\n <span className={css.plant} data-prop=\"plant\" style={loungePiece(plantBlock!)}>\n <Plant kind={plantOf(0)} />\n </span>\n <span className={css.cooler} data-prop=\"cooler\" style={loungePiece(coolerBlock!)}>\n <CoolerFigure />\n </span>\n </div>\n\n {roster.map((id, index) => {\n const seat = index - 1\n const desk = desks.get(id) ?? deskOf(index, roster.length)\n const live = seat < 0 ? leaderRunning : running.has(id)\n return (\n <Workstation\n key={`desk-${id}`}\n id={id}\n desk={desk}\n seat={seat}\n pose={poseFor(live, touched.get(id), openOf(id))}\n line={screenLineOf(id, tasks, messages)}\n empty={away.has(id) || (errand !== undefined && errand.fromId === id)}\n t={t}\n />\n )\n })}\n\n {roster.map((id, index) => tileOf(id, index - 1, members[index - 1]))}\n </div>\n </section>\n\n <nav className={css.dock} aria-label={t('stage.dock')}>\n <DockButton\n id=\"feed\"\n label={t('stage.feed')}\n count={messages.length}\n active={panel === 'feed'}\n fresh={freshMail}\n onToggle={toggle}\n >\n <IconTeamMailbox16 size={15} />\n </DockButton>\n <DockButton\n id=\"workspace\"\n label={t('stage.workspace')}\n count={board.length}\n active={panel === 'workspace'}\n fresh={false}\n onToggle={toggle}\n >\n <IconTeamWorkspace16 size={15} />\n </DockButton>\n <DockButton\n id=\"tasks\"\n label={t('stage.board')}\n count={openTasks}\n active={panel === 'tasks'}\n fresh={false}\n onToggle={toggle}\n >\n <IconTeamTask16 size={15} />\n </DockButton>\n </nav>\n\n {panel !== undefined && (\n <aside className={css.drawer} data-panel={panel} aria-label={titleOf(panel)}>\n <header className={css.drawerHead}>\n <h3 className={css.paneTitle}>\n {panel === 'feed' && <IconTeamMailbox16 size={13} />}\n {panel === 'workspace' && <IconTeamWorkspace16 size={13} />}\n {panel === 'tasks' && <IconTeamTask16 size={13} />}\n {titleOf(panel)}\n {panel === 'workspace' && boardAt !== undefined && (\n <span className={css.paneNote} title={t('stage.boardStale')}>\n {t('stage.boardAt', { time: clock(boardAt) })}\n </span>\n )}\n </h3>\n <button\n type=\"button\"\n className={css.drawerClose}\n onClick={() => { setPanel(undefined) }}\n aria-label={t('drawer.close')}\n >\n ×\n </button>\n </header>\n <div className={css.drawerBody}>\n {panel === 'feed' && (\n <MessageFeed\n roster={roster.map((id, index) => ({\n id,\n name: names.get(id) ?? id,\n seat: index - 1,\n running: index === 0 ? leaderRunning : running.has(id),\n open: openOf(id),\n }))}\n messages={messages}\n names={names}\n seats={seats}\n leaderLabel={t('member.leader')}\n focus={focus}\n onFocus={setFocus}\n t={t}\n />\n )}\n {panel === 'workspace' && (\n board.length === 0\n ? (\n <>\n <p className={css.empty}>{t('stage.noNotes')}</p>\n <p className={css.emptyHint}>{t('stage.noNotesHint')}</p>\n </>\n )\n : (\n <div className={css.notes}>\n {board.map((entry, index) => (\n <NoteCard\n key={entry.key}\n entry={entry}\n index={index}\n seats={seats}\n focus={focus}\n onFocus={onFocus => { setFocus(onFocus) }}\n />\n ))}\n </div>\n )\n )}\n {panel === 'tasks' && (\n tasks.length === 0\n ? <p className={css.empty}>{t('stage.noTasks')}</p>\n : (\n <div className={css.columns}>\n {COLUMNS.map(status => (\n <TaskColumn\n key={status}\n status={status}\n tasks={tasks.filter(task => task.status === status)}\n names={names}\n seats={seats}\n focus={focus}\n onFocus={setFocus}\n t={t}\n />\n ))}\n </div>\n )\n )}\n </div>\n </aside>\n )}\n </div>\n </div>\n )\n}\n\n/** One door on the dock: an icon, a count of what waits behind it, a pulse for news. */\nfunction DockButton(props: {\n readonly id: PanelId\n readonly label: string\n readonly count: number\n readonly active: boolean\n readonly fresh: boolean\n readonly onToggle: (id: PanelId) => void\n readonly children: ReactNode\n}) {\n const { id, label, count, active, fresh, onToggle, children } = props\n return (\n <button\n type=\"button\"\n className={css.dockButton}\n aria-label={label}\n title={label}\n aria-pressed={active}\n data-panel-id={id}\n data-fresh={fresh ? 'true' : undefined}\n onClick={() => { onToggle(id) }}\n >\n {children}\n {count > 0 && <span className={css.dockCount}>{count > 99 ? '99+' : count}</span>}\n </button>\n )\n}\n\n/** One delivery being carried across the room. */\ninterface Errand {\n readonly message: TeamMessageView\n readonly fromId: string\n readonly toId: string\n /** Where the recipient is standing. */\n readonly host: Post\n /** Where the carrier stops to talk. */\n readonly meet: Point\n}\n\n/**\n * The delivery in flight as an errand between two members. Absent when either\n * end is off the roster (a dismissed sender) or when nobody had to move.\n */\nfunction errandOf(\n message: TeamMessageView | undefined,\n leaderId: string,\n homes: ReadonlyMap<string, Post>,\n): Errand | undefined {\n if (message === undefined) return undefined\n const fromId = message.from ?? leaderId\n const toId = message.to ?? leaderId\n const from = homes.get(fromId)\n const host = homes.get(toId)\n if (from === undefined || host === undefined || fromId === toId) return undefined\n return { message, fromId, toId, host, meet: visitAt(host, from.x) }\n}\n\n/**\n * What one member's monitor is showing: the task it is on, or the last thing\n * that was said to it. A screen with nothing on it is a screen switched off.\n */\nfunction screenLineOf(\n memberId: string,\n tasks: readonly TeamTaskView[],\n messages: readonly TeamMessageView[],\n): string | undefined {\n const active = tasks.find(task => task.assigneeId === memberId && task.status === 'active')\n ?? tasks.find(task => task.assigneeId === memberId && task.status !== 'done')\n if (active !== undefined) return short(active.title, 34)\n // Scanned backwards in place: a copy-and-reverse per member per render is\n // the one cost this stage does not need to pay on every snapshot.\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index]\n if (message?.to === memberId) return short(message.text, 34)\n }\n return undefined\n}\n\n/**\n * The back wall of the room, and everything hung on it.\n *\n * Every fixture is placed by the SAME floor coordinate a member would stand at\n * to look at it: `onWall` maps a place on the plan onto the wall's own width,\n * so the window somebody wanders over to is the window they end up under. The\n * wall itself is a face of the shell; this is only what is screwed to it.\n */\nfunction RoomWall() {\n return (\n <span className={css.wall} aria-hidden>\n {/* The wall's fixtures, left to right, each with room to breathe: the\n calendar clears the whiteboard's frame, the hanger trails between\n the board and the near window with air on both sides of it, and the\n air conditioner owns the wall's right end alone. */}\n <span className={css.calendar} data-prop=\"calendar\" style={{ left: `${onWall(4)}%` }}>\n <span className={css.calendarHead} />\n <span className={css.calendarGrid} />\n </span>\n\n <span className={css.whiteboard} data-prop=\"whiteboard\" style={{ left: `${onWall(15.5)}%` }}>\n <span className={css.boardGhost} />\n <span className={css.boardInk} />\n <span className={css.boardNote} data-note=\"a\" />\n <span className={css.boardNote} data-note=\"b\" />\n <span className={css.boardTray} />\n <span className={css.boardTrayTop} />\n <span className={css.boardPens} />\n <span className={css.boardEraser} />\n </span>\n\n <span className={css.hanger} style={{ left: `${onWall(26)}%` }}>\n <span className={css.hangerBracket} />\n <Plant kind=\"pothos\" className={css.hangerPlant} />\n </span>\n\n {[36.5, 65].map(where => (\n <span key={where} className={css.window} data-prop=\"window\" style={{ left: `${onWall(where)}%` }}>\n <span className={css.pane}>\n <span className={css.sky} />\n <span className={css.cloud} data-cloud=\"near\" />\n <span className={css.cloud} data-cloud=\"far\" />\n <span className={css.sea} />\n <span className={css.sail} />\n </span>\n {/* The reveal: two faces of the opening, so the glass is set into a\n wall with thickness rather than painted onto a flat one. */}\n <span className={css.reveal} />\n <span className={css.mullion} />\n <span className={css.sillTop} />\n <span className={css.sill} />\n <span className={css.beam} />\n </span>\n ))}\n\n <span className={css.shelf} data-prop=\"shelf\" style={{ left: `${onWall(50)}%` }}>\n <span className={css.books} />\n <span className={css.bookLeaning} />\n <span className={css.trophy} />\n <Plant kind=\"cactus\" className={css.shelfPlant} />\n <span className={css.plankTop} />\n <span className={css.plank} />\n <span className={css.plankBracket} />\n </span>\n\n <span className={css.clockProp} data-prop=\"clock\" style={{ left: `${onWall(79)}%` }}>\n <span className={css.clockTicks} />\n <span className={css.clockHand} data-hand=\"hour\" />\n <span className={css.clockHand} data-hand=\"minute\" />\n <span className={css.clockHand} data-hand=\"second\" />\n <span className={css.clockPin} />\n </span>\n\n <span className={css.airConditioner} data-prop=\"ac\" style={{ left: `${onWall(89.5)}%` }}>\n <AirConditionerFigure />\n </span>\n </span>\n )\n}\n\n/**\n * One workstation: the desk, the computer on it, the keyboard and the mug. It\n * belongs to the member whose desk it is and stays furnished while its owner\n * is away — a member walks off, its screen keeps working.\n */\nfunction Workstation(props: {\n readonly id: string\n readonly desk: Desk\n readonly seat: number\n readonly pose: Pose\n readonly line: string | undefined\n /** Whether the owner is somewhere else right now. */\n readonly empty: boolean\n readonly t: Translate\n}) {\n const { id, desk, seat, pose, line, empty, t } = props\n const screen = pose === 'working' ? 'working' : line !== undefined ? 'reading' : 'off'\n return (\n <>\n <div\n className={css.desk}\n style={{ ...at(desk, desk.scale), ...accentOf(seat) }}\n data-desk={id}\n data-screen={screen}\n data-empty={empty ? 'true' : undefined}\n aria-hidden\n >\n {/* The slab is a box: a lid you can see across, an apron under its near\n edge and one flank. Everything standing on the desk is placed on the\n lid, so a mug sits back on the surface instead of on the front rail. */}\n <span className={css.deskTop} data-prop=\"desk\">\n <span className={css.deskFlank} />\n <span className={css.deskSurface} />\n <span className={css.deskApron} />\n <span className={css.deskGrain} />\n </span>\n <span className={css.deskLegs} />\n <span className={css.deskModesty} />\n <span className={css.monitor} data-prop=\"monitor\" title={line}>\n {/* The machine is never blank: an idle seat still shows its own\n preset picture, only dimmer. A dark rectangle would read as a\n broken screen rather than as a member with nothing to do. */}\n <span className={css.screen}>\n <ScreenApp app={appOf(seat)} />\n <span className={css.screenText}>{line ?? t('screen.working')}</span>\n <span className={css.glare} />\n </span>\n <span className={css.neck} />\n <span className={css.base} />\n </span>\n {/* Drawn after the computer, because they sit on the near half of the\n lid while it stands at the back of it. */}\n <span className={css.keyboard} data-prop=\"keyboard\" />\n <span className={css.mug} data-prop=\"mug\" />\n <span className={css.papers} data-prop=\"papers\" />\n <span className={css.deskPlant} data-prop=\"deskPlant\">\n <Plant kind={plantOf(seat + 2)} />\n </span>\n </div>\n {/* The chair is the nearest layer at the seat: the backrest reads in\n front of the member, and the SVG keeps its edges crisp at any size. */}\n <span\n className={css.chair}\n style={{ ...at(desk, desk.scale), ...chairDelay(seat) }}\n data-chair={id}\n data-prop=\"chair\"\n aria-hidden\n >\n <ChairFigure />\n </span>\n </>\n )\n}\n\n/** One member of the team, standing — or walking — where its own state puts it. */\nfunction MemberTile(props: {\n readonly id: string\n readonly name: string\n readonly seat: number\n readonly home: Post\n /** Where a delivery has called it away to, while one is in flight. */\n readonly errand: Point | undefined\n /** How many members the room seats, so the tile knows the furniture. */\n readonly count: number\n readonly scale: number\n readonly relation: 'peer' | 'managed' | 'lead'\n readonly role: string | undefined\n readonly current: boolean\n readonly running: boolean\n readonly pose: Pose\n /** Whether the member is away from its own desk. */\n readonly away: boolean\n readonly focused: boolean\n readonly talking: 'from' | 'to' | undefined\n readonly turn: Facing | undefined\n readonly speech: string | undefined\n readonly tasks: number\n readonly label: string\n readonly title: string\n readonly onOpen: () => void\n readonly onFocus: (memberId: string | undefined) => void\n readonly t: Translate\n}) {\n const {\n id, name, seat, home, errand, count, scale, relation, role, current, running, pose, away,\n focused, talking, turn, speech, tasks, label, title, onOpen, onFocus, t,\n } = props\n // The furniture only changes when the roster does, and the walk hook keys its\n // frame loop on this list: rebuilding it every render would restart the trip.\n const obstacles = useMemo(\n () => obstaclesOf(Array.from({ length: count }, (_, index) => deskOf(index, count))),\n [count],\n )\n // Somebody with nothing on their plate and nowhere to be drifts off now and\n // then. A delivery outranks a daydream, and the leader keeps its seat — the\n // first desk is the room's anchor, and a wandering host is a dropped mail.\n const loose = seat >= 0 && pose === 'idle' && errand === undefined && talking === undefined\n const wander = useIdleErrand(seat, loose)\n const spot: Point = errand ?? (loose ? wander ?? home : home)\n const walk = useWalk(home, spot, obstacles, scale)\n const mask = maskOf(seat)\n const outfit = outfitOf(seat)\n const shoes = shoeOf(seat)\n // At its own desk a member faces its own computer, so you see it from\n // behind; on its feet or away from its desk it turns back around.\n const seated = !walk.walking && !away && talking === undefined && wander === undefined\n const facing = walk.walking ? walk.facing : turn ?? (seated ? 'back' : 'front')\n const relationLabel = relation === 'lead'\n ? undefined\n : relation === 'peer' ? t('relation.peer') : t('relation.managed')\n return (\n <button\n type=\"button\"\n ref={walk.ref}\n className={css.person}\n style={{\n ...accentOf(seat),\n ...chairDelay(seat),\n ...stagger(seat + 1),\n }}\n onClick={onOpen}\n onMouseEnter={() => { onFocus(id) }}\n onMouseLeave={() => { onFocus(undefined) }}\n aria-label={label}\n aria-current={current}\n title={title}\n data-member={id}\n data-relation={relation}\n data-species={mask}\n data-pose={pose}\n data-away={away ? 'true' : undefined}\n data-walk={walk.walking ? 'true' : undefined}\n data-facing={facing}\n data-running={running ? 'true' : undefined}\n data-focus={focused ? 'true' : undefined}\n data-talking={talking}\n >\n {speech !== undefined && !walk.walking && (\n <span className={css.speech} data-speech={id}>{speech}</span>\n )}\n {talking === 'to' && !walk.walking && <span className={css.listening} aria-hidden>···</span>}\n {pose === 'idle' && !away && talking === undefined && <span className={css.doze} aria-hidden>zZ</span>}\n\n <span className={css.body}>\n <Crew\n kind={mask}\n back={facing === 'back' || facing === 'away'}\n outfit={outfit}\n shoes={shoes}\n hair={hairOf(seat)}\n gear={gearOf(seat)}\n tone={toneOf(seat)}\n skin={skinOf(seat)}\n className={css.figure}\n />\n {relation === 'lead' && (\n <span className={css.crown} aria-hidden>\n <IconTeamLeader16 size={12} />\n </span>\n )}\n {tasks > 0 && <span className={css.load}>{tasks}</span>}\n </span>\n\n <span className={css.plate}>\n <span className={css.plateName}>{name}</span>\n {(role !== undefined || relationLabel !== undefined) && (\n <span className={css.plateMeta}>{meta(role, relationLabel)}</span>\n )}\n </span>\n <span className={css.state} title={t(running ? 'status.running' : 'status.idle')}>\n <StateDot state={running ? 'ongoing' : 'done'} size={6} />\n </span>\n </button>\n )\n}\n\n/** One member's line in the roster strip: what it is doing, and its latest word. */\ninterface CrewRow {\n readonly id: string\n readonly name: string\n readonly seat: number\n readonly running: boolean\n readonly open: number\n}\n\n/**\n * The mailbox, as a log rather than a chat: a roster strip that keeps one\n * refreshed line per member — the newest thing it said or was told, truncated\n * so a long turn cannot push the room's cast off the pane — over the traffic\n * itself, newest last. Every member of the team writes on the same side; the\n * right-hand side belongs to the reader, and the reader does not post here.\n */\nfunction MessageFeed(props: {\n readonly roster: readonly CrewRow[]\n readonly messages: readonly TeamMessageView[]\n readonly names: ReadonlyMap<string, string>\n readonly seats: ReadonlyMap<string, number>\n readonly leaderLabel: string\n readonly focus: string | undefined\n readonly onFocus: (memberId: string | undefined) => void\n readonly t: Translate\n}) {\n const { roster, messages, names, seats, leaderLabel, focus, onFocus, t } = props\n const scroller = useRef<HTMLDivElement>(null)\n\n // A new delivery is the point of the log: keep the newest row in view.\n useEffect(() => {\n const node = scroller.current\n if (node !== null) node.scrollTop = node.scrollHeight\n }, [messages.length])\n\n return (\n <div className={css.feed}>\n <div className={css.crewList} aria-label={t('feed.crew')}>\n {roster.map(row => {\n const latest = latestOf(row.id, messages)\n return (\n <div\n key={row.id}\n className={css.crewRow}\n data-crew-row={row.id}\n data-focus={focus === row.id ? 'true' : undefined}\n onMouseEnter={() => { onFocus(row.id) }}\n onMouseLeave={() => { onFocus(undefined) }}\n >\n <span className={css.cameoDot} aria-hidden>\n <Cameo seat={row.seat} name={row.name} />\n </span>\n <span className={css.crewName}>{row.name}</span>\n <span className={css.crewState} data-state={row.running ? 'running' : 'idle'}>\n {t(row.running ? 'status.running' : 'status.idle')}\n </span>\n {row.open > 0 && <span className={css.crewOpen}>{t('feed.open', { count: row.open })}</span>}\n <span className={css.crewLine} title={latest?.text}>\n {latest === undefined\n ? t('feed.quiet')\n : `${latest.way === 'got' ? '←' : '→'} ${short(latest.text, 40)}`}\n </span>\n </div>\n )\n })}\n </div>\n\n <h4 className={css.feedTitle}>{t('feed.log')}</h4>\n {messages.length === 0\n ? <p className={css.empty}>{t('stage.noMessages')}</p>\n : (\n <div className={css.log} ref={scroller}>\n {messages.map((message, index) => (\n <LogRow\n key={message.messageId}\n message={message}\n index={index}\n names={names}\n seats={seats}\n leaderLabel={leaderLabel}\n focus={focus}\n onFocus={onFocus}\n t={t}\n />\n ))}\n </div>\n )}\n </div>\n )\n}\n\n/** The newest traffic naming one member, and which way it went. */\nfunction latestOf(\n memberId: string,\n messages: readonly TeamMessageView[],\n): { readonly text: string, readonly way: 'got' | 'sent' } | undefined {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index]\n if (message === undefined) continue\n if (message.from === memberId) return { text: message.text, way: 'sent' }\n if (message.to === memberId) return { text: message.text, way: 'got' }\n }\n return undefined\n}\n\n/** One row of the log: who said what to whom, on one line, cut to fit. */\nfunction LogRow(props: {\n readonly message: TeamMessageView\n readonly index: number\n readonly names: ReadonlyMap<string, string>\n readonly seats: ReadonlyMap<string, number>\n readonly leaderLabel: string\n readonly focus: string | undefined\n readonly onFocus: (memberId: string | undefined) => void\n readonly t: Translate\n}) {\n const { message, index, names, seats, leaderLabel, focus, onFocus, t } = props\n const label = (id: string | undefined): string =>\n id === undefined ? leaderLabel : names.get(id) ?? id.slice(0, 6)\n const partner = message.from ?? message.to\n const author = label(message.from)\n return (\n <div\n className={css.logRow}\n data-message-kind={message.kind}\n data-hop={message.hop === undefined ? undefined : String(message.hop)}\n data-focus={partner !== undefined && focus === partner ? 'true' : undefined}\n style={stagger(index)}\n onMouseEnter={() => { onFocus(partner) }}\n onMouseLeave={() => { onFocus(undefined) }}\n >\n <span className={css.logAvatar} aria-hidden>\n <Cameo seat={message.from === undefined ? -1 : seats.get(message.from)} name={author} />\n </span>\n <div className={css.logBody}>\n <span className={css.logHead}>\n <span className={css.logAuthor}>{author}</span>\n <span className={css.logArrow}>→</span>\n <span className={css.logTo}>{label(message.to)}</span>\n {message.kind !== 'message' && (\n <span className={css.logKind}>\n {message.kind === 'report' ? t('message.report') : t('message.settled')}\n </span>\n )}\n {message.hop !== undefined && message.hop > 0 && (\n <span className={css.logHop} title={t('message.hopHint')}>\n {t('message.hop', { hop: message.hop })}\n </span>\n )}\n <span className={css.logTime}>{clock(message.time)}</span>\n </span>\n <span className={css.logText} title={message.text}>{short(message.text, LOG_CHARS)}</span>\n </div>\n <span className={css.logTail} aria-hidden>\n {message.from === undefined ? <IconTeamSend16 size={12} /> : <IconTeamMessage16 size={12} />}\n </span>\n </div>\n )\n}\n\n/** One note pinned to the shared workspace, as the leader last saw it. */\nfunction NoteCard(props: {\n readonly entry: TeamBoardEntryView\n readonly index: number\n readonly seats: ReadonlyMap<string, number>\n readonly focus: string | undefined\n readonly onFocus: (memberId: string | undefined) => void\n}) {\n const { entry, index, seats, focus, onFocus } = props\n return (\n <div\n className={css.note}\n data-note-key={entry.key}\n data-focus={focus === entry.authorId ? 'true' : undefined}\n style={stagger(index)}\n onMouseEnter={() => { onFocus(entry.authorId) }}\n onMouseLeave={() => { onFocus(undefined) }}\n >\n <span className={css.noteKey} title={entry.key}>{entry.key}</span>\n <span className={css.notePreview} title={entry.preview}>{entry.preview}</span>\n <span className={css.noteFoot}>\n <span className={css.noteAuthor}>\n <span className={css.cameoDot} aria-hidden>\n <Cameo seat={seats.get(entry.authorId)} name={entry.authorName} />\n </span>\n {entry.authorName}\n </span>\n <span className={css.noteTime}>{clock(entry.updatedAt)}</span>\n </span>\n </div>\n )\n}\n\n/** One lane of the shared task board. */\nfunction TaskColumn(props: {\n readonly status: TeamTaskStatus\n readonly tasks: readonly TeamTaskView[]\n readonly names: ReadonlyMap<string, string>\n readonly seats: ReadonlyMap<string, number>\n readonly focus: string | undefined\n readonly onFocus: (memberId: string | undefined) => void\n readonly t: Translate\n}) {\n const { status, tasks, names, seats, focus, onFocus, t } = props\n const title = status === 'done' ? t('task.done') : status === 'active' ? t('task.active') : t('task.pending')\n return (\n <div className={css.column} data-column={status}>\n <h4 className={css.columnTitle}>\n {title}\n <span className={css.columnCount}>{tasks.length}</span>\n </h4>\n {tasks.map((task, index) => (\n <div\n key={task.taskId}\n className={css.card}\n data-task-status={task.status}\n data-focus={task.assigneeId !== undefined && focus === task.assigneeId ? 'true' : undefined}\n style={stagger(index)}\n onMouseEnter={() => { onFocus(task.assigneeId) }}\n onMouseLeave={() => { onFocus(undefined) }}\n >\n <span className={css.cardTitle} title={task.title}>{task.title}</span>\n <span className={css.cardFoot}>\n <span className={css.cardWho}>\n {task.assigneeId !== undefined && (\n <span className={css.cameoDot} aria-hidden>\n <Cameo\n seat={seats.get(task.assigneeId)}\n name={names.get(task.assigneeId) ?? task.assigneeId}\n />\n </span>\n )}\n {task.assigneeId === undefined\n ? t('task.unassigned')\n : names.get(task.assigneeId) ?? task.assigneeId.slice(0, 6)}\n </span>\n {task.note !== undefined && <span className={css.cardNote} title={task.note}>{task.note}</span>}\n </span>\n </div>\n ))}\n </div>\n )\n}\n","/**\n * The composer seat, while the team room is on screen.\n *\n * A conversation view tab cannot reach the composer on its own — the composer\n * chain's selectors never see which view is active — so the plugin body puts\n * this entry on the chain for exactly as long as a stage is mounted. Winning\n * the election hides the whole composer stack (the card, its docks and the\n * stats line) without touching one node of the host tree, and the marker\n * attribute hands the freed height to the view: the room gets the tab, and the\n * reader gets its input back the moment it opens another tab.\n */\nimport css from './TeamStage.module.css'\n\n/** The empty composer: a zero-height marker where the input card would be. */\nexport function ComposerAway() {\n return <span className={css.composerAway} data-conversation-composer-overlay aria-hidden />\n}\n","/** Locale copy for the agent-team stage view. Product copy is Chinese. */\nexport const NS = 'team'\n\nexport const zh = {\n 'view.title': 'Agent 团队',\n 'stage.title': '团队协作室',\n 'stage.room': '协作室',\n 'stage.feed': '消息流',\n 'stage.board': '任务板',\n 'stage.workspace': '共享工作区',\n 'stage.members': '{count} 名成员',\n 'stage.running': '{count} 名工作中',\n 'stage.idle': '全部空闲',\n 'stage.tasks': '{open}/{total} 项任务',\n 'stage.noTeam': '这个会话还没有组建团队',\n 'stage.noTeamHint': '让主会话调用 team_spawn 派生第一名队友。',\n 'stage.noMessages': '还没有消息往来',\n 'stage.noTasks': '还没有任务',\n 'stage.noNotes': '共享工作区还是空的',\n 'stage.noNotesHint': '成员用 team_note 把结论写在这里,不必互相发消息。',\n 'stage.boardAt': '{time} 的快照',\n 'stage.boardStale': '队友的写入直接进持久工作区,不经过主会话的日志——这里是主会话最后一次读写时的样子',\n 'stage.peerRing': '同级成员可以直接走过去找对方;受管成员只找主会话',\n 'stage.roomHint': '每个成员都有自己的工位;要说话就走过去说',\n 'stage.dock': '协作面板',\n 'drawer.close': '收起面板',\n 'feed.crew': '成员状态',\n 'feed.log': '往来记录',\n 'feed.open': '在手 {count}',\n 'feed.quiet': '还没有往来',\n 'screen.working': '工作中…',\n 'member.leader': '主会话',\n 'member.open': '打开 {name} 的会话',\n 'member.openLeader': '回到主会话',\n 'member.here': '你正在看这个会话',\n 'relation.managed': '受管',\n 'relation.peer': '同级',\n 'status.running': '工作中',\n 'status.idle': '空闲',\n 'task.pending': '待办',\n 'task.active': '进行中',\n 'task.done': '已完成',\n 'task.unassigned': '未指派',\n 'message.report': '汇报',\n 'message.settled': '已收工',\n 'message.hop': '第 {hop} 跳',\n 'message.hopHint': '这条消息在一次队友间对话里的转发深度;深度用完只能回到主会话',\n} as const\n\n/** The namespace's dictionary key union (literal keys, locale-typed seats). */\nexport type TeamKey = keyof typeof zh\n\nexport const en: Record<TeamKey, string> = {\n 'view.title': 'Agent team',\n 'stage.title': 'Team room',\n 'stage.room': 'Team room',\n 'stage.feed': 'Mailbox',\n 'stage.board': 'Task board',\n 'stage.workspace': 'Shared workspace',\n 'stage.members': '{count} members',\n 'stage.running': '{count} working',\n 'stage.idle': 'All idle',\n 'stage.tasks': '{open}/{total} tasks',\n 'stage.noTeam': 'This session has no team yet',\n 'stage.noTeamHint': 'Ask the main session to call team_spawn for the first teammate.',\n 'stage.noMessages': 'No messages yet',\n 'stage.noTasks': 'No tasks yet',\n 'stage.noNotes': 'The shared workspace is empty',\n 'stage.noNotesHint': 'Members write conclusions here with team_note instead of messaging them around.',\n 'stage.boardAt': 'as of {time}',\n 'stage.boardStale': 'Teammates write straight to the durable workspace, which no session log records — this is how it looked when the main session last read or wrote it',\n 'stage.peerRing': 'Peers may walk straight over to each other; managed members only reach the main session',\n 'stage.roomHint': 'Everyone keeps a desk of their own and walks over to say something',\n 'stage.dock': 'Panels',\n 'drawer.close': 'Close the panel',\n 'feed.crew': 'Who is doing what',\n 'feed.log': 'Traffic',\n 'feed.open': '{count} open',\n 'feed.quiet': 'Nothing said yet',\n 'screen.working': 'working…',\n 'member.leader': 'Main session',\n 'member.open': 'Open the session of {name}',\n 'member.openLeader': 'Back to the main session',\n 'member.here': 'You are reading this session',\n 'relation.managed': 'Managed',\n 'relation.peer': 'Peer',\n 'status.running': 'Working',\n 'status.idle': 'Idle',\n 'task.pending': 'To do',\n 'task.active': 'In progress',\n 'task.done': 'Done',\n 'task.unassigned': 'Unassigned',\n 'message.report': 'report',\n 'message.settled': 'finished',\n 'message.hop': 'hop {hop}',\n 'message.hopHint': 'How far this delivery relayed inside one teammate conversation; a spent budget leaves only the leader',\n}\n","/**\n * Browser half of dsh-team: follow the current session's `team` projection and\n * contribute the team stage as one conversation view tab.\n *\n * There is no client-side fold. The host computes the team value once and the\n * framework pushes it here (history tail baseline + `session/projection`\n * frames), so this module only tracks WHICH session's value is on screen — and\n * whether that session has a team at all, because the tab exists exactly while\n * it does: an ordinary conversation never grows a view it cannot fill.\n */\nimport type { ClientContext, ISessions, SessionId, SubagentAddress } from '@deepseek-ai/dsh-client-runtime/client'\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-locale/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type { TeamView } from '../contract.ts'\nimport { TeamStage, type TeamInjected, type TeamPanelState } from './TeamStage.tsx'\nimport { ComposerAway } from './composer.tsx'\nimport { en, NS, zh, type TeamKey } from './locales.ts'\n\ndeclare module '@deepseek-ai/dsh-client-ui-slots' {\n interface LocaleNamespaceMap {\n /** Agent-team stage copy. */\n team: TeamKey\n }\n}\n\n/** Required services: the slot registry, the session domain, and locale. */\nexport const inject = ['slots', 'sessions', 'locale']\n\n/** No session in view, or a session with no team. */\nconst EMPTY: TeamPanelState = { members: [], tasks: [], messages: [], board: [] }\n\n/** View-ring position: after the shipped chat and trajectory tabs. */\nconst VIEW_ORDER = 20\n\n/**\n * Chain position of the empty composer: tried after everything else, so a\n * pending approval — or any other takeover — keeps the seat and the blocked\n * agent can still be answered from this tab.\n */\nconst COMPOSER_LAST = 100\n\n/** Project one session's folded team value into the stage state. */\nfunction panelState(leaderId: SessionId, currentId: SessionId, team: TeamView): TeamPanelState {\n return {\n leaderId,\n currentId,\n members: team.members,\n tasks: team.tasks,\n messages: team.messages,\n board: team.board,\n ...team.boardAt !== undefined ? { boardAt: team.boardAt } : {},\n }\n}\n\n/** Whether the state on screen names a team worth a tab of its own. */\nfunction present(state: TeamPanelState): boolean {\n return state.leaderId !== undefined && state.members.length > 0\n}\n\n/**\n * Register the locale dictionary and the view tab, and keep the stage store\n * pointed at the right session.\n * @param ctx - client root context.\n */\nexport function apply(ctx: ClientContext): void {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'dsh-team: dictionaries')\n const t = ctx.locale.bind(NS)\n\n // The host `dsh-session` merge types ctx.sessions as the SessionStore; the\n // browser service is the client ISessions face (same value, other shape).\n const sessions = ctx.sessions as unknown as ISessions\n const store = createSnapshotStore<TeamPanelState>(EMPTY)\n\n let followed: SessionId | undefined\n let disposeFace: (() => void) | null = null\n /**\n * The leader's own projection, watched while somebody else's transcript is\n * the one on screen. Reading a teammate attaches the follower to a session\n * that folds no team of its own, so without this the room would freeze at the\n * last value it saw — and would go on drawing a team that had already been\n * disbanded. Watching the leader keeps the room live, and lets it close.\n */\n let disposeLeader: (() => void) | null = null\n\n const dropLeader = (): void => {\n disposeLeader?.()\n disposeLeader = null\n }\n\n /** No team on screen: the room, and the tab it lives in, both go. */\n const clear = (): void => {\n dropLeader()\n store.set(EMPTY)\n }\n\n /**\n * Follow the leader of the team on screen while its own transcript is not.\n * @param leaderId - the session whose log owns the team.\n * @param current - the session being read, kept as the \"you are here\" marker.\n */\n const watchLeader = (leaderId: SessionId, current: SessionId): void => {\n dropLeader()\n const binding = sessions.binding(leaderId)\n // The leader is unloaded: the team is still there, only nobody is folding\n // it right now. The room holds what it last saw until the leader is back.\n if (binding === undefined) return\n const face = binding.session.projections.faceOf('team')\n const pull = (): void => {\n const team = face.getSnapshot() as TeamView | undefined\n // Disbanded, or down to its last dismissed teammate: nothing to draw.\n if (team === undefined || team.members.length === 0) {\n clear()\n return\n }\n store.set(panelState(leaderId, current, team))\n }\n disposeLeader = face.subscribe(pull)\n pull()\n }\n\n /**\n * The session in view folds no team of its own. While it belongs to the team\n * already on screen, keep showing that team and just move the \"you are here\"\n * marker — navigating into a member must not make the stage vanish under the\n * cursor — and follow the leader from there, so the room closes with the team.\n */\n const holdOrClear = (current: SessionId): void => {\n const held = store.getSnapshot()\n if (held.leaderId === undefined || !held.members.some(member => member.memberId === current)) {\n clear()\n return\n }\n store.set({ ...held, currentId: current })\n watchLeader(held.leaderId as SessionId, current)\n }\n\n const follow = (): void => {\n const current = sessions.list.getSnapshot().current\n // Re-run while no face is held: the current id can be published before its\n // binding exists, and the retry is one map lookup.\n if (current === followed && (current === undefined || disposeFace !== null)) return\n followed = current\n disposeFace?.()\n disposeFace = null\n if (current === undefined) {\n clear()\n return\n }\n const binding = sessions.binding(current)\n if (binding === undefined) {\n holdOrClear(current)\n return\n }\n const face = binding.session.projections.faceOf('team')\n const pull = (): void => {\n const team = face.getSnapshot() as TeamView | undefined\n if (team !== undefined && team.members.length > 0) {\n // This session folds the team itself; no second subscription needed.\n dropLeader()\n store.set(panelState(current, current, team))\n return\n }\n holdOrClear(current)\n }\n pull()\n disposeFace = face.subscribe(pull)\n }\n\n follow()\n const disposeList = sessions.list.subscribe(follow)\n ctx.effect(() => () => {\n disposeList()\n disposeFace?.()\n disposeFace = null\n dropLeader()\n followed = undefined\n store.set(EMPTY)\n }, 'dsh-team: session follower')\n\n /** Open one teammate transcript through its durable direct-parent address. */\n const openMember = (leaderId: string, memberId: string): void => {\n const address: SubagentAddress = sessions.subagentAddress(memberId as SessionId)\n ?? { parentSessionId: leaderId as SessionId, childSessionId: memberId as SessionId, mode: 'continuable' }\n try {\n sessions.openSubagent(address)\n } catch {\n // Swallows only \"not a healthy catalog child\": the parent's child catalog\n // has not been fetched yet in this client. Refresh it, then try once more.\n void sessions.refreshSubagents(leaderId as SessionId).then(() => {\n try {\n sessions.openSubagent(address)\n } catch {\n // The child is genuinely absent from the refreshed catalog (dismissed\n // and pruned, or a backend read failure); the stage stays put.\n }\n })\n }\n }\n\n /**\n * How many stages are on screen. A view tab renders once, but the seat is\n * keyed on the count: a re-mount that overlaps its own teardown must not\n * hand the composer back under a live room.\n */\n const rooms = createSnapshotStore<number>(0)\n\n /** Take the composer seat for one mounted stage; the disposer gives it back. */\n const holdComposer = (): (() => void) => {\n rooms.set(rooms.getSnapshot() + 1)\n let held = true\n return () => {\n if (!held) return\n held = false\n rooms.set(Math.max(0, rooms.getSnapshot() - 1))\n }\n }\n\n const injectFace = (): TeamInjected & { readonly hooks: { readonly team: typeof store } } => ({\n hooks: { team: store },\n openMember,\n openLeader: (leaderId: string) => { sessions.open(leaderId as SessionId) },\n holdComposer,\n })\n\n /**\n * The composer chain entry that empties the composer seat while a room is on\n * screen. Registering and withdrawing it is what re-runs the election — the\n * selector itself cannot see the active view — so the seat follows the tab\n * without the stage ever touching a node it does not own.\n */\n ctx.slots.inject('conversation.composer', () => {\n let disposeSeat: (() => void) | null = null\n const sync = (): void => {\n const wanted = rooms.getSnapshot() > 0\n if (wanted === (disposeSeat !== null)) return\n if (!wanted) {\n disposeSeat?.()\n disposeSeat = null\n return\n }\n disposeSeat = ctx.slots.register({\n name: 'conversation.composer',\n priority: COMPOSER_LAST,\n select: () => ({}),\n }, ComposerAway)\n }\n sync()\n const disposeStore = rooms.subscribe(sync)\n return () => {\n disposeStore()\n disposeSeat?.()\n disposeSeat = null\n }\n })\n\n /**\n * The tab follows the team, not the plugin: it is registered while a team is\n * on screen and withdrawn when the team ends, so the view ring shows an\n * agent-team tab exactly in the sessions that have one. An unknown active\n * view id falls back to chat, so withdrawing the tab under the reader is safe.\n */\n ctx.slots.inject('conversation.view', () => {\n let disposeTab: (() => void) | null = null\n const sync = (): void => {\n const wanted = present(store.getSnapshot())\n if (wanted === (disposeTab !== null)) return\n if (!wanted) {\n disposeTab?.()\n disposeTab = null\n return\n }\n disposeTab = ctx.slots.register({\n name: 'conversation.view',\n id: 'agent-team',\n order: VIEW_ORDER,\n locale: NS,\n label: () => t('view.title'),\n inject: injectFace,\n }, TeamStage)\n }\n sync()\n const disposeStore = store.subscribe(sync)\n return () => {\n disposeStore()\n disposeTab?.()\n disposeTab = null\n }\n })\n}\n\nexport type { TeamPanelState }\n"],"mappings":"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"}