diff --git a/src/App.jsx b/src/App.jsx
index 96bbcda..2c3518f 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -150,7 +150,7 @@ const css = `
.btn-primary:active { filter: brightness(.85); transform: scale(.97); }
.btn-ghost { background: var(--surface); color: var(--text-primary); border: 1px solid var(--border); }
.btn-ghost:active { background: var(--border); }
- .btn-icon { width: 36px; height: 36px; border-radius: 7px; display: flex; align-items: center;
+ .btn-icon { width: 44px; height: 44px; border-radius: 8px; display: flex; align-items: center;
justify-content: center; background: var(--surface); border: 1px solid var(--border); cursor: pointer;
font-size: 15px; transition: all .12s; flex-shrink: 0; }
.btn-icon:active { transform: scale(.93); }
@@ -222,7 +222,7 @@ const css = `
.screen-title { font-size: 11px; }
.screen-body { padding: 8px 10px; gap: 8px; }
.knob-wrap { transform: scale(.9); }
- .btn-icon { width: 24px; height: 24px; font-size: 10px; }
+ .btn-icon { width: 44px; height: 44px; font-size: 12px; }
}
/* ββ Responsive: landscape short ββ */
@@ -377,7 +377,7 @@ function ParameterPanel({ block,params,onParamChange,onParamChangeEnd,viewMode,o
{onFocus&&}
-
@@ -422,7 +422,7 @@ function CapturesScreen({onClose}){
const doSearch=async()=>{if(!query.trim())return;setLoading(true);try{const data=tab==="models"?await API.searchModels(query):await API.searchIrs(query);setResults(data.results||[]);}catch{setResults([]);}setLoading(false);};
const install=async(item)=>{try{if(tab==="models"){await API.installModel(item.download_url,item.name);}else{await API.installIr(item.download_url,item.name);}API.listModels().then(d=>setModels(d.models||[])).catch(()=>{});}catch(e){alert("Install failed: "+e.message);}};
return(
-
+
@@ -831,7 +831,7 @@ export default function App(){
padding:isLandscapeShort?"2px 10px":"4px 12px",background:T.panel,borderBottom:`1px solid ${T.border}`,flexShrink:0,minHeight:isLandscapeShort?26:32}}>
{/* Sidebar toggle (narrow only) */}
- {isNarrow&&}
@@ -839,11 +839,11 @@ export default function App(){
background:state.connected?T.green:T.red,boxShadow:`0 0 6px ${state.connected?T.green:T.red}`}}/>
{!isNarrow&&{state.connected?"CONNECTED":"OFFLINE"}}
{/* Undo/Redo */}
-
}
-
setView("captures")}title="Downloads">
+ setView("captures")} title="Downloads">
- setView("presets")}title="Presets">
+ setView("presets")}title="Presets">
{["stomp","preset"].map(m=>(setFootswitchMode(m)} style={{
- padding:"1px 5px",borderRadius:3,border:"none",height:20,
+ padding:"1px 5px",borderRadius:3,border:"none",height:44,
fontSize:8,fontWeight:700,letterSpacing:".04em",textTransform:"uppercase",
background:footswitchMode===m?T.amber:"transparent",
color:footswitchMode===m?"#000":T.textDim,
- cursor:"pointer",lineHeight:1.5,minWidth:34,display:"flex",alignItems:"center",justifyContent:"center",
+ cursor:"pointer",lineHeight:1.5,minWidth:44,display:"flex",alignItems:"center",justifyContent:"center",
}}>{m==="stomp"?"SM":"PR"}))}
-
+
- {if(!document.fullscreenElement){document.documentElement.requestFullscreen()}else{document.exitFullscreen()}}}title="Fullscreen">
+ {if(!document.fullscreenElement){document.documentElement.requestFullscreen()}else{document.exitFullscreen()}}}title="Fullscreen">
-
setMenuOpen(true)} title="Main Menu">
β°
@@ -1027,7 +1027,7 @@ export default function App(){
{view==="captures"&&
setView("main")}/>}
{view==="presets"&&(
-
Presets
setView("main")}>β
+
Presets
setView("main")}>β
{presets.map((p,i)=>(
πΎ Save Preset
-
setOverlayView(null)}>β
+
setOverlayView(null)}>β
@@ -1133,12 +1133,12 @@ export default function App(){
π Bypass / Control
-
setOverlayView(null)}>β
+
setOverlayView(null)}>β
π« Global Bypass
-
{setGlobalBypass(p=>!p);API.bypassToggle().catch(()=>{});}}>
{globalBypass?"ON":"OFF"}
@@ -1149,7 +1149,7 @@ export default function App(){
{blocks.map(b=>(
{b.name||b.type}
-
handleToggleBlock(b.id)}>
{b.bypassed?"BYP":"ACT"}
@@ -1180,12 +1180,12 @@ export default function App(){
πΆ Wireless
-
setOverlayView(null)}>β
+
setOverlayView(null)}>β
πΆ WiβFi
- Scan
+ Scan
Use pedal as access point or connect to existing network via the settings panel.
@@ -1193,7 +1193,7 @@ export default function App(){
π΅ Bluetooth
- ON
+ ON
Bluetooth MIDI is enabled. Pair with your mobile device or MIDI controller.
@@ -1208,7 +1208,7 @@ export default function App(){
+ Add Block
-
setAddBlockType(null)}>β
+
setAddBlockType(null)}>β
{Object.entries(BLOCK_DISPLAY_NAMES).filter(([k])=>!["loop","split","merge"].includes(k)).map(([type,name])=>(
diff --git a/src/FocusView.jsx b/src/FocusView.jsx
index 096c888..62831d5 100644
--- a/src/FocusView.jsx
+++ b/src/FocusView.jsx
@@ -164,7 +164,7 @@ function FocusSlider({ label, value = 50, onChange, onChangeEnd, min = 0, max =
{label}
{touchVal ?? value}
{label}
β
@@ -178,7 +178,7 @@ function SettingsSlider({ label, value, min, max, unit, onChange }) {
minWidth: 36, textAlign: "center",
}}>{value}{unit}
+
@@ -392,7 +392,7 @@ export default function GlobalSettings({ onClose, onMasterVolume, onAudioProfile
-
β
+
β
Settings
{!loaded &&
Loadingβ¦}
diff --git a/src/index.css b/src/index.css
index c6eaf2b..f68ccaf 100644
--- a/src/index.css
+++ b/src/index.css
@@ -42,9 +42,11 @@ body { background: #0A0A0C; color: #F0EDE6; font-family: 'Space Grotesk', sans-s
.btn-ghost { background: transparent; border-color: transparent; }
.btn-danger { border-color: #E06060; background: rgba(224,96,96,.15); color: #E06060; }
.btn-icon { display: inline-flex; align-items: center; justify-content: center;
- width: 28px; height: 28px; border-radius: 5px; border: 1px solid #2A2A32;
+ width: 44px; height: 44px; border-radius: 8px; border: 1px solid #2A2A32;
background: #1C1C22; cursor: pointer; transition: all .12s; touch-action: manipulation; }
.btn-icon:active { transform: scale(.92); }
+.btn:focus-visible { outline: 2px solid #3AB87A; outline-offset: 2px; }
+.btn-icon:focus-visible { outline: 2px solid #3AB87A; outline-offset: 2px; }
/* Slide panel (bottom drawer) */
.slide-panel { position: fixed; inset: 0; background: rgba(0,0,0,.7); z-index: 100;
@@ -186,9 +188,9 @@ body { background: #0A0A0C; color: #F0EDE6; font-family: 'Space Grotesk', sans-s
font-size: 11px;
}
.btn-icon {
- width: 24px;
- height: 24px;
- font-size: 10px;
+ width: 44px;
+ height: 44px;
+ font-size: 12px;
}
.card {
padding: 10px;