From b9cbbda1a290d70e58a64308d07373648ff93654 Mon Sep 17 00:00:00 2001 From: Tim McCarthy Date: Fri, 10 Jul 2026 19:17:39 -0700 Subject: [PATCH] Keep crew roster in a consistent sidebar --- frontend/src/assets/css/admin.css | 17 ---- frontend/src/assets/css/base.css | 17 ++++ frontend/src/assets/css/character.css | 16 --- frontend/src/assets/css/components.css | 61 ------------ frontend/src/assets/css/lobby.css | 4 - frontend/src/assets/css/scene-play.css | 9 ++ frontend/src/assets/css/scene-setup.css | 21 +--- .../components/CharacterCreationPhase.svelte | 34 ------- frontend/src/components/CrewSidebar.svelte | 97 +++++++++++++++++++ frontend/src/components/GameOverPhase.svelte | 21 ---- frontend/src/components/LobbyPhase.svelte | 14 --- frontend/src/components/RecruitPhase.svelte | 27 ------ .../src/components/SceneSetupPhase.svelte | 21 +--- frontend/src/components/UpkeepPhase.svelte | 28 ------ frontend/src/lib/changelog.js | 9 +- frontend/src/pages/Dashboard.svelte | 36 ++++--- 16 files changed, 159 insertions(+), 273 deletions(-) create mode 100644 frontend/src/components/CrewSidebar.svelte diff --git a/frontend/src/assets/css/admin.css b/frontend/src/assets/css/admin.css index 30c9aa4..084a2f5 100644 --- a/frontend/src/assets/css/admin.css +++ b/frontend/src/assets/css/admin.css @@ -162,20 +162,3 @@ text-align: left; margin-top: 1.5rem; } - -.crew-epitaph-row { - background: var(--well); - padding: 0.75rem; - border-radius: var(--radius-sm); - margin-bottom: 0.5rem; - display: flex; - justify-content: space-between; - align-items: center; - flex-wrap: wrap; - gap: 0.5rem; -} - -.crew-epitaph-row .objectives-summary { - font-size: 0.85rem; - color: var(--text-muted); -} diff --git a/frontend/src/assets/css/base.css b/frontend/src/assets/css/base.css index f213bc1..a754f84 100644 --- a/frontend/src/assets/css/base.css +++ b/frontend/src/assets/css/base.css @@ -70,6 +70,23 @@ input[type="checkbox"] { margin: 0 auto; } +.phase-view-layout { + display: grid; + grid-template-columns: 180px minmax(0, 1fr); + gap: 1.5rem; + align-items: start; +} + +.phase-main-column { + min-width: 0; +} + +@media (max-width: 1100px) { + .phase-view-layout { + grid-template-columns: 1fr; + } +} + @media (max-width: 600px) { .dashboard-container { padding: 3.5rem 1rem 4rem; diff --git a/frontend/src/assets/css/character.css b/frontend/src/assets/css/character.css index 48854c6..ea45ff4 100644 --- a/frontend/src/assets/css/character.css +++ b/frontend/src/assets/css/character.css @@ -104,22 +104,6 @@ flex-shrink: 0; } -/* Crew creation progress rows */ -.status-row { - background: var(--well); - border-left: 4px solid var(--edge); - border-radius: var(--radius-sm); - padding: 0.75rem; - display: flex; - justify-content: space-between; - align-items: center; - list-style: none; -} - -.status-row.is-ready { - border-left-color: var(--success); -} - /* --- Character sheet layout --- */ .character-sheet-details { text-align: left; diff --git a/frontend/src/assets/css/components.css b/frontend/src/assets/css/components.css index 6f4f7ab..16866d4 100644 --- a/frontend/src/assets/css/components.css +++ b/frontend/src/assets/css/components.css @@ -293,49 +293,6 @@ color: color-mix(in srgb, var(--danger) 75%, var(--text)); } -/* --- Player chips --- */ -.player-chips { - display: flex; - flex-direction: column; - gap: 0.75rem; - margin-top: 1rem; -} - -.player-chip { - background: color-mix(in srgb, var(--text) 6%, transparent); - border: 1px solid var(--edge); - padding: 0.5rem 1.25rem; - border-radius: var(--radius-md); - display: flex; - align-items: center; - gap: 0.5rem; - width: 100%; - transition: var(--transition-smooth); -} - -.player-chip.current-user { - background: color-mix(in srgb, var(--accent) 14%, transparent); - border-color: var(--accent); -} - -.player-chip.voted-chip { - border-color: var(--success); - background-color: color-mix(in srgb, var(--success) 6%, transparent); -} - -.player-chip.not-voted-chip { - border-color: var(--edge); -} - -.list-chips { - align-items: stretch; -} - -.list-chips .player-chip { - padding: 0.4rem 1rem; - font-size: 0.9rem; -} - .deep-chip { border-color: var(--deep); background: color-mix(in srgb, var(--deep) 5%, transparent); @@ -346,24 +303,6 @@ background: color-mix(in srgb, var(--pirat) 5%, transparent); } -.player-chip.is-ghost { - border-color: var(--ghost); - color: var(--ghost); - background: color-mix(in srgb, var(--ghost) 10%, transparent); -} - -.player-chip.is-dead { - border-color: var(--danger); - color: var(--danger); - background: color-mix(in srgb, var(--danger) 10%, transparent); -} - -.player-chip.is-captain { - border-color: var(--accent); - color: var(--accent); - background: color-mix(in srgb, var(--accent) 10%, transparent); -} - /* --- Badges --- */ .creator-badge { background: var(--accent); diff --git a/frontend/src/assets/css/lobby.css b/frontend/src/assets/css/lobby.css index 12ab9a0..a832f94 100644 --- a/frontend/src/assets/css/lobby.css +++ b/frontend/src/assets/css/lobby.css @@ -4,10 +4,6 @@ margin: 2rem auto; } -.lobby-status-box { - margin: 2rem 0; -} - .links-box { text-align: left; margin-bottom: 2rem; diff --git a/frontend/src/assets/css/scene-play.css b/frontend/src/assets/css/scene-play.css index db66636..5c94966 100644 --- a/frontend/src/assets/css/scene-play.css +++ b/frontend/src/assets/css/scene-play.css @@ -88,6 +88,15 @@ transform: translateX(2px); } +.crew-bubble.is-static { + cursor: default; +} + +.crew-bubble.is-static:hover { + background: var(--surface-raised); + transform: none; +} + .crew-bubble.is-deep { border-left-color: var(--deep); background: color-mix(in srgb, var(--deep) 12%, var(--surface-raised)); diff --git a/frontend/src/assets/css/scene-setup.css b/frontend/src/assets/css/scene-setup.css index ade35be..5af599e 100644 --- a/frontend/src/assets/css/scene-setup.css +++ b/frontend/src/assets/css/scene-setup.css @@ -6,6 +6,11 @@ margin: 2rem 0; } +.setup-grid.single { + grid-template-columns: minmax(0, 700px); + justify-content: center; +} + @media (max-width: 800px) { .setup-grid { grid-template-columns: 1fr; @@ -63,19 +68,3 @@ border: 1px dashed var(--edge); color: var(--text-muted); } - -.roster-list { - display: flex; - flex-direction: column; - gap: 0.5rem; -} - -.roster-item { - display: flex; - justify-content: space-between; - align-items: center; - gap: 0.75rem; - background: var(--well); - border-radius: var(--radius-sm); - padding: 0.6rem 0.9rem; -} diff --git a/frontend/src/components/CharacterCreationPhase.svelte b/frontend/src/components/CharacterCreationPhase.svelte index c0ebece..6890d98 100644 --- a/frontend/src/components/CharacterCreationPhase.svelte +++ b/frontend/src/components/CharacterCreationPhase.svelte @@ -566,39 +566,5 @@ {/if} - -
-

V. Crew Creation Status

-

See the creation progress of the entire crew in real time.

-
-
    - {#each state.players as p} -
  • - {displayName(p)} - - {#if p.needs_reroll} - Spectating - {:else if phase === 'swap_techniques'} - {#if p.is_ready} - Done Swapping - {:else} - {@const ownLeft = JSON.parse(p.held_techniques || '[]').filter(t => t.creator_id === p.id).length} - Swapping ({ownLeft} of their own left) - {/if} - {:else if p.tech_jack} - Ready - {:else if phase === 'assign_techniques'} - Assigning Face Cards - {:else if p.created_techniques && JSON.parse(p.created_techniques).length === 3} - Techniques Submitted - {:else} - Writing Sheet - {/if} - -
  • - {/each} -
-
-
diff --git a/frontend/src/components/CrewSidebar.svelte b/frontend/src/components/CrewSidebar.svelte new file mode 100644 index 0000000..9b961ea --- /dev/null +++ b/frontend/src/components/CrewSidebar.svelte @@ -0,0 +1,97 @@ + + + + +{#if openTarget} + openTargetId = null} /> +{/if} diff --git a/frontend/src/components/GameOverPhase.svelte b/frontend/src/components/GameOverPhase.svelte index 1b600aa..b23f779 100644 --- a/frontend/src/components/GameOverPhase.svelte +++ b/frontend/src/components/GameOverPhase.svelte @@ -1,9 +1,6 @@ @@ -29,24 +26,6 @@ {/if} -
-

The Crew

- {#each pirats as p} -
- - {#if p.is_ghost}👻{:else if p.is_dead}💀{:else}🐀{/if} - {displayName(p)} (Rank {p.rank}) - {#if p.id === state.game.captain_player_id} ⭐ Captain{/if} - - - {p.completed_personal_1 ? '🔫 Gat' : '— no gat'} · - {p.completed_personal_2 ? '📛 Named' : '— nameless'} · - {p.completed_personal_3 ? '⚰️ Story complete' : '⛵ Still sailing'} - -
- {/each} -
-

Want more? Get the full game "The Magical Land of Yeld" at YeldStuff.com!

diff --git a/frontend/src/components/LobbyPhase.svelte b/frontend/src/components/LobbyPhase.svelte index 3273f8c..de85e3f 100644 --- a/frontend/src/components/LobbyPhase.svelte +++ b/frontend/src/components/LobbyPhase.svelte @@ -43,20 +43,6 @@

{state.game.crew_name || "Ship's Hold"} (Lobby)

Wait here as the mathematical mages gather stowaway rats for the spell. Once everyone is in, the captain will initiate the transformation.

-
-

Joined Crew members

-
- {#each state.players as p} -
- 🐀 - {p.name} - {#if p.is_creator}Creator - {:else if p.is_admin}Admin{/if} -
- {/each} -
-
- diff --git a/frontend/src/components/SceneSetupPhase.svelte b/frontend/src/components/SceneSetupPhase.svelte index 6a099f2..ec1210a 100644 --- a/frontend/src/components/SceneSetupPhase.svelte +++ b/frontend/src/components/SceneSetupPhase.svelte @@ -1,7 +1,6 @@