mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-03-14 14:15:16 +09:00
201 lines
3.7 KiB
CSS
201 lines
3.7 KiB
CSS
:root {
|
|
--btn-size: 2.65em;
|
|
}
|
|
|
|
.btn {
|
|
align-items: center;
|
|
background-color: var(--btn-background, var(--color-text-reversed));
|
|
border-radius: var(--btn-border-radius, 2em);
|
|
border: var(--btn-border-size, 1px) solid var(--btn-border-color, var(--color-border-darker));
|
|
color: var(--btn-color, var(--color-text));
|
|
cursor: pointer;
|
|
display: inline-flex;
|
|
font-weight: 600;
|
|
gap: 0.5em;
|
|
justify-content: center;
|
|
padding: var(--btn-padding, 0.5em 1.1em);
|
|
pointer-events: auto;
|
|
text-align: center;
|
|
|
|
img {
|
|
-webkit-touch-callout: none;
|
|
user-select: none;
|
|
}
|
|
|
|
/* Default icon styles */
|
|
&:where(:has(img):not(.avatar)) {
|
|
text-align: start;
|
|
|
|
img {
|
|
inline-size: 1.3em;
|
|
max-inline-size: unset;
|
|
}
|
|
|
|
img:not([class]) {
|
|
filter: invert(0);
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
filter: invert(100%);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Circle buttons */
|
|
&:where(:has(.for-screen-reader):has(img, figure)) {
|
|
--btn-border-radius: 50%;
|
|
--btn-padding: 0;
|
|
|
|
aspect-ratio: 1;
|
|
block-size: var(--btn-size);
|
|
display: grid;
|
|
inline-size: var(--btn-size);
|
|
place-items: center;
|
|
|
|
> * {
|
|
grid-area: 1/1;
|
|
}
|
|
}
|
|
|
|
&:where(.avatar) {
|
|
--btn-border-radius: var(--avatar-border-radius);
|
|
--btn-padding: 0;
|
|
--btn-border-size: 0;
|
|
--hover-size: 0;
|
|
|
|
justify-content: unset;
|
|
|
|
img {
|
|
inline-size: 100%;
|
|
}
|
|
|
|
@media (any-hover: hover) {
|
|
&:where(:not(:active):hover) {
|
|
filter: brightness(0.7);
|
|
}
|
|
}
|
|
}
|
|
|
|
&:where(summary) {
|
|
list-style: none;
|
|
|
|
&::marker,
|
|
&::-webkit-details-marker { display: none; }
|
|
}
|
|
|
|
img {
|
|
user-select: none;
|
|
-webkit-touch-callout: none;
|
|
}
|
|
|
|
[aria-busy] &:disabled {
|
|
position: relative;
|
|
|
|
> * {
|
|
visibility: hidden;
|
|
}
|
|
|
|
&::after {
|
|
--mask: no-repeat radial-gradient(#000 68%,#0000 71%);
|
|
--size: 1.25em;
|
|
|
|
-webkit-mask: var(--mask), var(--mask), var(--mask);
|
|
-webkit-mask-size: 28% 45%;
|
|
animation: submitting 1s infinite linear;
|
|
aspect-ratio: 8/5;
|
|
background: currentColor;
|
|
content: "";
|
|
inline-size: var(--size);
|
|
inset: 50%;
|
|
margin-block: calc((var(--size) / 3) * -1);
|
|
margin-inline: calc((var(--size) / 2) * -1);
|
|
position: absolute;
|
|
}
|
|
}
|
|
|
|
&:has(input:checked) {
|
|
--btn-background: var(--color-text);
|
|
--btn-color: var(--color-text-reversed);
|
|
|
|
img {
|
|
filter: invert(100%);
|
|
}
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
img {
|
|
filter: invert(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
[disabled] &[type=submit],
|
|
&[type=submit]:disabled {
|
|
cursor: not-allowed;
|
|
filter: grayscale(100%) contrast(0.5);
|
|
opacity: 0.5;
|
|
pointer-events: none;
|
|
}
|
|
}
|
|
|
|
/* Variants */
|
|
.btn--reversed {
|
|
--btn-background: var(--color-text);
|
|
--btn-color: var(--color-text-reversed);
|
|
}
|
|
|
|
.btn--negative {
|
|
--btn-background: var(--color-negative);
|
|
--btn-color: var(--color-text-reversed);
|
|
}
|
|
|
|
.btn--reversed,
|
|
.btn--negative {
|
|
--btn-border-color: transparent;
|
|
--hover-size: 0;
|
|
--hover-filter: brightness(0.7);
|
|
|
|
img:not(.avatar) {
|
|
filter: invert(100%);
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
filter: invert(0%);
|
|
}
|
|
}
|
|
}
|
|
|
|
.btn--success {
|
|
animation: success 1s ease-out;
|
|
|
|
img {
|
|
animation: zoom-fade 300ms ease-out;
|
|
}
|
|
}
|
|
|
|
.btn--faux {
|
|
--hover-filter: none;
|
|
|
|
box-shadow: none;
|
|
cursor: initial;
|
|
outline: 0;
|
|
}
|
|
|
|
.btn--borderless {
|
|
--btn-border-color: transparent;
|
|
}
|
|
|
|
.btn--plain {
|
|
--btn-background: transparent;
|
|
--btn-border-color: transparent;
|
|
--btn-padding: 0;
|
|
}
|
|
|
|
.btn--pulsing {
|
|
animation: pulsing-outline 2s infinite both;
|
|
outline: 0 solid var(--color-alert);
|
|
}
|
|
|
|
button {
|
|
@media (any-hover: hover) {
|
|
cursor: pointer;
|
|
}
|
|
}
|