Adaptive topography stretch update
==================================

This version replaces the fixed P2/P5/P10 stretch experiment buttons with an automatic adaptive percentile selection.

Backend changes:
- backend/renderers/elevation_renderer.py
  - Added choose_stretch_percentiles().
  - calculate_display_range() now chooses one of:
    * Auto P5-P95 for clustered/flat elevation distributions,
    * Auto P3-P97 for moderate distributions,
    * Auto P2-P98 for already well-distributed mountainous terrain.
  - The legend reports the selected method and the reason.

- backend/layers/topography.py
  - Uses the adaptive display range directly.
  - No longer generates manual stretch experiment images/buttons.

Frontend changes:
- js/app.js
  - The legend now shows only the continuous gradient ramp and the automatically selected stretch.
  - Removed manual P2-P98 / P5-P95 / P10-P90 buttons.
  - When a new watershed is selected, previous topography backend results are invalidated.
  - When the refreshed topography result returns, the table and chart update with the new watershed statistics.

The map still uses the continuous 256-color ramp and light Gaussian smoothing. Hillshade is not added yet.
