@coopcli/specsketch 2026.817.2 → 2026.825.1

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.
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>SpecSketch Workbench</title>
7
- <script type="module" crossorigin src="/assets/index-Tyf33hWt.js"></script>
8
- <link rel="stylesheet" crossorigin href="/assets/index-DyUTkivM.css">
7
+ <script type="module" crossorigin src="/assets/index-DzRQXC_d.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/assets/index-CLLS_dcT.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coopcli/specsketch",
3
- "version": "2026.817.2",
3
+ "version": "2026.825.1",
4
4
  "description": "coopcli specsketch — draw an architecture diagram, generate an OpenSpec change proposal into your openspec/ change directory. Local-only.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,11 +46,18 @@
46
46
  "license": "MIT",
47
47
  "devDependencies": {
48
48
  "@cloudflare/workers-types": "^4.20260702.1",
49
+ "@codemirror/commands": "^6.11.0",
50
+ "@codemirror/language": "^6.12.4",
51
+ "@codemirror/state": "^6.7.1",
52
+ "@codemirror/view": "^6.43.9",
49
53
  "@coopcli/agent-harness": "workspace:*",
50
54
  "@coopcli/shared": "workspace:*",
51
55
  "@excalidraw/excalidraw": "^0.18.1",
52
56
  "@flue/cli": "^1.0.0-beta.9",
53
57
  "@flue/runtime": "^1.0.0-beta.9",
58
+ "@lezer/common": "^1.5.2",
59
+ "@lezer/highlight": "^1.2.3",
60
+ "@lezer/markdown": "^1.7.2",
54
61
  "@playwright/test": "^1.49.0",
55
62
  "@types/node": "^26.1.0",
56
63
  "@types/react": "^19.2.17",
@@ -1 +0,0 @@
1
- :root{--bg:#0f0f0f;--surface:#1a1a1a;--surface-2:#111;--surface-3:#0a0a0a;--border:#2a2a2a;--border-soft:#222;--text:#e8e8e8;--text-2:#bbb;--text-3:#ccc;--muted:#888;--accent:#e8925b;--accent-hover:#f0a873;--accent-15:#e8925b26;--accent-30:#e8925b4d;--ok:#28c840;--warn:#febc2e;--err:#ff5f57;--danger:#ef4444;--r-xs:2px;--r-sm:3px;--r-md:4px;--r-lg:6px;--r-xl:.4rem;--r-2xl:.5rem;--s-1:.25rem;--s-2:.5rem;--s-3:.75rem;--s-4:1rem;--s-5:1.25rem;--s-6:1.5rem;--s-8:2rem;--s-12:3rem;--t-tiny:.575rem;--t-micro:.625rem;--t-label:.75rem;--t-body:.8125rem;--t-ui:.875rem;--t-lead:1rem;--t-h3:1.25rem;--t-h2:1.5rem;--t-h1:1.75rem;--t-display:3rem;--ff-mono:"SF Mono", "Fira Code", "Cascadia Code", ui-monospace, Menlo, Consolas, monospace;--m-fast:.15s;--m-normal:.3s;--ease:cubic-bezier(.4, 0, .2, 1);font-family:var(--ff-mono)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{background:var(--bg);color:var(--text);height:100%}.workbench{grid-template-columns:16rem 1fr 20rem;height:100vh;display:grid}.workbench-nav{background:var(--surface);border-right:1px solid var(--border);padding:var(--s-3);overflow-y:auto}.workbench-main{background:var(--bg);padding:var(--s-4);overflow-y:auto}.workbench-rail{background:var(--surface);border-left:1px solid var(--border);padding:var(--s-3);overflow-y:auto}.workbench-col-label{font-size:var(--t-label);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-weight:700}.change-id{color:var(--accent);text-transform:none;letter-spacing:0}.tree{margin-top:var(--s-3);font-size:var(--t-body)}.tree-node{align-items:center;gap:var(--s-1);border-radius:var(--r-sm);display:flex}.tree-node[data-current=true]{background:var(--accent-15);outline:1px solid var(--accent-30)}.tree-caret{color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:none;flex:none;width:1.1rem}.tree-caret:disabled{cursor:default;opacity:.4}.tree-select{align-items:baseline;gap:var(--s-2);min-width:0;color:var(--text-2);font:inherit;text-align:left;cursor:pointer;padding:2px var(--s-1);background:0 0;border:none;flex:1;display:flex}.tree-select:hover{color:var(--text)}.tree-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tree-status{font-size:var(--t-micro);color:var(--muted);border:1px solid var(--border-soft);border-radius:var(--r-sm);padding:0 var(--s-1);flex:none;margin-left:auto}.structure-gate{margin-top:var(--s-4);border-top:1px solid var(--border);padding-top:var(--s-3);font-size:var(--t-micro);gap:var(--s-1);flex-direction:column;display:flex}.gate-title{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-weight:700}.gate-verdict.gate-ok{color:var(--ok)}.gate-verdict.gate-bad{color:var(--err)}.gate-finding{color:var(--text-2);padding-left:var(--s-2);border-left:2px solid var(--border)}.gate-finding.gate-error{border-left-color:var(--err)}.gate-finding.gate-warning{border-left-color:var(--warn)}.document-head{top:calc(-1 * var(--s-4));margin:calc(-1 * var(--s-4)) calc(-1 * var(--s-4)) var(--s-4);padding:var(--s-2) var(--s-4);background:var(--surface-2);border-bottom:1px solid var(--border);z-index:10;gap:var(--s-2);flex-direction:column;display:flex;position:sticky}.lifecycle{gap:var(--s-2);font-size:var(--t-micro);display:flex}.lifecycle-stage{border:1px solid var(--border);border-radius:var(--r-sm);padding:1px var(--s-2);color:var(--muted)}.lifecycle-stage[data-reached=true]{color:var(--text);border-color:var(--accent-30)}.lifecycle-stage[data-current=true]{background:var(--accent-15);color:var(--accent)}.lifecycle-unknown{color:var(--muted);font-style:italic}.provenance-strip{align-items:center;gap:var(--s-2);font-size:var(--t-body);display:flex}.strip-label{color:var(--muted);text-transform:uppercase;font-size:var(--t-micro)}.strip-spacer{flex:1}.issue-number{color:var(--accent);font-weight:700}.no-issue{color:var(--text-2)}.file-surface{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);margin-bottom:var(--s-4);padding:var(--s-3)}.file-surface .file-surface{background:var(--surface-2)}.file-surface-head{margin-bottom:var(--s-3);justify-content:space-between;align-items:center;display:flex}.file-surface-title{font-size:var(--t-ui);color:var(--accent)}.view-toggle{gap:1px;display:flex}.view-toggle button{background:var(--surface-2);border:1px solid var(--border);color:var(--muted);font:inherit;font-size:var(--t-micro);padding:2px var(--s-2);cursor:pointer}.view-toggle button[data-active=true]{color:var(--accent);border-color:var(--accent-30)}.surface-note{color:var(--muted);font-size:var(--t-body)}.proposal-section,.design-block,.task-group{margin-bottom:var(--s-3)}.proposal-section h3,.design-block h3,.task-group h3{font-size:var(--t-body);color:var(--text);margin-bottom:var(--s-1);gap:var(--s-2);align-items:baseline;display:flex}.section-state{font-size:var(--t-micro);color:var(--muted);border:1px solid var(--border-soft);border-radius:var(--r-sm);padding:0 var(--s-1)}textarea,input{background:var(--surface-3);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text);font:inherit;font-size:var(--t-body);padding:var(--s-1) var(--s-2);width:100%}textarea{resize:vertical}input[type=checkbox]{width:auto}button{font-family:var(--ff-mono)}.provenance-strip input{width:6rem}.provenance-strip button,.task-add button{background:var(--surface-2);border:1px solid var(--border);color:var(--text-2);font-size:var(--t-micro);padding:2px var(--s-2);border-radius:var(--r-sm);cursor:pointer}.task-list{list-style:none}.task-list label{gap:var(--s-2);font-size:var(--t-body);align-items:baseline;display:flex}.task-number{color:var(--muted)}.task-add{gap:var(--s-2);margin-top:var(--s-2);display:flex}.delta-list{margin-bottom:var(--s-3);list-style:none}.delta-item label{gap:var(--s-2);font-size:var(--t-body);align-items:baseline;display:flex}.delta-op{font-size:var(--t-micro);font-weight:700}.delta-op-added{color:var(--ok)}.delta-op-modified{color:var(--warn)}.delta-op-removed{color:var(--err)}.delta-op-renamed{color:var(--accent)}.delta-key{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.delta-counts{color:var(--muted);font-size:var(--t-micro);flex:none}.spec-draft{min-height:12rem}.delta-card{border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2);margin-bottom:var(--s-3)}.delta-card[data-viewed=true]{opacity:.55}.delta-card-head{gap:var(--s-2);padding:var(--s-2);border-bottom:1px solid var(--border-soft);font-size:var(--t-body);align-items:baseline;display:flex}.delta-viewed{gap:var(--s-1);color:var(--muted);font-size:var(--t-micro);flex:none;align-items:baseline;display:flex}.delta-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.delta-card-head .view-toggle{flex:none;margin-left:auto}.delta-body{padding:var(--s-2)}.delta-diff{background:var(--surface-3);border:1px solid var(--border-soft);border-radius:var(--r-sm);padding:var(--s-2);font-size:var(--t-body);line-height:1.5;overflow-x:auto}.diff-row{white-space:pre;display:flex}.diff-num{text-align:right;width:2rem;padding-right:var(--s-1);color:var(--muted);-webkit-user-select:none;user-select:none;flex:none}.diff-sign{-webkit-user-select:none;user-select:none;flex:none;width:1rem}.diff-text{white-space:pre}.diff-added{background:#28c84014}.diff-added .diff-sign,.diff-added .diff-text{color:var(--ok)}.diff-removed{background:#ff5f5714}.diff-removed .diff-sign,.diff-removed .diff-text{color:var(--err)}.diff-context .diff-text{color:var(--text-2)}.delta-comments{border-top:1px solid var(--border-soft);padding:var(--s-2);gap:var(--s-1);flex-direction:column;display:flex}.delta-comment{gap:var(--s-2);font-size:var(--t-body);align-items:baseline;display:flex}.delta-comment-body{color:var(--text-2)}.comment-add-row{gap:var(--s-2);display:flex}.comment-add-row input{flex:1}.review-summary{gap:var(--s-3);align-items:baseline;margin-left:auto;display:flex}.review-fact{font-size:var(--t-micro);color:var(--muted)}.review-fact.fact-ok{color:var(--ok)}.review-fact.fact-bad{color:var(--err)}.raw-view{background:var(--surface-3);border:1px solid var(--border-soft);border-radius:var(--r-sm);padding:var(--s-2);font-size:var(--t-body);line-height:1.5;overflow-x:auto}.raw-line{white-space:pre;display:flex}.raw-num{text-align:right;width:2.5rem;padding-right:var(--s-2);color:var(--muted);-webkit-user-select:none;user-select:none;flex:none}.raw-text{white-space:pre}.markdown{font-size:var(--t-body);color:var(--text-2);line-height:1.6}.markdown h1,.markdown h2,.markdown h3,.markdown h4{color:var(--text);margin:var(--s-3) 0 var(--s-1)}.markdown h1{font-size:var(--t-h3)}.markdown h2{font-size:var(--t-lead)}.markdown h3{font-size:var(--t-ui)}.markdown h4{font-size:var(--t-body);color:var(--accent)}.markdown p{margin-bottom:var(--s-2)}.markdown ul{margin:0 0 var(--s-2) var(--s-4)}.markdown code{background:var(--surface-3);border-radius:var(--r-xs);color:var(--accent);padding:0 3px}.markdown .md-code{background:var(--surface-3);border:1px solid var(--border-soft);border-radius:var(--r-sm);padding:var(--s-2);margin-bottom:var(--s-2);overflow-x:auto}.markdown table{border-collapse:collapse;margin-bottom:var(--s-2)}.markdown th,.markdown td{border:1px solid var(--border);padding:2px var(--s-2);text-align:left}.markdown .md-frontmatter{border:1px dashed var(--border);border-radius:var(--r-sm);padding:var(--s-2);margin-bottom:var(--s-2);color:var(--muted)}.markdown hr{border:none;border-top:1px solid var(--border);margin:var(--s-3) 0}.md-task{margin-left:calc(-1 * var(--s-4));list-style:none}.gate-structure{gap:var(--s-1);border-left:2px solid var(--border);padding-left:var(--s-2);flex-direction:column;display:flex}.gate-subtitle{color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.gate-structure[data-complete=false]{border-left-color:var(--err)}.gate-structure[data-complete=true]{border-left-color:var(--ok)}.gate-structure-ok{color:var(--ok)}.gate-structure-list{gap:var(--s-1);flex-direction:column;list-style:none;display:flex}.gate-unsatisfied{flex-direction:column;display:flex}.gate-unsatisfied-title{color:var(--err);font-weight:700}.gate-unsatisfied-why{color:var(--text-2)}.gate-warning{color:var(--warn)}.gate-warning code{color:var(--text-2)}.gate-emission[data-state=permitted]{color:var(--ok)}.gate-emission[data-state=refused-structure]{color:var(--err)}.gate-emission[data-state=refused-validation]{color:var(--warn)}.gate-emitted{color:var(--muted)}.gate-structure button{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-2);font-size:var(--t-micro);padding:2px var(--s-2);cursor:pointer;align-self:flex-start}.gate-structure button:disabled{color:var(--muted);cursor:not-allowed;opacity:.6}.proposal-section[data-status=unsatisfied]{border-left:2px solid var(--err);padding-left:var(--s-2)}.proposal-section[data-status=skipped]{border-left:2px dashed var(--muted);padding-left:var(--s-2)}.proposal-section[data-status=skipped] .section-state{color:var(--muted);border-style:dashed}.proposal-section[data-status=unsatisfied] .section-state{color:var(--err);border-color:var(--err)}.skip-control{gap:var(--s-2);margin-top:var(--s-1);flex-wrap:wrap;align-items:center;display:flex}.skip-control input{flex:1;min-width:12rem}.skip-control button,.section-skipped button{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-2);font-size:var(--t-micro);padding:2px var(--s-2);cursor:pointer;flex:none}.skip-refusal{color:var(--err);font-size:var(--t-micro);flex-basis:100%}.section-skipped{gap:var(--s-2);align-items:baseline;display:flex}.section-fences{gap:var(--s-2);margin-top:var(--s-2);flex-direction:column;display:flex}.c4-diagram{border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface-3)}.c4-caption{gap:var(--s-2);padding:var(--s-1) var(--s-2);border-bottom:1px solid var(--border-soft);font-size:var(--t-micro);align-items:baseline;display:flex}.c4-type{color:var(--accent);font-weight:700}.c4-source{color:var(--muted)}.c4-diagram svg{max-width:100%;height:auto;padding:var(--s-2);display:block}.c4-group{fill:none;stroke:var(--border);stroke-dasharray:4 3}.c4-group-label{fill:var(--muted);font-size:9px;font-family:var(--ff-mono)}.c4-edge{stroke:var(--muted);stroke-width:1px;fill:none}.c4-edge-label{fill:var(--text-2);font-size:9px;font-family:var(--ff-mono)}.c4-node marker path,.c4-diagram marker path{fill:var(--muted)}.c4-shape{fill:var(--surface);stroke:var(--accent-30)}.c4-shape.c4-person{stroke:var(--accent)}.c4-shape.c4-component{stroke:var(--ok)}.c4-shape.c4-external{stroke:var(--border);stroke-dasharray:3 2}.c4-node-label{fill:var(--text);font-size:10px;font-family:var(--ff-mono)}.c4-node-tech{fill:var(--accent);font-size:8px;font-family:var(--ff-mono)}.c4-node-desc{fill:var(--muted);font-size:8px;font-family:var(--ff-mono)}.fence-code{border:1px solid var(--border);border-left:2px solid var(--warn);border-radius:var(--r-sm);background:var(--surface-3);padding:var(--s-2);gap:var(--s-1);flex-direction:column;display:flex}.fence-code-label{color:var(--warn);font-size:var(--t-micro)}.fence-code-body{color:var(--text-2);font-size:var(--t-body);white-space:pre;overflow-x:auto}.design-block-head{align-items:center;gap:var(--s-2);display:flex}.design-title{min-width:0;font:inherit;flex:1}.design-block-ops{gap:var(--s-1);display:flex}.design-add{gap:var(--s-2);margin-top:var(--s-2);display:flex}.sketch-surface{gap:var(--s-1);margin-bottom:var(--s-2);flex-direction:column;display:flex}.sketch-toolbar{gap:var(--s-1);align-items:center;display:flex}.sketch-toolbar button[data-active=true]{border-color:var(--accent);color:var(--accent)}.sketch-canvas{border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface-3);touch-action:none;max-width:100%}.sketch-shape{fill:#ffffff0a;stroke:var(--text);stroke-width:1.5px;stroke-linecap:round}.sketch-stroke{fill:none;stroke:var(--text);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.sketch-label-text{fill:var(--text);font-size:12px;font-family:var(--ff-mono)}.sketch-selection{fill:none;stroke:var(--accent);stroke-width:1px;stroke-dasharray:4 3}.sketch-preview{fill:none;stroke:var(--muted);stroke-width:1px;stroke-dasharray:3 3}.sketch-invalid{border:1px solid var(--border);border-left:2px solid var(--err);border-radius:var(--r-sm);color:var(--err);padding:var(--s-2);font-size:var(--t-body)}.task-group-head{gap:var(--s-2);align-items:center;display:flex}.task-group-number{color:var(--muted)}.task-group-title{min-width:0;font:inherit;flex:1}.task-group-ops,.task-ops{gap:var(--s-1);display:flex}.task-row{gap:var(--s-2);font-size:var(--t-body);flex-wrap:wrap;align-items:center;padding:2px 0;display:flex}.task-row .task-title{flex:1;min-width:8rem}.task-cite{max-width:18rem}.task-row[data-dangling=true]{border-left:2px solid var(--err);padding-left:var(--s-2)}.task-dangling{color:var(--err);font-size:var(--t-micro);flex-basis:100%}.task-group-add{gap:var(--s-2);margin:var(--s-3) 0;display:flex}select{background:var(--surface-3);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text);font:inherit;font-size:var(--t-micro);padding:2px var(--s-1)}.testing-table{margin-top:var(--s-4);border-top:1px solid var(--border);padding-top:var(--s-3)}.testing-head{gap:var(--s-2);font-size:var(--t-body);align-items:baseline;display:flex}.testing-table table{border-collapse:collapse;width:100%;margin-top:var(--s-2)}.testing-table th,.testing-table td{border:1px solid var(--border-soft);padding:2px var(--s-2);text-align:left;font-size:var(--t-micro);color:var(--text-2)}.testing-table th{color:var(--muted)}.approve-gate{margin-top:var(--s-4);border-top:1px solid var(--border);padding-top:var(--s-3);gap:var(--s-2);font-size:var(--t-micro);flex-direction:column;display:flex}.approve-button{background:var(--surface-2);border:1px solid var(--accent-30);color:var(--text);font-size:var(--t-body);padding:var(--s-1) var(--s-3);border-radius:var(--r-sm);cursor:pointer;align-self:flex-start}.approve-button:disabled{border-color:var(--border);color:var(--muted);cursor:not-allowed}.approve-plan{color:var(--muted);flex-direction:column;gap:2px;list-style:none;display:flex}.workbench[data-rail=closed]{grid-template-columns:16rem 1fr}.rail-toggle{top:var(--s-2);right:var(--s-2);z-index:40;background:var(--surface-2);border:1px solid var(--accent-30);color:var(--accent);font-size:var(--t-micro);padding:2px var(--s-2);border-radius:var(--r-sm);cursor:pointer;position:fixed}.rail-head{justify-content:space-between;align-items:center;display:flex}.rail-close{border:1px solid var(--border);border-radius:var(--r-sm);color:var(--muted);font-size:var(--t-micro);padding:1px var(--s-2);cursor:pointer;background:0 0}.rail-head-actions{align-items:center;gap:var(--s-1);display:flex}.rail-settings-open{border:1px solid var(--border);border-radius:var(--r-sm);color:var(--muted);font-size:var(--t-micro);padding:1px var(--s-2);cursor:pointer;background:0 0}.rail-settings-open:hover{color:var(--text);border-color:var(--accent-30)}.rail-settings{margin-top:var(--s-2);border:1px solid var(--accent-30);border-radius:var(--r-sm);background:var(--surface-2);padding:var(--s-2);gap:var(--s-2);flex-direction:column;display:flex}.rail-settings:focus-visible{outline:1px solid var(--accent)}.rail-settings-head{justify-content:space-between;align-items:center;display:flex}.rail-settings-title{color:var(--muted);font-size:var(--t-micro);text-transform:uppercase}.rail-settings-inuse{color:var(--text-2);font-size:var(--t-micro)}.rail-settings-list{gap:var(--s-2);flex-direction:column;list-style:none;display:flex}.cred-row{flex-direction:column;gap:2px;display:flex}.cred-name{color:var(--text);font-size:var(--t-micro)}.cred-inuse{color:var(--accent)}.cred-detail{color:var(--muted);font-size:var(--t-micro)}.cred-row-out .cred-name{color:var(--muted)}.cred-row-out .cred-detail{color:var(--warn)}.cred-use,.cred-clear{border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-2);font-size:var(--t-micro);padding:1px var(--s-2);cursor:pointer;background:0 0;align-self:flex-start}.cred-use:hover,.cred-clear:hover{color:var(--text);border-color:var(--accent-30)}.cred-use:disabled{color:var(--muted);cursor:default}.rail-no-model{border:1px solid var(--warn);border-radius:var(--r-sm);padding:var(--s-2);margin:var(--s-2) 0;color:var(--text-2);font-size:var(--t-micro);gap:var(--s-1);flex-direction:column;display:flex}.rail-no-model-why{color:var(--muted);flex-direction:column;gap:2px;list-style:none;display:flex}.rail-scope{font-size:var(--t-micro);color:var(--muted);margin:var(--s-2) 0}.rail-scope code{color:var(--accent)}.rail-prompts{gap:var(--s-1);margin-bottom:var(--s-3);flex-direction:column;display:flex}.rail-prompts button{text-align:left;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-2);font-size:var(--t-micro);padding:2px var(--s-2);cursor:pointer}.rail-prompts button:hover{color:var(--text);border-color:var(--accent-30)}.rail-exchange{border-top:1px solid var(--border-soft);padding:var(--s-2) 0;gap:var(--s-1);font-size:var(--t-body);flex-direction:column;display:flex}.rail-q{color:var(--muted);font-size:var(--t-micro)}.rail-answer{color:var(--text-2)}.rail-sources{flex-direction:column;gap:2px;list-style:none;display:flex}.rail-sources button{color:var(--accent);font:inherit;font-size:var(--t-micro);text-align:left;cursor:pointer;background:0 0;border:none;padding:0}.rail-sources button:hover{color:var(--accent-hover)}.rail-unsourced{color:var(--warn);font-size:var(--t-micro)}.rail-served{color:var(--muted);font-size:var(--t-micro)}.rail-served[data-served=diverged],.rail-served[data-served=unobserved]{color:var(--warn)}.rail-proposed{border:1px solid var(--accent-30);border-radius:var(--r-sm);background:var(--surface-2);padding:var(--s-2);gap:var(--s-2);flex-direction:column;display:flex}.rail-proposed-target{color:var(--muted);font-size:var(--t-micro)}.rail-proposed pre{font-size:var(--t-micro);color:var(--text-2);white-space:pre-wrap;overflow-x:auto}.rail-apply{background:var(--surface-2);border:1px solid var(--accent-30);border-radius:var(--r-sm);color:var(--text);font-size:var(--t-micro);padding:2px var(--s-2);cursor:pointer;align-self:flex-start}.rail-apply:disabled{border-color:var(--border);color:var(--muted);cursor:not-allowed}@media (width<=60rem){.workbench{grid-template-columns:16rem 1fr}.workbench-rail{z-index:30;border-left:1px solid var(--border);width:min(20rem,85vw);position:fixed;top:0;bottom:0;right:0;box-shadow:-8px 0 24px #00000080}}.cap-chooser{gap:var(--s-2);margin-bottom:var(--s-4);padding:var(--s-3);background:var(--surface-2);border:1px solid var(--border-soft);border-radius:var(--r-sm);flex-direction:column;display:flex}.cap-chooser-head{align-items:center;gap:var(--s-2);display:flex}.cap-chooser-title{font-size:var(--t-micro);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.cap-filter{background:var(--surface-3);min-width:0;color:var(--text);border:1px solid var(--border);border-radius:var(--r-sm);padding:var(--s-1) var(--s-2);font:inherit;flex:1}.cap-list{flex-direction:column;gap:2px;max-height:15rem;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.cap-row{align-items:center;gap:var(--s-2);padding:2px 0;display:flex}.cap-row button{text-align:left;min-width:0;color:var(--accent);border-radius:var(--r-sm);padding:2px var(--s-1);font:inherit;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:1px solid #0000;flex:1;overflow:hidden}.cap-row button:hover:not(:disabled){background:var(--accent-15);border-color:var(--accent-30)}.cap-row button:disabled{color:var(--muted);cursor:default}.cap-count{font-size:var(--t-micro);color:var(--muted);font-variant-numeric:tabular-nums;flex:none}.cap-open{font-size:var(--t-micro);color:var(--warn);border:1px solid var(--border-soft);border-radius:var(--r-sm);padding:0 var(--s-1);flex:none}.cap-new{gap:var(--s-2);display:flex}.cap-new input{background:var(--surface-3);min-width:0;color:var(--text);border:1px solid var(--border);border-radius:var(--r-sm);padding:var(--s-1) var(--s-2);font:inherit;flex:1}.cap-empty{color:var(--muted)}