Design system kit

The kit renders a design system from data: its foundations in light and dark, its voice, every component it allows in each allowed variant, size and state, its own components and its approval record. Below is Ledgerline 2.3.0, a fictional example brand, locked to 3 of the 199 catalog components.

The kit is released in 0.16.0, with the locked design systems it shows. An approval it displays is declared in the document: the kit checks the content hash, but only a reviewed commit proves who approved. See the design systems hub for the example brands side by side, and the Design Systems Solution for the whole loop from brand inputs to locked prototypes.

Use it in your app

Pass the document, its compiled output (with the allow manifest) and the catalog. Library components arrive as snippets keyed by library id; components from packages above texuli arrive as sample snippets keyed by catalog id.

<script lang="ts">
  import { DesignSystemKit } from 'texuli/ds-kit';
  import catalog from './catalog/components.json'; // packages/spec/catalog/components.json
  import doc from './design-system.json';
  import compiled from './dist/compiled.json';      // texuli ds compile --format json
</script>

<DesignSystemKit document={doc} {compiled} allow={compiled.allowManifest} {catalog} />

Ledgerline2.3.0

Draft No content hash recorded

Version
2.3.0
Computed hash
6db953ba91c7d6a9e7b1a84ef73b39190cefdace6e55aa954df47bb7514dc2be
Color mode

Foundations

Color roles (113)

TokenLightDark
--tx-accent #e7efff #172544
--tx-accent-active #f7ffff #030d29
--tx-accent-disabled #f4f7fb #11151e
--tx-accent-focus #1d4ed8 #2558e2
--tx-accent-foreground #111a2d #e7efff
--tx-accent-hover #f7ffff #0c1936
--tx-background #fafcff #060b14
--tx-border #d9e2ef #2c333d
--tx-border-strong #8b939f #79818c
--tx-canvas #eff6ff #03060d
--tx-destructive #cc2827 #ff645a
--tx-destructive-active #a3000e #ffa096
--tx-destructive-disabled #e7b4ad #5a332f
--tx-destructive-focus #1d4ed8 #2558e2
--tx-destructive-foreground #ffffff #0a0a0a
--tx-destructive-hover #ba0a15 #ff8579
--tx-destructive-soft #fff2f0 #370404
--tx-destructive-soft-foreground #540004 #ffc8c1
--tx-elevated #f7ffff #1c222b
--tx-elevated-foreground #0a1628 #eff6ff
--tx-foreground #0a1628 #eff6ff
--tx-info #0871c1 #4ba3f7
--tx-info-active #005493 #88c3ff
--tx-info-disabled #acc4de #2d4157
--tx-info-focus #1d4ed8 #2558e2
--tx-info-foreground #ffffff #0a0a0a
--tx-info-hover #0062ab #67b3ff
--tx-info-soft #eef6ff #001b36
--tx-info-soft-foreground #002a4e #badbff
--tx-input #7f8792 #6a727d
--tx-input-active #626a74 #87909b
--tx-input-disabled #c9cbcf #2e3033
--tx-input-focus #1d4ed8 #2558e2
--tx-input-hover #707883 #78818c
--tx-link #2655d3 #85acff
--tx-link-active #0c34b1 #b6ceff
--tx-link-disabled #a9bce4 #3a455a
--tx-link-focus #1d4ed8 #2558e2
--tx-link-hover #1945c2 #9dbdff
--tx-link-visited #73348e #da99fa
--tx-muted #ecf4ff #1c222b
--tx-muted-active #f8ffff #070b13
--tx-muted-disabled #f6f9fc #121416
--tx-muted-focus #1d4ed8 #2558e2
--tx-muted-foreground #55647a #95a6be
--tx-muted-hover #f8ffff #11161f
--tx-overlay rgb(9 9 11 / 0.5) rgb(0 0 0 / 0.65)
--tx-primary #1d4ed8 #4e83ff
--tx-primary-active #052ab6 #7fa8ff
--tx-primary-disabled #a6bbe5 #2a3857
--tx-primary-focus #1d4ed8 #2558e2
--tx-primary-foreground #ffffff #0a0a0a
--tx-primary-hover #103dc7 #6796ff
--tx-primary-soft #f0f5ff #07173f
--tx-primary-soft-foreground #041c6c #c4d8ff
--tx-ring #1d4ed8 #2558e2
--tx-scrim rgb(9 9 11 / 0.32) rgb(0 0 0 / 0.5)
--tx-secondary #cbf1ec #123431
--tx-secondary-active #e2ffff #001b19
--tx-secondary-disabled #ebf7f5 #121a19
--tx-secondary-focus #1d4ed8 #2558e2
--tx-secondary-foreground #00201d #d2f8f3
--tx-secondary-hover #e4fffb #042725
--tx-selection #c0d5ff #2a4072
--tx-selection-foreground #111a2d #e7efff
--tx-sidebar #f2f7ff #0c121a
--tx-sidebar-border #d9e2ef #272e38
--tx-sidebar-foreground #172537 #dae9ff
--tx-sidebar-primary #1d4ed8 #4e83ff
--tx-sidebar-primary-active #052ab6 #7fa8ff
--tx-sidebar-primary-disabled #a6bbe5 #2a3857
--tx-sidebar-primary-focus #1d4ed8 #2558e2
--tx-sidebar-primary-hover #103dc7 #6796ff
--tx-status-danger #cc2827 #ff645a
--tx-status-danger-foreground #ffffff #0a0a0a
--tx-status-danger-soft #fff2f0 #370404
--tx-status-danger-soft-foreground #540004 #ffc8c1
--tx-status-info #0871c1 #4ba3f7
--tx-status-info-foreground #ffffff #0a0a0a
--tx-status-info-soft #eef6ff #001b36
--tx-status-info-soft-foreground #002a4e #badbff
--tx-status-neutral #cbf1ec #123431
--tx-status-neutral-foreground #00201d #d2f8f3
--tx-status-neutral-soft #ecf4ff #1c222b
--tx-status-neutral-soft-foreground #55647a #95a6be
--tx-status-success #007f38 #43b966
--tx-status-success-foreground #ffffff #0a0a0a
--tx-status-success-soft #dfffe4 #00220a
--tx-status-success-soft-foreground #003312 #9ceead
--tx-status-warning #916600 #cd9200
--tx-status-warning-foreground #ffffff #0a0a0a
--tx-status-warning-soft #fff4e1 #261800
--tx-status-warning-soft-foreground #382500 #ffcf7d
--tx-subtle #e1eaf7 #272e38
--tx-subtle-foreground #3f4e63 #aebfd8
--tx-success #007f38 #43b966
--tx-success-active #005e28 #67da85
--tx-success-disabled #acc7b0 #2d4732
--tx-success-focus #1d4ed8 #2558e2
--tx-success-foreground #ffffff #0a0a0a
--tx-success-hover #006e30 #55c975
--tx-success-soft #dfffe4 #00220a
--tx-success-soft-foreground #003312 #9ceead
--tx-surface #f7ffff #10161f
--tx-surface-foreground #0a1628 #eff6ff
--tx-warning #916600 #cd9200
--tx-warning-active #6d4c00 #eeb23d
--tx-warning-disabled #cdbfa9 #4c3d24
--tx-warning-focus #1d4ed8 #2558e2
--tx-warning-foreground #ffffff #0a0a0a
--tx-warning-hover #7f5900 #dea227
--tx-warning-soft #fff4e1 #261800
--tx-warning-soft-foreground #382500 #ffcf7d

