mDNS detection, dark mode, toggle hardening & port validation
Backend polls avahi-resolve every 5s for actual broadcasted mDNS hostname; mismatch banner now offers separate 'Use IP' and 'Use mDNS' one-click buttons.
Removed duplicate iOS Setup QR card embedded inside the Settings tab.
Full dark mode: 3-tier surface hierarchy (--bg-base / --bg-raised / --bg-elevated) with semantic CSS tokens for inputs, search bar, history buttons, QR cards, info boxes, and settings sections; sidebar toggle persists preference to localStorage.
iOS Setup page dark mode: QR cards, subtitle, instructions box and Pro Tip section all use CSS variables instead of hardcoded colours.
Server toggle hardened: double-click guard via isTransitioning state, indicator tied to real connectivity not internal flag, Stopping.../Starting... intermediate labels, semantic colour coding (green Active / amber Starting / grey Stopped).
Address field shows real-time amber border + inline warning when typed port != 8080.