@patreon/studio
Version:
Patreon Studio Design System
377 lines (318 loc) • 13.5 kB
CSS
.root {
align-items: center;
background-color: var(--Button-backgroundColor);
border: var(--Button-border);
border-radius: var(--global-radius-md);
box-shadow: var(--Button-boxShadow);
box-sizing: border-box;
color: var(--Button-foregroundColor);
display: inline-flex;
justify-content: center;
outline-offset: 0;
padding: var(--Button-padding);
position: relative;
text-decoration: none;
transition: var(--global-transition-regular-easing) var(--global-transition-regular-duration);
}
.root:focus-visible {
background-color: var(--Button-focusColor, var(--Button-backgroundHoverColor));
}
.root:focus {
border: var(--Button-border);
}
.root:focus:not(:focus-visible) {
border: var(--Button-borderHover);
outline: none;
}
.root[aria-disabled='true'] {
opacity: var(--global-opacity-disabled);
}
.root.isActive:hover {
background-color: var(--Button-backgroundHoverColor);
border: var(--Button-borderHover);
box-shadow: var(--Button-boxShadowHover);
}
.root.isActive:active {
background-color: var(--Button-backgroundPressedColor);
border: var(--Button-borderPressed);
}
.root.isInactive {
cursor: not-allowed
}
.root.cornersPill {
border-radius: var(--global-radius-pill);
}
.root.hasDimensions {
max-height: var(--Button-dimension);
min-height: var(--Button-dimension);
}
.root.hasDimensions.variantIconOnly {
min-width: var(--Button-dimension);
}
/* Fluid */
.fluidSet { width: 100%; }
.fluidUnset { width: auto; width: initial; }
/* Themes */
.themePrimary.isFilled {
--Button-foregroundColor: var(--component-button-onAction-default);
--Button-backgroundColor: var(--component-button-action-default);
--Button-backgroundHoverColor: var(--component-button-action-hover);
--Button-backgroundPressedColor: var(--component-button-action-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
}
.themePrimary.isUnfilled {
--Button-foregroundColor: var(--global-primary-action-default);
--Button-backgroundColor: 'transparent';
--Button-backgroundHoverColor: var(--global-primary-muted-hover);
--Button-backgroundPressedColor: var(--global-primary-muted-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
--Button-focusColor: var(--global-primary-muted-default);
}
.themeSecondary.isFilled {
--Button-foregroundColor: var(--global-primary-onMuted-default);
--Button-backgroundColor: var(--global-secondary-action-default);
--Button-backgroundHoverColor: var(--global-secondary-action-hover);
--Button-backgroundPressedColor: var(--global-secondary-action-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
}
.themeSecondary.isUnfilled {
--Button-foregroundColor: var(--global-primary-onMuted-default);
--Button-backgroundColor: 'transparent';
--Button-backgroundHoverColor: var(--global-secondary-muted-hover);
--Button-backgroundPressedColor: var(--global-secondary-muted-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
--Button-focusColor: var(--global-secondary-muted-default);
}
.themeTertiary.isFilled {
--Button-foregroundColor: var(--global-content-regular-default);
--Button-backgroundColor: 'transparent';
--Button-backgroundHoverColor: 'transparent';
--Button-backgroundPressedColor: 'transparent';
--Button-border: var(--global-borderWidth-thin) solid var(--global-border-action-default);
--Button-borderHover: var(--global-borderWidth-thin) solid var(--global-border-action-hover);
--Button-borderPressed: var(--global-borderWidth-thin) solid var(--global-border-action-pressed);
}
.themeTertiary.isUnfilled {
--Button-foregroundColor: var(--global-content-muted-default);
--Button-backgroundColor: 'transparent';
--Button-backgroundHoverColor: var(--global-secondary-muted-hover);
--Button-backgroundPressedColor: var(--global-secondary-muted-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
--Button-focusColor: var(--global-secondary-muted-default);
}
.themeCritical.isFilled {
--Button-foregroundColor: var(--global-critical-onAction-default);
--Button-backgroundColor: var(--global-critical-action-default);
--Button-backgroundHoverColor: var(--global-critical-action-hover);
--Button-backgroundPressedColor: var(--global-critical-action-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
}
.themeCritical.isUnfilled {
--Button-foregroundColor: var(--global-critical-action-default);
--Button-backgroundColor: 'transparent';
--Button-backgroundHoverColor: var(--global-critical-muted-default);
--Button-backgroundPressedColor: var(--global-critical-muted-hover);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
}
.themeFloating.isFilled {
--Button-foregroundColor: var(--global-content-regular-default);
--Button-backgroundColor: var(--global-bg-elevated-default);
--Button-backgroundHoverColor: var(--global-bg-elevated-hover);
--Button-backgroundPressedColor: var(--global-bg-elevated-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
--Button-boxShadow: var(--global-boxShadow-mid);
}
.themeFloating.isUnfilled {
--Button-foregroundColor: var(--global-content-regular-default);
--Button-backgroundColor: 'transparent';
--Button-backgroundHoverColor: var(--global-bg-elevated-hover);
--Button-backgroundPressedColor: var(--global-bg-elevated-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
--Button-boxShadowHover: var(--global-boxShadow-mid);
}
.themeInsetWhite.isFilled {
--Button-foregroundColor: var(--global-constant-black-default);
--Button-backgroundColor: var(--global-constant-white-default);
--Button-backgroundHoverColor: var(--global-constant-white-hover);
--Button-backgroundPressedColor: var(--global-constant-white-pressed);
--Button-border: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-default);
--Button-borderHover: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-hover);
--Button-borderPressed: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-pressed);
}
.themeInsetWhite.isUnfilled {
--Button-foregroundColor: var(--global-constant-white-default);
--Button-backgroundColor: 'transparent';
--Button-backgroundHoverColor: var(--global-constant-blackSubtle-hover);
--Button-backgroundPressedColor: var(--global-constant-blackSubtle-pressed);
--Button-border: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-default);
--Button-borderHover: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-hover);
--Button-borderPressed: var(--global-borderWidth-thin) solid var(--global-constant-blackSubtle-pressed);
}
.themeInsetBlack.isFilled {
--Button-foregroundColor: var(--global-constant-white-default);
--Button-backgroundColor: var(--global-constant-blackMuted-default);
--Button-backgroundHoverColor: var(--global-constant-blackMuted-hover);
--Button-backgroundPressedColor: var(--global-constant-blackMuted-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
}
.themeInsetBlack.isUnfilled {
--Button-foregroundColor: var(--global-constant-white-default);
--Button-backgroundColor: 'transparent';
--Button-backgroundHoverColor: var(--global-constant-blackSubtle-hover);
--Button-backgroundPressedColor: var(--global-constant-blackSubtle-pressed);
--Button-border: var(--global-borderWidth-thin) solid transparent;
--Button-borderHover: var(--global-borderWidth-thin) solid transparent;
--Button-borderPressed: var(--global-borderWidth-thin) solid transparent;
}
/* Sizes */
.sizeXs {
--Button-dimension: 32px;
}
.sizeXs.variantLabelOnly,.sizeXs.variantLabelAndIcon,.sizeXs.variantDisclosureAndLabel,.sizeXs.variantIconAndDisclosureOnly,.sizeXs.variantIconLabelAndDisclosure {
--Button-padding: 0 8px;
}
.sizeSm {
--Button-dimension: 36px;
}
.sizeSm.variantLabelOnly { --Button-padding: 0 18px; }
.sizeSm.variantLabelAndIcon { --Button-padding: 0 18px 0 14px; }
.sizeSm.variantDisclosureAndLabel { --Button-padding: 0 14px 0 18px; }
.sizeSm.variantIconAndDisclosureOnly { --Button-padding: 0 8px; }
.sizeSm.variantIconLabelAndDisclosure { --Button-padding: 0 14px; }
.sizeMd {
--Button-dimension: 44px;
}
.sizeMd.variantLabelOnly { --Button-padding: 0 20px; }
.sizeMd.variantLabelAndIcon { --Button-padding: 0 20px 0 18px; }
.sizeMd.variantDisclosureAndLabel { --Button-padding: 0 18px 0 20px; }
.sizeMd.variantIconAndDisclosureOnly { --Button-padding: 0 10px; }
.sizeMd.variantIconLabelAndDisclosure { --Button-padding: 0 18px; }
.sizeLg {
--Button-dimension: 64px;
}
.sizeLg.variantLabelOnly { --Button-padding: 0 34px; }
.sizeLg.variantLabelAndIcon { --Button-padding: 0 34px 0 30px; }
.sizeLg.variantDisclosureAndLabel { --Button-padding: 0 30px 0 34px; }
.sizeLg.variantIconAndDisclosureOnly { --Button-padding: 0 20px; }
.sizeLg.variantIconLabelAndDisclosure { --Button-padding: 0 30px; }
/* Content container */
.contentContainer {
align-items: center;
-moz-column-gap: var(--global-space-x8);
column-gap: var(--global-space-x8);
display: flex;
justify-content: center;
margin: auto 0;
padding: 0;
visibility: visible;
}
.isLoading .contentContainer {
visibility: hidden;
}
.hasTextAlign .contentContainer {
width: 100%;
}
/* Label container */
.labelContainer {
align-items: center;
display: flex;
flex-direction: column;
height: 100%;
justify-content: center;
white-space: nowrap;
}
.hasTextAlign .labelContainer {
flex-grow: 1;
}
.textAlignLeft .labelContainer {
align-items: flex-start;
}
.textAlignRight .labelContainer {
align-items: flex-end;
}
/* Loading spinner */
.loadingWrapper {
align-items: center;
display: flex;
height: 100%;
justify-content: center;
left: 0;
position: absolute;
top: 0;
width: 100%;
z-index: 1;
}
@media (min-width: 588px) {
.fluidSetBreakpointSm { width: 100%;
}
.fluidUnsetBreakpointSm { width: auto; width: initial;
}
.sizeXs {
--Button-dimension: 28px;
}
.sizeSm {
--Button-dimension: 32px;
}
.sizeSm.variantLabelOnly { --Button-padding: 0 16px; }
.sizeSm.variantLabelAndIcon { --Button-padding: 0 16px 0 12px; }
.sizeSm.variantDisclosureAndLabel { --Button-padding: 0 12px 0 16px; }
.sizeSm.variantIconLabelAndDisclosure { --Button-padding: 0 12px; }
.sizeMd {
--Button-dimension: 40px;
}
.sizeMd.variantLabelAndIcon { --Button-padding: 0 20px 0 16px; }
.sizeMd.variantDisclosureAndLabel { --Button-padding: 0 16px 0 20px; }
.sizeMd.variantIconLabelAndDisclosure { --Button-padding: 0 16px; }
.sizeLg {
--Button-dimension: 52px;
}
.sizeLg.variantLabelOnly { --Button-padding: 0 24px; }
.sizeLg.variantLabelAndIcon { --Button-padding: 0 24px 0 20px; }
.sizeLg.variantDisclosureAndLabel { --Button-padding: 0 20px 0 24px; }
.sizeLg.variantIconAndDisclosureOnly { --Button-padding: 0 14px; }
.sizeLg.variantIconLabelAndDisclosure { --Button-padding: 0 20px; }
}
@media (min-width: 796px) {
.fluidSetBreakpointMd { width: 100%;
}
.fluidUnsetBreakpointMd { width: auto; width: initial;
}
}
@media (min-width: 978px) {
.fluidSetBreakpointLg { width: 100%;
}
.fluidUnsetBreakpointLg { width: auto; width: initial;
}
}
@media (min-width: 1280px) {
.fluidSetBreakpointXl { width: 100%;
}
.fluidUnsetBreakpointXl { width: auto; width: initial;
}
}
@media (min-width: 1440px) {
.fluidSetBreakpointXxl { width: 100%;
}
.fluidUnsetBreakpointXxl { width: auto; width: initial;
}
}