diff --git a/src/components/ChatModal.tsx b/src/components/ChatModal.tsx index dd5df29..d1a1d19 100644 --- a/src/components/ChatModal.tsx +++ b/src/components/ChatModal.tsx @@ -391,7 +391,10 @@ export function ChatModal({ onClose }: { onClose: () => void }) { const node = listRef.current; if (node && stickToBottomRef.current) node.scrollTop = node.scrollHeight; }); - }, [messages, typingOthers.length]); + // `replyTarget` is a dependency because the reply bar inserts itself + // between the list and the composer, shrinking the list: when pinned we + // must re-anchor to the bottom so the last message isn't hidden behind it. + }, [messages, typingOthers.length, replyTarget]); const handleScroll = useCallback(() => { const el = listRef.current; diff --git a/src/themes/brutalist.css b/src/themes/brutalist.css index 9948282..8dc5cd9 100644 --- a/src/themes/brutalist.css +++ b/src/themes/brutalist.css @@ -170,6 +170,18 @@ transform: translate(2px, 2px); } +/* In the light variant the resting text colour is dark, but on hover the + danger button fills with the dark --color-danger-hover. Force light text on + hover so the label stays legible. */ +@media (prefers-color-scheme: light) { + :root[data-style="brutalist"]:not([data-color-scheme]) .btn-danger:hover { + color: #fff; + } +} +:root[data-style="brutalist"][data-color-scheme="light"] .btn-danger:hover { + color: #fff; +} + /* Ghost / icon-only buttons — keep borderless, no press effect */ [data-style="brutalist"] .modal-close-btn, [data-style="brutalist"] .playlist-remove-btn, diff --git a/src/themes/geocities.css b/src/themes/geocities.css index 27b8928..03d9aae 100644 --- a/src/themes/geocities.css +++ b/src/themes/geocities.css @@ -289,6 +289,18 @@ box-shadow: none; } +/* In the light variant the resting text colour is dark, but on hover the + danger button fills with the dark --color-danger-hover. Force light text on + hover so the label stays legible. */ +@media (prefers-color-scheme: light) { + :root[data-style="geocities"]:not([data-color-scheme]) .btn-danger:hover { + color: #fff; + } +} +:root[data-style="geocities"][data-color-scheme="light"] .btn-danger:hover { + color: #fff; +} + /* The shared .vote-btn declares `background: transparent`, which leaves the chunky outset bevel see-through against the card. Give the resting state a solid raised-panel fill; the voted (--active) state keeps its accent diff --git a/src/themes/nyt.css b/src/themes/nyt.css index 6ce9f85..64593ca 100644 --- a/src/themes/nyt.css +++ b/src/themes/nyt.css @@ -189,6 +189,18 @@ --fab-radius: 0; } +/* In the light variant the resting text colour is dark, but on hover the + danger button fills with the dark --color-danger-hover. Force light text on + hover so the label stays legible. */ +@media (prefers-color-scheme: light) { + :root[data-style="nyt"]:not([data-color-scheme]) .btn-danger:hover { + color: #fff; + } +} +:root[data-style="nyt"][data-color-scheme="light"] .btn-danger:hover { + color: #fff; +} + /* ── Headlines — display serif ───────────────────────────────────── */ [data-style="nyt"] h1, [data-style="nyt"] .app-header-brand,