Files
once-campfire/app/assets/stylesheets/buttons.css
Jason Zimdars 6f256f5f2d Show admin toggle, but disable for current user
You shouldn't be able to demote yourself but displaying the disabled
toggle helps explain the group of admins at the top of the list. Builds
upon #140
2025-12-08 22:53:11 -06:00

208 lines
3.8 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);
}
}
}
&:has(input[type=checkbox][disabled]) {
cursor: not-allowed;
filter: grayscale(100%) contrast(0.5);
opacity: 0.5;
pointer-events: none;
}
[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;
}
}