@use 'sass:color'; @use 'tokens'; /* * Button mixin - creates a primary button effect. * Uses CSS custom properties for theme color support across color schemes. */ @mixin button( $button-text-color: #fff ) { background: var(--wp-admin-theme-color); border-color: transparent; border-radius: tokens.$radius-s; color: $button-text-color; &:hover { background: var(--wp-admin-theme-color-darker-10); border-color: transparent; color: $button-text-color; } &:focus { background: var(--wp-admin-theme-color); border-color: transparent; color: $button-text-color; /* Gutenberg-style focus ring: outer theme color + inset white for contrast */ box-shadow: 0 0 0 var(--wp-admin-border-width-focus, 1.5px) var(--wp-admin-theme-color), inset 0 0 0 1px tokens.$white; /* Visible in Windows High Contrast mode */ outline: 1px solid transparent; } &:active { background: var(--wp-admin-theme-color-darker-20); border-color: transparent; color: $button-text-color; } &:disabled, &.disabled { background: tokens.$gray-100; border-color: transparent; color: tokens.$gray-600; cursor: not-allowed; } &.active, &.active:focus, &.active:hover { background: var(--wp-admin-theme-color-darker-10); color: $button-text-color; border-color: transparent; box-shadow: none; } } /* * Secondary button mixin - outlined style with theme color. * Matches Gutenberg's .is-secondary button variant. */ @mixin button-secondary() { background: transparent; border: 1px solid var(--wp-admin-theme-color); border-radius: tokens.$radius-s; color: var(--wp-admin-theme-color); &:hover { background: rgba(var(--wp-admin-theme-color--rgb), 0.04); border-color: var(--wp-admin-theme-color-darker-20); color: var(--wp-admin-theme-color-darker-20); } &:focus { background: transparent; border-color: var(--wp-admin-theme-color); color: var(--wp-admin-theme-color); box-shadow: 0 0 0 var(--wp-admin-border-width-focus, 1.5px) var(--wp-admin-theme-color); outline: 1px solid transparent; } &:active { background: rgba(var(--wp-admin-theme-color--rgb), 0.08); border-color: var(--wp-admin-theme-color-darker-20); color: var(--wp-admin-theme-color-darker-20); box-shadow: none; } &:disabled, &.disabled { background: transparent; border-color: tokens.$gray-300; color: tokens.$gray-600; cursor: not-allowed; } } /* * Tertiary button mixin - transparent background, gray text. */ @mixin button-tertiary() { background: transparent; border: 1px solid tokens.$gray-600; border-radius: tokens.$radius-s; color: tokens.$gray-900; &:hover { background: rgba(0, 0, 0, 0.05); border-color: tokens.$gray-700; color: tokens.$gray-900; } &:focus { background: transparent; border-color: var(--wp-admin-theme-color); color: tokens.$gray-900; box-shadow: 0 0 0 var(--wp-admin-border-width-focus, 1.5px) var(--wp-admin-theme-color); outline: 1px solid transparent; } &:active { background: rgba(0, 0, 0, 0.1); border-color: tokens.$gray-700; color: tokens.$gray-900; } &:disabled, &.disabled { background: transparent; border-color: tokens.$gray-400; color: tokens.$gray-600; cursor: not-allowed; } }