button, .btn {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    cursor: pointer;
    background: var(--accent);
    border-radius: var(--radius);
    border: none;
    padding: 5px 12px;
    color: var(--foreground);
    font-size: 13.5px;
    font-weight: 400;
    text-decoration: none;
    line-height: 1.4;
    transition: all 100ms ease-out;
}

    button svg, .btn svg {
        width: 1em;
        height: 1em;
        flex-shrink: 0;
    }

    button:hover, .btn:hover {
        background: color-mix(in srgb, var(--accent), #fff 10%);
    }

    button:active, .btn:active {
        background: color-mix(in srgb, var(--accent), #000 10%);
    }

    button:not([data-type]):not(.caption):not(.link), .btn:not([data-type]):not(.caption):not(.link),
    button[data-type="danger"], .btn[data-type="danger"] {
        color: #fff;
    }

    button[data-type="secondary"], .btn[data-type="secondary"] {
        background: #ffffff25;
    }

        button[data-type="secondary"]:hover, .btn[data-type="secondary"]:hover {
            background: color-mix(in srgb, #ffffff25, #fff 10%);
        }

        button[data-type="secondary"]:active, .btn[data-type="secondary"]:active {
            background: color-mix(in srgb, #ffffff25, #000 10%);
        }

    button[data-type="ghost"], .btn[data-type="ghost"] {
        background: transparent;
    }

        button[data-type="ghost"]:hover, .btn[data-type="ghost"]:hover {
            background: color-mix(in srgb, #ffffff00, #fff 5%);
        }

    button[data-type="ghost"]:active, .btn[data-type="ghost"]:active {
        background: color-mix(in srgb, #ffffff00, #fff 2%);
    }

    button[data-type="danger"], .btn[data-type="danger"] {
        background: var(--danger);
    }

        button[data-type="danger"]:hover, .btn[data-type="danger"]:hover {
            background: color-mix(in srgb, var(--danger), #fff 10%);
        }

        button[data-type="danger"]:active, .btn[data-type="danger"]:active {
            background: color-mix(in srgb, var(--danger), #000 10%);
        }

button:disabled, .btn:disabled {
    opacity: 60%;
    cursor: default;
}

    button:disabled:hover, .btn:disabled:hover,
    button:disabled:active, .btn:disabled:active {
        background: var(--accent);
    }

    button[data-type="secondary"]:disabled:hover, .btn[data-type="secondary"]:disabled:hover,
    button[data-type="secondary"]:disabled:active, .btn[data-type="secondary"]:disabled:active {
        background: #ffffff25;
    }

    button[data-type="ghost"]:disabled:hover, .btn[data-type="ghost"]:disabled:hover,
    button[data-type="ghost"]:disabled:active, .btn[data-type="ghost"]:disabled:active {
        background: transparent;
    }

    button[data-type="danger"]:disabled:hover, .btn[data-type="danger"]:disabled:hover,
    button[data-type="danger"]:disabled:active, .btn[data-type="danger"]:disabled:active {
        background: var(--danger);
    }

button[data-type="text-danger"], .btn[data-type="text-danger"] {
    background: transparent;
    color: inherit;
}

    button[data-type="text-danger"]:hover, .btn[data-type="text-danger"]:hover,
    button[data-type="text-danger"]:focus-visible, .btn[data-type="text-danger"]:focus-visible {
        background: color-mix(in srgb, var(--danger) 12%, transparent);
        color: var(--danger-text);
    }

    button[data-type="text-danger"]:active, .btn[data-type="text-danger"]:active {
        background: color-mix(in srgb, var(--danger) 6%, transparent);
        color: var(--danger-text);
    }

    button[data-type="text-danger"]:disabled:hover, .btn[data-type="text-danger"]:disabled:hover,
    button[data-type="text-danger"]:disabled:active, .btn[data-type="text-danger"]:disabled:active {
        background: transparent;
        color: inherit;
    }

.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

.form-error {
    display: flex;
    align-items: flex-start;
    gap: 0.6rem;
    padding: 0.3rem 0.6rem;
    border-radius: var(--radius);
    border: 1px solid color-mix(in srgb, var(--danger) 50%, transparent);
    background: color-mix(in srgb, var(--danger) 12%, transparent);
    font-size: 13px;
    line-height: 1.5;
    animation: form-error-in 150ms ease-out;
}

    .form-error svg {
        width: 1rem;
        height: 1rem;
        flex-shrink: 0;
        margin-top: 1px;
        color: var(--danger);
    }

    .form-error > span:last-child {
        flex: 1;
    }

@keyframes form-error-in {
    from {
        opacity: 0;
        transform: translateY(-4px);
    }

    to {
        opacity: 1;
        transform: none;
    }
}

.spinner {
    display: inline-block;
    width: 1em;
    height: 1em;
    flex-shrink: 0;
    vertical-align: middle;
    border-radius: 50%;
    border: 1px solid transparent;
    border-top-color: currentColor;
    animation: spin 0.7s linear infinite;
}

@keyframes spin {
    to {
        transform: rotate(360deg);
    }
}

