UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

99 lines (89 loc) 3.12 kB
@import "../style/base.css"; @layer components { .button { /* Identity — rebind all five steps so per-component theme hooks (`--button-color-vivid`, etc.) * override the cascaded scale while still inheriting from variant/page scope by default. */ --color-black: var(--button-color-black, inherit); --color-dark: var(--button-color-dark, inherit); --color-vivid: var(--button-color-vivid, inherit); --color-light: var(--button-color-light, inherit); --color-white: var(--button-color-white, inherit); /* Box */ box-sizing: border-box; inline-size: 100%; max-inline-size: 100%; border-radius: var(--button-radius, var(--radius-xsmall)); border: var(--button-border, var(--stroke-normal)) solid color-mix(in oklch, var(--color-vivid) 50%, transparent); padding-block: var(--button-padding, var(--space-small)); padding-inline: var(--button-padding, var(--space-small)); margin-inline: 0; margin-block: var(--button-spacing, var(--space-small)); flex-grow: var(--grow-timid); /* Inputs in flex rows expand timidly compared to other elements. */ /* Content */ white-space: nowrap; overflow: hidden; word-break: normal; justify-content: center; align-items: center; /* Style — default appearance is `bg=light / text=dark` (2-step pair, fine for short labels). */ background-color: var(--color-light); color: var(--color-vivid); text-decoration: none; transition: all 120ms ease-in-out; cursor: pointer; outline: var(--button-focus-border, var(--stroke-focus)) solid transparent; outline-offset: calc(0px - var(--button-border, var(--stroke-normal))); /* Typography */ font-family: var(--button-font, var(--font-body)); font-weight: var(--button-weight, var(--weight-strong)); font-size: var(--button-size, var(--size-normal)); line-height: var(--button-leading, var(--leading-normal)); /* Pseudo-classes */ &:disabled, &:where(a:not(:any-link)) { opacity: var(--button-disabled-opacity, 0.5); cursor: default; } &:where(:enabled:hover, :focus:not(:focus-visible)) { background: color-mix(in oklch, var(--color-light) 85%, var(--color-white)); border-color: var(--color-vivid); } &:focus-visible { outline-color: var(--button-color-focus, var(--color-focus)); } /* Variants */ &.small { padding-block: var(--button-small-padding, var(--space-xxsmall)); padding-inline: var(--button-small-padding, var(--space-xxsmall)); } &.fit { inline-size: fit-content; } &.strong { /* Strong appearance — `bg=vivid / text=white` (2-step pair). */ background: var(--color-vivid); border-color: var(--color-vivid); color: var(--color-white); &:where(:enabled:hover, :focus:not(:focus-visible)) { background: color-mix(in oklch, var(--color-vivid) 85%, var(--color-white)); } } &.plain:not(:hover, :focus) { border-color: transparent; background: transparent; } &.outline:not(:hover, :focus) { background: transparent; } } } @layer overrides { .button { &:first-child { margin-block-start: 0; } &:last-child { margin-block-end: 0; } } }