Data visualization (36)

TokenLightDark
--tx-chart-1 #4974d8 #76a2ff
--tx-chart-1-foreground #0a0a0a #0a0a0a
--tx-chart-2 #965bc0 #b57ae1
--tx-chart-2-foreground #ffffff #0a0a0a
--tx-chart-3 #bf4a80 #ef75ab
--tx-chart-3-foreground #ffffff #0a0a0a
--tx-chart-4 #9b7300 #d09b00
--tx-chart-4-foreground #0a0a0a #0a0a0a
--tx-chart-5 #00826b #00b292
--tx-chart-5-foreground #ffffff #0a0a0a
--tx-chart-6 #6d9d2d #ff9975
--tx-chart-6-foreground #0a0a0a #0a0a0a
--tx-chart-7 #008fad #00bee5
--tx-chart-7-foreground #0a0a0a #0a0a0a
--tx-chart-8 #e17148 #8bbd50
--tx-chart-8-foreground #0a0a0a #0a0a0a
--tx-chart-axis #55647a #95a6be
--tx-chart-diverging-1 #c74b43 #c8584f
--tx-chart-diverging-2 #d7766c #a25048
--tx-chart-diverging-3 #e49e95 #7e4640
--tx-chart-diverging-4 #eec5bf #5a3c38
--tx-chart-diverging-5 #ebeff5 #303338
--tx-chart-diverging-6 #c1d0f0 #39455d
--tx-chart-diverging-7 #97b2e9 #425783
--tx-chart-diverging-8 #7094e1 #4a6aac
--tx-chart-diverging-9 #4974d7 #537cd6
--tx-chart-grid #d9e2ef #2c333d
--tx-chart-sequential-1 #ebf2ff #272e3b
--tx-chart-sequential-2 #d4e2ff #2c374c
--tx-chart-sequential-3 #bed3fc #31405e
--tx-chart-sequential-4 #aac3f7 #364970
--tx-chart-sequential-5 #96b4f1 #3b5383
--tx-chart-sequential-6 #82a4eb #415c96
--tx-chart-sequential-7 #6f94e5 #4666aa
--tx-chart-sequential-8 #5c84de #4b6fbe
--tx-chart-sequential-9 #4974d8 #5079d2

Typography (57)

  • body The quick brown fox jumps over the lazy dog
  • caption The quick brown fox jumps over the lazy dog
  • code The quick brown fox jumps over the lazy dog
  • display The quick brown fox jumps over the lazy dog
  • heading The quick brown fox jumps over the lazy dog
  • label The quick brown fox jumps over the lazy dog
  • title The quick brown fox jumps over the lazy dog
