TSSIM/JESIM final v38 - actual fault width in km

Base: v37 node-dip freeze complete build.

Main change:
- The source width setting is no longer a grid-cell brush radius.
- Settings > Main now uses "Fault width (km)".
- This width is interpreted as the real down-dip fault-plane width.
- New source stamps draw the surface projection of that width:
    projected map width ~= fault_width_km * cos(dip)
- M0/Mw converts the counted horizontal source cells back to fault-plane area
  using the node's frozen /cos(dip) factor.

Result:
- If rupture length, real width, and slip are the same, changing dip should not
  make the moment magnitude shrink just because the map projection changes.
- Nodes already painted keep their own stored dip and area factor, so changing
  the global dip only affects newly painted nodes.

Controls:
- Settings numeric box: Fault width (km), valid range 1..800 km.
- < and > keys adjust fault width.
  Normal: 5 km, Shift: 20 km, Ctrl: 1 km.
- Settings width +/- buttons adjust by 5 km.

Kept from previous versions:
- Advanced node tune mode and multi-selection.
- Node slip adjustment auto-recalculates uplift.
- Subsidence nodes do not carry slip and do not count toward M0/Mw.
- Land subsidence nodes are excluded.
- JESIM observations are sent every 5 minutes for arrived stations.
- packet_meaningful_update is packet-wide; individual peak updates are indicated by rise="+".
- 清水 is removed from the observation table.
- Transmit-only mode stops simulation at 60 h.
- Wall-clock 1x observation pacing.
- No Y-axis flip.
