Topography verification update
==============================

Every backend Topography request now writes a reproducible verification folder:

backend/cache/<HUC>_<hash>/
  request.json
  manifest.json
  verification.txt
  metadata.json
  statistics.json
  raw_dem.tif
  clipped_dem.tif
  colored_elevation.png
  qgis_style.qml
  debug/
    01_raw_preview.png
    02_clipped_preview.png
    03_histogram.png
    04_color_classes.png
    05_contours.png
    06_hillshade.png
    07_sample_pixels.csv
    08_processing_log.txt

What changed
------------
1. qgis_style.qml is now generated from the exact same elevation class breaks/colors used by colored_elevation.png.
   Open clipped_dem.tif in QGIS, then load qgis_style.qml to compare QGIS rendering with the backend PNG.

2. The debug files now use the requested names and include contours, hillshade, sample pixels, and a chronological processing log.

3. verification.txt and debug/verification_summary.json now include automatic consistency checks:
   - legend covers the true DEM min/max range
   - every visible PNG color exists in the legend
   - statistics.json matches recomputed values from clipped_dem.tif
   - colored_elevation.png dimensions match clipped_dem.tif dimensions
   - qgis_style.qml was created

4. The frontend response still returns the rendered PNG, legend, statistics, and verification metadata as before.

Important note
--------------
clipped_dem.tif stores elevation values in meters because that is what USGS 3DEP returns.
The web renderer converts those values to feet for display, statistics, legend labels, and sample pixel CSV.
qgis_style.qml converts the backend's feet-based class breaks back to meters so QGIS colors match the backend rendering.
