SUGAR GLITCH · COMPONENT LIBRARY

Girl Chess: component librarylast updated 2026-09-22

Every component as it ships, grouped by where you meet it in the game. Each one belongs to someone: you, mallow, the coach, or the menu around the board. The archive tab holds the options that lost. The creative direction mixes Adventure Time, Dislyte and Wreck-It Ralph: a retro arcade sugar glitch theme, washed in vaporwave neon and pastel haze. I chose a decidedly feminine and irreverently youthful art style that sets Girl Chess apart from chess, whose default look is masculine, utilitarian and baroque.

01

Foundations

Who it belongs to

belongs tocolourruleexamples
youcyanyour plate wears the four-point staryour name plate, turn chip, "you took" tray, the hints toggle
mallow, the opponentmagenta, the only alarm colourits plate wears the melting dripmallow's plate, its moves and arrows, warnings, thumbs-down
the coachlavenderspeech floats and is never pressed; the fortune slip is only for lessonschat, the band under the board, the coach's plate
the menulavender, with mint for good or gorounded, with a press shadow, so you know you can press itbuttons, settings, back, start new game, resign and draw

Brand

The wordmark and the header band it sits in. A cyan and pink offset sits behind every letter and jumps every 9 seconds. The bottom of the final S is shifted sideways on purpose: the logo's one glitch that never resolves.

WORDMARK ✓ shipped
GIRL CHESS

tutor with benefits

Press Start 2P 20px (16px under 480px) · ls .14em · gradient #FF8FBF→#CBBFFF · 9s glitch
HEADER BAND · wordmark left, coach pill and gear right
GIRL CHESS

tutor with benefits

Design tokens

The closed palette, three type registers, spacing and radius. Mint means good or legal; magenta is the only alarm.

PALETTE
ink#4A3B7Ebody text, primary type
muted-lav#7A6BB5tagline, status, judge, gear
dim-lav#9A8BC9move counter
shadow-lav#C9BFEFuniversal squishy drop-shadow
quiet-shadow#E3D9F5unfilled-control shadow
badge-lav#E7DFFF / #6952C4nudge, coach-on, hint fill/ink
magenta#FF3DA6primary, warning, mallow. the only alarm
magenta-dark#C22B7Emagenta press-shadow, warning ink
warn-tint#FFD6ECwarning badge fill
cyan#23E5FFglitch split, your accent, target ring
dest-chip#D7FAFFhint-panel destination chip fill
teal-ink#1A7A93your-active chip ink
cyan-mid#23A8C7.px pixel label
mint#A9EFD3legal / last-move / good. reserved
mint-ink#4CAF8C / #2E9C74judge check, material badge
yellow#FFD84Dthird stripe color, confetti
piece-pink#FF8FBF→#F0619Emallow's army gradient
piece-blue#8ED9F9→#5FB8E8your army gradient
piece-line#C74A85 / #3E8FC7piece outline ink
square-light#FFF4FAboard square
square-dark#CBBFFFboard square
page wash168deg 3-stop#F2F7FF → #EFE6FF → #FFE9F6
TYPE · bubble (the menu and speech) · pixel (retro accents) · signal (readouts)
WORDMARK 20 pixel · Press Start 2P 400 · 20px / 16px<480
PIXEL LABEL 9 pixel · 9px · ls .18em
MOVE 12 pixel · 7.5px · ls .1em (move counter)
a b c d e f g h  1 2 3 4 5 6 7 8 signal · Chakra Petch 700 italic · 13px · ls .06em (board coordinates)
name plate: you 1024 signal · 700 upright 13px name + 600 italic 11px tabular-nums elo
f3 h5 signal · 700 · 12px (hint-panel square chips)
coach signal · 700 · 10px · ls .12em (settings section header)
coach signal signal · 700 · 9px · ls .14em (hint-panel kicker)
result text: draw. bubble · Fredoka 600 · 20px (win title 28px)
button label: play it bubble · Fredoka 600 · 15px
small button: take it back bubble · Fredoka 600 · 12.5px
turn chip: your move bubble · Fredoka 600 · 11.5px
status line: mallow is thinking it over bubble · Quicksand 700 · 13.5px
body / tagline: tutor with benefits bubble · Quicksand 600 · 13px · hint prose 700 13px

