diff --git a/docs/UX_Guidelines.md b/docs/UX_Guidelines.md
new file mode 100644
index 0000000..3f34764
--- /dev/null
+++ b/docs/UX_Guidelines.md
@@ -0,0 +1,390 @@
+# UX Guidelines
+
+This document captures the UI/UX design patterns, conventions, and principles observed across
+the trx-rs application. It covers the web frontend, CLI interfaces, configuration wizard, API
+design, and error handling.
+
+*Last reviewed: 2026-03-28*
+
+---
+
+## 1. Web Frontend (trx-frontend-http)
+
+### 1.1 Layout and Navigation
+
+The web UI is a single-page application served from embedded assets (no build step). It uses
+a **tab-based** navigation model with six top-level tabs:
+
+| Tab | Icon | Purpose |
+|---|---|---|
+| **Main** | House | Primary radio control: spectrum, frequency, mode, PTT, VFO, SDR controls |
+| **Bookmarks** | Bookmark | Saved frequency/mode presets with folder organisation |
+| **Digital modes** | Bar chart | FT8/FT4/FT2, WSPR, CW, APRS, AIS, VDES decode tables |
+| **Map** | Pin | Leaflet map for APRS/AIS/FT8 station plotting |
+| **Settings** | Wrench | Scheduler, background decode, history retention |
+| **About** | Info circle | Server/client/radio/audio/decoder/integration details |
+
+Tabs use inline SVG icons with a text label below. On narrow viewports the tab bar wraps and
+subtitles collapse to save space.
+
+The **Settings** and **About** tabs each use a secondary **sub-tab bar** for further grouping
+(e.g. Settings > Scheduler | Background Decode | History).
+
+### 1.2 Theming
+
+The UI supports **dark mode** (default) and **light mode** toggled via a header button. Theme
+preference persists in `localStorage`.
+
+Additionally, nine **colour styles** are available via a dropdown:
+
+- Original (default), Arctic, Lime, Contrast, Neon Disco, Donald (golden-rain), Amber, Fire, Phosphor
+
+Each style provides a full CSS custom-property override set for both dark and light variants.
+Styles are applied via `data-style` and `data-theme` attributes on ``.
+
+All colours reference CSS custom properties (`--bg`, `--card-bg`, `--text`, `--accent-green`,
+`--border-light`, etc.) so components never use hard-coded colour values.
+
+### 1.3 Typography
+
+- **Body**: `system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif`
+- **Frequency display**: `DSEG14 Classic` (14-segment display font, loaded from CDN with `preload`)
+- **Labels**: uppercase, 0.68-0.78 rem, `font-weight: 700`, `letter-spacing: 0.04em`
+- **Section labels** use pill-shaped badges (`border-radius: 999px`) with muted text
+
+### 1.4 Responsive Design
+
+Six breakpoints handle layout adaptation:
+
+| Breakpoint | Behaviour |
+|---|---|
+| `> 1100px` | Full width with bookmark side gutters on spectrum |
+| `< 1100px` | Side bookmark panels hidden |
+| `< 900px` | Card fills viewport width, reduced padding |
+| `< 760px` | Tab bar wraps, controls stack vertically, safe-area-inset padding for notched devices |
+| `< 640px` | Bottom-fixed tab bar (mobile), subtitles hidden, compact header |
+| `< 520px` | Further compact adjustments |
+
+Touch-specific: `@media (hover: none) and (pointer: coarse)` enlarges hit targets.
+
+The spectrum panel hints adapt: mouse users see "Scroll to zoom / Ctrl+Scroll to tune /
+Drag to pan" while touch users see "Pinch to zoom / Drag to pan".
+
+### 1.5 Interactive Controls
+
+- **Jog wheel**: Circular CSS-styled draggable dial for frequency tuning (skeuomorphic radial-gradient, grab cursor, shadow/inset). Plus/minus buttons flank it.
+- **Step unit buttons**: Segmented button group (MHz / kHz / Hz) with `.active` highlight
+- **Step scale**: 1x / 0.1x multiplier toggle
+- **Frequency input**: Monospace DSEG14 font, editable `` with disabled opacity fix
+- **Mode selector**: `