@media screen and (forced-colors: none) {
    input,
    textarea,
    button,
    select {
        --bluelib-fill-color: color-mix(in srgb, var(--bluelib-interactable-color) 10%, transparent);
        --bluelib-rim-color: var(--bluelib-interactable-color);
    }

    input:hover,
    textarea:hover,
    button:hover,
    select:hover {
        --bluelib-fill-color: color-mix(in srgb, var(--bluelib-interactable-color) 20%, transparent);
    }
    
    input:focus,
    textarea:focus,
    button:focus,
    select:focus {
        --bluelib-fill-color: color-mix(in srgb, var(--bluelib-interacting-color) 10%, transparent);
        --bluelib-rim-color: var(--bluelib-interacting-color);

        outline-width: 0;
    }
}

input,
textarea,
button,
select {
    background-color: var(--bluelib-fill-color);

    padding-block: var(--bluelib-block-gap);
    padding-inline: var(--bluelib-inline-gap);
}

input[type="date"],
input[type="datetime"],
input[type="datetime-local"],
input[type="email"],
input[type="month"],
input[type="number"],
input[type="password"],
input[type="search"],
input[type="tel"],
input[type="text"],
input[type="time"],
input[type="url"],
input[type="week"] {
    border-block-end-style: solid;
    border-block-end-width: var(--bluelib-thickness);
    padding-block-end: calc(var(--bluelib-block-gap) - var(--bluelib-thickness));
}

input[type="date"]:focus,
input[type="datetime"]:focus,
input[type="datetime-local"]:focus,
input[type="email"]:focus,
input[type="month"]:focus,
input[type="number"]:focus,
input[type="password"]:focus,
input[type="search"]:focus,
input[type="tel"]:focus,
input[type="text"]:focus,
input[type="time"]:focus,
input[type="url"]:focus,
input[type="week"]:focus {
    border-block-end-width: calc(var(--bluelib-thickness) * 2);
    padding-block-end: calc(var(--bluelib-block-gap) - var(--bluelib-thickness) * 2);
}

textarea {
    resize: vertical;

    border-block-end-width: var(--bluelib-thickness);
    padding-block-end: calc(var(--bluelib-block-gap) - var(--bluelib-thickness));

    border-inline-end-width: var(--bluelib-thickness);
    padding-inline-end: calc(var(--bluelib-inline-gap) - var(--bluelib-thickness));
}

textarea:focus {
    border-block-end-width: calc(var(--bluelib-thickness) * 2);
    padding-block-end: calc(var(--bluelib-block-gap) - var(--bluelib-thickness) * 2);

    border-inline-end-width: calc(var(--bluelib-thickness) * 2);
    padding-inline-end: calc(var(--bluelib-inline-gap) - var(--bluelib-thickness) * 2);
}

input[type="button"],
input[type="reset"],
input[type="submit"],
button {
    padding-block: calc(var(--bluelib-block-gap) - var(--bluelib-thickness));
    padding-inline: calc(var(--bluelib-inline-gap) - var(--bluelib-thickness));
}

input[type="button"]:focus,
input[type="reset"]:focus,
input[type="submit"]:focus,
button:focus {
    border-width: calc(var(--bluelib-thickness) * 2);

    padding-block: calc(var(--bluelib-block-gap) - var(--bluelib-thickness) * 2);
    padding-inline: calc(var(--bluelib-inline-gap) - var(--bluelib-thickness) * 2);
}

input[type="checkbox"],
input[type="radio"] {
    appearance: none;

    display: inline flex;
    justify-content: center;
    align-items: center;

    width: 1.2em;
    height: 1.2em;

    padding: var(--bluelib-thickness);
}

input[type="checkbox"]::before,
input[type="radio"]::before {
    cursor: pointer;

    display: block flow;
    content: "";

    width: 100%;
    height: 100%;
}

input[type="checkbox"]:checked::before,
input[type="radio"]:checked::before {
    background-color: var(--bluelib-text-color);
}

input[type="checkbox"],
input[type="checkbox"]::before {
    border-radius: 0;
}

input[type="radio"],
input[type="radio"]::before {
    border-radius: 100%;
}

button,
input[type="button"],
input[type="reset"],
input[type="submit"],
input[type="checkbox"],
input[type="radio"],
input[type="file"],
input[type="color"] {
    cursor: pointer;

    border-style: outset;
    border-width: var(--bluelib-thickness);
}

button:active,
input[type="button"]:active,
input[type="reset"]:active,
input[type="submit"]:active,
input[type="checkbox"]:active,
input[type="radio"]:active,
input[type="file"]:active,
input[type="color"]:active,
input[type="checkbox"]:checked,
input[type="radio"]:checked {
    border-style: inset;
}

input[type="file"],
input[type="color"] {
    padding: var(--bluelib-thickness);
    block-size: 46px;  /* These inputs are weird. */
    vertical-align: bottom;
}

select {
    border-inline-end-width: var(--bluelib-thickness);
    padding-inline-end: calc(var(--bluelib-inline-gap) - var(--bluelib-thickness));
}

select[multiple] {
    cursor: vertical-text;
}

select[multiple] option {
    padding-block: calc(var(--padding) / 4);
}
