461 lines
12 KiB
CSS
Raw Normal View History

2025-01-29 18:24:05 +02:00
/*
* Command buttons (.btn-primary / .btn-secondary / .btn-sm / .btn-success)
2025-01-29 18:24:05 +02:00
*/
button.btn.btn-primary,
button.btn.btn-secondary,
button.btn.btn-sm,
button.btn.btn-success {
2025-01-29 23:41:57 +02:00
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 120px;
box-shadow: 1px 1px 1px var(--cmd-button-shadow-color);
border: unset;
border-radius: 6px;
padding: 4px 16px;
background: var(--cmd-button-background-color);
color: var(--cmd-button-text-color);
}
button.btn.btn-primary:hover,
button.btn.btn-secondary:hover,
button.btn.btn-sm:hover,
button.btn.btn-success:hover {
background: var(--cmd-button-hover-background-color);
color: var(--cmd-button-hover-text-color);
2025-01-29 18:24:05 +02:00
}
button.btn.btn-primary:active,
button.btn.btn-secondary:active,
button.btn.btn-sm:active,
button.btn.btn-success:active {
2025-01-29 18:24:05 +02:00
opacity: .85;
box-shadow: unset;
background: var(--cmd-button-background-color) !important;
color: var(--cmd-button-text-color) !important;
2025-01-29 18:24:05 +02:00
transform: scale(.95);
}
button.btn.btn-primary:disabled,
button.btn.btn-secondary:disabled,
button.btn.btn-sm:disabled,
button.btn.btn-success:disabled {
opacity: var(--cmd-button-disabled-opacity);
}
button.btn.btn-primary:focus-visible,
button.btn.btn-secondary:focus-visible,
button.btn.btn-sm:focus-visible,
button.btn.btn-success:focus-visible {
outline: 2px solid var(--input-focus-outline-color);
}
/* Button's icon */
2025-01-29 23:14:27 +02:00
button.btn.btn-primary span.bx,
button.btn.btn-secondary span.bx,
button.btn.btn-sm span.bx,
button.btn.btn-success span.bx {
color: var(--cmd-button-icon-color);
2025-01-29 23:41:57 +02:00
padding-right: .35em;
font-size: 1.2em;
2025-01-29 23:14:27 +02:00
}
/* Button's keyboard shortcut */
button.btn.btn-primary kbd,
button.btn.btn-secondary kbd,
button.btn.btn-sm kbd,
button.btn.btn-success kbd {
margin-left: .5em;
background: var(--cmd-button-keyboard-shortcut-background);
color: var(--cmd-button-keyboard-shortcut-color);
font-size: .6em;
text-transform: uppercase;
letter-spacing: .5pt;
}
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"],
input[type="password"],
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,
input[type="password"]:hover,
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,
input[type="password"]:focus,
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;
}
input::placeholder,
.form-control::placeholder {
2025-01-13 14:51:23 +02:00
--muted-text-color: var(--input-placeholder-color);
}
input::selection,
.form-control::selection {
2025-01-13 14:51:23 +02:00
background: var(--input-selection-background);
color: var(--input-selection-text-color);
}
/* 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;
}
.input-group input
.input-group input:hover,
.input-group input:focus,
.input-group .form-control,
.input-group .form-control:hover,
.input-group .form-control:focus {
/* Ignore the focus outline for the inputs that are children of an input group */
outline: unset;
background: transparent;
}
.input-group button,
.input-group a {
display: flex;
--bs-border-width: 0;
--accented-background-color: transparent;
background: transparent;
padding: 0 4px;
/* Workaround to set the "color" property. */
--muted-text-color: var(--input-action-button-color);
}
.input-group button:hover,
.input-group a:hover {
--muted-text-color: var(--input-action-button-hover);
}
.input-group button:focus-visible,
.input-group a:focus-visible {
outline: transparent;
border: transparent;
text-shadow: 0 0 3px var(--input-action-button-hover);
}
.input-group a.disabled {
opacity: .5;
/* Workaround to set the "background" property. */
--button-disabled-background-color: transparent;
}
.input-group .input-clearer-button {
background: transparent !important;
}
/* Combo box-like dropdown buttons */
.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 {
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;
color: var(--input-text-color);
border: unset;
2025-01-15 02:31:49 +02:00
border-radius: 0.375rem;
}
select:hover,
select.form-select:hover,
.select-button.dropdown-toggle:hover {
background-color: var(--input-hover-background);
color: var(--input-hover-color);
}
select:focus,
select.form-select:focus,
.select-button.dropdown-toggle:focus {
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);
}
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
}
/* Check boxes and radio buttons */
2025-01-16 18:51:35 +02:00
@supports selector(label:has(*)) {
2025-01-17 01:06:25 +02:00
/* Check box & radio button commons */
2025-01-16 18:51:35 +02:00
/* The parent label */
label.tn-radio,
label.tn-checkbox {
--box-size: 1em;
--box-label-gap: .5em;
2025-01-16 18:51:35 +02:00
position: relative;
padding-left: calc(var(--box-size) + var(--box-label-gap)) !important;
user-select: none;
2025-01-16 18:51:35 +02:00
}
2025-01-17 00:51:26 +02:00
/* The original input */
label.tn-radio > input[type="radio"],
label.tn-checkbox > input[type="checkbox"] {
position: absolute;
top: 0;
left: 0;
width: var(--box-size);
height: 100%;
opacity: 0 !important;
}
2025-01-17 00:51:26 +02:00
label.tn-radio::before,
label.tn-radio::after,
label.tn-checkbox::before,
label.tn-checkbox::after {
content: "";
position: absolute;
top: 50%;
left: 0;
translate: 0 -50%;
width: var(--box-size);
height: var(--box-size);
}
2025-01-17 00:51:26 +02:00
label.tn-radio:has(>input[type="radio"]:focus-visible)::before,
label.tn-checkbox:has(>input[type="checkbox"]:focus-visible)::before {
outline: 2px solid var(--input-focus-outline-color);
}
2025-01-17 00:51:26 +02:00
/* Check boxes */
/* The check box background */
label.tn-checkbox::before {
border-radius: 3px;
background: var(--radio-checkbox-background);
}
label.tn-checkbox:has(>input[type="checkbox"]:not(:disabled)):hover:before {
background: var(--radio-checkbox-hover-background);
}
@keyframes checkbox-checked {
from {
transform: scale(2);
} to {
transform: scale(1);
}
}
/* The tick mark */
label.tn-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;
background-color: var(--radio-checkbox-indicator-color);
transform: scale(0);
opacity: 0;
transition: transform 300ms ease-out,
opacity 300ms linear;
}
2025-01-17 00:51:26 +02:00
label.tn-checkbox:has(>input[type="checkbox"]:checked)::after {
opacity: 1;
2025-01-17 00:51:26 +02:00
transform: scale(1);
transition: opacity 100ms ease-in-out;
animation: checkbox-checked 150ms ease-out;
2025-01-17 00:51:26 +02:00
}
/* Radio buttons */
2025-01-17 00:51:26 +02:00
label.tn-radio::before,
label.tn-radio::after {
border-radius: 50%;
}
2025-01-17 00:51:26 +02:00
/* The outer circle */
label.tn-radio::before {
background: var(--radio-checkbox-background);
}
2025-01-17 00:51:26 +02:00
label.tn-radio:has(>input[type="radio"]:not(:disabled)):hover::before {
background: var(--radio-checkbox-hover-background);
}
2025-01-16 18:51:35 +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.tn-radio::after {
background: var(--radio-checkbox-indicator-color);
transform: scale(0);
opacity: 0;
transition: opacity 300ms linear,
transform 300ms ease-in;
}
2025-01-16 18:51:35 +02:00
label.tn-radio:has(>input[type="radio"]:checked)::after {
transform: scale(.5);
opacity: 1;
transition: opacity 150ms linear;
animation: radio-checked 200ms ease-out;
}
/* Disabled check boxes and radio buttons */
2025-01-16 18:51:35 +02:00
label.tn-radio:has(> input[type="radio"]:disabled)::before,
label.tn-radio:has(> input[type="radio"]:disabled)::after,
label.tn-checkbox:has(> input[type="checkbox"]:disabled)::before,
label.tn-checkbox:has(> input[type="checkbox"]:disabled)::after {
opacity: .5;
}
}
/* Links */
body a.tn-link,
body a.tn-link:visited,
.use-tn-links a,
.use-tn-links a:visited {
--background: transparent;
box-shadow: 0 0 0 0 var(--background);
border-radius: 4px;
background: var(--background);
color: currentColor;
font-weight: normal;
text-decoration: underline;
transition: background-color 200ms ease-out,
box-shadow 200ms ease-out,
color 300ms ease-out;
}
body a.tn-link:focus-visible,
.use-tn-links a:focus-visible {
outline: 2px solid var(--input-focus-outline-color);
outline-offset: 2px;
}
body a.tn-link:hover,
.use-tn-links a:hover {
box-shadow: 0 0 0 4px var(--link-hover-background);
--background: var(--link-hover-background);
color: var(--link-hover-color);
transition: background-color 100ms ease-in,
box-shadow 100ms ease-in,
color 150ms ease-in;
}
a.tn-link.external:not(.no-arrow)::after,
a.tn-link[href^="http://"]:not(.no-arrow)::after,
a.tn-link[href^="https://"]:not(.no-arrow)::after,
.use-tn-links a.external:not(.no-arrow)::after,
.use-tn-links a[href^="http://"]:not(.no-arrow)::after,
.use-tn-links a[href^="https://"]:not(.no-arrow)::after {
display: inline-block;
opacity: .5;
}
@keyframes link-arrow-blink {
from {
opacity: 1;
} to {
opacity: .5;
}
}
a.tn-link:hover.external:not(.no-arrow)::after,
a.tn-link:hover[href^="http://"]:not(.no-arrow)::after,
a.tn-link:hover[href^="https://"]:not(.no-arrow)::after,
.use-tn-links a:hover.external:not(.no-arrow)::after,
.use-tn-links a:hover[href^="http://"]:not(.no-arrow)::after,
.use-tn-links a:hover[href^="https://"]:not(.no-arrow)::after {
animation: link-arrow-blink 500ms linear alternate infinite;
}