chore: roll up in-progress changes across plugins

- claude-design: scaffold new plugin (plugin.json, CHANGELOG, README)
- llm-security: playground design-system updates (tokens, components,
  tier3 supplement, new tier4 project-view CSS)
- ms-ai-architect: v2 mockup screenshots + local screenshot script
- voyage: annotate.mjs update

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-16 21:02:23 +02:00
commit 69610d46bd
20 changed files with 928 additions and 12 deletions

View file

@ -386,9 +386,18 @@ body:not(.ann-mode) .article-help { display: none; }
.article a { color: var(--accent); text-decoration: underline; text-underline-offset: 2px; }
.article code { font-family: var(--mono); font-size: .9em; background: var(--bg-soft);
padding: .12em .4em; border-radius: 4px; }
.article pre { background: #1e1e24; color: #e6e6eb; padding: 16px 18px; border-radius: 8px;
.article pre { position: relative; background: #1e1e24; color: #e6e6eb; padding: 16px 18px; border-radius: 8px;
overflow-x: auto; font-size: .88rem; line-height: 1.55; margin: 1.2em 0; }
.article pre code { background: none; padding: 0; color: inherit; font-size: inherit; }
.code-copy-btn { position: absolute; top: 8px; right: 8px; background: rgba(255,255,255,0.08);
color: #e6e6eb; border: 1px solid rgba(255,255,255,0.15); border-radius: 5px;
padding: 4px 10px; font: 600 11px var(--sans); cursor: pointer; opacity: 0;
transition: opacity .15s ease, background .15s ease; letter-spacing: .02em; z-index: 2; }
.article pre:hover .code-copy-btn,
.article pre:focus-within .code-copy-btn { opacity: 1; }
.code-copy-btn:hover { background: rgba(255,255,255,0.16); }
.code-copy-btn:focus { opacity: 1; outline: 2px solid var(--accent); outline-offset: 2px; }
.code-copy-btn.copied { background: var(--green); color: #fff; border-color: var(--green); }
.article blockquote { margin: 1.2em 0; padding: .5em 1.2em; border-left: 4px solid var(--accent);
background: var(--accent-soft); color: var(--text-dim); border-radius: 0 6px 6px 0; }
.article ul, .article ol { padding-left: 1.8em; margin: .9em 0; }
@ -871,6 +880,32 @@ refreshArticleAnnotations();
renderPanel();
updateCounts();
setMode(true);
// ── Code-block copy buttons ──
document.querySelectorAll('.article pre').forEach(function(pre) {
var btn = document.createElement('button');
btn.type = 'button';
btn.className = 'code-copy-btn';
btn.textContent = 'Copy';
btn.setAttribute('aria-label', 'Copy code block to clipboard');
btn.addEventListener('click', function(e) {
e.stopPropagation();
var code = pre.querySelector('code');
var text = code ? code.textContent : pre.textContent;
navigator.clipboard.writeText(text).then(function() {
btn.textContent = 'Copied';
btn.classList.add('copied');
setTimeout(function() {
btn.textContent = 'Copy';
btn.classList.remove('copied');
}, 1500);
}).catch(function() {
btn.textContent = 'Failed';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
});
pre.appendChild(btn);
});
`.trim();
// ---------------------------------------------------------------------------