yarramate 1.25.2 → 1.26.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.
Files changed (31) hide show
  1. package/README.md +6 -2
  2. package/dist/adapters/mcp-cli.d.ts +45 -1
  3. package/dist/adapters/mcp-cli.js +297 -50
  4. package/dist/adapters/visual/protocol-contract.d.ts +29 -2
  5. package/dist/adapters/visual/session-server.js +27 -6
  6. package/dist/adapters/visual/session-store.js +1 -0
  7. package/dist/adapters/visual/wire.d.ts +18 -0
  8. package/dist/adapters/visual/workspace-model.js +11 -1
  9. package/dist/visual-app/assets/{elk.bundled-ZYNFKdcv.js → elk.bundled-CYZFv-C6.js} +1 -1
  10. package/dist/visual-app/assets/{index-CMqEmjU2.js → index-CRYHv5jy.js} +6 -2
  11. package/dist/visual-app/assets/index-DdE5s692.css +1 -0
  12. package/dist/visual-app/index.html +2 -2
  13. package/dist/visual-app-lib/editor.js +7812 -7485
  14. package/dist/visual-app-lib/styles.css +1 -1
  15. package/dist/visual-app-lib/types/adapters/visual/protocol-contract.d.ts +29 -2
  16. package/dist/visual-app-lib/types/adapters/visual/wire.d.ts +18 -0
  17. package/dist/visual-app-lib/types/visual-app/App.d.ts +7 -1
  18. package/dist/visual-app-lib/types/visual-app/context-menu-model.d.ts +36 -0
  19. package/dist/visual-app-lib/types/visual-app/mount.d.ts +9 -1
  20. package/dist/visual-app-lib/types/visual-app/open-questions.d.ts +18 -2
  21. package/dist/visual-app-lib/types/visual-app/question-verbs.d.ts +54 -0
  22. package/dist/visual-app-lib/types/visual-app/session-client.d.ts +3 -0
  23. package/dist/visual-app-lib/types/visual-app/state.d.ts +4 -1
  24. package/dist/visual-app-lib/types/visual-app/workspace-state.d.ts +13 -0
  25. package/docs/CONSUMING-YARRAMATE.md +17 -5
  26. package/package.json +1 -1
  27. package/schema/yarramate-visual-event.schema.json +324 -73
  28. package/schema/yarramate-visual-response.schema.json +230 -56
  29. package/skills/yarramate-architecture/SKILL.md +6 -2
  30. package/skills/yarramate-architecture/references/visual-conversations.md +21 -3
  31. package/dist/visual-app/assets/index-CJVWkpLt.css +0 -1