Signal type never goes on a pressable; bubble type never writes a coordinate or a name plate.

SPACING · the --space scale
--space-1 · 4px
--space-2 · 8px
--space-3 · 16px
--space-4 · 24px
--space-5 · 40px

Every margin and gap uses one of these.

RADIUS · the shape says what kind of thing it is
999px pills
28px cards
22% squares
16px popovers
14px stubs/lips
chamfer 7px · sharp class

Sharp things never round past 4px; their corners are cut with clip-path.

Depth + edge

Menu controls pop, information lies flat, the coach's and mallow's speech floats, containers sink. The game's readouts (name plates, coordinates, labels) have cut corners and a hard 2px shadow with no blur.

Squishy

interactive · pops off the table, presses down

0 5px 0 <hard>, 0 10px 18px <blur> · small: 0 3px 0

The object

one member only: .board-stack, the candy toy itself

0 12px 0 #C9BFEF, 0 22px 40px rgba(90,70,180,.3)

Flat tint

informational · lies flat on the table

your move
fill + 1.5px stroke, no shadow

Whisper

character speech · floats, never presses

not that one. try again~
0 2px 0 rgba(201,191,239,.45) + soft blur

Well

receptacles · sink into the surface

inset 0 2px 3px rgba(120,95,200,.18), inset 0 -1px 0 rgba(255,255,255,.85)

Readout

the game's labels: cut corners, hard shadow, Chakra Petch

registry entry
clip-path chamfer 7px · filter: drop-shadow(2px 2px 0 ink@.45) · never border-radius > 4px

Name plates, coordinates and hint chips are readouts, so they cast the hard shadow instead of none.

Motion

Everything that animates, running live. Glitches use steps() and never ease; only physical moves (press, land, shimmer) get curves.

Wordmark flicker

GIRL CHESS
wmGl1/wmGl2 · 9s steps(1) · split parked at .8 between events

Mallow-stripe scroll

background-position 42px · 1.2s linear infinite · dormant static .35

Chip split-flicker

thinking
chipSplitFlicker · 7s steps(1) · one frame at 96%

Judge dots

judging
judgeDotPulse · 1.1s ease-in-out · .15s stagger · fixed cadence, no timing tells

Gear hover-rotate

rotate 20deg · .3s ease · squish translateY unchanged

Press / pop / shake

press .12s ease · pop .3s cubic-bezier(.34,1.56,.64,1) · shake .26s linear

Draw shimmer

boardShimmer · 1.8s ease-in-out (2.8s big) · looped here for demo, plays once in app

Loss storm

gcStormFlicker · 2s steps(1) (3.2s big) · full-viewport inset glows in app

Win sprinkles ✓ shipped

click: sprinkle splash
90 matte capsules 11×4 + ~10% pixel hearts · full-viewport · tumble ±720° with ±40px drift · 1.4 to 2.8s ease-in · self-cleans at 3s

Royal glitch

royalGlitch 11s steps(1) · mallow's queen + king only · queen delayed 5.5s so the royals never sync

Win-title flicker

mallow melts.
winGl1/winGl2 · 3.5s steps(1) · bursts at ~20/22, ~60/63, ~90%

m4llow flicker

mallow1100
one frame in a 9s steps(1) cycle · cyan/magenta split · the elo never flickers
02

The board and layout

Board and pieces

The board mat, square states and both armies. The scene shows a live hint: your queen on f3, h5 pulsing, f/3 and h/5 lit.

mat #F6F1FF, padding 14/14/30/30 · coords Chakra Petch 700 italic 13px #6952C4 · lit coord #FF3DA6, scale 1.35
SQUARE STATES
light
dark
hint
hint-capture
check-ring
last-move
target-hint (pulses)
hint-origin (calm)
check-ring.mate

target-hint pulses like the check ring, in cyan; hint-origin stays still.

