diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index 5cb302f..47859f0 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -7,6 +7,7 @@ import Help from "./Help.svelte"; import Replay from "./Replay.svelte"; import FxGallery from "./FxGallery.svelte"; + import TokenGallery from "./TokenGallery.svelte"; import { scheduleFx, type BoardFx } from "./fx"; import { CREATURE_ART, objectArt, TERRAIN_ART, tokenArt } from "./art"; import { local } from "./local.svelte"; @@ -38,6 +39,7 @@ } /** Which pending attack the player has already acknowledged (modal dismissed). */ const fxWorkshop = new URLSearchParams(location.search).has("fx"); + const tokenWorkshop = new URLSearchParams(location.search).has("tokens"); let attackNoticeSeen = $state(null); /** The interruption fanfare, dismissed once per window. */ let momentSeen = $state(false); @@ -1082,7 +1084,9 @@ } -{#if fxWorkshop} +{#if tokenWorkshop} + +{:else if fxWorkshop} {:else}
diff --git a/packages/web/src/FxGallery.svelte b/packages/web/src/FxGallery.svelte index 8c75ec4..566939e 100644 --- a/packages/web/src/FxGallery.svelte +++ b/packages/web/src/FxGallery.svelte @@ -57,6 +57,7 @@

Every effect replays each beat. Edit a file in src/fx-sprites/ and it hot-reloads here. + → the token workshop

{#each SAMPLES as fx (fx.kind)} @@ -162,6 +163,7 @@ } .demo-wall { fill: #4d4438; } .sub code { color: #c9a72a; } + .sub .cross { color: #c9a72a; } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); diff --git a/packages/web/src/TokenGallery.svelte b/packages/web/src/TokenGallery.svelte new file mode 100644 index 0000000..c857fd5 --- /dev/null +++ b/packages/web/src/TokenGallery.svelte @@ -0,0 +1,117 @@ + + + + +