/*
 * Ledger + Ledger dark: Bootstrap 5.3 themes for trompe.
 * Load after bootstrap.min.css. Activate with <html data-theme="ledger"> or
 * <html data-theme="ledger-dark" data-bs-theme="dark">.
 * Fonts: IBM Plex Sans and IBM Plex Mono, loaded from Google Fonts in base.html.
 */
[data-theme="ledger"] {
  --bs-font-sans-serif: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --bs-font-monospace: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --bs-body-font-family: var(--bs-font-sans-serif);
  --bs-body-color: #1c1f22;
  --bs-body-color-rgb: 28, 31, 34;
  --bs-body-bg: #ffffff;
  --bs-body-bg-rgb: 255, 255, 255;
  --bs-emphasis-color: #0d0f11;
  --bs-emphasis-color-rgb: 13, 15, 17;
  --bs-secondary-color: #595e64;
  --bs-secondary-color-rgb: 89, 94, 100;
  --bs-secondary-bg: #e8e8e3;
  --bs-secondary-bg-rgb: 232, 232, 227;
  --bs-tertiary-color: #595e64;
  --bs-tertiary-color-rgb: 89, 94, 100;
  --bs-tertiary-bg: #ecece8;
  --bs-tertiary-bg-rgb: 236, 236, 232;
  --bs-heading-color: inherit;
  --bs-link-color: #1f4e8c;
  --bs-link-color-rgb: 31, 78, 140;
  --bs-link-hover-color: #163a69;
  --bs-link-hover-color-rgb: 22, 58, 105;
  --bs-code-color: #8a3b12;
  --bs-highlight-color: #1c1f22;
  --bs-highlight-bg: #f3e3b5;
  --bs-border-color: #d6d6cf;
  --bs-border-color-translucent: color-mix(in srgb, var(--bs-border-color) 80%, transparent);
  --bs-border-radius: 2px;
  --bs-border-radius-sm: 1px;
  --bs-border-radius-lg: 3px;
  --bs-border-radius-xl: 4px;
  --bs-border-radius-xxl: 6px;
  --bs-focus-ring-color: rgba(31, 78, 140, 0.3);
  --bs-form-valid-color: #2e6b47;
  --bs-form-valid-border-color: #2e6b47;
  --bs-form-invalid-color: #a8322d;
  --bs-form-invalid-border-color: #a8322d;
  --t-page-bg: #f4f4f1;
  --t-shade: #000;
  --t-sentiment-pos: #1f4e8c;
  --t-sentiment-neu: #c4c8ce;
  --t-sentiment-neg: #c2570c;
  --bs-primary: #1f4e8c;
  --bs-primary-rgb: 31, 78, 140;
  --bs-primary-text-emphasis: color-mix(in srgb, #1f4e8c 72%, #000);
  --bs-primary-bg-subtle: color-mix(in srgb, #1f4e8c 14%, #ffffff);
  --bs-primary-border-subtle: color-mix(in srgb, #1f4e8c 38%, #ffffff);
  --t-on-primary: #ffffff;
  --bs-secondary: #595e64;
  --bs-secondary-rgb: 89, 94, 100;
  --bs-secondary-text-emphasis: color-mix(in srgb, #595e64 72%, #000);
  --bs-secondary-bg-subtle: color-mix(in srgb, #595e64 14%, #ffffff);
  --bs-secondary-border-subtle: color-mix(in srgb, #595e64 38%, #ffffff);
  --t-on-secondary: #ffffff;
  --bs-success: #2e6b47;
  --bs-success-rgb: 46, 107, 71;
  --bs-success-text-emphasis: color-mix(in srgb, #2e6b47 72%, #000);
  --bs-success-bg-subtle: color-mix(in srgb, #2e6b47 14%, #ffffff);
  --bs-success-border-subtle: color-mix(in srgb, #2e6b47 38%, #ffffff);
  --t-on-success: #ffffff;
  --bs-info: #2a6a82;
  --bs-info-rgb: 42, 106, 130;
  --bs-info-text-emphasis: color-mix(in srgb, #2a6a82 72%, #000);
  --bs-info-bg-subtle: color-mix(in srgb, #2a6a82 14%, #ffffff);
  --bs-info-border-subtle: color-mix(in srgb, #2a6a82 38%, #ffffff);
  --t-on-info: #ffffff;
  --bs-warning: #b7791f;
  --bs-warning-rgb: 183, 121, 31;
  --bs-warning-text-emphasis: color-mix(in srgb, #b7791f 72%, #000);
  --bs-warning-bg-subtle: color-mix(in srgb, #b7791f 14%, #ffffff);
  --bs-warning-border-subtle: color-mix(in srgb, #b7791f 38%, #ffffff);
  --t-on-warning: #1c1f22;
  --bs-danger: #a8322d;
  --bs-danger-rgb: 168, 50, 45;
  --bs-danger-text-emphasis: color-mix(in srgb, #a8322d 72%, #000);
  --bs-danger-bg-subtle: color-mix(in srgb, #a8322d 14%, #ffffff);
  --bs-danger-border-subtle: color-mix(in srgb, #a8322d 38%, #ffffff);
  --t-on-danger: #ffffff;
  --bs-light: #ecece7;
  --bs-light-rgb: 236, 236, 231;
  --bs-light-text-emphasis: color-mix(in srgb, #ecece7 72%, #000);
  --bs-light-bg-subtle: color-mix(in srgb, #ecece7 14%, #ffffff);
  --bs-light-border-subtle: color-mix(in srgb, #ecece7 38%, #ffffff);
  --t-on-light: #1c1f22;
  --bs-dark: #1c1f22;
  --bs-dark-rgb: 28, 31, 34;
  --bs-dark-text-emphasis: color-mix(in srgb, #1c1f22 72%, #000);
  --bs-dark-bg-subtle: color-mix(in srgb, #1c1f22 14%, #ffffff);
  --bs-dark-border-subtle: color-mix(in srgb, #1c1f22 38%, #ffffff);
  --t-on-dark: #f4f4f1;
}

[data-theme="ledger-dark"] {
  color-scheme: dark;
  --bs-font-sans-serif: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --bs-font-monospace: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --bs-body-font-family: var(--bs-font-sans-serif);
  --bs-body-color: #e8e8e3;
  --bs-body-color-rgb: 232, 232, 227;
  --bs-body-bg: #1c2024;
  --bs-body-bg-rgb: 28, 32, 36;
  --bs-emphasis-color: #ffffff;
  --bs-emphasis-color-rgb: 255, 255, 255;
  --bs-secondary-color: #9ba1a7;
  --bs-secondary-color-rgb: 155, 161, 167;
  --bs-secondary-bg: #24292e;
  --bs-secondary-bg-rgb: 36, 41, 46;
  --bs-tertiary-color: #9ba1a7;
  --bs-tertiary-color-rgb: 155, 161, 167;
  --bs-tertiary-bg: #1a1e22;
  --bs-tertiary-bg-rgb: 26, 30, 34;
  --bs-heading-color: inherit;
  --bs-link-color: #8db4e6;
  --bs-link-color-rgb: 141, 180, 230;
  --bs-link-hover-color: #b3cdef;
  --bs-link-hover-color-rgb: 179, 205, 239;
  --bs-code-color: #e8a070;
  --bs-highlight-color: #e8e8e3;
  --bs-highlight-bg: #4a3b17;
  --bs-border-color: #30363c;
  --bs-border-color-translucent: color-mix(in srgb, var(--bs-border-color) 80%, transparent);
  --bs-border-radius: 2px;
  --bs-border-radius-sm: 1px;
  --bs-border-radius-lg: 3px;
  --bs-border-radius-xl: 4px;
  --bs-border-radius-xxl: 6px;
  --bs-focus-ring-color: rgba(141, 180, 230, 0.3);
  --bs-form-valid-color: #6dbb8a;
  --bs-form-valid-border-color: #6dbb8a;
  --bs-form-invalid-color: #e27a72;
  --bs-form-invalid-border-color: #e27a72;
  --t-page-bg: #14171a;
  --t-shade: #fff;
  --t-sentiment-pos: #8db4e6;
  --t-sentiment-neu: #4b525a;
  --t-sentiment-neg: #cf7a3a;
  --bs-primary: #8db4e6;
  --bs-primary-rgb: 141, 180, 230;
  --bs-primary-text-emphasis: color-mix(in srgb, #8db4e6 72%, #fff);
  --bs-primary-bg-subtle: color-mix(in srgb, #8db4e6 14%, #1c2024);
  --bs-primary-border-subtle: color-mix(in srgb, #8db4e6 38%, #1c2024);
  --t-on-primary: #14171a;
  --bs-secondary: #9ba1a7;
  --bs-secondary-rgb: 155, 161, 167;
  --bs-secondary-text-emphasis: color-mix(in srgb, #9ba1a7 72%, #fff);
  --bs-secondary-bg-subtle: color-mix(in srgb, #9ba1a7 14%, #1c2024);
  --bs-secondary-border-subtle: color-mix(in srgb, #9ba1a7 38%, #1c2024);
  --t-on-secondary: #14171a;
  --bs-success: #6dbb8a;
  --bs-success-rgb: 109, 187, 138;
  --bs-success-text-emphasis: color-mix(in srgb, #6dbb8a 72%, #fff);
  --bs-success-bg-subtle: color-mix(in srgb, #6dbb8a 14%, #1c2024);
  --bs-success-border-subtle: color-mix(in srgb, #6dbb8a 38%, #1c2024);
  --t-on-success: #14171a;
  --bs-info: #6cb8d4;
  --bs-info-rgb: 108, 184, 212;
  --bs-info-text-emphasis: color-mix(in srgb, #6cb8d4 72%, #fff);
  --bs-info-bg-subtle: color-mix(in srgb, #6cb8d4 14%, #1c2024);
  --bs-info-border-subtle: color-mix(in srgb, #6cb8d4 38%, #1c2024);
  --t-on-info: #14171a;
  --bs-warning: #e0a84a;
  --bs-warning-rgb: 224, 168, 74;
  --bs-warning-text-emphasis: color-mix(in srgb, #e0a84a 72%, #fff);
  --bs-warning-bg-subtle: color-mix(in srgb, #e0a84a 14%, #1c2024);
  --bs-warning-border-subtle: color-mix(in srgb, #e0a84a 38%, #1c2024);
  --t-on-warning: #14171a;
  --bs-danger: #e27a72;
  --bs-danger-rgb: 226, 122, 114;
  --bs-danger-text-emphasis: color-mix(in srgb, #e27a72 72%, #fff);
  --bs-danger-bg-subtle: color-mix(in srgb, #e27a72 14%, #1c2024);
  --bs-danger-border-subtle: color-mix(in srgb, #e27a72 38%, #1c2024);
  --t-on-danger: #14171a;
  --bs-light: #e8e8e3;
  --bs-light-rgb: 232, 232, 227;
  --bs-light-text-emphasis: color-mix(in srgb, #e8e8e3 72%, #fff);
  --bs-light-bg-subtle: color-mix(in srgb, #e8e8e3 14%, #1c2024);
  --bs-light-border-subtle: color-mix(in srgb, #e8e8e3 38%, #1c2024);
  --t-on-light: #14171a;
  --bs-dark: #0d0f11;
  --bs-dark-rgb: 13, 15, 17;
  --bs-dark-text-emphasis: color-mix(in srgb, #0d0f11 72%, #fff);
  --bs-dark-bg-subtle: color-mix(in srgb, #0d0f11 14%, #1c2024);
  --bs-dark-border-subtle: color-mix(in srgb, #0d0f11 38%, #1c2024);
  --t-on-dark: #e8e8e3;
}

/* Page background sits one step behind cards, forms and tables. */
[data-theme^="ledger"] body,
[data-theme^="ledger"].t-page {
  background-color: var(--t-page-bg);
  color: var(--bs-body-color);
  font-family: var(--bs-body-font-family);
}

/* Light mode: the top navigation matches cards and tables, not the page. */
[data-theme="ledger"] body > header {
  background-color: var(--bs-body-bg);
}

[data-theme^="ledger"] h1, [data-theme^="ledger"] h2, [data-theme^="ledger"] h3,
[data-theme^="ledger"] h4, [data-theme^="ledger"] h5, [data-theme^="ledger"] h6,
[data-theme^="ledger"] .h1, [data-theme^="ledger"] .h2, [data-theme^="ledger"] .h3,
[data-theme^="ledger"] .h4, [data-theme^="ledger"] .h5, [data-theme^="ledger"] .h6,
[data-theme^="ledger"] .navbar-brand {
  font-weight: 600;
  letter-spacing: -0.01em;
}
[data-theme^="ledger"] .display-1, [data-theme^="ledger"] .display-2, [data-theme^="ledger"] .display-3,
[data-theme^="ledger"] .display-4, [data-theme^="ledger"] .display-5, [data-theme^="ledger"] .display-6 {
  font-weight: 500;
  letter-spacing: -0.02em;
}

/* Numbers are data: monospaced, tabular, aligned. */
[data-theme^="ledger"] .table,
[data-theme^="ledger"] .font-numeric { font-variant-numeric: tabular-nums; }
[data-theme^="ledger"] .font-numeric { font-family: var(--bs-font-monospace); }
[data-theme^="ledger"] .t-label {
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
}
[data-theme^="ledger"] .bg-sentiment-pos { background-color: var(--t-sentiment-pos) !important; }
[data-theme^="ledger"] .bg-sentiment-neu { background-color: var(--t-sentiment-neu) !important; }
[data-theme^="ledger"] .bg-sentiment-neg { background-color: var(--t-sentiment-neg) !important; }

/* Buttons: Bootstrap compiles variant colours to hex, so remap them to theme variables. */
[data-theme^="ledger"] .btn-primary, [data-theme^="ledger"] .btn-outline-primary { --t-c: var(--bs-primary); --t-on: var(--t-on-primary); --bs-btn-focus-shadow-rgb: var(--bs-primary-rgb); }
[data-theme^="ledger"] .text-bg-primary { color: var(--t-on-primary) !important; }
[data-theme^="ledger"] .btn-secondary, [data-theme^="ledger"] .btn-outline-secondary { --t-c: var(--bs-secondary); --t-on: var(--t-on-secondary); --bs-btn-focus-shadow-rgb: var(--bs-secondary-rgb); }
[data-theme^="ledger"] .text-bg-secondary { color: var(--t-on-secondary) !important; }
[data-theme^="ledger"] .btn-success, [data-theme^="ledger"] .btn-outline-success { --t-c: var(--bs-success); --t-on: var(--t-on-success); --bs-btn-focus-shadow-rgb: var(--bs-success-rgb); }
[data-theme^="ledger"] .text-bg-success { color: var(--t-on-success) !important; }
[data-theme^="ledger"] .btn-info, [data-theme^="ledger"] .btn-outline-info { --t-c: var(--bs-info); --t-on: var(--t-on-info); --bs-btn-focus-shadow-rgb: var(--bs-info-rgb); }
[data-theme^="ledger"] .text-bg-info { color: var(--t-on-info) !important; }
[data-theme^="ledger"] .btn-warning, [data-theme^="ledger"] .btn-outline-warning { --t-c: var(--bs-warning); --t-on: var(--t-on-warning); --bs-btn-focus-shadow-rgb: var(--bs-warning-rgb); }
[data-theme^="ledger"] .text-bg-warning { color: var(--t-on-warning) !important; }
[data-theme^="ledger"] .btn-danger, [data-theme^="ledger"] .btn-outline-danger { --t-c: var(--bs-danger); --t-on: var(--t-on-danger); --bs-btn-focus-shadow-rgb: var(--bs-danger-rgb); }
[data-theme^="ledger"] .text-bg-danger { color: var(--t-on-danger) !important; }
[data-theme^="ledger"] .btn-light, [data-theme^="ledger"] .btn-outline-light { --t-c: var(--bs-light); --t-on: var(--t-on-light); --bs-btn-focus-shadow-rgb: var(--bs-light-rgb); }
[data-theme^="ledger"] .text-bg-light { color: var(--t-on-light) !important; }
[data-theme^="ledger"] .btn-dark, [data-theme^="ledger"] .btn-outline-dark { --t-c: var(--bs-dark); --t-on: var(--t-on-dark); --bs-btn-focus-shadow-rgb: var(--bs-dark-rgb); }
[data-theme^="ledger"] .text-bg-dark { color: var(--t-on-dark) !important; }
[data-theme^="ledger"] .btn-primary,
[data-theme^="ledger"] .btn-secondary,
[data-theme^="ledger"] .btn-success,
[data-theme^="ledger"] .btn-info,
[data-theme^="ledger"] .btn-warning,
[data-theme^="ledger"] .btn-danger,
[data-theme^="ledger"] .btn-light,
[data-theme^="ledger"] .btn-dark {
  --bs-btn-color: var(--t-on);
  --bs-btn-bg: var(--t-c);
  --bs-btn-border-color: var(--t-c);
  --bs-btn-hover-color: var(--t-on);
  --bs-btn-hover-bg: color-mix(in srgb, var(--t-c) 86%, var(--t-shade));
  --bs-btn-hover-border-color: color-mix(in srgb, var(--t-c) 86%, var(--t-shade));
  --bs-btn-active-color: var(--t-on);
  --bs-btn-active-bg: color-mix(in srgb, var(--t-c) 78%, var(--t-shade));
  --bs-btn-active-border-color: color-mix(in srgb, var(--t-c) 78%, var(--t-shade));
  --bs-btn-disabled-color: var(--t-on);
  --bs-btn-disabled-bg: var(--t-c);
  --bs-btn-disabled-border-color: var(--t-c);
}
[data-theme^="ledger"] .btn-outline-primary,
[data-theme^="ledger"] .btn-outline-secondary,
[data-theme^="ledger"] .btn-outline-success,
[data-theme^="ledger"] .btn-outline-info,
[data-theme^="ledger"] .btn-outline-warning,
[data-theme^="ledger"] .btn-outline-danger,
[data-theme^="ledger"] .btn-outline-light,
[data-theme^="ledger"] .btn-outline-dark {
  --bs-btn-color: var(--t-c);
  --bs-btn-border-color: var(--t-c);
  --bs-btn-hover-color: var(--t-on);
  --bs-btn-hover-bg: var(--t-c);
  --bs-btn-hover-border-color: var(--t-c);
  --bs-btn-active-color: var(--t-on);
  --bs-btn-active-bg: var(--t-c);
  --bs-btn-active-border-color: var(--t-c);
  --bs-btn-disabled-color: var(--t-c);
  --bs-btn-disabled-bg: transparent;
  --bs-btn-disabled-border-color: var(--t-c);
}

/* Other components with hard-coded Bootstrap blue. */
[data-theme^="ledger"] .form-control:focus,
[data-theme^="ledger"] .form-select:focus,
[data-theme^="ledger"] .form-check-input:focus {
  border-color: color-mix(in srgb, var(--bs-primary) 55%, var(--bs-body-bg));
  box-shadow: 0 0 0 0.25rem var(--bs-focus-ring-color);
}
[data-theme^="ledger"] .form-check-input:checked {
  background-color: var(--bs-primary);
  border-color: var(--bs-primary);
}
[data-theme^="ledger"] .form-range::-webkit-slider-thumb { background-color: var(--bs-primary); }
[data-theme^="ledger"] .form-range::-moz-range-thumb { background-color: var(--bs-primary); }
[data-theme^="ledger"] .nav-pills {
  --bs-nav-pills-link-active-bg: var(--bs-primary);
  --bs-nav-pills-link-active-color: var(--t-on-primary);
}
[data-theme^="ledger"] .pagination {
  --bs-pagination-active-bg: var(--bs-primary);
  --bs-pagination-active-border-color: var(--bs-primary);
  --bs-pagination-active-color: var(--t-on-primary);
  --bs-pagination-focus-box-shadow: 0 0 0 0.25rem var(--bs-focus-ring-color);
}
[data-theme^="ledger"] .list-group {
  --bs-list-group-active-bg: var(--bs-primary);
  --bs-list-group-active-border-color: var(--bs-primary);
  --bs-list-group-active-color: var(--t-on-primary);
}
[data-theme^="ledger"] .dropdown-menu {
  --bs-dropdown-link-active-bg: var(--bs-primary);
  --bs-dropdown-link-active-color: var(--t-on-primary);
}
[data-theme^="ledger"] .progress,
[data-theme^="ledger"] .progress-stacked {
  --bs-progress-bar-bg: var(--bs-primary);
  --bs-progress-bar-color: var(--t-on-primary);
  --bs-progress-bg: var(--bs-secondary-bg);
}
[data-theme^="ledger"] .accordion {
  --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem var(--bs-focus-ring-color);
  --bs-accordion-active-color: var(--bs-primary-text-emphasis);
  --bs-accordion-active-bg: var(--bs-primary-bg-subtle);
}
[data-theme^="ledger"] .table-primary {
  --bs-table-color: var(--bs-body-color);
  --bs-table-bg: var(--bs-primary-bg-subtle);
  --bs-table-border-color: var(--bs-primary-border-subtle);
  --bs-table-hover-color: var(--bs-body-color);
  --bs-table-hover-bg: color-mix(in srgb, var(--bs-primary) 20%, var(--bs-body-bg));
}
