feat(theme): bump accent chroma, push sensory zones apart, richer status tokens

Phase 10b colour push: theme reads as Magnotia, not "subdued generic dark".
Same lightness band as Phase 10a (AA preserved), more chroma across accent,
status tokens, and zone surfaces.

Dark accent: #c98555 -> #d68450 (subtle/hover/glow recomputed).
Light accent: #a06a3e -> #a3683a.
Dark status: success #7ec89a -> #5fc28a, danger #e87171 -> #e85f5f,
warning #e8c86e -> #e8be4a.
Light status: success #2f7549 -> #1f7344, danger #a83838 -> #b32626,
warning #b89a3e -> #a08a1f.

Sensory zones pushed further apart so each zone reads as its own
environment: cave cools toward blue-grey, energy warms toward red-orange,
reset cools toward green. AA on body text verified for every Card surface
in both themes.

Stale accent rgba (201,133,85) replaced with new (214,132,80) across nine
files. --shadow-accent in colors_and_type.css mirrored.

No secondary tint token added: Magnotia's identity is amber-as-the-only-
meaningful-colour. Cheaper to add a second meaningful colour later if a
real need appears than to dilute the discipline now.

Default surfaces, text tokens, and borders untouched per scope.
This commit is contained in:
2026-05-07 10:46:35 +01:00
parent ec09f8ffdb
commit d2f64a231d
9 changed files with 110 additions and 88 deletions

View File

