fix: replace broken border-hard/50 opacity with subtle white borders

Tailwind can't decompose CSS variables for opacity modifiers, so
border-border-hard/50 fell back to white currentColor. Replaced with
border-white/[0.06] on image attachments, code blocks, and action
toolbar. Also applied frosted glass material to message action toolbar.
This commit is contained in:
Jannis Braun
2026-03-02 17:07:33 +01:00
parent 7608afccc4
commit 907728ab24
3 changed files with 6 additions and 6 deletions
@@ -80,7 +80,7 @@ function CodeBlock({ language, code }: { language: string; code: string }) {
// 'text' means a bare fenced block with no language — render without highlighting // 'text' means a bare fenced block with no language — render without highlighting
if (language === 'text') { if (language === 'text') {
return ( return (
<pre className="mt-1 p-3 bg-surface-elevated border border-border-hard/50 rounded text-[0.875rem] leading-[1.125rem] font-mono overflow-x-auto whitespace-pre"> <pre className="mt-1 p-3 bg-surface-elevated border border-white/[0.06] rounded text-[0.875rem] leading-[1.125rem] font-mono overflow-x-auto whitespace-pre">
<code>{code}</code> <code>{code}</code>
</pre> </pre>
); );
@@ -90,7 +90,7 @@ function CodeBlock({ language, code }: { language: string; code: string }) {
<Highlight theme={aetherTheme} code={code} language={language}> <Highlight theme={aetherTheme} code={code} language={language}>
{({ style, tokens, getLineProps, getTokenProps }) => ( {({ style, tokens, getLineProps, getTokenProps }) => (
<pre <pre
className="mt-1 rounded border border-border-hard/50 text-[0.875rem] leading-[1.125rem] font-mono overflow-x-auto" className="mt-1 rounded border border-white/[0.06] text-[0.875rem] leading-[1.125rem] font-mono overflow-x-auto"
style={{ ...style, padding: '0.625rem 0.75rem', margin: 0 }} style={{ ...style, padding: '0.625rem 0.75rem', margin: 0 }}
> >
{tokens.map((line, i) => { {tokens.map((line, i) => {
+3 -3
View File
@@ -270,7 +270,7 @@ export function Message({ message, isCompact, isFirstInGroup }: MessageProps) {
const isImage = att.mimetype.startsWith('image/'); const isImage = att.mimetype.startsWith('image/');
if (isImage) { if (isImage) {
return ( return (
<div key={att.id} className="max-w-fit mt-1 rounded-lg overflow-hidden border border-border-hard/50 bg-surface-base/20"> <div key={att.id} className="max-w-fit mt-1 rounded-lg overflow-hidden border border-white/[0.06]">
<img <img
src={`/api/uploads/${att.filename}`} src={`/api/uploads/${att.filename}`}
alt={att.originalName} alt={att.originalName}
@@ -312,8 +312,8 @@ export function Message({ message, isCompact, isFirstInGroup }: MessageProps) {
{/* Action buttons on hover */} {/* Action buttons on hover */}
{isHovered && !isEditing && ( {isHovered && !isEditing && (
<div className="absolute -top-[18px] right-4 flex items-center bg-surface-chat border border-border-hard/50 rounded-[4px] shadow-elevation-low overflow-hidden z-10 h-8"> <div className="absolute -top-[18px] right-4 flex items-center glass rounded-[10px] overflow-hidden z-10 h-8">
<div className="flex items-center px-1 border-r border-border-hard/50 h-full"> <div className="flex items-center px-1 border-r border-white/[0.06] h-full">
{['👍', '❤️', '😂', '😮'].map(emoji => ( {['👍', '❤️', '😂', '😮'].map(emoji => (
<button <button
key={emoji} key={emoji}
@@ -113,7 +113,7 @@ export function MessageList({ channelId }: MessageListProps) {
return ( return (
<div <div
ref={containerRef} ref={containerRef}
className="flex-1 overflow-y-auto overflow-x-hidden scrollbar-thin" className="flex-1 overflow-y-auto overflow-x-hidden no-scrollbar"
onScroll={handleScroll} onScroll={handleScroll}
> >
{isLoadingMore && ( {isLoadingMore && (