TokenLightDark
--tx-font-heading "IBM Plex Sans", system-ui, sans-serif "IBM Plex Sans", system-ui, sans-serif
--tx-font-mono "IBM Plex Mono", ui-monospace, monospace "IBM Plex Mono", ui-monospace, monospace
--tx-font-sans "IBM Plex Sans", system-ui, sans-serif "IBM Plex Sans", system-ui, sans-serif
--tx-font-size-2xl 1.2458rem 1.2458rem
--tx-font-size-3xl 1.4016rem 1.4016rem
--tx-font-size-4xl 1.5768rem 1.5768rem
--tx-font-size-5xl 1.7739rem 1.7739rem
--tx-font-size-6xl 1.9956rem 1.9956rem
--tx-font-size-7xl 2.2451rem 2.2451rem
--tx-font-size-8xl 2.5257rem 2.5257rem
--tx-font-size-9xl 2.8414rem 2.8414rem
--tx-font-size-base 0.875rem 0.875rem
--tx-font-size-lg 0.9844rem 0.9844rem
--tx-font-size-sm 0.7778rem 0.7778rem
--tx-font-size-xl 1.1074rem 1.1074rem
--tx-font-size-xs 0.6913rem 0.6913rem
--tx-font-weight-body 400 400
--tx-font-weight-bold 700 700
--tx-font-weight-heading 600 600
--tx-font-weight-medium 500 500
--tx-letter-spacing-body 0 0
--tx-letter-spacing-heading 0 0
--tx-type-body-family "IBM Plex Sans", system-ui, sans-serif "IBM Plex Sans", system-ui, sans-serif
--tx-type-body-line 1.5 1.5
--tx-type-body-size 0.875rem 0.875rem
--tx-type-body-tracking 0 0
--tx-type-body-weight 400 400
--tx-type-caption-family "IBM Plex Sans", system-ui, sans-serif "IBM Plex Sans", system-ui, sans-serif
--tx-type-caption-line 1.35 1.35
--tx-type-caption-size 0.6913rem 0.6913rem
--tx-type-caption-tracking 0 0
--tx-type-caption-weight 400 400
--tx-type-code-family "IBM Plex Mono", ui-monospace, monospace "IBM Plex Mono", ui-monospace, monospace
--tx-type-code-line 1.5 1.5
--tx-type-code-size 0.875em 0.875em
--tx-type-code-tracking 0 0
--tx-type-code-weight 400 400
--tx-type-display-family "IBM Plex Sans", system-ui, sans-serif "IBM Plex Sans", system-ui, sans-serif
--tx-type-display-line 1.1 1.1
--tx-type-display-size 1.5768rem 1.5768rem
--tx-type-display-tracking 0 0
--tx-type-display-weight 700 700
--tx-type-heading-family "IBM Plex Sans", system-ui, sans-serif "IBM Plex Sans", system-ui, sans-serif
--tx-type-heading-line 1.3 1.3
--tx-type-heading-size 0.9844rem 0.9844rem
--tx-type-heading-tracking 0 0
--tx-type-heading-weight 600 600
--tx-type-label-family "IBM Plex Sans", system-ui, sans-serif "IBM Plex Sans", system-ui, sans-serif
--tx-type-label-line 1.25 1.25
--tx-type-label-size 0.7778rem 0.7778rem
--tx-type-label-tracking 0 0
--tx-type-label-weight 500 500
--tx-type-title-family "IBM Plex Sans", system-ui, sans-serif "IBM Plex Sans", system-ui, sans-serif
--tx-type-title-line 1.2 1.2
--tx-type-title-size 1.2458rem 1.2458rem
--tx-type-title-tracking 0 0
--tx-type-title-weight 600 600

Spacing (14)

TokenLightDark
--tx-space-0 0px 0px
--tx-space-1 0.2188rem 0.2188rem
--tx-space-2 0.4375rem 0.4375rem
--tx-space-3 0.6563rem 0.6563rem
--tx-space-4 0.875rem 0.875rem
--tx-space-5 1.0938rem 1.0938rem
--tx-space-6 1.3125rem 1.3125rem
--tx-space-7 1.5313rem 1.5313rem
--tx-space-8 1.75rem 1.75rem
--tx-space-9 1.9688rem 1.9688rem
--tx-space-10 2.1875rem 2.1875rem
--tx-space-11 2.4063rem 2.4063rem
--tx-space-12 2.625rem 2.625rem
--tx-space-unit 0.2188rem 0.2188rem

Radius (12)

TokenLightDark
--tx-radius 0.25rem 0.25rem
--tx-radius-scale 0.5 0.5
--tx-radius-step-2 1px 1px
--tx-radius-step-4 2px 2px
--tx-radius-step-6 3px 3px
--tx-shape-radius-full 9999px 9999px
--tx-shape-radius-lg 0.25rem 0.25rem
--tx-shape-radius-md max(0px, 0.25rem - 1px) max(0px, 0.25rem - 1px)
--tx-shape-radius-none 0px 0px
--tx-shape-radius-sm max(0px, 0.25rem - 2px) max(0px, 0.25rem - 2px)
--tx-shape-radius-xl calc(0.25rem + 2px) calc(0.25rem + 2px)
--tx-shape-radius-xs max(0px, 0.25rem - 3px) max(0px, 0.25rem - 3px)

Elevation and shadow (10)

TokenLightDark
--tx-elevation-0 none none
--tx-elevation-1 0 1px 2px 0 rgb(15 23 42 / 0.1) 0 1px 2px 0 rgb(0 0 0 / 0.5)
--tx-elevation-2 0 1px 2px 0 rgb(15 23 42 / 0.1) 0 1px 2px 0 rgb(0 0 0 / 0.5)
--tx-elevation-3 0 4px 8px -2px rgb(15 23 42 / 0.1) 0 4px 8px -2px rgb(0 0 0 / 0.5)
--tx-elevation-4 0 4px 8px -2px rgb(15 23 42 / 0.1) 0 4px 8px -2px rgb(0 0 0 / 0.5)
--tx-elevation-5 0 4px 8px -2px rgb(15 23 42 / 0.1) 0 4px 8px -2px rgb(0 0 0 / 0.5)
--tx-elevation-style crisp crisp
--tx-shadow rgb(15 23 42 / 0.1) rgb(0 0 0 / 0.5)
--tx-shadow-float 0 4px 8px -2px rgb(15 23 42 / 0.1) 0 4px 8px -2px rgb(0 0 0 / 0.5)
--tx-shadow-soft 0 1px 2px 0 rgb(15 23 42 / 0.1) 0 1px 2px 0 rgb(0 0 0 / 0.5)

