pixelclaw 0.2.0 → 0.3.0
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.
- package/dist/pixelclaw.js +285 -250
- package/dist/skill/SKILL.md +24 -2
- package/dist/skill/commands.md +8 -4
- package/dist/skill/manifest.md +2 -0
- package/dist/ui/assets/{index-C0sgn8Z3.css → index-BKSuxZwn.css} +1 -1
- package/dist/ui/assets/{index-B6jqjzS4.js → index-BtGcNxJ-.js} +38 -37
- package/dist/ui/index.html +2 -2
- package/package.json +1 -1
package/dist/skill/SKILL.md
CHANGED
|
@@ -192,7 +192,7 @@ ground laid again and the same generator with **the same `edges=` and another se
|
|
|
192
192
|
### A sprite or prop
|
|
193
193
|
|
|
194
194
|
Silhouette first (`paint` or primitives), then materials in ramp steps, `shade`, `outline`,
|
|
195
|
-
`clean orphans
|
|
195
|
+
`clean orphans` (or `keep <x,y>` for a pixel that is meant to stand alone, an eye or a mouth); `view game` on its ground beside its set; `check` readability (edge contrast,
|
|
196
196
|
distinct silhouette, lightness spread) and consistency. Animation: frames with ticks, `view S
|
|
197
197
|
frames=…`, `view W mirror=E`, `view anim`; the anim check (8-35 % change per frame, no drift).
|
|
198
198
|
|
|
@@ -254,6 +254,28 @@ holds cap height, x-height, the baseline and advances; the preview's text tab se
|
|
|
254
254
|
as drawn; channel: pure-RGB masks), then as a small sprite. Plan the icons as one manifest set:
|
|
255
255
|
`consistency` holds them to one stroke weight and box fill, each optically centred.
|
|
256
256
|
|
|
257
|
+
## The judge (optional; experimental)
|
|
258
|
+
|
|
259
|
+
If the project has `"judge": { "provider": "jev" }` in `project.json` (and the person has put
|
|
260
|
+
`TYPESAFE_API_KEY` in the environment), `judge` gives a cheap second opinion on how the art
|
|
261
|
+
*reads*: is a sprite recognisable as itself among its set, does it show what the manifest's
|
|
262
|
+
`reads` say (`"a readable face"`), are there seams on a tile or map, does it match the approved
|
|
263
|
+
mockup, is it still the same object after your last change, where is a stray blob (a box, marked
|
|
264
|
+
on a render). Use it:
|
|
265
|
+
|
|
266
|
+
- after a sprite passes its code checks and before you call it done, when the person cares how it
|
|
267
|
+
reads (not on every edit: a run costs a little and asks only what changed);
|
|
268
|
+
- after a fix to something already approved: the `identity` question tells you if you changed
|
|
269
|
+
what it is;
|
|
270
|
+
- to place a problem by pixels: a failing `stray` gives `marks`.
|
|
271
|
+
|
|
272
|
+
Answers are probabilities. At 0.7 or more it says yes, at 0.3 or less no, between is **unsure**:
|
|
273
|
+
look yourself, do not treat unsure as pass or fail. It is advisory unless the project gates on it
|
|
274
|
+
(then `done` is refused while it fails or has not answered). `check` shows its last answers.
|
|
275
|
+
If `judge` says it is off or has no key, say so to the person; do not set it up yourself: it
|
|
276
|
+
sends images to a third-party API and spends their money. Never put a key in a file or a
|
|
277
|
+
command. docs/judge.md.
|
|
278
|
+
|
|
257
279
|
## The blind review hand-off
|
|
258
280
|
|
|
259
281
|
The tool calls no model. You hand its bundle to a fresh agent and bring the findings back:
|
|
@@ -275,7 +297,7 @@ The tool calls no model. You hand its bundle to a fresh agent and bring the find
|
|
|
275
297
|
|
|
276
298
|
`project` open/list · `run` a batch (one undo group; any error applies nothing; ends with a check
|
|
277
299
|
summary; `dry=true` keeps nothing) · `seeds` rank a generator line's seeds by the checks · `view` render, grid, diff, tile3x3, game, recolour, anim, map, family, density ·
|
|
278
|
-
`check` the full table with coordinates · `changes` the person's edits and notes · `history` the
|
|
300
|
+
`check` the full table with coordinates · `judge` the optional model's second opinion · `changes` the person's edits and notes · `history` the
|
|
279
301
|
tape · `plan` the manifest and statuses (write a manifest, draw templates) · `review` a blind
|
|
280
302
|
bundle · `export` / `import` through profiles. The command language: commands.md beside this
|
|
281
303
|
file, or `docs/commands.md` in the PixelClaw repo.
|
package/dist/skill/commands.md
CHANGED
|
@@ -218,6 +218,7 @@ text; `export` writes a map for Tiled (the `tiled` profile) and splits an oversi
|
|
|
218
218
|
| `outline c= [mode=outer\|inner] [corners=on\|off] [from=<layer>]` | `outline c=ink mode=outer corners=off` | See *Helpers*. Without `c=`: the style guide's outline colour (`style.outline`). |
|
|
219
219
|
| `shade light= [ramp=<ramp>\|all] [edge=<n>]` | `shade light=nw ramp=wood edge=1` | Without `light=`: the style guide's (`style.light`). |
|
|
220
220
|
| `clean orphans [size=<n>] [keep=none\|texture]` | `clean orphans size=1 keep=none` | |
|
|
221
|
+
| `keep <x,y> [<W>x<H>]`, `keep remove <x,y>`, `keep clear` | `keep 7,5` | Marks a pixel or region that is meant to stand alone (an eye, a mouth): the `orphans` check leaves strays inside it alone and says how many it kept. Up to 64 regions; on the tape, so it moves with the art. |
|
|
221
222
|
| `shadow [<x,y> <W>x<H>] [c=<colour>] [dir=<dir>]` | `shadow 8,20 12x4 c=soil0 dir=se` | A shadow under a sprite or an object: a flat ellipse on the ground as wide as the art's bottom third and two pixels more, a third as tall, centred on its lowest row and moved a sixth of its width toward `dir` (default the style guide's `style.shadow.dir`, else away from its light); drawn on your layer only where the art is empty, so it sits behind. `c=` defaults to `style.shadow.c` (an entry; `darker` is for maps, where there is ground under it). The line records the box. |
|
|
222
223
|
| `noise [<x,y> <W>x<H>] ramp= ...` | `noise 0,0 24x24 ramp=moss weights=0,3,12,1,0 cluster=1..2 density=0.07 base=moss2 wrap=on seed=7` | See *Generators*. |
|
|
223
224
|
| `scatter [<x,y> <W>x<H>] stamp=\|c= count= ...` | `scatter 0,0 24x24 stamp=tuft count=3 minDist=10 flip=on wrap=on seed=3` | |
|
|
@@ -243,7 +244,7 @@ text; `export` writes a map for Tiled (the `tiled` profile) and splits an oversi
|
|
|
243
244
|
| `fork <from> <to> [at=<n>]` | `fork chest chest_b at=20` | Start asset `<to>` as a branch of `<from>`. See *Forks*. |
|
|
244
245
|
| `underlay generate "<prompt>" [layout=] [image=] [provider=] [model=] [quality=] [cap=] [layer=]`, `underlay import <file.png> [layout=] [layer=]` | `underlay mockup blob=<sha256> image=1536x1024 at=0,0 size=144x96 layout=<sha256> prompt="…" provider=openai model=gpt-image-1.5 quality=medium cost=0.05` | An image under the art on a reference layer; resolved by the server. See *Underlays and snap*. |
|
|
245
246
|
| `snap [from=<layer>] [into=<layer>]` | `snap from=mockup into=draft at=0,0 grid=144x96 pitch=5.333x5.334 offset=0.66,0.65 r2=0.97 material=0.98 <<` | The underlay quantised into a new draft layer. |
|
|
246
|
-
| `import <x,y> asset=<name> region=<x,y,WxH> [layer=]` | `import 0,0 from="yard:draft 120,0,24x24" <<` | A region of another asset, its pixels in the line. |
|
|
247
|
+
| `import <x,y> asset=<name> region=<x,y,WxH> [layer=] [frame=<n>]` | `import 0,0 from="yard:draft 120,0,24x24" <<` | A region of another asset, its pixels in the line. |
|
|
247
248
|
| `new font <name> <W>x<H> [chars=] [cols=] [baseline=] [line=] [spacing=]` | `new font hud 5x7 palette=… wrap=off cell=5x7 bg=none chars=65-90,48-57 cols=16 baseline=6 line=8 spacing=1 <<` | A glyph sheet. See *Fonts*. |
|
|
248
249
|
| `glyph <char> [advance=<n>\|auto] [<< rows >>]` | `glyph U+0021 <<` | One glyph's cell (and its advance). |
|
|
249
250
|
| `font set [baseline=] [line=] [spacing=]` | `font set baseline=6 line=9 spacing=1` | |
|
|
@@ -426,7 +427,9 @@ keep=texture`, and the watch view's gradient tool.
|
|
|
426
427
|
|
|
427
428
|
- `outline c=<colour>` draws a 1-px outline around the shapes on your layer: `mode=outer` (the
|
|
428
429
|
default) colours the transparent pixels next to a shape; `mode=inner` colours the shape's own
|
|
429
|
-
edge pixels. `corners=off` (the default) looks at the four side neighbours
|
|
430
|
+
edge pixels. `corners=off` (the default) looks at the four side neighbours: a one-pixel ring that steps
|
|
431
|
+
diagonally round a diagonal stroke and wraps its tips, which the `jaggies` check passes; `on` looks at all
|
|
432
|
+
eight, a thicker ring whose corners double up into L-shapes on diagonals (use it for blobby shapes).
|
|
430
433
|
`from=<layer>` outlines the shapes on another layer, onto yours (an outline layer under the art).
|
|
431
434
|
- `shade light=<n|ne|e|se|s|sw|w|nw>` lights each shape: a pixel whose colour is in a ramp, within
|
|
432
435
|
`edge` pixels (default 1) of the shape's boundary on the lit side, goes a ramp step lighter; on
|
|
@@ -589,8 +592,9 @@ art or an export. Images are kept as content-addressed blobs (`blobs/<sha256>.pn
|
|
|
589
592
|
`snap from=mockup into=draft at=0,0 grid=144x96 pitch=5.333x5.334 offset=0.66,0.65 r2=0.97 material=0.98 << rows >>`,
|
|
590
593
|
so replay never reads the image. Below R² 0.8 or material 0.85 the run warns: reroll the
|
|
591
594
|
underlay, or trace over it instead.
|
|
592
|
-
- `import <x,y> asset=<name> region=<x,y,WxH> [layer=<layer>]` copies a region of another asset (one
|
|
593
|
-
of its layers, or its flat art) onto your layer: a tile cut from a snapped scene
|
|
595
|
+
- `import <x,y> asset=<name> region=<x,y,WxH> [layer=<layer>] [frame=<n>]` copies a region of another asset (one
|
|
596
|
+
of its layers, or its flat art; its first frame, or frame `n`) onto your layer: a tile cut from a snapped scene,
|
|
597
|
+
or one frame of an animated sprite. The line
|
|
594
598
|
records the pixels (`import 0,0 from="yard:draft 120,0,24x24" << rows >>`).
|
|
595
599
|
|
|
596
600
|
### Fonts
|
package/dist/skill/manifest.md
CHANGED
|
@@ -37,7 +37,9 @@ nothing when it has problems (each reported with its path, like `assets[3].size`
|
|
|
37
37
|
| `scheme`, `inside`, `outside`, `band` | family | the autotile scheme (built in or `schemes/*.json`), the tiles on each side, the band profile |
|
|
38
38
|
| `frames`, `ticks` | animated | frames (per view), ticks per frame |
|
|
39
39
|
| `views`, `mirror` | sprite, object | directions (S, N, E, W) and mirrors (`{ "W": "E" }`) |
|
|
40
|
+
| `reference` | all | `true` for a reference piece (a sheet to copy from): checks and the judge do not count it among the set's members |
|
|
40
41
|
| `cells` | object | the footprint in cells `CxR` |
|
|
42
|
+
| `reads` | all | up to 12 short phrases the art should show (`"a readable face"`): each is a yes/no question for the optional judge |
|
|
41
43
|
| `height` | props, figures | the drawn shape's height in pixels; `consistency` holds the art to it (± 2) |
|
|
42
44
|
| `variantOf`, `recolourOf` | all | a texture variant or a palette-swap recolour of another planned asset of the same kind |
|
|
43
45
|
| `uses` | map | the assets it is built from |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--bg: #16171b;--panel: #1d1f24;--panel2: #23262c;--line: #2f333a;--text: #d8dbe0;--dim: #8a909a;--accent: #f0a35e;--claude: #f0a35e;--human: #6cc4ff;--other: #b9a3ff;--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:13px/1.4 system-ui,-apple-system,Segoe UI,sans-serif}button,select{font:inherit;color:var(--text);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:3px 9px;cursor:pointer}button:hover:not(:disabled),select:hover{border-color:#4a505a}button:disabled{opacity:.45;cursor:default}button.on{border-color:var(--accent);color:var(--accent)}input[type=checkbox]{accent-color:var(--accent);vertical-align:-2px}label{cursor:pointer;user-select:none}.dim{color:var(--dim);font-weight:400}.spacer{flex:1}.app{display:grid;height:100%;grid-template-columns:230px minmax(0,1fr) 380px;grid-template-rows:40px minmax(0,1fr);grid-template-areas:"head head head" "left main right"}header{grid-area:head;display:flex;align-items:center;gap:12px;padding:0 14px;background:var(--panel);border-bottom:1px solid var(--line)}.logo{font-weight:700;letter-spacing:.02em;color:var(--accent)}.crumbs{font-weight:600}.crumbs .sep{color:var(--dim);margin:0 4px}.crumbs .meta{color:var(--dim);font-weight:400;margin-left:6px}.chip{font-size:12px;padding:2px 9px;border-radius:10px;background:var(--panel2);border:1px solid var(--line);white-space:nowrap}.conn-open{color:#8fd18b}.conn-connecting,.conn-closed{color:#e7c55a}.travel-chip{color:var(--human);border-color:#2c5a78}.paused-chip{color:#e7c55a}aside{background:var(--panel);overflow:hidden;display:flex;flex-direction:column;min-height:0}aside.left{grid-area:left;border-right:1px solid var(--line)}aside.right{grid-area:right;border-left:1px solid var(--line)}.panel-title{display:flex;align-items:center;gap:6px;padding:9px 12px 6px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#aab0ba}.panel-title .dim{text-transform:none;letter-spacing:0;font-size:12px}.follow{margin-left:auto;font-weight:400;text-transform:none;letter-spacing:0;font-size:12px;color:var(--dim)}.assets{list-style:none;margin:0;padding:0 6px 8px;overflow:auto;max-height:30%;flex:none}.assets li{display:flex;gap:7px;align-items:center;padding:4px 8px;border-radius:4px;cursor:pointer}.assets li:hover{background:var(--panel2)}.assets li.selected{background:#2b2f37}.assets li.none{color:var(--dim);cursor:default}.assets .dot{color:var(--dim);font-size:10px;width:10px}.assets .dot.busy{color:var(--accent)}.assets .name{flex:1;font-family:var(--mono);font-size:12px;overflow:hidden;text-overflow:ellipsis}.assets .count{color:var(--dim);font-size:11px}.swatches{overflow:auto;padding:0 8px 10px;display:grid;grid-template-columns:1fr;gap:1px;min-height:0}.swatch{display:flex;align-items:center;gap:7px;padding:1px 4px;font-family:var(--mono);font-size:11.5px;border-radius:3px;cursor:pointer;border:1px solid transparent}.swatch:hover{background:var(--panel2)}.swatch.on{border-color:var(--accent);background:#2b2f37}.chip-colour{width:16px;height:16px;border-radius:2px;box-shadow:inset 0 0 0 1px #ffffff1f;flex:none;display:inline-block}.chip-colour.none{background:repeating-conic-gradient(#ccc 0 25%,#eee 0 50%) 0 0 / 8px 8px!important}.swatch .key{color:var(--text);width:10px}.swatch .sname{color:var(--dim)}main{grid-area:main;display:flex;flex-direction:column;min-width:0;min-height:0}.toolbar{display:flex;align-items:center;gap:8px;padding:6px 12px;border-bottom:1px solid var(--line);background:var(--panel)}.toolbar .zoom{min-width:34px;text-align:center;font-family:var(--mono)}.toolbar .gap{width:10px}.banner{display:flex;align-items:center;gap:12px;padding:6px 12px;background:#1b3446;color:#cfe9ff;border-bottom:1px solid #2c5a78}.banner.error{background:#4a1f22;color:#ffd0d0;border-color:#7a3036}.stage{flex:1;overflow:auto;display:grid;place-items:center;padding:24px;min-height:0;background:#121317 radial-gradient(circle at 50% 40%,#1a1c21,#111216)}.stage.travel{box-shadow:inset 0 0 0 2px #2c5a78}.stage .art{position:relative;touch-action:none;box-shadow:0 0 0 1px #000,0 6px 30px #00000080}.stage canvas{image-rendering:pixelated;display:block}.stage canvas.overlay{position:absolute;left:0;top:0;pointer-events:none}.note-label{position:absolute;transform:translateY(-100%);margin-top:-3px;max-width:260px;padding:1px 6px;border-radius:3px;background:#ffd60a;color:#1c1800;font-size:11px;line-height:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;box-shadow:0 1px 4px #00000080;z-index:1}.note-label.on{white-space:normal;max-width:320px;z-index:2}.stage .empty{color:var(--dim)}.tape-list{flex:1;overflow:auto;font-family:var(--mono);font-size:12px;min-height:0}.tape-inner{position:relative}.tape-inner>div{position:absolute;left:0;right:0}.group-row{display:flex;gap:8px;align-items:flex-end;padding:0 12px 3px;border-top:1px solid var(--line);box-sizing:border-box}.group-row:first-child{border-top:0}.group-row .author{font-weight:700}.group-row .gid{color:var(--dim)}.group-row .at{margin-left:auto;color:#5d636d;font-size:11px}.group-row .tag{font-size:10px;text-transform:uppercase;color:#e08a8a;border:1px solid #6d3a3a;border-radius:3px;padding:0 4px}.by-claude .author,.legend.by-claude{color:var(--claude)}.by-human .author,.legend.by-human{color:var(--human)}.by-other .author,.legend.by-other{color:var(--other)}.cmd-row{display:flex;gap:8px;padding:0 12px 0 9px;line-height:18px;border-left:3px solid transparent;cursor:pointer;white-space:pre;overflow:hidden;box-sizing:border-box}.cmd-row .cmd{overflow:hidden;text-overflow:ellipsis}.cmd-row:hover{background:#262a31}.cmd-row.by-claude{border-left-color:#f0a35e59}.cmd-row.by-human{border-left-color:#6cc4ff73}.cmd-row.by-other{border-left-color:#b9a3ff66}.cmd-row .seq{color:#5d636d;min-width:34px;text-align:right;flex:none}.cmd-row .cmd{flex:1}.cmd-row .block{display:block;color:#aab0ba}.cmd-row.pending,.cmd-row.future{opacity:.38}.cmd-row.head{background:#3a2c1c}.cmd-row.head.by-claude{border-left-color:var(--claude)}.cmd-row.head.by-human{background:#1b3446;border-left-color:var(--human)}.cmd-row.undone .cmd{text-decoration:line-through;color:var(--dim)}.cmd-row.picked{outline:1px solid var(--human);outline-offset:-1px;background:#1b3446}.legend{font-family:var(--mono);font-size:12px;text-transform:none;letter-spacing:0}.controls{display:flex;align-items:center;gap:6px;padding:8px 12px;border-top:1px solid var(--line);background:var(--panel2)}.eye{padding:0 12px 12px;display:flex;flex-direction:column;gap:5px;align-items:flex-start}.eye img{max-width:100%;max-height:210px;image-rendering:pixelated;cursor:zoom-in;border:1px solid var(--line);background:#000}.modal{position:fixed;inset:0;background:#08090ce0;display:flex;flex-direction:column;gap:10px;align-items:center;justify-content:center;cursor:zoom-out}.modal img{image-rendering:pixelated;border:1px solid var(--line)}.tools{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;padding:0 10px 8px;flex:none}.tools button{font-size:16px;padding:4px 0;line-height:20px}button.mini{padding:0 6px;font-size:12px;line-height:16px}.palette-edit{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:0 10px 8px}.palette-edit input[type=color]{width:26px;height:24px;padding:0;border:1px solid var(--line);background:none;flex:none}.palette-edit input.hex{width:66px;font-family:var(--mono);font-size:12px}.palette-edit input.pname{width:58px}.palette-edit button{padding:2px 7px}input[type=text],input:not([type]){font:inherit;color:var(--text);background:#121317;border:1px solid var(--line);border-radius:4px;padding:2px 6px}.colour-now{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:12px}.chip.me{cursor:pointer;color:var(--human);border-color:#2c5a78}.chip.me b{font-weight:600}.me-form{font-family:var(--mono);font-size:12px;color:var(--human)}.me-form input{width:110px}.inline-form{display:inline-flex;gap:6px;align-items:center}.inline-form input{width:140px}.note-banner{background:#3a3110;color:#fff1b8;border-color:#6b5a1a}.note-banner input{flex:1;min-width:120px}.cmdline{display:flex;align-items:center;gap:6px;padding:6px 12px;border-top:1px solid var(--line);background:#191b20;font-family:var(--mono)}.cmdline .prompt{color:var(--human)}.cmdline input{flex:1;font-family:var(--mono);font-size:12px;background:transparent;border:0;padding:2px 0;outline:none}.notes{list-style:none;margin:0;padding:0 8px 8px;max-height:140px;overflow:auto;flex:none}.notes li{display:flex;gap:8px;align-items:flex-start;padding:3px 6px;border-radius:4px;cursor:pointer;border-left:3px solid #ffd60a;margin-bottom:2px;background:#22211a}.notes li.on{background:#3a3110}.notes .nid{font-family:var(--mono);color:#ffd60a;font-weight:700}.notes .ntext{flex:1}.options{display:flex;align-items:center;gap:10px;padding:4px 12px;border-bottom:1px solid var(--line);background:#1a1c21;font-size:12px;flex-wrap:wrap}.options .opt{display:inline-flex;align-items:center;gap:5px}.options button{padding:1px 7px;font-size:13px;line-height:18px}.options select{padding:1px 4px;font-size:12px}.options input.num{width:44px;font:inherit;color:var(--text);background:#121317;border:1px solid var(--line);border-radius:4px;padding:1px 4px}.chip-colour.small{width:11px;height:11px;margin-left:-2px;align-self:flex-end}.swatch .ab{margin-left:auto;font-size:10px;font-weight:700;color:var(--accent)}.swatch .ab.b{color:var(--human);margin-left:2px}.swatch .ab+.ab.b{margin-left:2px}.swatch.two:not(.on){border-color:#2c5a78}.stage .frame-area{position:relative;touch-action:none}.stage .frame-area>.art{position:absolute}.stage canvas.ghosts{position:absolute;left:0;top:0;pointer-events:none}.timeline{flex:none;border-top:1px solid var(--line);background:var(--panel);max-height:236px;display:flex;flex-direction:column}.tl-bar{display:flex;align-items:center;gap:5px;padding:4px 10px;font-size:12px}.tl-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#aab0ba;margin-right:2px}.tl-grid{overflow:auto;padding:0 10px 6px;min-height:0}.tl-grid table{border-collapse:collapse;font-size:12px}.tl-grid td{padding:0 3px;height:20px;border-bottom:1px solid #262930}.tl-grid tr.on td.lname{color:var(--accent);font-weight:600}.tl-grid td.lname{font-family:var(--mono);min-width:90px;cursor:pointer;padding-right:10px}.tl-grid td.lname input{width:90px;font-family:var(--mono);font-size:12px}.tl-grid td.cel{width:22px;text-align:center;cursor:pointer;color:#6b717b}.tl-grid td.cel.fnow{background:#20242b}.tl-grid td.cel.here{background:#3a2c1c;color:var(--accent)}.tl-anim{flex-wrap:wrap;padding-top:0}.tl-anim select{font-size:12px;padding:0 2px}.tl-anim .chk{display:inline-flex;align-items:center;gap:2px;color:#aab0ba;cursor:pointer}.tl-anim .tagform input{width:64px;font-size:12px;font-family:var(--mono)}button.mini.play.on{border-color:var(--accent);color:var(--accent)}.tl-grid thead th{font-weight:400;font-size:11px;color:#8a909a;padding:0 1px;border-bottom:1px solid #262930}.tl-grid th.rowhead{text-align:left;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:#6b717b;padding-right:8px}.tl-grid th.fhead{width:22px;text-align:center;cursor:pointer;line-height:12px;padding:2px 0}.tl-grid th.fhead .ticks{font-family:var(--mono);color:#6b717b;font-size:10px}.tl-grid th.fhead .ticks-in{width:30px;font-size:10px;font-family:var(--mono);padding:0}.tl-grid th.fnow,.tl-grid td.cel.fnow{background:#20242b}.tl-grid th.fhead.fnow{color:var(--accent)}.tl-grid th.fsel,.tl-grid td.cel.fsel{box-shadow:inset 0 -2px #4fb3ff}.tl-grid th.band{text-align:left;white-space:nowrap;border-radius:3px;padding:0 4px;font-family:var(--mono);font-size:11px;color:#d8dbe0}.tl-grid th.band.view{background:#24364a}.tl-grid th.band.view.mirror{background:#2a2f3a;color:#9fb4c8;font-style:italic}.tl-grid th.band.tag{background:#3b3020}.tl-grid th.band .x{border:0;background:none;padding:0 2px;font-size:10px;color:#8a909a;margin-left:2px}.tl-grid th.band .x:hover{color:var(--accent)}.tl-grid td.cel.mirrored{color:#4a6a85}.tl-grid td.cel[data-linked]{color:#c8a050}.tl-grid .flagbtn{padding:0 3px;border:0;background:none;font-size:12px;min-width:16px;color:#6b717b}.tl-grid td.flag.set .flagbtn{color:var(--accent)}.stamps{display:flex;flex-wrap:wrap;gap:4px;padding:0 10px 10px;flex:none}.stamps .stamp{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px 5px;font-family:var(--mono);font-size:10.5px}.stamps .stamp canvas{image-rendering:pixelated;background:repeating-conic-gradient(#ccc 0 25%,#eee 0 50%) 0 0 / 6px 6px}.stamps .stamp.on{border-color:var(--accent)}.tools{grid-template-columns:repeat(6,1fr)}.colour-now .ab{font-size:10px;font-weight:700;color:var(--accent)}.colour-now .ab.b{color:var(--human);margin-left:6px}.toolbar{flex-wrap:wrap;row-gap:4px}.toolbar label,.toolbar button,.toolbar .colour-now,.toolbar .dim{white-space:nowrap}aside.left .swatches{flex:1 1 auto;min-height:80px}aside.left .stamps{max-height:120px;overflow:auto}header .crumbs{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:120px;flex:0 4 auto}.checks{display:flex;gap:3px;min-width:0;overflow-x:auto;scrollbar-width:none;flex:0 1 auto}.checks::-webkit-scrollbar{display:none}.chip.check{cursor:pointer;font-family:var(--mono);font-size:11px;padding:1px 6px;line-height:16px;color:#8fd18b;flex:none}.chip.check.fail{color:#ff8fa3;border-color:#6a2f3c;background:#2a1b20}.chip.check .score{color:var(--text)}.chip.check.on{border-color:#ff00c8;box-shadow:0 0 0 1px #ff00c8 inset}.check-details{flex-direction:column;align-items:stretch;gap:3px;background:#241a24;border-color:#5a2d55;font-size:12px}.check-details .cd-head{display:flex;align-items:baseline;gap:6px}.check-details .cd-detail{color:#c9ccd2}.check-details .score{font-family:var(--mono)}.check-details .cd-group{display:flex;align-items:center;gap:6px;color:#c9ccd2}.check-details .mono{font-family:var(--mono);font-size:11.5px;color:#e9b8e4}.check-details .mark-dot{width:9px;height:9px;border-radius:50%;border:2px solid #ff00c8;flex:none}.check-details button{padding:0 6px;line-height:16px;font-size:12px}.preview{flex:none;border-top:1px solid var(--line)}.preview .panel-title .mini{text-transform:none;letter-spacing:0;font-weight:600}.preview .panel-title .mini.on{border-color:var(--accent);color:var(--accent)}.preview-body{padding:0 12px 8px;overflow:auto;max-height:250px;display:flex;flex-direction:column;gap:4px}.preview-body canvas{image-rendering:pixelated;display:block;flex:none}.swatch .role{font-size:10px;color:#c9a6ff;border:1px solid #4b3a6a;border-radius:3px;padding:0 4px;line-height:14px}.theme-row{display:flex;align-items:center;gap:6px;padding:0 12px 6px;font-size:12px;color:var(--dim)}.theme-select{font-size:12px;padding:0 3px}.narrow-only{display:none}@media(max-width:1500px){.xwide-only{display:none}header .crumbs .meta{display:none}}.palette-edit select{font-size:12px;padding:1px 3px}.options{row-gap:4px}.options>*{flex:none}.options .spacer{flex:1 0 0;min-width:0}@media(max-width:1350px){.options{gap:8px;padding:3px 8px}.options .opt-label,.options .spacer{display:none}}.check-details button{white-space:nowrap;flex:none}.check-details .cd-group{flex-wrap:wrap}@media(max-width:1350px){.app{grid-template-columns:200px minmax(0,1fr) 320px}header{gap:8px;padding:0 10px}header .crumbs .meta{display:none}.chip.check{padding:1px 5px;font-size:10.5px}.chip.check.pass .score,.wide-only{display:none}.narrow-only{display:inline}.toolbar{gap:6px;padding:5px 8px}}.seg{display:inline-flex;flex:none}.seg button{border-radius:0;padding:3px 8px}.seg button:first-child{border-radius:4px 0 0 4px}.seg button:last-child{border-radius:0 4px 4px 0}.seg button+button{border-left:none}.family-view{flex:1;min-height:0;overflow:auto;padding:10px 14px;display:flex;flex-direction:column;gap:8px}.family-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.family-head .num{width:64px}.family-legend{font-size:12px}.family-grid{display:flex;flex-wrap:wrap;gap:10px;align-content:flex-start}.variant{background:var(--panel);border:1px solid var(--line);border-radius:4px;padding:5px;display:flex;flex-direction:column;gap:4px}.variant canvas{image-rendering:pixelated;display:block}.variant.piece{border-color:#4fb7c4}.variant.detached{border-color:#c99a45}.vname{display:flex;align-items:center;gap:6px;font-size:11px;justify-content:space-between}.vname .mini{padding:0 6px;font-size:11px}.piece-tag,.detached-tag{font-size:10px;padding:0 5px;border-radius:8px;border:1px solid #4fb7c4;color:#8fdbe4}.detached-tag{border-color:#c99a45;color:#f0c27a}.map-text{white-space:pre-wrap;font-size:12px}.map-body canvas{image-rendering:pixelated;display:block}.rowhead.fold{cursor:pointer;user-select:none}.rowhead.fold:hover{color:var(--accent)}.timeline.folded{flex:none}.map-editor{display:flex;flex-direction:column;flex:1;min-height:0}.map-editor .map-tools{flex-wrap:wrap;gap:6px}.map-editor .mix{display:inline-flex;flex-wrap:wrap;gap:4px;align-items:center}.map-editor .mix label{display:inline-flex;align-items:center;gap:3px;font:11px var(--mono);color:#8a909a;padding:1px 4px;border:1px solid var(--line);border-radius:4px}.map-editor .mix label.on{color:#e6e8eb;border-color:#4a6a8a}.map-editor .mix input{width:3.2em;font:11px var(--mono);background:transparent;color:inherit;border:none;border-bottom:1px solid var(--line)}.map-editor .map-body{flex:1;overflow:auto;padding:8px}.map-editor canvas{image-rendering:pixelated;display:block}.tabs button{padding:2px 9px}.app.dash{grid-template-areas:"head head head" "dash dash dash"}.dashboard{grid-area:dash;overflow:auto;padding:0 0 24px}.dashboard .pad{padding:16px}.dash-top{position:sticky;top:0;z-index:2;background:var(--bg);padding:10px 16px 8px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:8px}.dash-theme{max-width:120ch}.dash-progress{display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--panel2)}.seg-bar{display:block;min-width:4px}.dash-filters{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.dash-set{padding:4px 12px 0}.dash-set .panel-title{padding-left:4px}.dash-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}.dash-card{display:flex;gap:10px;padding:9px;background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--st, var(--line));border-radius:6px;min-width:0}.dash-card.unplanned{border-style:dashed}.dash-card .thumb{flex:none;width:108px;height:108px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:4px;background:repeating-conic-gradient(#2a2d33 0 25%,#24272c 0 50%) 0 0 / 12px 12px}.dash-card .thumb img{image-rendering:pixelated}.dash-card .thumb:disabled{opacity:1;cursor:default}.planned-box{width:64px;height:64px;border:1px dashed #4a505a;border-radius:3px;display:flex;align-items:center;justify-content:center;color:var(--dim);font:11px var(--mono)}.card-body{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.card-head{display:flex;align-items:center;gap:8px}.card-head b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mono{font-family:var(--mono)}.desc{color:#b9bec6;font-size:12px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.next{font-size:12px;color:var(--accent)}.next.dim{color:var(--dim)}.flag{font-size:11px;color:#e7c55a}.card-checks{display:flex;flex-wrap:wrap;gap:3px}.chk{font:11px var(--mono);padding:0 6px;border-radius:8px;border:1px solid var(--line)}.chk.pass{color:#8fd18b}.chk.fail{color:#ff9a9a;border-color:#7a3036;background:#3a1d20}.card-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.card-actions button{white-space:nowrap}.card-actions.ask{flex-wrap:wrap}.card-actions.ask input{flex:1 1 100%;min-width:0;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:3px 6px}button.approve{border-color:#3f7a4a;color:#8fd18b}.badge{font-size:11px;padding:1px 8px;border-radius:9px;border:1px solid var(--st, var(--line));color:var(--st, var(--dim));background:transparent;white-space:nowrap}button.badge{cursor:pointer}button.badge.on{background:var(--st);color:#111}.st-planned{--st: #6a707c}.st-drafted{--st: #e8955a}.st-checked{--st: #e2cf5c}.st-reviewed{--st: #6cc4ff}.st-approved{--st: #b9a3ff}.st-exported{--st: #8fd18b}.seg-bar.st-planned,.seg-bar.st-drafted,.seg-bar.st-checked,.seg-bar.st-reviewed,.seg-bar.st-approved,.seg-bar.st-exported{background:var(--st)}.dash-row{display:flex;align-items:flex-start;gap:12px}button.link{border:0;background:none;padding:0 2px;color:var(--human);text-decoration:underline;text-underline-offset:2px;cursor:pointer}button.ask-claude{border-color:#7a5a34;color:var(--claude)}.dash-card.has-request{box-shadow:0 0 0 1px #5a4630 inset}.req{font-size:12px;border-radius:4px;padding:4px 6px;background:var(--panel2);border-left:3px solid #6a707c;display:flex;flex-direction:column;gap:3px}.req-head{display:flex;gap:6px;align-items:baseline;flex-wrap:wrap}.req-id{color:var(--dim);font-size:11px}.req-open{border-left-color:var(--human)}.req-claimed{border-left-color:var(--claude)}.req-blocked{border-left-color:#e7c55a;background:#322b14}.req-done{border-left-color:#8fd18b;color:#b9d8b6}.req-cancelled{opacity:.6}.req .link{align-self:flex-start;font-size:11px;color:var(--dim)}.claude-working{color:var(--claude)}.pulse{display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:50%;background:var(--claude);animation:pulse 1.2s ease-in-out infinite;vertical-align:0}@keyframes pulse{0%,to{opacity:.25}50%{opacity:1}}.req-chip{color:var(--claude);border-color:#7a5a34}.worker{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end;position:relative}.worker-log{position:absolute;top:100%;right:0;margin:6px 0 0;width:min(760px,80vw);max-height:320px;overflow:auto;z-index:5;background:#101114;border:1px solid var(--line);border-radius:6px;padding:8px 10px;font:11px/1.5 var(--mono);white-space:pre-wrap;color:#c4c8cf}.banner.floating{position:fixed;left:50%;bottom:16px;transform:translate(-50%);z-index:20;max-width:80vw}.dash-scenes .scene-list{display:flex;flex-wrap:wrap;gap:8px}.scene{background:var(--panel);border:1px solid var(--line);border-left:4px solid #e8955a;border-radius:6px;padding:6px 10px;min-width:240px}.scene.complete{border-left-color:#8fd18b}.scene-gaps{display:flex;flex-wrap:wrap;gap:3px;margin-top:3px;align-items:center}.chk.missing{color:#c9ccd2;border-style:dashed}.dialog-back{position:fixed;inset:0;background:#08090b99;z-index:30;display:flex;align-items:center;justify-content:center}.dialog{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:14px 16px;max-width:min(1000px,94vw);max-height:90vh;overflow:auto;display:flex;flex-direction:column;gap:8px}.dialog p{margin:0}.dialog input:not([type]),.dialog input[type=text],.dialog select{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:3px 6px}.add-asset{width:460px;display:grid;grid-template-columns:1fr 1fr;gap:8px 12px}.add-asset>.panel-title,.add-asset>p,.add-asset>.wide,.add-asset>.banner,.add-asset>.card-actions{grid-column:1 / -1}.add-asset label{display:flex;flex-direction:column;gap:2px;color:var(--dim);font-size:12px}.add-asset label input,.add-asset label select{color:var(--text)}.drop-zone{grid-area:dash;position:relative;min-height:0;display:flex;flex-direction:column}.drop-zone>.dashboard{flex:1}.drop-zone.over>.dashboard{outline:2px dashed var(--human);outline-offset:-6px}.drop-hint{position:absolute;inset:40% 20% auto;text-align:center;padding:14px;background:var(--panel);border:1px solid var(--human);border-radius:8px;color:var(--human);pointer-events:none}.import-body{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}.slice-view{position:relative;flex:none;background:repeating-conic-gradient(#2a2d33 0 25%,#24272c 0 50%) 0 0 / 12px 12px}.slice-view img{image-rendering:pixelated;display:block}.slice-cell{position:absolute;box-sizing:border-box;border:1px solid rgba(108,196,255,.85)}.slice-cell span{position:absolute;left:1px;bottom:1px;font:10px var(--mono);background:#101114cc;color:var(--human);padding:0 3px;border-radius:2px}.slice-cell.empty{border-color:#8a909a59;border-style:dashed}.import-form{display:flex;flex-direction:column;gap:7px;min-width:300px;flex:1}.import-form label,.import-form .row{display:flex;gap:6px;align-items:center;flex-wrap:wrap;color:var(--dim)}.import-form input:not([type]){width:auto}.import-names{font-size:12px;max-width:420px}.import-list{margin:4px 0;padding-left:18px;display:flex;flex-direction:column;gap:3px}.gallery .gal-grid{display:flex;flex-wrap:wrap;gap:12px;padding:12px 16px;align-items:flex-end}.gal-item{background:var(--panel);border:1px solid var(--line);border-bottom:3px solid var(--st);border-radius:6px;padding:8px;display:flex;flex-direction:column;gap:3px;min-width:120px;max-width:380px}.gal-item.picked{border-color:var(--human);box-shadow:0 0 0 1px var(--human)}.gal-art{padding:6px;border:0;border-radius:4px;display:flex;align-items:flex-end;justify-content:center;min-height:60px;background:repeating-conic-gradient(#2a2d33 0 25%,#24272c 0 50%) 0 0 / 12px 12px}.gal-art:disabled{opacity:1}.gal-art canvas{image-rendering:pixelated;display:block}.gal-meta{display:flex;align-items:center;gap:6px}.gal-meta b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.small{font-size:11px}.gal-rel{font-size:11px;color:var(--dim);display:flex;flex-wrap:wrap;gap:2px 4px}.gal-rel .link{font-size:11px}.compare{margin:10px 16px 0;padding:12px;border:1px solid var(--line);border-radius:8px;background:repeating-conic-gradient(#2a2d33 0 25%,#24272c 0 50%) 0 0 / 16px 16px;overflow:auto}.compare-row{display:flex;gap:24px;align-items:flex-end}.compare figure{margin:0;display:flex;flex-direction:column;align-items:center;gap:6px}.compare canvas{image-rendering:pixelated;display:block}.compare figcaption{background:#101114d9;padding:2px 6px;border-radius:4px}.compare-tools{margin-bottom:10px}.no-listener{margin-top:4px;padding:4px 6px;border-radius:4px;background:#3a2a14;color:#f0c98a;font-size:12px}.no-listener .card-actions{margin-top:4px}.prompt-text{white-space:pre-wrap;margin:4px 0 0;padding:4px;max-height:14em;overflow-y:auto;background:#1d1a14;color:var(--text, #d8dbe0);user-select:all;font-size:11px}.req-chip.unattended{color:#f0c98a;border-color:#b9873a}.listener-chip.on{color:#8fd18b}.listener-chip.off{color:var(--dim)}
|
|
1
|
+
:root{--bg: #16171b;--panel: #1d1f24;--panel2: #23262c;--line: #2f333a;--text: #d8dbe0;--dim: #8a909a;--accent: #f0a35e;--claude: #f0a35e;--human: #6cc4ff;--other: #b9a3ff;--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:13px/1.4 system-ui,-apple-system,Segoe UI,sans-serif}button,select{font:inherit;color:var(--text);background:var(--panel2);border:1px solid var(--line);border-radius:4px;padding:3px 9px;cursor:pointer}button:hover:not(:disabled),select:hover{border-color:#4a505a}button:disabled{opacity:.45;cursor:default}button.on{border-color:var(--accent);color:var(--accent)}input[type=checkbox]{accent-color:var(--accent);vertical-align:-2px}label{cursor:pointer;user-select:none}.dim{color:var(--dim);font-weight:400}.spacer{flex:1}.app{display:grid;height:100%;grid-template-columns:230px minmax(0,1fr) 380px;grid-template-rows:40px minmax(0,1fr);grid-template-areas:"head head head" "left main right"}header{grid-area:head;display:flex;align-items:center;gap:12px;padding:0 14px;background:var(--panel);border-bottom:1px solid var(--line)}.logo{font-weight:700;letter-spacing:.02em;color:var(--accent)}.crumbs{font-weight:600}.crumbs .sep{color:var(--dim);margin:0 4px}.crumbs .meta{color:var(--dim);font-weight:400;margin-left:6px}.chip{font-size:12px;padding:2px 9px;border-radius:10px;background:var(--panel2);border:1px solid var(--line);white-space:nowrap}.conn-open{color:#8fd18b}.conn-connecting,.conn-closed{color:#e7c55a}.travel-chip{color:var(--human);border-color:#2c5a78}.paused-chip{color:#e7c55a}aside{background:var(--panel);overflow:hidden;display:flex;flex-direction:column;min-height:0}aside.left{grid-area:left;border-right:1px solid var(--line)}aside.right{grid-area:right;border-left:1px solid var(--line)}.panel-title{display:flex;align-items:center;gap:6px;padding:9px 12px 6px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#aab0ba}.panel-title .dim{text-transform:none;letter-spacing:0;font-size:12px}.follow{margin-left:auto;font-weight:400;text-transform:none;letter-spacing:0;font-size:12px;color:var(--dim)}.assets{list-style:none;margin:0;padding:0 6px 8px;overflow:auto;max-height:30%;flex:none}.assets li{display:flex;gap:7px;align-items:center;padding:4px 8px;border-radius:4px;cursor:pointer}.assets li:hover{background:var(--panel2)}.assets li.selected{background:#2b2f37}.assets li.none{color:var(--dim);cursor:default}.assets .dot{color:var(--dim);font-size:10px;width:10px}.assets .dot.busy{color:var(--accent)}.assets .name{flex:1;font-family:var(--mono);font-size:12px;overflow:hidden;text-overflow:ellipsis}.assets .count{color:var(--dim);font-size:11px}.swatches{overflow:auto;padding:0 8px 10px;display:grid;grid-template-columns:1fr;gap:1px;min-height:0}.swatch{display:flex;align-items:center;gap:7px;padding:1px 4px;font-family:var(--mono);font-size:11.5px;border-radius:3px;cursor:pointer;border:1px solid transparent}.swatch:hover{background:var(--panel2)}.swatch.on{border-color:var(--accent);background:#2b2f37}.chip-colour{width:16px;height:16px;border-radius:2px;box-shadow:inset 0 0 0 1px #ffffff1f;flex:none;display:inline-block}.chip-colour.none{background:repeating-conic-gradient(#ccc 0 25%,#eee 0 50%) 0 0 / 8px 8px!important}.swatch .key{color:var(--text);width:10px}.swatch .sname{color:var(--dim)}main{grid-area:main;display:flex;flex-direction:column;min-width:0;min-height:0}.toolbar{display:flex;align-items:center;gap:8px;padding:6px 12px;border-bottom:1px solid var(--line);background:var(--panel)}.toolbar .zoom{min-width:34px;text-align:center;font-family:var(--mono)}.toolbar .gap{width:10px}.banner{display:flex;align-items:center;gap:12px;padding:6px 12px;background:#1b3446;color:#cfe9ff;border-bottom:1px solid #2c5a78}.banner.error{background:#4a1f22;color:#ffd0d0;border-color:#7a3036}.stage{flex:1;overflow:auto;display:grid;place-items:center;padding:24px;min-height:0;background:#121317 radial-gradient(circle at 50% 40%,#1a1c21,#111216)}.stage.travel{box-shadow:inset 0 0 0 2px #2c5a78}.stage .art{position:relative;touch-action:none;box-shadow:0 0 0 1px #000,0 6px 30px #00000080}.stage canvas{image-rendering:pixelated;display:block}.stage canvas.overlay{position:absolute;left:0;top:0;pointer-events:none}.note-label{position:absolute;transform:translateY(-100%);margin-top:-3px;max-width:260px;padding:1px 6px;border-radius:3px;background:#ffd60a;color:#1c1800;font-size:11px;line-height:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;box-shadow:0 1px 4px #00000080;z-index:1}.note-label.on{white-space:normal;max-width:320px;z-index:2}.stage .empty{color:var(--dim)}.tape-list{flex:1;overflow:auto;font-family:var(--mono);font-size:12px;min-height:0}.tape-inner{position:relative}.tape-inner>div{position:absolute;left:0;right:0}.group-row{display:flex;gap:8px;align-items:flex-end;padding:0 12px 3px;border-top:1px solid var(--line);box-sizing:border-box}.group-row:first-child{border-top:0}.group-row .author{font-weight:700}.group-row .gid{color:var(--dim)}.group-row .at{margin-left:auto;color:#5d636d;font-size:11px}.group-row .tag{font-size:10px;text-transform:uppercase;color:#e08a8a;border:1px solid #6d3a3a;border-radius:3px;padding:0 4px}.by-claude .author,.legend.by-claude{color:var(--claude)}.by-human .author,.legend.by-human{color:var(--human)}.by-other .author,.legend.by-other{color:var(--other)}.cmd-row{display:flex;gap:8px;padding:0 12px 0 9px;line-height:18px;border-left:3px solid transparent;cursor:pointer;white-space:pre;overflow:hidden;box-sizing:border-box}.cmd-row .cmd{overflow:hidden;text-overflow:ellipsis}.cmd-row:hover{background:#262a31}.cmd-row.by-claude{border-left-color:#f0a35e59}.cmd-row.by-human{border-left-color:#6cc4ff73}.cmd-row.by-other{border-left-color:#b9a3ff66}.cmd-row .seq{color:#5d636d;min-width:34px;text-align:right;flex:none}.cmd-row .cmd{flex:1}.cmd-row .block{display:block;color:#aab0ba}.cmd-row.pending,.cmd-row.future{opacity:.38}.cmd-row.head{background:#3a2c1c}.cmd-row.head.by-claude{border-left-color:var(--claude)}.cmd-row.head.by-human{background:#1b3446;border-left-color:var(--human)}.cmd-row.undone .cmd{text-decoration:line-through;color:var(--dim)}.cmd-row.picked{outline:1px solid var(--human);outline-offset:-1px;background:#1b3446}.legend{font-family:var(--mono);font-size:12px;text-transform:none;letter-spacing:0}.controls{display:flex;align-items:center;gap:6px;padding:8px 12px;border-top:1px solid var(--line);background:var(--panel2)}.eye{padding:0 12px 12px;display:flex;flex-direction:column;gap:5px;align-items:flex-start}.eye img{max-width:100%;max-height:210px;image-rendering:pixelated;cursor:zoom-in;border:1px solid var(--line);background:#000}.modal{position:fixed;inset:0;background:#08090ce0;display:flex;flex-direction:column;gap:10px;align-items:center;justify-content:center;cursor:zoom-out}.modal img{image-rendering:pixelated;border:1px solid var(--line)}.tools{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;padding:0 10px 8px;flex:none}.tools button{font-size:16px;padding:4px 0;line-height:20px}button.mini{padding:0 6px;font-size:12px;line-height:16px}.palette-edit{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:0 10px 8px}.palette-edit input[type=color]{width:26px;height:24px;padding:0;border:1px solid var(--line);background:none;flex:none}.palette-edit input.hex{width:66px;font-family:var(--mono);font-size:12px}.palette-edit input.pname{width:58px}.palette-edit button{padding:2px 7px}input[type=text],input:not([type]){font:inherit;color:var(--text);background:#121317;border:1px solid var(--line);border-radius:4px;padding:2px 6px}.colour-now{display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:12px}.chip.me{cursor:pointer;color:var(--human);border-color:#2c5a78}.chip.me b{font-weight:600}.me-form{font-family:var(--mono);font-size:12px;color:var(--human)}.me-form input{width:110px}.inline-form{display:inline-flex;gap:6px;align-items:center}.inline-form input{width:140px}.note-banner{background:#3a3110;color:#fff1b8;border-color:#6b5a1a}.note-banner input{flex:1;min-width:120px}.cmdline{display:flex;align-items:center;gap:6px;padding:6px 12px;border-top:1px solid var(--line);background:#191b20;font-family:var(--mono)}.cmdline .prompt{color:var(--human)}.cmdline input{flex:1;font-family:var(--mono);font-size:12px;background:transparent;border:0;padding:2px 0;outline:none}.notes{list-style:none;margin:0;padding:0 8px 8px;max-height:140px;overflow:auto;flex:none}.notes li{display:flex;gap:8px;align-items:flex-start;padding:3px 6px;border-radius:4px;cursor:pointer;border-left:3px solid #ffd60a;margin-bottom:2px;background:#22211a}.notes li.on{background:#3a3110}.notes .nid{font-family:var(--mono);color:#ffd60a;font-weight:700}.notes .ntext{flex:1}.options{display:flex;align-items:center;gap:10px;padding:4px 12px;border-bottom:1px solid var(--line);background:#1a1c21;font-size:12px;flex-wrap:wrap}.options .opt{display:inline-flex;align-items:center;gap:5px}.options button{padding:1px 7px;font-size:13px;line-height:18px}.options select{padding:1px 4px;font-size:12px}.options input.num{width:44px;font:inherit;color:var(--text);background:#121317;border:1px solid var(--line);border-radius:4px;padding:1px 4px}.chip-colour.small{width:11px;height:11px;margin-left:-2px;align-self:flex-end}.swatch .ab{margin-left:auto;font-size:10px;font-weight:700;color:var(--accent)}.swatch .ab.b{color:var(--human);margin-left:2px}.swatch .ab+.ab.b{margin-left:2px}.swatch.two:not(.on){border-color:#2c5a78}.stage .frame-area{position:relative;touch-action:none}.stage .frame-area>.art{position:absolute}.stage canvas.ghosts{position:absolute;left:0;top:0;pointer-events:none}.timeline{flex:none;border-top:1px solid var(--line);background:var(--panel);max-height:236px;display:flex;flex-direction:column}.tl-bar{display:flex;align-items:center;gap:5px;padding:4px 10px;font-size:12px}.tl-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#aab0ba;margin-right:2px}.tl-grid{overflow:auto;padding:0 10px 6px;min-height:0}.tl-grid table{border-collapse:collapse;font-size:12px}.tl-grid td{padding:0 3px;height:20px;border-bottom:1px solid #262930}.tl-grid tr.on td.lname{color:var(--accent);font-weight:600}.tl-grid td.lname{font-family:var(--mono);min-width:90px;cursor:pointer;padding-right:10px}.tl-grid td.lname input{width:90px;font-family:var(--mono);font-size:12px}.tl-grid td.cel{width:22px;text-align:center;cursor:pointer;color:#6b717b}.tl-grid td.cel.fnow{background:#20242b}.tl-grid td.cel.here{background:#3a2c1c;color:var(--accent)}.tl-anim{flex-wrap:wrap;padding-top:0}.tl-anim select{font-size:12px;padding:0 2px}.tl-anim .chk{display:inline-flex;align-items:center;gap:2px;color:#aab0ba;cursor:pointer}.tl-anim .tagform input{width:64px;font-size:12px;font-family:var(--mono)}button.mini.play.on{border-color:var(--accent);color:var(--accent)}.tl-grid thead th{font-weight:400;font-size:11px;color:#8a909a;padding:0 1px;border-bottom:1px solid #262930}.tl-grid th.rowhead{text-align:left;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:#6b717b;padding-right:8px}.tl-grid th.fhead{width:22px;text-align:center;cursor:pointer;line-height:12px;padding:2px 0}.tl-grid th.fhead .ticks{font-family:var(--mono);color:#6b717b;font-size:10px}.tl-grid th.fhead .ticks-in{width:30px;font-size:10px;font-family:var(--mono);padding:0}.tl-grid th.fnow,.tl-grid td.cel.fnow{background:#20242b}.tl-grid th.fhead.fnow{color:var(--accent)}.tl-grid th.fsel,.tl-grid td.cel.fsel{box-shadow:inset 0 -2px #4fb3ff}.tl-grid th.band{text-align:left;white-space:nowrap;border-radius:3px;padding:0 4px;font-family:var(--mono);font-size:11px;color:#d8dbe0}.tl-grid th.band.view{background:#24364a}.tl-grid th.band.view.mirror{background:#2a2f3a;color:#9fb4c8;font-style:italic}.tl-grid th.band.tag{background:#3b3020}.tl-grid th.band .x{border:0;background:none;padding:0 2px;font-size:10px;color:#8a909a;margin-left:2px}.tl-grid th.band .x:hover{color:var(--accent)}.tl-grid td.cel.mirrored{color:#4a6a85}.tl-grid td.cel[data-linked]{color:#c8a050}.tl-grid .flagbtn{padding:0 3px;border:0;background:none;font-size:12px;min-width:16px;color:#6b717b}.tl-grid td.flag.set .flagbtn{color:var(--accent)}.stamps{display:flex;flex-wrap:wrap;gap:4px;padding:0 10px 10px;flex:none}.stamps .stamp{display:flex;flex-direction:column;align-items:center;gap:2px;padding:3px 5px;font-family:var(--mono);font-size:10.5px}.stamps .stamp canvas{image-rendering:pixelated;background:repeating-conic-gradient(#ccc 0 25%,#eee 0 50%) 0 0 / 6px 6px}.stamps .stamp.on{border-color:var(--accent)}.tools{grid-template-columns:repeat(6,1fr)}.colour-now .ab{font-size:10px;font-weight:700;color:var(--accent)}.colour-now .ab.b{color:var(--human);margin-left:6px}.toolbar{flex-wrap:wrap;row-gap:4px}.toolbar label,.toolbar button,.toolbar .colour-now,.toolbar .dim{white-space:nowrap}aside.left .swatches{flex:1 1 auto;min-height:80px}aside.left .stamps{max-height:120px;overflow:auto}header .crumbs{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:120px;flex:0 4 auto}.checks{display:flex;gap:3px;min-width:0;overflow-x:auto;scrollbar-width:none;flex:0 1 auto}.checks::-webkit-scrollbar{display:none}.chip.check{cursor:pointer;font-family:var(--mono);font-size:11px;padding:1px 6px;line-height:16px;color:#8fd18b;flex:none}.chip.check.fail{color:#ff8fa3;border-color:#6a2f3c;background:#2a1b20}.chip.check .score{color:var(--text)}.chip.check.on{border-color:#ff00c8;box-shadow:0 0 0 1px #ff00c8 inset}.check-details{flex-direction:column;align-items:stretch;gap:3px;background:#241a24;border-color:#5a2d55;font-size:12px}.check-details .cd-head{display:flex;align-items:baseline;gap:6px}.check-details .cd-detail{color:#c9ccd2}.check-details .score{font-family:var(--mono)}.check-details .cd-group{display:flex;align-items:center;gap:6px;color:#c9ccd2}.check-details .mono{font-family:var(--mono);font-size:11.5px;color:#e9b8e4}.check-details .mark-dot{width:9px;height:9px;border-radius:50%;border:2px solid #ff00c8;flex:none}.check-details button{padding:0 6px;line-height:16px;font-size:12px}.preview{flex:none;border-top:1px solid var(--line)}.preview .panel-title .mini{text-transform:none;letter-spacing:0;font-weight:600}.preview .panel-title .mini.on{border-color:var(--accent);color:var(--accent)}.preview-body{padding:0 12px 8px;overflow:auto;max-height:250px;display:flex;flex-direction:column;gap:4px}.preview-body canvas{image-rendering:pixelated;display:block;flex:none}.swatch .role{font-size:10px;color:#c9a6ff;border:1px solid #4b3a6a;border-radius:3px;padding:0 4px;line-height:14px}.theme-row{display:flex;align-items:center;gap:6px;padding:0 12px 6px;font-size:12px;color:var(--dim)}.theme-select{font-size:12px;padding:0 3px}.narrow-only{display:none}@media(max-width:1500px){.xwide-only{display:none}header .crumbs .meta{display:none}}.palette-edit select{font-size:12px;padding:1px 3px}.options{row-gap:4px}.options>*{flex:none}.options .spacer{flex:1 0 0;min-width:0}@media(max-width:1350px){.options{gap:8px;padding:3px 8px}.options .opt-label,.options .spacer{display:none}}.check-details button{white-space:nowrap;flex:none}.check-details .cd-group{flex-wrap:wrap}@media(max-width:1350px){.app{grid-template-columns:200px minmax(0,1fr) 320px}header{gap:8px;padding:0 10px}header .crumbs .meta{display:none}.chip.check{padding:1px 5px;font-size:10.5px}.chip.check.pass .score,.wide-only{display:none}.narrow-only{display:inline}.toolbar{gap:6px;padding:5px 8px}}.seg{display:inline-flex;flex:none}.seg button{border-radius:0;padding:3px 8px}.seg button:first-child{border-radius:4px 0 0 4px}.seg button:last-child{border-radius:0 4px 4px 0}.seg button+button{border-left:none}.family-view{flex:1;min-height:0;overflow:auto;padding:10px 14px;display:flex;flex-direction:column;gap:8px}.family-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.family-head .num{width:64px}.family-legend{font-size:12px}.family-grid{display:flex;flex-wrap:wrap;gap:10px;align-content:flex-start}.variant{background:var(--panel);border:1px solid var(--line);border-radius:4px;padding:5px;display:flex;flex-direction:column;gap:4px}.variant canvas{image-rendering:pixelated;display:block}.variant.piece{border-color:#4fb7c4}.variant.detached{border-color:#c99a45}.vname{display:flex;align-items:center;gap:6px;font-size:11px;justify-content:space-between}.vname .mini{padding:0 6px;font-size:11px}.piece-tag,.detached-tag{font-size:10px;padding:0 5px;border-radius:8px;border:1px solid #4fb7c4;color:#8fdbe4}.detached-tag{border-color:#c99a45;color:#f0c27a}.map-text{white-space:pre-wrap;font-size:12px}.map-body canvas{image-rendering:pixelated;display:block}.rowhead.fold{cursor:pointer;user-select:none}.rowhead.fold:hover{color:var(--accent)}.timeline.folded{flex:none}.map-editor{display:flex;flex-direction:column;flex:1;min-height:0}.map-editor .map-tools{flex-wrap:wrap;gap:6px}.map-editor .mix{display:inline-flex;flex-wrap:wrap;gap:4px;align-items:center}.map-editor .mix label{display:inline-flex;align-items:center;gap:3px;font:11px var(--mono);color:#8a909a;padding:1px 4px;border:1px solid var(--line);border-radius:4px}.map-editor .mix label.on{color:#e6e8eb;border-color:#4a6a8a}.map-editor .mix input{width:3.2em;font:11px var(--mono);background:transparent;color:inherit;border:none;border-bottom:1px solid var(--line)}.map-editor .map-body{flex:1;overflow:auto;padding:8px}.map-editor canvas{image-rendering:pixelated;display:block}.tabs button{padding:2px 9px}.app.dash{grid-template-areas:"head head head" "dash dash dash"}.dashboard{grid-area:dash;overflow:auto;padding:0 0 24px}.dashboard .pad{padding:16px}.dash-top{position:sticky;top:0;z-index:2;background:var(--bg);padding:10px 16px 8px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:8px}.dash-theme{max-width:120ch}.dash-progress{display:flex;height:8px;border-radius:4px;overflow:hidden;background:var(--panel2)}.seg-bar{display:block;min-width:4px}.dash-filters{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.dash-set{padding:4px 12px 0}.dash-set .panel-title{padding-left:4px}.dash-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}.dash-card{display:flex;gap:10px;padding:9px;background:var(--panel);border:1px solid var(--line);border-left:4px solid var(--st, var(--line));border-radius:6px;min-width:0}.dash-card.unplanned{border-style:dashed}.dash-card .thumb{flex:none;width:108px;height:108px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:4px;background:repeating-conic-gradient(#2a2d33 0 25%,#24272c 0 50%) 0 0 / 12px 12px}.dash-card .thumb img{image-rendering:pixelated}.dash-card .thumb:disabled{opacity:1;cursor:default}.planned-box{width:64px;height:64px;border:1px dashed #4a505a;border-radius:3px;display:flex;align-items:center;justify-content:center;color:var(--dim);font:11px var(--mono)}.card-body{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}.card-head{display:flex;align-items:center;gap:8px}.card-head b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mono{font-family:var(--mono)}.desc{color:#b9bec6;font-size:12px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.next{font-size:12px;color:var(--accent)}.next.dim{color:var(--dim)}.flag{font-size:11px;color:#e7c55a}.card-checks{display:flex;flex-wrap:wrap;gap:3px}.chk{font:11px var(--mono);padding:0 6px;border-radius:8px;border:1px solid var(--line)}.chk.pass{color:#8fd18b}.card-judge{display:flex;flex-wrap:wrap;gap:3px;margin-top:3px}.chk.judge-tag{color:#9aa3b5;border-style:dashed}.chk.judge-pass{color:#8fd18b}.chk.judge-fail{color:#ffb38a;border-color:#7a4a30;background:#3a2a1d}.chk.judge-unsure{color:#e6d58a;border-color:#6a6030;border-style:dotted}.chk.judge-error{color:#c9ccd2;border-color:#7a3036}.chk.fail{color:#ff9a9a;border-color:#7a3036;background:#3a1d20}.card-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.card-actions button{white-space:nowrap}.card-actions.ask{flex-wrap:wrap}.card-actions.ask input{flex:1 1 100%;min-width:0;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:3px 6px}button.approve{border-color:#3f7a4a;color:#8fd18b}.badge{font-size:11px;padding:1px 8px;border-radius:9px;border:1px solid var(--st, var(--line));color:var(--st, var(--dim));background:transparent;white-space:nowrap}button.badge{cursor:pointer}button.badge.on{background:var(--st);color:#111}.st-planned{--st: #6a707c}.st-drafted{--st: #e8955a}.st-checked{--st: #e2cf5c}.st-reviewed{--st: #6cc4ff}.st-approved{--st: #b9a3ff}.st-exported{--st: #8fd18b}.seg-bar.st-planned,.seg-bar.st-drafted,.seg-bar.st-checked,.seg-bar.st-reviewed,.seg-bar.st-approved,.seg-bar.st-exported{background:var(--st)}.dash-row{display:flex;align-items:flex-start;gap:12px}button.link{border:0;background:none;padding:0 2px;color:var(--human);text-decoration:underline;text-underline-offset:2px;cursor:pointer}button.ask-claude{border-color:#7a5a34;color:var(--claude)}.dash-card.has-request{box-shadow:0 0 0 1px #5a4630 inset}.req{font-size:12px;border-radius:4px;padding:4px 6px;background:var(--panel2);border-left:3px solid #6a707c;display:flex;flex-direction:column;gap:3px}.req-head{display:flex;gap:6px;align-items:baseline;flex-wrap:wrap}.req-id{color:var(--dim);font-size:11px}.req-open{border-left-color:var(--human)}.req-claimed{border-left-color:var(--claude)}.req-blocked{border-left-color:#e7c55a;background:#322b14}.req-done{border-left-color:#8fd18b;color:#b9d8b6}.req-cancelled{opacity:.6}.req .link{align-self:flex-start;font-size:11px;color:var(--dim)}.claude-working{color:var(--claude)}.pulse{display:inline-block;width:8px;height:8px;margin-right:6px;border-radius:50%;background:var(--claude);animation:pulse 1.2s ease-in-out infinite;vertical-align:0}@keyframes pulse{0%,to{opacity:.25}50%{opacity:1}}.req-chip{color:var(--claude);border-color:#7a5a34}.worker{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end;position:relative}.worker-log{position:absolute;top:100%;right:0;margin:6px 0 0;width:min(760px,80vw);max-height:320px;overflow:auto;z-index:5;background:#101114;border:1px solid var(--line);border-radius:6px;padding:8px 10px;font:11px/1.5 var(--mono);white-space:pre-wrap;color:#c4c8cf}.banner.floating{position:fixed;left:50%;bottom:16px;transform:translate(-50%);z-index:20;max-width:80vw}.dash-scenes .scene-list{display:flex;flex-wrap:wrap;gap:8px}.scene{background:var(--panel);border:1px solid var(--line);border-left:4px solid #e8955a;border-radius:6px;padding:6px 10px;min-width:240px}.scene.complete{border-left-color:#8fd18b}.scene-gaps{display:flex;flex-wrap:wrap;gap:3px;margin-top:3px;align-items:center}.chk.missing{color:#c9ccd2;border-style:dashed}.dialog-back{position:fixed;inset:0;background:#08090b99;z-index:30;display:flex;align-items:center;justify-content:center}.dialog{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:14px 16px;max-width:min(1000px,94vw);max-height:90vh;overflow:auto;display:flex;flex-direction:column;gap:8px}.dialog p{margin:0}.dialog input:not([type]),.dialog input[type=text],.dialog select{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:4px;padding:3px 6px}.add-asset{width:460px;display:grid;grid-template-columns:1fr 1fr;gap:8px 12px}.add-asset>.panel-title,.add-asset>p,.add-asset>.wide,.add-asset>.banner,.add-asset>.card-actions{grid-column:1 / -1}.add-asset label{display:flex;flex-direction:column;gap:2px;color:var(--dim);font-size:12px}.add-asset label input,.add-asset label select{color:var(--text)}.drop-zone{grid-area:dash;position:relative;min-height:0;display:flex;flex-direction:column}.drop-zone>.dashboard{flex:1}.drop-zone.over>.dashboard{outline:2px dashed var(--human);outline-offset:-6px}.drop-hint{position:absolute;inset:40% 20% auto;text-align:center;padding:14px;background:var(--panel);border:1px solid var(--human);border-radius:8px;color:var(--human);pointer-events:none}.import-body{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap}.slice-view{position:relative;flex:none;background:repeating-conic-gradient(#2a2d33 0 25%,#24272c 0 50%) 0 0 / 12px 12px}.slice-view img{image-rendering:pixelated;display:block}.slice-cell{position:absolute;box-sizing:border-box;border:1px solid rgba(108,196,255,.85)}.slice-cell span{position:absolute;left:1px;bottom:1px;font:10px var(--mono);background:#101114cc;color:var(--human);padding:0 3px;border-radius:2px}.slice-cell.empty{border-color:#8a909a59;border-style:dashed}.import-form{display:flex;flex-direction:column;gap:7px;min-width:300px;flex:1}.import-form label,.import-form .row{display:flex;gap:6px;align-items:center;flex-wrap:wrap;color:var(--dim)}.import-form input:not([type]){width:auto}.import-names{font-size:12px;max-width:420px}.import-list{margin:4px 0;padding-left:18px;display:flex;flex-direction:column;gap:3px}.gallery .gal-grid{display:flex;flex-wrap:wrap;gap:12px;padding:12px 16px;align-items:flex-end}.gal-item{background:var(--panel);border:1px solid var(--line);border-bottom:3px solid var(--st);border-radius:6px;padding:8px;display:flex;flex-direction:column;gap:3px;min-width:120px;max-width:380px}.gal-item.picked{border-color:var(--human);box-shadow:0 0 0 1px var(--human)}.gal-art{padding:6px;border:0;border-radius:4px;display:flex;align-items:flex-end;justify-content:center;min-height:60px;background:repeating-conic-gradient(#2a2d33 0 25%,#24272c 0 50%) 0 0 / 12px 12px}.gal-art:disabled{opacity:1}.gal-art canvas{image-rendering:pixelated;display:block}.gal-meta{display:flex;align-items:center;gap:6px}.gal-meta b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.small{font-size:11px}.gal-rel{font-size:11px;color:var(--dim);display:flex;flex-wrap:wrap;gap:2px 4px}.gal-rel .link{font-size:11px}.compare{margin:10px 16px 0;padding:12px;border:1px solid var(--line);border-radius:8px;background:repeating-conic-gradient(#2a2d33 0 25%,#24272c 0 50%) 0 0 / 16px 16px;overflow:auto}.compare-row{display:flex;gap:24px;align-items:flex-end}.compare figure{margin:0;display:flex;flex-direction:column;align-items:center;gap:6px}.compare canvas{image-rendering:pixelated;display:block}.compare figcaption{background:#101114d9;padding:2px 6px;border-radius:4px}.compare-tools{margin-bottom:10px}.no-listener{margin-top:4px;padding:4px 6px;border-radius:4px;background:#3a2a14;color:#f0c98a;font-size:12px}.no-listener .card-actions{margin-top:4px}.prompt-text{white-space:pre-wrap;margin:4px 0 0;padding:4px;max-height:14em;overflow-y:auto;background:#1d1a14;color:var(--text, #d8dbe0);user-select:all;font-size:11px}.req-chip.unattended{color:#f0c98a;border-color:#b9873a}.listener-chip.on{color:#8fd18b}.listener-chip.off{color:var(--dim)}
|