diff --git a/src/App.jsx b/src/App.jsx
index 2c3518f..8d7bd25 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -81,7 +81,7 @@ const BLOCK_PARAMS = {
const BLOCK_COLORS = {
overdrive: T.amber, distortion: T.red, fuzz: '#C07030',
- delay: T.blue, echo: T.blue, reverb: '#60B0D0',
+ delay: T.blue, echo: T.blue, reverb: '#5090A0',
chorus: T.green, flanger: '#50C080', phaser: '#80C050',
tremolo: T.green, compressor: '#D09040', gate: T.textSec, eq: '#7080D0',
cabinet: '#D07090', ir: '#D07090', nam: '#E0A040', nam_amp: '#E0A040', boost: T.amber,
@@ -139,9 +139,9 @@ const css = `
background: radial-gradient(circle at 35% 30%, #3A3A48, #1A1A22);
box-shadow: 0 2px 8px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.07); }
.knob-dot { position: absolute; width: 3px; border-radius: 2px; background: var(--amber);
- left: 50%; transform-origin: bottom center; box-shadow: 0 0 6px var(--amber); }
- .knob-label { font-size: 9px; color: var(--text-sec); letter-spacing: .06em; text-transform: uppercase; text-align: center; }
- .knob-value { font-family: 'JetBrains Mono', monospace; font-size: 10px; color: var(--amber); }
+ left: 50%; transform-origin: bottom center; }
+ .knob-label { font-size: 10px; color: var(--text-sec); letter-spacing: .06em; text-transform: uppercase; text-align: center; }
+ .knob-value { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--amber); }
/* ── Buttons ── */
.btn { padding: 8px 14px; border-radius: 6px; font-size: 12px; font-weight: 600;
@@ -169,14 +169,14 @@ const css = `
/* ── Param slider ── */
.param-panel { background: var(--surface); padding: 8px 12px 6px; border-top: 1px solid var(--border); flex-shrink: 0; }
.param-panel-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 2px; }
- .param-panel-title { font-size: 10px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase; color: var(--text-sec); }
+ .param-panel-title { font-size: 11px; font-weight: 600; letter-spacing: .07em; text-transform: uppercase; color: var(--text-sec); }
.param-row { display: flex; flex-direction: column; gap: 1px; padding: 1px 0; }
.param-header { display: flex; justify-content: space-between; align-items: center; }
- .param-label { font-size: 9px; font-weight: 500; text-transform: uppercase; letter-spacing: .06em; color: var(--text-sec); }
+ .param-label { font-size: 10px; font-weight: 500; text-transform: uppercase; letter-spacing: .06em; color: var(--text-sec); }
.param-val { font-family: 'JetBrains Mono',monospace; font-size: 11px; font-weight: 600; }
.param-track-wrap { position: relative; height: 30px; display: flex; align-items: center; cursor: pointer; touch-action: none; }
.param-track { width: 100%; height: 6px; background: var(--border); border-radius: 3px; position: relative; overflow: hidden; }
- .param-fill { height: 100%; border-radius: 3px; position: absolute; top: 0; left: 0; transition: width .04s; }
+ .param-fill { height: 100%; border-radius: 3px; position: absolute; top: 0; left: 0; transform-origin: left center; transition: transform .04s; }
.param-thumb { width: 22px; height: 22px; border-radius: 50%; position: absolute; top: 50%;
transform: translate(-50%,-50%); box-shadow: 0 1px 6px rgba(0,0,0,.6); pointer-events: none;
border: 3px solid var(--bg); }
@@ -193,7 +193,7 @@ const css = `
.screen-body { flex: 1; overflow-y: auto; padding: 10px 12px; display: flex; flex-direction: column; gap: 10px; }
/* ── Preset sidebar chip ── */
- .preset-chip-s { width: 100%; padding: 7px 6px; border-radius: 5px; background: var(--surface); border: 1px solid var(--border);
+ .preset-chip-s { width: 100%; padding: 8px 8px; border-radius: 5px; background: var(--surface); border: 1px solid var(--border);
display: flex; flex-direction: column; align-items: center; cursor: pointer; transition: all .12s; }
.preset-chip-s.active { border-color: var(--amber); background: rgba(232,160,48,.08); }
.preset-chip-s:active { transform: scale(.96); }
@@ -271,7 +271,7 @@ function Knob({ label, value = 50, onChange, size = 48, color = T.amber, min = 0
@@ -323,7 +323,7 @@ function ParamSlider({ label,value=50,onChange,onChangeEnd,min=0,max=100,color=T
-
+
@@ -409,7 +409,7 @@ function VUMeter({level=0,height=24,vertical=false}){const segs=12,active=Math.r
const segH=Math.max(3,(height-segs*1.5)/segs);
const c=i=>i>=10?T.red:i>=8?"#E8C030":T.green;
if(vertical)return(
- {Array.from({length:segs}).map((_,i)=>(
))}
);
+ {Array.from({length:segs}).map((_,i)=>(
))}
);
return(
{Array.from({length:segs}).map((_,i)=>(
))}
);
}
@@ -430,7 +430,7 @@ function CapturesScreen({onClose}){
🔍
setQuery(e.target.value)}onKeyDown={e=>e.key==="Enter"&&doSearch()}style={{flex:1,background:"none",border:"none",color:T.textPrimary,fontSize:12,outline:"none"}}/>
-
+
{results===null&&models.length>0&&(<>
Installed Models
{models.map((m,i)=>(
@@ -836,7 +836,7 @@ export default function App(){
▤
}
+ background:state.connected?T.green:T.red}}/>
{!isNarrow&&
{state.connected?"CONNECTED":"OFFLINE"}}
{/* Undo/Redo */}
@@ -193,9 +193,10 @@ function FocusSlider({ label, value = 50, onChange, onChangeEnd, min = 0, max =
}}>
{/* Scribble strip */}
@@ -70,7 +70,6 @@ function Footswitch({ id, label, mainLabel, type, sub, active, enabled, onClick,
border: `1px solid ${isActive ? T.amber + "66" : T.border}`,
borderRadius: 3, padding: "2px 2px", textAlign: "center",
minHeight: 18, display: "flex", alignItems: "center", justifyContent: "center",
- boxShadow: isActive ? `inset 0 0 4px ${T.amber}22` : "none",
}}>
)}
diff --git a/src/GlobalEQ.jsx b/src/GlobalEQ.jsx
index fa54b32..4c0d4ae 100644
--- a/src/GlobalEQ.jsx
+++ b/src/GlobalEQ.jsx
@@ -3,7 +3,7 @@ import { T } from "./theme.js";
// ── EQ Band definitions ──
const EQ_BANDS = [
- { key: "low", label: "Low", freq: "80 Hz", color: "#60A0E0", shadow: "#60A0E044" },
+ { key: "low", label: "Low", freq: "80 Hz", color: "#5090A0", shadow: "#5090A044" },
{ key: "mid", label: "Mid", freq: "800 Hz", color: T.amber, shadow: `${T.amber}44` },
{ key: "high", label: "High", freq: "6.4 kHz",color: "#60D080", shadow: "#60D08044" },
];
@@ -59,7 +59,7 @@ function EqKnob({ label, freq, value, min, max, color, onChange }) {
{norm > 0 && (
+ style={{ opacity: 0.8 }} />
)}
diff --git a/src/GlobalSettings.jsx b/src/GlobalSettings.jsx
index 79a9679..d19e3c4 100644
--- a/src/GlobalSettings.jsx
+++ b/src/GlobalSettings.jsx
@@ -191,7 +191,7 @@ function SettingsSlider({ label, value, min, max, unit, onChange }) {
cursor: "pointer", touchAction: "none",
}}>
diff --git a/src/ModelBrowser.jsx b/src/ModelBrowser.jsx
index 1350d71..4249f78 100644
--- a/src/ModelBrowser.jsx
+++ b/src/ModelBrowser.jsx
@@ -8,8 +8,8 @@ const CATEGORY_DEFS = {
"Distortions": { icon: "fx_distortion", color: T.red },
"Dynamics": { icon: "fx_compressor", color: T.green },
"Modulations": { icon: "fx_modulator", color: T.blue },
- "Delays": { icon: "fx_delay", color: "#60A0E0" },
- "Reverbs": { icon: "fx_reverb", color: "#60C0D0" },
+ "Delays": { icon: "fx_delay", color: "#6080B0" },
+ "Reverbs": { icon: "fx_reverb", color: "#5090A0" },
"Filters": { icon: "fx_filter", color: "#D0A060" },
"Amps": { icon: "fx_amplifier", color: "#E0A040" },
"Preamps": { icon: "fx_simulator", color: "#D08040" },
@@ -59,7 +59,7 @@ const TYPE_COLORS = {
fuzz: "#D060E0",
mod: T.blue, chorus: T.blue, flange: T.blue, phaser: T.blue,
tremolo: T.blue, vibrato: T.blue, rotary: T.blue,
- delay: "#60A0E0", echo: "#60A0E0", reverb: "#60C0D0",
+ delay: "#6080B0", echo: "#6080B0", reverb: "#5090A0",
pitch: "#A060E0", comp: T.green, compressor: T.green,
gate: T.green, filter: "#D0A060", wah: "#D0A060",
eq: "#80A0B0", ir: T.green, cab: T.green, nam: "#E0A040",
@@ -571,7 +571,7 @@ function ModelTile({ model, isCurrent, isFavorite, onSelect, onToggleFav }) {
cursor: "pointer",
position: "relative",
transition: "all .12s",
- boxShadow: isCurrent ? `0 0 12px ${color}33` : "none",
+ boxShadow: isCurrent ? `0 0 6px ${color}22` : "none",
minHeight: 72,
}}
>
@@ -599,7 +599,7 @@ function ModelTile({ model, isCurrent, isFavorite, onSelect, onToggleFav }) {
alt={model.type}
style={{
width: 28, height: 28,
- filter: `invert(0.95) brightness(2) drop-shadow(0 0 4px ${color}44)`,
+ filter: `invert(0.9) brightness(1.6)`,
objectFit: "contain",
}}
onError={() => setImgError(true)}
@@ -656,7 +656,6 @@ function ModelTile({ model, isCurrent, isFavorite, onSelect, onToggleFav }) {
position: "absolute", top: 4, left: 4,
width: 6, height: 6, borderRadius: "50%",
background: T.green,
- boxShadow: `0 0 6px ${T.green}`,
}} />
)}
diff --git a/src/Tuner.jsx b/src/Tuner.jsx
index ff58110..377a308 100644
--- a/src/Tuner.jsx
+++ b/src/Tuner.jsx
@@ -279,8 +279,8 @@ export default function TunerScreen({ tunerData, connected, onExit }) {
borderRadius: 1,
margin: "0 auto",
boxShadow: isInTune
- ? `0 0 8px ${T.green}`
- : `0 0 4px ${isClose ? T.amber : "transparent"}`,
+ ? `0 0 4px ${T.green}44`
+ : `0 0 2px ${isClose ? T.amber : "transparent"}`,
}} />
{/* Needle dot */}
@@ -334,7 +334,7 @@ export default function TunerScreen({ tunerData, connected, onExit }) {
background: isActive ? `${s.color}22` : T.surface,
border: `2px solid ${isActive ? s.color : T.border}`,
transition: "all .1s",
- boxShadow: isActive ? `0 0 12px ${s.color}44` : "none",
+ boxShadow: isActive ? `0 0 6px ${s.color}22` : "none",
}}
>