--- id: TASK-132 title: PWA — transport abstraction (simulator + serial + BLE) status: Done assignee: [] created_date: '2026-03-29 20:52' labels: - pwa - transport milestone: m-2 dependencies: [] priority: high --- ## Description Write transport.js (GaiaTransport base class, SerialTransport via Web Serial, BLETransport via Web Bluetooth NUS, SimulatorTransport) and simulator.js (virtual pan/tilt panel with crosshair + LED indicator). ## Acceptance Criteria - [ ] #1 Base class with connect/disconnect/send/onMessage/isConnected - [ ] #2 SerialTransport: Web Serial 115200 baud, JSON lines - [ ] #3 BLETransport: NUS UUIDs, TX notify subscription, 20-byte MTU chunking - [ ] #4 SimulatorTransport: passes to Simulator.update() - [ ] #5 Simulator: floating panel with crosshair dot + LED circle + readout ## Final Summary transport.js: 3 implementations + factory. simulator.js: DOM panel with crosshair grid, LED indicator, angle readout. ?transport=simulator URL param works.