Skip to main content
Back to Examples

Hex & Throne

Remix this template to create a similar design — same sections, layout, animations, colors, and typography.

Visit site

An app for a digital strategy board game. Dark shadow-charcoal canvas, ember-orange with moss-green and sea-blue accents, VT323 pixel and Inter type.

26
core colors
3
typefaces
39
tokens
agent.kombai.com/kombai-inspiration-library/templates/hex-throne/index.html
01

Palette

ember
#E25822
moss
#4F7942
sea
#2072AF
ember-deep
#8A3416
ember-glow
#FFAE5E
page
#0D0D0C
board-bg
#0A0A09
topbar
#111110
rail
#101010
card
#161614
input
#1B1B1A
inset
#1A1A18
spent
#2A2A26
parchment
#E3DAC9
parchment-dim
#D6CAB3
bone
#E3DAC9
bone-dim
#A39E90
muted
#7A7468
ink
#1B1B1B
ink-soft
#2A2A26
parchment-label
#7A6A4A
hairline
RGBA(227,218,201,.08)
hairline-12
RGBA(227,218,201,.12)
ember-grad
LINEAR-GRADIENT(180DEG,#E25822 0%,#B53E12 100%)
moss-grad
LINEAR-GRADIENT(180DEG,#5F8E51 0%,#3A5D2F 100%)
sea-grad
LINEAR-GRADIENT(180DEG,#2D8BCE 0%,#1A578A 100%)
02

Typography

displayThe quick brown fox jumps'VT323', monospace
20px
bodyThe quick brown fox jumps'Inter', sans-serif
13px
tagThe quick brown fox jumps'JetBrains Mono', monospace
10px
monoThe quick brown fox jumps'JetBrains Mono', monospace
10px
03

Spacing & Shape

TokenValuePreview
xs4px
sm8px
md12px
lg16px
xl24px
04

Border Radius

TokenValuePreview
none0px
sm3px
md6px
full9999px
05

design.md

design.mdreadable by AI agents
tokens (raw)
name: hex-throne-design
version: alpha
description: >
  A pixel-art tactics game client rendered in dark "shadow" charcoals with a warm
  bone foreground and three faction "voltages" — ember orange, moss green, and sea
  blue. The signature moves are dithered pixel terrain tiles, CRT scanline overlays,
  chunky inset-bevel buttons that physically squish, and a parchment-skinned rulebook
  modal that inverts the whole palette. Typography pairs a blocky bitmap display face
  (VT323) with a clean Inter UI body and a JetBrains Mono micro-label face. Geometry
  is deliberately hard-edged — near-zero radius everywhere, pixelated rendering, and
  a fixed three-column campaign cockpit (chat rail · board · unit rail).
colors:
  # Brand / Faction voltages
  ember: '#E25822'        # primary accent — turn/action highlights, ember faction, CTAs
  moss: '#4F7942'         # moss faction, health pips, heal action, positive deltas
  sea: '#2072AF'          # sea faction, voice/active glow, move action, "me" chat bubble
  ember-deep: '#8a3416'   # ember tile shadow / darker fill in sprites & gradients
  ember-glow: '#ffae5e'   # ember highlight in gradients (button shine, progress fill)
  # Surface (the "shadow" stack)
  page: '#0d0d0c'         # app background, deepest surface
  board-bg: '#0a0a09'     # board frame inner fill
  topbar: '#111110'       # header bar / --shadow
  rail: '#101010'         # left & right sidebars
  card: '#161614'         # chrome-card base / panel fill
  input: '#1b1b1a'        # chat input + bubble-them surfaces
  inset: '#1a1a18'        # avatar wells, dim surfaces, progress track, kbd
  spent: '#2a2a26'        # dimmed/spent pips, timeline dots, scrollbar thumb
  parchment: '#E3DAC9'    # rulebook modal surface (palette inversion) / --bone
  parchment-dim: '#d6cab3' # rulebook secondary panels
  # Text
  bone: '#E3DAC9'         # primary foreground / headings on dark / --bone
  bone-dim: '#a39e90'     # secondary body text / --bone-dim
  muted: '#7a7468'        # tertiary labels, captions, tags
  ink: '#1B1B1B'          # text on parchment (rulebook)
  ink-soft: '#2a2a26'     # body text on parchment
  parchment-label: '#7a6a4a' # muted labels on parchment
  # Hairlines
  hairline: 'rgba(227,218,201,.08)' # divider / chrome-card border / board halo
  hairline-12: 'rgba(227,218,201,.12)' # dock border, slightly brighter rules
  # Gradient / Glow (approx)
  ember-grad: 'linear-gradient(180deg,#E25822 0%,#b53e12 100%)' # btn-ember fill
  moss-grad: 'linear-gradient(180deg,#5f8e51 0%,#3a5d2f 100%)'  # btn-moss fill
  sea-grad: 'linear-gradient(180deg,#2d8bce 0%,#1a578a 100%)'   # btn-sea fill
typography:
  display:
    fontFamily: "'VT323', monospace"
    fontSize: 20px           # ranges 14px–42px across UI; 42px in rulebook title
    fontWeight: 400
    lineHeight: 1
    letterSpacing: 0.02em
  body:
    fontFamily: "'Inter', sans-serif"
    fontSize: 13px
    fontWeight: 400
    lineHeight: 1.4
  tag:
    fontFamily: "'JetBrains Mono', monospace"
    fontSize: 10px
    fontWeight: 400
    letterSpacing: 0.08em
    textTransform: uppercase
  mono:
    fontFamily: "'JetBrains Mono', monospace"
    fontSize: 10px
    fontWeight: 400
rounded:                      # near-brutalist pixel geometry — mostly sharp
  none: 0px
  sm: 3px                     # rounded-sm / kbd / scrollbar thumb
  md: 6px                     # dock / rounded-md
  full: 9999px                # avatars, status dots, timeline dots, progress
spacing:                      # 4px base unit (Tailwind scale)
  xs: 4px
  sm: 8px
  md: 12px
  lg: 16px
  xl: 24px
components:
  buttonPrimary:              # btn-ember
    background: '{colors.ember-grad}'
    textColor: '#ffffff'
    typography: '{typography.tag}'
    rounded: '{rounded.sm}'
    padding: '8px 12px'
    border: '1px solid #2a0e04'
    shadow: 'inset 0 1px 0 rgba(255,255,255,.25), inset 0 -2px 0 rgba(0,0,0,.35), 0 2px 0 #5a1e08'
  buttonMoss:
    background: '{colors.moss-grad}'
    textColor: '#ffffff'
    rounded: '{rounded.sm}'
    border: '1px solid #142109'
    shadow: 'inset 0 1px 0 rgba(255,255,255,.2), inset 0 -2px 0 rgba(0,0,0,.35), 0 2px 0 #1e3017'
  buttonSea:
    background: '{colors.sea-grad}'
    textColor: '#ffffff'
    rounded: '{rounded.sm}'
    border: '1px solid #061b30'
    shadow: 'inset 0 1px 0 rgba(255,255,255,.2), inset 0 -2px 0 rgba(0,0,0,.35), 0 2px 0 #0c3354'
  chromeCard:
    background: '{colors.card}'
    textColor: '{colors.bone}'
    border: '1px solid {colors.hairline}'
    rounded: '{rounded.sm}'
    padding: '12px'
  chatInput:
    background: '{colors.input}'
    textColor: '{colors.bone}'
    border: '1px solid rgba(227,218,201,.1)'
    rounded: '{rounded.sm}'
    padding: '0 12px'
    focusBorder: '{colors.sea}'
  tile:
    aspectRatio: '1'
    border: '1px solid rgba(0,0,0,.35)'
    shadow: 'inset 0 -3px 0 rgba(0,0,0,.25), inset 0 1px 0 rgba(255,255,255,.04)'
    note: 'dithered terrain via layered linear/radial gradients; image-rendering: pixelated'
  dock:
    background: 'rgba(22,22,20,.92)'
    backdropFilter: 'blur(10px)'
    border: '1px solid {colors.hairline-12}'
    rounded: '{rounded.md}'
    shadow: '0 20px 40px rgba(0,0,0,.6), 0 0 0 1px rgba(0,0,0,.5)'
  hpPip:
    background: '{colors.moss}'
    size: '10px'
    shadow: 'inset 0 -2px 0 rgba(0,0,0,.4), 0 0 0 1px #000'
  apPip:
    background: '{colors.ember}'
    size: '14px'
    shadow: 'inset 0 1px 0 rgba(255,255,255,.3), inset 0 -2px 0 rgba(0,0,0,.4), 0 0 0 1px #000'
  kbd:
    background: '{colors.inset}'
    textColor: '{colors.bone-dim}'
    typography: '{typography.mono}'
    border: '1px solid {colors.spent}'
    rounded: '{rounded.sm}'
    padding: '2px 5px'
  bubbleMe:
    background: '{colors.sea}'
    textColor: '#ffffff'
    rounded: '{rounded.sm}'
  bubbleThem:
    background: '#1f1f1d'
    textColor: '{colors.bone}'
    border: '1px solid rgba(227,218,201,.06)'
    rounded: '{rounded.sm}'
  rulebookModal:
    background: '{colors.parchment}'
    textColor: '{colors.ink}'
    border: '1px solid rgba(0,0,0,.2)'
    overlay: 'rgba(8,8,7,.78) + backdrop-filter: blur(8px)'
motion:
  gridEntry: 'anime.js — tiles fade in (opacity 0→1) + translateY -12→0, staggered by row/col, 500ms ease out(3)'
  buttonSquish: 'anime.js — scale to 0.94 on pointerdown, back to 1 on pointerup (100/300ms); CSS :active also nudges translateY(2px) and flattens bevel'
  selRing: 'CSS blink — opacity 1↔.35, 1.4s steps(2) infinite'
  targetDot: 'CSS pulse — scale 1↔1.3 + opacity, 1s ease-in-out infinite'
  voiceBars: 'CSS vol — height 3px↔12px, 1s ease-in-out, staggered .15s per bar'
  rulebookOpen: 'anime.js — overlay fade 200ms + panel opacity/scale .92→1 over 280ms'
  dockEntry: 'GSAP — fade + y 24→0, 0.6s power3.out, delay 0.5s; header fade + y -12→0'
icons:
  library: Tabler icons-webfont (ti) + game-icons (lorc/delapouite SVGs) + inline pixel SVG sprites + OpenMoji
  style: outline (Tabler), pixel-art (inline SVG units), flat color (OpenMoji)
  sizes: { sm: 14px, base: 16px, lg: 20px }
  color: '{colors.bone}'

Hex Throne

hex-throne-design · alpha

Design spec — version alpha. Source: static HTML (index.html); tokens read from inline styles + class rules. Fictional/sample product; described factually.

Overview

Hex Throne is a pixel-art tactics game client — a full-screen campaign cockpit dressed in deep "shadow" charcoals (#0d0d0c page, #101010 rails, #161614 cards) with a warm bone foreground (#E3DAC9). Three faction voltages drive the whole interface: ember orange #E25822 (the primary accent — your turn, CTAs, action points), moss green #4F7942 (health, healing), and sea blue #2072AF (voice activity, movement, your own chat bubbles). The signature moves are unapologetically retro: terrain tiles are painted with layered dithered gradients and image-rendering: pixelated, a CRT scanline overlay sits on the board, faction buttons are chunky 3D inset-bevel slabs that physically squish on press, and player units are tiny hand-built pixel SVG sprites. The type story pairs VT323, a blocky bitmap display face used for every name and number, with Inter for readable UI body and JetBrains Mono for uppercase micro-tags. Geometry is near-brutalist — radii top out at 6px, most corners are perfectly square, and even the rounded avatars feel pixel-snapped. The one dramatic inversion is the rulebook modal: it flips to a parchment surface (#E3DAC9 ground, #1B1B1B ink) like an in-world manual page.

Colors

Brand / Faction voltages. ember #E25822 is the dominant accent — turn indicators, the primary btn-ember CTA, action-point pips, "EMBER PHASE" labels, and the active timeline node. moss #4F7942 carries health pips, the heal action, and positive HP deltas. sea #2072AF signals voice/active state (the glow-sea ring), the move action, and the player's own chat bubble. Supporting ember tones include ember-deep #8a3416 (tile/sprite shadow) and ember-glow #ffae5e (gradient shine, progress fill).

Surface (the shadow stack). A tight ladder of charcoals: page #0d0d0c (app bg), board-bg #0a0a09 (board frame), topbar #111110, rail #101010 (both sidebars), card #161614 (chrome-card), input #1b1b1a, inset #1a1a18 (wells, progress track, kbd), and spent #2a2a26 (dimmed pips, timeline dots, scrollbar). The rulebook inverts to parchment #E3DAC9 / parchment-dim #d6cab3.

Text. bone #E3DAC9 is primary foreground and all VT323 headings; bone-dim #a39e90 is secondary body; muted #7a7468 is tertiary tags and captions. On parchment: ink #1B1B1B, ink-soft #2a2a26, and parchment-label #7a6a4a.

Hairlines. Dividers and card borders are translucent bone: hairline rgba(227,218,201,.08); the dock uses a slightly brighter hairline-12 rgba(227,218,201,.12). Many bevels also use pure-black rgba(0,0,0,.35) insets.

Gradient / Glow. Faction buttons use vertical two-stop gradients (ember-grad, moss-grad, sea-grad). Status glows are colored box-shadows (glow-sea, ember turn markers). The board background is a faint radial wash of ember + sea over near-black.

Typography

Three faces, all from Google Fonts. VT323 is the bitmap display face — a single-weight monospace pixel font used for every name, stat number, and headline, with letter-spacing:.02em. It scales from ~14px in lists up to 42px in the rulebook title. Inter (300–700) is the clean UI body. JetBrains Mono (400/500) serves the .tag micro-label style (10px, letter-spacing:.08em, uppercase) and the .mono timecodes. If VT323 is unavailable, substitute another bitmap face such as "Silkscreen" or "Pixelify Sans".

TokenSizeWeightLine-heightTrackingUsage
display (VT323)20px (14–42px)4001.02emnames, stats, headings, titles
body (Inter)13px4001.4chat, descriptions, UI text
tag (JetBrains Mono)10px400.08emuppercase labels, captions, kbd
mono (JetBrains Mono)10px400replay timecodes

Layout

Base unit is 4px (Tailwind scale). The page is a fixed cockpit: a 48px top bar over a three-column CSS grid 300px 1fr 340px filling calc(100vh - 48px). Left rail — chat/voice/table tabs, a compact voice roster, a scrolling chat log, and an input row. Center — a board-wrap holding a 12×8 board-grid (2px gaps, aspect-ratio:1 tiles) inside a framed, scanlined container with decorative pixel corner brackets, plus absolutely positioned overlays (turn banner top-center, coordinate chip top-left, minimap top-right, legend below). Right rail — active-player banner, HP/shard/gold and action-economy pips, a vertical initiative timeline, and a selected-unit card with action grid and tile-effect note. A floating 640px replay dock is fixed bottom-center, and a full-screen rulebook modal overlays everything. Whitespace is dense and information-rich, befitting a game HUD.

Elevation & Depth

Depth is built from inset pixel bevels, not soft shadows. Tiles, pips, and buttons all use paired inset shadows — a light top edge inset 0 1px 0 rgba(255,255,255,.x) and a dark bottom edge inset 0 -2px/-3px 0 rgba(0,0,0,.x) — to read as raised pixel blocks. Buttons add a hard offset drop 0 2px 0 <dark> that collapses on :active (the slab "presses down"). The board floats on a big soft shadow 0 30px 80px rgba(0,0,0,.6) plus a bone halo. The dock is the one glass element: rgba(22,22,20,.92) + backdrop-filter: blur(10px). Glows are colored box-shadows — glow-sea (active speaker), ember turn nodes, status dots.

Shapes

Aggressively hard-edged. The radius scale is none (0), sm (3px, rounded-sm cards, buttons, kbd, scrollbar), md (6px, only the dock), and full (9999px, avatars, status dots, timeline dots, progress bar/handle). Everything structural — tiles, pips, panels, banners, the rulebook — is square or barely-softened, reinforcing the pixel-grid aesthetic.

Components

  • buttonPrimary (btn-ember) — ember vertical gradient, white VT323/tag text, 3px radius, 8px 12px pad, dark border #2a0e04, inset bevel + 0 2px 0 #5a1e08 drop. Labels: "END TURN", "ATTACK".
  • buttonMoss / buttonSea — same slab construction in moss and sea gradients; "HEAL", "MOVE".
  • chromeCard#161614 (with faint top-light gradient), 1px bone-.08 border, 3px radius, 12px pad. Used for panels, secondary buttons ("SAVE", "SETTINGS", "GUARD"), info cards.
  • tile — square dithered terrain (moss/sea/ember/stone/sand/fog variants), 1px black border, inset bevel, image-rendering: pixelated; carries pieces, move-dots, target-dots, sel-rings.
  • dock — glass replay bar, 6px radius, blur(10px), deep drop shadow; holds transport buttons, a gradient progress track with colored turn markers and a bone handle, and a speed <select>.
  • hpPip / apPip — small beveled squares (10px moss health, 14px ember action); dim variant #2a2a26.
  • chatInput#1b1b1a fill, bone-.1 border, sea focus border, 3px radius, 36px tall.
  • bubbleMe / bubbleThem — chat bubbles: sea fill (you) vs #1f1f1d bordered (others).
  • kbd — inset key cap #1a1a18, double-bottom border #2a2a26, mono 10px (/roll, SPACE, E).
  • rulebookModal — palette-inverted parchment panel, split illustration/text, dark overlay + blur.

Motion

Driven by anime.js and GSAP (with Tailwind v4 browser build). Board tiles stagger in on load (fade + 12px rise, 500ms out(3), delay computed per row/column). Faction buttons squish to scale 0.94 on pointerdown and spring back (anime.js), reinforced by a CSS :active translateY(2px) bevel flatten. Continuous CSS loops: blink selection ring (1.4s steps), pulse target dot (1s), vol voice bars (1s, staggered). The rulebook fades in with a panel scale 0.92→1 (280ms). On entry, GSAP fades the dock up (y 24→0, delay 0.5s) and drops the header in.

Iconography

Mixed, fitting a game client. Tabler icons-webfont (<i class="ti ...">, outline, ~14–20px) for all UI affordances — help, mic, send, transport controls, refresh, shield, flame, info. game-icons (lorc sword-hilt, delapouite magic-potion) as white-filtered SVGs on action buttons. Inline pixel SVGs (shape-rendering: crispEdges) hand-draw unit sprites and the rulebook illustration. OpenMoji color SVGs supply the otter creature avatar. Default UI icon color is bone #E3DAC9, dimming to #7a7468 for idle states, tinting ember/sea/moss for status.

Do's and Don'ts

  • Do keep every name and number in VT323 and every uppercase micro-label in JetBrains Mono.
  • Do build depth from inset pixel bevels and hard offset shadows, not blur.
  • Do reserve ember for "now/yours/action", moss for health/heal, sea for movement/voice.
  • Do keep image-rendering: pixelated on tiles, sprites, and any scaled pixel art.
  • Don't introduce large radii or soft floating cards — corners stay sharp (≤6px).
  • Don't add full-color photographic surfaces to the dark UI; the only "warm" surface is the parchment rulebook.
  • Don't let body text drift off the bone/bone-dim/muted ladder, or mix faction colors arbitrarily.

Known Gaps

  • VT323 display sizes vary contextually (14px in rosters up to 42px rulebook title); the token records a representative 20px and notes the range.
  • Terrain tile fills are layered dithered gradients (multiple linear/radial stacks); the spec names base colors and the technique rather than reproducing every gradient stop.
  • Button gradient end-stops (#b53e12, #3a5d2f, #1a578a) and bevel shadow colors are read directly from CSS and recorded on the component, not promoted to standalone color tokens.
  • Unit/illustration colors inside inline pixel SVGs reuse the faction/bone palette and are not separately tokenized.