ARMIES ✓ shipped
stroke 1.8 · one gloss + one sparkle · cat knight · src/board/pieces.tsx
COORDINATE GLITCH BURST · on every hint-ladder press ✓ shipped reuses preGlitch · 2 runs (~.44s) per press · src/board/coordGlitch.css

Player bar

Both seats around the board: name plate, captured pieces, turn chip. The active seat gets a cyan inset ring; mallow's stripe scrolls while she thinks.

MALLOW THINKING
ooh. bold. let's see how that goes~
mallow1100
+2
thinking
board lives here
you1024 MOVE 12
stripe 6px, 1.2s linear loop · bar padding 10px 18px · sprites 32px, overlap −10px
YOUR MOVE
mallow1100
board lives here
you1024 MOVE 12
+3
your move
dormant stripe opacity .35 · active ring inset 0 0 0 2px rgba(35,168,199,.55) · empty wells stay visible
NAME PLATES AND MOVE COUNTER ✓ shipped
YOU you1024 #E4F7FB · stroke #23A8C7
MALLOW · m4llow frame every 9s mallow1100 #FFE9F4 · stroke #FF3DA6
ELO COUNT-UP AFTER THE GAME you1041 ~600ms · mallow's number never moves
MOVE COUNTERMOVE 12Press Start 2P 7.5px #9A8BC9
Chakra Petch 700 13px name · 600 italic 11px elo in the edge colour · chamfer 7px · drop-shadow(2px 2px 0) at 45%
TURN CHIPS AND MATERIAL BADGE
YOUR MOVEyour move#E4F7FB / #1A7A93
DECIDINGdecidingjudgeDotPulse 1.1s
MALLOW'S MOVEmallow's move#FFE9F4 / #C22B7E
THINKING · split frame every ~7sthinkingsteps(1)
MATERIAL BADGE+3#E7FFF4 / #2E9C74
flat tint · 999px radius · 1.5px stroke · Fredoka 600 11.5px
HIGHLIGHT PILL · in her bar's chip slot, opens the highlight tray ✓ shipped
24px pill · #FFF on 0 2px 0 #E3D9F5 · 7px ring, never a flag · disabled at .45 while a move waits

Move-pair highlight badges

The rows of the highlight tray: her move on the left in cyan, mallow's reply on the right in magenta. Each badge toggles on its own.

TRAY · newest pair first
highlight a move you weren't sure about
17.Qxh6Re8
16.Bxh6gxh6
15.Qh4h6
RESTING AND LIT
Bxh6Bxh6
gxh6gxh6
lit: solid #23E5FF (hers) or #FF3DA6 (mallow's)
Chakra Petch 700 13px · 26px tall · 5px chamfer · hard shadow, no press · src/game/HighlightPocket.tsx

Buttons and the end-game control

Every button is squishy and presses down. The end-game button asks the engine, then arms as resign, draw or win.

BUTTONS · the live ones respond to hover and press
PRIMARY0 5px 0 #C22B7E · lowercase
DEFAULT0 5px 0 #C9BFEF
SMALL0 3px 0 #C9BFEF
CONFIRM-PENDING#C9B8FF / 0 3px 0 #A99AE0
DISABLED#EFEAFB / #B9ACD9 · no press
HOVERtranslateY(-2px) · 0 7px 0
PRESSEDtranslateY(3px) · 0 2px 0
END-GAME CONTROL ✓ shipped
IDLE 0 3px 0 #E3D9F5 · drooping flag
ARMED · RESIGN #FF3DA6 · 0 3px 0 #C22B7E · scale 1.03
ARMED · DRAW #C9B8FF · 0 3px 0 #A99AE0
ARMED · WIN #A9EFD3 / #2E9C74 · 0 3px 0 #7BD4B0
RESIGN WHILE AHEAD · shakes once shake .26s once

Back and start new game

back leaves the game open and returns to the start screen, where the continue card offers resume game.