Motion (18)

TokenLightDark
--tx-motion 1 1
--tx-motion-base 150ms 150ms
--tx-motion-ease-emphasized cubic-bezier(0.2, 0, 0, 1) cubic-bezier(0.2, 0, 0, 1)
--tx-motion-ease-enter cubic-bezier(0, 0, 0.2, 1) cubic-bezier(0, 0, 0.2, 1)
--tx-motion-ease-exit cubic-bezier(0.4, 0, 1, 1) cubic-bezier(0.4, 0, 1, 1)
--tx-motion-ease-linear linear linear
--tx-motion-ease-standard cubic-bezier(0.4, 0, 0.2, 1) cubic-bezier(0.4, 0, 0.2, 1)
--tx-motion-easing ease-out ease-out
--tx-motion-fast 100ms 100ms
--tx-motion-instant 0ms 0ms
--tx-motion-slow 200ms 200ms
--tx-motion-slower 333ms 333ms
--tx-motion-spring-bouncy linear(0, 0.1177, 0.3817, 0.6779, 0.9294, 1.0989, 1.1811, 1.1921, 1.1571, 1.1015, 1.0453, 1.001, 0.9737, 0.9627, 0.964, 0.9727, 0.9839, 0.9943, 1.0019, 1.0061, 1.0074, 1.0066, 1.0046, 1.0024, 1.0006, 0.9993, 0.9987, 0.9986, 0.9988, 0.9992, 0.9997, 1) linear(0, 0.1177, 0.3817, 0.6779, 0.9294, 1.0989, 1.1811, 1.1921, 1.1571, 1.1015, 1.0453, 1.001, 0.9737, 0.9627, 0.964, 0.9727, 0.9839, 0.9943, 1.0019, 1.0061, 1.0074, 1.0066, 1.0046, 1.0024, 1.0006, 0.9993, 0.9987, 0.9986, 0.9988, 0.9992, 0.9997, 1)
--tx-motion-spring-bouncy-duration 844ms 844ms
--tx-motion-spring-gentle linear(0, 0.0228, 0.0795, 0.1561, 0.2426, 0.3318, 0.419, 0.5013, 0.5767, 0.6444, 0.7041, 0.7561, 0.8007, 0.8386, 0.8704, 0.8969, 0.9187, 0.9365, 0.951, 0.9626, 0.9718, 0.9791, 0.9848, 0.9892, 0.9925, 0.9951, 0.9969, 0.9983, 0.9993, 0.9999, 1.0004, 1) linear(0, 0.0228, 0.0795, 0.1561, 0.2426, 0.3318, 0.419, 0.5013, 0.5767, 0.6444, 0.7041, 0.7561, 0.8007, 0.8386, 0.8704, 0.8969, 0.9187, 0.9365, 0.951, 0.9626, 0.9718, 0.9791, 0.9848, 0.9892, 0.9925, 0.9951, 0.9969, 0.9983, 0.9993, 0.9999, 1.0004, 1)
--tx-motion-spring-gentle-duration 648ms 648ms
--tx-motion-spring-snappy linear(0, 0.0368, 0.1267, 0.2447, 0.3726, 0.4983, 0.6137, 0.7148, 0.7995, 0.8679, 0.9212, 0.9609, 0.9892, 1.0082, 1.0199, 1.0261, 1.0283, 1.0278, 1.0255, 1.0223, 1.0187, 1.0151, 1.0117, 1.0088, 1.0062, 1.0042, 1.0026, 1.0014, 1.0005, 0.9999, 0.9995, 1) linear(0, 0.0368, 0.1267, 0.2447, 0.3726, 0.4983, 0.6137, 0.7148, 0.7995, 0.8679, 0.9212, 0.9609, 0.9892, 1.0082, 1.0199, 1.0261, 1.0283, 1.0278, 1.0255, 1.0223, 1.0187, 1.0151, 1.0117, 1.0088, 1.0062, 1.0042, 1.0026, 1.0014, 1.0005, 0.9999, 0.9995, 1)
--tx-motion-spring-snappy-duration 453ms 453ms

Other tokens (49)

