:root { --bs-primary: #174ea6; --bs-primary-rgb: 23,78,166; }
body:not(.tv-page) { background-image: radial-gradient(ellipse at top left, rgba(23,78,166,.06), transparent 60%); min-height: 100vh; }
.app-navbar .navbar-brand { font-size: 1rem; max-width: calc(100% - 120px); color: #fff; }
.app-navbar .navbar-toggler { display: inline-flex; align-items: center; gap: .5rem; font-size: 1rem; padding: .6rem .75rem; }
.app-menu-icon { display: inline-flex; flex-direction: column; justify-content: space-between; width: 1.2rem; height: 1rem; }
.app-menu-icon > span { display: block; width: 100%; height: 2px; background-color: currentColor; border-radius: 1px; }
.intrams-banner { display: flex; align-items: center; justify-content: center; gap: clamp(1rem, 3vw, 2.5rem); padding: clamp(1rem, 2.5vw, 2rem); background-color: #081b45; background-image: linear-gradient(90deg, rgba(4, 15, 38, .25), rgba(4, 15, 38, .55) 35%, rgba(4, 15, 38, .55) 65%, rgba(4, 15, 38, .25)), url("brand/unp-futuristic-sports.png"); background-size: cover; background-position: center; color: #fff; }
.intrams-banner-seal { width: clamp(64px, 9vw, 112px); height: auto; border-radius: 50%; }
.intrams-banner-university { margin: 0 0 .3rem; color: #e2e8f0; font-size: clamp(.65rem, 1.4vw, 1rem); letter-spacing: .08em; text-transform: uppercase; }
.intrams-banner-title { margin: 0; font-size: clamp(1.3rem, 3.5vw, 3rem); font-weight: 800; line-height: 1.15; }
.intrams-banner-caption { margin: .4rem 0 0; color: #fef3c7; font-size: clamp(.8rem, 1.5vw, 1.1rem); }
.tv-top-banner .intrams-banner { padding: .65rem 2vw; }
.tv-top-banner .intrams-banner-seal { width: clamp(48px, 7vh, 80px); }
.tv-top-banner .intrams-banner-title { font-size: clamp(1.3rem, 3vh, 2rem); }
.intrams-sidebar { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .75rem; padding: 1rem; background-color: #081b45; background-image: linear-gradient(rgba(4, 15, 38, .62), rgba(4, 15, 38, .82)), url("brand/unp-futuristic-sports.png"); background-size: cover; background-position: 88% center; color: #fff; text-align: center; }
.tv-page { height: 100dvh; grid-template-rows: auto auto minmax(0, 1fr) auto; }
.intrams-sidebar img { width: 100%; max-width: 160px; height: auto; border-radius: 50%; }
.intrams-sidebar p { margin: 0; }
.intrams-sidebar-name { font-size: clamp(1.5rem, 3vw, 3rem); font-weight: 800; }
.intrams-sidebar-event { font-size: clamp(1rem, 1.5vw, 1.6rem); font-weight: 700; }
.intrams-sidebar-caption { color: #fef3c7; }
.app-navbar .offcanvas { background: #103d83; }
.app-navbar .offcanvas .navbar-nav { gap: .25rem; margin-bottom: 1rem !important; }
.app-navbar .nav-link { border-radius: .6rem; padding: .55rem .7rem !important; font-size: .9rem; }
.app-navbar .nav-link:hover, .app-navbar .nav-link.active { background: rgba(255,255,255,.16); color: #fff; }
.app-page-heading { border-bottom: 1px solid var(--bs-border-color); padding-bottom: 1.25rem; margin-bottom: 1.5rem; }
.app-card { border: 1px solid var(--bs-border-color-translucent); border-radius: 1rem; }
.btn, .form-control, .form-select { border-radius: .6rem; }
.btn { transition: background-color .15s, box-shadow .15s, transform .15s; }
.btn:active { transform: translateY(1px); }
.form-control:focus, .form-select:focus { box-shadow: 0 0 0 .2rem rgba(23,78,166,.15); }
.was-validated .input-group:has(:invalid) + .invalid-feedback { display: block; }
.table > :not(caption) > * > * { padding: .8rem .85rem; }
.table-responsive { border-radius: .65rem; }
.skip-link { position: fixed; top: -100px; left: 1rem; z-index: 2000; }
.skip-link:focus { top: .5rem; }
[data-bs-theme=dark] .table thead th { background: #172b49; color: #e0ebff; }
[data-bs-theme=dark] .app-card { box-shadow: 0 .35rem 1.25rem rgba(0,0,0,.15); }
@media (max-width: 1199.98px) {
    .app-navbar .offcanvas { background: #103d83; }
    .app-navbar .navbar-nav { gap: .25rem; }
}
@media (prefers-reduced-motion: reduce) { .btn { transition: none; } }
@media print { .app-page-heading, [data-theme-toggle], .skip-link, [data-fullscreen] { display: none !important; } }

/* Explicit text/surface pairs: secondary text must not inherit badge colors. */
:root, [data-bs-theme=light] {
    --app-muted: #49566a;
    --app-accent-text: #174ea6;
    --app-danger-text: #b02a37;
    --app-success-text: #146c43;
    --app-warning-text: #805300;
    --app-info-text: #075a70;
    --app-control-border: #64748b;
    --bs-secondary-color: #49566a;
}
[data-bs-theme=dark] {
    --app-muted: #b6c2d2;
    --app-accent-text: #9ec5fe;
    --app-danger-text: #ff9ba5;
    --app-success-text: #75b798;
    --app-warning-text: #ffda6a;
    --app-info-text: #6edff6;
    --app-control-border: #8292a5;
    --bs-secondary-color: #b6c2d2;
}
.text-secondary, .text-muted { color: var(--app-muted) !important; }
.text-primary { color: var(--app-accent-text) !important; }
.text-danger { color: var(--app-danger-text) !important; }
.text-success { color: var(--app-success-text) !important; }
.text-warning { color: var(--app-warning-text) !important; }
.text-info { color: var(--app-info-text) !important; }
/* Unit row tints stay pale in both themes, so their text must stay dark. */
.public-page #live-tally-body > tr > td {
    color: #0f172a;
    --bs-table-color: #0f172a;
    --bs-table-hover-color: #0f172a;
    --bs-table-striped-color: #0f172a;
    --bs-table-active-color: #0f172a;
}
.btn-outline-secondary { --bs-btn-color: var(--app-muted); --bs-btn-border-color: var(--app-muted); --bs-btn-hover-color: #fff; --bs-btn-hover-bg: #49566a; --bs-btn-hover-border-color: #49566a; --bs-btn-active-color: #fff; --bs-btn-active-bg: #49566a; --bs-btn-active-border-color: #49566a; }
.btn-outline-primary { --bs-btn-color: var(--app-accent-text); --bs-btn-border-color: var(--app-accent-text); }
.btn-outline-danger { --bs-btn-color: var(--app-danger-text); --bs-btn-border-color: var(--app-danger-text); }
.btn-outline-success { --bs-btn-color: var(--app-success-text); --bs-btn-border-color: var(--app-success-text); }
.btn-outline-warning { --bs-btn-color: var(--app-warning-text); --bs-btn-border-color: var(--app-warning-text); }
.btn-outline-info { --bs-btn-color: var(--app-info-text); --bs-btn-border-color: var(--app-info-text); }
.form-control, .form-select { border-color: var(--app-control-border); }
.form-control::placeholder { color: var(--app-muted); opacity: 1; }
.invalid-feedback { color: var(--app-danger-text); }
.valid-feedback { color: var(--app-success-text); }
.report-doc-title { color: var(--app-accent-text); }
.report-doc-subtitle, .report-doc-meta, .report-doc-footer { color: var(--app-muted); }
.app-navbar { --bs-navbar-color: #e2e8f0; --bs-navbar-hover-color: #fff; --bs-navbar-active-color: #fff; }
.app-navbar .offcanvas { --bs-heading-color: #fff; --bs-body-color: #fff; }
.app-navbar .navbar-toggler { color: #fff; border-color: #cbd5e1; }
.app-navbar .btn-close-white { opacity: 1; }
.tv-slide {
    --app-muted: #49566a;
    --app-accent-text: #174ea6;
    --app-danger-text: #b02a37;
    --app-success-text: #146c43;
    --app-warning-text: #805300;
    --app-info-text: #075a70;
}
/* Projection pages always have dark backgrounds, independent of saved theme. */
body[data-bs-theme=dark] .text-white-50 { color: #b6c2d2 !important; }
@media print {
    .report-doc-title, .report-doc-subtitle, .report-doc-meta, .report-doc-footer { color: #000 !important; }
}
