Condense UI labels and align obstacle statistics

This commit is contained in:
2026-09-04 19:12:36 -07:00
parent 52dda12c47
commit 376765dd0f
7 changed files with 61 additions and 26 deletions
+11 -6
View File
@@ -236,7 +236,7 @@
padding: 1.25rem;
background: var(--well);
display: grid;
grid-template-columns: 0.8fr 2fr 1fr 1fr;
grid-template-columns: 0.8fr 2fr 2fr;
gap: 1rem;
position: relative;
overflow: hidden;
@@ -335,11 +335,17 @@
color: var(--text-muted);
}
.obstacle-value-display {
.obstacle-stats {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
align-self: start;
gap: 0.5rem;
}
.obstacle-value-display {
display: flex;
flex-direction: column;
justify-content: center;
justify-content: flex-start;
align-items: center;
background: color-mix(in srgb, var(--accent) 5%, transparent);
border: 1px dashed var(--edge-accent);
@@ -348,10 +354,9 @@
}
.obstacle-successes-display {
align-self: start;
display: flex;
flex-direction: column;
justify-content: center;
justify-content: flex-start;
align-items: center;
background: color-mix(in srgb, var(--success) 5%, transparent);
border: 1px dashed color-mix(in srgb, var(--success) 30%, transparent);
@@ -361,7 +366,7 @@
.obstacle-successes-display .val-number {
color: var(--success);
font-size: 1.5rem;
font-size: 1.8rem;
}
.val-label {
+2 -2
View File
@@ -41,7 +41,7 @@
e.currentTarget.classList.remove("dragging");
}} />
{:else}
<p class="empty-text text-center">Your hand is empty! (You draw cards when playing cards that match the suit color of the obstacle.)</p>
<p class="empty-text text-center">Empty hand. Match an obstacles color to draw cards.</p>
{/each}
</div>
</div>
@@ -55,7 +55,7 @@
<div class="card glass-panel obstacle-list-card">
<div class="card-header">
<h3>🌊 The Obstacle List</h3>
<h3>🌊 Obstacles</h3>
<span class="deck-counter">🎴 Deck: {state.game.deck_cards ? JSON.parse(state.game.deck_cards).length : 0} cards left</span>
</div>
<ObstacleBoard {state} />
+5 -5
View File
@@ -170,7 +170,7 @@
</script>
<div class="between-scenes-view text-center">
<h2>Between Scenes (Scene #{state.game.current_scene_number} Concluded)</h2>
<h2>Between Scenes · Scene {state.game.current_scene_number}</h2>
<p class="description">Upkeep and tallying. Nominate a crewmate to Rank Up, redraw hand cards for resting Deep players, and ready up for the next scene.</p>
{#if state.player.is_dead && !state.player.is_ghost && !state.player.needs_reroll}
@@ -201,7 +201,7 @@
<div class="between-grid" class:single={state.game.phase !== 'deep_upkeep'}>
<!-- Ranks and Voting Card -->
<div class="card glass-panel voting-card">
<h3>1. Pirate Ranking (Voting)</h3>
<h3>Rank Up</h3>
<p class="section-desc">Every player (including the Deep) nominates one crewmate who best exemplified pirate qualities in the previous scene. Previous Deep players are ineligible to receive votes.</p>
{#if state.game.phase === 'deep_upkeep'}
@@ -239,7 +239,7 @@
<!-- Resting Deep Player Card — only the actual hand refresh, during deep_upkeep -->
{#if state.game.phase === 'deep_upkeep'}
<div class="card glass-panel deep-rest-card">
<h3>2. Resting Deep Upkeep</h3>
<h3>Refresh Hand</h3>
{#if state.player.role === "deep"}
<div class="deep-rest-panel glass-panel">
@@ -260,7 +260,7 @@
<p class="info-text text-center" style="margin-top: 1rem;">Waiting for the rest of the crew to finish upkeep...</p>
{:else}
<p class="info-text" style="margin-top: 1rem;">
<strong>Your Hand Size Limit: {maxHandSize} cards.</strong><br/>
<strong>Hand Limit: {maxHandSize} cards.</strong><br/>
Drag cards to the "Discard Pile" zone to discard them, or click them to move them.
</p>
@@ -307,7 +307,7 @@
{/if}
<button class="btn btn-primary mt-4 w-full" on:click={confirmRefresh} disabled={confirming || isOverLimit}>
Confirm Hand Refresh
Refresh Hand
</button>
{/if}
</div>
@@ -119,7 +119,7 @@
{/if}
<div class="sheet-group">
<h4>Description:</h4>
<h4>Description</h4>
<p><strong>Look:</strong> {target.avatar_look}</p>
<p><strong>Smell:</strong> {target.avatar_smell}</p>
<p><strong>First Words:</strong> "{target.first_words}"</p>
@@ -130,7 +130,7 @@
{#if target.other_like || target.other_hate}
<div class="sheet-group margin-top">
<h4>What the Crew Thinks:</h4>
<h4>Crew Impressions</h4>
{#if target.other_like}
<p><strong>👍 Likes:</strong> "{target.other_like}" <span class="text-muted">{getPlayerName(target.other_like_from_player_id)}</span></p>
{/if}
@@ -143,7 +143,7 @@
<!-- Secret techniques are visible only on your own sheet -->
{#if isSelf}
<div class="sheet-group margin-top">
<h4>Assigned Secret Techniques (J/Q/K):</h4>
<h4>Secret Techniques</h4>
<ul class="techniques-list-sheet">
<li><strong>Jack (J):</strong> "{target.tech_jack}"</li>
<li><strong>Queen (Q):</strong> "{target.tech_queen}"</li>
@@ -86,9 +86,10 @@
<p class="desc">{obs.description}</p>
</div>
<div class="obstacle-stats">
<!-- Value Display -->
<div class="obstacle-value-display text-center" use:tooltip={VALUE_HINT}>
<span class="val-label">Current Difficulty</span>
<span class="val-label">Difficulty</span>
<span class="val-number">
{#if is_face_active}
{challengedRank !== null ? `${challengedRank} (Rat's Rank)` : "Challenged Rat's Rank"}
@@ -104,6 +105,8 @@
<span class="val-number">{success_count} / {state.players.length}</span>
</div>
</div>
{#if is_completed && state.player.role === 'deep'}
<div class="clear-obstacle-row text-center">
<button class="btn btn-success btn-full" on:click={clearObstacle}>Clear Obstacle</button>
+2 -1
View File
@@ -6,10 +6,11 @@
// - Add a CHANGELOG entry only when a commit changes something players can
// see. Skip refactors, tests, and tooling. Keep wording player-facing.
export const VERSION = 26;
export const VERSION = 27;
// Newest first. Each entry: { version, date: 'YYYY-MM-DD', changes: [string, ...] }.
export const CHANGELOG = [
{ version: 27, date: '2026-09-04', changes: ['Shorter labels make the table easier to scan.', 'Difficulty and Successes now line up side by side, including on small screens.'] },
{
version: 25,
date: '2026-07-10',