Skip to Content
react-brackets

Theme

The optional stylesheet, and every variable you can change.

Quarterfinals

  1. Falcons2
    Cobras3
  2. Lynx4
    Orcas3
  3. Wolves1
    Bison0
  4. Herons
    Ravens

Semifinals

  1. Cobras
    Lynx
  2. Wolves
    TBD

Final

  1. TBD
    TBD
import '@react-brackets/theme/theme.css';

<Bracket stage={stage} className="my-bracket" />;
.my-bracket {
  --rb-accent: #ea580c;
  --rb-radius: 14px;
  --rb-match-width: 11rem;
  --rb-line-width: 2px;
}

Every theme rule has zero specificity and lives in the components cascade layer, so your styles always win without !important: plain CSS because it's unlayered, and Tailwind utilities because their layer comes later. Add unstyled to a bracket to opt it out of the theme entirely, even while the stylesheet is loaded.

Variables

VariableDefaultUsed for
--rb-accentblueWinner scores, highlights, focus rings
--rb-accent-soft14% of the accentHighlighted rows
--rb-text / --rb-text-mutedzincText, losers, TBD
--rb-surface / --rb-surface-hoverwhite / zinc-100Match cards
--rb-borderzinc-200Card borders and dividers
--rb-liveredLive match border
--rb-line / --rb-line-widthzinc-300 / 1.5pxConnector lines
--rb-radius10pxCards and controls
--rb-shadowsubtleCards
--rb-match-width13.5remCard width in the tree
--rb-match-gap0.75remSpace between matches
--rb-column-gap3rem (1.5rem paged)Space between rounds
--rb-duration160msHover and highlight transitions
--rb-fontinheritFont family

Colours use light-dark(), so they follow the page's color-scheme. For a site with its own tokens, point the variables at them:

[data-scope="bracket"][data-part="root"] {
  --rb-surface: var(--card);
  --rb-border: var(--border);
  --rb-accent: var(--primary);
}

On this page