TokenLightDark
--tx-border-width 1px 1px
--tx-border-width-thick calc(1px * 2) calc(1px * 2)
--tx-border-width-thin 1px 1px
--tx-density 0.875 0.875
--tx-focus-ring-offset 2px 2px
--tx-focus-ring-style ring ring
--tx-focus-ring-width 2px 2px
--tx-glass-blur 16px 16px
--tx-glass-opacity 82% 82%
--tx-icon-stroke 2 2
--tx-icon-style outline outline
--tx-layout-breakpoint-lg 72rem 72rem
--tx-layout-breakpoint-md 56rem 56rem
--tx-layout-breakpoint-sm 36rem 36rem
--tx-layout-content-max 72ch 72ch
--tx-layout-full-max 100% 100%
--tx-layout-grid-columns-base 1 1
--tx-layout-grid-columns-lg 4 4
--tx-layout-grid-columns-md 3 3
--tx-layout-grid-columns-sm 2 2
--tx-layout-grid-gutter-base 0.875rem 0.875rem
--tx-layout-grid-gutter-lg 0.875rem 0.875rem
--tx-layout-grid-gutter-md 0.875rem 0.875rem
--tx-layout-grid-gutter-sm 0.875rem 0.875rem
--tx-layout-wide-max 80rem 80rem
--tx-opacity-disabled 0.5 0.5
--tx-opacity-muted 0.7 0.7
--tx-opacity-scrim 45% 45%
--tx-size-control-lg 2.75rem 2.75rem
--tx-size-control-md 2.25rem 2.25rem
--tx-size-control-sm 2rem 2rem
--tx-size-control-xs 1.75rem 1.75rem
--tx-size-icon-lg 1.5rem 1.5rem
--tx-size-icon-md 1.25rem 1.25rem
--tx-size-icon-sm 1rem 1rem
--tx-size-icon-xs 0.75rem 0.75rem
--tx-size-target-min 24px 24px
--tx-size-target-touch max(2.75rem, 44px) max(2.75rem, 44px)
--tx-surface-glass-alpha 82% 82%
--tx-surface-glass-blur 16px 16px
--tx-surface-style solid solid
--tx-z-base 0 0
--tx-z-modal 60 60
--tx-z-overlay 60 60
--tx-z-popover 50 50
--tx-z-sticky 40 40
--tx-z-toast 60 60
--tx-z-tooltip 50 50
--tx-z-top 70 70

Contrast

Target: AA contrast, controls at least 24 px.

