.auth-body { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; background: var(--bs-tertiary-bg); padding: 1rem; }
.auth-card { width: 100%; max-width: 32rem; }
.brand-mark { font-size: 2rem; color: var(--bs-primary); }
.otp-input { letter-spacing: .5em; font-variant-numeric: tabular-nums; }
.narrow-card { max-width: 32rem; }
.narrow-card-lg { max-width: 48rem; }
@media (min-width: 992px) { .sidebar { min-height: calc(100vh - 56px); } }
.sidebar .nav-link { color: var(--bs-body-color); border-radius: .375rem; margin: 0 .5rem; }
.sidebar .nav-link.active { background: var(--bs-primary); color: #fff; }
.sidebar .nav-link.disabled { color: var(--bs-secondary-color); opacity: .6; }
.audit-changes { max-width: 28rem; white-space: pre-wrap; word-break: break-word; font-size: .75rem; }
table.dataTable td { vertical-align: middle; }
.actions form { display: inline; }
.calendar-month td { width: 14.28%; min-width: 7rem; height: 5.5rem; }
.calendar-month .badge { max-width: 100%; font-weight: 500; }
@media (min-width: 1200px) { .court-sidebar { position: sticky; top: 4.5rem; } }
.court-section { scroll-margin-top: 4.5rem; }
.court-section h2 { letter-spacing: .03em; }
form.was-validated :invalid { border-color: var(--bs-form-invalid-border-color); }
.court-savebar { position: sticky; bottom: 0; z-index: 1020; padding: .75rem 0; background: var(--bs-body-bg); border-top: 1px solid var(--bs-border-color); }
.site-footer { font-size: .75rem; }
.sidebar .nav-section { font-size: .7rem; letter-spacing: .06em; }
.col-order { width: 7rem; }
.evidence-img { max-height: 22rem; width: 100%; object-fit: contain; background: var(--bs-tertiary-bg); }

/* Review page: thumbnails of every image in the violation (V = violation image). */
.evidence-thumb { width: 5.5rem; height: 4rem; overflow: hidden; background: var(--bs-tertiary-bg); }
.evidence-thumb img { width: 100%; height: 100%; object-fit: cover; }
.evidence-thumb.active { outline: 3px solid var(--bs-primary); outline-offset: 1px; }
/* Citation page: every photo / video of the violation, label under each. */
.evidence-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(7.5rem, 1fr)); gap: .5rem; }
.evidence-tile { background: var(--bs-tertiary-bg); text-align: left; }
.evidence-tile .evidence-tile-media { display: flex; align-items: center; justify-content: center; height: 5rem; overflow: hidden; }
.evidence-tile .evidence-tile-media img { width: 100%; height: 100%; object-fit: cover; }
.evidence-tile .evidence-tile-label { font-size: .75rem; padding: .15rem .35rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.evidence-tile.active { outline: 3px solid var(--bs-primary); outline-offset: 1px; }
.quick-open .form-control { width: 8.5rem; }
.cursor-pointer { cursor: pointer; }
.crm-note { white-space: normal; word-break: break-word; }

/* Browser softphone pop-out (M76 phase 2) and click-to-dial. */
.softphone-body { min-width: 300px; background: var(--bs-body-bg); }
.softphone-pad { display: grid; grid-template-columns: repeat(3, 1fr); gap: .35rem; }
.softphone-pad .btn { font-size: 1.15rem; padding: .35rem 0; }
.softphone-controls { grid-template-columns: repeat(2, 1fr); }
.btn-pulse { animation: btn-pulse 1s ease-in-out 3; }
@keyframes btn-pulse { 50% { box-shadow: 0 0 0 .4rem rgba(var(--bs-success-rgb), .35); } }
.phone-dot { display: inline-block; width: .55rem; height: .55rem; border-radius: 50%; background: var(--bs-secondary); vertical-align: middle; }
.phone-dot.AVAILABLE { background: var(--bs-success); }
.phone-dot.INACTIVE { background: var(--bs-warning); }
.phone-dot.ON_CALL { background: var(--bs-primary); }
.phone-banner { position: fixed; top: 4rem; right: 1rem; z-index: 1080; max-width: 22rem; }
a.tel-dial { white-space: nowrap; }

/* Text conversations (M77): Phone → Texts and the citation page */
.texts-list { max-height: 70vh; overflow-y: auto; }
.texts-messages { max-height: 60vh; min-height: 12rem; overflow-y: auto; background: var(--bs-tertiary-bg); }
.sms-bubble { max-width: 80%; padding: .4rem .65rem; border-radius: .75rem; word-break: break-word; }
.sms-body { white-space: pre-wrap; }
.sms-in { background: var(--bs-body-bg); border: 1px solid var(--bs-border-color); }
.sms-out { background: var(--bs-primary-bg-subtle); }
.sms-legacy { opacity: .8; border-style: dashed; }
.sms-meta { font-size: .75rem; color: var(--bs-secondary-color); margin-top: .15rem; }
.sms-media { max-width: 220px; max-height: 220px; display: block; }

/* View Citation PDF (approval): no selection / printing of the drawn pages */
.pdf-viewer { user-select: none; -webkit-user-select: none; min-height: 20rem; }
@media print { #pdfViewer { display: none !important; } }

/* Court page Portal tab: logo box and live preview of the customer payment portal. */
.portal-logo-box { width: 4.5rem; height: 4.5rem; flex: 0 0 auto; display: flex; align-items: center; justify-content: center; border: 1px dashed var(--bs-border-color); border-radius: .375rem; background: var(--bs-tertiary-bg); overflow: hidden; }
.portal-logo-box img { max-width: 100%; max-height: 100%; object-fit: contain; }
.portal-preview-header { color: #fff; }
.portal-preview-logo { width: 2.25rem; height: 2.25rem; display: flex; align-items: center; justify-content: center; background: rgba(255, 255, 255, .9); border-radius: .25rem; font-size: .6rem; color: #475467; overflow: hidden; }
.portal-preview-logo img { max-width: 100%; max-height: 100%; object-fit: contain; }
.portal-preview-button, .portal-preview-button:hover { color: #fff; cursor: default; }
.portal-faq-item details > summary { cursor: pointer; }
/* Reports → Failed payments & chargebacks */
.fp-stat .fp-stat-value { font-size: 1.5rem; font-weight: 600; line-height: 1.2; }
