{% extends "core/base.html" %} {% load static %} {% load lyric_extras %} {% block title_text %}Game Sea{% endblock title_text %} {% block header_text %}GameSea{% endblock header_text %} {% block content %} {# Phase B spectator surface — an ACCEPTED invitee watches {{ owner|at_handle }}'s #} {# Sea read-only. The owner's my_sea.html is left untouched; this is a #} {# dedicated, simpler template: the table hex (seat 1C = owner, 2C = this #} {# visitor) + the owner's draw rendered read-only (no FLIP / DEL / AUTO #} {# DRAW). GATE VIEW opens the visitor gate; once a token is deposited the #} {# center btn becomes VIEW DRAW (toggles the read-only draw into view). #}
{% if seat2_present %} {# Visitor is present — VIEW DRAW reveals the owner's #} {# read-only draw (client-side toggle below). #} {% else %} {# Not yet present — GATE VIEW → visitor token gate. #} {% endif %}
{# Every present member shows on the ring — owner 1C + #} {# present invitees 2C–6C by deposit order (the viewer's #} {# own seat carries `--self`). Built server-side as #} {# `seats` so all viewers see identical absolute seating. #} {% for seat in seats %} {% if seat.present %}
{{ seat.label }}
{% else %}
{{ seat.label }}
{% endif %} {% endfor %}
{% if seat2_present %} {# Owner's draw, read-only. Hidden until VIEW DRAW toggles it in. Renders #} {# the SAME interactive cross stage the owner sees (click→stage, hover, #} {# SPIN, FYI) off the owner's draw payload — see _my_sea_visit_cross.html. #} {% endif %} {# Gear menu — NVM (back to /gameboard/) + BYE (drop presence, free 2C). #} {% url 'my_sea_visit_leave' owner.id as leave_url %} {% include "apps/gameboard/_partials/_my_sea_gear.html" with leave_url=leave_url %} {# Burger fan — carries the voice sub-btn (active while voice_active). #} {% include "apps/gameboard/_partials/_burger.html" %}
{% endblock content %} {% block scripts %} {# Voice-affordance glow/pulse machine — keys on the voice sub-btn's #} {# availability + the live mesh state (VoiceRoom.setOnStateChange). #} {% if seat2_present %} {# Read-only cross stage — StageCard + SeaDeal bind to #id_sea_overlay #} {# (inside #id_my_sea_visit_draw) for click→stage + SPIN + FYI + hover. #} {# A trimmed seed IIFE (no picker/FLIP/DEL machinery) reconstructs #} {# SeaDeal's `_seaHand` from the server-rendered filled slots so each #} {# card is clickable into the magnified stage — same logic as my_sea's #} {# saved-hand restore, just without the draw affordances. #} {# Async witness — a WS to `mysea_` pushes the owner's hand as each #} {# card lands; SeaDeal.register fills the cross slot (+ seeds it clickable) #} {# live, no refresh. A DEL (empty hand) re-empties the cleared slots. #} {% endif %} {% endblock scripts %}