A cold front is the leading edge of a wedge of dense cold air that undercuts warmer air. Two laws fix the wedge: how steep it is, and how fast it advances.
Slope (Margules 1906). For two air masses in geostrophic balance, continuity of pressure along the sloping interface gives tan α = f (ρw Δv) / (g (ρc − ρw)) ≈ (f T̄ / g) (Δv / ΔT), with f the Coriolis parameter, Δv the difference of the along-front wind between the two air masses and ΔT their temperature difference. Typical fronts: 1:50 to 1:200. The panel shows both the temperature form and the exact density form found by a numerical root-finder.
Speed. The cold dome advances like a gravity current: c = Fr √(g' H), g' = g ΔT / Tw, with a head Froude number about 0.7-1.1 in laboratory density currents (Benjamin 1968). This ignores rotation, surface friction and the pressure field of the parent cyclone.
Lifting and rain. Warm air meets the wedge with speed c − uw and rises up the slope at w = (c − uw) tan α (centimetres per second: slow, broad ascent). It cools along the dry adiabat (g/cp = 9.8 K/km) until the lifting condensation level (Bolton 1980 formula; Espy's rule of thumb 125 m per K of dewpoint depression), then along the moist adiabat Γm = g (1 + Lv rs/(RdT)) / (cp + Lv² rs ε /(Rd T²)). The condensed water per kilogram is r0 − rs(top); the rain rate is eff · ρ w Δq.
A neat consequence: the band behind the front is (H − zLCL)/tan α wide and takes that long to pass, so the storm-total rain eff ρ Δq (1 − uw/c)(H − zLCL) does not depend on the slope: a steep front rains harder but for a shorter time. The experiment verifies this by marching a station through the front.
Honest limits: this is a two-dimensional kinematic sketch, not a weather model. Only the cold-air depth (not the full frontal zone up to the tropopause) is lifted, latent heating and convective bursts at the nose are not modelled, precipitation does not drift while falling, the station pressure and wind traces (pre-frontal trough, SW to NW veer) are illustrative shapes, and the rain efficiency 0.6 is a free parameter. The 3D scene exaggerates height 10 times relative to distance (1 unit = 10 km horizontally, 1 km vertically); the town, trees and mast are enlarged icons. Reference values (slopes, Froude number) are typical numbers quoted from memory and should be spot-checked.
Models and textures: Blender 5.2, procedurally baked with Cycles; rendering Three.js r160.