The hand may stand at the board's left (preference)

A player asked for cards down the side instead of along the bottom.
With the new pref on (wide screens only), the hand claims a sticky,
scrolling column at the left while the hint strips and action buttons
stay beneath the board — the table-edge dissolves into the grid so its
children place themselves. The strip moves inside the .game grid to
make that possible; the default bottom layout spans the full row as
before, and phones keep their one-column flow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015RCWSTnb1KYTPyL4GmhGnF
This commit is contained in:
Eric Wagoner
2026-08-29 23:28:00 -04:00
co-authored by Claude Fable 5
parent b538a0a2ae
commit d334b267a2
2 changed files with 39 additions and 3 deletions
+5 -1
View File
@@ -22,6 +22,9 @@ export interface Prefs {
instantReplay: boolean;
/** The live first-person pane above the board during play. */
liveFp: boolean;
/** The hand of cards stands in a column at the board's left instead of
* lying along the bottom (wide screens only). */
handLeft: boolean;
}
const KEY = "wizwar-prefs";
@@ -29,7 +32,7 @@ const KEY = "wizwar-prefs";
function load(): Prefs {
const fallback: Prefs = {
art: "photo", autoGrab: false, flourishes: true, wizardName: "", color: null,
cautions: true, botTier: "adept", instantReplay: true, liveFp: false,
cautions: true, botTier: "adept", instantReplay: true, liveFp: false, handLeft: false,
};
try {
const raw = localStorage.getItem(KEY);
@@ -45,6 +48,7 @@ function load(): Prefs {
botTier: p.botTier === "apprentice" || p.botTier === "archmage" ? p.botTier : "adept",
instantReplay: p.instantReplay !== false,
liveFp: p.liveFp === true,
handLeft: p.handLeft === true,
};
} catch {
return fallback;