2025-01-13 14:51:23 +02:00
|
|
|
/*
|
|
|
|
|
* Input boxes
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
input:disabled {
|
|
|
|
|
opacity: .33;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Text boxes */
|
|
|
|
|
|
|
|
|
|
input:not([type]),
|
|
|
|
|
input[type="text"],
|
|
|
|
|
input[type="number"],
|
2025-01-13 21:23:12 +02:00
|
|
|
input[type="password"],
|
2025-01-15 01:28:18 +02:00
|
|
|
textarea.form-control,
|
|
|
|
|
textarea {
|
2025-01-13 14:51:23 +02:00
|
|
|
outline: 3px solid transparent;
|
|
|
|
|
outline-offset: 6px;
|
2025-01-13 21:12:27 +02:00
|
|
|
border: unset;
|
|
|
|
|
background: var(--input-background-color);
|
|
|
|
|
color: var(--input-text-color);
|
2025-01-13 14:51:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input:not([type]):hover,
|
|
|
|
|
input[type="text"]:hover,
|
|
|
|
|
input[type="number"]:hover,
|
2025-01-13 21:23:12 +02:00
|
|
|
input[type="password"]:hover,
|
2025-01-15 01:28:18 +02:00
|
|
|
textarea.form-control:hover,
|
|
|
|
|
textarea:hover {
|
2025-01-13 21:12:27 +02:00
|
|
|
background: var(--input-hover-background);
|
|
|
|
|
color: var(--input-hover-color);
|
2025-01-13 14:51:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input:not([type]):focus,
|
|
|
|
|
input[type="text"]:focus,
|
|
|
|
|
input[type="number"]:focus,
|
2025-01-13 21:23:12 +02:00
|
|
|
input[type="password"]:focus,
|
2025-01-15 01:28:18 +02:00
|
|
|
textarea.form-control:focus,
|
|
|
|
|
textarea:focus {
|
2025-01-13 21:12:27 +02:00
|
|
|
box-shadow: unset;
|
2025-01-13 14:51:23 +02:00
|
|
|
outline: 3px solid var(--input-focus-outline-color);
|
|
|
|
|
outline-offset: 0;
|
2025-01-13 21:12:27 +02:00
|
|
|
background: var(--input-focus-background);
|
|
|
|
|
color: var(--input-focus-color);
|
2025-01-13 14:51:23 +02:00
|
|
|
transition: outline-color 50ms linear,
|
|
|
|
|
outline-offset 200ms ease-out;
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-13 21:23:12 +02:00
|
|
|
input::placeholder,
|
|
|
|
|
.form-control::placeholder {
|
2025-01-13 14:51:23 +02:00
|
|
|
--muted-text-color: var(--input-placeholder-color);
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-13 21:23:12 +02:00
|
|
|
input::selection,
|
|
|
|
|
.form-control::selection {
|
2025-01-13 14:51:23 +02:00
|
|
|
background: var(--input-selection-background);
|
|
|
|
|
color: var(--input-selection-text-color);
|
2025-01-13 21:45:56 +02:00
|
|
|
}
|
|
|
|
|
|
2025-01-14 01:30:31 +02:00
|
|
|
/* Input groups */
|
|
|
|
|
|
|
|
|
|
.input-group {
|
|
|
|
|
outline: 3px solid transparent;
|
|
|
|
|
outline-offset: 6px;
|
|
|
|
|
background: var(--input-background-color);
|
|
|
|
|
border-radius: 6px;
|
|
|
|
|
padding-right: 8px;
|
|
|
|
|
color: var(--quick-search-color);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.input-group:hover {
|
|
|
|
|
background: var(--input-hover-background);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.input-group:focus-within {
|
|
|
|
|
outline: 3px solid var(--input-focus-outline-color);
|
|
|
|
|
outline-offset: 0;
|
|
|
|
|
background: var(--input-focus-background);
|
|
|
|
|
transition: outline-color 50ms linear,
|
|
|
|
|
outline-offset 200ms ease-out;
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-13 21:45:56 +02:00
|
|
|
.input-group input
|
2025-01-14 01:30:31 +02:00
|
|
|
.input-group input:hover,
|
2025-01-13 21:45:56 +02:00
|
|
|
.input-group input:focus,
|
|
|
|
|
.input-group .form-control,
|
2025-01-14 01:30:31 +02:00
|
|
|
.input-group .form-control:hover,
|
2025-01-13 21:45:56 +02:00
|
|
|
.input-group .form-control:focus {
|
|
|
|
|
/* Ignore the focus outline for the inputs that are children of an input group */
|
|
|
|
|
outline: unset;
|
2025-01-14 01:30:31 +02:00
|
|
|
|
|
|
|
|
background: transparent;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.input-group button,
|
|
|
|
|
.input-group a {
|
|
|
|
|
display: flex;
|
|
|
|
|
--bs-border-width: 0;
|
|
|
|
|
--accented-background-color: transparent;
|
|
|
|
|
background: transparent;
|
|
|
|
|
padding: 0 4px;
|
|
|
|
|
|
2025-01-14 01:51:18 +02:00
|
|
|
/* Workaround to set the "color" property. */
|
2025-01-14 01:46:28 +02:00
|
|
|
--muted-text-color: var(--input-action-button-color);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.input-group button:hover,
|
|
|
|
|
.input-group a:hover {
|
|
|
|
|
--muted-text-color: var(--input-action-button-hover);
|
2025-01-14 01:30:31 +02:00
|
|
|
}
|
|
|
|
|
|
2025-01-14 02:12:26 +02:00
|
|
|
.input-group button:focus-visible,
|
|
|
|
|
.input-group a:focus-visible {
|
|
|
|
|
outline: transparent;
|
|
|
|
|
border: transparent;
|
|
|
|
|
text-shadow: 0 0 3px var(--input-action-button-hover);
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-14 01:30:31 +02:00
|
|
|
.input-group a.disabled {
|
|
|
|
|
opacity: .5;
|
2025-01-14 01:51:18 +02:00
|
|
|
/* Workaround to set the "background" property. */
|
|
|
|
|
--button-disabled-background-color: transparent;
|
2025-01-14 01:30:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.input-group .input-clearer-button {
|
|
|
|
|
background: transparent !important;
|
2025-01-14 21:40:05 +02:00
|
|
|
}
|
|
|
|
|
|
2025-01-15 02:11:17 +02:00
|
|
|
/* Combo box-like dropdown buttons */
|
2025-01-14 21:40:05 +02:00
|
|
|
|
2025-01-15 02:11:17 +02:00
|
|
|
.select-button.dropdown-toggle {
|
|
|
|
|
padding-right: 40px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.select-button.dropdown-toggle::after {
|
|
|
|
|
/* Remove the original arrow */
|
|
|
|
|
content: unset;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Combo boxes and combo box-like dropdown buttons */
|
|
|
|
|
|
|
|
|
|
select,
|
|
|
|
|
select.form-select,
|
|
|
|
|
.select-button.dropdown-toggle,
|
|
|
|
|
.select-button.dropdown-toggle.btn {
|
2025-01-14 21:40:05 +02:00
|
|
|
outline: 3px solid transparent;
|
|
|
|
|
outline-offset: 6px;
|
2025-01-14 22:10:06 +02:00
|
|
|
background: var(--input-background-color)
|
|
|
|
|
var(--select-arrow-svg) right 0.75rem center/15px 20px no-repeat;
|
2025-01-14 21:40:05 +02:00
|
|
|
color: var(--input-text-color);
|
|
|
|
|
border: unset;
|
2025-01-15 02:31:49 +02:00
|
|
|
border-radius: 0.375rem;
|
2025-01-14 21:40:05 +02:00
|
|
|
}
|
|
|
|
|
|
2025-01-15 02:11:17 +02:00
|
|
|
select:hover,
|
|
|
|
|
select.form-select:hover,
|
|
|
|
|
.select-button.dropdown-toggle:hover {
|
2025-01-14 21:40:05 +02:00
|
|
|
background-color: var(--input-hover-background);
|
|
|
|
|
color: var(--input-hover-color);
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-15 02:11:17 +02:00
|
|
|
select:focus,
|
|
|
|
|
select.form-select:focus,
|
|
|
|
|
.select-button.dropdown-toggle:focus {
|
2025-01-14 21:40:05 +02:00
|
|
|
box-shadow: unset;
|
|
|
|
|
outline: 3px solid var(--input-focus-outline-color);
|
|
|
|
|
outline-offset: 0;
|
|
|
|
|
background-color: var(--select-focus-background);
|
|
|
|
|
color: var(--select-focus-text-color);
|
|
|
|
|
transition: outline-color 50ms linear,
|
|
|
|
|
outline-offset 200ms ease-out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
option {
|
|
|
|
|
color: var(--select-dropdown-text-color);
|
2025-01-14 22:39:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
optgroup {
|
|
|
|
|
color: var(--select-group-heading-text-color);
|
|
|
|
|
font-size: .75em;
|
|
|
|
|
font-weight: normal;
|
|
|
|
|
font-style: normal;
|
|
|
|
|
line-height: 40px;
|
2025-01-16 18:51:35 +02:00
|
|
|
}
|
|
|
|
|
|
2025-01-17 00:51:26 +02:00
|
|
|
/* Check box & radio button commons */
|
2025-01-16 18:51:35 +02:00
|
|
|
|
|
|
|
|
/* The parent label */
|
2025-01-17 00:51:26 +02:00
|
|
|
label:has(input[type="radio"]),
|
|
|
|
|
label:has(input[type="checkbox"]) {
|
2025-01-17 01:06:25 +02:00
|
|
|
--box-size: 1em;
|
|
|
|
|
--box-label-gap: .5em;
|
|
|
|
|
|
2025-01-16 18:51:35 +02:00
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-17 00:51:26 +02:00
|
|
|
label:has(input[type="radio"]),
|
|
|
|
|
label:has(input[type="checkbox"]) {
|
2025-01-17 01:06:25 +02:00
|
|
|
padding-left: calc(var(--box-size) + var(--box-label-gap)) !important;
|
2025-01-16 18:51:35 +02:00
|
|
|
}
|
|
|
|
|
|
2025-01-17 00:51:26 +02:00
|
|
|
/* The original input */
|
|
|
|
|
label > input[type="radio"],
|
|
|
|
|
label > input[type="checkbox"] {
|
2025-01-16 18:51:35 +02:00
|
|
|
position: absolute;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
2025-01-17 01:06:25 +02:00
|
|
|
width: var(--box-size);
|
2025-01-16 18:51:35 +02:00
|
|
|
height: 100%;
|
|
|
|
|
opacity: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
label:has(input[type="radio"])::before,
|
2025-01-17 00:51:26 +02:00
|
|
|
label:has(input[type="radio"])::after,
|
|
|
|
|
label:has(input[type="checkbox"])::before,
|
|
|
|
|
label:has(input[type="checkbox"])::after {
|
2025-01-16 18:51:35 +02:00
|
|
|
content: "";
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 50%;
|
|
|
|
|
left: 0;
|
|
|
|
|
translate: 0 -50%;
|
2025-01-17 01:06:25 +02:00
|
|
|
width: var(--box-size);
|
|
|
|
|
height: var(--box-size);
|
2025-01-17 00:51:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
label:has(input[type="radio"]:focus-visible)::before,
|
|
|
|
|
label:has(input[type="checkbox"]:focus-visible)::before {
|
|
|
|
|
outline: 2px solid var(--input-focus-outline-color);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Check boxes */
|
|
|
|
|
|
|
|
|
|
/* The check box background */
|
|
|
|
|
label:has(input[type="checkbox"])::before {
|
|
|
|
|
border-radius: 3px;
|
2025-01-17 00:58:11 +02:00
|
|
|
background: var(--radio-checkbox-background);
|
2025-01-17 00:51:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
label:has(input[type="checkbox"]):hover:before {
|
2025-01-17 00:58:11 +02:00
|
|
|
background: var(--radio-checkbox-hover-background);
|
2025-01-17 00:51:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes checkbox-checked {
|
|
|
|
|
from {
|
|
|
|
|
transform: scale(2);
|
|
|
|
|
} to {
|
|
|
|
|
transform: scale(1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* The tick mark */
|
|
|
|
|
label:has(input[type="checkbox"])::after {
|
|
|
|
|
mask-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3ctitle%3echeck-bold%3c/title%3e%3cpath d='M9%2c20.42L2.79%2c14.21L5.62%2c11.38L9%2c14.77L18.88%2c4.88L21.71%2c7.71L9%2c20.42Z' /%3e%3c/svg%3e");
|
|
|
|
|
mask-position: center center;
|
|
|
|
|
mask-size: .95em;
|
2025-01-17 00:58:11 +02:00
|
|
|
background-color: var(--radio-checkbox-indicator-color);
|
2025-01-17 00:51:26 +02:00
|
|
|
transform: scale(0);
|
|
|
|
|
opacity: 0;
|
|
|
|
|
transition: transform 300ms ease-out,
|
|
|
|
|
opacity 300ms linear;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
label:has(input[type="checkbox"]:checked)::after {
|
|
|
|
|
opacity: 1;
|
|
|
|
|
transform: scale(1);
|
|
|
|
|
transition: opacity 100ms ease-in-out;
|
|
|
|
|
animation: checkbox-checked 150ms ease-out;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Radio buttons */
|
|
|
|
|
|
|
|
|
|
label:has(input[type="radio"])::before,
|
|
|
|
|
label:has(input[type="radio"])::after {
|
2025-01-16 18:51:35 +02:00
|
|
|
border-radius: 50%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* The outer circle */
|
|
|
|
|
label:has(input[type="radio"])::before {
|
2025-01-17 00:58:11 +02:00
|
|
|
background: var(--radio-checkbox-background);
|
2025-01-16 18:51:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
label:has(input[type="radio"]:hover)::before {
|
2025-01-17 00:58:11 +02:00
|
|
|
background: var(--radio-checkbox-hover-background);
|
2025-01-16 18:51:35 +02:00
|
|
|
}
|
|
|
|
|
|
2025-01-17 01:22:09 +02:00
|
|
|
@keyframes radio-checked {
|
|
|
|
|
from {
|
|
|
|
|
transform: scale(1.5);
|
|
|
|
|
} to {
|
|
|
|
|
transform: scale(.5);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-16 18:51:35 +02:00
|
|
|
/* The inner circle */
|
|
|
|
|
label:has(input[type="radio"])::after {
|
2025-01-17 01:22:09 +02:00
|
|
|
background: var(--radio-checkbox-indicator-color);
|
2025-01-16 18:51:35 +02:00
|
|
|
transform: scale(0);
|
2025-01-17 01:22:09 +02:00
|
|
|
opacity: 0;
|
|
|
|
|
transition: opacity 300ms linear,
|
|
|
|
|
transform 300ms ease-in;
|
2025-01-16 18:51:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
label:has(input[type="radio"]:checked)::after {
|
|
|
|
|
transform: scale(.5);
|
2025-01-17 01:22:09 +02:00
|
|
|
opacity: 1;
|
|
|
|
|
transition: opacity 150ms linear;
|
|
|
|
|
animation: radio-checked 200ms ease-out;
|
2025-01-13 14:51:23 +02:00
|
|
|
}
|