@spectrum-web-components/styles
Version:
Spectrum Web Components are a [`LitElement`](https://lit-element.polymer-project.org)-powered web component library implementing Adobe's Spectrum design system. This package defines the CSS custom properties that implement design tokens from [Spectrum Tok
311 lines (282 loc) • 20.7 kB
CSS
/**
* Copyright 2026 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
/* Links as buttons do not support:
* - selected
* - disabled
* - hold affordance
*/
/* Base defaults and host layout */
.spectrum-ActionButton,
::slotted(.spectrum-ActionButton) {
--spectrum-actionbutton-background-color-default: var(--system-action-button-background-color-default);
--spectrum-actionbutton-background-color-hover: var(--system-action-button-background-color-hover);
--spectrum-actionbutton-background-color-down: var(--system-action-button-background-color-down);
--spectrum-actionbutton-background-color-focus: var(--system-action-button-background-color-focus);
--spectrum-actionbutton-border-color-default: var(--system-action-button-border-color-default);
--spectrum-actionbutton-border-color-hover: var(--system-action-button-border-color-hover);
--spectrum-actionbutton-border-color-down: var(--system-action-button-border-color-down);
--spectrum-actionbutton-border-color-focus: var(--system-action-button-border-color-focus);
--spectrum-actionbutton-border-radius-default: var(--system-action-button-size-m-border-radius-default);
--spectrum-actionbutton-background-color: var(--highcontrast-actionbutton-background-color, var(--mod-actionbutton-background-color-default, var(--spectrum-actionbutton-background-color-default)));
--spectrum-actionbutton-border-color: var(--highcontrast-actionbutton-border-color, var(--mod-actionbutton-border-color-default, var(--spectrum-actionbutton-border-color-default)));
--spectrum-actionbutton-content-color: var(--highcontrast-actionbutton-content-color, var(--mod-actionbutton-content-color-default, var(--spectrum-neutral-content-color-default)));
--spectrum-actionbutton-border-radius: var(--mod-actionbutton-border-radius, var(--spectrum-actionbutton-border-radius-default));
--spectrum-actionbutton-border-width: var(--mod-actionbutton-border-width, var(--spectrum-border-width-100));
--spectrum-actionbutton-focus-indicator-gap: var(--mod-actionbutton-focus-indicator-gap, var(--spectrum-focus-indicator-gap));
--spectrum-actionbutton-focus-indicator-thickness: var(--mod-actionbutton-focus-indicator-thickness, var(--spectrum-focus-indicator-thickness));
--spectrum-actionbutton-focus-indicator-color: var(--highcontrast-actionbutton-focus-indicator-color, var(--mod-actionbutton-focus-indicator-color, var(--spectrum-focus-indicator-color)));
--spectrum-actionbutton-sized-height: var(--spectrum-component-height-100);
--spectrum-actionbutton-sized-icon-size: var(--spectrum-workflow-icon-size-100);
--spectrum-actionbutton-sized-font-size: var(--spectrum-font-size-100);
--spectrum-actionbutton-sized-text-to-visual: var(--spectrum-text-to-visual-100);
--spectrum-actionbutton-sized-edge-to-visual: var(--spectrum-component-edge-to-visual-100);
--spectrum-actionbutton-sized-edge-to-text: var(--spectrum-component-edge-to-text-100);
--spectrum-actionbutton-sized-edge-to-visual-only: var(--spectrum-component-edge-to-visual-only-100);
--spectrum-actionbutton-height: var(--mod-actionbutton-height, var(--spectrum-actionbutton-sized-height));
--spectrum-actionbutton-icon-size: var(--mod-actionbutton-icon-size, var(--spectrum-actionbutton-sized-icon-size));
--spectrum-actionbutton-font-size: var(--mod-actionbutton-font-size, var(--spectrum-actionbutton-sized-font-size));
--spectrum-actionbutton-text-to-visual: var(--mod-actionbutton-text-to-visual, var(--spectrum-actionbutton-sized-text-to-visual));
--spectrum-actionbutton-edge-to-visual: var(--mod-actionbutton-edge-to-visual, calc(var(--spectrum-actionbutton-sized-edge-to-visual) - var(--spectrum-actionbutton-border-width)));
--spectrum-actionbutton-edge-to-text: var(--mod-actionbutton-edge-to-text, calc(var(--spectrum-actionbutton-sized-edge-to-text) - var(--spectrum-actionbutton-border-width)));
--spectrum-actionbutton-edge-to-visual-only: var(--mod-actionbutton-edge-to-visual-only, calc(var(--spectrum-actionbutton-sized-edge-to-visual-only) - var(--spectrum-actionbutton-border-width)));
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
box-sizing: border-box;
display: inline-flex;
position: relative;
gap: calc(var(--spectrum-actionbutton-text-to-visual) + var(--spectrum-actionbutton-edge-to-text) - var(--spectrum-actionbutton-edge-to-visual-only));
align-items: center;
justify-content: center;
min-inline-size: var(--mod-actionbutton-min-width, calc(var(--mod-actionbutton-edge-to-visual-only, var(--spectrum-actionbutton-sized-edge-to-visual-only)) * 2 + var(--spectrum-actionbutton-icon-size)));
block-size: var(--spectrum-actionbutton-height);
padding-inline: var(--spectrum-actionbutton-edge-to-text);
margin: 0;
font-family: var(--mod-button-font-family, var(--mod-sans-font-family-stack, var(--spectrum-sans-font-family-stack)));
font-size: var(--spectrum-actionbutton-font-size);
line-height: var(--mod-button-line-height, var(--mod-line-height-100, var(--spectrum-line-height-100)));
vertical-align: top;
color: var(--spectrum-actionbutton-content-color);
text-transform: none;
-webkit-text-decoration: none;
text-decoration: none;
background-color: var(--spectrum-actionbutton-background-color);
border-color: var(--spectrum-actionbutton-border-color);
border-style: solid;
border-width: var(--spectrum-actionbutton-border-width);
border-radius: var(--spectrum-actionbutton-border-radius);
overflow: visible;
-webkit-appearance: button;
cursor: pointer;
-webkit-user-select: none;
user-select: none;
transition:
background var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100))) ease-out,
border-color var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100))) ease-out,
color var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100))) ease-out,
box-shadow var(--mod-button-animation-duration, var(--mod-animation-duration-100, var(--spectrum-animation-duration-100))) ease-out;
}
/* Size variants */
.spectrum-ActionButton--sizeXS,
::slotted(.spectrum-ActionButton--sizeXS) {
--spectrum-actionbutton-sized-height: var(--spectrum-component-height-50);
--spectrum-actionbutton-sized-icon-size: var(--spectrum-workflow-icon-size-50);
--spectrum-actionbutton-sized-font-size: var(--spectrum-font-size-50);
--spectrum-actionbutton-sized-text-to-visual: var(--spectrum-text-to-visual-50);
--spectrum-actionbutton-sized-edge-to-visual: var(--spectrum-component-edge-to-visual-50);
--spectrum-actionbutton-sized-edge-to-text: var(--spectrum-component-edge-to-text-50);
--spectrum-actionbutton-sized-edge-to-visual-only: var(--spectrum-component-edge-to-visual-only-50);
--spectrum-actionbutton-edge-to-visual-only: calc(var(--spectrum-component-edge-to-visual-only-50) - var(--spectrum-actionbutton-border-width));
--spectrum-actionbutton-border-radius-default: var(--system-action-button-size-xs-border-radius-default);
min-width: var(--spectrum-actionbutton-height, 0);
}
.spectrum-ActionButton--sizeS,
::slotted(.spectrum-ActionButton--sizeS) {
--spectrum-actionbutton-sized-height: var(--spectrum-component-height-75);
--spectrum-actionbutton-sized-icon-size: var(--spectrum-workflow-icon-size-75);
--spectrum-actionbutton-sized-font-size: var(--spectrum-font-size-75);
--spectrum-actionbutton-sized-text-to-visual: var(--spectrum-text-to-visual-75);
--spectrum-actionbutton-sized-edge-to-visual: var(--spectrum-component-edge-to-visual-75);
--spectrum-actionbutton-sized-edge-to-text: var(--spectrum-component-edge-to-text-75);
--spectrum-actionbutton-sized-edge-to-visual-only: var(--spectrum-component-edge-to-visual-only-75);
--spectrum-actionbutton-edge-to-visual-only: calc(var(--spectrum-component-edge-to-visual-only-75) - var(--spectrum-actionbutton-border-width));
--spectrum-actionbutton-border-radius-default: var(--system-action-button-size-s-border-radius-default);
}
.spectrum-ActionButton--sizeM,
::slotted(.spectrum-ActionButton--sizeM) {
--spectrum-actionbutton-edge-to-visual-only: calc(var(--spectrum-component-edge-to-visual-only-100) - var(--spectrum-actionbutton-border-width));
}
.spectrum-ActionButton--sizeL,
::slotted(.spectrum-ActionButton--sizeL) {
--spectrum-actionbutton-sized-height: var(--spectrum-component-height-200);
--spectrum-actionbutton-sized-icon-size: var(--spectrum-workflow-icon-size-200);
--spectrum-actionbutton-sized-font-size: var(--spectrum-font-size-200);
--spectrum-actionbutton-sized-text-to-visual: var(--spectrum-text-to-visual-200);
--spectrum-actionbutton-sized-edge-to-visual: var(--spectrum-component-edge-to-visual-200);
--spectrum-actionbutton-sized-edge-to-text: var(--spectrum-component-edge-to-text-200);
--spectrum-actionbutton-sized-edge-to-visual-only: var(--spectrum-component-edge-to-visual-only-200);
--spectrum-actionbutton-edge-to-visual-only: calc(var(--spectrum-component-edge-to-visual-only-200) - var(--spectrum-actionbutton-border-width));
--spectrum-actionbutton-border-radius-default: var(--system-action-button-size-l-border-radius-default);
}
.spectrum-ActionButton--sizeXL,
::slotted(.spectrum-ActionButton--sizeXL) {
--spectrum-actionbutton-sized-height: var(--spectrum-component-height-300);
--spectrum-actionbutton-sized-icon-size: var(--spectrum-workflow-icon-size-300);
--spectrum-actionbutton-sized-font-size: var(--spectrum-font-size-300);
--spectrum-actionbutton-sized-text-to-visual: var(--spectrum-text-to-visual-300);
--spectrum-actionbutton-sized-edge-to-visual: var(--spectrum-component-edge-to-visual-300);
--spectrum-actionbutton-sized-edge-to-text: var(--spectrum-component-edge-to-text-300);
--spectrum-actionbutton-sized-edge-to-visual-only: var(--spectrum-component-edge-to-visual-only-300);
--spectrum-actionbutton-edge-to-visual-only: calc(var(--spectrum-component-edge-to-visual-only-300) - var(--spectrum-actionbutton-border-width));
--spectrum-actionbutton-border-radius-default: var(--system-action-button-size-xl-border-radius-default);
}
/* Variant tokens */
.spectrum-ActionButton--quiet,
::slotted(.spectrum-ActionButton--quiet) {
--spectrum-actionbutton-border-color: transparent;
--spectrum-actionbutton-background-color-default: var(--system-action-button-quiet-background-color-default);
--spectrum-actionbutton-background-color-hover: var(--system-action-button-quiet-background-color-hover);
--spectrum-actionbutton-background-color-down: var(--system-action-button-quiet-background-color-down);
--spectrum-actionbutton-background-color-focus: var(--system-action-button-quiet-background-color-focus);
}
.spectrum-ActionButton--staticBlack,
::slotted(.spectrum-ActionButton--staticBlack) {
--mod-actionbutton-content-color-default: var(--spectrum-actionbutton-static-black-content-color-default, var(--spectrum-black));
--mod-actionbutton-content-color-hover: var(--spectrum-actionbutton-static-black-content-color-hover, var(--spectrum-black));
--mod-actionbutton-content-color-down: var(--spectrum-actionbutton-static-black-content-color-down, var(--spectrum-black));
--mod-actionbutton-content-color-focus: var(--spectrum-actionbutton-static-black-content-color-focus, var(--spectrum-black));
--mod-actionbutton-focus-indicator-color: var(--spectrum-static-black-focus-indicator-color);
--spectrum-actionbutton-border-color-default: var(--system-action-button-static-black-border-color-default);
--spectrum-actionbutton-border-color-hover: var(--system-action-button-static-black-border-color-hover);
--spectrum-actionbutton-border-color-down: var(--system-action-button-static-black-border-color-down);
--spectrum-actionbutton-border-color-focus: var(--system-action-button-static-black-border-color-focus);
--spectrum-actionbutton-background-color-default: var(--system-action-button-static-black-background-color-default);
--spectrum-actionbutton-background-color-hover: var(--system-action-button-static-black-background-color-hover);
--spectrum-actionbutton-background-color-down: var(--system-action-button-static-black-background-color-down);
--spectrum-actionbutton-background-color-focus: var(--system-action-button-static-black-background-color-focus);
--spectrum-actionbutton-static-black-content-color-default: var(--system-action-button-static-black-content-color-default);
--spectrum-actionbutton-static-black-content-color-hover: var(--system-action-button-static-black-content-color-hover);
--spectrum-actionbutton-static-black-content-color-down: var(--system-action-button-static-black-content-color-down);
--spectrum-actionbutton-static-black-content-color-focus: var(--system-action-button-static-black-content-color-focus);
}
.spectrum-ActionButton--staticBlack.spectrum-ActionButton--quiet,
::slotted(.spectrum-ActionButton--staticBlack.spectrum-ActionButton--quiet) {
--spectrum-actionbutton-background-color-default: var(--system-action-button-static-black-quiet-background-color-default);
--spectrum-actionbutton-background-color-hover: var(--system-action-button-static-black-quiet-background-color-hover);
--spectrum-actionbutton-background-color-down: var(--system-action-button-static-black-quiet-background-color-down);
--spectrum-actionbutton-background-color-focus: var(--system-action-button-static-black-quiet-background-color-focus);
}
.spectrum-ActionButton--staticWhite,
::slotted(.spectrum-ActionButton--staticWhite) {
--mod-actionbutton-content-color-default: var(--spectrum-actionbutton-static-white-content-color-default, var(--spectrum-white));
--mod-actionbutton-content-color-hover: var(--spectrum-actionbutton-static-white-content-color-hover, var(--spectrum-white));
--mod-actionbutton-content-color-down: var(--spectrum-actionbutton-static-white-content-color-down, var(--spectrum-white));
--mod-actionbutton-content-color-focus: var(--spectrum-actionbutton-static-white-content-color-focus, var(--spectrum-white));
--mod-actionbutton-focus-indicator-color: var(--spectrum-static-white-focus-indicator-color);
--spectrum-actionbutton-border-color-default: var(--system-action-button-static-white-border-color-default);
--spectrum-actionbutton-border-color-hover: var(--system-action-button-static-white-border-color-hover);
--spectrum-actionbutton-border-color-down: var(--system-action-button-static-white-border-color-down);
--spectrum-actionbutton-border-color-focus: var(--system-action-button-static-white-border-color-focus);
--spectrum-actionbutton-background-color-default: var(--system-action-button-static-white-background-color-default);
--spectrum-actionbutton-background-color-hover: var(--system-action-button-static-white-background-color-hover);
--spectrum-actionbutton-background-color-down: var(--system-action-button-static-white-background-color-down);
--spectrum-actionbutton-background-color-focus: var(--system-action-button-static-white-background-color-focus);
--spectrum-actionbutton-static-white-content-color-default: var(--system-action-button-static-white-content-color-default);
--spectrum-actionbutton-static-white-content-color-hover: var(--system-action-button-static-white-content-color-hover);
--spectrum-actionbutton-static-white-content-color-down: var(--system-action-button-static-white-content-color-down);
--spectrum-actionbutton-static-white-content-color-focus: var(--system-action-button-static-white-content-color-focus);
}
.spectrum-ActionButton--staticWhite.spectrum-ActionButton--quiet,
::slotted(.spectrum-ActionButton--staticWhite.spectrum-ActionButton--quiet) {
--spectrum-actionbutton-background-color-default: var(--system-action-button-static-white-quiet-background-color-default);
--spectrum-actionbutton-background-color-hover: var(--system-action-button-static-white-quiet-background-color-hover);
--spectrum-actionbutton-background-color-down: var(--system-action-button-static-white-quiet-background-color-down);
--spectrum-actionbutton-background-color-focus: var(--system-action-button-static-white-quiet-background-color-focus);
}
/* Interactive state tokens */
@media (hover: hover) {
.spectrum-ActionButton:hover,
::slotted(.spectrum-ActionButton:hover) {
--mod-actionbutton-background-color-default: var(--mod-actionbutton-background-color-hover, var(--spectrum-actionbutton-background-color-hover));
--mod-actionbutton-border-color-default: var(--mod-actionbutton-border-color-hover, var(--spectrum-actionbutton-border-color-hover));
--mod-actionbutton-content-color-default: var(--mod-actionbutton-content-color-hover, var(--spectrum-neutral-content-color-hover));
}
}
.spectrum-ActionButton:focus-visible,
::slotted(.spectrum-ActionButton:focus-visible) {
--mod-actionbutton-background-color-default: var(--mod-actionbutton-background-color-focus, var(--spectrum-actionbutton-background-color-focus));
--mod-actionbutton-border-color-default: var(--mod-actionbutton-border-color-focus, var(--spectrum-actionbutton-border-color-focus));
--mod-actionbutton-content-color-default: var(--mod-actionbutton-content-color-focus, var(--spectrum-neutral-content-color-key-focus));
box-shadow: none;
outline: none;
}
.spectrum-ActionButton:active,
::slotted(.spectrum-ActionButton:active) {
--mod-actionbutton-background-color-default: var(--mod-actionbutton-background-color-down, var(--spectrum-actionbutton-background-color-down));
--mod-actionbutton-border-color-default: var(--mod-actionbutton-border-color-down, var(--spectrum-actionbutton-border-color-down));
--mod-actionbutton-content-color-default: var(--mod-actionbutton-content-color-down, var(--spectrum-neutral-content-color-down));
}
/* Directionality and structural elements */
.spectrum-ActionButton:dir(rtl),
::slotted(.spectrum-ActionButton:dir(rtl)) {
--spectrum-logical-rotation: matrix(-1, 0, 0, 1, 0, 0);
}
.spectrum-ActionButton:focus,
::slotted(.spectrum-ActionButton:focus) {
outline: none;
}
.spectrum-ActionButton::after {
position: absolute;
inset: 0;
margin: calc((var(--spectrum-actionbutton-focus-indicator-gap) + var(--spectrum-actionbutton-border-width)) * -1);
border-radius: var(--mod-actionbutton-focus-indicator-border-radius, calc(var(--spectrum-actionbutton-border-radius) + var(--spectrum-actionbutton-focus-indicator-gap)));
pointer-events: none;
content: "";
transition: box-shadow var(--mod-actionbutton-animation-duration, var(--spectrum-animation-duration-100)) ease-in-out;
}
.spectrum-ActionButton:focus-visible::after {
box-shadow: 0 0 0 var(--spectrum-actionbutton-focus-indicator-thickness) var(--spectrum-actionbutton-focus-indicator-color);
}
.spectrum-ActionButton :is([slot="icon"], svg, img) {
flex-shrink: 0;
inline-size: var(--spectrum-actionbutton-icon-size);
block-size: var(--spectrum-actionbutton-icon-size);
max-block-size: 100%;
margin-inline-start: calc(var(--spectrum-actionbutton-edge-to-visual) - var(--spectrum-actionbutton-edge-to-text));
margin-inline-end: calc(var(--spectrum-actionbutton-edge-to-visual-only) - var(--spectrum-actionbutton-edge-to-text));
color: inherit;
}
.spectrum-ActionButton--iconOnly :is([slot="icon"], svg, img) {
margin-inline-start: calc(var(--spectrum-actionbutton-edge-to-visual-only) - var(--spectrum-actionbutton-edge-to-text));
}
.spectrum-ActionButton-label {
flex-grow: var(--spectrum-actionbutton-label-flex-grow);
place-self: center;
font-size: var(--spectrum-actionbutton-font-size);
line-height: var(--spectrum-actionbutton-height);
color: var(--mod-actionbutton-label-color, inherit);
text-align: var(--spectrum-actionbutton-label-text-align);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
pointer-events: none ;
}
/* Forced colors */
@media (forced-colors: active) {
.spectrum-ActionButton,
::slotted(.spectrum-ActionButton) {
--highcontrast-actionbutton-focus-indicator-color: ButtonText;
--highcontrast-actionbutton-content-color: ButtonText;
}
.spectrum-ActionButton::after {
forced-color-adjust: none;
}
}