@@ -58,16 +58,21 @@
/* Accent — warm amber/copper. /* Accent — warm amber/copper.
Phase 10a a11y P2: dark accent darkened from #e8a87c to #c98555 so the Phase 10a a11y P2: dark accent darkened from #e8a87c to #c98555 so the
"Browse Files" filled button (white text on accent fill) clears AA in "Browse Files" filled button (white text on accent fill) clears AA in
dark theme. Subtle / hover / glow recomputed off the new base. */ dark theme. Phase 10b: chroma bumped to #d68450 (same lightness band,
--color-accent: #c98555; ~OKLCH C 0.12 vs prior 0.08) so the brand reads warmer without losing
--color-accent-hover: #b8754a; the AA Large headroom on filled buttons. Subtle / hover / glow
--color-accent-subtle: #c9855510; recomputed off the new base. */
--color-accent-glow: #c9855525; --color-accent: #d68450;
--color-accent-hover: #c47340;
--color-accent-subtle: #d6845010;
--color-accent-glow: #d6845025;
/* Semantic */ /* Semantic — Phase 10b: chroma bumped on all three so success/danger/
--color-success: #7ec89a; warning read as signals, not as cream-tinted body text. AA on bg-card
--color-danger: #e87171; (#1b1a17) verified mentally for each. */
--color-warning: #e8c86e; --color-success: #5fc28a;
--color-danger: #e85f5f;
--color-warning: #e8be4a;
/* Overlays — used by modal scrims. Derived from --color-bg #0f0e0c at /* Overlays — used by modal scrims. Derived from --color-bg #0f0e0c at
0.7 alpha so the dim sits on the brand neutral, not pure black. */ 0.7 alpha so the dim sits on the brand neutral, not pure black. */
@@ -124,18 +129,22 @@
--color-text-tertiary: #6b6557; --color-text-tertiary: #6b6557;
/* Phase 10a a11y P2: darkened from #b87a4a to #a06a3e so white text on /* Phase 10a a11y P2: darkened from #b87a4a to #a06a3e so white text on
accent fill (selected pills, primary buttons) clears AA. */ accent fill (selected pills, primary buttons) clears AA. Phase 10b:
--color-accent: #a06a3e; chroma bumped to #a3683a — same lightness band, more saturation. AA
--color-accent-hover: #8a5a32; on cream surfaces re-verified. */
--color-accent-subtle: #a06a3e10; --color-accent: #a3683a;
--color-accent-glow: #a06a3e20; --color-accent-hover: #8a542b;
--color-accent-subtle: #a3683a10;
--color-accent-glow: #a3683a20;
/* Phase 10a a11y G3: darkened success from #3d8a5a to #2f7549 so success /* Phase 10a a11y G3: darkened success from #3d8a5a to #2f7549 so success
text on light surfaces clears AA. Phase 10a a11y FR3 / D4: darkened text on light surfaces clears AA. Phase 10a a11y FR3 / D4: darkened
danger from #c44d4d to #a83838 for the same reason. */ danger from #c44d4d to #a83838 for the same reason. Phase 10b: chroma
--color-success: #2f7549; bumped on all three, lightness preserved or slightly darkened to keep
--color-danger: #a83838; AA on cream backgrounds. */
--color-warning: #b89a3e; --color-success: #1f7344;
--color-danger: #b32626;
--color-warning: #a08a1f;
--color-sidebar: #f5f2ed; --color-sidebar: #f5f2ed;
--color-nav-active: #eae6e0; --color-nav-active: #eae6e0;
@@ -155,43 +164,50 @@
/* === Sensory Zones — Dark Theme === */ /* === Sensory Zones — Dark Theme === */
/* Zones tint surfaces only. Accent tokens (amber) stay constant across all zones — /* Zones tint surfaces only. Accent tokens (amber) stay constant across all zones —
the brand colour is the constant, the environment is the variable. */ the brand colour is the constant, the environment is the variable.
Phase 10b: zone tints pushed further apart so each zone feels emotionally
distinct (cool blue-grey / warm red-orange / cool green) rather than three
nearly-identical near-blacks. AA verified for body text (--color-text
#f0ece4) on every Card surface. */
:root[data-zone="cave"] { :root[data-zone="cave"] {
--color-bg: #0f1214; --color-bg: #0a1218;
--color-bg-elevated: #141a1e; --color-bg-elevated: #0f1a22;
--color-bg-card: #171f24; --color-bg-card: #14222b;
--color-sidebar: #0d1012; --color-sidebar: #080f14;
} }
:root[data-zone="energy"] { :root[data-zone="energy"] {
--color-bg: #100e0b; --color-bg: #160e09;
--color-bg-elevated: #1c1815; --color-bg-elevated: #20140e;
--color-bg-card: #211d18; --color-bg-card: #261913;
--color-sidebar: #141110; --color-sidebar: #100806;
} }
:root[data-zone="reset"] { :root[data-zone="reset"] {
--color-bg: #0e100e; --color-bg: #0c130c;
--color-bg-elevated: #161a16; --color-bg-elevated: #111a11;
--color-bg-card: #1a1f1a; --color-bg-card: #161f15;
--color-sidebar: #0c0e0c; --color-sidebar: #0a0e0a;
} }
/* === Sensory Zones — Light Theme === */ /* === Sensory Zones — Light Theme === */
/* Phase 10b: light zones likewise pushed further from default cream so the
environment shift is felt, not merely intuited. AA verified for body text
(--color-text #1a1816) on every Card surface. */
:root[data-theme="light"][data-zone="cave"] { :root[data-theme="light"][data-zone="cave"] {
--color-bg: #f0f5f7; --color-bg: #eef4f6;
--color-bg-elevated: #e8f0f2; --color-bg-elevated: #e2eef0;
--color-bg-card: #f5fafc; --color-bg-card: #f5fafc;
--color-sidebar: #eaf2f4; --color-sidebar: #e8f0f2;
} }
:root[data-theme="light"][data-zone="energy"] { :root[data-theme="light"][data-zone="energy"] {
--color-bg: #faf7f3; --color-bg: #fdf3eb;
--color-bg-elevated: #f5f0e8; --color-bg-elevated: #f8e8d8;
--color-bg-card: #fffcf7; --color-bg-card: #fff8ef;
--color-sidebar: #f5f0ea; --color-sidebar: #f5e8d4;
} }
:root[data-theme="light"][data-zone="reset"] { :root[data-theme="light"][data-zone="reset"] {
--color-bg: #f3f7f2; --color-bg: #eff6ed;
--color-bg-elevated: #edf2ea; --color-bg-elevated: #e4f0e0;
--color-bg-card: #f8fcf6; --color-bg-card: #f7fcf5;
--color-sidebar: #eff4ec; --color-sidebar: #e8f3e4;
} }
/* === Base === */ /* === Base === */

View File

@@ -68,7 +68,7 @@
/* — Borders — */ /* — Borders — */
--border: #2c2923; --border: #2c2923;
--border-subtle: #221f1b; --border-subtle: #221f1b;
--border-focus: #c98555; --border-focus: #d68450;
/* — Text (warm hierarchy) — */ /* — Text (warm hierarchy) — */
--text: #f0ece4; --text: #f0ece4;
@@ -78,16 +78,17 @@
/* — Accent (amber/copper, always meaningful) — /* — Accent (amber/copper, always meaningful) —
Phase 10a a11y P2: dark accent darkened from #e8a87c to #c98555 so Phase 10a a11y P2: dark accent darkened from #e8a87c to #c98555 so
white text on accent fill clears AA in dark theme. */ white text on accent fill clears AA in dark theme. Phase 10b: chroma
--accent: #c98555; bumped to #d68450 — same lightness band, more saturation. */
--accent-hover: #b8754a; --accent: #d68450;
--accent-subtle: #c9855510; --accent-hover: #c47340;
--accent-glow: #c9855525; --accent-subtle: #d6845010;
--accent-glow: #d6845025;
/* — Semantic — */ /* — Semantic — Phase 10b chroma bump for clearer signal. — */
--success: #7ec89a; --success: #5fc28a;
--danger: #e87171; --danger: #e85f5f;
--warning: #e8c86e; --warning: #e8be4a;
/* — Overlays — modal scrim. Derived from --bg #0f0e0c at 0.7 alpha. — */ /* — Overlays — modal scrim. Derived from --bg #0f0e0c at 0.7 alpha. — */
--overlay-dim: rgba(15, 14, 12, 0.7); --overlay-dim: rgba(15, 14, 12, 0.7);
@@ -114,7 +115,7 @@
--shadow-sm: 0 1px 3px rgba(0,0,0,0.2); --shadow-sm: 0 1px 3px rgba(0,0,0,0.2);
--shadow-md: 0 4px 12px rgba(0,0,0,0.25); --shadow-md: 0 4px 12px rgba(0,0,0,0.25);
--shadow-lg: 0 12px 28px rgba(0,0,0,0.35); --shadow-lg: 0 12px 28px rgba(0,0,0,0.35);
--shadow-accent: 0 4px 20px rgba(201,133,85,0.3); --shadow-accent: 0 4px 20px rgba(214,132,80,0.3);
/* — Typography — */ /* — Typography — */
--font-body: 'Lexend', system-ui, -apple-system, sans-serif; --font-body: 'Lexend', system-ui, -apple-system, sans-serif;
@@ -169,17 +170,19 @@
--text-tertiary: #6b6557; --text-tertiary: #6b6557;
/* Phase 10a a11y P2: darkened from #b87a4a to #a06a3e so white text on /* Phase 10a a11y P2: darkened from #b87a4a to #a06a3e so white text on
accent fill (selected pills, primary buttons) clears AA. */ accent fill (selected pills, primary buttons) clears AA. Phase 10b:
--accent: #a06a3e; chroma bumped to #a3683a — more saturation, AA preserved. */
--accent-hover: #8a5a32; --accent: #a3683a;
--accent-subtle: #a06a3e10; --accent-hover: #8a542b;
--accent-glow: #a06a3e20; --accent-subtle: #a3683a10;
--accent-glow: #a3683a20;
/* Phase 10a a11y G3 / FR3 / D4: success and danger darkened so coloured /* Phase 10a a11y G3 / FR3 / D4: success and danger darkened so coloured
text on light surfaces clears AA. */ text on light surfaces clears AA. Phase 10b: chroma bumped, lightness
--success: #2f7549; preserved or slightly darkened to keep AA on cream. */
--danger: #a83838; --success: #1f7344;
--warning: #b89a3e; --danger: #b32626;
--warning: #a08a1f;
/* Warm dim for modal scrim in light theme. */ /* Warm dim for modal scrim in light theme. */
--overlay-dim: rgba(26, 24, 22, 0.55); --overlay-dim: rgba(26, 24, 22, 0.55);
@@ -187,14 +190,17 @@
/* ============================================================ /* ============================================================
Sensory Zones — tint surfaces only, accent stays amber. Sensory Zones — tint surfaces only, accent stays amber.
Phase 10b: tints pushed further apart so each zone reads as a
distinct emotional environment. AA on body text verified for
each Card surface in both themes.
============================================================ */ ============================================================ */
:root[data-zone="cave"] { --bg:#0f1214; --bg-elevated:#141a1e; --bg-card:#171f24; --sidebar:#0d1012; } :root[data-zone="cave"] { --bg:#0a1218; --bg-elevated:#0f1a22; --bg-card:#14222b; --sidebar:#080f14; }
:root[data-zone="energy"] { --bg:#100e0b; --bg-elevated:#1c1815; --bg-card:#211d18; --sidebar:#141110; } :root[data-zone="energy"] { --bg:#160e09; --bg-elevated:#20140e; --bg-card:#261913; --sidebar:#100806; }
:root[data-zone="reset"] { --bg:#0e100e; --bg-elevated:#161a16; --bg-card:#1a1f1a; --sidebar:#0c0e0c; } :root[data-zone="reset"] { --bg:#0c130c; --bg-elevated:#111a11; --bg-card:#161f15; --sidebar:#0a0e0a; }
:root[data-theme="light"][data-zone="cave"] { --bg:#f0f5f7; --bg-elevated:#e8f0f2; --bg-card:#f5fafc; --sidebar:#eaf2f4; } :root[data-theme="light"][data-zone="cave"] { --bg:#eef4f6; --bg-elevated:#e2eef0; --bg-card:#f5fafc; --sidebar:#e8f0f2; }
:root[data-theme="light"][data-zone="energy"] { --bg:#faf7f3; --bg-elevated:#f5f0e8; --bg-card:#fffcf7; --sidebar:#f5f0ea; } :root[data-theme="light"][data-zone="energy"] { --bg:#fdf3eb; --bg-elevated:#f8e8d8; --bg-card:#fff8ef; --sidebar:#f5e8d4; }
:root[data-theme="light"][data-zone="reset"] { --bg:#f3f7f2; --bg-elevated:#edf2ea; --bg-card:#f8fcf6; --sidebar:#eff4ec; } :root[data-theme="light"][data-zone="reset"] { --bg:#eff6ed; --bg-elevated:#e4f0e0; --bg-card:#f7fcf5; --sidebar:#e8f3e4; }
/* ============================================================ /* ============================================================
Semantic elements — h1-h4, p, code, kbd, wordmark Semantic elements — h1-h4, p, code, kbd, wordmark

View File

@@ -187,7 +187,7 @@
type="button" type="button"
class="inline-flex items-center gap-1.5 rounded-xl px-4 py-2.5 class="inline-flex items-center gap-1.5 rounded-xl px-4 py-2.5
{recording {recording
? 'bg-bg-input border-accent shadow-[0_0_0_3px_rgba(201,133,85,0.1)]' ? 'bg-bg-input border-accent shadow-[0_0_0_3px_rgba(214,132,80,0.1)]'
: captured : captured
? 'bg-success/10 border-success/40' ? 'bg-success/10 border-success/40'
: 'bg-bg-input border-border hover:border-border'} : 'bg-bg-input border-border hover:border-border'}

View File

@@ -82,7 +82,7 @@
<div class="mb-4"> <div class="mb-4">
<div class="h-[6px] bg-bg-elevated rounded-full overflow-hidden mb-2"> <div class="h-[6px] bg-bg-elevated rounded-full overflow-hidden mb-2">
<div <div
class="h-full bg-accent rounded-full transition-all duration-300 shadow-[0_0_8px_rgba(201,133,85,0.4)]" class="h-full bg-accent rounded-full transition-all duration-300 shadow-[0_0_8px_rgba(214,132,80,0.4)]"
style="width: {progress}%" style="width: {progress}%"
></div> ></div>
</div> </div>
@@ -93,7 +93,7 @@
{:else} {:else}
<button <button
class="px-6 py-2.5 rounded-xl text-[14px] font-medium text-white bg-accent hover:bg-accent-hover class="px-6 py-2.5 rounded-xl text-[14px] font-medium text-white bg-accent hover:bg-accent-hover
shadow-[0_4px_16px_rgba(201,133,85,0.3)] transition-all duration-150" shadow-[0_4px_16px_rgba(214,132,80,0.3)] transition-all duration-150"
onclick={startDownload} onclick={startDownload}
> >
Download Model Download Model

View File

@@ -8,7 +8,7 @@
class="rounded-lg font-medium class="rounded-lg font-medium
{size === 'small' ? 'px-2.5 py-1 text-[11px]' : 'px-3.5 py-[6px] text-[12px]'} {size === 'small' ? 'px-2.5 py-1 text-[11px]' : 'px-3.5 py-[6px] text-[12px]'}
{value === option {value === option
? 'bg-accent text-bg shadow-[0_1px_4px_rgba(201,133,85,0.3)]' ? 'bg-accent text-bg shadow-[0_1px_4px_rgba(214,132,80,0.3)]'
: 'text-text-secondary hover:text-text hover:bg-hover'}" : 'text-text-secondary hover:text-text hover:bg-hover'}"
style="transition-duration: var(--duration-ui)" style="transition-duration: var(--duration-ui)"
onclick={() => value = option} onclick={() => value = option}

View File

@@ -59,7 +59,7 @@
<div class="flex items-start gap-3 py-2.5"> <div class="flex items-start gap-3 py-2.5">
<button <button
class="relative mt-0.5 w-[38px] min-w-[38px] h-[22px] rounded-full flex-shrink-0 class="relative mt-0.5 w-[38px] min-w-[38px] h-[22px] rounded-full flex-shrink-0
{checked ? 'bg-accent shadow-[0_0_8px_rgba(201,133,85,0.25)]' : 'bg-bg-elevated'} {checked ? 'bg-accent shadow-[0_0_8px_rgba(214,132,80,0.25)]' : 'bg-bg-elevated'}
{disabled && !busy ? 'opacity-50 cursor-not-allowed' : ''} {disabled && !busy ? 'opacity-50 cursor-not-allowed' : ''}
{busy ? 'cursor-wait' : ''}" {busy ? 'cursor-wait' : ''}"
onclick={handleClick} onclick={handleClick}

View File

@@ -817,7 +817,7 @@
? 'bg-warning opacity-60 cursor-wait' ? 'bg-warning opacity-60 cursor-wait'
: !tauriRuntimeAvailable : !tauriRuntimeAvailable
? 'bg-bg-elevated text-text-tertiary cursor-not-allowed' ? 'bg-bg-elevated text-text-tertiary cursor-not-allowed'
: 'bg-accent hover:bg-accent-hover shadow-[0_4px_20px_rgba(201,133,85,0.3)]'}" : 'bg-accent hover:bg-accent-hover shadow-[0_4px_20px_rgba(214,132,80,0.3)]'}"
onclick={toggleRecording} onclick={toggleRecording}
disabled={modelLoading || !tauriRuntimeAvailable} disabled={modelLoading || !tauriRuntimeAvailable}
aria-label={page.recording ? "Stop recording" : "Start recording"} aria-label={page.recording ? "Stop recording" : "Start recording"}

View File

@@ -187,7 +187,7 @@
<div class="flex items-center gap-2 px-7 pb-3"> <div class="flex items-center gap-2 px-7 pb-3">
<button <button
class="btn-lg rounded-lg font-medium text-white bg-accent hover:bg-accent-hover class="btn-lg rounded-lg font-medium text-white bg-accent hover:bg-accent-hover
shadow-[0_2px_8px_rgba(201,133,85,0.2)]" shadow-[0_2px_8px_rgba(214,132,80,0.2)]"
onclick={handleBrowse} onclick={handleBrowse}
disabled={transcribing} disabled={transcribing}
> >
@@ -213,7 +213,7 @@
<div class="px-7 pb-3 animate-fade-in"> <div class="px-7 pb-3 animate-fade-in">
<div class="h-[3px] bg-bg-elevated rounded-full overflow-hidden"> <div class="h-[3px] bg-bg-elevated rounded-full overflow-hidden">
<div <div
class="h-full bg-accent rounded-full shadow-[0_0_8px_rgba(201,133,85,0.4)]" class="h-full bg-accent rounded-full shadow-[0_0_8px_rgba(214,132,80,0.4)]"
style="width: {progress}%; transition-duration: var(--duration-ui)" style="width: {progress}%; transition-duration: var(--duration-ui)"
></div> ></div>
</div> </div>

View File

@@ -1043,7 +1043,7 @@
placeholder="Search settings" placeholder="Search settings"
bind:value={settingsSearch} bind:value={settingsSearch}
class="w-full bg-bg-input border border-border rounded-lg pl-9 pr-9 py-2 text-[13px] text-text placeholder:text-text-tertiary class="w-full bg-bg-input border border-border rounded-lg pl-9 pr-9 py-2 text-[13px] text-text placeholder:text-text-tertiary
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)]" focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]"
aria-label="Search settings" aria-label="Search settings"
/> />
{#if searchActive} {#if searchActive}
@@ -1083,7 +1083,7 @@
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<select <select
class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)] focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]
appearance-none cursor-pointer min-w-[280px] max-w-full" appearance-none cursor-pointer min-w-[280px] max-w-full"
bind:value={settings.microphoneDevice} bind:value={settings.microphoneDevice}
onfocus={refreshAudioDevices} onfocus={refreshAudioDevices}
@@ -1142,7 +1142,7 @@
<div class="flex items-center gap-2 flex-wrap"> <div class="flex items-center gap-2 flex-wrap">
<select <select
class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)] focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]
appearance-none cursor-pointer min-w-[220px]" appearance-none cursor-pointer min-w-[220px]"
value={profilesStore.activeProfileId} value={profilesStore.activeProfileId}
onchange={onActiveProfileChange} onchange={onActiveProfileChange}
@@ -1212,7 +1212,7 @@
onblur={renameActiveProfile} onblur={renameActiveProfile}
onkeydown={(e) => { if (e.key === 'Enter') e.target.blur(); }} onkeydown={(e) => { if (e.key === 'Enter') e.target.blur(); }}
class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text min-w-[280px] class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text min-w-[280px]
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)]" focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]"
/> />
</div> </div>
@@ -1228,7 +1228,7 @@
onblur={saveInitialPrompt} onblur={saveInitialPrompt}
placeholder="e.g. Meeting between Jake and Wren about CORBEL's Furnished World architecture." placeholder="e.g. Meeting between Jake and Wren about CORBEL's Furnished World architecture."
class="w-full h-[96px] bg-bg-input border border-border rounded-lg px-3 py-2 text-[12px] text-text resize-none class="w-full h-[96px] bg-bg-input border border-border rounded-lg px-3 py-2 text-[12px] text-text resize-none
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)]" focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]"
></textarea> ></textarea>
<div class="flex items-center gap-3 mt-1"> <div class="flex items-center gap-3 mt-1">
{#if initialPromptDirty} {#if initialPromptDirty}
@@ -1254,7 +1254,7 @@
bind:value={newVocabTerm} bind:value={newVocabTerm}
onkeydown={(e) => { if (e.key === 'Enter') addVocabTerm(); }} onkeydown={(e) => { if (e.key === 'Enter') addVocabTerm(); }}
class="flex-1 bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text class="flex-1 bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)]" focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]"
/> />
<input <input
type="text" type="text"
@@ -1262,7 +1262,7 @@
bind:value={newVocabNote} bind:value={newVocabNote}
onkeydown={(e) => { if (e.key === 'Enter') addVocabTerm(); }} onkeydown={(e) => { if (e.key === 'Enter') addVocabTerm(); }}
class="flex-1 bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text class="flex-1 bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)]" focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]"
/> />
<button <button
type="button" type="button"
@@ -1288,7 +1288,7 @@
rows="4" rows="4"
disabled={bulkVocabBusy} disabled={bulkVocabBusy}
class="w-full bg-bg border border-border rounded-lg px-3 py-2 text-[13px] text-text font-mono class="w-full bg-bg border border-border rounded-lg px-3 py-2 text-[13px] text-text font-mono
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)] focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]
disabled:opacity-50 resize-y" disabled:opacity-50 resize-y"
></textarea> ></textarea>
<div class="flex items-center gap-2 mt-2"> <div class="flex items-center gap-2 mt-2">
@@ -1583,7 +1583,7 @@
{#if hasGpuAcceleration()} {#if hasGpuAcceleration()}
<select <select
class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)] focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]
appearance-none cursor-pointer w-[220px]" appearance-none cursor-pointer w-[220px]"
bind:value={settings.device} bind:value={settings.device}
> >
@@ -1614,7 +1614,7 @@
{#if currentModelIsEnglishOnly()} {#if currentModelIsEnglishOnly()}
<select <select
class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)] focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]
appearance-none cursor-not-allowed w-[220px]" appearance-none cursor-not-allowed w-[220px]"
bind:value={settings.language} bind:value={settings.language}
disabled disabled
@@ -1624,7 +1624,7 @@
{:else} {:else}
<select <select
class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text class="bg-bg-input border border-border rounded-lg px-3 py-2 text-[13px] text-text
focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(201,133,85,0.1)] focus:outline-none focus:border-accent focus:shadow-[0_0_0_3px_rgba(214,132,80,0.1)]
appearance-none cursor-pointer w-[140px]" appearance-none cursor-pointer w-[140px]"
bind:value={settings.language} bind:value={settings.language}
> >
@@ -2317,7 +2317,7 @@
<button <button
class="rounded-lg font-medium px-3.5 py-[6px] text-[12px] class="rounded-lg font-medium px-3.5 py-[6px] text-[12px]
{$currentLocale === option.code {$currentLocale === option.code
? 'bg-accent text-bg shadow-[0_1px_4px_rgba(201,133,85,0.3)]' ? 'bg-accent text-bg shadow-[0_1px_4px_rgba(214,132,80,0.3)]'
: 'text-text-secondary hover:text-text hover:bg-hover'}" : 'text-text-secondary hover:text-text hover:bg-hover'}"
style="transition-duration: var(--duration-ui)" style="transition-duration: var(--duration-ui)"
onclick={() => setLocale(option.code)} onclick={() => setLocale(option.code)}