h1:focus {
    outline: none;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid #26b050;
}

.invalid {
    outline: 1px solid #e50000;
}

.validation-message {
    color: #e50000;
}

.blazor-error-boundary {
    background: #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "An error has occurred."
    }

/* Editorial roster row — used by every portal grid (Sites, Receipts, Schedule, Documents).
   Mirrors Admin's Users.razor pattern verbatim so the visual rhythm is identical across both apps. */
.roster-row { transition: background-color 200ms ease; }
.roster-row:hover { background-color: #FBF7EE; }
.roster-row .edit-arrow { transition: transform 320ms cubic-bezier(0.16, 1, 0.3, 1), color 200ms ease; }
.roster-row:hover .edit-arrow { transform: translateX(5px); color: #B8741A; }
.roster-row:hover .edit-label { color: #B8741A; }
.edit-label { transition: color 200ms ease; }

/* Active-nav underline for MainLayout NavLinks. Tailwind handles the rest. */
.nav-active {
    color: #ffffff;
    position: relative;
}

.nav-active::after {
    content: "";
    position: absolute;
    left: 0.75rem;
    right: 0.75rem;
    bottom: -0.25rem;
    height: 2px;
    background: #E8A33D;
    border-radius: 1px;
}
