4322e1fc1777c8f2fda5174ca2e9c707f67c56e9
The .room-table-scene → .table-hex-border → .table-hex → .table-center + seats
ring was byte-identical across room.html, my_sea.html, my_sea_visit.html &
billboard/my_sign.html. Lift the skeleton into one cross-app partial so every
surface — and the upcoming Sea Select felt rebuild — shares a single source.
- core/_partials/_table_hex.html: the 4-div skeleton. The varying center +
seats are passed as partial NAMES (`hex_center` / `hex_seats`) since Django
{% include %} has no slot; `{% include hex_center %}` resolves the string var
+ inherits the full page context (no `only`), so each fragment sees its page's
vars unchanged → identical render.
- Per-surface center fragments (verbatim moves): _room_hex_center,
_my_sea_hex_center, _my_sea_visit_hex_center (gameboard/_partials),
_my_sign_hex_center (billboard/_partials).
- Seats fragments: _room_hex_seats (gate_positions); _table_seats — SHARED by
my_sea + my_sea_visit (`seats` loop; the `--self` modifier is inert on my_sea);
_my_sign_hex_seats (single chair).
- The page-specific outer wrappers stay put (room's .room-shell + ROLE_SELECT
SCAN SIGS form; .my-sea-landing / .my-sign-landing; my_sign's
{% if not current_significator %} gate).
The "felt" is deliberately NOT extracted — it's a --duoUser bg toggled by
phase/stage classes (CSS), already DRY; each phase's felt content is bespoke.
Markup-only, no behaviour change. Verified: 1170 epic+gameboard+billboard render
ITs green (the table-hex / table-seat / center-btn assertions are the gate) +
MySeaDrawSeaLandingTest FTs green (live hex render + FREE DRAW seats
.table-seat[data-slot="1"] through the shared seats partial).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Description
No description provided
Languages
Python
45.5%
JavaScript
36.1%
HTML
9.6%
SCSS
8.6%
Jinja
0.1%