## [0.65.0] - 2026-10-28

### Added
- **bt_module:** add a setting to invert the BT/ESP audio mux pin
- **display:** dim the ST7796 in software instead of PWM on the backlight
- **buzzer:** add melody=<name> command and a notification melody field
- **network:** boot on wired Ethernet when the P4 dev kit has a cable with a lease
- **display:** dim the ST7789V in software when it has no backlight pin
- **scripts:** open the serial monitor in a new console window on Windows
- **ui:** replace the built-in splash logo and align its waves with the animated bars
- **web:** name the P4 board in /api/pins and refuse a wiring drawn for the other one
- **defines:** add a P4 board selector with a Waveshare dev kit profile
- **web:** refuse a wiring bundle drawn for the other chip
- **defines:** enable the P4 buzzer on GPIO52
- **ui:** animate the boot splash on the P4 profile
- **ui:** make VU colour-zone colours configurable per screen
- **ui:** make VU colour-zone colours configurable per screen
- **web:** hide SD pin wiring when the board has an onboard slot
- **sdcard:** mount the FireBeetle P4 onboard TF slot on SDMMC slot 0, 4-bit
- **display:** add ST7701 DSI panel, GT911 touch and 800x480 profile for ESP32-P4
- **www:** hide pin sections for the ST7701 and GT911
- **board_pins:** add ESP32-P4 pin defaults and GPIO range

### Fixed
- **board_pins:** reserve the DSI panel's I2C pins on ST7701 builds
- **display:** drive the ST7796 backlight fully on at 100% and raise its PWM to 20 kHz
- **web:** pause the playing stream while a theme installs to SD
- **web:** answer a missing SD file or folder with a quiet 404
- **display:** run the ST7701 build without a display when no DSI panel answers
- **sdcard:** clock the P4 dev kit's TF slot at 10 MHz so 4-bit writes stop timing out
- **scripts:** keep the esptool v5 venv outside the repo so VS Code stops auto-activating it
- **display:** let esp_lcd pick the DSI PHY clock for the chip revision
- **io:** read ADC1 pins from IDF's channel map on every chip
- **web:** take each chip's GPIO range and pin lists from /api/pins
- **web:** treat GPIO46 as an allowed pin and correct the pin notes
- **network:** keep the AP netif when switching to STA-only
- **ci:** let each variant's target override IDF_TARGET from the environment
- **scripts:** let defines.h override IDF_TARGET from the environment
- **ci:** keep HAS_ESPNOW_REMOTE off for ESP32-P4 variants
- **ci:** force HAS_ESPNOW_REMOTE on in release builds
- **display:** make 270° the ST7701 baseline so the panel boots upright
- **display:** keep the ST7701 flush from hanging on odd PPA blocks and restore flip at boot
- **network:** read the base MAC so ESP32-P4 ids stay unique
- **network:** disable the esp_hosted buffer pool on ESP32-P4
