{% extends "core/base.html" %} {% load static %} {% block title_text %}Game Sea{% endblock title_text %} {% block header_text %}GameSea{% endblock header_text %} {% block content %}
{% if not user_has_sig %} {# Sprint 4b sign-gate. The draw UX is gated behind a saved #} {# significator — render a Look!-formatted Brief-style line w. #} {# FYI (→ /billboard/my-sign/) + NVM (→ /gameboard/) until the #} {# user picks a sign. Inline (not portaled like .note-banner) #} {# because the gate IS the page content, not a transient nudge. #}

Look!—pick your sign before drawing the Sea.

{% else %} {% if not active_draw %} {# Sprint 5 iter 1 — DRAW SEA landing UX. DRY table hex from #} {# the room shell (.room-shell > .room-table > … > .table-hex) #} {# w. 6 chair seats labeled 1C-6C as placeholders for the #} {# friend-invite feature per the My Sea roadmap architectural #} {# anchor "Six chairs retained even in solo". DRAW SEA btn #} {# mirrors SCAN SIGN on /billboard/my-sign/. Suppressed when #} {# an active draw exists (iter 4b) — the picker phase is the #} {# landing state once the user has spent their free quota. #}
{# Sprint 5 iter 1 — FREE DRAW = the 1/24hr free-quota draw. #} {# Future sprint will conditionally swap this for a DRAW SEA #} {# .btn-primary that calls the gatekeeper partial once the #} {# free daily has been used; until then the btn renders FREE #} {# DRAW. ID retained as `id_draw_sea_btn` (intent: the draw #} {# entry point) so the swap is label-only when iter 6+ lands. #}
{% for n in "123456" %} {# Chair-position labels (1C-6C). No roles in #} {# my-sea (this is the solo draw flow); using #} {# `.seat-position-label` instead of the room's #} {# `.seat-role-label` to keep the no-role #} {# semantics clean. `.position-status-icon` + #} {# `.fa-ban` are unchanged — already role- #} {# agnostic in _room.scss. #}
{{ n }}C
{% endfor %}
{% endif %} {# Picker phase — per-spread flexible layout. Sig pins .sea- #} {# pos-core; the 6 surrounding positions all render in DOM #} {# so the SPREAD dropdown can swap `.my-sea-cross[data- #} {# spread]` between the 4 three-card variants (each w. its #} {# own 3-position subset + draw order) + the 2 six-card #} {# Celtic Cross variants (all 6 surrounding positions). #} {# Each empty slot carries a `.sea-pos-label` caption (re- #} {# appropriated from the GRAVITY/LEVITY .sea-stack-name look) #} {# that JS updates per spread. #} {# #} {# `id="id_sea_overlay"` aliases the picker to what SeaDeal #} {# binds to (the gameroom uses the same ID on a different #} {# page — no DOM collision since my-sea + gameroom never co- #} {# exist in one DOM). FLIP click delegates to SeaDeal. #} {# openStage(), which fills the slot AND opens the portaled #} {# stage modal w. SPIN / FYI controls. #} {# Iter 4b — DEL guard reuses the shared `#id_guard_portal` #} {# from base.html (the same one the room's gear-menu DEL btn #} {# uses). Gaussian-glass tooltip positioned above the DEL btn,#} {# no backdrop. The picker IIFE below invokes it via #} {# `window.showGuard(delBtn, "Are you sure?", confirmFn, null,#} {# {yesLabel: "DEL"})` when DEL is clicked post-lock. #} {# Sprint 5 iter 4a — shuffled deck (levity + gravity halves, #} {# sig excluded) embedded as JSON; JS reads on init and #} {# pops from the relevant pile on each deposit. #} {{ sea_deck_data|json_script:"id_my_sea_deck" }} {# StageCard + SeaDeal — both bind to `#id_sea_overlay` (the #} {# my-sea-picker) + `#id_sea_stage` (the stage partial) on #} {# DOMContentLoaded; openStage() runs on FLIP click below. #} {# Brief 'Default deck warning' banner — lifted verbatim from #} {# /billboard/my-sign/'s no-equipped-deck path. Same copy, #} {# same FYI (→ /gameboard/) + NVM (dismiss + proceed) actions.#} {# Tagged w. .my-sea-intro-banner so FTs disambiguate from #} {# any other Briefs on the page. #} {% if active_draw %} {# Iter 4b — saved-draw Brief. Standard portaled banner via #} {# Brief.showBanner (Gaussian-glass bg, atop-h2 positioning); #} {# the on-LOCK-success path inside the picker IIFE calls the #} {# same `window._showFreeDrawLockedBrief` so a freshly-locked #} {# hand gets the identical UX without a page reload. Pass an #} {# ISO timestamp (`|date:'c'`) so note.js's `
{% endblock content %}