body {
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

body::before {
    content: "";
    position: fixed;
    inset: 0;
    pointer-events: none;
    background: linear-gradient(180deg, rgba(37, 99, 235, 0.05), transparent 22%);
}

input,
select,
textarea,
button {
    outline: none;
}

input:focus,
select:focus,
textarea:focus {
    border-color: #2563eb;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
}

.safe-bottom {
    padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 1rem);
}

.app-toast {
    animation: toast-in 220ms ease-out;
}

.app-toast.is-hiding {
    animation: toast-out 220ms ease-in forwards;
}

.app-fab {
    box-shadow: 0 16px 32px rgba(37, 99, 235, 0.22);
}

.app-tab-link {
    transition: background-color 150ms ease, color 150ms ease, transform 150ms ease;
}

.app-tab-link:active {
    transform: scale(0.98);
}

.app-swipe-delete {
    --swipe-offset: 0px;
    --swipe-progress: 0;
    position: relative;
    overflow: hidden;
    border-radius: 1rem;
    background: linear-gradient(90deg, #ef4444 0%, #dc2626 100%);
}

.app-swipe-delete-action {
    position: absolute;
    inset: 0 auto 0 0;
    width: 7.5rem;
    display: flex;
    align-items: stretch;
    justify-content: stretch;
    color: #fff;
    opacity: calc(0.28 + (0.72 * var(--swipe-progress)));
}

.app-swipe-delete-button {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.45rem;
    padding: 1rem 0.75rem;
    font-size: 0.875rem;
    font-weight: 700;
    touch-action: manipulation;
}

.app-swipe-delete-card {
    position: relative;
    z-index: 1;
    transform: translateX(var(--swipe-offset));
    transition: transform 180ms ease;
    touch-action: pan-y;
    will-change: transform;
}

.app-swipe-delete-card.is-dragging {
    transition: none;
}

.app-swipe-delete.is-submitting .app-swipe-delete-card {
    transition: transform 120ms ease-out;
}

@keyframes toast-in {
    from {
        opacity: 0;
        transform: translateY(12px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes toast-out {
    from {
        opacity: 1;
        transform: translateY(0);
    }

    to {
        opacity: 0;
        transform: translateY(10px);
    }
}
