/* Application layout on top of Bootstrap 5. No inline styles in JSPs (CSP blocks them). */
html, body { height: 100%; }
body { display: flex; flex-direction: column; background: var(--bs-body-bg); }

.app-header { flex: 0 0 auto; }
/* Criticam logo is green/grey on white, so it sits on a white chip over the blue header */
.brand-logo { display: inline-flex; background: #fff; border-radius: .375rem; padding: .125rem .375rem; }
.brand-logo img { height: 2rem; width: auto; display: block; }
.app-body { flex: 1 1 auto; display: flex; min-height: 0; }
.app-main { flex: 1 1 auto; min-width: 0; padding: 1.5rem; overflow-x: auto; }

@media (min-width: 992px) {
    .app-nav { width: 16rem; flex: 0 0 16rem; }
}
.app-nav .nav-link { color: var(--bs-body-color); padding: .45rem 1rem; border-left: 3px solid transparent; }
.app-nav .nav-link.active { font-weight: 600; background: var(--bs-primary-bg-subtle); border-left-color: var(--bs-primary); }
.app-nav .nav-link.disabled { color: var(--bs-secondary-color); }

.login-wrap { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 1rem; background: var(--bs-tertiary-bg); }
.login-card { width: 100%; max-width: 24rem; }
.login-logo { height: 4rem; width: auto; display: block; }

.stat-card { color: var(--bs-body-color); transition: border-color .15s; }
.stat-card:hover, .stat-card:focus { border-color: var(--bs-primary); }
.stat-label { font-size: .875rem; color: var(--bs-secondary-color); text-transform: uppercase; letter-spacing: .04em; }
.stat-value { font-size: 2rem; font-weight: 600; line-height: 1.2; }

/* Calibration form / template preview */
.form-table .col-point { width: 22%; }
.form-table .col-set { width: 10%; }
.form-table .col-value { width: 18%; min-width: 8rem; }
.form-table .col-result { width: 18%; }
.outcome-PASS { background: var(--bs-success); color: #fff; }
.outcome-FAIL { background: var(--bs-danger); color: #fff; }
.outcome-INVALID, .outcome-NO_RULE { background: var(--bs-warning); color: #000; }
.outcome-RECORDED { background: var(--bs-secondary); color: #fff; }
.outcome-NOT_ENTERED { background: var(--bs-light); color: var(--bs-secondary-color); border: 1px solid var(--bs-border-color); }
.overall-PASS { background: var(--bs-success); color: #fff; }
.overall-FAIL { background: var(--bs-danger); color: #fff; }
.overall-INCOMPLETE { background: var(--bs-warning); color: #000; }
.status-DRAFT { background: var(--bs-info); color: #000; }
.status-PUBLISHED { background: var(--bs-success); color: #fff; }
.status-RETIRED { background: var(--bs-secondary); color: #fff; }
.cal-DRAFT { background: var(--bs-info); color: #000; }
.cal-SUBMITTED { background: var(--bs-primary); color: #fff; }
.cal-REJECTED { background: var(--bs-warning); color: #000; }

/* Reference standard status (decision E2) */
.ref-status-VALID { background: var(--bs-success); color: #fff; }
.ref-status-DUE { background: var(--bs-warning); color: #000; }
.ref-status-OVERDUE { background: var(--bs-danger); color: #fff; }
.ref-status-NO_DUE_DATE { background: var(--bs-secondary); color: #fff; }
.reference-list { max-height: 16rem; overflow-y: auto; }
.cal-APPROVED { background: var(--bs-dark); color: #fff; }
.sticky-actions { position: sticky; bottom: 0; background: var(--bs-body-bg); padding: .75rem 0; border-top: 1px solid var(--bs-border-color); z-index: 5; }
.report-table { font-size: .875rem; }
.audit-reason { max-width: 28rem; overflow-wrap: anywhere; }
.json-editor { font-size: .85rem; }
.json-view { max-height: 32rem; overflow: auto; background: var(--bs-tertiary-bg); padding: 1rem; font-size: .8rem; }

.state-card { border-left-width: .35rem; }
.state-PENDING_APPROVAL { border-left-color: var(--bs-primary); }
.state-FAILED { border-left-color: var(--bs-danger); }
.state-CALIBRATED { border-left-color: var(--bs-success); }
.state-NOT_CALIBRATED { border-left-color: var(--bs-secondary); }
.bucket-PENDING_APPROVAL { border-left-color: var(--bs-primary); }
.bucket-FAILED { border-left-color: var(--bs-danger); }
.bucket-NOT_CALIBRATED { border-left-color: var(--bs-secondary); }
.bucket-OVERDUE { border-left-color: #b02a37; }
.bucket-DUE_SOON { border-left-color: var(--bs-warning); }
.bucket-CURRENT { border-left-color: var(--bs-success); }
.bucket-NO_SCHEDULE { border-left-color: var(--bs-info); }
.badge.due-OVERDUE { background: #b02a37; color: #fff; }
.badge.due-DUE_SOON { background: var(--bs-warning); color: #000; }
.badge.due-CURRENT { background: var(--bs-success); color: #fff; }
.badge.due-NO_SCHEDULE { background: var(--bs-info); color: #000; }
.badge.state-PENDING_APPROVAL { background: var(--bs-primary); color: #fff; }
.badge.state-FAILED { background: var(--bs-danger); color: #fff; }
.badge.state-CALIBRATED { background: var(--bs-success); color: #fff; }
.badge.state-NOT_CALIBRATED { background: var(--bs-secondary); color: #fff; }

.temp-password { font-family: var(--bs-font-monospace); font-size: 1.25rem; letter-spacing: .05em; user-select: all; }
.form-narrow { max-width: 36rem; }