Light
ForegroundBackgroundRatioResult
--tx-foreground--tx-canvas16.65:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-background17.64:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-surface17.87:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-elevated17.87:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-muted16.36:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-subtle14.94:1 (needs 4.5:1, text)Pass
--tx-surface-foreground--tx-surface17.87:1 (needs 4.5:1, text)Pass
--tx-elevated-foreground--tx-elevated17.87:1 (needs 4.5:1, text)Pass
--tx-muted-foreground--tx-background5.85:1 (needs 4.5:1, text)Pass
--tx-muted-foreground--tx-surface5.93:1 (needs 4.5:1, text)Pass
--tx-muted-foreground--tx-muted5.42:1 (needs 4.5:1, text)Pass
--tx-muted-foreground--tx-elevated5.93:1 (needs 4.5:1, text)Pass
--tx-subtle-foreground--tx-background8.23:1 (needs 4.5:1, text)Pass
--tx-subtle-foreground--tx-subtle6.97:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-primary6.7:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-primary-hover8.35:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-primary-active10.43:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-sidebar-primary6.7:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-sidebar-primary-hover8.35:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-sidebar-primary-active10.43:1 (needs 4.5:1, text)Pass
--tx-primary-soft-foreground--tx-primary-soft13.84:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-primary-soft16.58:1 (needs 4.5:1, text)Pass
--tx-secondary-foreground--tx-secondary14.15:1 (needs 4.5:1, text)Pass
--tx-secondary-foreground--tx-secondary-hover16.33:1 (needs 4.5:1, text)Pass
--tx-secondary-foreground--tx-secondary-active16.32:1 (needs 4.5:1, text)Pass
--tx-accent-foreground--tx-accent15.03:1 (needs 4.5:1, text)Pass
--tx-accent-foreground--tx-accent-hover17.11:1 (needs 4.5:1, text)Pass
--tx-accent-foreground--tx-accent-active17.11:1 (needs 4.5:1, text)Pass
--tx-destructive-foreground--tx-destructive5.38:1 (needs 4.5:1, text)Pass
--tx-destructive-foreground--tx-destructive-hover6.68:1 (needs 4.5:1, text)Pass
--tx-destructive-foreground--tx-destructive-active8.19:1 (needs 4.5:1, text)Pass
--tx-destructive-soft-foreground--tx-destructive-soft13.93:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-destructive-soft16.58:1 (needs 4.5:1, text)Pass
--tx-success-foreground--tx-success5.13:1 (needs 4.5:1, text)Pass
--tx-success-foreground--tx-success-hover6.41:1 (needs 4.5:1, text)Pass
--tx-success-foreground--tx-success-active7.97:1 (needs 4.5:1, text)Pass
--tx-success-soft-foreground--tx-success-soft13.19:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-success-soft16.88:1 (needs 4.5:1, text)Pass
--tx-warning-foreground--tx-warning5.11:1 (needs 4.5:1, text)Pass
--tx-warning-foreground--tx-warning-hover6.3:1 (needs 4.5:1, text)Pass
--tx-warning-foreground--tx-warning-active7.82:1 (needs 4.5:1, text)Pass
--tx-warning-soft-foreground--tx-warning-soft13.45:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-warning-soft16.64:1 (needs 4.5:1, text)Pass
--tx-info-foreground--tx-info5.06:1 (needs 4.5:1, text)Pass
--tx-info-foreground--tx-info-hover6.29:1 (needs 4.5:1, text)Pass
--tx-info-foreground--tx-info-active7.8:1 (needs 4.5:1, text)Pass
--tx-info-soft-foreground--tx-info-soft13.36:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-info-soft16.62:1 (needs 4.5:1, text)Pass
--tx-sidebar-foreground--tx-sidebar14.39:1 (needs 4.5:1, text)Pass
--tx-link--tx-background6.14:1 (needs 4.5:1, text)Pass
--tx-link--tx-surface6.23:1 (needs 4.5:1, text)Pass
--tx-link--tx-muted5.7:1 (needs 4.5:1, text)Pass
--tx-link--tx-elevated6.23:1 (needs 4.5:1, text)Pass
--tx-link-visited--tx-background7.82:1 (needs 4.5:1, text)Pass
--tx-link-visited--tx-surface7.92:1 (needs 4.5:1, text)Pass
--tx-link-visited--tx-muted7.25:1 (needs 4.5:1, text)Pass
--tx-link-visited--tx-elevated7.92:1 (needs 4.5:1, text)Pass
--tx-selection-foreground--tx-selection11.74:1 (needs 4.5:1, text)Pass
--tx-border-strong--tx-background3.01:1 (needs 3:1, ui)Pass
--tx-border-strong--tx-surface3.05:1 (needs 3:1, ui)Pass
--tx-input--tx-background3.53:1 (needs 3:1, ui)Pass
--tx-input--tx-surface3.57:1 (needs 3:1, ui)Pass
--tx-ring--tx-background6.52:1 (needs 3:1, focus)Pass
--tx-ring--tx-surface6.6:1 (needs 3:1, focus)Pass
--tx-status-success-foreground--tx-status-success5.13:1 (needs 4.5:1, text)Pass
--tx-status-success-soft-foreground--tx-status-success-soft13.19:1 (needs 4.5:1, text)Pass
--tx-status-warning-foreground--tx-status-warning5.11:1 (needs 4.5:1, text)Pass
--tx-status-warning-soft-foreground--tx-status-warning-soft13.45:1 (needs 4.5:1, text)Pass
--tx-status-danger-foreground--tx-status-danger5.38:1 (needs 4.5:1, text)Pass
--tx-status-danger-soft-foreground--tx-status-danger-soft13.93:1 (needs 4.5:1, text)Pass
--tx-status-info-foreground--tx-status-info5.06:1 (needs 4.5:1, text)Pass
--tx-status-info-soft-foreground--tx-status-info-soft13.36:1 (needs 4.5:1, text)Pass
--tx-status-neutral-foreground--tx-status-neutral14.15:1 (needs 4.5:1, text)Pass
--tx-status-neutral-soft-foreground--tx-status-neutral-soft5.42:1 (needs 4.5:1, text)Pass
Dark
ForegroundBackgroundRatioResult
--tx-foreground--tx-canvas18.63:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-background18.1:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-surface16.68:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-elevated14.69:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-muted14.69:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-subtle12.57:1 (needs 4.5:1, text)Pass
--tx-surface-foreground--tx-surface16.68:1 (needs 4.5:1, text)Pass
--tx-elevated-foreground--tx-elevated14.69:1 (needs 4.5:1, text)Pass
--tx-muted-foreground--tx-background7.95:1 (needs 4.5:1, text)Pass
--tx-muted-foreground--tx-surface7.32:1 (needs 4.5:1, text)Pass
--tx-muted-foreground--tx-muted6.45:1 (needs 4.5:1, text)Pass
--tx-muted-foreground--tx-elevated6.45:1 (needs 4.5:1, text)Pass
--tx-subtle-foreground--tx-background10.55:1 (needs 4.5:1, text)Pass
--tx-subtle-foreground--tx-subtle7.32:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-primary5.67:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-primary-hover6.96:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-primary-active8.43:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-sidebar-primary5.67:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-sidebar-primary-hover6.96:1 (needs 4.5:1, text)Pass
--tx-primary-foreground--tx-sidebar-primary-active8.43:1 (needs 4.5:1, text)Pass
--tx-primary-soft-foreground--tx-primary-soft12.14:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-primary-soft16.03:1 (needs 4.5:1, text)Pass
--tx-secondary-foreground--tx-secondary11.82:1 (needs 4.5:1, text)Pass
--tx-secondary-foreground--tx-secondary-hover13.96:1 (needs 4.5:1, text)Pass
--tx-secondary-foreground--tx-secondary-active15.76:1 (needs 4.5:1, text)Pass
--tx-accent-foreground--tx-accent13.13:1 (needs 4.5:1, text)Pass
--tx-accent-foreground--tx-accent-hover15.05:1 (needs 4.5:1, text)Pass
--tx-accent-foreground--tx-accent-active16.63:1 (needs 4.5:1, text)Pass
--tx-destructive-foreground--tx-destructive6.8:1 (needs 4.5:1, text)Pass
--tx-destructive-foreground--tx-destructive-hover8.37:1 (needs 4.5:1, text)Pass
--tx-destructive-foreground--tx-destructive-active10.1:1 (needs 4.5:1, text)Pass
--tx-destructive-soft-foreground--tx-destructive-soft12.08:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-destructive-soft16.33:1 (needs 4.5:1, text)Pass
--tx-success-foreground--tx-success7.89:1 (needs 4.5:1, text)Pass
--tx-success-foreground--tx-success-hover9.42:1 (needs 4.5:1, text)Pass
--tx-success-foreground--tx-success-active11.26:1 (needs 4.5:1, text)Pass
--tx-success-soft-foreground--tx-success-soft12.36:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-success-soft15.64:1 (needs 4.5:1, text)Pass
--tx-warning-foreground--tx-warning7.26:1 (needs 4.5:1, text)Pass
--tx-warning-foreground--tx-warning-hover8.77:1 (needs 4.5:1, text)Pass
--tx-warning-foreground--tx-warning-active10.43:1 (needs 4.5:1, text)Pass
--tx-warning-soft-foreground--tx-warning-soft11.93:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-warning-soft15.9:1 (needs 4.5:1, text)Pass
--tx-info-foreground--tx-info7.43:1 (needs 4.5:1, text)Pass
--tx-info-foreground--tx-info-hover8.92:1 (needs 4.5:1, text)Pass
--tx-info-foreground--tx-info-active10.65:1 (needs 4.5:1, text)Pass
--tx-info-soft-foreground--tx-info-soft12.11:1 (needs 4.5:1, text)Pass
--tx-foreground--tx-info-soft15.94:1 (needs 4.5:1, text)Pass
--tx-sidebar-foreground--tx-sidebar15.29:1 (needs 4.5:1, text)Pass
--tx-link--tx-background8.76:1 (needs 4.5:1, text)Pass
--tx-link--tx-surface8.07:1 (needs 4.5:1, text)Pass
--tx-link--tx-muted7.11:1 (needs 4.5:1, text)Pass
--tx-link--tx-elevated7.11:1 (needs 4.5:1, text)Pass
--tx-link-visited--tx-background9.3:1 (needs 4.5:1, text)Pass
--tx-link-visited--tx-surface8.57:1 (needs 4.5:1, text)Pass
--tx-link-visited--tx-muted7.55:1 (needs 4.5:1, text)Pass
--tx-link-visited--tx-elevated7.55:1 (needs 4.5:1, text)Pass
--tx-selection-foreground--tx-selection8.76:1 (needs 4.5:1, text)Pass
--tx-border-strong--tx-background5:1 (needs 3:1, ui)Pass
--tx-border-strong--tx-surface4.6:1 (needs 3:1, ui)Pass
--tx-input--tx-background4.04:1 (needs 3:1, ui)Pass
--tx-input--tx-surface3.73:1 (needs 3:1, ui)Pass
--tx-ring--tx-background3.35:1 (needs 3:1, focus)Pass
--tx-ring--tx-surface3.08:1 (needs 3:1, focus)Pass
--tx-status-success-foreground--tx-status-success7.89:1 (needs 4.5:1, text)Pass
--tx-status-success-soft-foreground--tx-status-success-soft12.36:1 (needs 4.5:1, text)Pass
--tx-status-warning-foreground--tx-status-warning7.26:1 (needs 4.5:1, text)Pass
--tx-status-warning-soft-foreground--tx-status-warning-soft11.93:1 (needs 4.5:1, text)Pass
--tx-status-danger-foreground--tx-status-danger6.8:1 (needs 4.5:1, text)Pass
--tx-status-danger-soft-foreground--tx-status-danger-soft12.08:1 (needs 4.5:1, text)Pass
--tx-status-info-foreground--tx-status-info7.43:1 (needs 4.5:1, text)Pass
--tx-status-info-soft-foreground--tx-status-info-soft12.11:1 (needs 4.5:1, text)Pass
--tx-status-neutral-foreground--tx-status-neutral11.82:1 (needs 4.5:1, text)Pass
--tx-status-neutral-soft-foreground--tx-status-neutral-soft6.45:1 (needs 4.5:1, text)Pass
  • --tx-size-control-xs: 28 px (needs 24 px), Pass
  • --tx-size-control-sm: 32 px (needs 24 px), Pass
  • --tx-size-control-md: 36 px (needs 24 px), Pass
  • --tx-size-control-lg: 44 px (needs 24 px), Pass

