diff --git a/src/renderer-queue.ts b/src/renderer-queue.ts index 2be849f..9054fce 100644 --- a/src/renderer-queue.ts +++ b/src/renderer-queue.ts @@ -505,7 +505,15 @@ function renderQueue(): void { if (queue.length === 0) { lastQueueRenderFingerprint = renderFingerprint; - list.innerHTML = `
${UI_TEXT.queue.empty}
`; + // Build the empty state via createElement to keep the renderer + // clean of inline-style HTML strings (which the lint hook + // flags as a potential XSS surface). The CSS for .queue-empty + // lives in styles.css. + list.replaceChildren(); + const empty = document.createElement('div'); + empty.className = 'queue-empty'; + empty.textContent = UI_TEXT.queue.empty; + list.appendChild(empty); return; } diff --git a/src/styles.css b/src/styles.css index c30558f..432fcc1 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1930,6 +1930,20 @@ select option { line-height: 1.45; } +/* Sidebar queue empty state — small dashed-border card matching the + sibling streamer-list empty state. */ +.queue-empty { + color: var(--text-secondary); + font-size: 12px; + text-align: center; + padding: 14px; + border: 1px dashed var(--border-soft); + border-radius: 6px; + background: rgba(255, 255, 255, 0.02); + margin: 4px 0; + line-height: 1.4; +} + /* Old generic scrollbar rules were dead — superseded by the purple-themed *::-webkit-scrollbar block further down the file. Removed to avoid confusion when someone greps for scrollbar styles. */