settings: add horizontal section nav bar

Adds a scrollable row of section tabs at the top of the settings
overlay: Network · Audio · Interface · Bluetooth · System.
Each tab scrolls smoothly to its section and highlights as active.
This commit is contained in:
2026-06-16 18:57:53 -04:00
parent bdf1434718
commit f6fe3b2523
+28 -5
View File
@@ -116,6 +116,12 @@ body{display:flex;flex-direction:column;max-height:100vh;user-select:none;-webki
/* Settings */
.setting-group{margin-bottom:12px}
.setting-group-title{font-size:10px;font-weight:700;color:var(--text-sec);text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;padding:0 4px}
/* Settings section nav */
.settings-nav{display:flex;gap:4px;overflow-x:auto;padding:0 0 8px 0;flex-shrink:0;scrollbar-width:none;-ms-overflow-style:none}
.settings-nav::-webkit-scrollbar{display:none}
.sn-btn{flex-shrink:0;padding:5px 12px;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--text-dim);font-family:var(--font);font-size:10px;font-weight:600;cursor:pointer;white-space:nowrap;transition:all .12s}
.sn-btn:active{background:var(--panel);transform:scale(.95)}
.sn-btn.active{border-color:var(--amber);color:var(--amber);background:rgba(232,160,48,.08)}
.setting-row{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;background:var(--surface);border-radius:6px;border:1px solid var(--border);margin-bottom:3px;min-height:42px}
.setting-row .sr-label{font-size:11px;font-weight:600}
.setting-row .sr-value{font-size:10px;color:var(--text-sec)}
@@ -241,7 +247,15 @@ body{display:flex;flex-direction:column;max-height:100vh;user-select:none;-webki
<div class="overlay" id="overlaySettings">
<div class="overlay-hdr"><span class="overlay-title">⚙ Settings</span><button class="overlay-close" id="closeSettings"></button></div>
<div class="overlay-body">
<div class="setting-group"><div class="setting-group-title">Network</div>
<!-- Settings section nav -->
<div class="settings-nav">
<button class="sn-btn active" data-section="network" onclick="scrollToSection('network')">Network</button>
<button class="sn-btn" data-section="audio" onclick="scrollToSection('audio')">Audio</button>
<button class="sn-btn" data-section="interface" onclick="scrollToSection('interface')">Interface</button>
<button class="sn-btn" data-section="bluetooth" onclick="scrollToSection('bluetooth')">Bluetooth</button>
<button class="sn-btn" data-section="system" onclick="scrollToSection('system')">System</button>
</div>
<div class="setting-group" id="section-network"><div class="setting-group-title">Network</div>
<div class="setting-row"><span class="sr-label">🌐 Eth IP</span><span class="sr-value" id="netEthIp"></span></div>
<div class="setting-row"><span class="sr-label">🔗 MAC</span><span class="sr-value" id="netEthMac"></span></div>
<div class="setting-row"><span class="sr-label">🚪 Gateway</span><span class="sr-value" id="netGateway"></span></div>
@@ -253,14 +267,14 @@ body{display:flex;flex-direction:column;max-height:100vh;user-select:none;-webki
<div class="wifi-connect-pw" id="wifiConnectPw" style="display:none"><input type="password" id="wifiPw" placeholder="WiFi password"><button id="wifiConnectBtn">Connect</button></div>
<div class="setting-row"><span class="sr-label">🔥 Hotspot</span><span class="sr-value" id="hotspotStatus">Off</span><button class="sr-action" id="hotspotToggle">Enable</button></div>
</div>
<div class="setting-group"><div class="setting-group-title">Audio</div>
<div class="setting-group" id="section-audio"><div class="setting-group-title">Audio</div>
<div class="setting-row"><span class="sr-label">🎛 Profile</span><span class="sr-value" id="audioProfileLabel"></span></div>
<div class="audio-profile-grid" id="audioProfileGrid"></div>
<div class="setting-row"><span class="sr-label">🎸 Instrument</span><span class="sr-value" id="instrumentLabel">Guitar</span><button class="sr-action" id="instrumentCycleBtn" style="min-width:44px;padding:4px 10px">Cycle</button></div>
<div class="setting-row"><span class="sr-label">🔄 Channel Mode</span><span class="sr-value" id="channelModeLabel">Dual Mono</span><button class="sr-action" id="channelModeToggle">Toggle</button></div>
<div class="setting-row"><span class="sr-label">🔗 Routing</span><span class="sr-value" id="routingModeLabel">4CM</span><button class="sr-action" id="routingModeToggle">Toggle</button></div>
</div>
<div class="setting-group"><div class="setting-group-title">🎚 Audio Interface</div>
<div class="setting-group" id="section-interface"><div class="setting-group-title">🎚 Audio Interface</div>
<div class="setting-row"><span class="sr-label">🔌 Input Device</span><select id="audioInputDevice" style="flex:1;min-width:0;font-size:10px;padding:4px 6px;min-height:30px" onchange="setAudioDevice(this.value)"></select></div>
<div class="ch-card" id="ch1Card" style="background:var(--card2);border-radius:8px;padding:6px 8px;margin:4px 0;border:2px solid rgba(232,160,48,.25)">
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:4px">
@@ -298,12 +312,12 @@ body{display:flex;flex-direction:column;max-height:100vh;user-select:none;-webki
</div>
<div style="font-size:9px;color:var(--text3);padding:2px 0">Dual Mono: each channel has independent presets. Same instrument = shared presets.</div>
</div>
<div class="setting-group"><div class="setting-group-title">Bluetooth</div>
<div class="setting-group" id="section-bluetooth"><div class="setting-group-title">Bluetooth</div>
<div class="setting-row"><span class="sr-label">🔵 Status</span><span class="sr-value" id="btStatus"></span></div>
<div class="setting-row"><span class="sr-label">🎛 MIDI</span><span class="sr-value" id="btMidiStatus">Off</span><button class="sr-action" id="btMidiToggle">Enable</button></div>
<div class="setting-row"><span class="sr-label">🔓 Discoverable</span><span class="sr-value" id="btDiscStatus">On</span><button class="sr-action" id="btDiscToggle">Disable</button></div>
</div>
<div class="setting-group"><div class="setting-group-title">System</div>
<div class="setting-group" id="section-system"><div class="setting-group-title">System</div>
<div class="setting-row"><span class="sr-label">🔧 CPU</span><span class="sr-value" id="cpuLabel">0%</span></div>
<div class="setting-row"><span class="sr-label">🌡 Temp</span><span class="sr-value" id="sysTemp"></span></div>
<div class="setting-row"><span class="sr-label">⏱ Uptime</span><span class="sr-value" id="sysUptime"></span></div>
@@ -703,6 +717,15 @@ async function loadBtMidi(){
}catch(e){}
}
// Settings section nav — scroll to section and highlight active button
function scrollToSection(id){
const el=document.getElementById('section-'+id);
if(el) el.scrollIntoView({behavior:'smooth',block:'start'});
document.querySelectorAll('.sn-btn').forEach(b=>b.classList.remove('active'));
const btn=document.querySelector('.sn-btn[data-section="'+id+'"]');
if(btn) btn.classList.add('active');
}
async function loadHotspotStatus(){
try{
const hs=await API.hotspotStatus();