Voice and rules

Identity

Name
Ledgerline
Description
A fictional finance back office: dense tables, crisp edges and a high-contrast variant for long sessions.
Owner
Ledgerline Platform (fictional)
License
MIT
Tags
enterprise, dense, example

Tone

  • precise
  • neutral

Lexicon

TermPreferred
workspaceledger

Guidelines

  1. Lead with the number.
  2. Name the period every figure covers.

Accessibility

Contrast
AA
Minimum target
24
Focus
ring

Locked-mode rules

Locked · 3 components allowed

draft

In locked mode, layout utilities only, on the token scale: display, flex, grid, gap, padding, margin, size, position and overflow. Color, typography, radius, shadow, opacity, filters, transforms, transitions and arbitrary values are not allowed. The checker owns the exact list.

Components

3 components allowed by this design system.

forms (1)

Button button

Light

Variant / sizesmmdlgicon
default
default · sm · default
default · md · default
default · lg · default
default · icon · default
secondary
secondary · sm · default
secondary · md · default
secondary · lg · default
secondary · icon · default
outline
outline · sm · default
outline · md · default
outline · lg · default
outline · icon · default
ghost
ghost · sm · default
ghost · md · default
ghost · lg · default
ghost · icon · default
destructive
destructive · sm · default
destructive · md · default
destructive · lg · default
destructive · icon · default
link
link · sm · default
link · md · default
link · lg · default
link · icon · default
default · md · default · disabled
default · md · default · disabled
default · md · default · loading
default · md · default · loading
default · md · destructive
default · md · destructive
default · md · success
default · md · success
default · md · warning
default · md · warning
default · md · default
Hover, focus or press this sample (hover, focus-visible)

Dark

Variant / sizesmmdlgicon
default
default · sm · default
default · md · default
default · lg · default
default · icon · default
secondary
secondary · sm · default
secondary · md · default
secondary · lg · default
secondary · icon · default
outline
outline · sm · default
outline · md · default
outline · lg · default
outline · icon · default
ghost
ghost · sm · default
ghost · md · default
ghost · lg · default
ghost · icon · default
destructive
destructive · sm · default
destructive · md · default
destructive · lg · default
destructive · icon · default
link
link · sm · default
link · md · default
link · lg · default
link · icon · default
default · md · default · disabled
default · md · default · disabled
default · md · default · loading
default · md · default · loading
default · md · destructive
default · md · destructive
default · md · success
default · md · success
default · md · warning
default · md · warning
default · md · default
Hover, focus or press this sample (hover, focus-visible)
display (1)