@@ -1,2 +1,2 @@
1
- :root{--paper:#e8eef0;--ink:#182228;--eucalyptus:#416f65;--ochre:#8c4d18;--cobalt:#2457a6;--failure:#a3403a;--sheet:color-mix(in oklab, var(--paper) 55%, white);--rule:color-mix(in oklab, var(--ink) 16%, transparent);--rule-firm:color-mix(in oklab, var(--ink) 34%, transparent);--quiet:color-mix(in oklab, var(--ink) 62%, var(--paper));--display:"Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;--body:"Avenir Next", Avenir, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--utility:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--step:.5rem;--rail-width:264px;--form-label-width:6rem;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--paper);color:var(--ink);font-family:var(--body);-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.5}:focus-visible{outline:3px solid var(--cobalt);outline-offset:2px}.offscreen{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.visual-shell{background:var(--paper);min-width:0;height:100dvh;color:var(--ink);grid-template-rows:auto minmax(0,1fr);display:grid;overflow:hidden}.command-strip{z-index:10;justify-content:space-between;align-items:center;gap:calc(var(--step) * 2);min-height:48px;padding:calc(var(--step) * .75) calc(var(--step) * 2);border-bottom:1px solid var(--rule);background:var(--sheet);flex-wrap:wrap;display:flex;position:relative}.command-identity,.command-actions{align-items:center;gap:var(--step);min-width:0;display:flex}.session-description{min-width:0;color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;margin:0;font-size:13px;overflow:hidden}.command-identity{flex:10rem}.command-actions{flex-wrap:wrap;flex:0 auto;justify-content:flex-end}.command-identity h1{min-width:8ch;font-family:var(--display);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:15px;line-height:1.2;overflow:hidden}.command-actions select,.command-actions button,.command-actions .quick-filter{min-height:32px;font-family:var(--utility);letter-spacing:.08em;color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;padding:0 .7rem;font-size:12px}.command-actions select{text-overflow:ellipsis;max-width:12rem}.command-actions .quick-filter{cursor:text;width:160px}.command-actions .quick-filter::placeholder{color:var(--quiet)}.command-actions select{padding-right:.35rem}.command-actions select:hover:enabled,.command-actions button:hover:enabled,.command-actions .quick-filter:hover,.command-actions .quick-filter:focus{border-color:var(--cobalt)}.command-actions select:disabled,.command-actions button:disabled{color:var(--quiet);border-color:var(--rule);cursor:not-allowed;background:0 0}.command-actions button[aria-expanded=true]{color:var(--paper);background:var(--cobalt);border-color:var(--cobalt)}.command-actions .end-session:hover:enabled{color:var(--paper);background:var(--failure);border-color:var(--failure)}.connection-state{font-family:var(--utility);letter-spacing:.14em;text-transform:uppercase;color:var(--quiet);flex:none;font-size:11px}.end-transition-status{max-width:28rem;font-family:var(--utility);color:var(--quiet);font-size:11px;line-height:1.25}.end-transition-status:empty{display:none}.direction-notice{max-width:16rem;font-family:var(--utility);color:var(--quiet);font-size:11px;line-height:1.25}.direction-notice:empty{display:none}.authority{white-space:nowrap;font-family:var(--utility);letter-spacing:.14em;text-transform:uppercase;color:var(--eucalyptus);flex:none;margin:0;font-size:11px}.authority:before{content:"";vertical-align:0;background:currentColor;width:.5rem;height:.5rem;margin-right:.5rem;display:inline-block}.beta-badge{font-family:var(--utility);letter-spacing:.1em;text-transform:uppercase;color:var(--ochre);border:1px solid var(--ochre);flex:none;padding:.05rem .4rem;font-size:10px;font-weight:600}.session-details{align-items:flex-start;gap:calc(var(--step) * 2);padding:var(--step) calc(var(--step) * 2) calc(var(--step) * 1.5);border-bottom:1px solid var(--rule);background:var(--sheet);display:flex;position:absolute;top:100%;left:0;right:0;box-shadow:0 12px 28px #1323391f}.session-details[hidden]{display:none}.session-details p{max-width:90ch;color:var(--quiet);margin:0}.details-close{min-height:28px;font-family:var(--utility);letter-spacing:.08em;color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;flex:none;margin-left:auto;padding:0 .6rem;font-size:11px}.details-close:hover{border-color:var(--cobalt)}.attention-count{background:var(--cobalt);color:#fff;text-align:center;border-radius:999px;min-width:1.25rem;padding:0 .35rem;font-size:11px}.workspace{grid-template-columns:var(--rail-width) minmax(0, 1fr) auto var(--conversation-width);min-width:0;min-height:0;display:grid;overflow:hidden}.workspace[data-rail=hidden]{grid-template-columns:22px minmax(0, 1fr) auto var(--conversation-width)}.rail-reopen{align-items:center;gap:var(--step);width:22px;height:100%;padding:calc(var(--step) * 1.5) 0;border:none;border-right:1px solid var(--rule);background:var(--sheet);color:var(--quiet);cursor:pointer;flex-direction:column;font-size:12px;display:flex}.rail-reopen:hover,.rail-reopen:focus-visible{color:var(--cobalt)}.rail-hide{min-height:1.75rem;padding:0 calc(var(--step) * .75);color:var(--quiet);cursor:pointer;background:0 0;border:none;flex:none;font-size:12px;line-height:1}.rail-hide:hover,.rail-hide:focus-visible{color:var(--cobalt)}.view-tree{border-right:1px solid var(--rule);background:var(--sheet);grid-template-rows:auto minmax(0,1fr);min-width:0;min-height:0;display:grid}.view-tree-head{align-items:center;gap:calc(var(--step) * 1);padding:var(--step) calc(var(--step) * 1.5);border-bottom:1px solid var(--rule);display:flex}.view-tree-filter{min-width:0;min-height:1.75rem;font-family:var(--utility);color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);border-radius:0;flex:1;padding:0 .5rem;font-size:12px}.view-tree-new{width:1.75rem;height:1.75rem;color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;flex:none;place-items:center;padding:0;display:grid}.view-tree-new:hover{border-color:var(--cobalt);color:var(--cobalt)}.view-tree-body{padding:var(--step) 0 calc(var(--step) * 2);overflow:auto}.tree-list{margin:0;padding:0;list-style:none}.tree-row{align-items:center;gap:calc(var(--step) * .75);width:100%;padding:.18rem calc(var(--step) * 1.5);font:inherit;text-align:left;color:var(--ink);cursor:pointer;background:0 0;border:0;border-radius:0;font-size:13px;display:flex}.tree-row:hover{background:color-mix(in oklab, var(--cobalt) 10%, transparent)}.tree-branch{font-family:var(--utility);color:var(--quiet);font-size:12px}.tree-depth-0{letter-spacing:.08em;text-transform:uppercase;color:var(--quiet)}.tree-depth-1{padding-left:calc(var(--step) * 3)}.tree-depth-2{padding-left:calc(var(--step) * 5.5)}.tree-row-active,.tree-row-active:hover{background:var(--cobalt);color:var(--paper)}.tree-row-quiet{color:var(--quiet)}.tree-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.subject-slots{margin-top:12px}.subject-slots-heading{font-family:var(--utility);text-transform:uppercase;letter-spacing:.06em;color:var(--quiet);align-items:baseline;gap:6px;margin:0 0 4px;font-size:11px;display:flex}.subject-slots-list{grid-template-columns:auto 1fr;gap:2px 10px;margin:0;font-size:12px;display:grid}.subject-slot-row{display:contents}.subject-slot-name{font-family:var(--utility);color:var(--quiet)}.subject-slot-value{margin:0}.subject-slot-vacant{color:var(--quiet);font-style:italic}.tree-fold{color:var(--quiet);flex:none;font-size:9px;line-height:1}.tree-count{font-family:var(--utility);color:var(--quiet);font-variant-numeric:tabular-nums;flex:none;font-size:10px}.tree-row>svg{opacity:.4}.tree-row-active>svg{opacity:1}.tree-row-active .tree-count{color:inherit;opacity:.75}.tree-swatch{background:var(--paper);border:1px solid var(--rule-firm);flex:none;width:.625rem;height:.625rem}.tree-empty{padding:.3rem calc(var(--step) * 3);color:var(--quiet);font-size:12px}.diagram-workspace{background:var(--paper);grid-template-rows:minmax(0,1fr) auto;min-width:0;min-height:0;display:grid;position:relative;overflow:hidden}.canvas-controls{inset:var(--step) var(--step) auto auto;z-index:5;align-items:center;gap:var(--step);display:flex;position:absolute}.canvas{width:100%;min-width:0;height:100%;min-height:0;position:relative}.diagram-workspace>.faults{z-index:4;max-height:50%;position:absolute;inset:auto 0 0;overflow:auto}.diagram-workspace>.filter-pill{inset:var(--step) auto auto var(--step);z-index:4;align-items:center;gap:var(--step);max-width:min(52ch, calc(100% - var(--step) * 2));border:1px solid var(--rule-firm);background:var(--sheet);font-family:var(--utility);color:var(--ink);border-radius:999px;padding:.35rem .7rem;font-size:12px;display:flex;position:absolute}.filter-pill span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.filter-pill code{font-weight:700}.filter-pill button{color:var(--cobalt);font-family:inherit;font-size:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:0;text-decoration:underline}.filter-pill button:hover{color:var(--ink)}.canvas>.filter-empty-pill{z-index:4;align-items:center;gap:var(--step);max-width:min(52ch, calc(100% - var(--step) * 2));border:1px solid var(--rule-firm);background:var(--sheet);font-family:var(--utility);color:var(--ink);border-radius:999px;padding:.35rem .7rem;font-size:12px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.filter-empty-pill span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.filter-empty-pill code{font-weight:700}.filter-empty-pill button{color:var(--cobalt);font-family:inherit;font-size:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:0;text-decoration:underline}.filter-empty-pill button:hover{color:var(--ink)}.conversation-separator{z-index:3;cursor:col-resize;touch-action:none;width:10px;height:100%;position:relative}.conversation-separator:before{background:var(--rule);content:"";width:1px;position:absolute;inset:0 auto 0 4px}.conversation-separator:hover:before,.conversation-separator:focus-visible:before{background:var(--cobalt);width:2px}.waiting{padding:calc(var(--step) * 4);font-family:var(--utility);letter-spacing:.1em;text-transform:uppercase;color:var(--quiet);margin:0;font-size:12px}.section-stack{border-left:1px solid var(--rule);background:var(--sheet);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}.stack-rim{border-bottom:1px solid var(--rule);flex:none;justify-content:flex-end;display:flex}.conversation-hide{min-height:22px;padding:0 calc(var(--step) * 1.5);color:var(--quiet);cursor:pointer;background:0 0;border:none;font-size:12px;line-height:1}.conversation-hide:hover,.conversation-hide:focus-visible{color:var(--cobalt)}.conversation-reopen{align-items:center;gap:var(--step);width:22px;height:100%;padding:calc(var(--step) * 1.5) 0;border:none;border-left:1px solid var(--rule);background:var(--sheet);color:var(--quiet);cursor:pointer;flex-direction:column;font-size:12px;display:flex}.conversation-reopen:hover,.conversation-reopen:focus-visible{color:var(--cobalt)}.attention-choice{border:1px solid var(--cobalt);min-width:1.25rem;color:var(--cobalt);text-align:center;border-radius:999px;padding:0 .35rem;font-size:11px}.stack-section{grid-template-rows:auto minmax(0,1fr);min-height:0;display:grid;overflow:hidden}.stack-section-properties{flex:auto}.stack-section-changes{flex:0 0 var(--changes-height,200px)}.stack-section-chat{flex:0 0 var(--chat-height,300px)}.section-stack:not(:has(>.stack-section-properties))>.stack-section:nth-child(1 of .stack-section:not(.stack-section-palette)){flex:auto}.section-stack>.stack-section-palette:only-child{flex:auto;max-height:none}.stack-section-palette{flex:0 auto;max-height:45%}.kind-palette{padding:calc(var(--step) * .5) 0 calc(var(--step) * .75)}.kind-palette-layer-name{width:100%;padding:calc(var(--step) * .75) calc(var(--step) * 1.5) calc(var(--step) * .25);text-align:left;cursor:pointer;font-family:var(--utility);letter-spacing:.08em;color:var(--quiet);background:0 0;border:none;margin:0;font-size:11px;display:block}.kind-palette-caret{width:1em;display:inline-block}.kind-palette-rows{margin:0;padding:0;list-style:none}.kind-palette-row{align-items:center;gap:calc(var(--step) * .75);width:100%;padding:.3rem calc(var(--step) * 1.5);font:inherit;text-align:left;color:var(--ink);cursor:grab;background:0 0;border:0;border-radius:0;font-size:13px;display:flex}.kind-palette-row:hover,.kind-palette-row:focus-visible{background:color-mix(in oklab, var(--cobalt) 10%, transparent)}.kind-palette-row img{flex:none}.kind-palette-stack{border:1px solid var(--ink);background:var(--paper);border-radius:2px;flex:none;width:14px;height:14px;position:relative}.kind-palette-stack:before{content:"";border:1px solid color-mix(in oklab, var(--ink) 45%, transparent);background:var(--paper);z-index:-1;border-radius:2px;width:100%;height:100%;position:absolute;top:-3px;left:3px}.kind-palette-slots{color:color-mix(in oklab, var(--ink) 60%, transparent);margin-left:auto;font-size:11px}.instance-draft-slots{margin:0;padding:0;list-style:none}.instance-draft-slot{align-items:center;gap:calc(var(--step) * .75);margin-bottom:calc(var(--step) * .75);grid-template-columns:10rem 1fr;display:grid}.instance-draft-slot>label{align-items:baseline;gap:calc(var(--step) * .5);display:flex}.instance-draft-slot-name{font-weight:600}.instance-draft-required,.instance-draft-context{border-radius:2px;padding:0 .35em;font-size:11px}.instance-draft-required{color:var(--failure);border:1px solid color-mix(in oklab, var(--failure) 40%, transparent)}.instance-draft-context{color:color-mix(in oklab, var(--ink) 65%, transparent);border:1px solid color-mix(in oklab, var(--ink) 25%, transparent)}.instance-draft-new{gap:calc(var(--step) * .5);grid-column:2;display:flex}.instance-draft-wiring h4{margin:calc(var(--step) * 1.5) 0 calc(var(--step) * .5);color:color-mix(in oklab, var(--ink) 65%, transparent);font-size:12px}.kind-palette-bound-name{padding-left:calc(var(--step) * 2.5);color:color-mix(in oklab, var(--ink) 65%, transparent);font-size:12px}.section-head{align-items:center;gap:var(--step);min-height:32px;padding-right:calc(var(--step) * 1.5);border-bottom:1px solid var(--rule);font-size:inherit;margin:0;font-weight:400;display:flex}.section-toggle{align-items:center;gap:calc(var(--step) * .75);min-height:32px;padding:0 calc(var(--step) * 1.5);color:var(--ink);cursor:pointer;font-family:var(--utility);letter-spacing:.08em;background:0 0;border:none;font-size:12px;display:flex}.section-chevron{color:var(--quiet);font-size:10px}.section-meta{font-family:var(--utility);color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;margin-left:auto;font-size:11px;overflow:hidden}.section-body{min-height:0;overflow:auto}.section-body[hidden]{display:none}.section-empty{padding:calc(var(--step) * 1.5);color:var(--quiet);margin:0;font-size:13px}.section-splitter{cursor:row-resize;background:0 0;border:none;flex:0 0 7px;height:7px;position:relative}.section-splitter:after{content:"";background:var(--rule);position:absolute;inset:3px 0}.section-splitter:hover:after,.section-splitter:focus-visible:after{background:var(--cobalt);inset:2px 0}.section-splitter:focus-visible{outline:none}.talk{background:var(--sheet);grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);min-width:0;min-height:0;display:grid;overflow:hidden}.session-foot{align-items:center;gap:var(--step);padding:0 calc(var(--step) * 1.5) calc(var(--step) * 1.5);display:flex}.session-foot .end-session{margin-left:auto}.talk[hidden]{display:none}.conversation-scroll{min-width:0;min-height:0;overflow:auto}.subject-inspector{min-width:0;padding:calc(var(--step) * 1.5);border-bottom:1px solid var(--rule);background:color-mix(in srgb, var(--sheet) 92%, var(--cobalt) 8%)}.subject-heading-row{justify-content:space-between;align-items:flex-start;gap:var(--step);min-width:0;display:flex}.subject-heading-row>:first-child,.subject-heading-row h2{min-width:0}.subject-type{margin:0 0 calc(var(--step) * .25);color:var(--quiet);letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:700}.subject-heading-row h2{font-family:var(--display);overflow-wrap:anywhere;margin:0;font-size:16px;line-height:1.25}.subject-facts{gap:calc(var(--step) * .5);margin:var(--step) 0;display:grid}.subject-facts>div{gap:var(--step);grid-template-columns:minmax(5.5rem,auto) minmax(0,1fr);display:grid}.subject-facts dt{color:var(--quiet);font-size:11px}.subject-facts dd{overflow-wrap:anywhere;min-width:0;margin:0}.subject-description p{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.description-clamped{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.subject-description button,.subject-navigate,.subject-clear{margin-top:calc(var(--step) * .5);min-height:28px}.subject-connect{margin-top:calc(var(--step) * .5);margin-right:calc(var(--step) * .5);min-height:28px}.connection-panel{z-index:2;top:calc(var(--step) * 1.5);max-width:min(560px, calc(100% - var(--step) * 4));padding:calc(var(--step) * 1.5) calc(var(--step) * 2);border:1px solid var(--rule);background:var(--sheet);border-radius:4px;position:absolute;left:50%;transform:translate(-50%);box-shadow:0 2px 12px #0000001f}.connection-prompt{margin:0 0 calc(var(--step) * 1.5)}.connection-empty{margin:0 0 calc(var(--step) * 1.5);color:var(--quiet)}.changeset-fault-summary{margin:calc(var(--step) * 1.5) calc(var(--step) * 2.5) 0;color:var(--failure);font-weight:600}.subject-delete{margin-top:calc(var(--step) * .5);margin-right:calc(var(--step) * .5);min-height:28px}.subject-draft-open{border:1px solid var(--rule-firm);background:var(--sheet);min-height:28px;color:var(--ink);cursor:pointer;font-family:var(--utility);letter-spacing:.08em;border-radius:0;padding:0 .7rem;font-size:12px}.subject-draft-open:hover{border-color:var(--cobalt)}.canvas-controls .quick-filter{border:1px solid var(--rule-firm);background:var(--sheet);width:min(220px,30vw);min-height:28px;color:var(--ink);font-family:var(--utility);border-radius:0;padding:0 .6rem;font-size:12px}.canvas-controls .quick-filter::placeholder{color:var(--quiet)}.canvas-controls .canvas-select{border:1px solid var(--rule-firm);background:var(--sheet);min-height:28px;color:var(--ink);font-family:var(--utility);border-radius:0;padding:0 .4rem;font-size:12px}.canvas-controls .canvas-select:focus-visible{outline:2px solid var(--cobalt);outline-offset:1px}.subject-draft-panel{z-index:6;top:calc(var(--step) * 2 + 28px);right:calc(var(--step) * 1.5);width:min(340px, calc(100% - var(--step) * 4));padding:calc(var(--step) * 1.5) calc(var(--step) * 2);border:1px solid var(--rule);background:var(--sheet);border-radius:4px;position:absolute;box-shadow:0 2px 12px #0000001f}.subject-draft-field{margin-bottom:calc(var(--step) * 1.5);display:block}.subject-draft-field>span{margin-bottom:calc(var(--step) * .5);display:block}.subject-draft-field>input,.subject-draft-field>select{width:100%}.subject-draft-id{margin:0 0 calc(var(--step) * 1.5);color:var(--quiet)}.connection-kinds{gap:calc(var(--step) * .75);margin:0 0 calc(var(--step) * 1.5);flex-wrap:wrap;padding:0;list-style:none;display:flex}.connection-search-label{margin:0 0 calc(var(--step) * .5);font-family:var(--utility);color:var(--quiet);font-size:12px;display:block}.connection-search{width:100%;margin:0 0 calc(var(--step) * 1);padding:calc(var(--step) * .5) calc(var(--step) * .75);border:1px solid var(--rule-firm);background:var(--sheet);color:var(--ink);font-family:var(--utility);border-radius:0;display:block}.connection-targets{gap:calc(var(--step) * .5);margin:0 0 calc(var(--step) * 1.5);flex-direction:column;max-height:200px;padding:0;list-style:none;display:flex;overflow-y:auto}.connection-target-id,.connection-targets-more{color:var(--quiet);font-family:var(--utility);font-size:12px}.ledger{padding:calc(var(--step) * 2) calc(var(--step) * 2.5);min-height:0;margin:0;list-style:none;overflow:visible}.ledger .empty p{color:var(--quiet);font-family:var(--utility);margin:0;font-size:12px}.said{padding:0 0 calc(var(--step) * 1.75) calc(var(--step) * 1.5);border-left:2px solid var(--rule)}.said+.said{padding-top:calc(var(--step) * 1.75)}.said-reviewer{border-left-color:var(--cobalt)}.said-agent{border-left-color:var(--eucalyptus)}.said-session{border-left-color:var(--ochre)}.who{font-family:var(--utility);letter-spacing:.16em;text-transform:uppercase;color:var(--quiet);margin:0 0 .15rem;font-size:10px}.words{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.faults{padding:calc(var(--step) * 1.5) calc(var(--step) * 2.5);border-top:1px solid var(--failure);background:color-mix(in oklab, var(--failure) 8%, var(--sheet))}.faults-title{margin:0 0 var(--step);color:var(--failure);font-size:13px}.faults ul{font-family:var(--utility);margin:0;padding-left:1.1rem;font-size:11px;line-height:1.6}.faults .code{font-weight:700}.faults .where{color:var(--quiet);margin-left:.4rem}.choices{padding:calc(var(--step) * 1.5) calc(var(--step) * 2.5);border-top:1px solid var(--rule)}.question{margin:0 0 var(--step);font-family:var(--display);font-size:1.05rem}.choices ul{gap:var(--step);margin:0;padding:0;list-style:none;display:grid}.choices button{text-align:left;width:100%;font-family:var(--body);color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;padding:.5rem .7rem;font-size:14px;display:block}.choices button:hover:enabled{border-color:var(--cobalt)}.choices button:disabled{color:var(--quiet);cursor:not-allowed}.choices .detail{color:var(--quiet);font-size:12px;display:block}.composer{padding:calc(var(--step) * 1.5) calc(var(--step) * 2.5) calc(var(--step) * 2);border-top:1px solid var(--rule)}.composer textarea{resize:vertical;width:100%;font-family:var(--body);color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);border-radius:0;padding:.55rem .65rem;font-size:14px;display:block}.composer textarea:disabled{color:var(--quiet);background:color-mix(in oklab, var(--paper) 70%, var(--sheet));cursor:not-allowed}.composer-foot{justify-content:space-between;align-items:center;gap:var(--step);margin-top:var(--step);display:flex}.agent-status{align-items:center;gap:calc(var(--step) * .5);font-family:var(--utility);letter-spacing:.14em;text-transform:uppercase;color:var(--quiet);margin:0;font-size:10px;display:flex}.agent-spinner{border:1px solid;border-right-color:#0000;border-radius:50%;flex:none;width:.75rem;height:.75rem;animation:.7s linear infinite agent-spinner-turn}@keyframes agent-spinner-turn{to{transform:rotate(1turn)}}.composer button{font-family:var(--utility);letter-spacing:.08em;color:var(--paper);background:var(--cobalt);border:1px solid var(--cobalt);cursor:pointer;border-radius:0;padding:.45rem 1.1rem;font-size:12px}.composer button:disabled{color:var(--quiet);border-color:var(--rule-firm);cursor:not-allowed;background:0 0}.subject-chip{justify-content:space-between;align-items:center;gap:var(--step);margin-bottom:calc(var(--step) * .75);padding:calc(var(--step) * .5) calc(var(--step) * .75);border:1px solid var(--cobalt);color:var(--cobalt);border-radius:999px;display:flex}.subject-chip span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.subject-chip button{min-height:24px;padding:0 calc(var(--step) * .5);color:inherit;background:0 0;border:0;flex:none}.filter-grid{gap:calc(var(--step) * 1.5);grid-template-columns:repeat(auto-fill,minmax(200px,1fr));display:grid}.filter-field{gap:calc(var(--step) * .75);flex-direction:column;display:flex}.filter-field>label,.filter-field legend{font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--quiet);font-size:11px}.tag-input{align-items:center;gap:var(--step);padding:calc(var(--step) * .5);border:1px solid var(--rule-firm);background:var(--paper);border-radius:2px;flex-wrap:wrap;display:flex}.tag-input input{min-width:80px;font:inherit;background:0 0;border:none;flex:1;font-size:15px}.tag-input input:focus{outline:none}.tag-chip{background:var(--cobalt);color:var(--paper);border-radius:2px;align-items:center;gap:.4rem;padding:.2rem .6rem;font-size:13px;display:inline-flex}.tag-chip button{color:currentColor;cursor:pointer;background:0 0;border:none;min-width:0;min-height:0;margin:0;padding:0;font-size:16px;line-height:1;display:inline}.tag-chip button:hover{opacity:.8}.filter-field select{font-family:var(--body);color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;padding:.4rem .7rem;font-size:15px}.filter-field select:hover{border-color:var(--cobalt)}.filter-checkbox-group{border:none;margin:0;padding:0}.filter-checkbox-option{cursor:pointer;align-items:center;gap:.5rem;padding:.4rem 0;font-size:15px;display:flex}.filter-checkbox-option input{cursor:pointer}.bottom-panel{border-top:1px solid var(--rule-firm);background:var(--sheet);flex-direction:column;min-height:0;display:flex}.bottom-panel-tabs{align-items:stretch;gap:0;min-height:32px;display:flex}.bottom-panel-tab{min-height:32px;font-family:var(--utility);letter-spacing:.08em;color:var(--quiet);border:none;border-right:1px solid var(--rule);cursor:pointer;background:0 0;border-bottom:2px solid #0000;padding:0 .9rem;font-size:12px}.bottom-panel-tab:hover{color:var(--ink)}.bottom-panel-tab[aria-selected=true]{color:var(--ink);background:var(--paper);border-bottom-color:var(--cobalt)}.bottom-panel-summary{font-family:var(--utility);color:var(--quiet);align-items:center;padding-inline:.9rem;font-size:12px;display:flex}.bottom-panel-collapse{min-width:32px;min-height:32px;color:var(--quiet);border:none;border-left:1px solid var(--rule);cursor:pointer;background:0 0;margin-left:auto;font-size:12px}.bottom-panel-collapse:hover{color:var(--ink)}.bottom-panel-body{border-top:1px solid var(--rule);background:var(--paper);min-height:0;max-height:42dvh;overflow:auto}.query-tab{gap:calc(var(--step) * 2);padding:calc(var(--step) * 1.5);grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr);display:grid}.query-tab>div{min-width:0}.query-tab h3{margin:0 0 var(--step);font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--quiet);font-size:11px;font-weight:400}.query-tab-fields{gap:calc(var(--step) * 1.5);flex-direction:column;display:flex}.query-tab-outcome>h3:not(:first-child){margin-top:calc(var(--step) * 2)}.query-match-count{font-family:var(--display);margin:0;font-size:15px}.query-match-count strong{font-size:28px;font-weight:400;line-height:1}.query-outcome-stale,.query-outcome-note{margin:var(--step) 0 0;color:var(--quiet);font-size:13px}.query-outcome-empty{margin:var(--step) 0 0;color:var(--ochre);font-size:13px}.query-exclusions{margin:0;padding:0;list-style:none}.query-exclusions>li+li{margin-top:var(--step)}.query-exclusions ul{margin:calc(var(--step) * .5) 0 0;padding-left:calc(var(--step) * 2);color:var(--quiet);font-size:13px;list-style:none}.query-exclusion-facet{font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--ink);font-size:11px}.query-exclusion-count{font-family:var(--utility);color:var(--quiet);font-size:11px}.query-exclusion-more{font-style:italic}.query-tab-document{flex-direction:column;min-height:0;display:flex}.query-document{min-height:0;max-height:22dvh;padding:var(--step);border:1px solid var(--rule);background:var(--sheet);font-family:var(--utility);flex:1;margin:0;font-size:12px;line-height:1.5;overflow:auto}.query-tab-actions{align-items:center;gap:var(--step);margin-top:var(--step);display:flex}.query-tab-actions button{min-height:32px;font-family:var(--utility);letter-spacing:.08em;color:var(--paper);background:var(--cobalt);border:1px solid var(--cobalt);cursor:pointer;border-radius:0;padding:0 .7rem;font-size:12px}.query-tab-actions button:disabled{color:var(--quiet);background:var(--paper);border-color:var(--rule-firm);cursor:default}.query-stage-status{color:var(--quiet);font-size:13px}@media (max-width:899px){.command-strip{gap:calc(var(--step) * .5);padding-inline:var(--step)}.command-identity,.command-actions{gap:calc(var(--step) * .5)}.workspace{grid-template-rows:auto minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);min-height:0}.view-tree{border-right:0;border-bottom:1px solid var(--rule);max-height:34dvh}.conversation-separator{display:none}.query-tab{grid-template-columns:minmax(0,1fr)}.bottom-panel-body{max-height:30dvh}.section-stack{border-top:1px solid var(--rule);border-left:0;max-height:56dvh}.conversation-reopen{border-left:0;border-top:1px solid var(--rule);flex-direction:row;justify-content:center;width:auto;height:auto;min-height:24px;padding:0}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.save-view-control{display:contents}.save-view-toggle{padding:0 calc(var(--step) * .75rem);border:1px solid var(--rule-firm);background:var(--paper);height:32px;color:var(--ink);cursor:pointer;border-radius:2px;font-size:13px}.save-view-toggle:hover:not(:disabled){border-color:var(--rule);background:color-mix(in oklab, var(--paper) 90%, var(--ink))}.save-view-toggle:disabled{opacity:.5;cursor:not-allowed}.save-view-control{z-index:20;background:color-mix(in oklab, var(--ink) 22%, transparent);place-items:center;display:grid;position:fixed;inset:0}.save-view-panel{background:var(--sheet);border:1px solid var(--rule-firm);border-radius:4px;box-shadow:0 8px 28px #1323392e}.save-view-panel-body{padding:calc(var(--step) * 1.5);min-width:300px}.save-view-form{gap:calc(var(--step) * 1);flex-direction:column;display:flex}.save-view-form div{gap:calc(var(--step) * .5);flex-direction:column;display:flex}.save-view-form label{color:var(--ink);font-size:12px;font-weight:500}.save-view-form input,.save-view-form textarea{padding:calc(var(--step) * .5);border:1px solid var(--rule);font-family:var(--body);border-radius:2px;font-size:13px}.save-view-actions{gap:calc(var(--step) * 1);margin-top:calc(var(--step) * .5);display:flex}.save-view-actions button{padding:calc(var(--step) * .5) calc(var(--step) * 1);border:1px solid var(--rule-firm);background:var(--paper);color:var(--ink);cursor:pointer;border-radius:2px;flex:1;font-size:13px}.save-view-actions button:hover:not(:disabled){background:color-mix(in oklab, var(--paper) 85%, var(--ink))}.save-view-notice{align-items:center;gap:calc(var(--step) * .75);padding:calc(var(--step) * .75) calc(var(--step) * 1.5);background:color-mix(in oklab, var(--eucalyptus) 15%, var(--sheet));border:1px solid var(--eucalyptus);color:var(--ink);border-radius:4px;font-size:13px;display:flex}.save-view-notice button{padding:0 calc(var(--step) * .5);color:var(--eucalyptus);cursor:pointer;background:0 0;border:none;margin-left:auto;font-size:11px;text-decoration:underline}.confirm-dialog-backdrop{z-index:1000;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.confirm-dialog{background:var(--sheet);border:1px solid var(--rule-firm);padding:calc(var(--step) * 2);text-align:center;border-radius:8px;max-width:400px;box-shadow:0 8px 24px #00000029}.confirm-dialog h2{margin:0 0 calc(var(--step) * 1) 0;font-size:16px}.confirm-dialog p{margin:0 0 calc(var(--step) * 1.5) 0;color:var(--quiet);font-size:13px}.confirm-dialog-actions{gap:calc(var(--step) * 1);display:flex}.confirm-dialog-actions button{padding:calc(var(--step) * .75);border:1px solid var(--rule-firm);background:var(--paper);color:var(--ink);cursor:pointer;border-radius:2px;flex:1;font-size:13px}.confirm-dialog-actions button:hover{background:color-mix(in oklab, var(--paper) 85%, var(--ink))}.changeset-tray{padding:calc(var(--step) * 1.5) calc(var(--step) * 2.5);border-top:1px solid var(--rule);background:color-mix(in srgb, var(--sheet) 92%, var(--cobalt) 8%)}.changeset-heading-row{justify-content:space-between;align-items:baseline;gap:var(--step);display:flex}.changeset-heading-row h2{font-family:var(--display);margin:0;font-size:15px}.changeset-discard-all{color:var(--eucalyptus);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;text-decoration:underline}.changeset-history-controls{align-items:baseline;gap:var(--step);display:flex}.changeset-undo,.changeset-redo{color:var(--eucalyptus);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;text-decoration:underline}.changeset-undo:disabled,.changeset-redo:disabled{color:var(--quiet);cursor:not-allowed;text-decoration:none}.changeset-rows{margin:var(--step) 0 0;gap:calc(var(--step) * .75);padding:0;list-style:none;display:grid}.changeset-row{padding:calc(var(--step) * .75);border:1px solid var(--rule-firm);background:var(--paper);border-radius:2px}.changeset-row.conflicted{border-color:var(--ochre);background:color-mix(in oklab, var(--ochre) 6%, var(--paper))}.changeset-row-conflict{margin:calc(var(--step) * .5) 0 0;font-family:var(--utility);color:var(--ochre);font-size:11px}.changeset-row-line{justify-content:space-between;align-items:center;gap:var(--step);display:flex}.changeset-row-label{overflow-wrap:anywhere;min-width:0;font-family:var(--utility);color:var(--ink);font-size:12px}.changeset-row-discard{color:var(--eucalyptus);cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-size:11px;text-decoration:underline}.changeset-row-diagnostics,.changeset-batch-diagnostics{margin:calc(var(--step) * .5) 0 0;font-family:var(--utility);color:var(--failure);padding-left:1.1rem;font-size:11px}.changeset-batch-diagnostics{margin:0 0 var(--step)}.changeset-row-diagnostics .code,.changeset-batch-diagnostics .code{font-weight:700}.changeset-row-diagnostics .where,.changeset-batch-diagnostics .where{color:var(--quiet);margin-left:.4rem}.changeset-actions{margin-top:var(--step)}.changeset-commit{width:100%;padding:calc(var(--step) * .75);border:1px solid var(--cobalt);background:var(--cobalt);color:var(--paper);cursor:pointer;border-radius:2px;font-size:13px}.changeset-commit:disabled{border-color:var(--rule-firm);color:var(--quiet);cursor:not-allowed;background:0 0}.changeset-notice{margin-top:var(--step);padding:calc(var(--step) * .75) calc(var(--step) * 1);border:1px solid var(--eucalyptus);background:color-mix(in oklab, var(--eucalyptus) 15%, var(--sheet));color:var(--ink);border-radius:4px;font-size:12px}.changeset-notice p{margin:0 0 calc(var(--step) * .25);font-weight:700}.changeset-notice ul{font-family:var(--utility);margin:0;padding-left:1.1rem}.layout-notice-pill{inset:var(--step) var(--step) auto auto;z-index:4;align-items:center;gap:var(--step);max-width:calc(100% - var(--step) * 2);border:1px solid var(--rule-firm);background:var(--sheet);font-family:var(--utility);color:var(--ink);border-radius:999px;padding:.35rem .7rem;font-size:12px;display:flex;position:absolute}.layout-notice-pill span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.subject-form{gap:calc(var(--step) * 1.25);margin:calc(var(--step) * 1) 0;flex-direction:column;display:flex}.subject-form-field{grid-template-columns:var(--form-label-width) minmax(0, 1fr);align-items:center;gap:calc(var(--step) * .75);display:grid}.subject-form-field.subject-form-list{align-items:start}.subject-form-list>.subject-form-label{padding-top:.35rem}.subject-form-list-body{align-items:flex-start;gap:calc(var(--step) * .35);flex-direction:column;min-width:0;display:flex}.subject-form-label{font-family:var(--utility);letter-spacing:.02em;text-transform:uppercase;color:var(--quiet);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.subject-form-field input[type=text],.subject-form-field select{border:1px solid var(--rule-firm);border-radius:calc(var(--step) * .5);background:var(--paper);font-family:var(--body);color:var(--ink);padding:.35rem .5rem;font-size:13px}.subject-fact-value{font-family:var(--body);color:var(--ink);overflow-wrap:anywhere;font-size:13px}.subject-form-list{border-top:1px solid var(--rule);padding-top:calc(var(--step) * .75)}.subject-form-row{align-items:flex-start;gap:calc(var(--step) * .5);margin-bottom:calc(var(--step) * .5);display:flex}.subject-form-row-body{align-items:center;gap:calc(var(--step) * .5);flex-wrap:wrap;flex:1;display:flex}.subject-form-toggle{align-items:center;gap:calc(var(--step) * .35);font-family:var(--utility);color:var(--quiet);font-size:12px;display:flex}.subject-form-row-add,.subject-form-row-remove{border:1px solid var(--rule-firm);border-radius:calc(var(--step) * .5);background:var(--sheet);font-family:var(--utility);cursor:pointer;padding:.25rem .6rem;font-size:12px}.context-menu{z-index:1100;min-width:184px;max-width:280px;max-height:70vh;padding:calc(var(--step) * .5) 0;background:var(--sheet);border:1px solid var(--rule-firm);border-radius:2px;position:fixed;overflow-y:auto;box-shadow:0 8px 24px #00000029}.context-menu:focus{outline:none}.context-menu ul{margin:0;padding:0;list-style:none}.context-menu-group+.context-menu-group{margin-top:calc(var(--step) * .5);padding-top:calc(var(--step) * .5);border-top:1px solid var(--rule)}.context-menu-destructive{margin-top:calc(var(--step) * .5);padding-top:calc(var(--step) * .5);border-top:1px solid var(--rule-firm)}.context-menu-heading{padding:calc(var(--step) * .5) calc(var(--step) * 1.5);font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--quiet);margin:0;font-size:10px}.context-menu-item{align-items:center;gap:calc(var(--step) * .75);width:100%;padding:.3rem calc(var(--step) * 1.5);font:inherit;text-align:left;color:var(--ink);cursor:pointer;background:0 0;border:0;border-radius:0;font-size:13px;display:flex}.context-menu-item:hover{background:color-mix(in oklab, var(--cobalt) 10%, transparent)}.context-menu-destructive .context-menu-item{color:var(--failure)}.context-menu-destructive .context-menu-item:hover{background:color-mix(in oklab, var(--failure) 12%, transparent)}.context-menu-tick{width:8px;font-family:var(--utility);color:var(--cobalt);flex:none;font-size:12px}.context-menu-label{white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.changeset-row-scope{font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;padding:0 calc(var(--step) * .5);border:1px solid var(--rule);color:var(--quiet);border-radius:2px;flex:none;font-size:10px}.changeset-scope-view{color:var(--cobalt);border-color:color-mix(in oklab, var(--cobalt) 40%, transparent)}.prompt-dialog-form{gap:calc(var(--step) * .75);text-align:left;flex-direction:column;display:flex}.prompt-dialog-form label{font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--quiet);font-size:10px}.prompt-dialog-form input{padding:calc(var(--step) * .75);font:inherit;color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);border-radius:2px;font-size:13px}.prompt-dialog-form input:focus{border-color:var(--cobalt)}.prompt-dialog-form .confirm-dialog-actions{margin-top:calc(var(--step) * .5)}.open-questions{gap:var(--step);padding:var(--step) 0;flex-direction:column;display:flex}.open-questions-scope,.open-questions-catalogue{color:var(--quiet);margin:0;font-size:.78rem}.question-list{gap:calc(var(--step) * .75);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.question-row{gap:calc(var(--step) * .25);flex-direction:column;display:flex}.question-text{font-size:.85rem;line-height:1.35}.question-meta{gap:var(--step);align-items:baseline;display:flex}.question-authority{letter-spacing:.04em;text-transform:uppercase;color:var(--quiet);border:1px solid var(--quiet);padding:0 calc(var(--step) * .75);border-radius:999px;font-size:.68rem;font-weight:600}.question-since{color:var(--quiet);font-size:.72rem}.saved-layout-pill{inset:auto auto var(--step) var(--step);z-index:4;align-items:center;gap:var(--step);max-width:calc(100% - var(--step) * 2);border:1px solid var(--rule-firm);background:var(--sheet);font-family:var(--utility);color:var(--ink);border-radius:999px;padding:.35rem .7rem;font-size:12px;display:flex;position:absolute}.saved-layout-pill span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.saved-layout-pill button{color:var(--cobalt);font-family:inherit;font-size:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:0;text-decoration:underline}.saved-layout-pill button:hover{color:var(--ink)}.zoom-controls{inset:auto var(--step) var(--step) auto;z-index:4;border:1px solid var(--rule-firm);border-radius:calc(var(--step) * .75);background:var(--sheet);align-items:stretch;display:flex;position:absolute;overflow:hidden}.zoom-controls button{color:var(--ink);font-family:var(--utility);cursor:pointer;background:0 0;border:none;padding:.3rem .6rem;font-size:13px;line-height:1}.zoom-controls button+button{border-left:1px solid var(--rule)}.zoom-controls button:hover{background:var(--paper)}.tree-row-staged .tree-label{font-style:italic}.tree-row-staged-delete .tree-label{text-decoration:line-through}.tree-staged{font-family:var(--utility);letter-spacing:.06em;text-transform:uppercase;color:var(--quiet);border:1px solid var(--rule-firm);border-radius:2px;flex:none;padding:0 .3em;font-size:9px}.tree-row-active .tree-staged{color:inherit;opacity:.75;border-color:currentColor}
1
+ :root{--paper:#e8eef0;--ink:#182228;--eucalyptus:#416f65;--ochre:#8c4d18;--cobalt:#2457a6;--failure:#a3403a;--sheet:color-mix(in oklab, var(--paper) 55%, white);--rule:color-mix(in oklab, var(--ink) 16%, transparent);--rule-firm:color-mix(in oklab, var(--ink) 34%, transparent);--quiet:color-mix(in oklab, var(--ink) 62%, var(--paper));--display:"Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, serif;--body:"Avenir Next", Avenir, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--utility:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--step:.5rem;--rail-width:264px;--form-label-width:6rem;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--paper);color:var(--ink);font-family:var(--body);-webkit-font-smoothing:antialiased;font-size:15px;line-height:1.5}:focus-visible{outline:3px solid var(--cobalt);outline-offset:2px}.offscreen{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.visual-shell{background:var(--paper);min-width:0;height:100dvh;color:var(--ink);grid-template-rows:auto minmax(0,1fr);display:grid;overflow:hidden}.command-strip{z-index:10;justify-content:space-between;align-items:center;gap:calc(var(--step) * 2);min-height:48px;padding:calc(var(--step) * .75) calc(var(--step) * 2);border-bottom:1px solid var(--rule);background:var(--sheet);flex-wrap:wrap;display:flex;position:relative}.command-identity,.command-actions{align-items:center;gap:var(--step);min-width:0;display:flex}.session-description{min-width:0;color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;margin:0;font-size:13px;overflow:hidden}.command-identity{flex:10rem}.command-actions{flex-wrap:wrap;flex:0 auto;justify-content:flex-end}.command-identity h1{min-width:8ch;font-family:var(--display);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:15px;line-height:1.2;overflow:hidden}.command-actions select,.command-actions button,.command-actions .quick-filter{min-height:32px;font-family:var(--utility);letter-spacing:.08em;color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;padding:0 .7rem;font-size:12px}.command-actions select{text-overflow:ellipsis;max-width:12rem}.command-actions .quick-filter{cursor:text;width:160px}.command-actions .quick-filter::placeholder{color:var(--quiet)}.command-actions select{padding-right:.35rem}.command-actions select:hover:enabled,.command-actions button:hover:enabled,.command-actions .quick-filter:hover,.command-actions .quick-filter:focus{border-color:var(--cobalt)}.command-actions select:disabled,.command-actions button:disabled{color:var(--quiet);border-color:var(--rule);cursor:not-allowed;background:0 0}.command-actions button[aria-expanded=true]{color:var(--paper);background:var(--cobalt);border-color:var(--cobalt)}.command-actions .end-session:hover:enabled{color:var(--paper);background:var(--failure);border-color:var(--failure)}.connection-state{font-family:var(--utility);letter-spacing:.14em;text-transform:uppercase;color:var(--quiet);flex:none;font-size:11px}.end-transition-status{max-width:28rem;font-family:var(--utility);color:var(--quiet);font-size:11px;line-height:1.25}.end-transition-status:empty{display:none}.direction-notice{max-width:16rem;font-family:var(--utility);color:var(--quiet);font-size:11px;line-height:1.25}.direction-notice:empty{display:none}.authority{white-space:nowrap;font-family:var(--utility);letter-spacing:.14em;text-transform:uppercase;color:var(--eucalyptus);flex:none;margin:0;font-size:11px}.authority:before{content:"";vertical-align:0;background:currentColor;width:.5rem;height:.5rem;margin-right:.5rem;display:inline-block}.beta-badge{font-family:var(--utility);letter-spacing:.1em;text-transform:uppercase;color:var(--ochre);border:1px solid var(--ochre);flex:none;padding:.05rem .4rem;font-size:10px;font-weight:600}.session-details{align-items:flex-start;gap:calc(var(--step) * 2);padding:var(--step) calc(var(--step) * 2) calc(var(--step) * 1.5);border-bottom:1px solid var(--rule);background:var(--sheet);display:flex;position:absolute;top:100%;left:0;right:0;box-shadow:0 12px 28px #1323391f}.session-details[hidden]{display:none}.session-details p{max-width:90ch;color:var(--quiet);margin:0}.details-close{min-height:28px;font-family:var(--utility);letter-spacing:.08em;color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;flex:none;margin-left:auto;padding:0 .6rem;font-size:11px}.details-close:hover{border-color:var(--cobalt)}.attention-count{background:var(--cobalt);color:#fff;text-align:center;border-radius:999px;min-width:1.25rem;padding:0 .35rem;font-size:11px}.workspace{grid-template-columns:var(--rail-width) minmax(0, 1fr) auto var(--conversation-width);min-width:0;min-height:0;display:grid;overflow:hidden}.workspace[data-rail=hidden]{grid-template-columns:22px minmax(0, 1fr) auto var(--conversation-width)}.rail-reopen{align-items:center;gap:var(--step);width:22px;height:100%;padding:calc(var(--step) * 1.5) 0;border:none;border-right:1px solid var(--rule);background:var(--sheet);color:var(--quiet);cursor:pointer;flex-direction:column;font-size:12px;display:flex}.rail-reopen:hover,.rail-reopen:focus-visible{color:var(--cobalt)}.rail-hide{min-height:1.75rem;padding:0 calc(var(--step) * .75);color:var(--quiet);cursor:pointer;background:0 0;border:none;flex:none;font-size:12px;line-height:1}.rail-hide:hover,.rail-hide:focus-visible{color:var(--cobalt)}.view-tree{border-right:1px solid var(--rule);background:var(--sheet);grid-template-rows:auto minmax(0,1fr);min-width:0;min-height:0;display:grid}.view-tree-head{align-items:center;gap:calc(var(--step) * 1);padding:var(--step) calc(var(--step) * 1.5);border-bottom:1px solid var(--rule);display:flex}.view-tree-filter{min-width:0;min-height:1.75rem;font-family:var(--utility);color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);border-radius:0;flex:1;padding:0 .5rem;font-size:12px}.view-tree-new{width:1.75rem;height:1.75rem;color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;flex:none;place-items:center;padding:0;display:grid}.view-tree-new:hover{border-color:var(--cobalt);color:var(--cobalt)}.view-tree-body{padding:var(--step) 0 calc(var(--step) * 2);overflow:auto}.tree-list{margin:0;padding:0;list-style:none}.tree-row{align-items:center;gap:calc(var(--step) * .75);width:100%;padding:.18rem calc(var(--step) * 1.5);font:inherit;text-align:left;color:var(--ink);cursor:pointer;background:0 0;border:0;border-radius:0;font-size:13px;display:flex}.tree-row:hover{background:color-mix(in oklab, var(--cobalt) 10%, transparent)}.tree-branch{font-family:var(--utility);color:var(--quiet);font-size:12px}.tree-depth-0{letter-spacing:.08em;text-transform:uppercase;color:var(--quiet)}.tree-depth-1{padding-left:calc(var(--step) * 3)}.tree-depth-2{padding-left:calc(var(--step) * 5.5)}.tree-row-active,.tree-row-active:hover{background:var(--cobalt);color:var(--paper)}.tree-row-quiet{color:var(--quiet)}.tree-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.subject-slots{margin-top:12px}.subject-slots-heading{font-family:var(--utility);text-transform:uppercase;letter-spacing:.06em;color:var(--quiet);align-items:baseline;gap:6px;margin:0 0 4px;font-size:11px;display:flex}.subject-slots-list{grid-template-columns:auto 1fr;gap:2px 10px;margin:0;font-size:12px;display:grid}.subject-slot-row{display:contents}.subject-slot-name{font-family:var(--utility);color:var(--quiet)}.subject-slot-value{margin:0}.subject-slot-vacant{color:var(--quiet);font-style:italic}.tree-fold{color:var(--quiet);flex:none;font-size:9px;line-height:1}.tree-count{font-family:var(--utility);color:var(--quiet);font-variant-numeric:tabular-nums;flex:none;font-size:10px}.tree-row>svg{opacity:.4}.tree-row-active>svg{opacity:1}.tree-row-active .tree-count{color:inherit;opacity:.75}.tree-swatch{background:var(--paper);border:1px solid var(--rule-firm);flex:none;width:.625rem;height:.625rem}.tree-empty{padding:.3rem calc(var(--step) * 3);color:var(--quiet);font-size:12px}.diagram-workspace{background:var(--paper);grid-template-rows:minmax(0,1fr) auto;min-width:0;min-height:0;display:grid;position:relative;overflow:hidden}.canvas-controls{inset:var(--step) var(--step) auto auto;z-index:5;align-items:center;gap:var(--step);display:flex;position:absolute}.canvas{width:100%;min-width:0;height:100%;min-height:0;position:relative}.diagram-workspace>.faults{z-index:4;max-height:50%;position:absolute;inset:auto 0 0;overflow:auto}.diagram-workspace>.filter-pill{inset:var(--step) auto auto var(--step);z-index:4;align-items:center;gap:var(--step);max-width:min(52ch, calc(100% - var(--step) * 2));border:1px solid var(--rule-firm);background:var(--sheet);font-family:var(--utility);color:var(--ink);border-radius:999px;padding:.35rem .7rem;font-size:12px;display:flex;position:absolute}.filter-pill span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.filter-pill code{font-weight:700}.filter-pill button{color:var(--cobalt);font-family:inherit;font-size:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:0;text-decoration:underline}.filter-pill button:hover{color:var(--ink)}.canvas>.filter-empty-pill{z-index:4;align-items:center;gap:var(--step);max-width:min(52ch, calc(100% - var(--step) * 2));border:1px solid var(--rule-firm);background:var(--sheet);font-family:var(--utility);color:var(--ink);border-radius:999px;padding:.35rem .7rem;font-size:12px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.filter-empty-pill span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.filter-empty-pill code{font-weight:700}.filter-empty-pill button{color:var(--cobalt);font-family:inherit;font-size:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:0;text-decoration:underline}.filter-empty-pill button:hover{color:var(--ink)}.conversation-separator{z-index:3;cursor:col-resize;touch-action:none;width:10px;height:100%;position:relative}.conversation-separator:before{background:var(--rule);content:"";width:1px;position:absolute;inset:0 auto 0 4px}.conversation-separator:hover:before,.conversation-separator:focus-visible:before{background:var(--cobalt);width:2px}.waiting{padding:calc(var(--step) * 4);font-family:var(--utility);letter-spacing:.1em;text-transform:uppercase;color:var(--quiet);margin:0;font-size:12px}.section-stack{border-left:1px solid var(--rule);background:var(--sheet);flex-direction:column;min-width:0;min-height:0;display:flex;overflow:hidden}.stack-rim{border-bottom:1px solid var(--rule);flex:none;justify-content:flex-end;display:flex}.conversation-hide{min-height:22px;padding:0 calc(var(--step) * 1.5);color:var(--quiet);cursor:pointer;background:0 0;border:none;font-size:12px;line-height:1}.conversation-hide:hover,.conversation-hide:focus-visible{color:var(--cobalt)}.conversation-reopen{align-items:center;gap:var(--step);width:22px;height:100%;padding:calc(var(--step) * 1.5) 0;border:none;border-left:1px solid var(--rule);background:var(--sheet);color:var(--quiet);cursor:pointer;flex-direction:column;font-size:12px;display:flex}.conversation-reopen:hover,.conversation-reopen:focus-visible{color:var(--cobalt)}.attention-choice{border:1px solid var(--cobalt);min-width:1.25rem;color:var(--cobalt);text-align:center;border-radius:999px;padding:0 .35rem;font-size:11px}.stack-section{grid-template-rows:auto minmax(0,1fr);min-height:0;display:grid;overflow:hidden}.stack-section-properties{flex:auto}.stack-section-changes{flex:0 0 var(--changes-height,200px)}.stack-section-chat{flex:0 0 var(--chat-height,300px)}.section-stack:not(:has(>.stack-section-properties))>.stack-section:nth-child(1 of .stack-section:not(.stack-section-palette)){flex:auto}.section-stack>.stack-section-palette:only-child{flex:auto;max-height:none}.stack-section-palette{flex:0 auto;max-height:45%}.stack-section-questions{min-height:calc(var(--step) * 16);flex:1 1 0;max-height:50%}:is(.stack-section-questions:has(.section-empty),.stack-section-questions:has(>.section-body[hidden]),.stack-section-changes:has(>.section-body:empty),.stack-section-changes:has(>.section-body>.section-empty)){flex:none;min-height:0}.kind-palette{padding:calc(var(--step) * .5) 0 calc(var(--step) * .75)}.kind-palette-layer-name{width:100%;padding:calc(var(--step) * .75) calc(var(--step) * 1.5) calc(var(--step) * .25);text-align:left;cursor:pointer;font-family:var(--utility);letter-spacing:.08em;color:var(--quiet);background:0 0;border:none;margin:0;font-size:11px;display:block}.kind-palette-caret{width:1em;display:inline-block}.kind-palette-rows{margin:0;padding:0;list-style:none}.kind-palette-row{align-items:center;gap:calc(var(--step) * .75);width:100%;padding:.3rem calc(var(--step) * 1.5);font:inherit;text-align:left;color:var(--ink);cursor:grab;background:0 0;border:0;border-radius:0;font-size:13px;display:flex}.kind-palette-row:hover,.kind-palette-row:focus-visible{background:color-mix(in oklab, var(--cobalt) 10%, transparent)}.kind-palette-row img{flex:none}.kind-palette-stack{border:1px solid var(--ink);background:var(--paper);border-radius:2px;flex:none;width:14px;height:14px;position:relative}.kind-palette-stack:before{content:"";border:1px solid color-mix(in oklab, var(--ink) 45%, transparent);background:var(--paper);z-index:-1;border-radius:2px;width:100%;height:100%;position:absolute;top:-3px;left:3px}.kind-palette-slots{color:color-mix(in oklab, var(--ink) 60%, transparent);margin-left:auto;font-size:11px}.instance-draft-slots{margin:0;padding:0;list-style:none}.instance-draft-slot{align-items:center;gap:calc(var(--step) * .75);margin-bottom:calc(var(--step) * .75);grid-template-columns:10rem 1fr;display:grid}.instance-draft-slot>label{align-items:baseline;gap:calc(var(--step) * .5);display:flex}.instance-draft-slot-name{font-weight:600}.instance-draft-required,.instance-draft-context{border-radius:2px;padding:0 .35em;font-size:11px}.instance-draft-required{color:var(--failure);border:1px solid color-mix(in oklab, var(--failure) 40%, transparent)}.instance-draft-context{color:color-mix(in oklab, var(--ink) 65%, transparent);border:1px solid color-mix(in oklab, var(--ink) 25%, transparent)}.instance-draft-new{gap:calc(var(--step) * .5);grid-column:2;display:flex}.instance-draft-wiring h4{margin:calc(var(--step) * 1.5) 0 calc(var(--step) * .5);color:color-mix(in oklab, var(--ink) 65%, transparent);font-size:12px}.kind-palette-bound-name{padding-left:calc(var(--step) * 2.5);color:color-mix(in oklab, var(--ink) 65%, transparent);font-size:12px}.section-head{align-items:center;gap:var(--step);min-height:32px;padding-right:calc(var(--step) * 1.5);border-bottom:1px solid var(--rule);font-size:inherit;margin:0;font-weight:400;display:flex}.section-toggle{align-items:center;gap:calc(var(--step) * .75);min-height:32px;padding:0 calc(var(--step) * 1.5);color:var(--ink);cursor:pointer;font-family:var(--utility);letter-spacing:.08em;background:0 0;border:none;font-size:12px;display:flex}.section-chevron{color:var(--quiet);font-size:10px}.section-meta{font-family:var(--utility);color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;margin-left:auto;font-size:11px;overflow:hidden}.section-body{min-height:0;overflow:auto}.section-body[hidden]{display:none}.section-empty{padding:calc(var(--step) * 1.5);color:var(--quiet);margin:0;font-size:13px}.section-splitter{cursor:row-resize;background:0 0;border:none;flex:0 0 7px;height:7px;position:relative}.section-splitter:after{content:"";background:var(--rule);position:absolute;inset:3px 0}.section-splitter:hover:after,.section-splitter:focus-visible:after{background:var(--cobalt);inset:2px 0}.section-splitter:focus-visible{outline:none}.talk{background:var(--sheet);grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);min-width:0;min-height:0;display:grid;overflow:hidden}.session-foot{align-items:center;gap:var(--step);padding:0 calc(var(--step) * 1.5) calc(var(--step) * 1.5);display:flex}.session-foot .end-session{margin-left:auto}.talk[hidden]{display:none}.conversation-scroll{min-width:0;min-height:0;overflow:auto}.subject-inspector{min-width:0;padding:calc(var(--step) * 1.5);border-bottom:1px solid var(--rule);background:color-mix(in srgb, var(--sheet) 92%, var(--cobalt) 8%)}.subject-heading-row{justify-content:space-between;align-items:flex-start;gap:var(--step);min-width:0;display:flex}.subject-heading-row>:first-child,.subject-heading-row h2{min-width:0}.subject-type{margin:0 0 calc(var(--step) * .25);color:var(--quiet);letter-spacing:.12em;text-transform:uppercase;font-size:10px;font-weight:700}.subject-heading-row h2{font-family:var(--display);overflow-wrap:anywhere;margin:0;font-size:16px;line-height:1.25}.subject-facts{gap:calc(var(--step) * .5);margin:var(--step) 0;display:grid}.subject-facts>div{gap:var(--step);grid-template-columns:minmax(5.5rem,auto) minmax(0,1fr);display:grid}.subject-facts dt{color:var(--quiet);font-size:11px}.subject-facts dd{overflow-wrap:anywhere;min-width:0;margin:0}.subject-description p{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.description-clamped{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.subject-description button,.subject-navigate,.subject-clear{margin-top:calc(var(--step) * .5);min-height:28px}.subject-connect{margin-top:calc(var(--step) * .5);margin-right:calc(var(--step) * .5);min-height:28px}.connection-panel{z-index:2;top:calc(var(--step) * 1.5);max-width:min(560px, calc(100% - var(--step) * 4));padding:calc(var(--step) * 1.5) calc(var(--step) * 2);border:1px solid var(--rule);background:var(--sheet);border-radius:4px;position:absolute;left:50%;transform:translate(-50%);box-shadow:0 2px 12px #0000001f}.connection-prompt{margin:0 0 calc(var(--step) * 1.5)}.connection-empty{margin:0 0 calc(var(--step) * 1.5);color:var(--quiet)}.changeset-fault-summary{margin:calc(var(--step) * 1.5) calc(var(--step) * 2.5) 0;color:var(--failure);font-weight:600}.subject-delete{margin-top:calc(var(--step) * .5);margin-right:calc(var(--step) * .5);min-height:28px}.subject-draft-open{border:1px solid var(--rule-firm);background:var(--sheet);min-height:28px;color:var(--ink);cursor:pointer;font-family:var(--utility);letter-spacing:.08em;border-radius:0;padding:0 .7rem;font-size:12px}.subject-draft-open:hover{border-color:var(--cobalt)}.canvas-controls .quick-filter{border:1px solid var(--rule-firm);background:var(--sheet);width:min(220px,30vw);min-height:28px;color:var(--ink);font-family:var(--utility);border-radius:0;padding:0 .6rem;font-size:12px}.canvas-controls .quick-filter::placeholder{color:var(--quiet)}.canvas-controls .canvas-select{border:1px solid var(--rule-firm);background:var(--sheet);min-height:28px;color:var(--ink);font-family:var(--utility);border-radius:0;padding:0 .4rem;font-size:12px}.canvas-controls .canvas-select:focus-visible{outline:2px solid var(--cobalt);outline-offset:1px}.subject-draft-panel{z-index:6;top:calc(var(--step) * 2 + 28px);right:calc(var(--step) * 1.5);width:min(340px, calc(100% - var(--step) * 4));padding:calc(var(--step) * 1.5) calc(var(--step) * 2);border:1px solid var(--rule);background:var(--sheet);border-radius:4px;position:absolute;box-shadow:0 2px 12px #0000001f}.subject-draft-field{margin-bottom:calc(var(--step) * 1.5);display:block}.subject-draft-field>span{margin-bottom:calc(var(--step) * .5);display:block}.subject-draft-field>input,.subject-draft-field>select{width:100%}.subject-draft-id{margin:0 0 calc(var(--step) * 1.5);color:var(--quiet)}.connection-kinds{gap:calc(var(--step) * .75);margin:0 0 calc(var(--step) * 1.5);flex-wrap:wrap;padding:0;list-style:none;display:flex}.connection-search-label{margin:0 0 calc(var(--step) * .5);font-family:var(--utility);color:var(--quiet);font-size:12px;display:block}.connection-search{width:100%;margin:0 0 calc(var(--step) * 1);padding:calc(var(--step) * .5) calc(var(--step) * .75);border:1px solid var(--rule-firm);background:var(--sheet);color:var(--ink);font-family:var(--utility);border-radius:0;display:block}.connection-targets{gap:calc(var(--step) * .5);margin:0 0 calc(var(--step) * 1.5);flex-direction:column;max-height:200px;padding:0;list-style:none;display:flex;overflow-y:auto}.connection-target-id,.connection-targets-more{color:var(--quiet);font-family:var(--utility);font-size:12px}.ledger{padding:calc(var(--step) * 2) calc(var(--step) * 2.5);min-height:0;margin:0;list-style:none;overflow:visible}.ledger .empty p{color:var(--quiet);font-family:var(--utility);margin:0;font-size:12px}.said{padding:0 0 calc(var(--step) * 1.75) calc(var(--step) * 1.5);border-left:2px solid var(--rule)}.said+.said{padding-top:calc(var(--step) * 1.75)}.said-reviewer{border-left-color:var(--cobalt)}.said-agent{border-left-color:var(--eucalyptus)}.said-session{border-left-color:var(--ochre)}.who{font-family:var(--utility);letter-spacing:.16em;text-transform:uppercase;color:var(--quiet);margin:0 0 .15rem;font-size:10px}.words{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.faults{padding:calc(var(--step) * 1.5) calc(var(--step) * 2.5);border-top:1px solid var(--failure);background:color-mix(in oklab, var(--failure) 8%, var(--sheet))}.faults-title{margin:0 0 var(--step);color:var(--failure);font-size:13px}.faults ul{font-family:var(--utility);margin:0;padding-left:1.1rem;font-size:11px;line-height:1.6}.faults .code{font-weight:700}.faults .where{color:var(--quiet);margin-left:.4rem}.choices{padding:calc(var(--step) * 1.5) calc(var(--step) * 2.5);border-top:1px solid var(--rule)}.question{margin:0 0 var(--step);font-family:var(--display);font-size:1.05rem}.choices ul{gap:var(--step);margin:0;padding:0;list-style:none;display:grid}.choices button{text-align:left;width:100%;font-family:var(--body);color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;padding:.5rem .7rem;font-size:14px;display:block}.choices button:hover:enabled{border-color:var(--cobalt)}.choices button:disabled{color:var(--quiet);cursor:not-allowed}.choices .detail{color:var(--quiet);font-size:12px;display:block}.composer{padding:calc(var(--step) * 1.5) calc(var(--step) * 2.5) calc(var(--step) * 2);border-top:1px solid var(--rule)}.composer textarea{resize:vertical;width:100%;font-family:var(--body);color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);border-radius:0;padding:.55rem .65rem;font-size:14px;display:block}.composer textarea:disabled{color:var(--quiet);background:color-mix(in oklab, var(--paper) 70%, var(--sheet));cursor:not-allowed}.composer-foot{justify-content:space-between;align-items:center;gap:var(--step);margin-top:var(--step);display:flex}.agent-status{align-items:center;gap:calc(var(--step) * .5);font-family:var(--utility);letter-spacing:.14em;text-transform:uppercase;color:var(--quiet);margin:0;font-size:10px;display:flex}.agent-spinner{border:1px solid;border-right-color:#0000;border-radius:50%;flex:none;width:.75rem;height:.75rem;animation:.7s linear infinite agent-spinner-turn}@keyframes agent-spinner-turn{to{transform:rotate(1turn)}}.composer button{font-family:var(--utility);letter-spacing:.08em;color:var(--paper);background:var(--cobalt);border:1px solid var(--cobalt);cursor:pointer;border-radius:0;padding:.45rem 1.1rem;font-size:12px}.composer button:disabled{color:var(--quiet);border-color:var(--rule-firm);cursor:not-allowed;background:0 0}.subject-chip{justify-content:space-between;align-items:center;gap:var(--step);margin-bottom:calc(var(--step) * .75);padding:calc(var(--step) * .5) calc(var(--step) * .75);border:1px solid var(--cobalt);color:var(--cobalt);border-radius:999px;display:flex}.subject-chip span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.subject-chip button{min-height:24px;padding:0 calc(var(--step) * .5);color:inherit;background:0 0;border:0;flex:none}.filter-grid{gap:calc(var(--step) * 1.5);grid-template-columns:repeat(auto-fill,minmax(200px,1fr));display:grid}.filter-field{gap:calc(var(--step) * .75);flex-direction:column;display:flex}.filter-field>label,.filter-field legend{font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--quiet);font-size:11px}.tag-input{align-items:center;gap:var(--step);padding:calc(var(--step) * .5);border:1px solid var(--rule-firm);background:var(--paper);border-radius:2px;flex-wrap:wrap;display:flex}.tag-input input{min-width:80px;font:inherit;background:0 0;border:none;flex:1;font-size:15px}.tag-input input:focus{outline:none}.tag-chip{background:var(--cobalt);color:var(--paper);border-radius:2px;align-items:center;gap:.4rem;padding:.2rem .6rem;font-size:13px;display:inline-flex}.tag-chip button{color:currentColor;cursor:pointer;background:0 0;border:none;min-width:0;min-height:0;margin:0;padding:0;font-size:16px;line-height:1;display:inline}.tag-chip button:hover{opacity:.8}.filter-field select{font-family:var(--body);color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);cursor:pointer;border-radius:0;padding:.4rem .7rem;font-size:15px}.filter-field select:hover{border-color:var(--cobalt)}.filter-checkbox-group{border:none;margin:0;padding:0}.filter-checkbox-option{cursor:pointer;align-items:center;gap:.5rem;padding:.4rem 0;font-size:15px;display:flex}.filter-checkbox-option input{cursor:pointer}.bottom-panel{border-top:1px solid var(--rule-firm);background:var(--sheet);flex-direction:column;min-height:0;display:flex}.bottom-panel-tabs{align-items:stretch;gap:0;min-height:32px;display:flex}.bottom-panel-tab{min-height:32px;font-family:var(--utility);letter-spacing:.08em;color:var(--quiet);border:none;border-right:1px solid var(--rule);cursor:pointer;background:0 0;border-bottom:2px solid #0000;padding:0 .9rem;font-size:12px}.bottom-panel-tab:hover{color:var(--ink)}.bottom-panel-tab[aria-selected=true]{color:var(--ink);background:var(--paper);border-bottom-color:var(--cobalt)}.bottom-panel-summary{font-family:var(--utility);color:var(--quiet);align-items:center;padding-inline:.9rem;font-size:12px;display:flex}.bottom-panel-collapse{min-width:32px;min-height:32px;color:var(--quiet);border:none;border-left:1px solid var(--rule);cursor:pointer;background:0 0;margin-left:auto;font-size:12px}.bottom-panel-collapse:hover{color:var(--ink)}.bottom-panel-body{border-top:1px solid var(--rule);background:var(--paper);min-height:0;max-height:42dvh;overflow:auto}.query-tab{gap:calc(var(--step) * 2);padding:calc(var(--step) * 1.5);grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr);display:grid}.query-tab>div{min-width:0}.query-tab h3{margin:0 0 var(--step);font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--quiet);font-size:11px;font-weight:400}.query-tab-fields{gap:calc(var(--step) * 1.5);flex-direction:column;display:flex}.query-tab-outcome>h3:not(:first-child){margin-top:calc(var(--step) * 2)}.query-match-count{font-family:var(--display);margin:0;font-size:15px}.query-match-count strong{font-size:28px;font-weight:400;line-height:1}.query-outcome-stale,.query-outcome-note{margin:var(--step) 0 0;color:var(--quiet);font-size:13px}.query-outcome-empty{margin:var(--step) 0 0;color:var(--ochre);font-size:13px}.query-exclusions{margin:0;padding:0;list-style:none}.query-exclusions>li+li{margin-top:var(--step)}.query-exclusions ul{margin:calc(var(--step) * .5) 0 0;padding-left:calc(var(--step) * 2);color:var(--quiet);font-size:13px;list-style:none}.query-exclusion-facet{font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--ink);font-size:11px}.query-exclusion-count{font-family:var(--utility);color:var(--quiet);font-size:11px}.query-exclusion-more{font-style:italic}.query-tab-document{flex-direction:column;min-height:0;display:flex}.query-document{min-height:0;max-height:22dvh;padding:var(--step);border:1px solid var(--rule);background:var(--sheet);font-family:var(--utility);flex:1;margin:0;font-size:12px;line-height:1.5;overflow:auto}.query-tab-actions{align-items:center;gap:var(--step);margin-top:var(--step);display:flex}.query-tab-actions button{min-height:32px;font-family:var(--utility);letter-spacing:.08em;color:var(--paper);background:var(--cobalt);border:1px solid var(--cobalt);cursor:pointer;border-radius:0;padding:0 .7rem;font-size:12px}.query-tab-actions button:disabled{color:var(--quiet);background:var(--paper);border-color:var(--rule-firm);cursor:default}.query-stage-status{color:var(--quiet);font-size:13px}@media (max-width:899px){.command-strip{gap:calc(var(--step) * .5);padding-inline:var(--step)}.command-identity,.command-actions{gap:calc(var(--step) * .5)}.workspace{grid-template-rows:auto minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);min-height:0}.view-tree{border-right:0;border-bottom:1px solid var(--rule);max-height:34dvh}.conversation-separator{display:none}.query-tab{grid-template-columns:minmax(0,1fr)}.bottom-panel-body{max-height:30dvh}.section-stack{border-top:1px solid var(--rule);border-left:0;max-height:56dvh}.conversation-reopen{border-left:0;border-top:1px solid var(--rule);flex-direction:row;justify-content:center;width:auto;height:auto;min-height:24px;padding:0}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.save-view-control{display:contents}.save-view-toggle{padding:0 calc(var(--step) * .75rem);border:1px solid var(--rule-firm);background:var(--paper);height:32px;color:var(--ink);cursor:pointer;border-radius:2px;font-size:13px}.save-view-toggle:hover:not(:disabled){border-color:var(--rule);background:color-mix(in oklab, var(--paper) 90%, var(--ink))}.save-view-toggle:disabled{opacity:.5;cursor:not-allowed}.save-view-control{z-index:20;background:color-mix(in oklab, var(--ink) 22%, transparent);place-items:center;display:grid;position:fixed;inset:0}.save-view-panel{background:var(--sheet);border:1px solid var(--rule-firm);border-radius:4px;box-shadow:0 8px 28px #1323392e}.save-view-panel-body{padding:calc(var(--step) * 1.5);min-width:300px}.save-view-form{gap:calc(var(--step) * 1);flex-direction:column;display:flex}.save-view-form div{gap:calc(var(--step) * .5);flex-direction:column;display:flex}.save-view-form label{color:var(--ink);font-size:12px;font-weight:500}.save-view-form input,.save-view-form textarea{padding:calc(var(--step) * .5);border:1px solid var(--rule);font-family:var(--body);border-radius:2px;font-size:13px}.save-view-actions{gap:calc(var(--step) * 1);margin-top:calc(var(--step) * .5);display:flex}.save-view-actions button{padding:calc(var(--step) * .5) calc(var(--step) * 1);border:1px solid var(--rule-firm);background:var(--paper);color:var(--ink);cursor:pointer;border-radius:2px;flex:1;font-size:13px}.save-view-actions button:hover:not(:disabled){background:color-mix(in oklab, var(--paper) 85%, var(--ink))}.save-view-notice{align-items:center;gap:calc(var(--step) * .75);padding:calc(var(--step) * .75) calc(var(--step) * 1.5);background:color-mix(in oklab, var(--eucalyptus) 15%, var(--sheet));border:1px solid var(--eucalyptus);color:var(--ink);border-radius:4px;font-size:13px;display:flex}.save-view-notice button{padding:0 calc(var(--step) * .5);color:var(--eucalyptus);cursor:pointer;background:0 0;border:none;margin-left:auto;font-size:11px;text-decoration:underline}.confirm-dialog-backdrop{z-index:1000;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.confirm-dialog{background:var(--sheet);border:1px solid var(--rule-firm);padding:calc(var(--step) * 2);text-align:center;border-radius:8px;max-width:400px;box-shadow:0 8px 24px #00000029}.confirm-dialog h2{margin:0 0 calc(var(--step) * 1) 0;font-size:16px}.confirm-dialog p{margin:0 0 calc(var(--step) * 1.5) 0;color:var(--quiet);font-size:13px}.confirm-dialog-actions{gap:calc(var(--step) * 1);display:flex}.confirm-dialog-actions button{padding:calc(var(--step) * .75);border:1px solid var(--rule-firm);background:var(--paper);color:var(--ink);cursor:pointer;border-radius:2px;flex:1;font-size:13px}.confirm-dialog-actions button:hover{background:color-mix(in oklab, var(--paper) 85%, var(--ink))}.changeset-tray{padding:calc(var(--step) * 1.5) calc(var(--step) * 2.5);border-top:1px solid var(--rule);background:color-mix(in srgb, var(--sheet) 92%, var(--cobalt) 8%)}.changeset-heading-row{justify-content:space-between;align-items:baseline;gap:var(--step);display:flex}.changeset-heading-row h2{font-family:var(--display);margin:0;font-size:15px}.changeset-discard-all{color:var(--eucalyptus);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;text-decoration:underline}.changeset-history-controls{align-items:baseline;gap:var(--step);display:flex}.changeset-undo,.changeset-redo{color:var(--eucalyptus);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;text-decoration:underline}.changeset-undo:disabled,.changeset-redo:disabled{color:var(--quiet);cursor:not-allowed;text-decoration:none}.changeset-rows{margin:var(--step) 0 0;gap:calc(var(--step) * .75);padding:0;list-style:none;display:grid}.changeset-row{padding:calc(var(--step) * .75);border:1px solid var(--rule-firm);background:var(--paper);border-radius:2px}.changeset-row.conflicted{border-color:var(--ochre);background:color-mix(in oklab, var(--ochre) 6%, var(--paper))}.changeset-row-conflict{margin:calc(var(--step) * .5) 0 0;font-family:var(--utility);color:var(--ochre);font-size:11px}.changeset-row-line{justify-content:space-between;align-items:center;gap:var(--step);display:flex}.changeset-row-label{overflow-wrap:anywhere;min-width:0;font-family:var(--utility);color:var(--ink);font-size:12px}.changeset-row-discard{color:var(--eucalyptus);cursor:pointer;background:0 0;border:none;flex:none;padding:0;font-size:11px;text-decoration:underline}.changeset-row-diagnostics,.changeset-batch-diagnostics{margin:calc(var(--step) * .5) 0 0;font-family:var(--utility);color:var(--failure);padding-left:1.1rem;font-size:11px}.changeset-batch-diagnostics{margin:0 0 var(--step)}.changeset-row-diagnostics .code,.changeset-batch-diagnostics .code{font-weight:700}.changeset-row-diagnostics .where,.changeset-batch-diagnostics .where{color:var(--quiet);margin-left:.4rem}.changeset-actions{margin-top:var(--step)}.changeset-commit{width:100%;padding:calc(var(--step) * .75);border:1px solid var(--cobalt);background:var(--cobalt);color:var(--paper);cursor:pointer;border-radius:2px;font-size:13px}.changeset-commit:disabled{border-color:var(--rule-firm);color:var(--quiet);cursor:not-allowed;background:0 0}.changeset-notice{margin-top:var(--step);padding:calc(var(--step) * .75) calc(var(--step) * 1);border:1px solid var(--eucalyptus);background:color-mix(in oklab, var(--eucalyptus) 15%, var(--sheet));color:var(--ink);border-radius:4px;font-size:12px}.changeset-notice p{margin:0 0 calc(var(--step) * .25);font-weight:700}.changeset-notice ul{font-family:var(--utility);margin:0;padding-left:1.1rem}.layout-notice-pill{inset:var(--step) var(--step) auto auto;z-index:4;align-items:center;gap:var(--step);max-width:calc(100% - var(--step) * 2);border:1px solid var(--rule-firm);background:var(--sheet);font-family:var(--utility);color:var(--ink);border-radius:999px;padding:.35rem .7rem;font-size:12px;display:flex;position:absolute}.layout-notice-pill span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.subject-form{gap:calc(var(--step) * 1.25);margin:calc(var(--step) * 1) 0;flex-direction:column;display:flex}.subject-form-field{grid-template-columns:var(--form-label-width) minmax(0, 1fr);align-items:center;gap:calc(var(--step) * .75);display:grid}.subject-form-field.subject-form-list{align-items:start}.subject-form-list>.subject-form-label{padding-top:.35rem}.subject-form-list-body{align-items:flex-start;gap:calc(var(--step) * .35);flex-direction:column;min-width:0;display:flex}.subject-form-label{font-family:var(--utility);letter-spacing:.02em;text-transform:uppercase;color:var(--quiet);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.subject-form-field input[type=text],.subject-form-field select{border:1px solid var(--rule-firm);border-radius:calc(var(--step) * .5);background:var(--paper);font-family:var(--body);color:var(--ink);padding:.35rem .5rem;font-size:13px}.subject-fact-value{font-family:var(--body);color:var(--ink);overflow-wrap:anywhere;font-size:13px}.subject-form-list{border-top:1px solid var(--rule);padding-top:calc(var(--step) * .75)}.subject-form-row{align-items:flex-start;gap:calc(var(--step) * .5);margin-bottom:calc(var(--step) * .5);display:flex}.subject-form-row-body{align-items:center;gap:calc(var(--step) * .5);flex-wrap:wrap;flex:1;display:flex}.subject-form-toggle{align-items:center;gap:calc(var(--step) * .35);font-family:var(--utility);color:var(--quiet);font-size:12px;display:flex}.subject-form-row-add,.subject-form-row-remove{border:1px solid var(--rule-firm);border-radius:calc(var(--step) * .5);background:var(--sheet);font-family:var(--utility);cursor:pointer;padding:.25rem .6rem;font-size:12px}.context-menu{z-index:1100;min-width:184px;max-width:280px;max-height:70vh;padding:calc(var(--step) * .5) 0;background:var(--sheet);border:1px solid var(--rule-firm);border-radius:2px;position:fixed;overflow-y:auto;box-shadow:0 8px 24px #00000029}.context-menu:focus{outline:none}.context-menu ul{margin:0;padding:0;list-style:none}.context-menu-group+.context-menu-group{margin-top:calc(var(--step) * .5);padding-top:calc(var(--step) * .5);border-top:1px solid var(--rule)}.context-menu-destructive{margin-top:calc(var(--step) * .5);padding-top:calc(var(--step) * .5);border-top:1px solid var(--rule-firm)}.context-menu-heading{padding:calc(var(--step) * .5) calc(var(--step) * 1.5);font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--quiet);margin:0;font-size:10px}.context-menu-item{align-items:center;gap:calc(var(--step) * .75);width:100%;padding:.3rem calc(var(--step) * 1.5);font:inherit;text-align:left;color:var(--ink);cursor:pointer;background:0 0;border:0;border-radius:0;font-size:13px;display:flex}.context-menu-item:hover{background:color-mix(in oklab, var(--cobalt) 10%, transparent)}.context-menu-destructive .context-menu-item{color:var(--failure)}.context-menu-destructive .context-menu-item:hover{background:color-mix(in oklab, var(--failure) 12%, transparent)}.context-menu-tick{width:8px;font-family:var(--utility);color:var(--cobalt);flex:none;font-size:12px}.context-menu-label{white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.changeset-row-scope{font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;padding:0 calc(var(--step) * .5);border:1px solid var(--rule);color:var(--quiet);border-radius:2px;flex:none;font-size:10px}.changeset-scope-view{color:var(--cobalt);border-color:color-mix(in oklab, var(--cobalt) 40%, transparent)}.prompt-dialog-form{gap:calc(var(--step) * .75);text-align:left;flex-direction:column;display:flex}.prompt-dialog-form label{font-family:var(--utility);letter-spacing:.08em;text-transform:uppercase;color:var(--quiet);font-size:10px}.prompt-dialog-form input{padding:calc(var(--step) * .75);font:inherit;color:var(--ink);background:var(--paper);border:1px solid var(--rule-firm);border-radius:2px;font-size:13px}.prompt-dialog-form input:focus{border-color:var(--cobalt)}.prompt-dialog-form .confirm-dialog-actions{margin-top:calc(var(--step) * .5)}.open-questions{gap:var(--step);padding:var(--step) 0;flex-direction:column;display:flex}.open-questions-scope,.open-questions-catalogue{color:var(--quiet);margin:0;font-size:.78rem}.question-list{gap:calc(var(--step) * .75);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.question-row{gap:calc(var(--step) * .25);flex-direction:column;display:flex}.question-text{font-size:.85rem;line-height:1.35}.question-meta{gap:var(--step);flex-wrap:wrap;align-items:baseline;display:flex}.question-verb{font:inherit;padding:0 calc(var(--step) * .75);min-height:calc(var(--step) * 3);color:var(--cobalt);border:1px solid var(--rule);cursor:pointer;background:0 0;border-radius:2px;margin-left:auto;font-size:.8rem}.question-verb:hover,.question-verb:focus-visible{border-color:var(--cobalt);outline:none}.connection-note,.connection-others summary{color:var(--quiet);margin:0 0 calc(var(--step) * .5);font-size:.85rem}.connection-others summary{cursor:pointer}.question-authority{letter-spacing:.04em;text-transform:uppercase;color:var(--quiet);border:1px solid var(--quiet);padding:0 calc(var(--step) * .75);border-radius:999px;font-size:.68rem;font-weight:600}.question-since{color:var(--quiet);font-size:.72rem}.saved-layout-pill{inset:auto auto var(--step) var(--step);z-index:4;align-items:center;gap:var(--step);max-width:calc(100% - var(--step) * 2);border:1px solid var(--rule-firm);background:var(--sheet);font-family:var(--utility);color:var(--ink);border-radius:999px;padding:.35rem .7rem;font-size:12px;display:flex;position:absolute}.saved-layout-pill span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.saved-layout-pill button{color:var(--cobalt);font-family:inherit;font-size:inherit;cursor:pointer;background:0 0;border:none;flex:none;padding:0;text-decoration:underline}.saved-layout-pill button:hover{color:var(--ink)}.zoom-controls{inset:auto var(--step) var(--step) auto;z-index:4;border:1px solid var(--rule-firm);border-radius:calc(var(--step) * .75);background:var(--sheet);align-items:stretch;display:flex;position:absolute;overflow:hidden}.zoom-controls button{color:var(--ink);font-family:var(--utility);cursor:pointer;background:0 0;border:none;padding:.3rem .6rem;font-size:13px;line-height:1}.zoom-controls button+button{border-left:1px solid var(--rule)}.zoom-controls button:hover{background:var(--paper)}.tree-row-staged .tree-label{font-style:italic}.tree-row-staged-delete .tree-label{text-decoration:line-through}.tree-staged{font-family:var(--utility);letter-spacing:.06em;text-transform:uppercase;color:var(--quiet);border:1px solid var(--rule-firm);border-radius:2px;flex:none;padding:0 .3em;font-size:9px}.tree-row-active .tree-staged{color:inherit;opacity:.75;border-color:currentColor}
2
2
  /*$vite$:1*/
@@ -118,6 +118,29 @@ export interface VisualChoiceSelectedPayload {
118
118
  readonly choiceId: string;
119
119
  readonly optionId: string;
120
120
  }
121
+ /**
122
+ * The reviewer hands one open question to the agent (#515, ADR 0151). The
123
+ * phrasing rides along so the transcript, the journal and the agent read the
124
+ * same words; the agent still computes the step from the record, because the
125
+ * question is a reading of the model at one moment and the model may have
126
+ * moved since the row was drawn.
127
+ */
128
+ export interface VisualQuestionDelegatePayload {
129
+ readonly questionId: string;
130
+ /** Null for a workspace-scoped question, which names no subject. */
131
+ readonly subjectId: string | null;
132
+ readonly question: string;
133
+ }
134
+ /**
135
+ * The agent's answer to a delegated question: operations it PROPOSES, which
136
+ * the browser stages into the reviewer's changeset and the reviewer commits
137
+ * (ADR 0151). The agent never writes (ADR 0084, ADR 0088); this is how it
138
+ * answers without doing so. `note` is the line the transcript shows.
139
+ */
140
+ export interface VisualOperationsProposePayload {
141
+ readonly note: string;
142
+ readonly operations: readonly YarramateOperation[];
143
+ }
121
144
  export interface VisualViewNavigatePayload {
122
145
  readonly viewId: string;
123
146
  readonly requiresAttention: boolean;
@@ -410,6 +433,10 @@ export type VisualBrowserInput = {
410
433
  readonly type: "session.end";
411
434
  readonly lastAcknowledgedSequence: number;
412
435
  readonly payload: VisualBrowserSessionEndPayload;
436
+ } | {
437
+ readonly type: "question.delegate";
438
+ readonly lastAcknowledgedSequence: number;
439
+ readonly payload: VisualQuestionDelegatePayload;
413
440
  };
414
441
  interface VisualEventEnvelope<Type extends string, Payload> {
415
442
  readonly format: "yarramate/visual-event/v1";
@@ -420,7 +447,7 @@ interface VisualEventEnvelope<Type extends string, Payload> {
420
447
  readonly timestamp: string;
421
448
  readonly payload: Payload;
422
449
  }
423
- export type VisualEvent = VisualEventEnvelope<"chat.message", VisualChatMessagePayload> | VisualEventEnvelope<"choice.selected", VisualChoiceSelectedPayload> | VisualEventEnvelope<"view.navigate", VisualViewNavigatePayload> | VisualEventEnvelope<"session.end", VisualSessionEndPayload> | VisualEventEnvelope<"browser.connected", VisualBrowserConnectedPayload> | VisualEventEnvelope<"browser.disconnected", VisualBrowserDisconnectedPayload> | VisualEventEnvelope<"filter.query", VisualFilterQueryPayload> | VisualEventEnvelope<"changeset.commit", VisualChangesetCommitPayload> | VisualEventEnvelope<"layout.save", VisualLayoutSavePayload>;
450
+ export type VisualEvent = VisualEventEnvelope<"chat.message", VisualChatMessagePayload> | VisualEventEnvelope<"choice.selected", VisualChoiceSelectedPayload> | VisualEventEnvelope<"question.delegate", VisualQuestionDelegatePayload> | VisualEventEnvelope<"view.navigate", VisualViewNavigatePayload> | VisualEventEnvelope<"session.end", VisualSessionEndPayload> | VisualEventEnvelope<"browser.connected", VisualBrowserConnectedPayload> | VisualEventEnvelope<"browser.disconnected", VisualBrowserDisconnectedPayload> | VisualEventEnvelope<"filter.query", VisualFilterQueryPayload> | VisualEventEnvelope<"changeset.commit", VisualChangesetCommitPayload> | VisualEventEnvelope<"layout.save", VisualLayoutSavePayload>;
424
451
  /**
425
452
  * The filter a chat turn resolved to. The agent states `query` and nothing
426
453
  * else: the runtime evaluates it against the same graph a `filter.query`
@@ -499,7 +526,7 @@ interface VisualResponseEnvelope<Type extends string, Payload> {
499
526
  readonly timestamp: string;
500
527
  readonly payload: Payload;
501
528
  }
502
- export type VisualResponse = VisualResponseEnvelope<"chat.response", VisualChatResponsePayload> | VisualResponseEnvelope<"agent.status", VisualAgentStatusPayload> | VisualResponseEnvelope<"choice.present", VisualChoicePresentPayload> | VisualResponseEnvelope<"handoff.complete", VisualHandoffSummary> | VisualResponseEnvelope<"diagnostic", VisualDiagnosticPayload>;
529
+ export type VisualResponse = VisualResponseEnvelope<"chat.response", VisualChatResponsePayload> | VisualResponseEnvelope<"agent.status", VisualAgentStatusPayload> | VisualResponseEnvelope<"choice.present", VisualChoicePresentPayload> | VisualResponseEnvelope<"operations.propose", VisualOperationsProposePayload> | VisualResponseEnvelope<"handoff.complete", VisualHandoffSummary> | VisualResponseEnvelope<"diagnostic", VisualDiagnosticPayload>;
503
530
  export type VisualHandoffDecision = "completed" | "cancelled" | "failed";
504
531
  export type VisualTerminationReason = "user-ended" | "child-failed" | "browser-timeout" | "main-cancelled" | "server-failed" | "compiler-failed";
505
532
  export interface VisualHandoff extends VisualHandoffSummary {
@@ -1,3 +1,4 @@
1
+ import type { CatalogueCondition } from '../../interrogate-command.js';
1
2
  import type { CanvasGraph } from '../../graph-projection.js';
2
3
  import type { PatternMembership, PatternVacancy } from '../../compiler.js';
3
4
  import type { VISUAL_PROTOCOL_VERSION, VisualApplyResultPayload, VisualAuthority, VisualBrowserInput, VisualCapabilities, VisualChoicePresentPayload, VisualDiagnostic, VisualFilterResultPayload, VisualFreezeReason, VisualKindOption, VisualPatternOption, VisualLayoutPositions, VisualLayoutRoutes, VisualLayoutSaveResultPayload, VisualResponse, VisualTerminationReason, VisualViewSummary } from './protocol-contract.js';
@@ -18,6 +19,23 @@ export interface VisualQuestionEntry {
18
19
  readonly question: string;
19
20
  readonly authority: 'human' | 'agent' | 'either';
20
21
  readonly since?: string;
22
+ /**
23
+ * Which list the row came from (#515): a workspace row names no subject
24
+ * and has no panel to open, a subject row is keyed under its subject.
25
+ * Optional so a host that constructs rows by hand is not broken by a
26
+ * field only the pane's verbs read.
27
+ */
28
+ readonly scope?: 'workspace' | 'subject';
29
+ /** Why the question matters, in the catalogue's words (ADR 0110). */
30
+ readonly materiality?: string;
31
+ /** What would close it, in prose. */
32
+ readonly resolution?: string;
33
+ /**
34
+ * The catalogue conditions that opened it, verbatim (#515, ADR 0110): the
35
+ * machine-readable answer shape a row, a menu entry or a chip turns into
36
+ * a verb. Optional for the same reason as `scope`.
37
+ */
38
+ readonly trigger?: readonly CatalogueCondition[];
21
39
  }
22
40
  /**
23
41
  * The interrogation report, folded for drawing (#292).
@@ -1,5 +1,6 @@
1
1
  import { type DecorationMap } from "./graph-canvas.js";
2
2
  import type { EditorHost } from "./editor-host.js";
3
+ import type { VisualQuestionDelegatePayload } from "../adapters/visual/protocol-contract.js";
3
4
  import { type EditorPointer, type RightSectionId } from "./workspace-state.js";
4
5
  /**
5
6
  * The editor.
@@ -16,10 +17,15 @@ import { type EditorPointer, type RightSectionId } from "./workspace-state.js";
16
17
  * rather than disabled. A UI posture only: whatever this shell draws, the
17
18
  * host still answers for its own store.
18
19
  */
19
- export declare const App: ({ host, sections, readOnly, decorations: initialDecorations, onReady, }: {
20
+ export declare const App: ({ host, sections, readOnly, decorations: initialDecorations, onDelegateQuestion, onReady, }: {
20
21
  readonly host: EditorHost;
21
22
  readonly sections?: readonly RightSectionId[];
22
23
  readonly readOnly?: boolean;
24
+ /**
25
+ * Where a delegated question goes when the host has no agent on the socket
26
+ * (#515, ADR 0151). See `MountOptions.onDelegateQuestion`.
27
+ */
28
+ readonly onDelegateQuestion?: (question: VisualQuestionDelegatePayload) => void;
23
29
  /**
24
30
  * The host's per-subject marks at mount time (#314, ADR 0119) - the
25
31
  * initial value only, the way React means an initial value: later
@@ -22,6 +22,8 @@
22
22
  * Pure, and outside any component, because this repo renders React through
23
23
  * `renderToStaticMarkup` and has no DOM test environment.
24
24
  */
25
+ import type { VisualQuestionEntry } from "../adapters/visual/wire.js";
26
+ import { type QuestionVerb } from "./question-verbs.js";
25
27
  import type { CanvasGraph } from "../graph-projection.js";
26
28
  import type { VisualKindOption } from "../adapters/visual/protocol-contract.js";
27
29
  import type { ActiveViewMembership } from "./state.js";
@@ -171,6 +173,25 @@ export type ContextMenuIntent = {
171
173
  } | {
172
174
  readonly type: "view.remove-subject";
173
175
  readonly id: string;
176
+ }
177
+ /**
178
+ * Answer an open question with the gesture its trigger implies (#516,
179
+ * ADR 0150). The verb is resolved here, in the pure model, so the menu's
180
+ * reduction is a lookup and a test can read it; `null` means the row has
181
+ * no gesture and the shell puts the subject's properties in front instead.
182
+ */
183
+ | {
184
+ readonly type: "question.answer";
185
+ readonly questionId: string;
186
+ readonly subjectId: string | null;
187
+ readonly verb: QuestionVerb | null;
188
+ }
189
+ /** Hand the question to whoever answers questions for this host (ADR 0151). */
190
+ | {
191
+ readonly type: "question.delegate";
192
+ readonly questionId: string;
193
+ readonly subjectId: string | null;
194
+ readonly question: string;
174
195
  };
175
196
  /** Which half of the split an operation belongs to. */
176
197
  export type ContextMenuScope = "view" | "model";
@@ -196,6 +217,21 @@ export interface ContextMenuGroup {
196
217
  }
197
218
  export interface ContextMenuContext {
198
219
  readonly graph: CanvasGraph | null;
220
+ /**
221
+ * The interview overlay (#516): a subject's open questions become a group
222
+ * in its menu, and the workspace's become a group in the canvas menu.
223
+ * Absent on a host that ships no overlay, and the menus are as they were.
224
+ */
225
+ readonly questions?: {
226
+ readonly workspace: readonly VisualQuestionEntry[];
227
+ readonly subjects: Readonly<Record<string, readonly VisualQuestionEntry[]>>;
228
+ };
229
+ /**
230
+ * The label of the delegate door for this host (ADR 0151): "Answer via
231
+ * agent", "Answer via assistant" or "Copy for my assistant". Absent, the
232
+ * group offers no door.
233
+ */
234
+ readonly delegateLabel?: string;
199
235
  readonly relationshipKinds: readonly VisualKindOption[];
200
236
  /** The view the canvas is showing, or `ALL_SUBJECTS_VIEW`. */
201
237
  readonly activeViewId: string;
@@ -1,3 +1,4 @@
1
+ import type { VisualQuestionDelegatePayload } from '../adapters/visual/protocol-contract.js';
1
2
  import { type LocalHostOptions, type RefreshOutcome } from './local-host.js';
2
3
  import type { DecorationMap } from './graph-canvas.js';
3
4
  import type { EditorHost } from './editor-host.js';
@@ -72,6 +73,13 @@ export interface MountOptions extends LocalHostOptions {
72
73
  * unmounting it terminates the worker and restores the bundled engine.
73
74
  */
74
75
  readonly workerFactory?: () => LayoutWorker;
76
+ /**
77
+ * Where a delegated question goes on a host with no agent on the socket
78
+ * (#515, ADR 0151): a product with its own assistant routes it there. A host
79
+ * that passes nothing gets "Copy for my assistant" on every row instead, so
80
+ * the question still leaves the pane in a shape an assistant can answer.
81
+ */
82
+ readonly onDelegateQuestion?: (question: VisualQuestionDelegatePayload) => void;
75
83
  }
76
84
  /**
77
85
  * The handle a mount returns (#297, ADR 0118): the disposal it always had,
@@ -167,7 +175,7 @@ export declare const mountEditor: (element: Element, options: MountOptions) => M
167
175
  * the same viewer posture `mountEditor` offers, and stays free to refuse
168
176
  * writes on its own side of the seam as well.
169
177
  */
170
- export declare const mountEditorWith: (element: Element, host: EditorHost, sections?: readonly RightSectionId[], readOnly?: boolean, decorations?: DecorationMap) => MountedEditor;
178
+ export declare const mountEditorWith: (element: Element, host: EditorHost, sections?: readonly RightSectionId[], readOnly?: boolean, decorations?: DecorationMap, onDelegateQuestion?: (question: VisualQuestionDelegatePayload) => void) => MountedEditor;
171
179
  export type { EditorHost, EditorHostEvents } from './editor-host.js';
172
180
  export type { DecorationMap, DecorationMark } from './graph-canvas.js';
173
181
  export type { LocalEditorHost, LocalHostOptions, RefreshOutcome, } from './local-host.js';
@@ -1,4 +1,5 @@
1
- import type { VisualInterrogationOverlay } from '../adapters/visual/wire.js';
1
+ import type { VisualInterrogationOverlay, VisualQuestionEntry } from '../adapters/visual/wire.js';
2
+ import { type QuestionVerb } from './question-verbs.js';
2
3
  /**
3
4
  * The interview, where the drawing happens (#292).
4
5
  *
@@ -9,7 +10,22 @@ import type { VisualInterrogationOverlay } from '../adapters/visual/wire.js';
9
10
  * answer path stays `apply` (through the editor's own forms or an agent),
10
11
  * never a text box here that would bypass the compile gate.
11
12
  */
12
- export declare function OpenQuestions({ overlay, selectedId, }: {
13
+ export declare function OpenQuestions({ overlay, selectedId, readOnly, onVerb, onDelegate, delegateLabel, }: {
13
14
  readonly overlay: VisualInterrogationOverlay;
14
15
  readonly selectedId: string | null;
16
+ /** A viewer has no pen (#298): rows read, and offer nothing. */
17
+ readonly readOnly?: boolean;
18
+ /**
19
+ * Runs a row's verb (#515): the gesture that would answer it, derived from
20
+ * the trigger. Absent, rows carry no button, which is how a host without
21
+ * the gestures mounts the pane.
22
+ */
23
+ readonly onVerb?: (entry: VisualQuestionEntry, verb: QuestionVerb, subjectId: string | null) => void;
24
+ /**
25
+ * Hands the question to whoever answers questions for this host (#515,
26
+ * ADR 0151): the agent on the socket, the host's own assistant, or the
27
+ * clipboard for an assistant that is elsewhere. The label says which.
28
+ */
29
+ readonly onDelegate?: (entry: VisualQuestionEntry, subjectId: string | null) => void;
30
+ readonly delegateLabel?: string;
15
31
  }): import("react").JSX.Element;
@@ -0,0 +1,54 @@
1
+ import type { VisualQuestionEntry } from '../adapters/visual/wire.js';
2
+ /**
3
+ * What one gesture would answer an open question (#515).
4
+ *
5
+ * The catalogue declares why a question is open as typed conditions, and
6
+ * ADR 0110 put them on the design step so a host could build the answering
7
+ * affordance instead of re-deriving it. This is the editor's own use of that
8
+ * shape: a question row, a menu entry and a count chip all offer the same
9
+ * verb, and the verb is a lookup over the trigger, never a guess from the
10
+ * phrasing. A trigger this table does not know yields no verb, and the row
11
+ * stays what it was: a question a person reads.
12
+ *
13
+ * Every verb runs a gesture the surface already has - the connection tool,
14
+ * the Add-subject form, the properties panel - so what a verb can reach is
15
+ * exactly what a reviewer can reach by hand, and anything it stages still
16
+ * lands through the changeset.
17
+ */
18
+ export type QuestionVerb = {
19
+ /** Arm the connection tool from the subject, kinds narrowed to these. */
20
+ readonly kind: 'connect';
21
+ readonly label: string;
22
+ /** Qualified relationship kind ids the trigger names; empty = any. */
23
+ readonly kinds: readonly string[];
24
+ /** Which end the subject is: `outgoing` draws from it, `incoming` to it. */
25
+ readonly direction: 'outgoing' | 'incoming';
26
+ } | {
27
+ /** Open the Add-subject form with this kind preselected. */
28
+ readonly kind: 'add';
29
+ readonly label: string;
30
+ /** The palette label of the first kind the trigger names. */
31
+ readonly subjectKind: string;
32
+ } | {
33
+ /** Select the subject and put the properties panel in front. */
34
+ readonly kind: 'describe';
35
+ readonly label: string;
36
+ };
37
+ /**
38
+ * The first actionable condition decides. `opensWhen` requires every
39
+ * condition to hold, so closing any one of them closes the question, and the
40
+ * first the table knows is as good a door as any.
41
+ */
42
+ export declare const verbFor: (entry: VisualQuestionEntry) => QuestionVerb | null;
43
+ /**
44
+ * The question, ready to paste into an assistant that is not on the socket
45
+ * (#515, ADR 0151): claude.ai in a tab, a desktop app with no session, any
46
+ * chat. It carries what the design step would have given an agent - the
47
+ * phrasing, why it matters, what closes it - and the operations skeleton the
48
+ * trigger implies, so the answer comes back as a document `apply` accepts
49
+ * rather than as prose someone has to translate.
50
+ */
51
+ export declare const assistantBrief: (entry: VisualQuestionEntry, subject: {
52
+ readonly id: string;
53
+ readonly name: string;
54
+ } | null) => string;
@@ -1,3 +1,4 @@
1
+ import type { VisualQuestionDelegatePayload } from '../adapters/visual/protocol-contract.js';
1
2
  import type { ProjectionQuery } from '../projection.js';
2
3
  import type { NestingKind } from '../nesting.js';
3
4
  import type { VisualLayoutSavePayload, VisualViewOperation } from '../adapters/visual/protocol-contract.js';
@@ -19,6 +20,8 @@ export interface VisualSession {
19
20
  readonly connected: boolean;
20
21
  readonly ask: (text: string) => void;
21
22
  readonly choose: (optionId: string) => void;
23
+ /** Hands one open question to the agent on the socket (#515, ADR 0151). */
24
+ readonly delegate: (payload: VisualQuestionDelegatePayload) => void;
22
25
  readonly navigate: (viewId: string) => void;
23
26
  readonly filter: (query: ProjectionQuery, origin?: FilterSource,
24
27
  /**
@@ -1,4 +1,4 @@
1
- import { type VisualAgentStatusPayload, type VisualAuthority, type VisualBrowserInput, type VisualChangesetCommitPayload, type VisualViewOperation, type VisualChoicePresentPayload, type VisualDiagnostic, type VisualHandoffSummary, type VisualLayoutSavePayload, type VisualLayoutSaveResultPayload, type VisualViewSummary } from "../adapters/visual/protocol-contract.js";
1
+ import { type VisualAgentStatusPayload, type VisualAuthority, type VisualBrowserInput, type VisualChangesetCommitPayload, type VisualViewOperation, type VisualChoicePresentPayload, type VisualDiagnostic, type VisualHandoffSummary, type VisualLayoutSavePayload, type VisualQuestionDelegatePayload, type VisualLayoutSaveResultPayload, type VisualViewSummary } from "../adapters/visual/protocol-contract.js";
2
2
  import type { YarramateOperation } from "../operations.js";
3
3
  import type { NestingKind } from "../nesting.js";
4
4
  import type { ProjectionExclusion, ProjectionQuery } from "../projection.js";
@@ -292,6 +292,9 @@ export type VisualAppIntent = {
292
292
  } | {
293
293
  readonly kind: "save-layout";
294
294
  readonly payload: VisualLayoutSavePayload;
295
+ } | {
296
+ readonly kind: "delegate";
297
+ readonly payload: VisualQuestionDelegatePayload;
295
298
  };
296
299
  /**
297
300
  * One intent as the frame the server admits. Every frame carries the sequence
@@ -39,6 +39,17 @@ export type SelectedDiagramSubject = SelectedElement | SelectedRelationship;
39
39
  export interface ConnectionDraft {
40
40
  readonly from: string;
41
41
  readonly to: string | null;
42
+ /**
43
+ * A question's answer shape, when the tool was armed from one (#515):
44
+ * the relationship kinds the trigger names, qualified, narrowing what the
45
+ * panel offers first; and which end the subject is. `incoming` means the
46
+ * drawn relationship runs from the target TO `from`, because the question
47
+ * asked what realizes, influences or serves this subject, not what it
48
+ * reaches. Absent on a tool armed by hand, which offers everything the
49
+ * table permits, from `from` to the target.
50
+ */
51
+ readonly kinds?: readonly string[];
52
+ readonly direction?: "outgoing" | "incoming";
42
53
  }
43
54
  export declare const normalizeSelectedElement: (node: CanvasNode) => SelectedElement;
44
55
  export declare const normalizeSelectedRelationship: (edge: CanvasEdge, nodeTitles: ReadonlyMap<string, string>) => SelectedRelationship;
@@ -305,6 +316,8 @@ export type VisualWorkspaceAction = {
305
316
  } | {
306
317
  readonly type: "connection.started";
307
318
  readonly from: string;
319
+ readonly kinds?: readonly string[];
320
+ readonly direction?: "outgoing" | "incoming";
308
321
  } | {
309
322
  readonly type: "connection.targeted";
310
323
  readonly to: string;
@@ -718,11 +718,23 @@ Harnesses that load MCP servers can connect the bundled read-only adapter:
718
718
  }
719
719
  ```
720
720
 
721
- It exposes `yarramate_ask` (orientation, free text, subject ids, or a
722
- projection path, with an optional token budget), `yarramate_design`,
723
- `yarramate_check`, and `yarramate_reconcile`. Every tool call executes the
724
- same stable CLI in the server's working directory; nothing mutates native
725
- documents, and authoring stays with the CLI and Git review.
721
+ It exposes the whole loop: `yarramate_ask` (orientation, free text, subject
722
+ ids, or a projection path, with an optional token budget), `yarramate_design`
723
+ (the top open question with its answer skeleton), `yarramate_apply` (one
724
+ `yarramate/operations/v1` document, landed as the same atomic batch the CLI
725
+ lands, refused whole on any invalid operation), `yarramate_check`,
726
+ `yarramate_reconcile`, and `yarramate_export` (markdown, rtm, graph and briefs
727
+ come back as text; xlsx and likec4 write where `out` says). Every tool call
728
+ executes the same stable CLI in the repository; `apply` is the only write, and
729
+ it changes exactly what the CLI would (ADR 0149).
730
+
731
+ `workspace` is optional on every tool. It defaults to the `--workspace` the
732
+ server was started with, then to `.yarramate/workspace.yaml` under the working
733
+ directory. A desktop app starts the server outside the repository, so give it
734
+ `--workspace /full/path/to/.yarramate/workspace.yaml`; the CLI then runs at
735
+ that repository's root, as a person would run it. Every tool description
736
+ carries the loop in two sentences, because a desktop-app agent has never read
737
+ the skill file.
726
738
 
727
739
  ## Continuous drift signal in CI
728
740
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yarramate",
3
- "version": "1.25.2",
3
+ "version": "1.26.0",
4
4
  "description": "Tool-neutral semantic architecture engine and guided methodology",
5
5
  "license": "MIT",
6
6
  "repository": {