====== Customizing Abstract Play ======
Abstract Play lets you tune how games look on your account: player piece colours, board drawing colours, optional board layout tweaks, and (advanced) per-game CSS. Settings are saved to your profile and follow you across devices when you are logged in.
Questions? Join [[https://discord.abstractplay.com|Discord]] in **#customization** (pinned posts have extra links).
===== Opening the Customize screen =====
* From a **game page**, click the **paintbrush** icon on the board toolbar.
* Or open **https://play.abstractplay.com/customize/GAMEUID** (replace ''GAMEUID'' with the game’s meta id, e.g. ''complica'').
The page shows a **live preview** of a sample board for that game (loaded from the site’s thumbnail JSON when available).
===== Global defaults vs this game =====
Use the scope control at the top:
* **Global Defaults** — applies to every game that does **not** have its own saved customization. Good for a default preferred colour or shared board colours; not every option works globally (board **style** is per game type).
* **This game** — overrides global defaults for one meta game only.
===== Player colours =====
Build a **palette** of colours used for player pieces:
* Pick a colour, then **Add Colour**, or click a **default swatch**.
* Quick fills: **Select default colours**, **Select colour blind colours**, or **Select patterns** (pattern fills for pieces).
* **Clear colours** removes your palette; the game’s built-in defaults are used again.
Some games show **Developer hints** under the palette (which slot maps to which player). Those come from the game author, not from wiki palette tables.
===== My preferred colour =====
Choose **My preferred colour** so your pieces use that slot when the game allows. You can set a global default or override it for the current game only.
===== Board colours =====
Under **Board Colours**, pick a property (background, board, strokes, borders, labels, annotations, fill) and set its colour. Help text under each property explains what it affects in the renderer.
These map to the drawing **colour context** used when the board is rendered.
===== Board and pieces (advanced) =====
Expand **Board and pieces** for renderer overrides:
* **Board style** — when the game supports it, swap among compatible styles (e.g. checkered squares vs vertex grid). Stacked boards cannot take incompatible styles; the UI will block invalid saves.
* **Line weight** and **Coordinate label size** — adjust grid lines and row/column labels (prefer label size over hacking label CSS).
* **Render options** — e.g. hide coordinate labels or star points, when supported by the preview.
* **Glyph replacements** — replace one piece glyph with another from the contact sheet, optionally at a scale.
Fix any **preflight errors** before saving. The saved render block has a size limit (~8 KiB); trim glyph maps if save is rejected.
**Reset board layout overrides** clears render overrides for the current scope without deleting your colours.
===== Custom CSS (advanced) =====
Expand **Custom CSS** on the Customize screen to add CSS scoped to this game’s board. Saved CSS is stored on your **account** when you click **Save Settings**. Scope selectors to the board wrapper, e.g. ''div.board._meta_complica'' (replace ''complica'' with the game’s meta id).
* CSS from the old **board toolbar** (device-only) may be **imported** into this editor the first time you open Customize; save to move it to your account.
* Toggle **Active** to turn account CSS on or off without deleting it.
//Audience:// You should already be comfortable with HTML/CSS and your browser’s developer tools. The board DOM is **not a stable API** — class names, ids, and SVG structure can change as the renderer evolves. Prefer **Player colours**, **Board colours**, **coordinate label size**, and **glyph replacements** on the Customize screen before reaching for CSS.
===== Before you write CSS =====
* For **piece colours**, use the **palette** on Customize (especially games with many glyphs, e.g. Looney Pyramid games). Let the renderer assign player colours, then use CSS only for fine tuning.
* Each **board type** is different; some styles (e.g. plain ''squares'' boards) do not expose separate light/dark cell targets like checkered boards.
* Boards are mostly **SVG**. Typical top-level groups inside ''svg#theBoardSVG'':
* ''defs'' / ''symbol'' — reusable glyphs (ids like ''aprender-glyph-…''; opaque but stable per glyph). Customize **used** piece instances in ''g#pieces''; to restyle a glyph everywhere, target the ''symbol''.
* ''g#labels'' — row/column labels (often easier to adjust with **Coordinate label size** on Customize).
* ''g#gridlines'' — grid lines and some markers.
* ''g#tiles'' — tile-based boards.
* ''g#pieces'' — piece instances (usually ''use'' elements pointing at symbols).
* Markers/annotations use ''class'' names like ''aprender-marker-…'' / ''aprender-annotation-…''.
* Elements meant to follow **player colour** often have ''data-playerfill=true'' and/or ''data-playerstroke=true'' — target those when overriding fills/strokes on complex glyphs.
A second SVG (''svg#theStackSVG'') appears for some stacking renderers; most games only use ''theBoardSVG''.
**CSS variables** you may set on the board container (names may change over time):
* ''--svg-label-color'' — label and some chrome text/lines
* ''--svg-gridline-color'' — gridlines and related strokes
* ''--svg-default-fill'' — default filled cells (e.g. blocked squares)
* ''--svg-volcano-caps'' — Volcano cap colour (dark-mode visibility)
//Do not paste CSS you do not understand.// Abstract Play is not responsible for broken layouts from custom CSS. For help, use #customization on Discord.
===== Custom CSS examples =====
Paste snippets into the **Custom CSS** box on Customize, then **Save Settings**. Adjust selectors for your game and inspect the live board if something does not match.
**Change a piece colour** (find the ''symbol'' id via devtools — inspect a piece → follow ''href'' to ''defs''):
symbol#aprender-glyph-82ae1f37b40e1 *[data-playerfill=true] {
fill: #0f0;
}
**Labels** (prefer **Coordinate label size** when opacity/font size is enough):
g#labels text {
opacity: 0.5;
stroke: black;
fill: white;
font-family: cursive;
}
**Gridlines**:
g#gridlines line {
stroke: red;
stroke-width: 3;
}
**Background image** (on the board wrapper or the SVG — test which fits your layout):
div.board._meta_complica {
background-image: url(https://example.com/your-texture.jpg);
}
svg#theBoardSVG {
background-image: url(https://example.com/your-texture.jpg);
}
This is separate from **site theme** colours (light/dark chrome), which you can adjust from the **navbar** theme control — that changes page chrome, not the game board palette.
**Implementation details** (how CSS is loaded in React, account vs localStorage, renderer wiring): **https://docs.abstractplay.com/front/subsystems/customize/**
===== Saving and sharing settings =====
* **Save Settings** — writes to your account (requires login).
* **Reset to Defaults** — removes your customization for this scope.
* **Delete Customization** — removes the saved blob for this game (or global entry).
* **Apply to other games…** — after saving, copy selected sections (player colours, board colours, renderer, preferred colour, custom CSS) to other games you pick.
Power users can edit **Settings JSON** directly (including ''render.board'', ''render.glyphmap'', ''render.options'') and paste a full blob, then save.