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
- {norm>0&&} + {norm>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 */}