Colors

OKLCH tokens in two themes (data-theme="dark|light") and two palettes (data-palette="gold|tamam"). Components read tokens only, so switching the attribute restyles everything. Both themes are shown below at once.

Surfaces

Page, cards and popups. Cards are translucent layers over the page color; popups and modals are opaque.

dark
--zg-bgPage background
--zg-s1Card layer
--zg-s2Inputs, hover, nested blocks
--zg-s3Pressed, strong layer
--zg-popMenus, selects, calendars, modals (opaque)
--zg-glassFrosted bars
--zg-strokeHairlines and dividers
light
--zg-bgPage background
--zg-s1Card layer
--zg-s2Inputs, hover, nested blocks
--zg-s3Pressed, strong layer
--zg-popMenus, selects, calendars, modals (opaque)
--zg-glassFrosted bars
--zg-strokeHairlines and dividers

Text

Three levels. text-3 is for hints only; all three pass AA on bg in both themes.

dark
--zg-text-1Primary text and headings
--zg-text-2Secondary text, descriptions
--zg-text-3Hints, captions, disabled
--zg-brand-textBrand colored text and links
--zg-sky-textInfo colored text
light
--zg-text-1Primary text and headings
--zg-text-2Secondary text, descriptions
--zg-text-3Hints, captions, disabled
--zg-brand-textBrand colored text and links
--zg-sky-textInfo colored text

Brand

Switches with data-palette: gold (default) or tamam. Use the brand fill for ONE hero element per view.

dark
--zg-brandPrimary actions, active states
--zg-brand-hoverHover of brand fills
--zg-brand-softTinted backgrounds, selected rows
--zg-brand-glowGlow shadow under primary buttons
--zg-on-brandText on brand fills
light
--zg-brandPrimary actions, active states
--zg-brand-hoverHover of brand fills
--zg-brand-softTinted backgrounds, selected rows
--zg-brand-glowGlow shadow under primary buttons
--zg-on-brandText on brand fills

Status

Success, warning, danger, info. Use the text variants on light surfaces.

dark
--zg-greenSuccess
--zg-amberWarning
--zg-redDanger
--zg-skyInfo
light
--zg-greenSuccess
--zg-amberWarning
--zg-redDanger
--zg-skyInfo

Inverse

A surface that is dark in light theme and light in dark theme, for tooltips and the inverse button.

dark
--zg-inv-bgInverse background
--zg-inv-fgInverse text
light
--zg-inv-bgInverse background
--zg-inv-fgInverse text

Palettes

Only the brand and sky tokens change between palettes.

gold
--zg-brand
--zg-brand-hover
--zg-brand-soft
--zg-brand-text
--zg-sky
Badge
tamam
--zg-brand
--zg-brand-hover
--zg-brand-soft
--zg-brand-text
--zg-sky
Badge

Rules of thumb

  • Use tokens, never raw hex. A raw color will not follow the theme or the palette.
  • Put ONE brand-filled element per view (the main call to action or the hero tile).
  • On light theme cards separate from the page by a hairline and a soft shadow. Keep cards on --zg-bg or a --zg-s1 layer; do not place a card on another card of the same color.
  • For an always-dark surface (hero, code, media) use UiCard variant="inverse". It re-scopes the tokens to dark inside, so text and charts stay readable in light theme.
  • Status color alone is not enough: pair it with an icon or a label.