diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9f9cfedb..c8859d8e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -568,6 +568,10 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Changed
+- **The same switch at the table.** The dice tray's ANIMATION, the choices a roll asks about before
+ it is rolled (ADVANTAGE, PUSH and the like), and TRY ON THE MAP on a house rule in the builder's
+ graph now use the one switch the builder has: a pill whose knob slides across and lights up when
+ on, the words beside it part of it. A choice that can't be paid stays red and can't be switched.
- **One switch across the builder, easy to see.** Switches like LEVELLED and MORE THAN ONCE on
CHOICES were plain words with a small circle in front, easy to miss as something to click. Every
switch in the builder is now the same pill with a knob that slides across and lights up when on:
diff --git a/README.md b/README.md
index d6f868b7..58f97a86 100644
--- a/README.md
+++ b/README.md
@@ -822,7 +822,7 @@ CITY_NET/
│ │ │ ├── TableConditionsPanel.tsx # The GAME tab's CONDITIONS under a built-in game, main admin only: the standard set (four shown, the rest folded) and the table's own, added with a name, icon and description (no modifiers or rounds) or removed after asking; the server's refusal said, and every screen asking again once saved
│ │ │ ├── GameRestsPanel.tsx # The GAME tab's RESTS under a custom game, for the GM and granted editors: one of the game's rests, who rests (every player character, the NPCs on the map being viewed too, or ticked by hand), what each one will get (dice still to roll shown as such, conditions wearing off), and CALL; everyone previewed once so ticking asks nothing more, previewed again after a call; a refusal said
│ │ │ ├── TryItPage.tsx # TRY IT: the draft as a player would meet it, unsaved changes included. A made-up character on its own sheet with formulas worked out as you type, its health on a pretend token in the HEALTH folder's own panels with what others see, an NPC rolled from a tier, and CALL A REST: one of the draft's rests rolled on the character and its token, the game's line in the log. Saves nothing but SAVE AS THE SAMPLE CHARACTER. A "?" beside HEALTH, WHAT OTHERS SEE and the NPC's level. RULES: the draft tried with each house rule switched on or off, starting as each STARTS, the game's choice untouched
-│ │ │ ├── ToggleSwitch.tsx # The one on/off switch (switches 1; approved mockup toggle-switch, 2026-10-29): a pill whose knob slides across and lights up when on, the label beside it as part of one button, colors from the theme. Every switch in the builder (CHOICES, PARTS, CONDITIONS, RESTS, TRY IT, ROLLS, TEST ROLL)
+│ │ │ ├── ToggleSwitch.tsx # The one on/off switch (switches 1; approved mockup toggle-switch, 2026-10-29): a pill whose knob slides across and lights up when on, the label beside it as part of one button, colors from the theme, a button's own attributes passed through. Every switch in the builder (CHOICES, PARTS, CONDITIONS, RESTS, TRY IT, ROLLS, TEST ROLL) and at the table (switches 2: the dice tray's ANIMATION, a roll's choices before it is rolled, TRY ON THE MAP on the graph)
│ │ │ ├── ControlledNpcSheetWindow.tsx # A friendly NPC's sheet for the player the GM gave it to: read-only, with rolls made for the NPC through the server
│ │ │ ├── UpdateModal.tsx # Draggable update notification modal (shown on admin login when update available; Update Now / Remind Me Later / Skip Version; docker-aware)
│ │ │ ├── DevBuildsBox.tsx # LOOK FOR DEV BUILDS under Check for update in SYSTEM_INFO (primary admin, Docker installs): ticking asks, then the server copies the database and sets IMAGE_TAG=dev in both .env files; unticking sets latest; greyed with the line to set by hand where the app cannot; on a dev build, GO BACK TO STABLE asks (naming the copy, nothing deleted) and waits for the restart
@@ -923,7 +923,7 @@ CITY_NET/
│ │ │ ├── HelpPage.test.tsx # The topics in their groups opening on GETTING STARTED, the one picked with all its words, GO TO a page (waiting for a system), FORMULAS' table held to the engine's list, EXAMPLES looked at or only described, and START THE TOUR only with a tour
│ │ │ ├── giveFromToken.test.tsx # GIVE_ITEM on a token: the GM's, on a player's character or an NPC with a sheet here, opening GIVE.EXE with that character ticked (added to the ticks if it's already open); the player's notice, newest three, each until closed, in the game's word for the GM
│ │ │ ├── TryItPage.test.tsx # The made-up character and its formulas, SAVE AS THE SAMPLE (absent with nowhere to save), RESET, health on a pretend token under each model, both maximums, and an NPC rolled from a tier; a "?" beside the health, what others see, the level and the rules; RULES switching a formula's alternative and a hidden section, never the draft, SAVE AS THE SAMPLE still writing the draft itself
-│ │ │ ├── ToggleSwitch.test.tsx # Named by its label or, with the words elsewhere, by name; the label part of the button; what it becomes when clicked; the knob across and lit when on; the color it is given; nothing while disabled
+│ │ │ ├── ToggleSwitch.test.tsx # Named by its label or, with the words elsewhere, by name; the label part of the button; what it becomes when clicked; the knob across and lit when on; the color it is given; nothing while disabled; a button's own attributes passed through but never its role or state; a click seen first (the graph keeps it off the map)
│ │ │ ├── ControlledNpcSheetWindow.test.tsx # A friendly NPC's sheet read-only for the player it was given to, fetched with their own login, rolling as the NPC
│ │ │ ├── SheetAttackPanel.attackAs.test.tsx # ATTACK AS: a player with a friendly NPC given to them, the GM with an NPC near the target, its weapons and LUCK, firing as it
│ │ │ ├── SheetAttackPanel.cyber.test.tsx # Attacking with body weaponry, the only way a player reaches the server's cyberIndex
diff --git a/frontend/src/components/DiceTray.tsx b/frontend/src/components/DiceTray.tsx
index 8b1240c9..8620fd68 100644
--- a/frontend/src/components/DiceTray.tsx
+++ b/frontend/src/components/DiceTray.tsx
@@ -3,6 +3,7 @@ import { Canvas } from '@react-three/fiber';
import { useThree, useFrame } from '@react-three/fiber';
import * as THREE from 'three';
import { DraggableWindow, NotifyBell } from './DraggableWindow';
+import { ToggleSwitch } from './ToggleSwitch';
import { ThemeContext } from '../theme/themes';
import { themedRollColor } from '../theme/rollColor';
import paperFillIcon from '../assets/lets-icons--paper-fill.svg';
@@ -342,22 +343,10 @@ export function DiceTrayWindow({ pos, setPos, onClose, socketRef, authToken, bel
const titleControls = (
<>
-
+ style={{ background: 'var(--black)', padding: '0 6px', height: '22px', fontSize: '10px', marginRight: '4px', gap: '6px' }} />
{onToggleBell && }