GAME CONTROLS · back, then end the game?
IDLE
ARMED, WIN
ARMED, RESIGN
MALLOW'S MOVE: back waits
back #FFD84D, #4A3B7E ink, 0 3px 0 #C9BFEF · hidden while a move is picked up · disabled on mallow's move
START SCREEN AFTER BACK
game in progress

game 195: you and mallow 1300 are mid-game, 4 moves in.

mallow plays at 1300
start new game magenta · past games #D7FAFF / #1A7A93 · resume game mint
AT 340PX · the row wraps

Settings and the coach pill

The gear opens the popover. Top to bottom: confirm before playing, judge strictness (standard is the default), the two coach toggles, coach voice (Claude (Recommended) is the default). A fourth voice, claude, shows only when localStorage gc-dev is "1".

GEAR · hover it ✓ shipped 44px · 0 4px 0 #C9BFEF · hover rotates 20° over .3s
POPOVER · open
judge strictness
coach coach voice
popover 16px radius · section heads Chakra Petch 700 10px #23A8C7 · hints row cyan + star · src/game/GamePage.tsx
COACH PILL · beside the gear
ON#E7DFFF / #6952C4 · squishy
OFFwhite · 0 3px 0 #E3D9F5

Status line and banners

Messages about the app rather than the game. All flat tints; the session banner is lavender because a server restart is not her mistake.

FALLBACK BANNER ✓ shipped
fallback opponents (lc0 unavailable)
#FFF0F6 · 1.5px rgba(240,97,158,.35) · no shadow
STATUS LINE · transient
reconnecting to mallow…
Quicksand 700 13.5px
SESSION-GONE BANNER · a stale tab after a server restart ✓ shipped
the server restarted while you were away, so this session closed.
#F3EEFF / #6952C4 · 1.5px rgba(105,82,196,.25) · one reload button, no retry loop
03

The hint ladder

Judge verdict

After she picks a move the judge thinks, then marks it: a check, plus a nudge or warning badge when the move costs something. help? starts the hint ladder; each press is more?.

NUDGEhm, you sure?#E7DFFF / #6952C4
WARNING ✓ shippedcareful. this one hurts.#FFD6EC / #C22B7E
HINT BUTTON · livesquishy lavender
JUDGE INDICATOR · judging, judged, judged with a nudge
judging
judged ✓
judged ✓hm, you sure?
judgeDotPulse 1.1s at a fixed cadence · badges flat, help? and more? squishy

Conversion reason

When she is winning and her move slows the mate, one line beside the nudge says why. It shows until the first help? press, then the ladder takes the slot.

MATE IN ONE ON THE BOARD, THEN A SLOWER MATE ✓ shipped
judged ✓hm, you sure?still winning, but you have checkmate on the board right now.
✓ hm, you sure?still winning, but there's a mate 2 moves faster. this move mates in 5, the fastest mates in 3.
  • Fires only when she held mate in 8 or fewer before her move (JUDGE_MATE_NUDGE_DEPTH 8).
  • "this move mates in" is mateAfter + 1; "the fastest mates in" is mateBefore.
  • Losing the mate is a warning, so "still winning, but the forced mate is gone for now." never shows here.
11.5px 700 #6952C4 · nudge tier only · server/annotator/classify.ts (conversionCopyFor)

Hint row

Once a hint shows, it sits in one row with ask about this and the next ladder press.

judged ✓careful. this one hurts.your queen wants h5. f7 can't cover it.
hint text 11.5px 700 #6952C4 · ask about this #C9B8FF / 0 3px 0 #A99AE0 · src/game/GamePage.tsx

Coach narration band

The coach's one line under the ladder, written by the model. The 60px band stays reserved so the board never moves; it is empty after the game.

your queen wants h5. f7 can't cover it.
#9C8FC7 Quicksand 13px · no box · thumbs at the end once text arrives
04

Coach chat

Chat panel

A collapsible panel: right of the board at 1200px and wider, under it below that. Lavender for the coach, cyan for you, never mallow's magenta.

COLLAPSED · press it
your queen wants h5. f7 can't cover it.
EXPANDED · hint anchor, question, answer, turning-point anchor, pending
cookiecoach coach chat
hint

