After the SVG coord-label rendering was removed in 3cc956e, the
top/middle/bottom placement setting silently stopped working — the
HTML `.duckmage-hex-label` spans were just flex-centered inside the
hex, ignoring the setting.
Restored honour via CSS:
- `.duckmage-hex-label` is now `position: absolute; left: 50%;
transform: translate(-50%, -50%)` so the parent's flex centering
doesn't pin it. `top` is set per-placement class.
- `renderGrid` writes a `duckmage-coord-{top,middle,bottom}` class on
the viewport, derived from `settings.coordPlacement`. Three CSS
rules anchor the label at top: 22% / 50% / 78% (matching the
previous SVG ±0.28 hex-height offsets so visual position is
unchanged for users who never touched the setting).
- Default (when no class set) renders at top: 78% so an
uninitialized state still looks like "bottom" — the same fallback
the dropdown UI defaults to.
Coord-slip regression test in
frontend-testing/examples/coord-slip-on-zoom still PASSes: 0 slips
in the NEW bake mid-frame.