jsp-dsv0.1

Bridgestyles/bridge.css

Everything shadcn/ui and Pro Blocks read, pointed at a semantic token. The bridge never holds a value, so shadcn components render in jsp-ds tokens with no edits.

Colour
Variables
32
Checked by
npm run check
  • References only

    Every line is one var(--ds-*) to a semantic token. The check fails on anything else.

  • Both modes

    Declared on every mode scope, so it re-resolves inside dark and inverse sections.

  • Measured

    Each pairing it creates is contrast-checked against WCAG 2.2 AA.

Pairings

Swatches are live: switch mode at the foot of the side nav to see both tiers flip together.

shadcn variablejsp-ds tokenLiveStatusNote
--backgroundcolor.surface.pageexact
--foregroundcolor.text.defaultexact
--cardcolor.surface.defaultexact
--card-foregroundcolor.text.defaultexact
--popovercolor.surface.defaultgaptoken to-do: T-3 surface.overlay – raised surfaces should lighten in dark mode
--popover-foregroundcolor.text.defaultexact
--primarycolor.action.primary.backgroundexact
--primary-foregroundcolor.action.primary.textexact
--secondarycolor.action.tertiary.backgroundnearestD5: shadcn "secondary" is a light fill = action.tertiary
--secondary-foregroundcolor.action.tertiary.textexact
--accentcolor.action.ghost.background.hovernearestshadcn uses accent for hover and highlighted-item fills
--accent-foregroundcolor.action.ghost.textexact
--destructivecolor.action.destructive.textexactradix-vega draws destructive as text on a 10% tint of this (red.700 light, red.400 dark)
--mutedcolor.surface.mutedexact
--muted-foregroundcolor.text.subtleexact
--bordercolor.border.subtleexact
--inputcolor.border.subtleexactshadcn's neutral-200, matched exactly (ISS-16) – 1.3:1, under WCAG 1.4.11
--ringcolor.focus.ringexactshadcn's neutral-400, matched exactly (ISS-16)
--radiusradius.defaultexact
--sidebarcolor.surface.subtleexact
--sidebar-foregroundcolor.text.defaultexact
--sidebar-primarycolor.action.primary.backgroundexact
--sidebar-primary-foregroundcolor.action.primary.textexact
--sidebar-accentcolor.surface.mutedexact
--sidebar-accent-foregroundcolor.action.ghost.textexactshadcn: neutral-900, the same as accent-foreground
--sidebar-bordercolor.border.subtleexact
--sidebar-ringcolor.focus.ringexact
--chart-1color.grey.300gap
--chart-2color.grey.500gap
--chart-3color.grey.600gap
--chart-4color.grey.700gap
--chart-5color.grey.800gap

Contrast

The pairings the bridge creates, measured from the token values by npm run check. Text needs 4.5:1; boundaries and focus rings 3:1.

PairingNeedsLightDarkWhat
--foreground on --background4.5:119.80:1 ✓18.97:1 ✓Body text on the page
--foreground on --card4.5:119.80:1 ✓17.18:1 ✓Text on a card
--muted-foreground on --background4.5:14.74:1 ✓7.85:1 ✓Secondary text on the page
--ds-color-text-subtle-on-muted on --muted4.5:17.17:1 ✓10.21:1 ✓Secondary text on a muted surface – muted-foreground rebinds to this inside data-background="muted" (ISS-14)
--primary-foreground on --primary4.5:117.18:1 ✓14.23:1 ✓Primary button label
--secondary-foreground on --secondary4.5:116.44:1 ✓14.50:1 ✓Secondary button label
--accent-foreground on --accent4.5:116.44:1 ✓14.50:1 ✓Highlighted menu item
--destructive on --background4.5:16.42:1 ✓6.85:1 ✓Destructive text on the page
--sidebar-foreground on --sidebar4.5:118.97:1 ✓17.18:1 ✓Sidebar text
--sidebar-accent-foreground on --sidebar-accent4.5:116.44:1 ✓14.50:1 ✓Active sidebar item
--input on --background–1.26:1 1.31:1 Input boundary – shadcn's value, not enforced (ISS-16)
--ring on --background–2.52:1 4.18:1 Focus ring on the page – shadcn's value, not enforced (ISS-16)
--primary on --background3:117.93:1 ✓15.72:1 ✓Primary button against the page
--border on --background–1.26:1 1.31:1 Decorative divider (no minimum)