{% 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 — Look!-formatted Brief banner above the picker. #} {# Always rendered when the picker is rendered, but hidden #} {# unless a saved draw occupies the user's free-quota slot #} {# (server) OR LOCK HAND just fired (client un-hides on the #} {# fetch response w. the next-free-draw timestamp). Avoiding #} {# a full page reload on LOCK lets the iter-4a FTs keep their #} {# picker element refs valid post-lock. #}

Look!—your free draw is locked in for the next 24 hours. Next free draw available at .

{# Iter 4b — DEL guard portal. Uniform 'Are you sure?' copy #} {# regardless of quota state (the Brief banner above carries #} {# the quota-specific info). Always rendered (hidden by #} {# default); DEL click un-hides when picker is `_locked`. #} {# CONFIRM POSTs to /gameboard/my-sea/delete; NVM dismisses. #} {# 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 show_backup_intro_banner %} {% endif %} {% endif %}
{% endblock content %}