your queen wants h5. f7 can't cover it.

asking about this…
why h5? the knight on g4 felt safer.
h5 hits f7 and h7 at once, and the knight only watches one of them. safer isn't the same as asking her a question she can't answer.
turning point · move 14

move 14 is where it tipped: qxb7 won a pawn but let her rook into the seventh.

asking about this…
was the pawn really that bad? i was up material.
cookie is thinking…
16px tray · thread max 320px, scrolls · pending italic #9C8FC7 · input #F6F1FF inset
PLACEMENT
1200PX AND WIDER · right rail
player bar · mallow
board
player bar · you
coach hint band
chat rail · docked right
LAPTOP 1512×982 · 0.35 SCALE
board · 556px
chat rail · 300px
board 556px · rail 300px + 24px gutter
THE RAIL AT 300PX
cookiecoach coach chat
hint

your queen wants h5. f7 can't cover it.

asking about this…
why h5? the knight on g4 felt safer.
h5 hits f7 and h7 at once, and the knight only watches one of them.
BELOW 1200PX · under the board
player bar · mallow
board
player bar · you
action slot
coach hint band
chat panel · inline, collapsible

The panel moves by CSS only and is never mounted twice, so the thread survives a resize.

ANCHOR CARD · what a question is about ✓ shipped
turning point · move 14

move 14 is where it tipped: qxb7 won a pawn but let her rook into the seventh.

asking about this…
was the pawn really that bad?
the pawn was real, but the seventh rank was worth more. count who lands on the open lines first.
sharp kicker on a lavender whisper card, full width
WHILE A REPLY STREAMS · one bubble, swapped in place
THINKING
does my knight cover d3 after the trade?
cookie is thinking…
STREAMING
does my knight cover d3 after the trade?
no. after the trade your knight is pinned by the
REDRAFT
does my knight cover d3 after the trade?
the knight covers d3 comfortably after the
let me redo that
#9C8FC7 italic while provisional · a rejected draft shows "let me redo that", then the new text replaces it
STATUS COPY · thinking, drafting, checking
was the pawn really that bad?
cookie is thinking…
was the pawn really that bad?
cookie is drafting…
was the pawn really that bad?
cookie is checking her work…
sent by the server as each stage starts · src/game/CoachChat.tsx (STATUS_PHASE_COPY)
REPLY CHIP AND THUMBS · settled replies only
CAUSE CHIP
was that pawn really worth it?
something went wrong there, try asking again.garbled
#E3D9F5 / #9C8FC7 · also "offline" and "slow"
THUMBS · press them
24px · down fills magenta and opens a note field

Chat opener

The collapsed chat's button, with the coach's glyph as a still face.

OPENER · press it ✓ shipped
#C9B8FF / 0 3px 0 #A99AE0 · glyph 21×18, #6952C4 · no animation
05

After the game

Game end panel

The result, replay, and new game. All three results glitch like the wordmark. Empty live-play slots collapse, so the panel rides up under the board.

WIN
you win. mallow melts.
WIN, DRAW, LOSS ✓ shipped
you win. mallow melts.
dead even. you both freeze over.
you cracked. mallow wins.
Fredoka 600 28px, four layers · 3.5s steps(1) · copy in endCopy.ts

Analysis and debrief

Under a finished game, top to bottom: the arrow legend, three bullet sections, her highlighted moves, then the turning-point cards. All written by code, not the model.

ARROW LEGEND · one column at every width ✓ shipped
analysis legend
solid: it happened
your move
you found the best move
mallow's move
dashed: it didn't
recommended move
mallow's recommended move
chamfer 7px · hard shadow · colours match the arrow CSS · the rose row shows only when a card draws it
FOUR-ARROW SET · up to two arrows per player on turning cards and drawers ✓ shipped
MISSED PUNISH
FOUND PUNISH
LEGEND ROWS FOR THIS CARD
mallow's moveprimary · the subject
mallow's recommended moveprimary · the subject's should've
your movesecondary · arrow + washes 0.55
recommended movesecondary · slim + 0.75
you found the best movesecondary · slim + 0.75
  • The player whose move it is gets full-strength arrows; the other player's are dimmed.
  • A move that mates as fast as the best counts as found (equalMate, her moves only); mallow's matched best stays one magenta arrow.
