/*
 * Civic Ledger layout primitives.
 *
 * This deliberately small, first-party layer replaces the Bootstrap runtime.
 * It preserves the utility/component contracts used by older templates while
 * new screens move to the Civic Ledger design-system components.
 */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; }
img, svg { vertical-align: middle; max-width: 100%; }
button, input, select, textarea { font: inherit; }
a { color: var(--accent, #2457d6); }

.container, .container-fluid { width: 100%; margin-inline: auto; padding-inline: 16px; }
.container { max-width: 1180px; }
.row { --gutter-x: 24px; --gutter-y: 0; display: flex; flex-wrap: wrap; margin: calc(-1 * var(--gutter-y)) calc(-.5 * var(--gutter-x)) 0; }
.row > * { width: 100%; max-width: 100%; padding: var(--gutter-y) calc(.5 * var(--gutter-x)) 0; }
.col { flex: 1 0 0%; }
.col-auto { flex: 0 0 auto; width: auto; }
.col-4 { flex: 0 0 auto; width: 33.333%; }.col-6 { flex: 0 0 auto; width: 50%; }.col-8 { flex: 0 0 auto; width: 66.667%; }.col-12 { flex: 0 0 auto; width: 100%; }
.g-2 { --gutter-x: 8px; --gutter-y: 8px; }.g-3 { --gutter-x: 16px; --gutter-y: 16px; }.g-4 { --gutter-x: 24px; --gutter-y: 24px; }
@media (min-width: 576px) {
  .col-sm-4 { flex: 0 0 auto; width: 33.333%; }.col-sm-5 { flex: 0 0 auto; width: 41.667%; }.col-sm-6 { flex: 0 0 auto; width: 50%; }.col-sm-7 { flex: 0 0 auto; width: 58.333%; }.col-sm-8 { flex: 0 0 auto; width: 66.667%; }
  .d-sm-inline { display: inline !important; }.d-sm-table-cell { display: table-cell !important; }
}
@media (min-width: 768px) {
  .col-md-2 { flex: 0 0 auto; width: 16.667%; }.col-md-3 { flex: 0 0 auto; width: 25%; }.col-md-4 { flex: 0 0 auto; width: 33.333%; }.col-md-5 { flex: 0 0 auto; width: 41.667%; }.col-md-6 { flex: 0 0 auto; width: 50%; }.col-md-7 { flex: 0 0 auto; width: 58.333%; }.col-md-8 { flex: 0 0 auto; width: 66.667%; }.col-md-9 { flex: 0 0 auto; width: 75%; }.col-md-12 { flex: 0 0 auto; width: 100%; }
  .d-md-flex { display: flex !important; }.d-md-inline { display: inline !important; }.flex-md-row { flex-direction: row !important; }.justify-content-md-end { justify-content: flex-end !important; }.text-md-center { text-align: center !important; }.text-md-end { text-align: end !important; }.mt-md-0 { margin-top: 0 !important; }.py-md-3 { padding-block: 16px !important; }
}
@media (min-width: 992px) {
  .col-lg-2 { flex: 0 0 auto; width: 16.667%; }.col-lg-4 { flex: 0 0 auto; width: 33.333%; }.col-lg-5 { flex: 0 0 auto; width: 41.667%; }.col-lg-6 { flex: 0 0 auto; width: 50%; }.col-lg-8 { flex: 0 0 auto; width: 66.667%; }.col-lg-9 { flex: 0 0 auto; width: 75%; }.col-lg-10 { flex: 0 0 auto; width: 83.333%; }.mb-lg-0 { margin-bottom: 0 !important; }
}
@media (min-width: 1200px) {
  .col-xl-3 { flex: 0 0 auto; width: 25%; }.col-xl-4 { flex: 0 0 auto; width: 33.333%; }.col-xl-5 { flex: 0 0 auto; width: 41.667%; }.col-xl-8 { flex: 0 0 auto; width: 66.667%; }.col-xl-9 { flex: 0 0 auto; width: 75%; }.col-xl-10 { flex: 0 0 auto; width: 83.333%; }
}

.d-none { display: none !important; }.d-block { display: block !important; }.d-inline { display: inline !important; }.d-inline-block { display: inline-block !important; }.d-flex { display: flex !important; }.d-inline-flex { display: inline-flex !important; }.d-grid { display: grid !important; }
.flex-column { flex-direction: column !important; }.flex-wrap { flex-wrap: wrap !important; }.flex-grow-1 { flex-grow: 1 !important; }.flex-shrink-0 { flex-shrink: 0 !important; }
.align-items-start { align-items: flex-start !important; }.align-items-center { align-items: center !important; }.align-items-end { align-items: flex-end !important; }.align-items-baseline { align-items: baseline !important; }.align-items-stretch { align-items: stretch !important; }.align-self-start { align-self: flex-start !important; }.align-middle { vertical-align: middle !important; }
.justify-content-start { justify-content: flex-start !important; }.justify-content-center { justify-content: center !important; }.justify-content-end { justify-content: flex-end !important; }.justify-content-between { justify-content: space-between !important; }
.gap-1 { gap: 4px !important; }.gap-2 { gap: 8px !important; }.gap-3 { gap: 16px !important; }
.w-100 { width: 100% !important; }.h-100 { height: 100% !important; }.min-vh-100 { min-height: 100vh !important; }
.position-relative { position: relative !important; }.position-absolute { position: absolute !important; }.position-fixed { position: fixed !important; }.top-0 { top: 0 !important; }.top-50 { top: 50% !important; }.end-0 { right: 0 !important; }.translate-middle-y { transform: translateY(-50%) !important; }.float-end { float: right !important; }
.overflow-hidden { overflow: hidden !important; }.overflow-auto { overflow: auto !important; }

.p-0 { padding: 0 !important; }.p-2 { padding: 8px !important; }.p-3 { padding: 16px !important; }.p-4 { padding: 24px !important; }.p-5 { padding: 48px !important; }
.px-0 { padding-inline: 0 !important; }.px-2 { padding-inline: 8px !important; }.px-3 { padding-inline: 16px !important; }.px-4 { padding-inline: 24px !important; }
.py-2 { padding-block: 8px !important; }.py-3 { padding-block: 16px !important; }.py-4 { padding-block: 24px !important; }.py-5 { padding-block: 48px !important; }
.pt-2 { padding-top: 8px !important; }.pt-3 { padding-top: 16px !important; }.pt-5 { padding-top: 48px !important; }.pb-3 { padding-bottom: 16px !important; }.ps-3 { padding-left: 16px !important; }.pe-2 { padding-right: 8px !important; }
.m-0 { margin: 0 !important; }.mx-auto { margin-inline: auto !important; }.mx-2 { margin-inline: 8px !important; }.mx-3 { margin-inline: 16px !important; }.my-2 { margin-block: 8px !important; }.my-3 { margin-block: 16px !important; }.my-4 { margin-block: 24px !important; }
.mt-0 { margin-top: 0 !important; }.mt-1 { margin-top: 4px !important; }.mt-2 { margin-top: 8px !important; }.mt-3 { margin-top: 16px !important; }.mt-4 { margin-top: 24px !important; }.mt-5 { margin-top: 48px !important; }.mt-auto { margin-top: auto !important; }
.mb-0 { margin-bottom: 0 !important; }.mb-1 { margin-bottom: 4px !important; }.mb-2 { margin-bottom: 8px !important; }.mb-3 { margin-bottom: 16px !important; }.mb-4 { margin-bottom: 24px !important; }.mb-5 { margin-bottom: 48px !important; }
.ms-1 { margin-left: 4px !important; }.ms-2 { margin-left: 8px !important; }.ms-3 { margin-left: 16px !important; }.ms-auto { margin-left: auto !important; }.me-1 { margin-right: 4px !important; }.me-2 { margin-right: 8px !important; }.me-3 { margin-right: 16px !important; }

.text-start { text-align: start !important; }.text-center { text-align: center !important; }.text-end { text-align: end !important; }.text-nowrap { white-space: nowrap !important; }.text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }.text-decoration-none { text-decoration: none !important; }
.text-muted, .text-secondary { color: var(--text-secondary, #646968) !important; }.text-primary { color: var(--accent, #2457d6) !important; }.text-success { color: var(--success, #237d54) !important; }.text-danger { color: var(--danger, #b42318) !important; }.text-warning { color: #996515 !important; }.text-info { color: #176b87 !important; }.text-white { color: #fff !important; }
.fw-bold { font-weight: 700 !important; }.fw-semibold { font-weight: 600 !important; }.fs-4 { font-size: 1.5rem !important; }.fs-5 { font-size: 1.25rem !important; }.fs-6 { font-size: 1rem !important; }.small, small { font-size: .875em; }.lead { font-size: 1.15rem; }.opacity-75 { opacity: .75; }
.bg-white, .bg-light { background: var(--surface, #fff) !important; }.bg-transparent { background: transparent !important; }.bg-primary { background: var(--accent, #2457d6) !important; }.bg-secondary { background: #626866 !important; }.bg-success { background: var(--success, #237d54) !important; }.bg-danger { background: var(--danger, #b42318) !important; }.bg-warning { background: #f5c55d !important; }.bg-info { background: #3b92ad !important; }.bg-opacity-10 { opacity: .15; }
.border { border: 1px solid var(--border, #d9d7d0) !important; }.border-0 { border: 0 !important; }.border-top { border-top: 1px solid var(--border, #d9d7d0) !important; }.border-bottom { border-bottom: 1px solid var(--border, #d9d7d0) !important; }.border-start { border-left: 1px solid var(--border, #d9d7d0) !important; }.border-end { border-right: 1px solid var(--border, #d9d7d0) !important; }.border-3 { border-width: 3px !important; }.border-primary { border-color: var(--accent, #2457d6) !important; }.border-success { border-color: var(--success, #237d54) !important; }.border-danger { border-color: var(--danger, #b42318) !important; }.border-warning { border-color: #dca63a !important; }
.rounded { border-radius: var(--radius, 8px) !important; }.rounded-0 { border-radius: 0 !important; }.rounded-circle { border-radius: 50% !important; }.shadow-sm { box-shadow: var(--shadow-sm, 0 4px 16px rgba(25,28,28,.08)) !important; }

.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 40px; padding: 8px 14px; border: 1px solid transparent; border-radius: var(--radius-sm, 6px); font-weight: 650; line-height: 1.2; text-decoration: none; cursor: pointer; transition: background .15s, border-color .15s, transform .15s; }
.btn:hover { text-decoration: none; transform: translateY(-1px); }.btn:disabled, .btn.disabled { opacity: .55; pointer-events: none; }
.btn-sm { min-height: 32px; padding: 5px 10px; font-size: .875rem; }.btn-lg { min-height: 48px; padding: 11px 18px; font-size: 1.05rem; }.btn-group { display: inline-flex; vertical-align: middle; }.btn-group > .btn:not(:first-child) { margin-left: -1px; }.btn-group > .btn:not(:first-child):not(:last-child) { border-radius: 0; }
.btn-primary { color: #fff; background: var(--accent, #2457d6); border-color: var(--accent, #2457d6); }.btn-primary:hover { color: #fff; background: var(--accent-strong, #1944b0); }
.btn-secondary { color: #fff; background: #626866; border-color: #626866; }.btn-success { color: #fff; background: var(--success, #237d54); border-color: var(--success, #237d54); }.btn-danger { color: #fff; background: var(--danger, #b42318); border-color: var(--danger, #b42318); }.btn-warning { color: #2d210b; background: #f5c55d; border-color: #dca63a; }.btn-info { color: #fff; background: #287f9a; border-color: #287f9a; }
.btn-outline-primary, .btn-outline-secondary, .btn-outline-success, .btn-outline-danger, .btn-outline-warning, .btn-outline-info { background: transparent; }
.btn-outline-primary { color: var(--accent, #2457d6); border-color: var(--accent, #2457d6); }.btn-outline-primary:hover { color: #fff; background: var(--accent, #2457d6); }
.btn-outline-secondary { color: var(--text, #242827); border-color: var(--border-strong, #a9aba8); }.btn-outline-secondary:hover { background: var(--surface-raised, #f1f0eb); }
.btn-outline-success { color: var(--success, #237d54); border-color: var(--success, #237d54); }.btn-outline-danger { color: var(--danger, #b42318); border-color: var(--danger, #b42318); }.btn-outline-warning { color: #8a5d10; border-color: #dca63a; }.btn-outline-info { color: #176b87; border-color: #3b92ad; }
.btn-link { min-height: 0; padding: 0; color: var(--accent, #2457d6); background: none; border: 0; }.btn-close { width: 32px; height: 32px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: inherit; cursor: pointer; font-size: 0; }.btn-close::before { content: "×"; font-size: 22px; line-height: 1; }.btn-close:hover { background: rgba(0,0,0,.07); }

.form-label { display: block; margin-bottom: 6px; font-weight: 600; }.form-control, .form-select { display: block; width: 100%; min-height: 42px; padding: 9px 11px; color: var(--text, #242827); background: var(--surface, #fff); border: 1px solid var(--border-strong, #a9aba8); border-radius: var(--radius-sm, 6px); line-height: 1.35; }.form-control:focus, .form-select:focus { outline: 3px solid color-mix(in srgb, var(--accent, #2457d6) 20%, transparent); border-color: var(--accent, #2457d6); }.form-control-sm, .form-select-sm { min-height: 34px; padding: 5px 9px; font-size: .875rem; }.form-text { margin-top: 5px; color: var(--text-secondary, #646968); font-size: .875rem; }.form-select { appearance: none; padding-right: 34px; background-image: linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%); background-position: calc(100% - 16px) 52%,calc(100% - 11px) 52%; background-size: 5px 5px; background-repeat: no-repeat; }
.form-check { display: flex; align-items: center; gap: 8px; min-height: 24px; }.form-check-inline { display: inline-flex; margin-right: 16px; }.form-check-input { width: 18px; height: 18px; accent-color: var(--accent, #2457d6); }.form-check-label { cursor: pointer; }.input-group { display: flex; align-items: stretch; width: 100%; }.input-group > .form-control, .input-group > .form-select { flex: 1 1 auto; min-width: 0; }.input-group > :not(:first-child) { margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; }.input-group > :not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; }.input-group-text { display: flex; align-items: center; padding: 9px 11px; border: 1px solid var(--border-strong, #a9aba8); background: var(--surface-raised, #f1f0eb); }

.card { display: flex; flex-direction: column; min-width: 0; color: var(--text, #242827); background: var(--surface, #fff); border: 1px solid var(--border, #d9d7d0); border-radius: var(--radius-lg, 12px); box-shadow: var(--shadow-xs, 0 1px 3px rgba(25,28,28,.06)); }.card-header, .card-footer { padding: 14px 18px; background: var(--surface-raised, #f7f6f2); }.card-header { border-bottom: 1px solid var(--border, #d9d7d0); border-radius: inherit inherit 0 0; }.card-footer { border-top: 1px solid var(--border, #d9d7d0); border-radius: 0 0 inherit inherit; }.card-body { flex: 1 1 auto; padding: 18px; }.card-title { margin: 0 0 8px; }.card-text:last-child { margin-bottom: 0; }
.alert { position: relative; padding: 12px 16px; margin-bottom: 16px; border: 1px solid transparent; border-radius: var(--radius, 8px); }.alert-dismissible { padding-right: 48px; }.alert-dismissible .btn-close { position: absolute; top: 7px; right: 8px; }.alert-success { color: #155b3d; background: #e5f5ec; border-color: #a8d9bd; }.alert-danger { color: #7a1b14; background: #fcebea; border-color: #efb7b2; }.alert-warning { color: #76500f; background: #fff5d9; border-color: #e7ca77; }.alert-info { color: #17546a; background: #e6f4f8; border-color: #add8e5; }.alert-heading { color: inherit; }
.badge { display: inline-flex; align-items: center; padding: 4px 8px; border-radius: 999px; font-size: .75rem; font-weight: 700; line-height: 1; color: #fff; }

.table-responsive { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }.table { width: 100%; border-collapse: collapse; color: var(--text, #242827); vertical-align: top; }.table th, .table td { padding: 11px 12px; border-bottom: 1px solid var(--border, #d9d7d0); text-align: left; }.table th { color: var(--text-secondary, #646968); font-size: .78rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; }.table-sm th, .table-sm td { padding: 7px 9px; }.table-bordered th, .table-bordered td { border: 1px solid var(--border, #d9d7d0); }.table-hover tbody tr:hover { background: var(--surface-raised, #f7f6f2); }
.list-group { display: flex; flex-direction: column; padding: 0; margin: 0; border-radius: var(--radius, 8px); }.list-group-item { position: relative; display: block; padding: 12px 16px; color: var(--text, #242827); text-decoration: none; background: var(--surface, #fff); border: 1px solid var(--border, #d9d7d0); }.list-group-item + .list-group-item { border-top: 0; }.list-group-item-action:hover { background: var(--surface-raised, #f7f6f2); }.list-group-flush .list-group-item { border-inline: 0; border-radius: 0; }

.nav { display: flex; flex-wrap: wrap; padding: 0; margin: 0; list-style: none; }.nav-link { display: block; padding: 8px 12px; color: var(--accent, #2457d6); text-decoration: none; background: none; border: 0; cursor: pointer; }.nav-fill > .nav-item, .nav-fill > .nav-link { flex: 1 1 auto; text-align: center; }.nav-tabs { border-bottom: 1px solid var(--border, #d9d7d0); }.nav-tabs .nav-link { margin-bottom: -1px; border-bottom: 2px solid transparent; }.nav-tabs .nav-link.active { color: var(--text, #242827); border-bottom-color: var(--accent, #2457d6); }
.tab-content > .tab-pane { display: none; }.tab-content > .active { display: block; }
.navbar { position: relative; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; padding: 10px 16px; }.navbar-brand { display: inline-flex; align-items: center; text-decoration: none; }.navbar-nav { display: flex; flex-direction: column; padding: 0; margin: 0; list-style: none; }.navbar-collapse { flex-basis: 100%; flex-grow: 1; }.navbar-toggler { min-height: 40px; padding: 8px 10px; border: 1px solid var(--border, #d9d7d0); border-radius: 6px; background: transparent; }.navbar-toggler-icon { display: block; width: 22px; height: 16px; border-block: 2px solid currentColor; position: relative; }.navbar-toggler-icon::after { content: ""; position: absolute; inset: 5px 0 auto; border-top: 2px solid currentColor; }
@media (min-width: 992px) { .navbar-expand-lg { flex-wrap: nowrap; }.navbar-expand-lg .navbar-toggler { display: none; }.navbar-expand-lg .navbar-collapse { display: flex !important; flex-basis: auto; }.navbar-expand-lg .navbar-nav { flex-direction: row; } }

.dropdown { position: relative; }.dropdown-toggle::after { display: inline-block; margin-left: 6px; vertical-align: .15em; content: ""; border: 4px solid transparent; border-top-color: currentColor; transform: translateY(2px); }.dropdown-menu { position: absolute; z-index: 1080; display: none; min-width: 190px; margin: 4px 0 0; padding: 6px; color: var(--text, #242827); background: var(--surface, #fff); border: 1px solid var(--border, #d9d7d0); border-radius: var(--radius, 8px); box-shadow: var(--shadow-lg, 0 18px 44px rgba(25,28,28,.15)); list-style: none; }.dropdown-menu.show { display: block; }.dropdown-menu-end { right: 0; left: auto; }.dropdown-item { display: block; width: 100%; padding: 8px 10px; color: var(--text, #242827); text-decoration: none; background: transparent; border: 0; border-radius: 5px; text-align: inherit; }.dropdown-item:hover, .dropdown-item:focus { background: var(--surface-raised, #f1f0eb); }.dropdown-header { padding: 7px 10px; color: var(--text-secondary, #646968); font-size: .78rem; font-weight: 700; }.dropdown-divider { height: 0; margin: 6px 0; border: 0; border-top: 1px solid var(--border, #d9d7d0); }

.collapse:not(.show) { display: none; }.collapsing { height: 0; overflow: hidden; transition: height .25s ease; }.accordion { border: 1px solid var(--border, #d9d7d0); border-radius: var(--radius, 8px); overflow: hidden; }.accordion-item + .accordion-item { border-top: 1px solid var(--border, #d9d7d0); }.accordion-header { margin: 0; }.accordion-button { width: 100%; padding: 14px 16px; color: var(--text, #242827); background: var(--surface, #fff); border: 0; text-align: left; font-weight: 650; cursor: pointer; }.accordion-button::after { content: "−"; float: right; }.accordion-button.collapsed::after { content: "+"; }.accordion-body { padding: 16px; }
.modal { position: fixed; inset: 0; z-index: 1100; display: none; overflow: auto; padding: 20px; background: rgba(20,24,23,.55); }.modal.show { display: block; }.modal-dialog { width: min(100%, 560px); margin: 5vh auto; pointer-events: none; }.modal-dialog-centered { min-height: calc(100% - 10vh); display: flex; align-items: center; }.modal-lg { width: min(100%, 820px); }.modal-content { pointer-events: auto; position: relative; display: flex; flex-direction: column; background: var(--surface, #fff); border: 1px solid var(--border, #d9d7d0); border-radius: var(--radius-lg, 12px); box-shadow: 0 24px 80px rgba(20,24,23,.28); }.modal-header, .modal-footer { display: flex; align-items: center; padding: 16px 18px; }.modal-header { justify-content: space-between; border-bottom: 1px solid var(--border, #d9d7d0); }.modal-footer { justify-content: flex-end; gap: 8px; border-top: 1px solid var(--border, #d9d7d0); }.modal-title { margin: 0; }.modal-body { position: relative; flex: 1 1 auto; padding: 18px; }.modal-open { overflow: hidden; }

.progress { display: flex; height: 10px; overflow: hidden; background: var(--surface-raised, #e7e6df); border-radius: 999px; }.progress-bar { display: flex; align-items: center; justify-content: center; color: #fff; background: var(--accent, #2457d6); transition: width .4s ease; }.progress-bar-striped { background-image: linear-gradient(45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent); background-size: 16px 16px; }.progress-bar-animated { animation: progress-stripes 1s linear infinite; }@keyframes progress-stripes { to { background-position-x: 16px; } }
.spinner-border { display: inline-block; width: 32px; height: 32px; border: 3px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: spin .65s linear infinite; }.spinner-border-sm { width: 16px; height: 16px; border-width: 2px; }@keyframes spin { to { transform: rotate(360deg); } }
.pagination { display: flex; padding: 0; list-style: none; }.page-link { display: block; padding: 7px 11px; color: var(--accent, #2457d6); text-decoration: none; background: var(--surface, #fff); border: 1px solid var(--border, #d9d7d0); margin-left: -1px; }.page-item.active .page-link { color: #fff; background: var(--accent, #2457d6); }.page-item.disabled .page-link { opacity: .5; pointer-events: none; }.pagination-sm .page-link { padding: 5px 8px; font-size: .875rem; }
.visually-hidden { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; } }