Card card

Light

elevated
elevated
flat
flat
elevated
Hover, focus or press this sample (hover, focus-visible)

Dark

elevated
elevated
flat
flat
elevated
Hover, focus or press this sample (hover, focus-visible)
forms (1)

Input input

Light

Variant / sizecontrolxssmmdlgxl2xl3xl4xldisplay
default
default · control
default · xs
default · sm
default · md
default · lg
default · xl
default · 2xl
default · 3xl
default · 4xl
default · display
plain
plain · control
plain · xs
plain · sm
plain · md
plain · lg
plain · xl
plain · 2xl
plain · 3xl
plain · 4xl
plain · display
default · control · disabled
default · control · disabled
default · control · invalid
default · control · invalid
default · control · readonly
default · control · readonly
default · control
Hover, focus or press this sample (hover, focus-visible)

Dark

Variant / sizecontrolxssmmdlgxl2xl3xl4xldisplay
default
default · control
default · xs
default · sm
default · md
default · lg
default · xl
default · 2xl
default · 3xl
default · 4xl
default · display
plain
plain · control
plain · xs
plain · sm
plain · md
plain · lg
plain · xl
plain · 2xl
plain · 3xl
plain · 4xl
plain · display
default · control · disabled
default · control · disabled
default · control · invalid
default · control · invalid
default · control · readonly
default · control · readonly
default · control
Hover, focus or press this sample (hover, focus-visible)

Not in this design system (196)

  • accordion
  • action-form
  • alert
  • alert-dialog
  • analytics-grid
  • app-nav
  • avatar
  • avatar-group-grid
  • badge
  • banner
  • blocks-code
  • blocks-data
  • blocks-diagram
  • blocks-embed
  • blocks-interactive
  • blocks-map
  • blocks-media
  • blocks-structure
  • blocks-text
  • bottom-nav
  • box
  • breadcrumb
  • button-group
  • callout
  • canvas
  • carousel
  • charts-area
  • charts-bar
  • charts-bubble
  • charts-bullet
  • charts-canvas-renderer
  • charts-cartesian
  • charts-combo
  • charts-donut
  • charts-funnel
  • charts-gauge
  • charts-geo-map
  • charts-geo-point-map
  • charts-heatmap
  • charts-line
  • charts-network
  • charts-pie
  • charts-progress-ring
  • charts-sankey
  • charts-scatter
  • charts-sparkline
  • charts-stacked-bar
  • charts-sunburst
  • charts-treemap
  • chat-message
  • chat-thread
  • checkbox
  • chip
  • code
  • code-field
  • color-swatch
  • combobox
  • command-palette
  • composer
  • content-layout
  • context-menu
  • context-menu-trigger
  • control-choice
  • control-filter
  • control-slider
  • control-toggle
  • data-board
  • data-calendar
  • data-cohort-table
  • data-dashboard
  • data-dashboard-widget
  • data-files
  • data-filter-builder
  • data-grid
  • data-map
  • data-notification-inbox
  • data-timeline
  • data-tree-view
  • data-virtual-list
  • deck-slide
  • description
  • detail-panel
  • dialog
  • document
  • drawer
  • dropdown-menu
  • dropdown-menu-content
  • dropdown-menu-item
  • dropdown-menu-trigger
  • empty-state
  • error-state
  • field
  • field-error
  • file-upload
  • flow-action
  • flow-view
  • form
  • form-field
  • form-submit
  • heading
  • host-region
  • hover-card
  • hover-card-content
  • icon
  • icon-button
  • inline-text
  • input-group
  • kbd
  • kpi
  • label
  • layout-auth-split
  • layout-blog
  • layout-card
  • layout-chrome
  • layout-dashboard-grid
  • layout-deck
  • layout-doc
  • layout-docs
  • layout-drawer
  • layout-dual-sidebar
  • layout-editorial
  • layout-grid
  • layout-host
  • layout-landing
  • layout-marketing
  • layout-page
  • layout-pricing
  • layout-row
  • layout-settings
  • layout-sidebar
  • layout-split
  • layout-stack
  • layout-tile
  • layout-top-nav
  • layout-wizard
  • link
  • list
  • list-item
  • mark
  • media-composition-canvas
  • media-composition-svg
  • media-image
  • menubar
  • menubar-trigger
  • mobile-app-frame
  • mobile-header
  • multi-select
  • nav-icon
  • navigation-menu
  • number-field
  • pagination
  • pin-input
  • popover
  • popover-content
  • progress
  • prose
  • radio
  • radio-group
  • rating
  • responsive-modal
  • schema-form
  • screen-outlet
  • select
  • select-content
  • select-group
  • select-item
  • select-label
  • select-portal
  • select-separator
  • select-trigger
  • select-value
  • select-viewport
  • separator
  • sheet
  • sidebar
  • skeleton
  • sortable-list
  • spinner
  • split-view
  • spreadsheet
  • stat
  • stepper
  • switch
  • table
  • tabs
  • tag
  • tags-input
  • text
  • text-counter
  • textarea
  • time-field
  • timeline
  • toaster
  • toggle-group
  • tooltip
  • workflow-graph

Library

KPI strip0.1.0

Not approved

Id
kpi-strip
Purpose
A row of figures for the day's ledger.
Status
draft
Composes
  • card (allowed)
  • button (allowed)

Preview supplied by the consumer: the code lives in the consumer design-systems folder.