src/game/reviewArrows.ts · Board.tsx · .arrow-secondary, .tp-secondary::after
BULLETS · with the phase and category tag ✓ shipped
DONE WELL AND WATCH NEXT NAME TWO PHASES
done well

your opening is working: you were winning this one from move 6 to move 22.

opening · conversion
watch next time

the middlegame is where this one slipped. when you are winning and the position starts to look familiar, that is the moment to change something.

middlegame · conversion
NO PHASE KNOWN · the tag drops the phase word
could be better

develop your pieces before opening lines for mallow's queen.

development
tag Chakra Petch 700 9px #23A8C7 · "endgame technique" only when the phase is endgame · never an empty chip
BADGE WORDS AND THE ? LEGEND ✓ shipped
THE SEVEN WORDS · colour is the side, fill is the size
the crackthe slipthe punishthe missthe swingthe takeoverthe finish
CLOSED
turning points
the crack
move 14 · knight to a6
the punishthe takeover
move 18 · rook takes on c7
OPENED
badge legend
cyan · you
rose · mallow
the crack · mallow's door-opening bad move
the slip · your own bad move
the punish · the reply that cashed a crack in
the miss · a win was there and went by
the swing · the biggest change in winning chances
the takeover · from here one side really led
the finish · the mating sequence that ended it
Chakra Petch 700 9px · 4px chamfer · src/review/cardBadges.ts
HIGHLIGHTED MOVES · the study ledger ✓ shipped
you highlighted · 3 moves
move 18 · could be better
pawn to g4g4

this loosened the squares in front of your king. next time, look for a developing move that keeps the shelter closed.

one card open at a time, the first by default · no highlights, no ledger

Mallow's moves you highlighted

The study ledger in magenta for mallow's moves, right below hers. Only replay and the ask button: there is no try-the-line for mallow's side.

DRAWER ✓ shipped
mallow's moves you highlighted · 4 moves
knight takes e5Nxe5

this was the computer's top choice here. the plan behind it: knight takes e5, queen to d4, then rook to e8.

open card rgba(194,43,126,.08), 1.5px #FFD6EC, 2px #C22B7E left rule · src/review/MallowHighlightedSection.tsx
VERDICT CHIPS
the computer's pick solid mallow slipped no read
mallow slipped: gap ≥ 150cp · no read carries no magenta
A SLIP IN A DECIDED GAME
move 26 · mallow's movemallow slipped
rook to d8Rd8

even mallow slips. queen takes f6 was clearly stronger. the game was already decided here, so the numbers barely move either way.

"already decided" is added to solid, fine and slip

Past games and the way back in

The drawer lists every game by day with its number and result. Unfinished games from the last 7 days get resume game; delete takes two clicks.

DRAWER ✓ shipped
past games
today3 games
yesterday1 game
aug 272 games
title Chakra Petch 700 16px #23A8C7 · won #E7FFF4 / #2E9C74 · lost #FFE9F4 / #B5486E · draw #C9B8FF / #4A3B7E · resume #A9EFD3
DELETE · resting, then armed ✓ shipped
#ED7F82, #fff ink, Chakra Petch 700 9px
#E5484D · text swap, no modal
disarms on a click elsewhere, 3s away from the row, or when the drawer closes
CONTINUE CARD · on the start screen ✓ shipped
game in progress

game 195: you and mallow 1300 are mid-game, 12 moves in.

mallow plays at 1300
#fff on 1.5px #E3D9F5, 16px radius · absent when nothing is resumable
GAME NUMBER · review banner and live footer ✓ shipped
REVIEW BANNER
reviewing game 195 · mallow 1600 · won
LIVE FOOTER
you1350 move 2 · game 195
AT 340PX · nothing clips
past games
today2 games
game in progress

game 195: you and mallow 1300 are mid-game, 12 moves in.