TSSIM/JESIM final clean complete v29
====================================

This is a clean complete folder, not a patch-only package.
Unzip into a new folder, build, then run the relay.

Build:
  build_win_mingw.bat

Run relay:
  python jesim_ws_relay.py

v29 change
----------
Advanced source-node tuning now recalculates water uplift/subsidence height automatically from slip edits.

In node tune mode:
  E                node tune ON/OFF
  click            select one node
  Ctrl+click       toggle selection
  Shift+click      add to selection
  A                select all
  C or Esc          clear selection
  Tab/Shift+Tab    move primary node inside the selection
  + / -            adjust selected nodes' slip; height is auto-scaled/recalculated
  PgUp / PgDn      adjust selected nodes' slip; height is auto-scaled/recalculated
  [ / ]            adjust delay
  arrows           move selected nodes
  Shift+arrows     move selected nodes by 5 cells
  F                footprint-only: height=0, slip kept
  U                copy current brush values to selected nodes
  Delete           remove selected nodes

Auto-uplift behavior:
  - For nodes drawn by the finite-fault brush, the existing local lobe shape/sign/taper is preserved by scaling height with slip ratio.
  - Footprint-only nodes with height=0 remain footprint-only when slip is adjusted.
  - If a legacy node has height but no slip, v29 falls back to the current dip/depth/strike-slip settings to compute a height from slip.

v28 features kept
-----------------
  - Advanced node multi-select
  - Right-side yellow status text wraps inside the panel
  - JESIM observation messages are batched on 5-minute send buckets
  - JESIM sends only when at least one observation peak is updated
  - rise="+" means peak update
  - Shimizu observation removed
  - JESIM transmit-only mode stops simulation at 60 hours
  - Observation send timing uses fixed wall-clock 1x
  - No Y-axis flip in websocket coordinates
  - Wave-speed 1.13 experiment rolled back
