Files
once-campfire/app/assets/stylesheets/inputs.css
Kevin McConnell df76a227dc Hello world
First open source release of Campfire 🎉
2025-08-21 09:31:59 +01:00

197 lines
4.0 KiB
CSS

/* Text inputs */
.input {
accent-color: var(--input-accent-color, var(--color-text));
background-color: var(--input-background, transparent);
border-radius: var(--input-border-radius, 0.5em);
border: var(--input-border-size, 1px) solid var(--input-border-color, var(--color-border-darker));
color: var(--input-color, var(--color-text));
font-size: max(16px, 1em);
inline-size: 100%;
padding: var(--input-padding, 0.5em 0.8em);
resize: none;
&[type="search"] {
&::-webkit-search-decoration,
&::-webkit-search-results-button,
&::-webkit-search-results-decoration {
display: none;
}
}
&:autofill,
&:-webkit-autofill,
&:-webkit-autofill:hover,
&:-webkit-autofill:focus {
-webkit-text-fill-color: var(--color-text);
-webkit-box-shadow: 0 0 0px 1000px var(--color-selected) inset;
}
&:where(:not(:active)):focus {
--input-border-color: var(--color-selected-dark);
--hover-color: var(--color-selected-dark);
--outline-size: 0;
filter: var(--hover-filter);
box-shadow: 0 0 0 var(--hover-size) var(--hover-color);
}
}
.input--transparent {
--input-border-color: currentColor;
--input-color: currentColor;
--input-background: transparent;
}
.input--invisible {
background-color: transparent;
block-size: 5px;
border: none;
inline-size: 5px;
opacity: 0.1;
&:focus {
outline: none;
}
}
.input--actor {
transition: box-shadow 150ms ease, outline-offset 150ms ease;
&:focus-within {
--input-border-color: var(--color-selected-dark);
--hover-color: var(--color-selected-dark);
--outline-size: 0;
filter: var(--hover-filter);
box-shadow: 0 0 0 var(--hover-size) var(--hover-color);
}
.input {
--input-padding: 0;
--input-border-radius: 0;
--input-background: transparent;
--input-border-size: 0;
--hover-size: 0;
--outline-size: 0;
--outline-color: transparent;
outline: 0;
}
&:has(.input:is(
:autofill,
:-webkit-autofill,
:-webkit-autofill:hover,
:-webkit-autofill:focus)) {
-webkit-text-fill-color: var(--color-text);
-webkit-box-shadow: 0 0 0px 1000px var(--color-selected) inset;
}
.btn:not(.avatar) {
margin-block: -0.4em;
&:last-child {
margin-inline-end: -0.7em;
}
}
.btn--reversed img {
inline-size: 1em;
}
}
.input--file {
input[type="file"] {
--hover-size: 0;
block-size: 100%;
border: 0;
border-radius: 50%;
inline-size: 100%;
overflow: clip;
padding: 0;
&::file-selector-button {
appearance: none;
cursor: pointer;
opacity: 0;
}
}
&:not(.avatar) {
img {
inline-size: 1.6em;
}
}
}
.input--code {
font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monaco, monospace;
white-space: pre-wrap !important;
word-wrap: break-word;
}
/* Switches */
.switch {
block-size: 1.75em;
display: inline-flex;
inline-size: 3em;
position: relative;
border-radius: 2em;
@media (any-hover: hover) {
&:where(:not(:active):hover) .switch__btn {
filter: brightness(0.7);
box-shadow: none;
}
}
&:focus-within .switch__btn {
--shadow-size: min(0.2em, 2px);
box-shadow:
0 0 0 var(--shadow-size) var(--color-bg),
0 0 0 calc(var(--shadow-size) * 2) var(--color-link);
}
}
.switch__input {
block-size: 0;
inline-size: 0;
opacity: 0.1;
}
.switch__btn {
background-color: var(--color-border-darker);
border-radius: 2em;
cursor: pointer;
inset: 0;
position: absolute;
transition: 150ms ease;
&::before {
background-color: var(--color-text-reversed);
block-size: 1.35em;
border-radius: 50%;
content: "";
inline-size: 1.35em;
inset-block-end: 0.2em;
inset-inline-start: 0.2em;
position: absolute;
transition: 150ms ease;
}
.switch__input:disabled + & {
background-color: var(--color-border-darker) !important;
cursor: not-allowed;
}
.switch__input:checked + & {
background-color: var(--color-text);
&::before {
transform: translateX(1.2em);
}
}
}