fix(ui): remove side-stripe borders in favour of subtle bg tints
Side-stripe borders (border-left: 2px or 3px in an accent colour, with the rest of the element having no border) are the textbook AI-coded-IDE "selected-state" pattern. The brand vocabulary is colour-tint and chevron, not stripe-and-fill. Replaced eight sites: - VirtualSegmentList active/match/default segment rows: bg-accent/10, bg-warning/10, hover:bg-hover (drop the stripes; bg-warning bumped /5 → /10 so it's visible without the stripe doing the work). - viewer/+page.svelte: same pattern as VirtualSegmentList. - TasksPage profile-list tabs: bg-accent/10 + font-medium for active, hover:bg-hover for inactive. rounded-md added so the tint follows the row outline. - ToastViewport: replaced border-left + variant colour with full 1px border + bg tint + border-color tint (color-mix() with the matching semantic token at 35% / 10%). Also removed the orphan --moss / --signal / --ember tokens — they were not defined in app.css and fell back to hex literals. - preview/+page.svelte: dropped the phase-coloured left stripe and the borderColorClass derivation; the header already has a pulsing dot / animated bars / spinner for each phase, so the stripe was redundant.
This commit is contained in:
@@ -66,9 +66,9 @@
|
|||||||
gap: 0.75rem;
|
gap: 0.75rem;
|
||||||
padding: 0.875rem 1rem;
|
padding: 0.875rem 1rem;
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
background: var(--surface, #1a1a1a);
|
background: var(--color-bg-card);
|
||||||
color: var(--text, #fff);
|
color: var(--color-text);
|
||||||
border-left: 3px solid var(--moss, #4a7a4a);
|
border: 1px solid var(--color-border);
|
||||||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
|
||||||
/* Slide in from right; honours reduce-motion via the existing class
|
/* Slide in from right; honours reduce-motion via the existing class
|
||||||
that preferences.svelte.js applies to <html>. */
|
that preferences.svelte.js applies to <html>. */
|
||||||
@@ -81,10 +81,23 @@
|
|||||||
to { transform: translateX(0); opacity: 1; }
|
to { transform: translateX(0); opacity: 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
.toast-info { border-left-color: var(--moss, #4a7a4a); }
|
/* Severity styling tints the whole surface and border in the matching
|
||||||
.toast-success { border-left-color: var(--moss, #4a7a4a); }
|
semantic colour. Brand-aligned: no side stripes, no decorative
|
||||||
.toast-warn { border-left-color: var(--signal, #d4a017); }
|
accents. The body text and dismiss button still read against the
|
||||||
.toast-error { border-left-color: var(--ember, #c87144); }
|
tinted background because the tints are at low alpha. */
|
||||||
|
.toast-info,
|
||||||
|
.toast-success {
|
||||||
|
background: color-mix(in oklch, var(--color-success) 10%, var(--color-bg-card));
|
||||||
|
border-color: color-mix(in oklch, var(--color-success) 35%, var(--color-border));
|
||||||
|
}
|
||||||
|
.toast-warn {
|
||||||
|
background: color-mix(in oklch, var(--color-warning) 10%, var(--color-bg-card));
|
||||||
|
border-color: color-mix(in oklch, var(--color-warning) 35%, var(--color-border));
|
||||||
|
}
|
||||||
|
.toast-error {
|
||||||
|
background: color-mix(in oklch, var(--color-danger) 10%, var(--color-bg-card));
|
||||||
|
border-color: color-mix(in oklch, var(--color-danger) 35%, var(--color-border));
|
||||||
|
}
|
||||||
|
|
||||||
.toast-body {
|
.toast-body {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|||||||
@@ -159,10 +159,10 @@
|
|||||||
<div
|
<div
|
||||||
class="absolute left-0 right-0 group flex gap-3 px-3 py-2 rounded-lg cursor-pointer transition-colors
|
class="absolute left-0 right-0 group flex gap-3 px-3 py-2 rounded-lg cursor-pointer transition-colors
|
||||||
{activeSegmentIdx === idx
|
{activeSegmentIdx === idx
|
||||||
? 'bg-accent/10 border-l-2 border-accent'
|
? 'bg-accent/10'
|
||||||
: matchingSegments.has(idx)
|
: matchingSegments.has(idx)
|
||||||
? 'bg-warning/5 border-l-2 border-warning/40'
|
? 'bg-warning/10'
|
||||||
: 'border-l-2 border-transparent hover:bg-hover'}"
|
: 'hover:bg-hover'}"
|
||||||
style="top: {top}px"
|
style="top: {top}px"
|
||||||
onclick={() => onSeekToTime(seg.start)}
|
onclick={() => onSeekToTime(seg.start)}
|
||||||
ondblclick={() => onStartEditing(idx)}
|
ondblclick={() => onStartEditing(idx)}
|
||||||
|
|||||||
@@ -504,10 +504,10 @@
|
|||||||
{:else}
|
{:else}
|
||||||
<div class="relative">
|
<div class="relative">
|
||||||
<button
|
<button
|
||||||
class="w-full flex items-center gap-1.5 px-2 py-1.5 text-left text-[11px]
|
class="w-full flex items-center gap-1.5 px-2 py-1.5 rounded-md text-left text-[11px]
|
||||||
{activeListId === list.id
|
{activeListId === list.id
|
||||||
? 'border-l-2 border-accent text-text font-medium bg-accent/5'
|
? 'text-text font-medium bg-accent/10'
|
||||||
: 'border-l-2 border-transparent text-text-secondary hover:bg-hover hover:text-text'}"
|
: 'text-text-secondary hover:bg-hover hover:text-text'}"
|
||||||
onclick={() => { activeListId = list.id; contextMenuListId = null; }}
|
onclick={() => { activeListId = list.id; contextMenuListId = null; }}
|
||||||
ondblclick={() => { if (!list.builtIn && !sidebarCollapsed) startRenaming(list); }}
|
ondblclick={() => { if (!list.builtIn && !sidebarCollapsed) startRenaming(list); }}
|
||||||
oncontextmenu={(e) => { if (!list.builtIn) toggleContextMenu(e, list.id); }}
|
oncontextmenu={(e) => { if (!list.builtIn) toggleContextMenu(e, list.id); }}
|
||||||
|
|||||||
@@ -183,16 +183,10 @@
|
|||||||
: phase === "cleanup" ? "Cleaning up"
|
: phase === "cleanup" ? "Cleaning up"
|
||||||
: "Final",
|
: "Final",
|
||||||
);
|
);
|
||||||
let borderColorClass = $derived(
|
|
||||||
phase === "final" ? "border-success"
|
|
||||||
: phase === "cleanup" ? "border-accent"
|
|
||||||
: "border-border",
|
|
||||||
);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="h-full w-full flex flex-col bg-bg text-text p-3 gap-2 border-l-2 {borderColorClass}"
|
class="h-full w-full flex flex-col bg-bg text-text p-3 gap-2"
|
||||||
style="transition: border-color var(--duration-ui) ease-out"
|
|
||||||
data-tauri-drag-region
|
data-tauri-drag-region
|
||||||
>
|
>
|
||||||
<header class="flex items-center justify-between gap-2 text-[11px] text-text-secondary" data-tauri-drag-region>
|
<header class="flex items-center justify-between gap-2 text-[11px] text-text-secondary" data-tauri-drag-region>
|
||||||
|
|||||||
@@ -522,10 +522,10 @@
|
|||||||
bind:this={segmentRefs[seg._idx]}
|
bind:this={segmentRefs[seg._idx]}
|
||||||
class="group flex gap-3 px-3 py-2 rounded-lg cursor-pointer transition-colors
|
class="group flex gap-3 px-3 py-2 rounded-lg cursor-pointer transition-colors
|
||||||
{activeSegmentIdx === seg._idx
|
{activeSegmentIdx === seg._idx
|
||||||
? 'bg-accent/10 border-l-2 border-accent'
|
? 'bg-accent/10'
|
||||||
: matchingSegments.has(seg._idx)
|
: matchingSegments.has(seg._idx)
|
||||||
? 'bg-warning/5 border-l-2 border-warning/40'
|
? 'bg-warning/10'
|
||||||
: 'border-l-2 border-transparent hover:bg-hover'}"
|
: 'hover:bg-hover'}"
|
||||||
onclick={() => seekToTime(seg.start)}
|
onclick={() => seekToTime(seg.start)}
|
||||||
ondblclick={() => startEditing(seg._idx)}
|
ondblclick={() => startEditing(seg._idx)}
|
||||||
role="button"
|
role="button"
|
||||||
|
|||||||
Reference in New Issue
Block a user