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: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "An error has occurred."
    }

.darker-border-checkbox.form-check-input {
    border-color: #929292;
}

.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
    color: var(--bs-secondary-color);
    text-align: end;
}

.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
    text-align: start;
}

/* ── Login (ported from src/App.css) ─────────────────────────────── */
.login-shell { min-height:100vh; display:flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 100%); }
.login-card { background:#fff; border-radius:16px; padding:40px 36px; width:100%; max-width:360px;
  box-shadow:0 20px 60px rgba(0,0,0,.35); display:flex; flex-direction:column; }
.login-logo { font-size:32px; font-weight:800; color:#1e40af; letter-spacing:-1px; text-align:center; }
.login-title { font-size:14px; font-weight:600; color:#1e293b; text-align:center; margin-top:4px; }
.login-sub { font-size:12px; color:#64748b; text-align:center; margin-bottom:28px; }
.login-label { font-size:12px; font-weight:600; color:#374151; margin-top:12px; }
.login-input { padding:10px 12px; border:1.5px solid #e2e8f0; border-radius:8px; font-size:14px;
  outline:none; margin-bottom:2px; }
.login-input:focus { border-color:#3b82f6; box-shadow:0 0 0 3px rgba(59,130,246,.15); }
.login-btn { padding:11px; background:#1e40af; color:#fff; border:none; border-radius:8px;
  font-size:14px; font-weight:600; cursor:pointer; margin-top:18px; }
.login-btn:hover:not(:disabled) { background:#1d4ed8; }
.login-btn:disabled { opacity:.55; cursor:not-allowed; }
.login-ok { font-size:12px; color:#16a34a; background:#f0fdf4; border:1px solid #bbf7d0;
  border-radius:6px; padding:8px 12px; margin-top:12px; }

/* Login error popup (toast) — slides down from the top */
.login-toast { position:fixed; top:26px; left:50%; transform:translateX(-50%);
  display:flex; align-items:center; gap:11px; z-index:9999; max-width:92vw;
  background:#fff; color:#b91c1c; border:1px solid #fecaca; border-left:4px solid #dc2626;
  padding:13px 16px; border-radius:11px; box-shadow:0 14px 40px rgba(0,0,0,.28);
  font-size:14px; font-weight:600; animation:login-toast-in .28s cubic-bezier(.2,.9,.3,1.3); }
.login-toast-icon { font-size:17px; line-height:1; }
.login-toast-msg { flex:1; white-space:nowrap; }
.login-toast-close { background:none; border:none; color:#cbd5e1; cursor:pointer; font-size:13px;
  line-height:1; padding:2px 4px; border-radius:5px; transition:all .15s; }
.login-toast-close:hover { color:#64748b; background:#f1f5f9; }
@keyframes login-toast-in {
  from { opacity:0; transform:translate(-50%,-22px); }
  to   { opacity:1; transform:translate(-50%,0); }
}

/* ── BOM list / view pages ───────────────────────────────────────── */
.bom-page { max-width:1280px; margin:0 auto; padding:18px 22px; font-size:13px; color:#1e293b; }
.bom-topbar { display:flex; align-items:center; justify-content:space-between; margin-bottom:18px;
  padding-bottom:12px; border-bottom:1px solid #e2e8f0; }
.bom-brand { font-size:18px; font-weight:800; color:#1e40af; }
.bom-brand span { font-size:13px; font-weight:600; color:#64748b; }
.bom-link { color:#1e40af; text-decoration:none; font-weight:600; }
.bom-link:hover { text-decoration:underline; }
.bom-muted { color:#64748b; }
.bom-count { font-size:12px; color:#64748b; margin:8px 0; }
.bom-h2 { font-size:18px; color:#1e293b; margin:4px 0 14px; }
.bom-header-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:8px 24px;
  background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px 18px; margin-bottom:18px; }
.bom-header-grid div { display:flex; flex-direction:column; gap:2px; }
.bom-header-grid span { font-size:11px; color:#94a3b8; }
.bom-table { border-collapse:collapse; width:100%; font-size:12px; }
.bom-table th { background:#1e3a5f; color:#fff; text-align:left; padding:6px 9px; white-space:nowrap; position:sticky; top:0; }
.bom-table td { padding:5px 9px; border:1px solid #e8edf3; }
.bom-table tr:nth-child(even) { background:#f8fafc; }
.bom-table tr:hover { background:#eef4ff; }
.bom-table .lv1 { font-weight:700; background:#e8edf5; }
.bom-table .mono { font-family:ui-monospace,Consolas,monospace; }
.bom-table .num { text-align:right; }
.bom-open { color:#1e40af; text-decoration:none; font-weight:600; white-space:nowrap; }
.bom-open:hover { text-decoration:underline; }