diff --git a/tooling/pql-board-html b/tooling/pql-board-html
index 7fda8cd0c..c3017fb7d 100755
--- a/tooling/pql-board-html
+++ b/tooling/pql-board-html
@@ -138,6 +138,10 @@ PAGE = """
Settled Reach — pql board
#d-idrow { display: flex; align-items: center; gap: 10px; margin: 6px 0 2px; }
#d-id { font: 700 15px var(--mono); color: var(--accent); }
#d-prio { font: 10px/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; }
+ #d-copy { margin-left: auto; font: 10px/1 var(--mono); letter-spacing: .06em;
+ text-transform: uppercase; background: none; border: 1px solid var(--line);
+ border-radius: 3px; color: var(--dim); padding: 5px 9px; cursor: pointer; }
+ #d-copy:hover { color: var(--accent); border-color: var(--accent-dim); }
#d-title { font: 600 21px/1.3 var(--sans); text-wrap: balance; margin: 2px 0 14px;
max-width: 46ch; }
#d-status { display: flex; border: 1px solid var(--line); border-radius: 3px;
@@ -289,7 +293,8 @@ function select(id, push=true){
(ch.length?``:"")+
``+
`${esc(t.id)}`+
- `${esc(t.priority||"")}
`+
+ `${esc(t.priority||"")}`+
+ ``+
`${esc(t.title)}
`+
`${STATUSES.map(s=>`${s.replace("_"," ")}`).join("")}
`+
`${meta.map(([k,v])=>`- ${k}
- ${v}
`).join("")}
`+
@@ -300,6 +305,14 @@ function select(id, push=true){
`${(t.description||"—").split(/\\n\\n+/).map(p=>`
${esc(p).replace(/\\n/g,"
")}
`).join("")}
`;
d.scrollTop=0;
d.querySelectorAll(".tchip[data-id]").forEach(el=>el.onclick=()=>select(el.dataset.id));
+ const cp=document.getElementById("d-copy");
+ cp.onclick=()=>{
+ const txt=`viewing ${t.id} — ${t.title}`;
+ const done=()=>{ cp.textContent="copied"; setTimeout(()=>{cp.textContent="copy ref";},1200); };
+ if(navigator.clipboard&&navigator.clipboard.writeText)
+ navigator.clipboard.writeText(txt).then(done,()=>window.prompt("Copy:",txt));
+ else window.prompt("Copy:",txt);
+ };
const card=document.querySelector(`.card[data-id="${CSS.escape(id)}"]`);
if(card) card.scrollIntoView({block:"nearest"});
}