# Webcore button

Retro OS push button with a hard drop shadow; pink, lilac, grey or double\-ruled default\.

- Kind: element
- Category: misc
- Default background: light
- Use when: Actions on Y2K and webcore pages: ok, cancel, enter site, sign the guestbook\.
- Avoid when: Dense toolbars, or icon\-only actions where a square key fits better\.
- Requires: Use disabled \(or aria\-disabled="true" on links\) for the unavailable state\.
- Kit: [Webcore](https://thuvien.org/ui/kits/webcore.md)
- Credit: [Luna UI](https://thuvien.org/ui)
- License: MIT

## Variants

Add one variant class next to the root element's class.

- [Pink](https://thuvien.org/ui/elements/webcore-button?variant=pink): default, no extra class
- [Default](https://thuvien.org/ui/elements/webcore-button?variant=default): `tv-webcore-button--default`
- [Lilac](https://thuvien.org/ui/elements/webcore-button?variant=lilac): `tv-webcore-button--lilac`
- [Grey](https://thuvien.org/ui/elements/webcore-button?variant=grey): `tv-webcore-button--grey`

## HTML

```html
<button class="tv-webcore-button" type="button">enter site</button>
```

## CSS

```css
/* A retro OS push button. The fill lightens on hover and the button sinks into its shadow when pressed. */
.tv-webcore-button {
  --tv-webcore-button-face: var(--tv-webcore-pink, #f7b5e4);
  --tv-webcore-button-fill: var(--tv-webcore-button-face, #f7b5e4);
  box-sizing: border-box;
  min-width: 6.5rem;
  min-height: 2.5rem;
  padding: 4px 16px;
  border: 1px solid var(--tv-webcore-navy, #2c2b9f);
  background: var(--tv-webcore-button-fill, #f7b5e4);
  color: var(--tv-webcore-navy, #2c2b9f);
  font: 14px/1.2 "Lucida Console", "Courier New", ui-monospace, monospace;
  letter-spacing: 0.06em;
  text-decoration: none;
  cursor: pointer;
  box-shadow: 3px 3px 0 color-mix(in srgb, var(--tv-webcore-navy, #2c2b9f) 35%, transparent);
}

.tv-webcore-button:hover {
  --tv-webcore-button-fill: color-mix(in srgb, var(--tv-webcore-button-face, #f7b5e4) 60%, var(--tv-webcore-paper, #ffffff));
}

.tv-webcore-button:active {
  box-shadow: none;
  transform: translate(3px, 3px);
}

.tv-webcore-button:focus-visible {
  outline: 2px dashed var(--tv-webcore-navy, #2c2b9f);
  outline-offset: 4px;
}

.tv-webcore-button:disabled,
.tv-webcore-button[aria-disabled="true"] {
  --tv-webcore-button-fill: var(--tv-webcore-grey, #d9d9e5);
  border-style: dashed;
  color: color-mix(in srgb, var(--tv-webcore-navy, #2c2b9f) 55%, var(--tv-webcore-grey, #d9d9e5));
  cursor: not-allowed;
  box-shadow: none;
  transform: none;
}

/* Default: an inner rule marks the button that Enter presses. */
.tv-webcore-button--default {
  box-shadow: inset 0 0 0 3px var(--tv-webcore-button-fill, #f7b5e4), inset 0 0 0 4px var(--tv-webcore-navy, #2c2b9f), 3px 3px 0 color-mix(in srgb, var(--tv-webcore-navy, #2c2b9f) 35%, transparent);
}

.tv-webcore-button--default:active {
  box-shadow: inset 0 0 0 3px var(--tv-webcore-button-fill, #f7b5e4), inset 0 0 0 4px var(--tv-webcore-navy, #2c2b9f);
}

.tv-webcore-button--lilac {
  --tv-webcore-button-face: var(--tv-webcore-lilac, #a49bf3);
}

.tv-webcore-button--grey {
  --tv-webcore-button-face: var(--tv-webcore-grey, #d9d9e5);
}
```
