@charset "UTF-8";
/*---------------------------------------------------------------------------------

    Template Name: PreSkool - School Management Admin Dashboard Template
    Version      : 2.0
    Template URI: https://preclinic.dreamstechnologies.com/
    Author: Dreams Technologies
    Author URI: https://themeforest.net/user/dreamstechnologies

-----------------------------------------------------------------------------------

/*============================
[Table of CSS]

variables
switcher
accordion
alerts
badge
breadcrumb
buttons
cards
dropdown
forms
input_group
list_group
modals
navbar
navs_tabs
pagination
popovers
progress
tables
toast
tooltips
authentication

1. General
    variables
    switcher
    base
    Typography
2. Components
3. Layout
4. Plugins
5. Pages

1. General
2. Table
3. Helper Class
4. Bootstrap Classes
5. Header
6. Sidebar
7. Content
8. Login
9. Dashboard
10. Activity
11. Select2
12. Nav tabs
13. Holidays
14. Edit Profile
15. Chat
16. Focus Label
17. Leave
18. Employee
19. Events
20. Profile
21. Notifications
22. Roles & Permissions
23. Chat Right Sidebar
24. Invoice
25. Doctors
26. Add Doctor
27. Payslip
28. Attendance
29. Inbox
30. Mail View
31. Blog
32. Blog View
33. UI Kit
34. Error
35. Lock Screen
36. Voice call
37. Video Call
38. Incoming call
39. Notification settings
40. Chat Sidebar
41. Gallery
42. Settings
43. Responsive
72. Box layout
73. RTL
74. Responsive

========================================*/
/****** Utils ******/
/* ============================================================
   Global Typography — Font Import
   Inter is the template's primary typeface. Weights: 400 (Regular),
   500 (Medium), 600 (SemiBold), 700 (Bold). The family stack is
   defined in utils/_variables.scss ($font-family-primary).
   ============================================================ */
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap");

/*-----------------
	Global design system

	The single token configuration for the whole template. Bootstrap's custom
	properties are the public API; `utils/_variables.scss` holds the PreSkool
	brand choices that seed them. Almost every component style rule
	references the brand variable rather than restating a hex, so changing the
	brand in one place changes Bootstrap, the components and every module.

	No module may declare its own palette. If a genuinely new token is needed,
	it is added here, generically named, and inherited by everything.
-----------------*/
:root {
  /* brand + status colours — Bootstrap's slots, PreSkool's identity */
  --bs-primary: #1f3b60;
  --bs-primary-rgb: 31, 59, 96;
  --bs-secondary: #0e76bd;
  --bs-secondary-rgb: 14, 118, 189;
  --bs-success: #1ABE17;
  --bs-success-rgb: 26, 190, 23;
  --bs-warning: #EAB300;
  --bs-warning-rgb: 234, 179, 0;
  --bs-danger: #E82646;
  --bs-danger-rgb: 232, 38, 70;
  --bs-info: #0F65CD;
  --bs-info-rgb: 15, 101, 205;
  --bs-light: #E9EDF4;
  --bs-dark: #202C4B;
  /* surfaces */
  --bs-body-bg: #fff;
  --bs-secondary-bg: #F8FAFC;
  --bs-tertiary-bg: #F4F6FA;
  --bs-card-bg: var(--surface);
  /* ink */
  --bs-body-color: #6A7287;
  --bs-emphasis-color: #202C4B;
  --bs-heading-color: var(--bs-emphasis-color);
  --bs-secondary-color: #677788;
  --bs-tertiary-color: #838A9B;
  /* borders */
  --bs-border-color: #E9EDF4;
  /* accent tints — one alpha for every family, derived from the brand
     colours so a tinted chip always matches its solid counterpart */
  --tint-primary: rgba(31, 59, 96, 0.12);
  --tint-secondary: rgba(14, 118, 189, 0.12);
  --tint-success: rgba(26, 190, 23, 0.12);
  --tint-warning: rgba(234, 179, 0, 0.12);
  --tint-danger: rgba(232, 38, 70, 0.12);
  --tint-info: rgba(15, 101, 205, 0.12);
  --tint-purple: rgba(74, 0, 229, 0.12);
  --tint-teal: rgba(2, 168, 181, 0.12);
  --tint-pink: rgba(232, 62, 140, 0.12);
  /* extended accents Bootstrap has no slot for */
  --accent-purple: #4A00E5;
  --accent-teal: #02a8b5;
  --accent-pink: #E83E8C;
  --accent-indigo: #05C3FB;
  /* per-instance accent, set by the `.accent-*` modifiers */
  --accent: var(--bs-primary);
  --accent-soft: var(--tint-primary);
  --accent-strong: var(--bs-primary);
  /* component radii — Bootstrap's `.rounded-*` scale stays untouched, so
     these drive only the template's own components */
  --radius: 16px;
  --radius-sm: 12px;
  --radius-xs: 9px;
  /* promoted from the former _ui-tokens.scss: a stronger border for dashed
     drop targets, a neutral track for meters, and the mono stack for keys */
  --border-strong: #EDF1F6;
  --track: #F0F2F7;
  --font-mono: "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", monospace;
  /* elevation + motion */
  --shadow: 0 1px 2px rgba(16, 24, 40, .04);
  --shadow-lift: 0 14px 34px -14px rgba(16, 24, 40, .22);
  --transition: .2s cubic-bezier(.4, 0, .2, 1);
  /*----- neutral component ramp -----

    Promoted here from the former dashboard-widgets module, which declared its
    own palette against the rule stated above. The values are carried over
    unchanged so every consuming component renders exactly as before; only
    their ownership moved. In dark mode these already resolve to the same
    values as the `--bs-*` surfaces below.

    These are a cooler, flatter ramp than the brand tokens and read as the
    template's "quiet" surface set. Where a value was already identical to a
    global token it was dropped rather than restated: the widget radius is
    plain `--radius`. */
  --surface: #ffffff;
  --surface-soft: #f6f7fb;
  --border-soft: #e7eaf1;
  --muted: #6b7280;
  --heading: #111827;
  --radius-list: 11px;
  --tone-brand-soft: rgba(31, 59, 96, .10);
  --tone-success: #16a34a;
  --tone-success-soft: rgba(22, 163, 74, .12);
  --tone-warning: #d97706;
  --tone-warning-soft: rgba(217, 119, 6, .12);
  --tone-danger: #dc2626;
  --tone-danger-soft: rgba(220, 38, 38, .12);
  --tone-info: #0891b2;
  --tone-info-soft: rgba(8, 145, 178, .12);
  --tone-purple: #7b61ff;
  --tone-purple-soft: rgba(123, 97, 255, .12);
  --tone-pink: #db2777;
  --tone-pink-soft: rgba(219, 39, 119, .12);
  --tone-teal: #0d9488;
  --tone-teal-soft: rgba(13, 148, 136, .12);
  --shadow-card: 0 1px 2px rgba(15, 23, 42, .04), 0 6px 16px -8px rgba(15, 23, 42, .12);
  --shadow-card-lift: 0 12px 30px -12px rgba(15, 23, 42, .28);
  --transition-card: .22s cubic-bezier(.4, 0, .2, 1);
  /* component-local track/hover/border defaults — aliased to the tokens
     above rather than restating raw values, so gauges, meters, data lists
     and activity feeds inherit dark mode instead of staying light-only */
  --gauge-track: var(--track);
  --meter-track: var(--track);
  --data-list-border: var(--border-soft);
  --data-list-hover: var(--tone-brand-soft);
  --activity-feed-rail: var(--border-soft);
  --activity-feed-hover: var(--tone-brand-soft);
  --dt-surface-alt: var(--surface-soft);
}

[data-bs-theme=dark],
[data-theme=dark] {
  --bs-body-bg: #1a1d29;
  --bs-secondary-bg: #171a24;
  --bs-tertiary-bg: #1c1e25;
  --bs-emphasis-color: #f1f5f9;
  --bs-secondary-color: #94a3b8;
  --bs-tertiary-color: #6b7280;
  --bs-border-color: #2a2f3e;
  --bs-primary-bg-subtle: var(--tone-brand-soft);
  /* Bootstrap's rgba()-built utilities (.bg-body-tertiary, .bg-body-secondary,
     .text-bg-*, etc.) read the *-rgb channel twin of each token above, not
     the hex itself. Bootstrap ships its own dark values for these but keys
     them to [data-bs-theme=dark], which this project never sets — so
     without this block they silently stay pinned to the light channels. */
  --bs-body-bg-rgb: 26, 29, 41;
  --bs-secondary-bg-rgb: 23, 26, 36;
  --bs-tertiary-bg-rgb: 28, 30, 37;
  --bs-emphasis-color-rgb: 241, 245, 249;
  --shadow: 0 1px 2px rgba(0, 0, 0, .3);
  --shadow-lift: 0 14px 34px rgba(0, 0, 0, .4);
  --border-strong: rgba(255, 255, 255, .2);
  --track: rgba(255, 255, 255, .1);
  /* the neutral ramp's dark values — identical to the `--bs-*` surfaces above,
     which is why the two sets can finally share one definition */
  --surface: #1a1d29;
  --surface-soft: #171a24;
  --border-soft: #2a2f3e;
  --muted: #94a3b8;
  --heading: #f1f5f9;
}

/******* Base *******/
body {
  --bs-body-font-family: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  font-size: 14px;
  color: #6A7287;
  line-height: 1.5;
  background-color: #fff;
  overflow-y: auto;
  overflow-x: hidden;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

::selection {
  background: #1f3b60;
  color: #FFF;
  text-shadow: none;
}

img {
  max-width: 100%;
  height: auto;
  vertical-align: inherit;
}

* {
  outline: none;
}

button {
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

button:focus {
  box-shadow: none !important;
}

p {
  margin-bottom: 20px;
}

p:last-child {
  margin-bottom: 0;
}

strong {
  font-weight: 700;
}

h1,
.h1,
h2,
.h2,
h3,
.h3,
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  color: #202C4B;
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  font-weight: 700;
  letter-spacing: -0.01em;
  margin-bottom: 0;
}

ol,
ul {
  list-style: none;
  margin-block-end: 0;
  padding: 0;
}

ul {
  list-style: none;
}

ul.list-disc {
  list-style: disc;
  padding-left: 15px;
}

ul.list-disc ul {
  list-style-type: circle;
}

ul.list-decimal {
  list-style: decimal;
  padding-left: 15px;
}

ul.list-decimal ul {
  list-style-type: decimal;
}

ul.list-icon {
  list-style: none;
  padding-left: 0;
}

ul.list-icon>li {
  padding-left: 1.875rem;
  counter-increment: li;
}

ul.list-icon>li i,
ul.list-icon>li .feather-icon,
ul.list-icon>li .svg-icon {
  display: inline-block;
  height: 20px;
  width: 20px;
  text-align: center;
  margin-left: -1.25rem;
  position: relative;
  left: -10px;
  padding: 1px;
  top: -1px;
}

ul.list-icon>li i {
  font-size: 20px;
  top: 5px;
}

ul .btn-primary:not(:disabled):not(.disabled):active:focus,
ul .btn-primary:not(:disabled):not(.disabled).active:focus {
  box-shadow: none;
}

.bg-primary {
  background-color: #1f3b60 !important;
}

.bg-secondary {
  background-color: #0e76bd !important;
}

.bg-info {
  background-color: #0F65CD !important;
}

.bg-success {
  background-color: #1ABE17 !important;
}

.bg-warning {
  background-color: #EAB300 !important;
}

.bg-danger {
  background-color: #E82646 !important;
}

.bg-dark {
  background-color: #202C4B !important;
}

.bg-light {
  background-color: #E9EDF4 !important;
}

.bg-white {
  background-color: #FFF;
}

.bg-pink {
  background-color: #E83E8C !important;
}

.bg-purple {
  background-color: #4A00E5 !important;
}

.bg-teal {
  background-color: #02a8b5 !important;
}

.bg-blue {
  background-color: #339DFF !important;
}

.bg-gray {
  background: #F4F6FA;
}

.bg-primary {
  background-color: #1f3b60 !important;
}

.bg-primary.bg-opacity-10 {
  background-color: rgba(31, 59, 96, 0.1) !important;
}

.bg-primary.bg-opacity-25 {
  background-color: rgba(31, 59, 96, 0.25) !important;
}

.bg-primary.bg-opacity-50 {
  background-color: rgba(31, 59, 96, 0.5) !important;
}

.bg-primary.bg-opacity-75 {
  background-color: rgba(31, 59, 96, 0.75) !important;
}

.bg-primary.bg-opacity-100 {
  background-color: #1f3b60 !important;
}

.bg-secondary {
  background-color: #0e76bd !important;
}

.bg-secondary.bg-opacity-10 {
  background-color: rgba(14, 118, 189, 0.1) !important;
}

.bg-secondary.bg-opacity-25 {
  background-color: rgba(14, 118, 189, 0.25) !important;
}

.bg-secondary.bg-opacity-50 {
  background-color: rgba(14, 118, 189, 0.5) !important;
}

.bg-secondary.bg-opacity-75 {
  background-color: rgba(14, 118, 189, 0.75) !important;
}

.bg-secondary.bg-opacity-100 {
  background-color: #0e76bd !important;
}

.bg-info {
  background-color: #0F65CD !important;
}

.bg-info.bg-opacity-10 {
  background-color: rgba(15, 101, 205, 0.1) !important;
}

.bg-info.bg-opacity-25 {
  background-color: rgba(15, 101, 205, 0.25) !important;
}

.bg-info.bg-opacity-50 {
  background-color: rgba(15, 101, 205, 0.5) !important;
}

.bg-info.bg-opacity-75 {
  background-color: rgba(15, 101, 205, 0.75) !important;
}

.bg-info.bg-opacity-100 {
  background-color: #0f65cd !important;
}

.bg-success {
  background-color: #1ABE17 !important;
}

.bg-success.bg-opacity-10 {
  background-color: rgba(26, 190, 23, 0.1) !important;
}

.bg-success.bg-opacity-25 {
  background-color: rgba(26, 190, 23, 0.25) !important;
}

.bg-success.bg-opacity-50 {
  background-color: rgba(26, 190, 23, 0.5) !important;
}

.bg-success.bg-opacity-75 {
  background-color: rgba(26, 190, 23, 0.75) !important;
}

.bg-success.bg-opacity-100 {
  background-color: #1abe17 !important;
}

.bg-warning {
  background-color: #EAB300 !important;
}

.bg-warning.bg-opacity-10 {
  background-color: rgba(234, 179, 0, 0.1) !important;
}

.bg-warning.bg-opacity-25 {
  background-color: rgba(234, 179, 0, 0.25) !important;
}

.bg-warning.bg-opacity-50 {
  background-color: rgba(234, 179, 0, 0.5) !important;
}

.bg-warning.bg-opacity-75 {
  background-color: rgba(234, 179, 0, 0.75) !important;
}

.bg-warning.bg-opacity-100 {
  background-color: #eab300 !important;
}

.bg-danger {
  background-color: #E82646 !important;
}

.bg-danger.bg-opacity-10 {
  background-color: rgba(232, 38, 70, 0.1) !important;
}

.bg-danger.bg-opacity-25 {
  background-color: rgba(232, 38, 70, 0.25) !important;
}

.bg-danger.bg-opacity-50 {
  background-color: rgba(232, 38, 70, 0.5) !important;
}

.bg-danger.bg-opacity-75 {
  background-color: rgba(232, 38, 70, 0.75) !important;
}

.bg-danger.bg-opacity-100 {
  background-color: #e82646 !important;
}

.bg-dark {
  background-color: #202C4B !important;
}

.bg-dark.bg-opacity-10 {
  background-color: rgba(32, 44, 75, 0.1) !important;
}

.bg-dark.bg-opacity-25 {
  background-color: rgba(32, 44, 75, 0.25) !important;
}

.bg-dark.bg-opacity-50 {
  background-color: rgba(32, 44, 75, 0.5) !important;
}

.bg-dark.bg-opacity-75 {
  background-color: rgba(32, 44, 75, 0.75) !important;
}

.bg-dark.bg-opacity-100 {
  background-color: #202c4b !important;
}

.bg-light {
  background-color: #E9EDF4 !important;
}

.bg-light.bg-opacity-10 {
  background-color: rgba(233, 237, 244, 0.1) !important;
}

.bg-light.bg-opacity-25 {
  background-color: rgba(233, 237, 244, 0.25) !important;
}

.bg-light.bg-opacity-50 {
  background-color: rgba(233, 237, 244, 0.5) !important;
}

.bg-light.bg-opacity-75 {
  background-color: rgba(233, 237, 244, 0.75) !important;
}

.bg-light.bg-opacity-100 {
  background-color: #e9edf4 !important;
}

.bg-skyblue {
  background-color: #05C3FB !important;
}

.bg-primary {
  background-color: #1f3b60 !important;
  border: 1px solid #1f3b60 !important;
  color: #FFF;
}

.bg-secondary {
  background-color: #0e76bd !important;
  border: 1px solid #0e76bd !important;
  color: #FFF;
}

.bg-success {
  background-color: #1ABE17 !important;
  border: 1px solid #1ABE17 !important;
  color: #FFF;
}

.bg-info {
  background-color: #0F65CD !important;
  border: 1px solid #0F65CD !important;
  color: #FFF;
}

.bg-warning {
  background-color: #EAB300 !important;
  border: 1px solid #EAB300 !important;
  color: #FFF;
}

.bg-danger {
  background-color: #E82646 !important;
  border: 1px solid #E82646 !important;
  color: #FFF;
}

.bg-dark {
  background-color: #202C4B !important;
  border: 1px solid #202C4B !important;
  color: #FFF;
}

.bg-light {
  background-color: #E9EDF4 !important;
  border: 1px solid #E9EDF4 !important;
  color: #FFF;
}

.bg-black {
  background-color: #000 !important;
  border: 1px solid #000 !important;
  color: #FFF;
}

.bg-purple {
  background-color: #4A00E5 !important;
  border: 1px solid #4A00E5 !important;
  color: #FFF;
}

.bg-yellow {
  background-color: #ffff00 !important;
  border: 1px solid #ffff00 !important;
  color: #FFF;
}

.bg-teal {
  background-color: #02a8b5 !important;
  border: 1px solid #02a8b5 !important;
  color: #FFF;
}

.bg-soft-primary {
  background-color: #ECEFFC;
  color: #1f3b60;
}

.bg-soft-secondary {
  background-color: #D4F0F3;
  color: #0e76bd;
}

.bg-soft-success {
  background-color: #BAECB9;
  color: #1ABE17;
}

.bg-soft-danger {
  background-color: #F8BEC8;
  color: #E82646;
}

.bg-soft-warning {
  background-color: #FDE9C1;
  color: #EAB300;
}

.bg-soft-info {
  background-color: rgba(15, 101, 205, 0.3);
  color: #0F65CD;
}

.bg-soft-light {
  background-color: rgba(233, 237, 244, 0.9);
  color: #6A7287;
}

.bg-soft-dark {
  background-color: rgba(32, 44, 75, 0.3);
  color: #FFF;
}

.bg-light {
  color: #6A7287;
}

.bg-primary-gradient {
  background: linear-gradient(180deg, #1f3b60 0%, #96adfd 100%) !important;
  color: #FFF;
}

.bg-secondary-gradient {
  background: linear-gradient(180deg, #0e76bd 0%, #a3ebf5 100%) !important;
  color: #FFF;
}

.bg-warning-gradient {
  background: linear-gradient(180deg, #EAB300 0%, #fee48d 100%) !important;
  color: #FFF;
}

.bg-info-gradient {
  background: linear-gradient(180deg, #0F65CD 0%, #a1cbfe 100%) !important;
  color: #FFF;
}

.bg-success-gradient {
  background: linear-gradient(180deg, #1ABE17 0%, #7eff7c 100%) !important;
  color: #FFF;
}

.bg-danger-gradient {
  background: linear-gradient(180deg, #E82646 0%, #fba1b0 100%) !important;
  color: #FFF;
}

.bg-orange-gradient {
  background: linear-gradient(to right, #FD7E14 0%, 100%) !important;
  color: #FFF;
}

.bg-purple-gradient {
  background: linear-gradient(to right, #4A00E5 0%, #9b25b7 100%) !important;
  color: #FFF;
}

.bg-teal-gradient {
  background: linear-gradient(180deg, #E6F9FF 0%, #FFFFFF 100%) !important;
  color: #FFF;
}

.bg-light-gradient {
  background: linear-gradient(180deg, #D1D6DE 0%, #FFFFFF 100%) !important;
  color: #000;
}

.bg-dark-gradient {
  background: linear-gradient(180deg, #F3F6FF 0%, #FFFFFF 100%) !important;
  color: #FFF;
}

.bg-outline-primary {
  background-color: #FFF;
  border: 1px solid #1f3b60;
  color: #1f3b60;
}

.bg-outline-secondary {
  background-color: #FFF;
  border: 1px solid #0e76bd;
  color: #0e76bd;
}

.bg-outline-warning {
  background-color: #FFF;
  border: 1px solid #EAB300;
  color: #EAB300;
}

.bg-outline-info {
  background-color: #FFF;
  border: 1px solid #0F65CD;
  color: #0F65CD;
}

.bg-outline-success {
  background-color: #FFF;
  border: 1px solid #1ABE17;
  color: #1ABE17;
}

.bg-outline-danger {
  background-color: #FFF;
  border: 1px solid #E82646;
  color: #E82646;
}

.bg-outline-dark {
  background-color: #FFF;
  border: 1px solid #202C4B;
  color: #202C4B;
}

.bg-outline-light {
  background-color: #FFF;
  border: 1px solid #E9EDF4 !important;
  color: #000 !important;
}

.bg-primary-transparent {
  background-color: #F2F5FF !important;
  color: #1f3b60 !important;
}

.bg-primary-transparent:hover {
  background-color: #F2F5FF !important;
  color: #1f3b60 !important;
}

.bg-secondary-transparent {
  background-color: #E8FCFF !important;
  color: #0e76bd !important;
}

.bg-secondary-transparent:hover {
  background-color: #E8FCFF !important;
  color: #0e76bd !important;
}

.bg-purple-transparent {
  background-color: #F3EDFF !important;
  color: #4A00E5 !important;
}

.bg-purple-transparent:hover {
  background-color: #F3EDFF !important;
  color: #4A00E5 !important;
}

.bg-pink-transparent {
  background-color: #FDE6F8 !important;
  color: #E83E8C !important;
}

.bg-pink-transparent:hover {
  background-color: #FDE6F8 !important;
  color: #E83E8C !important;
}

.bg-info-transparent {
  background-color: #E7F1FC !important;
  color: #0F65CD !important;
}

.bg-info-transparent:hover {
  background-color: #E7F1FC !important;
  color: #0F65CD !important;
}

.bg-success-transparent {
  background-color: #E8F9E8 !important;
  color: #1ABE17 !important;
}

.bg-success-transparent:hover {
  background-color: #E8F9E8 !important;
  color: #1ABE17 !important;
}

.bg-warning-transparent {
  background-color: #FEF8EA !important;
  color: #EAB300 !important;
}

.bg-warning-transparent:hover {
  background-color: #FEF8EA !important;
  color: #EAB300 !important;
}

.bg-danger-transparent {
  background-color: #FDE9ED !important;
  color: #E82646 !important;
}

.bg-danger-transparent:hover {
  background-color: #FDE9ED !important;
  color: #E82646 !important;
}

.bg-light-transparent {
  background-color: rgba(233, 237, 244, 0.5) !important;
  color: #E9EDF4 !important;
}

.bg-light-transparent:hover {
  background-color: rgba(233, 237, 244, 0.5) !important;
  color: #6A7287 !important;
}

.bg-skyblue-transparent {
  background-color: #E6F9FF !important;
  color: #05C3FB !important;
}

.bg-skyblue-transparent:hover {
  background-color: #E6F9FF !important;
  color: #05C3FB !important;
}

.bg-primary-subtle {
  background-color: #F2F5FF !important;
}

.bg-secondary-subtle {
  background-color: #E8FCFF !important;
}

.bg-success-subtle {
  background-color: #E8F9E8 !important;
}

.bg-danger-subtle {
  background-color: #FDE9ED !important;
}

.bg-warning-subtle {
  background-color: #FEF8EA !important;
}

.bg-info-subtle {
  background-color: #E7F1FC !important;
}

.bg-light-subtle {
  background-color: #D1D6DE !important;
}

/* The tint utilities above are solid light hexes with no dark-mode
   counterpart, so every icon badge/stat-tile/card-header built on them
   (bg-primary-transparent, bg-success-transparent, etc.) shows a light
   patch in dark mode. Re-point each at the matching --tone-*-soft token,
   already dark-aware, instead of restating new colours. */
[data-theme=dark] .bg-primary-transparent,
[data-theme=dark] .bg-primary-subtle,
[data-theme=dark] .bg-transparent-primary,
[data-bs-theme=dark] .bg-primary-transparent,
[data-bs-theme=dark] .bg-primary-subtle,
[data-bs-theme=dark] .bg-transparent-primary {
  background-color: var(--tone-brand-soft) !important;
}

[data-theme=dark] .bg-primary-transparent:hover,
[data-theme=dark] .bg-primary-subtle:hover,
[data-theme=dark] .bg-transparent-primary:hover,
[data-bs-theme=dark] .bg-primary-transparent:hover,
[data-bs-theme=dark] .bg-primary-subtle:hover,
[data-bs-theme=dark] .bg-transparent-primary:hover {
  background-color: var(--tone-brand-soft) !important;
}

[data-theme=dark] .bg-purple-transparent,
[data-bs-theme=dark] .bg-purple-transparent {
  background-color: var(--tone-purple-soft) !important;
}

[data-theme=dark] .bg-purple-transparent:hover,
[data-bs-theme=dark] .bg-purple-transparent:hover {
  background-color: var(--tone-purple-soft) !important;
}

[data-theme=dark] .bg-pink-transparent,
[data-bs-theme=dark] .bg-pink-transparent {
  background-color: var(--tone-pink-soft) !important;
}

[data-theme=dark] .bg-pink-transparent:hover,
[data-bs-theme=dark] .bg-pink-transparent:hover {
  background-color: var(--tone-pink-soft) !important;
}

[data-theme=dark] .bg-info-transparent,
[data-theme=dark] .bg-info-subtle,
[data-bs-theme=dark] .bg-info-transparent,
[data-bs-theme=dark] .bg-info-subtle {
  background-color: var(--tone-info-soft) !important;
}

[data-theme=dark] .bg-info-transparent:hover,
[data-theme=dark] .bg-info-subtle:hover,
[data-bs-theme=dark] .bg-info-transparent:hover,
[data-bs-theme=dark] .bg-info-subtle:hover {
  background-color: var(--tone-info-soft) !important;
}

[data-theme=dark] .bg-success-transparent,
[data-theme=dark] .bg-success-subtle,
[data-bs-theme=dark] .bg-success-transparent,
[data-bs-theme=dark] .bg-success-subtle {
  background-color: var(--tone-success-soft) !important;
}

[data-theme=dark] .bg-success-transparent:hover,
[data-theme=dark] .bg-success-subtle:hover,
[data-bs-theme=dark] .bg-success-transparent:hover,
[data-bs-theme=dark] .bg-success-subtle:hover {
  background-color: var(--tone-success-soft) !important;
}

[data-theme=dark] .bg-warning-transparent,
[data-theme=dark] .bg-warning-subtle,
[data-bs-theme=dark] .bg-warning-transparent,
[data-bs-theme=dark] .bg-warning-subtle {
  background-color: var(--tone-warning-soft) !important;
}

[data-theme=dark] .bg-warning-transparent:hover,
[data-theme=dark] .bg-warning-subtle:hover,
[data-bs-theme=dark] .bg-warning-transparent:hover,
[data-bs-theme=dark] .bg-warning-subtle:hover {
  background-color: var(--tone-warning-soft) !important;
}

[data-theme=dark] .bg-danger-transparent,
[data-theme=dark] .bg-danger-subtle,
[data-bs-theme=dark] .bg-danger-transparent,
[data-bs-theme=dark] .bg-danger-subtle {
  background-color: var(--tone-danger-soft) !important;
}

[data-theme=dark] .bg-danger-transparent:hover,
[data-theme=dark] .bg-danger-subtle:hover,
[data-bs-theme=dark] .bg-danger-transparent:hover,
[data-bs-theme=dark] .bg-danger-subtle:hover {
  background-color: var(--tone-danger-soft) !important;
}

[data-theme=dark] .bg-teal-transparent,
[data-bs-theme=dark] .bg-teal-transparent {
  background-color: var(--tone-teal-soft) !important;
}

[data-theme=dark] .bg-secondary-transparent,
[data-theme=dark] .bg-secondary-subtle,
[data-bs-theme=dark] .bg-secondary-transparent,
[data-bs-theme=dark] .bg-secondary-subtle {
  background-color: rgba(14, 118, 189, 0.16) !important;
}

[data-theme=dark] .bg-secondary-transparent:hover,
[data-theme=dark] .bg-secondary-subtle:hover,
[data-bs-theme=dark] .bg-secondary-transparent:hover,
[data-bs-theme=dark] .bg-secondary-subtle:hover {
  background-color: rgba(14, 118, 189, 0.16) !important;
}

[data-theme=dark] .bg-skyblue-transparent,
[data-bs-theme=dark] .bg-skyblue-transparent {
  background-color: rgba(5, 195, 251, 0.16) !important;
}

[data-theme=dark] .bg-skyblue-transparent:hover,
[data-bs-theme=dark] .bg-skyblue-transparent:hover {
  background-color: rgba(5, 195, 251, 0.16) !important;
}

[data-theme=dark] .bg-light-transparent,
[data-theme=dark] .bg-light-subtle,
[data-bs-theme=dark] .bg-light-transparent,
[data-bs-theme=dark] .bg-light-subtle {
  background-color: rgba(255, 255, 255, 0.06) !important;
}

[data-theme=dark] .bg-light-transparent:hover,
[data-theme=dark] .bg-light-subtle:hover,
[data-bs-theme=dark] .bg-light-transparent:hover,
[data-bs-theme=dark] .bg-light-subtle:hover {
  background-color: rgba(255, 255, 255, 0.06) !important;
}

.bg-gray-100 {
  background-color: #E6E8EB;
}

.bg-gray-200 {
  background-color: #CDD0D7;
}

.bg-gray-300 {
  background-color: #B5B9C3;
}

.bg-gray-400 {
  background-color: #9CA1AF;
}

.bg-gray-500 {
  background-color: #838A9B;
}

.bg-gray-600 {
  background-color: #6A7287;
}

.bg-gray-700 {
  background-color: #515B73;
}

.bg-gray-800 {
  background-color: #39435F;
}

.bg-gray-900 {
  background-color: #202C4B;
}

.bg-light-100 {
  background-color: #FDFDFE !important;
}

.bg-light-300 {
  background-color: #F8FAFC !important;
}

.bg-light-400 {
  background-color: #F6F8FB !important;
}

.bg-light-500 {
  background-color: #F4F6FA !important;
}

.bg-success-800 {
  background-color: #48CB45 !important;
}

.svg-primary {
  fill: #1f3b60;
}

.svg-secondary {
  fill: #0e76bd;
}

.svg-success {
  fill: #1ABE17;
}

.svg-danger {
  fill: #E82646;
}

.svg-warning {
  fill: #EAB300;
}

.svg-white {
  fill: #FFF;
}

.svg-black {
  fill: #000;
}

.svg-pink {
  fill: #E83E8C;
}

.svg-orange {
  fill: #FD7E14;
}

.svg-purple {
  fill: #4A00E5;
}

.svg-indigo {
  fill: #05C3FB;
}

.svg-info {
  fill: #0F65CD;
}

.svg-yellow {
  fill: #ffff00;
}

.svg-light {
  fill: #E9EDF4;
}

.svg-dark {
  fill: #202C4B;
}

.svg-teal {
  fill: #02a8b5;
}

.svg-default {
  fill: #6A7287;
}

.color-container {
  width: 5rem;
  height: 5rem;
  border-radius: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 3rem;
}

.text-container {
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
}

.color-box {
  width: 80px;
  height: 80px;
  border-radius: 4px;
  margin-right: 0.75rem;
  margin-bottom: 0.75rem;
}

.badge-soft-pending {
  background: #E6F9FF;
  color: #05C3FB;
}

.bg-pending {
  background: #05C3FB;
  color: #FFF;
}

.bg-light-200 {
  background: #FBFBFD;
}

.bg-light-300 {
  background: #F8FAFC;
}

.bg-teal-transparent {
  background: #E6F9FF;
}

.bg-transparent-primary {
  background: #F2F5FF;
}

.bg-transparent-dark {
  background: #F3F6FF;
}

.bg-transparent-pending {
  background: #E6F9FF;
}

.bg-transparent-warning {
  background: #FEF8EA;
}

.bg-transparent-light {
  background: #E9EDF4;
}

.bg-transparent-danger {
  background: #FDE9ED;
}

.bg-transparent-success {
  background: #E8F9E8;
}

.bg-transparent-info {
  background: #E7F1FC;
}

.bg-light-gray {
  background: #F4F6FA;
}

.bg-light-orange {
  background: #D8DFF9;
}

.bg-light-orange span {
  background: #D8DFF9;
}

.bg-light-red {
  background: #FAD4DA;
}

.bg-light-red span {
  background: #FAD4DA;
}

.bg-light-green {
  background: #BAECB9;
}

.bg-light-green span {
  background: #BAECB9;
}

.bg-01 {
  background: url("../img/bg/star-bg-01.svg") no-repeat;
}

.bg-02 {
  background: url("../img/bg/star-bg-02.svg") no-repeat;
}

.bg-03 {
  background-image: url("../img/bg/bg-01.png"), url("../img/bg/shape-05.png");
  background-position: right, right;
  background-size: contain;
  background-repeat: no-repeat;
}

@media (max-width: 575.98px) {
  .bg-03 {
    background-image: none;
  }
}

.account-page .bg-01 {
  background-image: url(../img/authentication/authentication-bg.svg);
  background-repeat: no-repeat;
  background-position: bottom left;
  background-size: 100%;
}

/****** Layout ******/
::-webkit-scrollbar {
  width: 5px;
  height: 5px;
  border-radius: 50px !important;
}

::-webkit-scrollbar-track {
  background: #F4F6FA;
}

::-webkit-scrollbar-thumb {
  background: #CDD0D7;
}

::-webkit-scrollbar-thumb:hover {
  background: #CDD0D7;
}

.swal2-header .swal2-title {
  font-size: 18px;
}

.checkboxs {
  display: block;
  cursor: pointer;
  user-select: none;
  position: relative;
  padding-left: 25px;
}

.checkboxs input {
  position: absolute;
  opacity: 0;
  cursor: pointer;
  height: 0;
  width: 0;
}

.checkboxs input~.checkmarks {
  border: 1px solid #E9EDF4;
  border-radius: 2px;
}

.checkboxs input:checked~.checkmarks {
  background-color: #1f3b60;
  border-color: #1f3b60;
}

.checkboxs input:checked~.checkmarks:after {
  display: block;
}

.checkboxs .checkmarks {
  height: 18px;
  width: 18px;
  position: absolute;
  top: 2px;
  left: 0;
}

.checkboxs .checkmarks::after {
  content: "";
  position: absolute;
  display: none;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  content: "\f00c";
  font-family: "Font Awesome 5 Free";
  color: #FFF;
  font-weight: 600;
  font-size: 10px;
}

.page-wrapper {
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
  margin: 0 0 0 252px;
  padding: 56px 0 0;
  position: relative;
  left: 0;
  -webkit-transition: all 0.2s ease;
  -ms-transition: all 0.2s ease;
  transition: all 0.2s ease;
}

@media (max-width: 991.98px) {
  .page-wrapper {
    margin: 0;
    padding: 60px 0 0;
  }
}

.page-wrapper .content {
  padding: 24px;
  background: #FBFBFD;
  padding-bottom: 0;
}

@media (max-width: 991.98px) {
  .page-wrapper .content {
    padding: 15px;
    padding-bottom: 0;
  }
}

.page-wrapper .content.content-two {
  padding-bottom: 24px;
}

@media (max-width: 767.98px) {
  .page-wrapper .content.content-two {
    padding-bottom: 15px;
  }
}

.page-header {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
  flex-wrap: wrap;
  margin-bottom: 10px;
}

.page-header .breadcrumb {
  margin-bottom: 0;
}

@media (max-width: 575.98px) {
  .page-header {
    flex-direction: column;
    align-items: self-start;
  }
}

.page-header .page-title {
  margin-bottom: 10px;
}

.page-header h3 {
  font-weight: 700;
  color: #202C4B;
  font-size: 18px;
}

@media (max-width: 991.98px) {
  .page-header h3 {
    font-size: 14px;
  }
}

.page-header h4 {
  font-weight: 600;
  color: #202C4B;
  font-size: 18px;
  margin-bottom: 5px;
}

@media (max-width: 991.98px) {
  .page-header h4 {
    font-size: 18px;
  }
}

.page-header h6 {
  font-size: 14px;
  color: #515B73;
  font-weight: 400;
}

@media (max-width: 991.98px) {
  .page-header h6 {
    font-size: 12px;
  }
}

@media (max-width: 575.98px) {
  .page-header h6 {
    font-size: 12px;
    margin-bottom: 20px;
  }
}

/*-----------------
    Page title

    Moved out of app-new.css, where it was scoped to `body.mui-premium`.
    The colour previously came from a `--cat-text-strong` custom property that
    lived alongside it; the literal value is inlined so the rule stands alone.
-----------------*/
.page-wrapper>.content .page-header .page-title,
.page-wrapper>.content .page-title {
  font-size: 32px;
  font-weight: 700;
  letter-spacing: -0.02em;
  color: #18181b;
  line-height: 1.2;
}

@media (max-width: 575.98px) {

  .page-wrapper>.content .page-header .page-title,
  .page-wrapper>.content .page-title {
    font-size: 24px;
  }
}

[data-theme=dark] .page-wrapper>.content .page-header .page-title,
[data-theme=dark] .page-wrapper>.content .page-title,
[data-bs-theme=dark] .page-wrapper>.content .page-header .page-title,
[data-bs-theme=dark] .page-wrapper>.content .page-title {
  color: #f4f4f5;
}

/* =============================================================================
   PreSkool — Header Component
   ============================================================================= */
/* ---------- Dropdown Entrance Animation ----------

   Animate the independent `translate` property, never `transform`.
   Popper positions every dropdown with an inline `transform: translate3d(…)`,
   and a keyframe touching `transform` outranks that inline style for the
   length of the animation — the menu flies in from the wrong corner and
   snaps into place when the animation ends. `translate` composes with
   Popper's transform instead of replacing it. */
@keyframes muiDropIn {
  from {
    opacity: 0;
    translate: 0 8px;
  }

  to {
    opacity: 1;
    translate: 0 0;
  }
}

/* ---------- Header Container ---------- */
.header {
  height: 60px;
  z-index: 999;
  background: #FFF !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  border-bottom: 1px solid #E9EDF4;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 4px 12px rgba(15, 23, 42, 0.05) !important;
  position: fixed;
  top: 0;
  right: 0;
  left: 0;
  display: flex;
  align-items: center;
  -webkit-transition: all 0.3s ease;
  -ms-transition: all 0.3s ease;
  transition: all 0.3s ease;
}

/* Brand / Logo Container */
.header .header-left {
  display: flex;
  align-items: center;
  justify-content: space-between;
  float: left;
  height: 60px;
  width: 280px;
  z-index: 1;
  background: #F8FAFC;
  border-right: 1px solid #E9EDF4;
  padding: 0 12px;
  position: relative;
  text-align: center;
  -webkit-transition: all 0.3s ease;
  -ms-transition: all 0.3s ease;
  transition: all 0.3s ease;
}

.header .header-left .logo,
.header .header-left .dark-logo {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  line-height: 1.2;
  text-decoration: none;
}

.header .header-left .logo img,
.header .header-left .dark-logo img {
  width: 50px;
  height: 50px;
  object-fit: contain;
  flex-shrink: 0;
}

.header .header-left .aea-brand-name {
  font-size: 17px;
  font-weight: 700;
  color: #1e293b;
  white-space: nowrap;
  letter-spacing: -0.2px;
}

@media (max-width: 991.98px) {

  .header .header-left .logo,
  .header .header-left .dark-logo {
    justify-content: center;
    width: 100%;
  }

  .header .header-left .logo img,
  .header .header-left .dark-logo img {
    width: 38px;
    height: 38px;
  }
}

.header .header-left .dark-logo {
  display: none;
}

.header .header-left .logo-small {
  display: none;
}

.header .header-left .logo-small img {
  width: 32px;
  height: 32px;
  object-fit: contain;
}

.header .header-left #toggle_btn {
  font-size: 18px;
  padding: 4px;
  border-radius: 6px;
  color: #202C4B;
  display: flex;
  align-items: center;
  justify-content: center;
  -webkit-transition: all 0.2s ease;
  -ms-transition: all 0.2s ease;
  transition: all 0.2s ease;
}

.header .header-left #toggle_btn:hover {
  color: #1f3b60;
}

@media (max-width: 991.98px) {
  .header .header-left {
    width: 100%;
    border-right: 0;
  }

  .header .header-left #toggle_btn {
    display: none;
  }
}

/* ---------- Mobile Button ---------- */
.header .mobile_btn {
  display: none;
  float: left;
}

@media (max-width: 991.98px) {
  .header .mobile_btn {
    color: #1f3b60;
    font-size: 24px;
    height: 60px;
    line-height: 60px;
    width: 60px;
    z-index: 10;
    padding: 0 20px;
    position: absolute;
    top: 0;
    left: 0;
    display: flex;
    align-items: center;
    justify-content: center;
  }
}

.header .mobile_btn .bar-icon {
  display: inline-block;
  width: 31px;
  margin-top: 10px;
}

.header .mobile_btn .bar-icon span {
  background-color: #1f3b60;
  display: block;
  float: left;
  height: 3px;
  margin-bottom: 7px;
  width: 31px;
  border-radius: 2px;
  -webkit-transition: all 0.5s;
  -ms-transition: all 0.5s;
  transition: all 0.5s;
}

.header .mobile_btn .bar-icon span:nth-child(2) {
  width: 16px;
}

/* ---------- Responsive Search Trigger (mobile only) ---------- */
.header .responsive-search {
  display: none;
  color: #202C4B;
  font-size: 20px;
  height: 60px;
  line-height: 60px;
  padding: 0 15px;
}

@media (max-width: 991.98px) {
  .header .responsive-search {
    display: block;
  }
}

/* ---------- Mobile User Menu ---------- */
.header .mobile-user-menu {
  display: none;
  float: right;
  font-size: 24px;
  height: 60px;
  line-height: 60px;
  text-align: right;
  width: 60px;
  z-index: 10;
  padding: 0 20px;
  position: absolute;
  top: 0;
  right: 0;
}

@media (max-width: 991.98px) {
  .header .mobile-user-menu {
    display: block;
  }
}

.header .mobile-user-menu a {
  color: #1f3b60;
  padding: 0;
}

.header .mobile-user-menu a::after {
  display: none;
}

.header .mobile-user-menu .dropdown-menu {
  padding: 0;
}

.header .mobile-user-menu .dropdown-menu a {
  color: #515B73;
  line-height: 40px;
  padding: 0 10px;
}

/* ---------- User Menu Nav ---------- */
.header .header-user {
  padding: 0 12px;
  display: flex;
  align-items: center;
  height: 100%;
  flex: 1;
  justify-content: space-between;
}

@media (max-width: 991.98px) {
  .header .header-user {
    display: none;
  }
}

.header .header-user .user-menu {
  display: flex;
  align-items: center;
  margin: 0;
  position: relative;
  height: 100%;
  width: 100%;
  border-bottom: 0;
  padding: 0 12px;
  gap: 8px;
  -webkit-transition: all 0.3s ease;
  -ms-transition: all 0.3s ease;
  transition: all 0.3s ease;
}

.header .header-user .user-menu>.d-flex.align-items-center {
  gap: 8px;
  margin-left: auto;
}

.header .header-user .user-menu>.d-flex.align-items-center>.pe-1,
.header .header-user .user-menu>.d-flex.align-items-center>.dropdown,
.header .header-user .user-menu>.d-flex.align-items-center>div {
  padding: 0 !important;
  margin: 0 !important;
}

.header .header-user .user-menu>li {
  margin-left: 0;
}

.header .header-user .user-menu>li .dropdown-toggle::after {
  display: none;
  border: 0;
}

/* ---------- Action Buttons & Icon Controls ---------- */
.header .btn-icon,
.header .btn-outline-light.bg-white {
  border-radius: 12px !important;
  border: 1px solid #E9EDF4 !important;
  background: #FFF !important;
  color: #202C4B !important;
  box-shadow: none !important;
  transform: none !important;
  margin: 0 !important;
  -webkit-transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
  -ms-transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
  transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.header .btn-icon:hover,
.header .btn-outline-light.bg-white:hover {
  background: #f8fafc !important;
  border-color: rgba(31, 59, 96, 0.35) !important;
  color: #1f3b60 !important;
  transform: none !important;
  box-shadow: none !important;
}

.header .btn-icon:hover i,
.header .btn-outline-light.bg-white:hover i {
  transform: none !important;
}

.header .btn-icon:active,
.header .btn-outline-light.bg-white:active {
  background: #f1f5f9 !important;
  transform: none !important;
  box-shadow: none !important;
}

.header .btn-icon {
  width: 42px;
  height: 42px;
  padding: 0 !important;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  position: relative;
}

.header .btn-icon i {
  font-size: 19px;
  line-height: 1;
  -webkit-transition: transform 0.2s ease;
  -ms-transition: transform 0.2s ease;
  transition: transform 0.2s ease;
}

/* ---------- Count Badge ---------- */
.header .mui-count {
  position: absolute;
  top: -6px;
  right: -6px;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  font-size: 10px;
  font-weight: 700;
  line-height: 15px;
  text-align: center;
  color: #FFF;
  background: #1f3b60;
  border-radius: 50rem;
  border: 2px solid #FFF;
}

/* ---------- Dark Mode Toggle ---------- */
.header .dark-mode-toggle {
  margin: 0 !important;
}

.header .dark-mode-toggle:not(.activate) {
  display: none !important;
}

.header .dark-mode-toggle.activate {
  display: inline-flex !important;
}

/* ---------- Global Search Box ---------- */
.header .top-nav-search {
  display: flex;
  align-items: center;
}

.nav-searchinputs .header .top-nav-search {
  margin-right: auto;
}

.header .top-nav-search .searchinputs {
  position: relative;
  display: flex;
  align-items: center;
}

.header .top-nav-search .searchinputs input {
  width: 320px;
  max-width: 100%;
  height: 42px;
  border-radius: 12px;
  padding: 0 3.5rem 0 2.6rem;
  background: #FFF;
  border: 1px solid #E9EDF4;
  font-size: 14px;
  color: #515B73;
  box-shadow: inset 0 1px 2px rgba(15, 23, 42, 0.03);
  -webkit-transition: width 0.2s ease, background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
  -ms-transition: width 0.2s ease, background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
  transition: width 0.2s ease, background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
}

@media (max-width: 1199.98px) {
  .header .top-nav-search .searchinputs input {
    width: 250px;
  }
}

.header .top-nav-search .searchinputs input::placeholder {
  color: #9CA1AF;
}

.header .top-nav-search .searchinputs input:focus {
  width: 380px;
  background: #FFF;
  border-color: #1f3b60;
  box-shadow: 0 0 0 4px rgba(31, 59, 96, 0.14);
  outline: none;
}

.header .top-nav-search .searchinputs::before {
  content: "\eb1c";
  font-family: "tabler-icons" !important;
  position: absolute;
  left: 14px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 18px;
  color: #9CA1AF;
  pointer-events: none;
  z-index: 2;
  -webkit-transition: color 0.2s ease;
  -ms-transition: color 0.2s ease;
  transition: color 0.2s ease;
}

.header .top-nav-search .searchinputs:focus-within::before {
  color: #1f3b60;
}

.header .top-nav-search .search-addon {
  position: absolute;
  top: 50%;
  right: 6px;
  transform: translateY(-50%);
  pointer-events: none;
}

.header .top-nav-search .search-addon button {
  width: 32px;
  height: 32px;
  border: 0;
  border-radius: 9px;
  background: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  pointer-events: auto;
  -webkit-transition: background-color 0.2s ease, color 0.2s ease;
  -ms-transition: background-color 0.2s ease, color 0.2s ease;
  transition: background-color 0.2s ease, color 0.2s ease;
}

.header .top-nav-search .search-addon button:hover {
  background: #1f3b60;
  color: #FFF;
  transform: none;
}

/* ---------- Keyboard Shortcut Hint ---------- */
.header .mui-search-kbd {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}

.header .mui-search-kbd .mui-kbd-key {
  min-width: 20px;
  height: 20px;
  padding: 0 5px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
  color: #838A9B;
  background: #FFF;
  border: 1px solid #E9EDF4;
  border-radius: 6px;
  box-shadow: 0 1px 0 #E9EDF4;
}

.header .top-nav-search .searchinputs:focus-within .mui-kbd-key {
  color: #1f3b60;
  border-color: rgba(31, 59, 96, 0.35);
}

/* ---------- Branch Switcher & Special Dropdowns ---------- */
.header .mui-branch,
.header .dropdown>.btn-outline-light.bg-white:not(.btn-icon) {
  height: 42px;
  border-radius: 12px;
  border: 1px solid #E9EDF4 !important;
  background: #FFF !important;
  padding: 0 12px 0 8px !important;
  color: #515B73 !important;
  font-weight: 500;
  box-shadow: none !important;
  -webkit-transition: border-color 0.2s ease, background-color 0.2s ease;
  -ms-transition: border-color 0.2s ease, background-color 0.2s ease;
  transition: border-color 0.2s ease, background-color 0.2s ease;
}

.header .mui-branch:hover,
.header .dropdown>.btn-outline-light.bg-white:not(.btn-icon):hover {
  border-color: rgba(31, 59, 96, 0.35) !important;
  background: #f8fafc !important;
  box-shadow: none !important;
  transform: none !important;
}

.header .mui-branch .avatar,
.header .dropdown>.btn-outline-light.bg-white:not(.btn-icon) .avatar {
  border-radius: 9px;
  width: 28px;
  height: 28px;
}

.header .mui-branch .ti-chevron-down,
.header .dropdown>.btn-outline-light.bg-white:not(.btn-icon) .ti-chevron-down {
  color: #9CA1AF;
}

.header .dropdown>.btn-outline-light.bg-white:not(.btn-icon):not(.mui-branch) {
  display: inline-flex !important;
  align-items: center;
}

.header .dropdown>.btn-outline-light.bg-white:not(.btn-icon):not(.mui-branch) .ti-calendar-due {
  width: 28px;
  height: 28px;
  margin-right: 8px !important;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
  border-radius: 9px;
  font-size: 16px;
}

.header .dropdown>.btn-outline-light.bg-white:not(.btn-icon):not(.mui-branch)::after {
  content: "\ea5f";
  font-family: "tabler-icons" !important;
  margin-left: 8px;
  font-size: 14px;
  color: #9CA1AF;
  border: 0;
  width: auto;
  height: auto;
  vertical-align: middle;
}

/* ---------- User Profile Toggle ---------- */
.header .mui-profile-toggle {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 4px;
  border-radius: 8px;
  border: 1px solid #E9EDF4;
  background: #FFF;
  -webkit-transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
  -ms-transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
  transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
}

.header .mui-profile-toggle:hover {
  border-color: rgba(31, 59, 96, 0.35);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.08);
}

.header .mui-profile-toggle::after {
  display: none !important;
}

.header .mui-profile-toggle .avatar {
  width: 32px;
  height: 32px;
}

.header .mui-profile-toggle .avatar img {
  border-radius: 8px;
}

.header .mui-profile-toggle .mui-profile-caret {
  font-size: 15px;
  color: #9CA1AF;
  -webkit-transition: transform 0.2s ease;
  -ms-transition: transform 0.2s ease;
  transition: transform 0.2s ease;
}

.header .mui-profile-toggle[aria-expanded=true] .mui-profile-caret {
  transform: rotate(180deg);
  color: #1f3b60;
}

/* ---------- Dropdown Menu Base ---------- */
.header .dropdown-menu {
  border: 1px solid rgba(0, 0, 0, 0.06);
  border-radius: 14px;
  box-shadow: 0 0.75rem 2rem rgba(17, 24, 39, 0.12);
  margin: 0;
  padding: 0;
}

.header .dropdown-menu.show {
  animation: muiDropIn 0.18s ease;
}

/* ---------- Header Dropdown Panels Shell ---------- */
.anew-menu,
.ntf-panel,
.msg-panel,
.apps-panel,
.lang-menu,
.ay-menu,
.mui-profile-drop {
  padding: 0;
  overflow: hidden;
  border: 1px solid #E9EDF4;
  border-radius: 16px;
  background: #FFF;
  box-shadow: 0 22px 50px rgba(17, 24, 39, 0.16);
}

.anew-menu {
  width: 322px;
  max-width: 92vw;
}

.ntf-panel {
  width: 384px;
  max-width: 94vw;
}

.msg-panel {
  width: 362px;
  max-width: 94vw;
}

.apps-panel {
  width: 344px;
  max-width: 94vw;
}

.lang-menu {
  width: 256px;
  max-width: 92vw;
}

.ay-menu {
  width: 268px;
  max-width: 92vw;
}

/* Common Dropdown Subheadings */
.anew-sub,
.ntf-sub,
.msg-sub,
.apps-sub,
.lang-sub,
.ay-sub {
  display: block;
  font-size: 0.72rem;
  color: #838A9B;
  margin-top: 0.12rem;
}

/* Common Panel Footers */
.anew-foot,
.ntf-foot,
.apps-foot {
  padding: 0.7rem 1.1rem;
  border-top: 1px solid #E9EDF4;
  text-align: center;
}

.anew-foot a,
.ntf-foot a,
.apps-foot a {
  font-size: 0.8rem;
  font-weight: 600;
  color: #1f3b60;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  -webkit-transition: gap 0.2s ease;
  -ms-transition: gap 0.2s ease;
  transition: gap 0.2s ease;
}

.anew-foot a:hover,
.ntf-foot a:hover,
.apps-foot a:hover {
  gap: 0.55rem;
}

/* Common Panel Scrollable Lists */
.ntf-list,
.msg-list {
  padding: 0.4rem;
  overflow-y: auto;
}

.ntf-list::-webkit-scrollbar,
.msg-list::-webkit-scrollbar {
  width: 6px;
}

.ntf-list::-webkit-scrollbar-thumb,
.msg-list::-webkit-scrollbar-thumb {
  background: rgba(31, 59, 96, 0.22);
  border-radius: 6px;
}

/* Shared Gradient Color Chips */
.anew-blue,
.ai-blue {
  background: linear-gradient(135deg, #1f3b60, #5b8cff);
}

.anew-green,
.ai-green {
  background: linear-gradient(135deg, #0ca678, #22c55e);
}

.anew-amber,
.ai-amber {
  background: linear-gradient(135deg, #f39c12, #f7b955);
}

.anew-cyan,
.ai-cyan {
  background: linear-gradient(135deg, #0ea5e9, #38bdf8);
}

.anew-purple,
.ai-purple {
  background: linear-gradient(135deg, #7c3aed, #a855f7);
}

.anew-pink,
.ai-pink {
  background: linear-gradient(135deg, #E83E8C, #f472b6);
}

/* ---------- Profile Dropdown ---------- */
.mui-profile-head {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px;
  background: linear-gradient(135deg, rgba(31, 59, 96, 0.12), rgba(31, 59, 96, 0.03));
  border-bottom: 1px solid #E9EDF4;
}

.mui-profile-head .avatar {
  width: 44px;
  height: 44px;
}

.mui-profile-head .avatar img {
  border-radius: 12px;
}

.mui-profile-id {
  flex: 1 1 auto;
  min-width: 0;
}

.mui-profile-id h6 {
  font-size: 14px;
  font-weight: 600;
  color: #202C4B;
}

.mui-profile-mail {
  display: block;
  font-size: 12px;
  color: #838A9B;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.mui-profile-role {
  flex-shrink: 0;
  align-self: flex-start;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.03em;
  color: #1f3b60;
  background: rgba(31, 59, 96, 0.12);
  padding: 3px 8px;
  border-radius: 20px;
}

.mui-profile-body {
  padding: 8px;
}

.mui-profile-body .dropdown-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 10px;
  border-radius: 9px;
  font-size: 13.5px;
  font-weight: 500;
  color: #515B73;
  -webkit-transition: background-color 0.2s ease, color 0.2s ease;
  -ms-transition: background-color 0.2s ease, color 0.2s ease;
  transition: background-color 0.2s ease, color 0.2s ease;
}

.mui-profile-body .dropdown-item i {
  font-size: 18px;
  color: #838A9B;
  -webkit-transition: color 0.2s ease;
  -ms-transition: color 0.2s ease;
  transition: color 0.2s ease;
}

.mui-profile-body .dropdown-item:hover {
  background: rgba(31, 59, 96, 0.08);
  color: #1f3b60;
}

.mui-profile-body .dropdown-item:hover i {
  color: #1f3b60;
}

.mui-profile-body .dropdown-item.text-danger:hover {
  background: rgba(232, 38, 70, 0.08);
  color: #E82646;
}

.mui-profile-body .dropdown-item.text-danger:hover i {
  color: #E82646;
}

.mui-profile-body hr {
  margin: 6px 4px;
  border-color: #E9EDF4;
  opacity: 1;
}

/* ---------- Quick Create Dropdown ---------- */
.anew-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 0.95rem 1.1rem;
  border-bottom: 1px solid #E9EDF4;
  background: linear-gradient(180deg, rgba(31, 59, 96, 0.06), transparent);
}

.anew-head h6 {
  margin: 0;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #202C4B;
}

.anew-badge {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #1f3b60;
  background: rgba(31, 59, 96, 0.12);
  font-size: 18px;
}

.anew-list {
  padding: 0.5rem;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.anew-item {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  padding: 0.6rem 0.65rem;
  border-radius: 12px;
  text-decoration: none;
  -webkit-transition: background-color 0.2s ease, transform 0.2s ease;
  -ms-transition: background-color 0.2s ease, transform 0.2s ease;
  transition: background-color 0.2s ease, transform 0.2s ease;
}

.anew-item:hover {
  background: rgba(17, 24, 39, 0.055);
  transform: translateX(2px);
}

.anew-item:hover .anew-arrow {
  opacity: 1;
  transform: translateX(0);
}

.anew-ic {
  flex: 0 0 42px;
  width: 42px;
  height: 42px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 21px;
  color: #FFF;
  box-shadow: 0 5px 12px rgba(0, 0, 0, 0.14);
}

.anew-txt {
  display: flex;
  flex-direction: column;
  min-width: 0;
  flex: 1;
}

.anew-t {
  font-size: 0.86rem;
  font-weight: 600;
  color: #202C4B;
  line-height: 1.2;
}

.anew-s {
  margin-top: 0.1rem;
  line-height: 1.25;
}

.anew-arrow {
  color: #9CA1AF;
  font-size: 16px;
  opacity: 0;
  transform: translateX(-4px);
  -webkit-transition: opacity 0.2s ease, transform 0.2s ease;
  -ms-transition: opacity 0.2s ease, transform 0.2s ease;
  transition: opacity 0.2s ease, transform 0.2s ease;
}

/* ---------- Notification Center Dropdown ---------- */
.ntf-head {
  padding: 1rem 1.1rem 0.7rem;
  border-bottom: 1px solid #E9EDF4;
  background: linear-gradient(180deg, rgba(31, 59, 96, 0.07), transparent);
}

.ntf-head h6 {
  margin: 0;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #202C4B;
}

.ntf-head-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
}

.ntf-readall {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #1f3b60;
  background: rgba(31, 59, 96, 0.12);
  font-size: 16px;
  -webkit-transition: filter 0.2s ease;
  -ms-transition: filter 0.2s ease;
  transition: filter 0.2s ease;
}

.ntf-readall:hover {
  filter: brightness(1.06);
}

.ntf-tabs {
  display: flex;
  gap: 0.25rem;
  margin-top: 0.85rem;
  background: rgba(17, 24, 39, 0.055);
  padding: 3px;
  border-radius: 10px;
}

.ntf-tab {
  flex: 1;
  border: 0;
  background: transparent;
  font-size: 0.76rem;
  font-weight: 600;
  color: #838A9B;
  padding: 0.35rem;
  border-radius: 8px;
  cursor: pointer;
  -webkit-transition: background-color 0.2s ease, color 0.2s ease;
  -ms-transition: background-color 0.2s ease, color 0.2s ease;
  transition: background-color 0.2s ease, color 0.2s ease;
}

.ntf-tab span {
  font-size: 0.64rem;
  background: rgba(31, 59, 96, 0.15);
  color: #1f3b60;
  border-radius: 50rem;
  padding: 0 0.35rem;
  margin-left: 0.15rem;
}

.ntf-tab.active {
  background: #FFF;
  color: #202C4B;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.14);
}

.ntf-list {
  max-height: 366px;
}

.ntf-item {
  position: relative;
  display: flex;
  gap: 0.75rem;
  padding: 0.7rem 0.7rem 0.7rem 0.85rem;
  border-radius: 12px;
  text-decoration: none;
  -webkit-transition: background-color 0.2s ease;
  -ms-transition: background-color 0.2s ease;
  transition: background-color 0.2s ease;
}

.ntf-item:hover {
  background: rgba(17, 24, 39, 0.055);
}

.ntf-item.unread {
  background: rgba(31, 59, 96, 0.05);
}

.ntf-item.unread::before {
  content: "";
  position: absolute;
  left: 0;
  top: 14px;
  bottom: 14px;
  width: 3px;
  border-radius: 0 3px 3px 0;
  background: #1f3b60;
}

.ntf-item:not(.unread) .ntf-dot {
  visibility: hidden;
}

.ntf-av {
  position: relative;
  flex: 0 0 42px;
  width: 42px;
  height: 42px;
}

.ntf-av>img {
  width: 42px;
  height: 42px;
  border-radius: 50%;
  object-fit: cover;
}

.ntf-badge {
  position: absolute;
  right: -3px;
  bottom: -3px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  color: #FFF;
  border: 2px solid #FFF;
}

.nb-red {
  background: #e7515a;
}

.nb-blue {
  background: #1f3b60;
}

.nb-green {
  background: #0ca678;
}

.nb-purple {
  background: #7c3aed;
}

.nb-amber {
  background: #f39c12;
}

.ntf-body {
  flex: 1;
  min-width: 0;
}

.ntf-body p {
  margin: 0;
  font-size: 0.82rem;
  color: #515B73;
  line-height: 1.35;
}

.ntf-body p b {
  color: #202C4B;
  font-weight: 600;
}

.ntf-time {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  font-size: 0.7rem;
  color: #9CA1AF;
  margin-top: 0.28rem;
}

.ntf-actions {
  display: flex;
  gap: 0.4rem;
  margin-top: 0.55rem;
}

.ntf-dot {
  align-self: center;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #1f3b60;
  flex-shrink: 0;
}

/* ---------- Messages Dropdown ---------- */
.msg-head {
  padding: 1rem 1.1rem 0.8rem;
  border-bottom: 1px solid #E9EDF4;
  background: linear-gradient(180deg, rgba(31, 59, 96, 0.07), transparent);
}

.msg-head h6 {
  margin: 0;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #202C4B;
}

.msg-head-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
}

.msg-compose {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #FFF;
  background: #1f3b60;
  font-size: 16px;
  -webkit-transition: filter 0.2s ease, transform 0.2s ease;
  -ms-transition: filter 0.2s ease, transform 0.2s ease;
  transition: filter 0.2s ease, transform 0.2s ease;
}

.msg-compose:hover {
  filter: brightness(1.07);
  transform: translateY(-1px);
}

.msg-search {
  margin-top: 0.85rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  background: rgba(17, 24, 39, 0.055);
  border-radius: 10px;
  padding: 0.5rem 0.7rem;
}

.msg-search i {
  color: #9CA1AF;
  font-size: 15px;
}

.msg-search input {
  border: 0;
  background: transparent;
  outline: none;
  width: 100%;
  font-size: 0.8rem;
  color: #515B73;
}

.msg-search input::placeholder {
  color: #9CA1AF;
}

.msg-list {
  max-height: 344px;
}

.msg-item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.6rem 0.7rem;
  border-radius: 12px;
  text-decoration: none;
  -webkit-transition: background-color 0.2s ease;
  -ms-transition: background-color 0.2s ease;
  transition: background-color 0.2s ease;
}

.msg-item:hover {
  background: rgba(17, 24, 39, 0.055);
}

.msg-item.unread {
  background: rgba(31, 59, 96, 0.05);
}

.msg-item.unread .msg-name {
  font-weight: 700;
}

.msg-item.unread .msg-prev {
  color: #515B73;
}

.msg-av {
  position: relative;
  flex: 0 0 44px;
  width: 44px;
  height: 44px;
}

.msg-av>img {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  object-fit: cover;
}

.msg-av::after {
  content: "";
  position: absolute;
  right: 1px;
  bottom: 1px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: #9CA1AF;
  border: 2px solid #FFF;
}

.msg-av.online::after {
  background: #22c55e;
}

.msg-body {
  flex: 1;
  min-width: 0;
}

.msg-row1 {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
}

.msg-name {
  font-size: 0.84rem;
  font-weight: 600;
  color: #202C4B;
}

.msg-time {
  flex-shrink: 0;
  font-size: 0.7rem;
  color: #9CA1AF;
}

.msg-prev {
  margin: 0.12rem 0 0;
  font-size: 0.76rem;
  color: #838A9B;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.msg-unread {
  flex-shrink: 0;
  min-width: 20px;
  height: 20px;
  padding: 0 0.35rem;
  border-radius: 50rem;
  background: #1f3b60;
  color: #FFF;
  font-size: 0.66rem;
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.msg-foot {
  padding: 0.8rem 1rem;
  border-top: 1px solid #E9EDF4;
}

/* ---------- Apps Launcher Dropdown ---------- */
.apps-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 1rem 1.1rem 0.75rem;
  border-bottom: 1px solid #E9EDF4;
  background: linear-gradient(180deg, rgba(31, 59, 96, 0.07), transparent);
}

.apps-head h6 {
  margin: 0;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #202C4B;
}

.apps-custom {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #1f3b60;
  background: rgba(31, 59, 96, 0.12);
  font-size: 16px;
  -webkit-transition: filter 0.2s ease;
  -ms-transition: filter 0.2s ease;
  transition: filter 0.2s ease;
}

.apps-custom:hover {
  filter: brightness(1.06);
}

.apps-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.35rem;
  padding: 0.7rem;
}

.apps-tile {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  padding: 0.85rem 0.4rem;
  border-radius: 14px;
  text-decoration: none;
  -webkit-transition: background-color 0.2s ease, transform 0.2s ease;
  -ms-transition: background-color 0.2s ease, transform 0.2s ease;
  transition: background-color 0.2s ease, transform 0.2s ease;
}

.apps-tile:hover {
  background: rgba(17, 24, 39, 0.055);
  transform: translateY(-3px);
}

.apps-tile:hover .apps-ic {
  transform: scale(1.08) rotate(-3deg);
}

.apps-ic {
  width: 46px;
  height: 46px;
  border-radius: 14px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  color: #FFF;
  box-shadow: 0 5px 12px rgba(0, 0, 0, 0.14);
  -webkit-transition: transform 0.2s ease;
  -ms-transition: transform 0.2s ease;
  transition: transform 0.2s ease;
}

.apps-lbl {
  font-size: 0.74rem;
  font-weight: 600;
  color: #515B73;
  text-align: center;
}

.ai-red {
  background: linear-gradient(135deg, #e7515a, #f4767e);
}

.ai-indigo {
  background: linear-gradient(135deg, #4f46e5, #6366f1);
}

.ai-teal {
  background: linear-gradient(135deg, #0d9488, #14b8a6);
}

/* ---------- Language Dropdown ---------- */
.lang-trigger-flag {
  width: 26px;
  height: 19px;
  border-radius: 4px;
  overflow: hidden;
  display: inline-flex;
  box-shadow: 0 0 0 1px #E9EDF4;
}

.lang-trigger-flag img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.lang-head {
  padding: 0.9rem 1rem 0.7rem;
  border-bottom: 1px solid #E9EDF4;
  background: linear-gradient(180deg, rgba(31, 59, 96, 0.07), transparent);
}

.lang-head h6 {
  margin: 0;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #202C4B;
}

.lang-list {
  padding: 0.4rem;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.lang-item {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding: 0.55rem 0.6rem;
  border-radius: 10px;
  text-decoration: none;
  -webkit-transition: background-color 0.2s ease;
  -ms-transition: background-color 0.2s ease;
  transition: background-color 0.2s ease;
}

.lang-item:hover {
  background: rgba(17, 24, 39, 0.055);
}

.lang-item.active {
  background: rgba(31, 59, 96, 0.08);
}

.lang-item.active .lang-check {
  opacity: 1;
}

.lang-flag {
  flex: 0 0 30px;
  width: 30px;
  height: 22px;
  border-radius: 4px;
  overflow: hidden;
  display: inline-flex;
  box-shadow: 0 0 0 1px #E9EDF4;
}

.lang-flag img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.lang-txt {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.lang-name {
  font-size: 0.84rem;
  font-weight: 600;
  color: #202C4B;
  line-height: 1.2;
}

.lang-native {
  font-size: 0.7rem;
  color: #838A9B;
  line-height: 1.2;
  margin-top: 0.1rem;
}

.lang-check {
  color: #1f3b60;
  font-size: 17px;
  opacity: 0;
}

/* ---------- Academic Year Dropdown ---------- */
.ay-head {
  padding: 0.9rem 1rem 0.7rem;
  border-bottom: 1px solid #E9EDF4;
  background: linear-gradient(180deg, rgba(31, 59, 96, 0.07), transparent);
}

.ay-head h6 {
  margin: 0;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: #202C4B;
}

.ay-list {
  padding: 0.4rem;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.ay-item {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding: 0.55rem 0.6rem;
  border-radius: 10px;
  text-decoration: none;
  -webkit-transition: background-color 0.2s ease;
  -ms-transition: background-color 0.2s ease;
  transition: background-color 0.2s ease;
}

.ay-item:hover {
  background: rgba(17, 24, 39, 0.055);
}

.ay-item:hover .ay-arrow {
  opacity: 1;
  transform: translateX(0);
}

.ay-item.active {
  background: rgba(31, 59, 96, 0.08);
}

.ay-item.active .ay-ic {
  color: #FFF;
  background: #1f3b60;
  box-shadow: 0 5px 12px rgba(31, 59, 96, 0.35);
}

.ay-ic {
  flex: 0 0 36px;
  width: 36px;
  height: 36px;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  color: #1f3b60;
  background: rgba(31, 59, 96, 0.12);
}

.ay-txt {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.ay-yr {
  font-size: 0.84rem;
  font-weight: 600;
  color: #202C4B;
  line-height: 1.2;
}

.ay-st {
  font-size: 0.7rem;
  color: #838A9B;
  line-height: 1.2;
  margin-top: 0.1rem;
}

.ay-badge {
  font-size: 0.62rem;
  font-weight: 700;
  color: #FFF;
  background: #1f3b60;
  border-radius: 50rem;
  padding: 0.14rem 0.5rem;
}

.ay-arrow {
  color: #9CA1AF;
  font-size: 16px;
  opacity: 0;
  transform: translateX(-4px);
  -webkit-transition: opacity 0.2s ease, transform 0.2s ease;
  -ms-transition: opacity 0.2s ease, transform 0.2s ease;
  transition: opacity 0.2s ease, transform 0.2s ease;
}

/* ---------- Focus Accessibility ---------- */
.header .btn:focus-visible,
.header a:focus-visible {
  outline: 2px solid #1f3b60;
  outline-offset: 2px;
  border-radius: 8px;
}

/* ---------- Mini Sidebar Responsive Handling ---------- */
@media (min-width: 992px) {
  body.mini-sidebar .header .header-left {
    width: 84px;
    padding: 0;
    flex-direction: column;
    justify-content: center;
  }

  body.mini-sidebar .header .header-left .logo,
  body.mini-sidebar .header .header-left .dark-logo {
    display: none !important;
  }

  body.mini-sidebar .header .header-left .logo-small {
    display: block !important;
    padding: 8px 0 2px;
  }

  body.mini-sidebar .header .header-left #toggle_btn {
    opacity: 1;
    transform: rotate(180deg);
  }

  body.mini-sidebar.expand-menu .header .header-left {
    width: 280px;
    padding: 0 12px;
    flex-direction: row;
    justify-content: space-between;
  }

  body.mini-sidebar.expand-menu .header .header-left .logo-small {
    display: none !important;
  }

  body.mini-sidebar.expand-menu .header .header-left .logo {
    display: block !important;
  }

  body.mini-sidebar.expand-menu .header .header-left #toggle_btn {
    opacity: 1;
    transform: rotate(0deg);
  }
}

/* ---------- Mobile / Tablet Responsive ---------- */
@media (max-width: 991.98px) {
  .mui-hide-sm {
    display: none !important;
  }
}

/* ---------- Command Palette / Global Search Modal ---------- */
@keyframes msFade {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes msPop {
  from {
    opacity: 0;
    transform: translateY(-12px) scale(0.98);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

body.mui-search-open {
  overflow: hidden;
}

.mui-search-modal {
  position: fixed;
  inset: 0;
  z-index: 1080;
  display: flex;
  align-items: flex-start;
  justify-content: center;
}

.mui-search-modal[hidden] {
  display: none;
}

.mui-search-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(15, 23, 42, 0.45);
  backdrop-filter: blur(4px);
  animation: msFade 0.2s ease;
}

.mui-search-panel {
  position: relative;
  width: 640px;
  max-width: 92vw;
  margin-top: 9vh;
  overflow: hidden;
  background: #FFF;
  border: 1px solid #E9EDF4;
  border-radius: 16px;
  box-shadow: 0 30px 70px rgba(15, 23, 42, 0.35);
  animation: msPop 0.22s cubic-bezier(0.4, 0, 0.2, 1);
}

@media (max-width: 575.98px) {
  .mui-search-panel {
    margin-top: 0;
    border-radius: 0;
    height: 100%;
    max-width: 100vw;
    width: 100vw;
  }
}

.mui-search-top {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding: 1rem 1.1rem;
  border-bottom: 1px solid #E9EDF4;
}

.mui-search-top>i {
  font-size: 20px;
  color: #838A9B;
}

.mui-search-top input {
  flex: 1;
  border: 0;
  background: transparent;
  outline: none;
  font-size: 1rem;
  color: #202C4B;
}

.mui-search-top input::placeholder {
  color: #9CA1AF;
}

.mui-search-esc {
  font-size: 0.62rem;
  font-weight: 700;
  color: #838A9B;
  background: rgba(17, 24, 39, 0.055);
  border: 1px solid #E9EDF4;
  border-radius: 6px;
  padding: 0.15rem 0.4rem;
}

.mui-search-body {
  max-height: 56vh;
  overflow-y: auto;
  padding: 0.5rem;
}

.mui-search-sec+.mui-search-sec {
  margin-top: 0.35rem;
}

.mui-search-sec-hdr {
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: #9CA1AF;
  padding: 0.5rem 0.6rem 0.3rem;
}

.mui-search-row {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.6rem 0.65rem;
  border-radius: 10px;
  text-decoration: none;
  -webkit-transition: background-color 0.2s ease;
  -ms-transition: background-color 0.2s ease;
  transition: background-color 0.2s ease;
}

.mui-search-row:hover,
.mui-search-row.is-active {
  background: rgba(17, 24, 39, 0.055);
}

.msr-ic {
  flex: 0 0 34px;
  width: 34px;
  height: 34px;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  color: #838A9B;
  background: rgba(17, 24, 39, 0.055);
}

.msr-ic.ic-blue {
  color: #1f3b60;
  background: rgba(31, 59, 96, 0.12);
}

.msr-ic.ic-green {
  color: #0ca678;
  background: rgba(12, 166, 120, 0.12);
}

.msr-ic.ic-amber {
  color: #f39c12;
  background: rgba(243, 156, 18, 0.12);
}

.msr-ic.ic-purple {
  color: #7c3aed;
  background: rgba(124, 58, 237, 0.12);
}

.msr-ic.ic-teal {
  color: #12b3b3;
  background: rgba(18, 179, 179, 0.12);
}

.msr-txt {
  flex: 1;
  min-width: 0;
  font-size: 0.87rem;
  font-weight: 500;
  color: #202C4B;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.msr-tag {
  font-size: 0.64rem;
  font-weight: 700;
  color: #838A9B;
  background: rgba(17, 24, 39, 0.055);
  border-radius: 50rem;
  padding: 0.12rem 0.5rem;
}

.msr-go {
  color: #9CA1AF;
  font-size: 15px;
}

.mui-search-empty {
  display: none;
  padding: 2rem 1rem;
  text-align: center;
  color: #838A9B;
  font-size: 0.85rem;
}

.mui-search-empty i {
  display: block;
  font-size: 26px;
  margin-bottom: 0.4rem;
  color: #9CA1AF;
}

.mui-search-foot {
  display: flex;
  align-items: center;
  gap: 1.25rem;
  padding: 0.7rem 1.1rem;
  border-top: 1px solid #E9EDF4;
  font-size: 0.72rem;
  color: #838A9B;
}

@media (max-width: 575.98px) {
  .mui-search-foot {
    display: none;
  }
}

.mui-search-foot-item {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
}

.mui-kbd-group {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}

.mui-search-foot .mui-kbd {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 18px;
  height: 18px;
  padding: 0 4px;
  margin: 0;
  font-size: 0.66rem;
  font-weight: 700;
  color: #515B73;
  background: rgba(17, 24, 39, 0.055);
  border: 1px solid #E9EDF4;
  border-radius: 5px;
}

@media (prefers-reduced-motion: reduce) {

  .mui-search-panel,
  .mui-search-backdrop {
    animation: none;
  }
}

/* =============================================================================
   PreSkool — Sidebar Component
   ============================================================================= */
/* ---------- Page Wrapper ---------- */
.page-wrapper {
  margin-left: 280px;
  padding-top: 60px;
  background: #FFF;
  -webkit-transition: all 0.3s ease;
  -ms-transition: all 0.3s ease;
  transition: all 0.3s ease;
}

@media (max-width: 991.98px) {
  .page-wrapper {
    margin-left: 0;
  }
}

/* ---------- Sidebar Container ---------- */
.sidebar {
  display: flex;
  flex-direction: column;
  background-color: #F8FAFC;
  border-right: 1px solid #E9EDF4;
  margin-top: 0;
  z-index: 1001;
  position: fixed;
  top: 60px;
  bottom: 0;
  left: 0;
  width: 280px;
  box-shadow: none;
  -webkit-transition: all 0.3s ease;
  -ms-transition: all 0.3s ease;
  transition: all 0.3s ease;
}

@media (max-width: 991.98px) {
  .sidebar {
    margin-left: -280px;
    z-index: 1041;
    box-shadow: 0 20px 48px rgba(15, 23, 42, 0.18);
  }
}

@media (max-width: 575.98px) {
  .sidebar {
    width: 86%;
    margin-left: -86%;
  }
}

/* Scrollable Container */

.sidebar .sidebar-inner {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow-y: auto;
  overflow-x: hidden;
  width: 100%;
  /* Webkit Scrollbar */
}

.sidebar .sidebar-inner::-webkit-scrollbar {
  width: 6px;
}

.sidebar .sidebar-inner::-webkit-scrollbar-thumb {
  background: rgba(31, 59, 96, 0.25);
  border-radius: 6px;
}

.sidebar .sidebar-inner::-webkit-scrollbar-thumb:hover {
  background: rgba(31, 59, 96, 0.45);
}

/* Native Scroll Utility */

.sidebar .sidebar-inner.mui-native-scroll {
  scrollbar-width: thin;
  scrollbar-color: transparent transparent;
}

.sidebar .sidebar-inner.mui-native-scroll:hover {
  scrollbar-color: rgba(100, 116, 139, 0.35) transparent;
}

.sidebar .sidebar-inner.mui-native-scroll::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

.sidebar .sidebar-inner.mui-native-scroll::-webkit-scrollbar-thumb {
  background: transparent;
  border-radius: 8px;
  border: 2px solid transparent;
  background-clip: content-box;
}

.sidebar .sidebar-inner.mui-native-scroll:hover::-webkit-scrollbar-thumb {
  background: rgba(100, 116, 139, 0.32);
  background-clip: content-box;
}

.sidebar .sidebar-inner.mui-native-scroll:hover::-webkit-scrollbar-thumb:hover {
  background: rgba(100, 116, 139, 0.55);
  background-clip: content-box;
}

/* Brand / School Card Header */

.sidebar .mui-side-brand {
  padding: 12px 0 4px;
}

.sidebar .mui-side-brand.dropdown {
  position: relative;
}

.sidebar .mui-brand-card {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 9px 10px;
  border-radius: 12px;
  background: #FFF;
  border: 1px solid #E9EDF4;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05);
  width: 100%;
  text-align: left;
  font: inherit;
  cursor: pointer;
  -webkit-transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
  -ms-transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
  transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}

.sidebar .mui-brand-card:hover {
  border-color: rgba(31, 59, 96, 0.38);
  box-shadow: 0 3px 10px rgba(15, 23, 42, 0.08);
  transform: translateY(-1px);
}

.sidebar .mui-brand-card.dropdown-toggle::after {
  display: none !important;
}

.sidebar .mui-brand-logo {
  flex-shrink: 0;
  width: 38px;
  height: 38px;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  background: linear-gradient(135deg, rgba(31, 59, 96, 0.14), rgba(31, 59, 96, 0.05));
}

.sidebar .mui-brand-logo img {
  width: 24px;
  height: 24px;
  object-fit: contain;
  border-radius: 4px;
}

.sidebar .mui-brand-meta {
  flex: 1 1 auto;
  min-width: 0;
  line-height: 1.25;
}

.sidebar .mui-brand-name {
  display: block;
  font-size: 14px;
  font-weight: 600;
  color: #202C4B;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sidebar .mui-brand-sub {
  display: block;
  font-size: 11.5px;
  color: #838A9B;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sidebar .mui-brand-caret {
  flex-shrink: 0;
  font-size: 16px;
  color: #9CA1AF;
}

/* Sidebar Search Box */

.sidebar .mui-side-search {
  padding: 0 2px 6px;
  border-bottom: 1px solid #E9EDF4;
  margin-bottom: 6px;
}

.sidebar .mui-side-search .mui-side-search-box {
  position: relative;
}

.sidebar .mui-side-search i {
  position: absolute;
  left: 12px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 18px;
  color: #9CA1AF;
  pointer-events: none;
}

.sidebar .mui-side-search input {
  width: 100%;
  height: 40px;
  border-radius: 10px;
  background: #FFF;
  border: 1px solid #E9EDF4;
  padding: 0 12px 0 38px;
  font-size: 14px;
  color: #202C4B;
  -webkit-transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
  -ms-transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
  transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
}

.sidebar .mui-side-search input::placeholder {
  color: #9CA1AF;
}

.sidebar .mui-side-search input:focus {
  outline: none;
  background: #FFF;
  border-color: #1f3b60;
  box-shadow: 0 0 0 4px rgba(31, 59, 96, 0.14);
}

/* Brand Switcher Menu Dropdown */

.sidebar .mui-brand-menu {
  width: 264px;
  max-width: calc(100% - 8px);
  padding: 0.5rem;
  margin-top: 6px;
  border: 1px solid #E9EDF4;
  border-radius: 14px;
  background: #FFF;
  box-shadow: 0 20px 46px rgba(17, 24, 39, 0.18);
}

.sidebar .mui-brand-menu .mui-brand-head {
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #9CA1AF;
  padding: 0.35rem 0.55rem 0.5rem;
}

.sidebar .mui-brand-menu .mui-brand-item {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  padding: 0.5rem 0.55rem;
  border-radius: 10px;
  text-decoration: none;
  -webkit-transition: background 0.2s ease;
  -ms-transition: background 0.2s ease;
  transition: background 0.2s ease;
}

.sidebar .mui-brand-menu .mui-brand-item:hover {
  background: rgba(17, 24, 39, 0.055);
}

.sidebar .mui-brand-menu .mui-brand-item.active {
  background: rgba(31, 59, 96, 0.1);
}

.sidebar .mui-brand-menu .mui-bi-logo {
  flex: 0 0 34px;
  width: 34px;
  height: 34px;
  border-radius: 9px;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(17, 24, 39, 0.055);
  box-shadow: inset 0 0 0 1px #E9EDF4;
}

.sidebar .mui-brand-menu .mui-bi-logo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.sidebar .mui-brand-menu .mui-bi-letter {
  font-size: 15px;
  font-weight: 700;
  color: #FFF;
  background: var(--bl, #1f3b60);
}

.sidebar .mui-brand-menu .mui-bi-meta {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.sidebar .mui-brand-menu .mui-bi-meta b {
  font-size: 0.82rem;
  font-weight: 600;
  color: #202C4B;
  line-height: 1.2;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sidebar .mui-brand-menu .mui-bi-meta small {
  font-size: 0.7rem;
  color: #838A9B;
  line-height: 1.2;
}

.sidebar .mui-brand-menu .mui-bi-check {
  color: #1f3b60;
  font-size: 16px;
}

.sidebar .mui-brand-menu .mui-brand-divider {
  height: 1px;
  background: #E9EDF4;
  margin: 0.4rem 0.2rem;
}

.sidebar .mui-brand-menu .mui-brand-add {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  padding: 0.5rem 0.55rem;
  border-radius: 10px;
  text-decoration: none;
  font-size: 0.82rem;
  font-weight: 600;
  color: #1f3b60;
  -webkit-transition: background 0.2s ease;
  -ms-transition: background 0.2s ease;
  transition: background 0.2s ease;
}

.sidebar .mui-brand-menu .mui-brand-add:hover {
  background: rgba(31, 59, 96, 0.08);
}

.sidebar .mui-brand-menu .mui-bi-add {
  flex: 0 0 34px;
  width: 34px;
  height: 34px;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #1f3b60;
  background: rgba(31, 59, 96, 0.12);
  font-size: 18px;
  border: 1px dashed rgba(31, 59, 96, 0.4);
}

/* Sidebar Navigation Menu */

.sidebar .sidebar-menu {
  padding: 12px;
  flex: 1 1 auto;
  padding-top: 0px;
}

.sidebar .sidebar-menu ul,
.sidebar .sidebar-menu li {
  list-style: none !important;
  padding-left: 0 !important;
  margin-left: 0 !important;
}

.sidebar .sidebar-menu>ul {
  margin: 0;
  padding: 0;
}

.sidebar .sidebar-menu>ul>li {
  margin-bottom: 4px;
}

.sidebar .sidebar-menu .submenu ul li a {
  padding-left: 26px !important;
}

/* Section Headers */

.sidebar .sidebar-menu .submenu-hdr {
  text-transform: uppercase;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: #9CA1AF;
  padding: 8px 12px 4px !important;
  margin-top: 12px;
  margin-bottom: 4px;
  display: flex;
  align-items: center;
}

.sidebar .sidebar-menu .submenu-hdr span {
  flex-shrink: 0;
}

.sidebar .sidebar-menu>ul>li:first-child .submenu-hdr {
  margin-top: 4px;
}

/* Main Navigation Links */

.sidebar .sidebar-menu ul li a {
  display: flex;
  align-items: center;
  gap: 0 !important;
  min-height: 40px;
  padding: 9px 12px !important;
  margin: 2px 0 !important;
  border-radius: 12px;
  font-size: 14px !important;
  font-weight: 500 !important;
  line-height: 1.2;
  color: #515B73;
  text-decoration: none !important;
  transform: none !important;
  -webkit-transition: background-color 0.2s ease, color 0.2s ease;
  -ms-transition: background-color 0.2s ease, color 0.2s ease;
  transition: background-color 0.2s ease, color 0.2s ease;
}

.sidebar .sidebar-menu ul li a>i {
  font-size: 18px !important;
  width: 34px !important;
  height: 34px !important;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  margin-right: 10px !important;
  border-radius: 10px;
  color: #838A9B;
  background: rgba(17, 24, 39, 0.055);
  box-shadow: inset 0 0 0 1px transparent;
  -webkit-transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
  -ms-transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
  transition: background 0.2s ease, color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
}

.sidebar .sidebar-menu ul li a span:not(.menu-arrow) {
  line-height: 1.2;
  font-weight: inherit;
}

/* Toggle icon */

.sidebar .sidebar-menu ul li a .menu-arrow {
  margin-left: auto;
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 0;
  background: transparent;
  transform: none !important;
}

.sidebar .sidebar-menu ul li a .menu-arrow::before {
  content: "+";
  font-family: inherit;
  font-size: 17px;
  line-height: 1;
  font-weight: 400;
  color: #9CA1AF;
}

.sidebar .sidebar-menu ul li a:hover {
  background: rgba(31, 59, 96, 0.06);
  color: #202C4B;
}

.sidebar .sidebar-menu ul li a:hover>i {
  background: rgba(31, 59, 96, 0.14);
  color: #1f3b60;
  transform: translateY(-1px) scale(1.04);
}

.sidebar .sidebar-menu ul li a:focus-visible {
  outline: 2px solid #1f3b60;
  outline-offset: 2px;
  border-radius: 8px;
}

/* Submenu Arrow when open */

.sidebar .sidebar-menu .submenu>a.subdrop {
  color: #202C4B;
}

.sidebar .sidebar-menu .submenu>a.subdrop>i {
  background: rgba(31, 59, 96, 0.12);
  color: #1f3b60;
}

.sidebar .sidebar-menu .submenu>a.subdrop .menu-arrow::before {
  content: "−";
}

/* Active Menu Links */

.sidebar .sidebar-menu ul li a.active,
.sidebar .sidebar-menu ul li a.subdrop.active {
  position: relative;
  background: #FFF !important;
  color: #202C4B !important;
  font-weight: 600 !important;
  border: 1px solid #E9EDF4 !important;
  border-radius: 12px !important;
}

.sidebar .sidebar-menu ul li a.active:active,
.sidebar .sidebar-menu ul li a.subdrop.active:active {
  transform: translateY(1px);
}

.sidebar .sidebar-menu ul li a.active>i,
.sidebar .sidebar-menu ul li a.subdrop.active>i {
  background: rgba(29, 66, 130, 0.14) !important;
  color: #17386c !important;
  transform: none;
}

.sidebar .sidebar-menu ul li a.active .menu-arrow::before,
.sidebar .sidebar-menu ul li a.subdrop.active .menu-arrow::before {
  color: #17386c !important;
}

.sidebar .sidebar-menu ul li a.active::before,
.sidebar .sidebar-menu ul li a.subdrop.active::before {
  display: none !important;
}

/* Accordion state */

.sidebar .sidebar-menu .submenu ul {
  display: none;
}

.sidebar .sidebar-menu .active.subdrop~ul {
  display: block !important;
}

/* Submenus (Child Links) */

.sidebar .sidebar-menu ul ul {
  position: relative;
  padding: 0;
  margin: 2px 0 6px !important;
}

.sidebar .sidebar-menu ul ul::before {
  display: none !important;
}

.sidebar .sidebar-menu ul ul li {
  margin-bottom: 2px;
}

.sidebar .sidebar-menu ul ul li.active a {
  background: rgba(17, 24, 39, 0.055);
  color: #202C4B;
}

.sidebar .sidebar-menu ul ul li a {
  min-height: 34px !important;
  padding: 7px !important;
  margin: 1px 0 !important;
  font-size: 13.5px !important;
  font-weight: 500 !important;
  color: #838A9B;
  border-radius: 8px;
}

.sidebar .sidebar-menu ul ul li a::before,
.sidebar .sidebar-menu ul ul li a::after {
  display: none !important;
}

.sidebar .sidebar-menu ul ul li a:hover {
  background: rgba(17, 24, 39, 0.055);
  color: #202C4B;
}

.sidebar .sidebar-menu ul ul li a.active {
  background: rgba(29, 66, 130, 0.12) !important;
  color: #17386c !important;
  font-weight: 600 !important;
  box-shadow: none;
}

.sidebar .sidebar-menu ul ul li a.active::before {
  display: none !important;
}

/* Sidebar Footer User Profile */

.sidebar .mui-side-footer {
  flex-shrink: 0;
  border-top: 1px solid #E9EDF4;
  padding: 12px;
  background: transparent;
}

.sidebar .mui-side-footer .mui-side-user {
  display: flex;
  align-items: center;
  gap: 11px;
  width: 100%;
  padding: 9px 10px;
  border-radius: 12px;
  text-align: left;
  background: #FFF;
  border: 1px solid #E9EDF4;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05);
  -webkit-transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
  -ms-transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
  transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}

.sidebar .mui-side-footer .mui-side-user:hover {
  border-color: rgba(31, 59, 96, 0.38);
  box-shadow: 0 3px 10px rgba(15, 23, 42, 0.08);
  transform: translateY(-1px);
}

.sidebar .mui-side-footer .mui-side-user:focus-visible {
  outline: 2px solid #1f3b60;
  outline-offset: 2px;
  border-radius: 8px;
}

.sidebar .mui-side-footer .mui-side-user img {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  object-fit: cover;
  flex-shrink: 0;
}

.sidebar .mui-side-footer .mui-side-user.dropdown-toggle::after {
  display: none !important;
}

.sidebar .mui-side-footer .mui-su-meta {
  flex: 1 1 auto;
  min-width: 0;
  line-height: 1.25;
}

.sidebar .mui-side-footer .mui-su-name {
  display: block;
  font-size: 14px;
  font-weight: 600;
  color: #202C4B;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sidebar .mui-side-footer .mui-su-role {
  display: block;
  font-size: 12px;
  color: #838A9B;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sidebar .mui-side-footer .mui-su-caret {
  flex-shrink: 0;
  color: #9CA1AF;
  font-size: 16px;
}

/* ---------- Mobile Drawer Overlay ---------- */
.sidebar-overlay {
  display: none;
  height: 100%;
  width: 100%;
  z-index: 99;
  background-color: rgba(15, 23, 42, 0.45);
  backdrop-filter: blur(1px);
  -webkit-backdrop-filter: blur(1px);
  position: fixed;
  top: 60px;
  left: 0;
}

.sidebar-overlay.opened {
  display: block;
}

.slide-nav .sidebar {
  margin-left: 0 !important;
}

/* ---------- Mini Sidebar & Expand on Hover ---------- */
.mini-sidebar .sidebar-menu ul li a>i {
  margin-right: 0 !important;
}

.mini-sidebar.expand-menu .sidebar-menu ul li a>i {
  margin-right: 10px !important;
}

@media (min-width: 992px) {
  body.mini-sidebar .sidebar {
    width: 84px;
    overflow: hidden;
  }

  body.mini-sidebar .page-wrapper {
    margin-left: 84px;
  }

  body.mini-sidebar:not(.expand-menu) .sidebar-menu ul li a {
    justify-content: center;
    padding: 12px;
  }

  body.mini-sidebar:not(.expand-menu) .mui-side-search,
  body.mini-sidebar:not(.expand-menu) .mui-brand-meta,
  body.mini-sidebar:not(.expand-menu) .mui-brand-caret,
  body.mini-sidebar:not(.expand-menu) .mui-su-meta,
  body.mini-sidebar:not(.expand-menu) .mui-su-caret,
  body.mini-sidebar:not(.expand-menu) .submenu-hdr,
  body.mini-sidebar:not(.expand-menu) .sidebar-menu ul li a .menu-arrow,
  body.mini-sidebar:not(.expand-menu) .sidebar-menu ul li a span:not(.menu-arrow) {
    display: none !important;
  }

  body.mini-sidebar:not(.expand-menu) .mui-brand-card {
    justify-content: center;
    padding: 8px;
    gap: 0;
  }

  body.mini-sidebar:not(.expand-menu) .mui-side-search {
    border-bottom: 0;
  }

  body.mini-sidebar:not(.expand-menu) .mui-side-footer .mui-side-user {
    justify-content: center;
  }

  /* Collapsed rail: hide open submenus */

  body.mini-sidebar:not(.expand-menu) .sidebar-menu .active.subdrop~ul {
    display: none !important;
  }

  body.mini-sidebar.expand-menu .sidebar {
    overflow: visible;
    width: 280px;
  }

  body.mini-sidebar.expand-menu .sidebar-menu ul li a {
    justify-content: flex-start;
    padding: 12px 16px;
  }

  body.mini-sidebar.expand-menu .mui-brand-meta,
  body.mini-sidebar.expand-menu .mui-brand-caret,
  body.mini-sidebar.expand-menu .mui-su-meta,
  body.mini-sidebar.expand-menu .mui-su-caret,
  body.mini-sidebar.expand-menu .submenu-hdr,
  body.mini-sidebar.expand-menu .sidebar-menu ul li a .menu-arrow,
  body.mini-sidebar.expand-menu .sidebar-menu ul li a span:not(.menu-arrow) {
    display: inline-block !important;
  }

  body.mini-sidebar.expand-menu .mui-brand-meta,
  body.mini-sidebar.expand-menu .mui-su-meta,
  body.mini-sidebar.expand-menu .submenu-hdr {
    display: flex !important;
  }

  body.mini-sidebar.expand-menu .mui-side-search {
    display: block !important;
    border-bottom: 1px solid #E9EDF4;
  }

  /* Hover-expanded rail: restore open submenu */

  body.mini-sidebar.expand-menu .sidebar-menu .active.subdrop~ul {
    display: block !important;
  }
}

.notification-dropdown {
  max-width: 100%;
  min-width: 450px !important;
}

.notification-dropdown .topnav-dropdown-header {
  border-bottom: 1px solid #E9EDF4;
}

.topnav-dropdown-header {
  padding: 24px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: space-between;
  -webkit-justify-content: space-between;
}

.topnav-dropdown-header .notification-title {
  font-size: 16px;
  color: #000;
  margin-bottom: 0;
  font-weight: 700;
}

.notification-dropdown .noti-content {
  height: 270px;
  overflow-y: auto;
  position: relative;
}

.activity {
  width: 100%;
}

.activity .activity-box {
  position: relative;
}

.activity .activity-list {
  list-style: none;
  padding: 0;
  margin: 0;
  position: relative;
}

.activity .activity-list li {
  background-color: #FFF;
  position: relative;
  border: 1px solid #9CA1AF;
  margin: 0 0 10px;
  padding: 10px;
  font-size: 15px;
  border-radius: 6px;
  display: flex;
  align-items: start;
}

.activity .activity-list li .activity-user {
  margin-right: 10px;
}

.activity .activity-list li .activity-user>a {
  width: 50px;
  height: 50px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.activity .activity-list li .activity-content {
  background-color: #FFF;
  position: relative;
  flex: 1;
}

.activity .activity-list li .time {
  color: #838A9B;
  display: block;
  font-size: 12px;
  line-height: 1.35;
}

.activity .activity-list li a.name {
  color: #000;
}

.activity .activity-list li a {
  font-weight: 600;
  font-size: 14px;
}

.activity .activity-list li a:hover {
  color: #1f3b60;
}

.activity .activity-list li a img {
  width: 50px;
  height: 50px;
  border-radius: 5px;
}

#notification_item {
  position: relative;
}

#notification_item .notification-dropdown {
  right: 0;
  left: unset;
  transform: none;
  transition: 0.5s all;
  display: none;
  top: 50px;
}

#notification_item.notification-item-show .notification-dropdown {
  display: block;
  transition: 0.5s all;
  visibility: visible;
  opacity: 1;
}

#global-loader {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 999999;
  width: 100%;
  height: 100%;
  background: #FFF;
  display: flex;
  align-items: center;
  justify-content: center;
}

.page-loader {
  position: relative;
  width: 160px;
  height: 160px;
}

.notification-status-dot {
  width: 6px;
  height: 6px;
  background: #E82646;
  border-radius: 50%;
  position: absolute;
  left: 5px;
  right: auto;
  top: 5px;
  z-index: 1;
}

.notification-status-dot:before {
  content: "";
  position: absolute;
  width: 10px;
  height: 10px;
  -webkit-animation-delay: 0s;
  animation-delay: 0s;
  -webkit-animation: pulsate1 2s;
  animation: pulsate1 2s;
  -webkit-animation-direction: forwards;
  animation-direction: forwards;
  -webkit-animation-iteration-count: infinite;
  animation-iteration-count: infinite;
  -webkit-animation-timing-function: steps;
  animation-timing-function: steps;
  opacity: 1;
  border-radius: 50%;
  border: 5px solid #F8BEC8;
  top: -2px;
  left: -2px;
  background: #F493A3;
  z-index: -1;
}

@-webkit-keyframes pulsate1 {
  0% {
    -webkit-transform: scale(0.6);
    transform: scale(0.6);
    opacity: 1;
    box-shadow: inset 0px 0px 25px 3px rgba(255, 255, 255, 0.75), 0px 0px 25px 10px rgba(255, 255, 255, 0.75);
  }

  100% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 0;
    box-shadow: none;
  }
}

@keyframes pulsate1 {
  0% {
    -webkit-transform: scale(0.6);
    transform: scale(0.6);
    opacity: 1;
    box-shadow: inset 0px 0px 25px 3px rgba(255, 255, 255, 0.75), 0px 0px 25px 10px rgba(255, 255, 255, 0.75);
  }

  100% {
    -webkit-transform: scale(1, 1);
    transform: scale(1);
    opacity: 0;
    box-shadow: none;
  }
}

.chat-status-dot {
  width: 6px;
  height: 6px;
  background: #05C3FB;
  border-radius: 50%;
  position: absolute;
  left: 5px;
  right: auto;
  top: 5px;
  z-index: 1;
}

.chat-status-dot:before {
  content: "";
  position: absolute;
  width: 10px;
  height: 10px;
  -webkit-animation-delay: 0s;
  animation-delay: 0s;
  -webkit-animation: pulsate1 2s;
  animation: pulsate1 2s;
  -webkit-animation-direction: forwards;
  animation-direction: forwards;
  -webkit-animation-iteration-count: infinite;
  animation-iteration-count: infinite;
  -webkit-animation-timing-function: steps;
  animation-timing-function: steps;
  opacity: 1;
  border-radius: 50%;
  border: 5px solid #B4EDFE;
  top: -2px;
  left: -2px;
  background: #82E1FD;
  z-index: -1;
}

.noti-delete {
  display: none;
  transition: 0.5s all;
}

.noti-hover:hover .noti-delete {
  display: block;
}

.sidebar-contact {
  position: fixed;
  top: 50%;
  right: 0;
  transform: translateY(-50%);
  width: 350px;
  height: auto;
  background: #fff;
  box-sizing: border-box;
  transition: 0.5s;
  z-index: 9999;
}

.sidebar-contact .toggle-theme {
  position: fixed;
  width: 48px;
  text-align: center;
  cursor: pointer;
  background: #1f3b60;
  top: 0;
  right: 0;
  padding: 6px;
  height: 48px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  color: #FFF;
  border-top-left-radius: 3px;
  border-bottom-left-radius: 3px;
}

.sidebar-contact .toggle-theme .fa-spin {
  -webkit-animation: fa-spin 2s infinite linear;
  animation: fa-spin 2s infinite linear;
}

/* The gear is a Tabler glyph now, so the keyframes can no longer come from
   Font Awesome's stylesheet - same 0-360 rotation, declared locally. */
@-webkit-keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }

  100% {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

@keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }

  100% {
    -webkit-transform: rotate(360deg);
    transform: rotate(360deg);
  }
}

#theme-settings {
  width: 26px;
  height: 26px;
  border: 1px solid #E9EDF4;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50px;
}

.input-themeselect label {
  width: 100%;
}

.sidebar-themesettings {
  transition: all 0.5s;
  width: 400px !important;
  height: 100vh;
  z-index: 99999;
  overflow: auto;
  max-width: 100%;
}

.sidebar-themesettings.open {
  right: 0;
}

.sidebar-themesettings .themesettings-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-bottom: 20px;
  border-bottom: 1px solid #E9EDF4;
}

.sidebar-themesettings .themesettings-header h4 {
  color: #202C4B;
  font-size: 18px;
}

.sidebar-themesettings .themesettings-inner .themesettings-content {
  border-bottom: 1px solid #E9EDF4;
  margin-bottom: 15px;
}

.sidebar-themesettings .themesettings-inner .themesettings-content h6 {
  font-size: 14px;
  font-weight: 600;
  color: #000;
  margin-bottom: 15px;
}

.sidebar-themesettings .input-themeselect {
  background: #F4F6FA;
  padding: 10px;
  border-radius: 10px;
  border: 1px solid #E9EDF4;
  margin-bottom: 15px;
}

.sidebar-themesettings .input-themeselect input[type=radio] {
  display: none;
}

.sidebar-themesettings .input-themeselect input[type=radio]:checked~label .checkboxs-theme:after {
  background-color: #4A00E5;
  border-color: #4A00E5;
  content: "";
}

.sidebar-themesettings .input-themeselect input[type=radio]:checked~label .checkboxs-theme::before {
  content: "\ea5e";
  font-family: "tabler-icons";
  color: #fff;
  font-weight: 400;
  font-size: 10px;
  right: 4px;
  position: absolute;
  top: -14px;
  z-index: 9;
}

.sidebar-themesettings .input-themeselect img {
  height: 80px;
}

.sidebar-themesettings .input-themeselect .checkboxs-theme {
  position: relative;
  width: 100%;
  display: block;
}

.sidebar-themesettings .input-themeselect .checkboxs-theme:after {
  position: absolute;
  content: "";
  border: 1px solid #E8E8E8;
  width: 16px;
  height: 16px;
  border-radius: 5px;
  right: 0;
  top: -17px;
}

.sidebar-themeoverlay {
  position: fixed;
  width: 100%;
  height: 100vh;
  background: rgba(0, 0, 0, 0.75);
  top: 0;
  left: -100%;
  z-index: 10000;
}

.sidebar-themeoverlay.open {
  left: 0;
}

.sidebar-themesettings.offcanvas.offcanvas-end {
  width: 400px !important;
}

.custom-themecolor label {
  width: 40px;
  height: 40px;
  border-radius: 5px;
  position: relative;
  border: 1px solid #E9EDF4;
  position: relative;
}

.custom-themecolor label::before {
  width: 40px;
  height: 40px;
  position: absolute;
  top: 50%;
  left: 50%;
  content: "";
  transform: translate(-50%, -50%);
  border-radius: 5px;
}

.custom-themecolor label.bg-primary::before {
  background: #1f3b60;
}

.custom-themecolor label.bg-primary::before {
  background: #1f3b60;
}

.custom-themecolor label.bg-violet::before {
  background: #673AB7;
}

.custom-themecolor label.bg-orange::before {
  background: #FD7E14;
}

.custom-themecolor label.bg-pink::before {
  background: #E83E8C;
}

.custom-themecolor label.bg-green::before {
  background: #2CA87F;
}

.custom-themecolor label.bg-red::before {
  background: #DC2626;
}

.custom-themecolor input[type=radio] {
  display: none;
}

.custom-themecolor input[type=radio]:checked~label:after {
  content: "\ea67";
  font-family: "tabler-icons";
  color: #FFF;
  font-weight: 400;
  font-size: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  position: absolute;
}

.custom-themecolor input[type=radio] {
  display: none;
}

.custom-themecolor input[type=radio]:checked~label {
  outline-color: #1f3b60;
}

.custom-themecolor input[type=radio]:checked~label:after {
  content: "\ea67";
  font-family: "tabler-icons";
  color: #1f3b60;
  font-weight: 400;
  font-size: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  position: absolute;
}

.custom-themecolor input[type=radio]:checked~label.primary-topbar:after,
.custom-themecolor input[type=radio]:checked~label.dark-topbar:after {
  color: #FFF;
}

.custom-themecolor label {
  width: 40px;
  height: 40px;
  border-radius: 5px;
  position: relative;
  outline-offset: 3px;
  outline: 1px solid #E9EDF4;
}

.custom-themecolor label.white-topbar {
  background: #FFF;
  border: 1px solid #E9EDF4;
}

.custom-themecolor label.dark-topbar {
  background: #202C4B;
}

.custom-themecolor label.primary-topbar {
  background: #1f3b60;
}

.custom-themecolor label.grey-topbar {
  background: #E6E8EB;
}

.custom-themecolor label.bg-darkblack {
  background: #39435F;
}

.custom-themecolor label.bg-darkblue {
  background: #07396D;
}

.theme-layout.active img {
  border: 1px solid #1f3b60;
  border-radius: 5px;
}

.theme-layout input[type=radio] {
  display: none;
}

.theme-layout input[type=radio]:checked~label .layout-img img {
  border-color: #1f3b60;
}

.theme-layout input[type=radio]:checked~label .layout-type {
  position: relative;
  padding-left: 15px;
}

.theme-layout input[type=radio]:checked~label .layout-type:after {
  content: "\ea67";
  font-family: "tabler-icons";
  color: #1f3b60;
  font-weight: 400;
  font-size: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  position: absolute;
  display: block;
}

.theme-layout label .layout-img img {
  border: 1px solid #E9EDF4;
  border-radius: 5px;
}

.theme-layout label:after {
  display: none;
}

.theme-mode input[type=radio] {
  display: none;
}

.theme-mode input[type=radio]:checked~label {
  border-color: #1f3b60;
}

.theme-mode input[type=radio]:checked~label .avatar {
  color: #1f3b60;
  background-color: #F2F5FF;
}

.theme-mode label {
  border: 1px solid #E9EDF4;
}

.theme-mode label .avatar {
  background-color: #E9EDF4;
  color: #202C4B;
}

.theme-sidebarbg input[type=radio] {
  display: none;
}

.theme-sidebarbg input[type=radio]:checked~label img {
  border-color: #1f3b60 !important;
}

.theme-sidebarbg label {
  height: 73px;
}

.theme-sidebarbg label img {
  width: 46px;
  height: 73px;
  object-fit: cover;
  border: 2px solid #E9EDF4;
}

.theme-sidebarcolor input[type=radio] {
  display: none;
}

.theme-sidebarcolor input[type=radio]:checked~label {
  border-color: #1f3b60 !important;
  position: relative;
}

.theme-sidebarcolor input[type=radio]:checked~label:after {
  content: "\ea67";
  font-family: "tabler-icons";
  color: #1f3b60;
  font-weight: 400;
  font-size: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  position: absolute;
}

.theme-sidebarcolor input[type=radio]:checked~label.bg-dark:after {
  color: #FFF;
}

.theme-sidebarcolor label {
  width: 93px;
  height: 40px;
  border: 1px solid #E9EDF4;
}

.custom-btn-close {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: #838A9B;
  color: #FFF;
  margin: 0;
  padding: 0;
  background-image: none;
}

.custom-btn-close:hover {
  background-color: #E82646;
}

.custom-themecolor.custom-themecolor-rounded label,
.custom-themecolor.custom-themecolor-rounded .pickr-topbar {
  width: 40px;
  height: 40px;
  border-radius: 5px;
}

.custom-themecolor.custom-themecolor-rounded .pickr .pcr-button {
  width: 25px;
  height: 25px;
  border-radius: 5px;
}

.custom-themecolor.custom-themecolor-rounded label.topbar-bg-1 {
  background: #FBFBFD;
}

.custom-themecolor.custom-themecolor-rounded label.topbar-bg-2 {
  background: #E8FCFF;
}

.custom-themecolor.custom-themecolor-rounded label.topbar-bg-3 {
  background: #E6E8EB;
}

.custom-themecolor.custom-themecolor-rounded label.topbar-bg-4 {
  background: #FFF5E7;
}

.custom-themecolor,
.custom-themecolor {
  line-height: 0;
}

.custom-themecolor .pickr-container-background .pickr .pcr-button::after {
  line-height: 3;
}

.custom-themecolor .pickr-topbar .pickr .pcr-button::after {
  line-height: 1.9;
}

.sidebar-header .avatar.avatar-md {
  width: 40px;
  height: 40px;
}

.custom-themecolor input[type=radio] {
  display: none;
}

.custom-themecolor input[type=radio]:checked~label:after {
  content: "\ea5e";
  font-family: "tabler-icons";
  color: #FFF;
  font-weight: 400;
  font-size: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  position: absolute;
  width: 18px;
  height: 18px;
  background: #1ABE17;
  border-radius: 50%;
}

.custom-themecolor input[type=radio]:checked~label.primary-topbar:after,
.custom-themecolor input[type=radio]:checked~label.dark-topbar:after {
  color: #FFF;
}

.custom-themecolor label {
  width: 40px;
  height: 40px;
  border-radius: 5px;
  position: relative;
}

.custom-themecolor label {
  width: 40px;
  height: 40px;
  border-radius: 5px;
  position: relative;
  outline-offset: 3px;
  outline: 1px solid #BCBFC3;
}

.custom-themecolor label {
  outline-offset: 3px;
  outline: 1px solid #BCBFC3;
}

.custom-themecolor input[type=radio]:checked~label {
  outline-color: #1f3b60;
}

.custom-themecolor label.bg-darkblack {
  background: #39435F;
}

.custom-themecolor label.bg-darkblue {
  background: #07396D;
}

/******* Components ******/
.avatar {
  position: relative;
  height: 2.625rem;
  width: 2.625rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 4px;
  color: #FFF;
  font-weight: 500;
}

.avatar a.badge:hover {
  color: #FFF;
}

.avatar img {
  width: 100%;
  height: 100%;
  border-radius: 4px;
}

.avatar.avatar-rounded {
  border-radius: 50%;
}

.avatar.avatar-rounded img {
  border-radius: 50%;
}

.avatar.avatar-radius-0 {
  border-radius: 0;
}

.avatar.avatar-radius-0 img {
  border-radius: 0;
}

.avatar .avatar-notification {
  position: absolute;
  width: 22px;
  height: 22px;
  font-size: 10px;
  border: 2px solid #FFF;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  inset-block-start: -4%;
  inset-inline-end: -0.375rem;
}

.avatar.online:before,
.avatar.offline:before {
  position: absolute;
  content: "";
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  inset-inline-end: 0;
  inset-block-end: 0;
  border: 2px solid #FFF !important;
  z-index: 1;
}

.avatar.online:before {
  background-color: #1ABE17;
}

.avatar.offline:before {
  background-color: #838A9B;
}

.avatar.avatar-xs {
  width: 1.25rem;
  height: 1.25rem;
  line-height: 1.25rem;
  font-size: 0.65rem;
}

.avatar.avatar-xs .avatar-notification {
  padding: 4px;
  width: 12px;
  height: 12px;
  line-height: 12px;
  font-size: 8px;
  inset-block-start: -25%;
  inset-inline-end: -2.12px;
}

.avatar.avatar-sm {
  width: 1.5rem;
  height: 1.5rem;
  line-height: 1.5rem;
  font-size: 0.65rem;
}

.avatar.avatar-sm .avatar-notification {
  padding: 0.3rem;
  width: 1.1rem;
  height: 1.1rem;
  line-height: 1.1rem;
  font-size: 0.5rem;
  inset-block-start: -28%;
  inset-inline-end: -0.45rem;
}

.avatar.avatar-sm.online:before,
.avatar.avatar-sm.offline:before {
  width: 0.5rem;
  height: 0.5rem;
}

.avatar.avatar-md {
  width: 2rem;
  height: 2rem;
  line-height: 2rem;
  font-size: 0.8rem;
}

.avatar.avatar-md .avatar-notification {
  padding: 0.4rem;
  width: 1.2rem;
  height: 1.2rem;
  line-height: 1.2rem;
  font-size: 0.65rem;
  inset-block-start: -6%;
  inset-inline-end: -13%;
}

.avatar.avatar-md.online:before,
.avatar.avatar-md.offline:before {
  width: 0.75rem;
  height: 0.75rem;
}

.avatar.avatar-md svg {
  width: 1.5rem;
  height: 1.5rem;
}

.avatar.avatar-lg {
  width: 2.813rem;
  height: 2.813rem;
  line-height: 2.813rem;
  font-size: 1rem;
}

.avatar.avatar-lg .avatar-notification {
  inset-block-start: -15%;
  inset-inline-end: -0.25%;
}

.avatar.avatar-lg.online:before,
.avatar.avatar-lg.offline:before {
  width: 0.8rem;
  height: 0.8rem;
}

.avatar.avatar-lg svg {
  width: 1.8rem;
  height: 1.8rem;
}

.avatar.avatar-xl {
  width: 4rem;
  height: 4rem;
  line-height: 4rem;
  font-size: 1.25rem;
}

.avatar.avatar-xl .avatar-notification {
  inset-block-start: -8%;
  inset-inline-end: -0.2%;
}

.avatar.avatar-xl.online:before,
.avatar.avatar-xl.offline:before {
  width: 0.95rem;
  height: 0.95rem;
}

.avatar.avatar-xxl {
  width: 5rem;
  height: 5rem;
  line-height: 5rem;
  font-size: 1.5rem;
}

.avatar.avatar-xxl .avatar-notification {
  inset-block-start: -4%;
  inset-inline-end: 0rem;
}

.avatar.avatar-xxl.online:before,
.avatar.avatar-xxl.offline:before {
  width: 1.05rem;
  height: 1.05rem;
  inset-block-end: 0.25rem;
}

.avatar.avatar-xxxl {
  width: 6rem;
  height: 6rem;
  line-height: 6rem;
  font-size: 1.75rem;
}

.avatar.avatar-xxxl .avatar-notification {
  inset-block-start: -4%;
  inset-inline-end: 0rem;
}

.avatar.avatar-xxxl.online:before,
.avatar.avatar-xxxl.offline:before {
  width: 1.05rem;
  height: 1.05rem;
  inset-block-end: 0.25rem;
}

.avatar.rounded-lg {
  border-radius: 20px !important;
}

.avatar-list-stacked {
  padding: 0;
}

.avatar-list-stacked.avatar-group-overlapped .avatar {
  margin-right: -0.875rem;
}

.avatar-list-stacked.avatar-group-overlapped .avatar:hover {
  z-index: 1;
}

.avatar-list-stacked.avatar-group-lg .avatar {
  width: 3.25rem;
  height: 3.25rem;
}

.avatar-list-stacked.avatar-group-lg .avatar>.initial-wrap {
  font-size: 0.95rem;
}

.avatar-list-stacked.avatar-group-lg.avatar-group-overlapped .avatar {
  margin-right: -1rem;
}

.avatar-list-stacked.avatar-group-sm .avatar {
  width: 2rem;
  height: 2rem;
}

.avatar-list-stacked.avatar-group-sm .avatar>.initial-wrap {
  font-size: 0.6rem;
}

.avatar-list-stacked.avatar-group-sm.avatar-group-overlapped .avatar {
  margin-right: -0.625rem;
}

.avatar-list-stacked.avatar-group-xs .avatar {
  width: 1rem;
  height: 1rem;
  margin-inline-end: -6px !important;
}

.avatar-list-stacked.avatar-group-xs .avatar>.initial-wrap {
  font-size: 0.6rem;
}

.avatar-list-stacked.avatar-group-xs.avatar-group-overlapped .avatar {
  margin-right: -6px;
}

.avatar-list-stacked .avatar {
  margin-inline-end: -0.875rem !important;
  border: 1px solid rgba(0, 0, 0, 0.05);
  vertical-align: middle;
  transition: transform ease 200ms;
}

.avatar-list-stacked .avatar:last-child {
  margin-inline-end: 0 !important;
}

.avatar-list-stacked .avatar:hover {
  z-index: 1;
  transform: translateY(-0.188rem);
}

.avatar-group {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
}

.avatar-group .avatar {
  width: 2.625rem;
  height: 2.625rem;
}

.avatar-group .avatar .avatar-img,
.avatar-group .avatar>.initial-wrap {
  border: 2px solid #FFF;
  font-size: 0.9rem;
}

.avatar-group.avatar-group-overlapped .avatar {
  margin-right: -0.875rem;
}

.avatar-group.avatar-group-overlapped .avatar:hover {
  z-index: 1;
}

.avatar-group.avatar-group-lg .avatar {
  width: 3.25rem;
  height: 3.25rem;
}

.avatar-group.avatar-group-lg .avatar>.initial-wrap {
  font-size: 0.95rem;
}

.avatar-group.avatar-group-lg.avatar-group-overlapped .avatar {
  margin-right: -1rem;
}

.avatar-group.avatar-group-sm .avatar {
  width: 2rem;
  height: 2rem;
}

.avatar-group.avatar-group-sm .avatar>.initial-wrap {
  font-size: 0.6rem;
}

.avatar-group.avatar-group-sm.avatar-group-overlapped .avatar {
  margin-right: -0.625rem;
}

.avatar-sm {
  width: 1.5rem;
  height: 1.5rem;
}

/*-----------------
    Avatar — consolidated variants

    Collected from the dashboard, profile and finance pages so every avatar in
    the application is built from this one component. Sizes, rounding, groups,
    stacks and online/offline are declared above; what follows are the
    remaining variants those pages relied on.
-----------------*/
.avatar.away::before,
.avatar.busy::before {
  position: absolute;
  content: "";
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  inset-inline-end: 0;
  inset-block-end: 0;
  border: 2px solid #FFF !important;
  z-index: 1;
}

.avatar.away::before {
  background-color: #EAB300;
}

.avatar.busy::before {
  background-color: #E82646;
}

.avatar.status-top.online::before,
.avatar.status-top.offline::before,
.avatar.status-top.away::before,
.avatar.status-top.busy::before {
  inset-block-end: auto;
  inset-block-start: 0;
}

.avatar.avatar-initial,
.avatar.avatar-icon {
  font-weight: 500;
  text-transform: uppercase;
  overflow: hidden;
}

.avatar.avatar-icon i {
  line-height: 1;
}

.avatar.avatar-bordered {
  border: 2px solid #FFF;
  box-shadow: 0 0 0 1px #E9EDF4;
}

.avatar.avatar-hover {
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.avatar.avatar-hover:hover {
  transform: translateY(-2px);
  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.15);
  z-index: 2;
}

.avatar.avatar-overlay {
  overflow: hidden;
}

.avatar.avatar-overlay .avatar-overlay-content {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 0, 0, 0.45);
  color: #FFF;
  opacity: 0;
  transition: opacity 0.2s ease;
}

.avatar.avatar-overlay:hover .avatar-overlay-content {
  opacity: 1;
}

.avatar .avatar-badge {
  position: absolute;
  inset-inline-end: -0.25rem;
  inset-block-start: -0.25rem;
  z-index: 2;
}

.avatar.avatar-count {
  background-color: #E9EDF4;
  color: #202C4B;
  font-size: 0.75rem;
  font-weight: 700;
}

/*-----------------
    Exact sizes and radii

    The dashboard, profile and finance pages were each built to their own
    avatar dimensions rather than the named scale above. These modifiers carry
    those exact values so those pages can drop their bespoke classes without
    shifting a single pixel. Prefer the named sizes for anything new.
-----------------*/
.avatar.avatar-26 {
  width: 26px;
  height: 26px;
}

.avatar.avatar-28 {
  width: 28px;
  height: 28px;
}

.avatar.avatar-32 {
  width: 32px;
  height: 32px;
}

.avatar.avatar-34 {
  width: 34px;
  height: 34px;
}

.avatar.avatar-38 {
  width: 38px;
  height: 38px;
}

.avatar.avatar-40 {
  width: 40px;
  height: 40px;
}

.avatar.avatar-42 {
  width: 42px;
  height: 42px;
}

.avatar.avatar-44 {
  width: 44px;
  height: 44px;
}

.avatar.avatar-46 {
  width: 46px;
  height: 46px;
}

.avatar.avatar-48 {
  width: 48px;
  height: 48px;
}

.avatar.avatar-58 {
  width: 58px;
  height: 58px;
}

.avatar.avatar-r-8 {
  border-radius: 8px;
}

.avatar.avatar-r-8 img {
  border-radius: 8px;
}

.avatar.avatar-r-9 {
  border-radius: 9px;
}

.avatar.avatar-r-9 img {
  border-radius: 9px;
}

.avatar.avatar-r-10 {
  border-radius: 10px;
}

.avatar.avatar-r-10 img {
  border-radius: 10px;
}

.avatar.avatar-r-11 {
  border-radius: 11px;
}

.avatar.avatar-r-11 img {
  border-radius: 11px;
}

.avatar.avatar-r-12 {
  border-radius: 12px;
}

.avatar.avatar-r-12 img {
  border-radius: 12px;
}

.avatar.avatar-r-16 {
  border-radius: 16px;
}

.avatar.avatar-r-16 img {
  border-radius: 16px;
}

.avatar img {
  object-fit: cover;
}

/* a bare <img class="avatar …"> has no inner image to size, so it takes the
   dimensions itself */
img.avatar {
  display: inline-block;
  flex-shrink: 0;
}

/*-----------------
    Status dot as a child element

    The `.online` / `.offline` modifiers above draw an 8px dot inside the
    avatar. Several pages instead hang a larger dot just outside the corner,
    so that shape gets its own child element. The ring colour follows the
    surface the avatar sits on via `--avatar-status-ring`.
-----------------*/
.avatar.avatar-26,
.avatar.avatar-28,
.avatar.avatar-32,
.avatar.avatar-34,
.avatar.avatar-38,
.avatar.avatar-40,
.avatar.avatar-42,
.avatar.avatar-44,
.avatar.avatar-46,
.avatar.avatar-48,
.avatar.avatar-58 {
  flex-shrink: 0;
}

.avatar .avatar-status {
  position: absolute;
  inset-inline-end: -2px;
  inset-block-end: -2px;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: #16a34a;
  border: 2px solid var(--avatar-status-ring, #FFF);
  z-index: 2;
}

.avatar .avatar-status.avatar-status-sm {
  width: 11px;
  height: 11px;
}

.avatar .avatar-status.avatar-status-inset {
  inset-inline-end: 1px;
  inset-block-end: 1px;
}

.avatar .avatar-status.is-offline {
  background: #9aa6c2;
}

.avatar .avatar-status.is-idle {
  background: #9CA1AF;
}

.avatar .avatar-status.is-online {
  background: #22c55e;
}

.avatar .avatar-status.is-away {
  background: #EAB300;
}

.avatar .avatar-status.is-busy {
  background: #E82646;
}

.avatar.avatar-ring img {
  box-shadow: 0 0 0 2px var(--avatar-ring-inner, #FFF), 0 0 0 3px var(--avatar-ring-outer, #1f3b60);
}

[data-theme=dark] .avatar .avatar-status,
[data-bs-theme=dark] .avatar .avatar-status {
  border-color: var(--avatar-status-ring, #181d2c);
}

/*-----------------
    Icon tile

    The avatar of a subject, channel, event or metric rather than a person: a
    softly rounded square with a centred icon. It takes the same named sizes as
    a photo avatar, and any `bg-*-transparent` utility supplies the tint, so no
    page needs its own icon-wrapper class.

        <span class="avatar avatar-icon avatar-md bg-primary-transparent">
            <i class="ti ti-users"></i>
        </span>

    Add `avatar-rounded` for a circle, or a background utility / gradient for a
    solid tile — `color` then falls back to the component's white.
-----------------*/
.avatar.avatar-icon {
  flex-shrink: 0;
  line-height: 1;
}

.avatar.avatar-icon>i {
  line-height: 1;
  font-size: 20px;
}

.avatar.avatar-icon.avatar-xs>i {
  font-size: 11px;
}

.avatar.avatar-icon.avatar-sm>i {
  font-size: 13px;
}

.avatar.avatar-icon.avatar-md>i {
  font-size: 16px;
}

.avatar.avatar-icon.avatar-lg>i {
  font-size: 22px;
}

.avatar.avatar-icon.avatar-xl>i {
  font-size: 28px;
}

.avatar.avatar-icon.avatar-xxl>i,
.avatar.avatar-icon.avatar-xxxl>i {
  font-size: 34px;
}

/* Exact glyph sizes, for tiles built to their own dimensions rather than
     the named scale above. Declared on the tile, not the icon, so the glyph
     is never a font-size utility fighting the component. */

.avatar.avatar-icon.avatar-glyph-14>i {
  font-size: 14px;
}

.avatar.avatar-icon.avatar-glyph-15>i {
  font-size: 15px;
}

.avatar.avatar-icon.avatar-glyph-16>i {
  font-size: 16px;
}

.avatar.avatar-icon.avatar-glyph-17>i {
  font-size: 17px;
}

.avatar.avatar-icon.avatar-glyph-18>i {
  font-size: 18px;
}

.avatar.avatar-icon.avatar-glyph-24>i {
  font-size: 24px;
}

/* Tinted from an accent token set by an ancestor, so a list can recolour
     its tiles row by row without a class per colour. Set `--avatar-accent`
     and `--avatar-accent-soft` alongside whatever accent the surrounding
     component already declares. */

.avatar.avatar-icon.avatar-accent {
  background: var(--avatar-accent, #1f3b60);
  color: #FFF;
}

.avatar.avatar-icon.avatar-accent>i {
  color: #FFF;
}

.avatar.avatar-icon.avatar-accent-soft {
  background: var(--avatar-accent-soft, #F2F5FF);
  color: var(--avatar-accent, #1f3b60);
}

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0) {
  border-radius: 10px;
}

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-xs,
.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-sm {
  border-radius: 6px;
}

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-md {
  border-radius: 8px;
}

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-xl,
.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-xxl,
.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-xxxl {
  border-radius: 14px;
}

/* An explicit `avatar-r-*` outranks the rounding the tile picks from
     its size — without this the exact radii only reach photo avatars. */

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-r-8 {
  border-radius: 8px;
}

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-r-9 {
  border-radius: 9px;
}

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-r-10 {
  border-radius: 10px;
}

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-r-11 {
  border-radius: 11px;
}

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-r-12 {
  border-radius: 12px;
}

.avatar.avatar-icon:not(.avatar-rounded):not(.avatar-radius-0).avatar-r-16 {
  border-radius: 16px;
}

/*-----------------
    Medal

    The award finish of the icon tile: the accent fill lit by a diagonal sheen
    and dropped onto a glow of its own colour. Used for achievement, badge and
    certificate galleries, where the tile is the trophy rather than a label.

        <span class="avatar avatar-icon avatar-48 avatar-rounded avatar-glyph-24 avatar-medal accent-warning">
            <i class="ti ti-medal"></i>
        </span>

    Colour comes from the accent pair on the tile or any ancestor, so a gallery
    recolours row by row without a class per medal. Pair with `.avatar-rounded`
    for the usual disc; any size in the scale works.
-----------------*/
.avatar.avatar-medal,
.avatar.avatar-icon.avatar-medal {
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.25), rgba(0, 0, 0, 0.15)), var(--avatar-accent, #1f3b60);
  color: #FFF;
  box-shadow: 0 8px 18px -8px var(--avatar-accent, #1f3b60);
}

.avatar.avatar-medal>i,
.avatar.avatar-icon.avatar-medal>i {
  color: #FFF;
}

/*-----------------
    AI orb

    The tile that marks machine-generated content — a summary, a prediction, an
    assistant reply. One violet-to-primary gradient across the whole template,
    so every AI surface is recognisable at a glance and no panel mixes its own.

        <span class="avatar avatar-icon avatar-26 avatar-r-8 avatar-glyph-15 avatar-ai">
            <i class="ti ti-sparkles"></i>
        </span>

    Unlike the accent tiles this one does not follow its surroundings: the
    gradient is the signal.
-----------------*/
.avatar.avatar-ai,
.avatar.avatar-icon.avatar-ai {
  background: linear-gradient(135deg, var(--accent-purple), var(--bs-primary));
  color: #FFF;
}

.avatar.avatar-ai>i,
.avatar.avatar-icon.avatar-ai>i {
  color: #FFF;
}

/*-----------------
    Accent tokens

    Set the pair on any ancestor — a list row, a card, a KPI tile — and every
    `.avatar-accent` / `.avatar-accent-soft` beneath it follows, so a list can
    recolour per row without a class per colour on the avatar itself.
-----------------*/
/* One accent modifier for the whole template. Set it on any ancestor — a list
   row, a card, a KPI tile, an avatar — and everything beneath recolours from
   the same pair. Solid tone in `--accent`, 12% tint in `--accent-soft`; the
   `--avatar-*` aliases keep older avatar markup working off the same values. */
.accent-primary {
  --accent: var(--bs-primary);
  --accent-soft: var(--tint-primary);
  --accent-strong: var(--bs-primary);
  --avatar-accent: var(--bs-primary);
  --avatar-accent-soft: var(--tint-primary);
}

.accent-secondary {
  --accent: var(--bs-secondary);
  --accent-soft: var(--tint-secondary);
  --accent-strong: var(--bs-secondary);
  --avatar-accent: var(--bs-secondary);
  --avatar-accent-soft: var(--tint-secondary);
}

.accent-success {
  --accent: var(--bs-success);
  --accent-soft: var(--tint-success);
  --accent-strong: var(--bs-success);
  --avatar-accent: var(--bs-success);
  --avatar-accent-soft: var(--tint-success);
}

.accent-info {
  --accent: var(--bs-info);
  --accent-soft: var(--tint-info);
  --accent-strong: var(--bs-info);
  --avatar-accent: var(--bs-info);
  --avatar-accent-soft: var(--tint-info);
}

.accent-warning {
  --accent: var(--bs-warning);
  --accent-soft: var(--tint-warning);
  --accent-strong: var(--bs-warning);
  --avatar-accent: var(--bs-warning);
  --avatar-accent-soft: var(--tint-warning);
}

.accent-danger {
  --accent: var(--bs-danger);
  --accent-soft: var(--tint-danger);
  --accent-strong: var(--bs-danger);
  --avatar-accent: var(--bs-danger);
  --avatar-accent-soft: var(--tint-danger);
}

.accent-purple {
  --accent: var(--accent-purple);
  --accent-soft: var(--tint-purple);
  --accent-strong: var(--accent-purple);
  --avatar-accent: var(--accent-purple);
  --avatar-accent-soft: var(--tint-purple);
}

.accent-teal {
  --accent: var(--accent-teal);
  --accent-soft: var(--tint-teal);
  --accent-strong: var(--accent-teal);
  --avatar-accent: var(--accent-teal);
  --avatar-accent-soft: var(--tint-teal);
}

.accent-pink {
  --accent: var(--accent-pink);
  --accent-soft: var(--tint-pink);
  --accent-strong: var(--accent-pink);
  --avatar-accent: var(--accent-pink);
  --avatar-accent-soft: var(--tint-pink);
}

.accent-indigo {
  --accent: var(--accent-indigo);
  --accent-soft: var(--tint-info);
  --accent-strong: var(--accent-indigo);
  --avatar-accent: var(--accent-indigo);
  --avatar-accent-soft: var(--tint-info);
}

.accent-slate {
  --accent: var(--bs-secondary-color);
  --accent-soft: var(--bs-tertiary-bg);
  --accent-strong: var(--bs-secondary-color);
  --avatar-accent: var(--bs-secondary-color);
  --avatar-accent-soft: var(--bs-tertiary-bg);
}

.accent-dark {
  --accent: var(--bs-dark);
  --accent-soft: var(--bs-light);
  --accent-strong: var(--bs-dark);
  --avatar-accent: var(--bs-dark);
  --avatar-accent-soft: var(--bs-light);
}

.bootstrap-datetimepicker-widget table td.active,
.bootstrap-datetimepicker-widget table td.active:hover {
  background-color: #1f3b60;
  text-shadow: unset;
}

.bootstrap-datetimepicker-widget table th {
  font-size: 15px;
  font-weight: 500;
  color: #202C4B;
  width: 30px;
  height: 40px;
  line-height: 40px;
}

.bootstrap-datetimepicker-widget table th.prev,
.bootstrap-datetimepicker-widget table th.next {
  padding-bottom: 16px;
}

.bootstrap-datetimepicker-widget table th.prev span,
.bootstrap-datetimepicker-widget table th.next span {
  width: 24px;
  height: 24px;
  font-size: 12px;
  border: 1px solid #E9EDF4;
  border-radius: 50%;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.bootstrap-datetimepicker-widget table th.prev span:hover,
.bootstrap-datetimepicker-widget table th.next span:hover {
  background: #202C4B;
  border-color: #202C4B;
  color: #FFF;
}

.bootstrap-datetimepicker-widget table td {
  font-size: 15px;
  color: #515B73;
}

.bootstrap-datetimepicker-widget table td.day {
  width: 30px;
  height: 32px;
  line-height: 32px;
}

.bootstrap-datetimepicker-widget {
  z-index: 999 !important;
}

.bootstrap-datetimepicker-widget .picker-switch {
  padding-bottom: 16px;
}

.bootstrap-datetimepicker-widget table td.today:before {
  border-bottom-color: #1f3b60;
}

.bootstrap-datetimepicker-widget table thead tr:first-child th:hover {
  background: transparent;
}

.border-success {
  border-color: #1ABE17 !important;
}

.shadow-sm {
  box-shadow: 0px 4.4px 12px -1px rgba(222, 222, 222, 0.36) !important;
}

.shadow-md {
  box-shadow: 0px 4px 9px -1px rgba(19, 16, 34, 0.03), 0px 4.4px 20px -1px rgba(19, 16, 34, 0.05) !important;
}

.list-group-item {
  border-color: #E9EDF4 !important;
  color: inherit;
}

.list-group a.active {
  background: #ECEFFC;
  color: #1f3b60;
}

.list-group a:hover {
  background: #ECEFFC;
  color: #1f3b60;
}

.list-styled-dotted li {
  list-style-type: disc;
}

.custom-offcanvas.offcanvas.offcanvas-end {
  width: 600px !important;
}

.custom-offcanvas.offcanvas.offcanvas-end .offcanvas-header .close-btn {
  width: 20px;
  height: 20px;
  color: #FFF;
  border-radius: 50%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  background-color: #838A9B;
  border: 1px solid #838A9B;
}

.custom-offcanvas.offcanvas.offcanvas-end .offcanvas-header .close-btn:hover {
  background: #E82646;
  border-color: #E82646;
}

.w-40 {
  width: 40%;
}

@media (max-width: 767.98px) {
  .w-40 {
    width: 100%;
  }
}

hr {
  border-color: #E9EDF4;
}

.link-opacity-10 {
  opacity: 0.1;
}

.link-opacity-25 {
  opacity: 0.25;
}

.link-opacity-50 {
  opacity: 0.5;
}

.link-opacity-75 {
  opacity: 0.75;
}

.link-opacity-10-hover:hover {
  opacity: 0.1;
}

.link-opacity-25-hover:hover {
  opacity: 0.25;
}

.link-opacity-50-hover:hover {
  opacity: 0.5;
}

.link-opacity-75-hover:hover {
  opacity: 0.75;
}

.link-underline-opacity-100 {
  --link-underline-opacity: 1;
}

.link-underline-opacity-75 {
  --link-underline-opacity: 0.75;
}

.link-underline-opacity-50 {
  --link-underline-opacity: 0.5;
}

.link-underline-opacity-25 {
  --link-underline-opacity: 0.25;
}

.link-underline-opacity-10 {
  --link-underline-opacity: 0.10;
}

.link-underline-opacity-0 {
  --link-underline-opacity: 0;
}

.text-primary {
  color: #1f3b60 !important;
}

.text-primary.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-primary.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-primary.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-primary {
  color: #1f3b60 !important;
}

.link-primary:hover {
  color: #1f3b60 !important;
}

.link-underline-primary {
  text-decoration-color: #1f3b60 !important;
}

.text-secondary {
  color: #0e76bd !important;
}

.text-secondary.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-secondary.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-secondary.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-secondary {
  color: #0e76bd !important;
}

.link-secondary:hover {
  color: #0e76bd !important;
}

.link-underline-secondary {
  text-decoration-color: #0e76bd !important;
}

.text-success {
  color: #1ABE17 !important;
}

.text-success.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-success.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-success.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-success {
  color: #1ABE17 !important;
}

.link-success:hover {
  color: #1ABE17 !important;
}

.link-underline-success {
  text-decoration-color: #1ABE17 !important;
}

.text-info {
  color: #0F65CD !important;
}

.text-info.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-info.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-info.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-info {
  color: #0F65CD !important;
}

.link-info:hover {
  color: #0F65CD !important;
}

.link-underline-info {
  text-decoration-color: #0F65CD !important;
}

.text-warning {
  color: #EAB300 !important;
}

.text-warning.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-warning.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-warning.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-warning {
  color: #EAB300 !important;
}

.link-warning:hover {
  color: #EAB300 !important;
}

.link-underline-warning {
  text-decoration-color: #EAB300 !important;
}

.text-danger {
  color: #E82646 !important;
}

.text-danger.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-danger.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-danger.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-danger {
  color: #E82646 !important;
}

.link-danger:hover {
  color: #E82646 !important;
}

.link-underline-danger {
  text-decoration-color: #E82646 !important;
}

.text-dark {
  color: #202C4B !important;
}

.text-dark.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-dark.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-dark.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-dark {
  color: #202C4B !important;
}

.link-dark:hover {
  color: #202C4B !important;
}

.link-underline-dark {
  text-decoration-color: #202C4B !important;
}

.text-light {
  color: #E9EDF4 !important;
}

.text-light.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-light.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-light.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-light {
  color: #E9EDF4 !important;
}

.link-light:hover {
  color: #E9EDF4 !important;
}

.link-underline-light {
  text-decoration-color: #E9EDF4 !important;
}

.text-black {
  color: #000 !important;
}

.text-black.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-black.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-black.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-black {
  color: #000 !important;
}

.link-black:hover {
  color: #000 !important;
}

.link-underline-black {
  text-decoration-color: #000 !important;
}

.text-purple {
  color: #4A00E5 !important;
}

.text-purple.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-purple.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-purple.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-purple {
  color: #4A00E5 !important;
}

.link-purple:hover {
  color: #4A00E5 !important;
}

.link-underline-purple {
  text-decoration-color: #4A00E5 !important;
}

.text-yellow {
  color: #ffff00 !important;
}

.text-yellow.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-yellow.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-yellow.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-yellow {
  color: #ffff00 !important;
}

.link-yellow:hover {
  color: #ffff00 !important;
}

.link-underline-yellow {
  text-decoration-color: #ffff00 !important;
}

.text-teal {
  color: #02a8b5 !important;
}

.text-teal.text-opacity-75 {
  opacity: 0.75 !important;
}

.text-teal.text-opacity-50 {
  opacity: 0.5 !important;
}

.text-teal.text-opacity-25 {
  opacity: 0.25 !important;
}

.link-teal {
  color: #02a8b5 !important;
}

.link-teal:hover {
  color: #02a8b5 !important;
}

.link-underline-teal {
  text-decoration-color: #02a8b5 !important;
}

.link-underline-opacity-100 {
  --link-underline-opacity: 1;
}

.link-underline-opacity-75 {
  --link-underline-opacity: 0.75;
}

.link-underline-opacity-50 {
  --link-underline-opacity: 0.5;
}

.link-underline-opacity-25 {
  --link-underline-opacity: 0.25;
}

.link-underline-opacity-10 {
  --link-underline-opacity: 0.10;
}

.link-underline-opacity-0 {
  --link-underline-opacity: 0;
}

/*-----------------
    Buttons — modern SaaS surface

    One spacing / radius / shadow system shared by every variant. Filled
    variants float on a soft three-layer shadow and lift 2px on hover; the
    white and light variants sit closer to the page with a lighter stack.
    Sizing is driven by the tokens below so `.btn-sm` / `.btn-lg` stay in
    proportion without re-declaring the whole recipe.
-----------------*/
.btn-primary {
  color: #FFF !important;
  background: linear-gradient(135deg, #1d4282 0%, #1f3b60 100%) !important;
  border-color: #1f3b60 !important;
  font-size: 14px;
}

.btn-primary:active,
.btn-primary.active,
.btn-primary.show,
.btn-primary.show:hover,
.btn-primary.show:focus,
.btn-check:checked+.btn-primary {
  background: linear-gradient(135deg, #1d4282 0%, #1f3b60 100%) !important;
  border-color: #1f3b60 !important;
  color: #FFFFFF !important;
  box-shadow: 0 4px 14px rgba(31, 59, 96, 0.28) !important;
}

.btn-primary:active *,
.btn-primary.active *,
.btn-primary.show *,
.btn-primary.show:hover *,
.btn-primary.show:focus *,
.btn-check:checked+.btn-primary * {
  color: #FFFFFF !important;
}

.btn-primary:active::after,
.btn-primary.active::after,
.btn-primary.show::after {
  border-top-color: #FFFFFF !important;
  color: #FFFFFF !important;
}

button {
  cursor: pointer;
}

button:focus {
  outline: 0;
  box-shadow: none;
}

.btn {
  --btn-height: 32px;
  --btn-padding-x: 15px;
  --btn-radius: 12px;
  --btn-font-size: 14px;
  --btn-icon-size: 18px;
  --btn-ring: rgba(31, 59, 96, 0.18);
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--btn-gap);
  min-height: var(--btn-height);
  padding: 0 var(--btn-padding-x);
  border: 1px solid transparent;
  border-radius: var(--btn-radius);
  font-size: var(--btn-font-size);
  font-weight: 600;
  letter-spacing: 0.2px;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 2px 6px rgba(15, 23, 42, 0.06);
  transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}

.btn>i,
.btn>svg,
.btn>.btn-icon-el {
  flex: 0 0 auto;
  font-size: var(--btn-icon-size);
  width: auto;
  height: auto;
  line-height: 1;
}

.btn>svg {
  width: var(--btn-icon-size);
  height: var(--btn-icon-size);
}

.btn:hover {
  transform: translateY(-2px);
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
}

.btn:active,
.btn.active {
  transform: translateY(0);
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn:focus {
  box-shadow: none;
}

.btn:focus-visible {
  outline: none;
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn:disabled,
.btn.disabled {
  opacity: 0.5;
  box-shadow: none !important;
  transform: none !important;
  cursor: not-allowed;
  pointer-events: auto;
}

.btn.btn-lg {
  --btn-height: 50px;
  --btn-padding-x: 28px;
  --btn-radius: 14px;
  --btn-font-size: 15px;
  --btn-icon-size: 20px;
}

.btn.btn-sm {
  --btn-height: 32px;
  --btn-padding-x: 10px;
  --btn-radius: 10px;
  --btn-font-size: 13px;
  --btn-icon-size: 16px;
}

.btn.btn-primary {
  background: linear-gradient(135deg, #1d4282 0%, #1f3b60 100%) !important;
  border: 1px solid rgba(255, 255, 255, 0.15) !important;
  color: #FFF !important;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 4px 12px rgba(31, 59, 96, 0.22);
  --btn-ring: rgba(29, 66, 130, 0.35);
}

.btn.btn-primary:hover,
.btn.btn-primary.focus {
  background: linear-gradient(135deg, #244f9c 0%, #163363 100%) !important;
  border-color: rgba(255, 255, 255, 0.25) !important;
  color: #FFF !important;
  box-shadow: 0 4px 14px rgba(31, 59, 96, 0.32);
}

.btn.btn-primary:focus {
  background: linear-gradient(135deg, #1d4282 0%, #1f3b60 100%) !important;
  color: #FFF !important;
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-primary:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-primary:active,
.btn.btn-primary.active {
  background: linear-gradient(135deg, #132c57 0%, #0d1e3a 100%) !important;
  border-color: rgba(255, 255, 255, 0.15) !important;
  color: #FFF !important;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-secondary {
  background-color: #0e76bd;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(14, 118, 189, 0.18);
}

.btn.btn-secondary:hover,
.btn.btn-secondary.focus {
  background-color: rgb(131.0655737705, 211.106557377, 221.4344262295);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-secondary:focus {
  background-color: #0e76bd;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-secondary:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-secondary:active,
.btn.btn-secondary.active {
  background-color: rgb(94.9475409836, 198.3147540984, 211.6524590164);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-success {
  background-color: #1ABE17;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(26, 190, 23, 0.18);
}

.btn.btn-success:hover,
.btn.btn-success.focus {
  background-color: rgb(29.1126760563, 212.7464788732, 25.7535211268);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-success:focus {
  background-color: #1ABE17;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-success:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-success:active,
.btn.btn-success.active {
  background-color: rgb(23.5098591549, 171.8028169014, 20.7971830986);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-info {
  background-color: #0F65CD;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(15, 101, 205, 0.18);
}

.btn.btn-info:hover,
.btn.btn-info.focus {
  background-color: rgb(16.7386363636, 112.7068181818, 228.7613636364);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-info:focus {
  background-color: #0F65CD;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-info:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-info:active,
.btn.btn-info.active {
  background-color: rgb(13.6090909091, 91.6345454545, 185.9909090909);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-warning {
  background-color: #EAB300;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(234, 179, 0, 0.18);
}

.btn.btn-warning:hover,
.btn.btn-warning.focus {
  background-color: rgb(255, 196.1217948718, 4.5);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-warning:focus {
  background-color: #EAB300;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-warning:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-warning:active,
.btn.btn-warning.active {
  background-color: rgb(213.6, 163.3948717949, 0);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-danger {
  background-color: #E82646;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(232, 38, 70, 0.18);
}

.btn.btn-danger:hover,
.btn.btn-danger.focus {
  background-color: rgb(234.44375, 61.05625, 89.65625);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-danger:focus {
  background-color: #E82646;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-danger:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-danger:active,
.btn.btn-danger.active {
  background-color: rgb(225.68, 23.92, 57.2);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-dark {
  background-color: #202C4B;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(32, 44, 75, 0.18);
}

.btn.btn-dark:hover,
.btn.btn-dark.focus {
  background-color: rgb(39.6261682243, 54.4859813084, 92.8738317757);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-dark:focus {
  background-color: #202C4B;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-dark:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-dark:active,
.btn.btn-dark.active {
  background-color: rgb(25.8990654206, 35.6112149533, 60.7009345794);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-light {
  background-color: #E9EDF4;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(233, 237, 244, 0.18);
}

.btn.btn-light:hover,
.btn.btn-light.focus {
  background-color: rgb(250, 250.9090909091, 252.5);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-light:focus {
  background-color: #E9EDF4;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-light:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-light:active,
.btn.btn-light.active {
  background-color: rgb(219.4, 225.8727272727, 237.2);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-black {
  background-color: #000;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(0, 0, 0, 0.18);
}

.btn.btn-black:hover,
.btn.btn-black.focus {
  background-color: rgb(12.75, 12.75, 12.75);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-black:focus {
  background-color: #000;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-black:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-black:active,
.btn.btn-black.active {
  background-color: hsl(0, 0%, -4%);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-purple {
  background-color: #4A00E5;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(74, 0, 229, 0.18);
}

.btn.btn-purple:hover,
.btn.btn-purple.focus {
  background-color: rgb(82.2401746725, 0, 254.5);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-purple:focus {
  background-color: #4A00E5;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-purple:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-purple:active,
.btn.btn-purple.active {
  background-color: rgb(67.407860262, 0, 208.6);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-yellow {
  background-color: #ffff00;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(255, 255, 0, 0.18);
}

.btn.btn-yellow:hover,
.btn.btn-yellow.focus {
  background-color: rgb(255, 255, 25.5);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-yellow:focus {
  background-color: #ffff00;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-yellow:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-yellow:active,
.btn.btn-yellow.active {
  background-color: rgb(234.6, 234.6, 0);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-teal {
  background-color: #02a8b5;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(2, 168, 181, 0.18);
}

.btn.btn-teal:hover,
.btn.btn-teal.focus {
  background-color: rgb(2.2786885246, 191.4098360656, 206.2213114754);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-teal:focus {
  background-color: #02a8b5;
  color: #FFF;
  box-shadow: none;
}

.btn.btn-teal:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-teal:active,
.btn.btn-teal.active {
  background-color: rgb(1.7770491803, 149.2721311475, 160.8229508197);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-primary {
  background-color: #1f3b60;
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 12px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.08);
  --btn-ring: rgba(31, 59, 96, 0.18);
}

.btn.btn-primary:hover,
.btn.btn-primary.focus {
  background-color: rgb(83.0848214286, 112.328125, 228.4151785714);
  border-color: rgba(255, 255, 255, 0.25);
  color: #FFF;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
}

.btn.btn-primary:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-primary:active,
.btn.btn-primary.active {
  background-color: rgb(43.3321428571, 79.3375, 222.2678571429);
  border-color: rgba(255, 255, 255, 0.15);
  color: #FFF;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-light,
.btn.btn-white {
  border: 1px solid #E9EDF4;
  color: #202C4B;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 2px 6px rgba(15, 23, 42, 0.06);
  --btn-ring: rgba(31, 59, 96, 0.18);
}

.btn.btn-light:hover,
.btn.btn-light:focus,
.btn.btn-light.focus,
.btn.btn-white:hover,
.btn.btn-white:focus,
.btn.btn-white.focus {
  border-color: rgb(219.4, 225.8727272727, 237.2);
  color: #202C4B;
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
}

.btn.btn-light:focus-visible,
.btn.btn-white:focus-visible {
  box-shadow: 0 0 0 4px var(--btn-ring);
}

.btn.btn-light:active,
.btn.btn-light.active,
.btn.btn-white:active,
.btn.btn-white.active {
  color: #202C4B !important;
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.12);
}

.btn.btn-light {
  background-color: #F4F6FA;
}

.btn.btn-light:hover,
.btn.btn-light:focus,
.btn.btn-light.focus,
.btn.btn-light:active,
.btn.btn-light.active {
  background-color: #E9EDF4 !important;
}

.btn.btn-white {
  background-color: #FFF;
}

.btn.btn-white:hover,
.btn.btn-white:focus,
.btn.btn-white.focus,
.btn.btn-white:active,
.btn.btn-white.active {
  background-color: #FFF !important;
  color: #202C4B !important;
}

/*-----------------
    Loading state

    `.btn.is-loading` (or `aria-busy="true"`) hides the label in place and
    centres a spinner over it, so the button keeps its exact width.
-----------------*/
.btn.is-loading,
.btn[aria-busy=true] {
  color: transparent !important;
  pointer-events: none;
  position: relative;
}

.btn.is-loading>*,
.btn[aria-busy=true]>* {
  visibility: hidden;
}

.btn.is-loading::after,
.btn[aria-busy=true]::after {
  content: "";
  position: absolute;
  inset-block-start: 50%;
  inset-inline-start: 50%;
  width: var(--btn-icon-size);
  height: var(--btn-icon-size);
  margin-block-start: calc(var(--btn-icon-size) / -2);
  margin-inline-start: calc(var(--btn-icon-size) / -2);
  border: 2px solid currentColor;
  border-block-start-color: transparent;
  border-radius: 50%;
  color: #FFF;
  animation: rotation 0.7s linear infinite;
}

.btn.is-loading.btn-light::after,
.btn.is-loading.btn-white::after,
.btn.is-loading[class*=btn-outline-]::after,
.btn.is-loading[class*=-light]::after,
.btn.is-loading[class*=-ghost]::after,
.btn[aria-busy=true].btn-light::after,
.btn[aria-busy=true].btn-white::after,
.btn[aria-busy=true][class*=btn-outline-]::after,
.btn[aria-busy=true][class*=-light]::after,
.btn[aria-busy=true][class*=-ghost]::after {
  color: #1f3b60;
}

@media (prefers-reduced-motion: reduce) {
  .btn {
    transition: none;
  }

  .btn:hover,
  .btn:active,
  .btn.active {
    transform: none;
  }
}

/* grouped buttons share one surface, so they drop the float and the lift */
.btn-group .btn,
.btn-group-vertical .btn {
  box-shadow: none;
}

.btn-group .btn:hover,
.btn-group .btn:active,
.btn-group .btn.active,
.btn-group-vertical .btn:hover,
.btn-group-vertical .btn:active,
.btn-group-vertical .btn.active {
  transform: none;
  box-shadow: none;
}

.btn-group-lg .btn {
  --btn-height: 50px;
  --btn-padding-x: 28px;
  --btn-font-size: 15px;
}

.btn-group-sm .btn {
  --btn-height: 34px;
  --btn-padding-x: 14px;
  --btn-font-size: 13px;
}

.btn.btn-w-xs {
  min-width: 5.625rem;
}

.btn.btn-w-sm {
  min-width: 6.975rem;
}

.btn.btn-w-md {
  min-width: 8.125rem;
}

.btn.btn-w-lg {
  min-width: 9.375rem;
}

/* icon-only buttons stay square at every size */
.btn-icon {
  width: var(--btn-height);
  height: var(--btn-height);
  padding: 0;
  flex: 0 0 auto;
}

.btn-icon i {
  padding: 0;
  margin: 0;
  line-height: 1;
}

.btn-icon.btn-sm {
  width: var(--btn-height);
  height: var(--btn-height);
}

.btn-icon.btn-lg {
  width: var(--btn-height);
  height: var(--btn-height);
}

.btn-list>button,
.btn-list>a {
  margin: 0 0.375rem 0.375rem 0;
}

[dir=rtl] .btn-list button,
[dir=rtl] .btn-list div,
[dir=rtl] .btn-list a,
[dir=rtl] .btn-list input {
  margin: 0 0 0.375rem 0.375rem;
}

.btn-list {
  margin-block-end: -0.5rem;
}

.btn-square {
  border-radius: 0;
}

.btn-group-pill .btn:first-child {
  border-radius: 60px 0 0 60px;
}

.btn-group-pill .btn:last-child {
  border-radius: 0 60px 60px 0;
}

.btn-group-square .btn:first-child {
  border-radius: 0px 0 0 0px;
}

.btn-group-square .btn:last-child {
  border-radius: 0 0px 0px 0;
}

.btn.btn-primary-light {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

.btn.btn-primary-light:hover,
.btn.btn-primary-light:focus,
.btn.btn-primary-light:active {
  background-color: #1f3b60;
  color: #FFF;
  border-color: #1f3b60;
}

.btn.btn-secondary-light {
  background-color: rgba(14, 118, 189, 0.1);
  color: #0e76bd;
}

.btn.btn-secondary-light:hover,
.btn.btn-secondary-light:focus,
.btn.btn-secondary-light:active {
  background-color: #0e76bd;
  color: #FFF;
  border-color: #0e76bd;
}

.btn.btn-warning-light {
  background-color: rgba(234, 179, 0, 0.1);
  color: #EAB300;
}

.btn.btn-warning-light:hover,
.btn.btn-warning-light:focus,
.btn.btn-warning-light:active {
  background-color: #EAB300;
  color: #FFF;
  border-color: #EAB300;
}

.btn.btn-info-light {
  background-color: rgba(15, 101, 205, 0.1);
  color: #0F65CD;
}

.btn.btn-info-light:hover,
.btn.btn-info-light:focus,
.btn.btn-info-light:active {
  background-color: #0F65CD;
  color: #FFF;
  border-color: #0F65CD;
}

.btn.btn-success-light {
  background-color: rgba(26, 190, 23, 0.1);
  color: #1ABE17;
}

.btn.btn-success-light:hover,
.btn.btn-success-light:focus,
.btn.btn-success-light:active {
  background-color: #1ABE17;
  color: #FFF;
  border-color: #1ABE17;
}

.btn.btn-danger-light {
  background-color: rgba(232, 38, 70, 0.1);
  color: #E82646;
}

.btn.btn-danger-light:hover,
.btn.btn-danger-light:focus,
.btn.btn-danger-light:active {
  background-color: #E82646;
  color: #FFF;
  border-color: #E82646;
}

.btn.btn-primary-ghost {
  background-color: transparent;
  color: #1f3b60;
  border: 1px solid #1f3b60;
}

.btn.btn-primary-ghost:active {
  color: #1f3b60;
  border: 1px solid #1f3b60;
  background-color: transparent;
}

.btn.btn-dark {
  background: #202C4B !important;
  border-color: #202C4B !important;
  box-shadow: none;
  color: #FFF;
}

.btn.btn-dark:hover {
  background: #252a30 !important;
}

.btn.btn-secondary-ghost {
  background-color: transparent;
  color: #0e76bd;
  border: 1px solid #0e76bd;
}

.btn.btn-secondary-ghost:active {
  color: #0e76bd;
  border: 1px solid #0e76bd;
  background-color: transparent;
}

.btn.btn-warning-ghost {
  background-color: transparent;
  color: #EAB300;
  border: 1px solid #EAB300;
}

.btn.btn-warning-ghost:active {
  color: #EAB300;
  border: 1px solid #EAB300;
  background-color: transparent;
}

.btn.btn-info-ghost {
  background-color: transparent;
  color: #0F65CD;
  border: 1px solid #0F65CD;
}

.btn.btn-info-ghost:active {
  color: #0F65CD;
  border: 1px solid #0F65CD;
  background-color: transparent;
}

.btn.btn-success-ghost {
  background-color: transparent;
  color: #1ABE17;
  border: 1px solid #1ABE17;
}

.btn.btn-success-ghost:active {
  color: #1ABE17;
  border: 1px solid #1ABE17;
  background-color: transparent;
}

.btn.btn-danger-ghost {
  background-color: transparent;
  color: #E82646;
  border: 1px solid #E82646;
}

.btn.btn-danger-ghost:active {
  color: #E82646;
  border: 1px solid #E82646;
  background-color: transparent;
}

.btn-list button {
  margin: 0 0.375rem 0.375rem 0;
}

.btn-outline-primary {
  border: 1px solid #1f3b60 !important;
  color: #1f3b60 !important;
}

.btn-outline-primary:hover,
.btn-outline-primary:focus,
.btn-outline-primary.focus,
.btn-outline-primary:active,
.btn-outline-primary.active {
  background-color: #1f3b60 !important;
  border: 1px solid #1f3b60 !important;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
  color: #FFF !important;
}

.btn-outline-secondary {
  border: 1px solid #0e76bd !important;
  color: #0e76bd !important;
}

.btn-outline-secondary:hover,
.btn-outline-secondary:focus,
.btn-outline-secondary.focus,
.btn-outline-secondary:active,
.btn-outline-secondary.active {
  background-color: #0e76bd !important;
  border: 1px solid #0e76bd !important;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
  color: #FFF !important;
}

.btn-outline-success {
  border: 1px solid #1ABE17 !important;
  color: #1ABE17 !important;
}

.btn-outline-success:hover,
.btn-outline-success:focus,
.btn-outline-success.focus,
.btn-outline-success:active,
.btn-outline-success.active {
  background-color: #1ABE17 !important;
  border: 1px solid #1ABE17 !important;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
  color: #FFF !important;
}

.btn-outline-danger {
  border: 1px solid #E82646 !important;
  color: #E82646 !important;
}

.btn-outline-danger:hover,
.btn-outline-danger:focus,
.btn-outline-danger.focus,
.btn-outline-danger:active,
.btn-outline-danger.active {
  background-color: #E82646 !important;
  border: 1px solid #E82646 !important;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
  color: #FFF !important;
}

.btn-outline-warning {
  border: 1px solid #EAB300 !important;
  color: #EAB300 !important;
}

.btn-outline-warning:hover,
.btn-outline-warning:focus,
.btn-outline-warning.focus,
.btn-outline-warning:active,
.btn-outline-warning.active {
  background-color: #EAB300 !important;
  border: 1px solid #EAB300 !important;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
  color: #FFF !important;
}

.btn-outline-info {
  border: 1px solid #0F65CD !important;
  color: #0F65CD !important;
}

.btn-outline-info:hover,
.btn-outline-info:focus,
.btn-outline-info.focus,
.btn-outline-info:active,
.btn-outline-info.active {
  background-color: #0F65CD !important;
  border: 1px solid #0F65CD !important;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
  color: #FFF !important;
}

.btn-outline-light {
  border: 1px solid #E9EDF4 !important;
  color: #515B73 !important;
}

.btn-outline-light:hover,
.btn-outline-light:focus,
.btn-outline-light.focus,
.btn-outline-light:active,
.btn-outline-light.active {
  background-color: #E9EDF4 !important;
  border: 1px solid #E9EDF4 !important;
  color: #515B73 !important;
}

.btn-outline-dark {
  border: 1px solid #202C4B !important;
  color: #202C4B !important;
}

.btn-outline-dark:hover,
.btn-outline-dark:focus,
.btn-outline-dark.focus,
.btn-outline-dark:active,
.btn-outline-dark.active {
  background-color: #202C4B !important;
  border: 1px solid #202C4B !important;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08), 0 12px 24px rgba(15, 23, 42, 0.12), 0 24px 40px rgba(15, 23, 42, 0.12);
  color: #FFF !important;
}

.btn-soft-primary {
  background-color: #C5CFF6 !important;
  color: #1f3b60 !important;
}

.btn-soft-primary:hover,
.btn-soft-primary:focus,
.btn-soft-primary.focus,
.btn-soft-primary:active,
.btn-soft-primary.active {
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
  border-color: #1f3b60;
}

.btn-soft-secondary {
  background-color: #D4F0F3 !important;
  color: #0e76bd !important;
}

.btn-soft-secondary:hover,
.btn-soft-secondary:focus,
.btn-soft-secondary.focus,
.btn-soft-secondary:active,
.btn-soft-secondary.active {
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
  border-color: #0e76bd;
}

.btn-soft-success {
  background-color: #BAECB9 !important;
  color: #1ABE17 !important;
}

.btn-soft-success:hover,
.btn-soft-success:focus,
.btn-soft-success.focus,
.btn-soft-success:active,
.btn-soft-success.active {
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
  border-color: #1ABE17;
}

.btn-soft-danger {
  background-color: #F8BEC8 !important;
  color: #E82646 !important;
}

.btn-soft-danger:hover,
.btn-soft-danger:focus,
.btn-soft-danger.focus,
.btn-soft-danger:active,
.btn-soft-danger.active {
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
  border-color: #E82646;
}

.btn-soft-warning {
  background-color: #FDE9C1 !important;
  color: #EAB300 !important;
}

.btn-soft-warning:hover,
.btn-soft-warning:focus,
.btn-soft-warning.focus,
.btn-soft-warning:active,
.btn-soft-warning.active {
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
  border-color: #EAB300;
}

.btn-soft-info {
  background-color: rgba(15, 101, 205, 0.3) !important;
  color: #0F65CD !important;
}

.btn-soft-info:hover,
.btn-soft-info:focus,
.btn-soft-info.focus,
.btn-soft-info:active,
.btn-soft-info.active {
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
  border-color: #0F65CD;
}

.btn-soft-light {
  background-color: rgba(233, 237, 244, 0.9) !important;
  color: #6A7287 !important;
}

.btn-soft-light:hover,
.btn-soft-light:focus,
.btn-soft-light.focus,
.btn-soft-light:active,
.btn-soft-light.active {
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
  border-color: #E9EDF4;
  border-color: #6A7287;
}

.btn-soft-dark {
  background-color: rgba(32, 44, 75, 0.3) !important;
  color: #FFF !important;
}

.btn-soft-dark:hover,
.btn-soft-dark:focus,
.btn-soft-dark.focus,
.btn-soft-dark:active,
.btn-soft-dark.active {
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.07), 0 8px 16px rgba(15, 23, 42, 0.08);
  border-color: #202C4B;
}

.primary-hover:hover {
  background: #1f3b60 !important;
  color: #FFF;
}

.page-loader {
  position: relative;
  width: 160px;
  height: 160px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.page-loader .loader-circle {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transform: rotate(-90deg);
}

.page-loader .loader-circle-bg {
  fill: none;
  stroke: #EDF1F6;
  stroke-width: 3.2;
}

.page-loader .loader-circle-progress {
  fill: none;
  stroke: #1f3b60;
  stroke-width: 3.2;
  stroke-linecap: round;
  stroke-dasharray: 276.46;
  stroke-dashoffset: 276.46;
  animation: pageLoaderCircleProgress 1s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

.page-loader .loader-logo {
  position: absolute;
  top: calc(50% - 3px);
  left: 50%;
  transform: translate(-50%, -50%);
  width: 104px;
  height: 104px;
  object-fit: contain;
  animation: pageLoaderPulse 1.2s ease-in-out infinite;
}

@keyframes pageLoaderCircleProgress {
  0% {
    stroke-dashoffset: 276.46;
  }

  100% {
    stroke-dashoffset: 0;
  }
}

@keyframes pageLoaderPulse {

  0%,
  100% {
    transform: translate(-50%, -50%) scale(0.96);
    opacity: 0.92;
  }

  50% {
    transform: translate(-50%, -50%) scale(1.04);
    opacity: 1;
  }
}

@keyframes rotation {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

.warning-btn-hover:hover {
  background: #EAB300 !important;
  border-color: #EAB300 !important;
  color: #FFF;
}

.success-btn-hover:hover {
  background: #1ABE17 !important;
  border-color: #1ABE17 !important;
  color: #FFF;
}

.danger-btn-hover:hover {
  background: #E82646 !important;
  border-color: #E82646 !important;
  color: #FFF !important;
}

.secondary-btn-hover:hover {
  background: #0e76bd !important;
  border-color: #0e76bd !important;
  color: #FFF;
}

.primary-btn-hover:hover {
  background: #1f3b60 !important;
  border-color: #1f3b60 !important;
  color: #FFF !important;
}

@media (max-width: 575.98px) {
  .btn {
    --btn-height: 40px;
    --btn-padding-x: 16px;
  }
}

/*-----------------
    3D buttons

    A `.btn-3d` modifier that sits on top of any Bootstrap variant. The solid
    ledge under the button is driven by `--btn-3d-ledge` so each variant only
    has to declare its own shade; the lift and press interaction is shared.
-----------------*/
.btn-3d {
  position: relative;
  border: 0;
  border-radius: 10px;
  font-weight: 600;
  --btn-3d-ledge: rgb(26.0089285714, 54.61875, 168.1910714286);
  --btn-3d-glow: rgba(15, 23, 42, 0.28);
  box-shadow: 0 2px 0 var(--btn-3d-ledge), 0 6px 14px var(--btn-3d-glow);
  transition: transform 0.12s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.12s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.12s cubic-bezier(0.4, 0, 0.2, 1);
}

.btn-3d:hover,
.btn-3d:focus {
  transform: translateY(-1px);
  box-shadow: 0 3px 0 var(--btn-3d-ledge), 0 10px 20px var(--btn-3d-glow);
}

.btn-3d:active {
  transform: translateY(2px);
  box-shadow: 0 0 0 var(--btn-3d-ledge), 0 2px 5px var(--btn-3d-glow);
}

.btn-3d:disabled,
.btn-3d.disabled {
  transform: none;
  box-shadow: 0 2px 0 var(--btn-3d-ledge);
}

.btn-3d i {
  line-height: 1;
}

.btn-3d.btn-primary {
  --btn-3d-ledge: rgb(26.0089285714, 54.61875, 168.1910714286);
  --btn-3d-glow: rgba(31, 59, 96, 0.35);
}

.btn-3d.btn-secondary {
  --btn-3d-ledge: rgb(50.1245901639, 169.6524590164, 185.0754098361);
  --btn-3d-glow: rgba(14, 118, 189, 0.35);
}

.btn-3d.btn-success {
  --btn-3d-ledge: rgb(14.7943661972, 108.1126760563, 13.0873239437);
  --btn-3d-glow: rgba(26, 190, 23, 0.35);
}

.btn-3d.btn-info {
  --btn-3d-ledge: rgb(8.7409090909, 58.8554545455, 119.4590909091);
  --btn-3d-glow: rgba(15, 101, 205, 0.35);
}

.btn-3d.btn-warning {
  --btn-3d-ledge: rgb(142.2, 108.7769230769, 0);
  --btn-3d-glow: rgba(234, 179, 0, 0.35);
}

.btn-3d.btn-danger {
  --btn-3d-ledge: rgb(161.1225, 17.0775, 40.8375);
  --btn-3d-glow: rgba(232, 38, 70, 0.35);
}

.btn-3d.btn-dark {
  --btn-3d-ledge: rgb(13.6971962617, 18.8336448598, 32.1028037383);
  --btn-3d-glow: rgba(15, 23, 42, 0.35);
}

.btn-3d.btn-white {
  border: 1px solid #E9EDF4;
  color: #202C4B;
  background-color: #FFF;
  --btn-3d-ledge: #dfe3ea;
  --btn-3d-glow: rgba(15, 23, 42, 0.07);
}

.btn-3d.btn-white:hover,
.btn-3d.btn-white:focus {
  background-color: #FFF;
  color: #202C4B;
}

.btn.btn-white.show,
.btn.btn-white:active,
.btn.btn-white.active,
.btn.btn-white.show:focus,
.btn.btn-white.show:hover,
.btn.btn-white:focus.show,
.btn-3d.btn-white.show,
.btn-3d.btn-white:active,
.btn-3d.btn-white.active,
.btn-3d.btn-white.show:focus,
.btn-3d.btn-white.show:hover,
.btn-3d.btn-white:focus.show {
  background-color: #F8FAFC !important;
  border-color: #1f3b60 !important;
  color: #1f3b60 !important;
  box-shadow: 0 0 0 3px rgba(31, 59, 96, 0.14), 0 2px 4px rgba(15, 23, 42, 0.08) !important;
}

.btn.btn-white.show *,
.btn.btn-white:active *,
.btn.btn-white.active *,
.btn-3d.btn-white.show *,
.btn-3d.btn-white:active *,
.btn-3d.btn-white.active * {
  color: #1f3b60 !important;
}

.btn.btn-white.show::after,
.btn.btn-white:active::after,
.btn-3d.btn-white.show::after {
  border-top-color: #1f3b60 !important;
  color: #1f3b60 !important;
}

.btn-3d.btn-light {
  border: 1px solid #E9EDF4;
  --btn-3d-ledge: #d5dae2;
  --btn-3d-glow: rgba(15, 23, 42, 0.08);
}

[data-bs-theme=dark] .btn-3d,
[data-theme=dark] .btn-3d {
  --btn-3d-glow: rgba(0, 0, 0, 0.45);
}

[data-bs-theme=dark] .btn-3d.btn-light,
[data-bs-theme=dark] .btn-3d.btn-white,
[data-theme=dark] .btn-3d.btn-light,
[data-theme=dark] .btn-3d.btn-white {
  --btn-3d-ledge: rgba(0, 0, 0, 0.5);
  --btn-3d-glow: rgba(0, 0, 0, 0.45);
}

/*-----------------
    Custom Button Group — segmented control

    Buttons sit inside a soft track and the selected one lifts onto a raised
    surface. Works three ways with no extra script:

      - `.active` on a plain button
      - `aria-pressed="true"` on a toggle button
      - Bootstrap's `.btn-check` radio / checkbox pattern

        <div class="custom-btn-group" role="group">
            <button type="button" class="btn active">Day</button>
            <button type="button" class="btn">Week</button>
        </div>

    Add `.custom-btn-group-fill` to stretch the segments across the row.
-----------------*/
.custom-btn-group {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px;
  border: 0;
  border-radius: 12px;
  background: #F4F6FA;
  vertical-align: middle;
}

.custom-btn-group>.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.375rem;
  height: 36px;
  /* the base `.btn` floats and lifts; inside the track segments stay flat */
  min-height: 0;
  padding: 0 0.875rem;
  border: 0;
  transform: none;
  /* beats the `.btn-group > .btn` radius reset if both classes are used */
  border-radius: 8px;
  background: transparent;
  color: #6A7287;
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  box-shadow: none;
  transition: background-color 0.18s ease, color 0.18s ease, box-shadow 0.18s ease;
}

.custom-btn-group>.btn i {
  font-size: 1rem;
}

.custom-btn-group>.btn:hover:not(.active):not(.disabled):not(:disabled) {
  background: transparent;
  color: #202C4B;
}

.custom-btn-group>.btn:focus-visible {
  outline: 2px solid rgba(31, 59, 96, 0.35);
  outline-offset: 1px;
}

/* the theme paints every pressed .btn solid primary with a `!important`
     colour; inside the track that press state has to stay flat */

.custom-btn-group>.btn:active,
.custom-btn-group>.btn:first-child:active {
  background-color: transparent;
  border-color: transparent;
  color: #202C4B !important;
}

.custom-btn-group>.btn.disabled,
.custom-btn-group>.btn:disabled {
  opacity: 0.5;
  pointer-events: none;
}

.custom-btn-group>.btn.active,
.custom-btn-group>.btn[aria-pressed=true],
.custom-btn-group>.btn-check:checked+.btn {
  background-color: #FFF;
  border-color: transparent;
  color: #FFF !important;
  font-weight: 600;
  box-shadow: 0 1px 2px rgba(17, 24, 39, 0.08);
}

/* icon-only segments stay square */

.custom-btn-group>.btn.btn-icon {
  width: 36px;
  padding: 0;
}

.custom-btn-group.custom-btn-group-fill {
  display: flex;
  width: 100%;
}

.custom-btn-group.custom-btn-group-fill>.btn {
  flex: 1 1 0;
  min-width: 0;
}

.custom-btn-group.custom-btn-group-sm {
  border-radius: 10px;
}

.custom-btn-group.custom-btn-group-sm>.btn {
  height: 30px;
  padding: 0 0.625rem;
  font-size: 0.8125rem;
  border-radius: 7px;
}

.custom-btn-group.custom-btn-group-sm>.btn.btn-icon {
  width: 30px;
  padding: 0;
}

.custom-btn-group.custom-btn-group-lg>.btn {
  height: 42px;
  padding: 0 1.125rem;
  font-size: 0.9375rem;
  border-radius: 9px;
}

.custom-btn-group.custom-btn-group-lg>.btn.btn-icon {
  width: 42px;
  padding: 0;
}

[data-theme=dark] .custom-btn-group,
[data-bs-theme=dark] .custom-btn-group {
  background: rgba(255, 255, 255, 0.06);
}

[data-theme=dark] .custom-btn-group>.btn.active,
[data-theme=dark] .custom-btn-group>.btn[aria-pressed=true],
[data-theme=dark] .custom-btn-group>.btn-check:checked+.btn,
[data-bs-theme=dark] .custom-btn-group>.btn.active,
[data-bs-theme=dark] .custom-btn-group>.btn[aria-pressed=true],
[data-bs-theme=dark] .custom-btn-group>.btn-check:checked+.btn {
  background-color: #1a2236;
  color: #e9edf5 !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}

/* segments never lift, whatever state the base `.btn` puts them in */
.custom-btn-group>.btn:hover,
.custom-btn-group>.btn:active,
.custom-btn-group>.btn.active {
  transform: none;
}

/* the 3D modifier owns its own ledge, so it opts out of the floating stack */
.btn.btn-3d,
.btn.btn-3d:hover,
.btn.btn-3d:focus,
.btn.btn-3d:active {
  box-shadow: 0 2px 0 var(--btn-3d-ledge), 0 6px 14px var(--btn-3d-glow);
}

.btn.btn-3d:hover,
.btn.btn-3d:focus {
  box-shadow: 0 3px 0 var(--btn-3d-ledge), 0 10px 20px var(--btn-3d-glow);
}

.btn.btn-3d:active {
  box-shadow: 0 0 0 var(--btn-3d-ledge), 0 2px 5px var(--btn-3d-glow);
}

/* on a dark canvas the neutral slate shadow disappears, so it goes darker */
[data-theme=dark] .btn,
[data-bs-theme=dark] .btn {
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.24), 0 2px 6px rgba(0, 0, 0, 0.28);
}

[data-theme=dark] .btn:hover,
[data-bs-theme=dark] .btn:hover {
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3), 0 8px 16px rgba(0, 0, 0, 0.34);
}

[data-theme=dark] .btn:active,
[data-theme=dark] .btn.active,
[data-bs-theme=dark] .btn:active,
[data-bs-theme=dark] .btn.active {
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
}

[data-theme=dark] .btn[class*=btn-]:not(.btn-light):not(.btn-white):not([class*=-light]):not([class*=-ghost]):not([class*=btn-outline-]),
[data-bs-theme=dark] .btn[class*=btn-]:not(.btn-light):not(.btn-white):not([class*=-light]):not([class*=-ghost]):not([class*=btn-outline-]) {
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 12px rgba(0, 0, 0, 0.32), 0 12px 24px rgba(0, 0, 0, 0.32);
}

[data-theme=dark] .btn[class*=btn-]:not(.btn-light):not(.btn-white):not([class*=-light]):not([class*=-ghost]):not([class*=btn-outline-]):hover,
[data-bs-theme=dark] .btn[class*=btn-]:not(.btn-light):not(.btn-white):not([class*=-light]):not([class*=-ghost]):not([class*=btn-outline-]):hover {
  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.34), 0 12px 24px rgba(0, 0, 0, 0.38), 0 24px 40px rgba(0, 0, 0, 0.38);
}

[data-theme=dark] .btn[class*=btn-]:not(.btn-light):not(.btn-white):not([class*=-light]):not([class*=-ghost]):not([class*=btn-outline-]):active,
[data-theme=dark] .btn[class*=btn-]:not(.btn-light):not(.btn-white):not([class*=-light]):not([class*=-ghost]):not([class*=btn-outline-]).active,
[data-bs-theme=dark] .btn[class*=btn-]:not(.btn-light):not(.btn-white):not([class*=-light]):not([class*=-ghost]):not([class*=btn-outline-]):active,
[data-bs-theme=dark] .btn[class*=btn-]:not(.btn-light):not(.btn-white):not([class*=-light]):not([class*=-ghost]):not([class*=btn-outline-]).active {
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.45);
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
.action-button {
  gap: 6px;
  height: 36px;
  padding: 0 13px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-list);
  background: var(--surface);
  color: var(--bs-body-color, #1f2937);
  font-size: 12.5px;
  font-weight: 500;
  line-height: 1;
  cursor: pointer;
  transition: all var(--transition-card);
}

.action-button i {
  font-size: 15px;
}

.action-button:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
  background: var(--tone-brand-soft);
  transform: translateY(-1px);
}

.action-button-sm {
  height: 30px;
  padding: 0 10px;
  font-size: 11.5px;
}

.action-button-primary {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.action-button-primary:hover {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
  filter: brightness(1.07);
}

.action-button-success {
  background: var(--tone-success);
  border-color: var(--tone-success);
  color: #fff;
}

.action-button-success:hover {
  color: #fff;
  filter: brightness(1.05);
}

.icon-action {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  border: 1px solid var(--border-soft);
  background: var(--surface);
  color: var(--muted);
  font-size: 16px;
  cursor: pointer;
  transition: all var(--transition-card);
}

.icon-action:hover {
  color: var(--bs-primary);
  border-color: var(--bs-primary);
  background: var(--tone-brand-soft);
}

.icon-action-sm {
  width: 28px;
  height: 28px;
  font-size: 14px;
}

/* ---------- QUICK ATTENDANCE ---------- */
.quick-action-toggle {
  border: 1px solid var(--border-soft);
  border-radius: 999px;
}

.quick-action-toggle button {
  border: 0;
  background: transparent;
  font-size: 11.5px;
  font-weight: 600;
  padding: 5px 13px;
  color: var(--muted);
  cursor: pointer;
  transition: all var(--transition-card);
}

.quick-action-toggle button.p.active {
  background: var(--tone-success);
  color: #fff;
}

.quick-action-toggle button.a.active {
  background: var(--tone-danger);
  color: #fff;
}

/*-----------------
	Compact action button + icon button

		A 34px bordered control used for toolbar and card actions. Shares its
		language with `.action-button` but runs one step tighter; both ladders are
		kept because they are tuned to different surfaces.

	Promoted from pages/_parent-portal.scss — a reusable pattern, not page style.
-----------------*/
.portal-button {
  gap: 6px;
  height: 34px;
  padding: 0 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-xs);
  background: var(--bs-body-bg);
  color: var(--bs-body-color);
  font-size: 12.5px;
  font-weight: 550;
  line-height: 1;
  cursor: pointer;
  transition: all var(--transition);
}

.portal-button:hover {
  background: var(--bs-tertiary-bg);
  border-color: var(--bs-border-color);
  color: var(--bs-emphasis-color);
  transform: translateY(-1px);
}

.portal-button i {
  font-size: 15px;
}

.portal-button-xs {
  height: 28px;
  padding: 0 9px;
  font-size: 11.5px;
  border-radius: 8px;
}

.portal-button-primary {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
  box-shadow: 0 1px 2px rgba(31, 59, 96, 0.3);
}

.portal-button-primary:hover {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
  filter: brightness(1.07);
}

.portal-button-dark {
  background: var(--bs-emphasis-color);
  border-color: var(--bs-emphasis-color);
  color: #fff;
}

.portal-button-dark:hover {
  background: var(--bs-emphasis-color);
  border-color: var(--bs-emphasis-color);
  color: #fff;
  filter: brightness(1.18);
}

.portal-icon {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-grid;
  place-items: center;
  font-size: 16px;
  cursor: pointer;
  transition: all var(--transition);
}

.portal-icon:hover {
  background: var(--bs-tertiary-bg);
  color: var(--bs-emphasis-color);
}

.off-item .btn[aria-pressed=true] {
  color: #202C4B !important;
}

.choices__inner {
  padding-top: 8px !important;
}

.choices__list--dropdown .choices__item--selectable,
.choices__list[aria-expanded] .choices__item--selectable {
  padding-right: 10px;
}

.form-sort .choices__list--single .choices__item {
  padding-left: 20px !important;
}

.badge.badge-primary {
  background: rgba(31, 59, 96, 0.1);
  box-shadow: 0 1px 1px rgba(31, 59, 96, 0.5);
  color: #1f3b60;
}

.badge.badge-primary {
  background: #1f3b60;
  color: #FFF;
}

.badge.badge-soft-primary {
  background: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

.badge.badge-secondary {
  background: #0e76bd;
  color: #FFF;
}

.badge.badge-soft-secondary {
  background: rgba(14, 118, 189, 0.1);
  color: #0e76bd;
}

.badge.badge-success {
  background: #1ABE17;
  color: #FFF;
}

.badge.badge-soft-success {
  background: rgba(26, 190, 23, 0.1);
  color: #1ABE17;
}

.badge.badge-info {
  background: #0F65CD;
  color: #FFF;
}

.badge.badge-soft-info {
  background: rgba(15, 101, 205, 0.1);
  color: #0F65CD;
}

.badge.badge-warning {
  background: #EAB300;
  color: #FFF;
}

.badge.badge-soft-warning {
  background: rgba(234, 179, 0, 0.1);
  color: #EAB300;
}

.badge.badge-danger {
  background: #E82646;
  color: #FFF;
}

.badge.badge-soft-danger {
  background: rgba(232, 38, 70, 0.1);
  color: #E82646;
}

.badge.badge-dark {
  background: #202C4B;
  color: #FFF;
}

.badge.badge-soft-dark {
  background: rgba(32, 44, 75, 0.1);
  color: #202C4B;
}

.badge.badge-light {
  background: #E9EDF4;
  color: #FFF;
}

.badge.badge-soft-light {
  background: rgba(233, 237, 244, 0.1);
  color: #E9EDF4;
}

.badge.badge-black {
  background: #000;
  color: #FFF;
}

.badge.badge-soft-black {
  background: rgba(0, 0, 0, 0.1);
  color: #000;
}

.badge.badge-purple {
  background: #4A00E5;
  color: #FFF;
}

.badge.badge-soft-purple {
  background: rgba(74, 0, 229, 0.1);
  color: #4A00E5;
}

.badge.badge-yellow {
  background: #ffff00;
  color: #FFF;
}

.badge.badge-soft-yellow {
  background: rgba(255, 255, 0, 0.1);
  color: #ffff00;
}

.badge.badge-teal {
  background: #02a8b5;
  color: #FFF;
}

.badge.badge-soft-teal {
  background: rgba(2, 168, 181, 0.1);
  color: #02a8b5;
}

.badge {
  padding: 0.25rem 0.45rem;
  text-transform: capitalize;
  font-weight: 600;
  letter-spacing: 0.5px;
  border-radius: 4px;
}

.badge.badge-xs {
  font-size: 10px;
  padding: 0px 5px;
  line-height: 18px;
}

.badge.badge-sm {
  font-size: 11px;
  padding: 5px 8px;
  line-height: 11px;
}

.badge.badge-md {
  font-size: 12px;
  padding: 5px 12px;
  line-height: 1.5;
}

.badge.badge-lg {
  font-size: 14px;
  padding: 0px 10px;
  line-height: 30px;
}

.badge.badge-xl {
  font-size: 16px;
  padding: 0px 15px;
  line-height: 35px;
}

.badge.badge-soft-skyblue {
  background: #E6F9FF;
  color: #05C3FB;
}

.badge.arrow {
  width: 20px;
  height: 20px;
  background: #FBFBFD;
  color: #202C4B;
}

.badge.arrow:hover {
  background: #1f3b60;
  color: #FFF;
}

.badge.bg-light.arrow:hover {
  background: #202C4B !important;
}

.badge-primary-hover:hover {
  background: #1f3b60 !important;
  border-color: #1f3b60 !important;
  color: #FFF !important;
}

.badge-danger-hover:hover {
  background: #E82646 !important;
  border-color: #E82646 !important;
  color: #FFF !important;
}

.badge-outline-primary {
  color: #1f3b60;
  border: 1px solid #1f3b60;
  background-color: transparent;
}

.badge-outline-primary[href] {
  color: #1f3b60;
  text-decoration: none;
  background-color: rgba(31, 59, 96, 0.1);
}

.badge-outline-primary[href]:is(:hover, :focus) {
  color: #1f3b60;
  text-decoration: none;
  background-color: rgba(31, 59, 96, 0.1);
}

.badge-outline-secondary {
  color: #0e76bd;
  border: 1px solid #0e76bd;
  background-color: transparent;
}

.badge-outline-secondary[href] {
  color: #0e76bd;
  text-decoration: none;
  background-color: rgba(14, 118, 189, 0.1);
}

.badge-outline-secondary[href]:is(:hover, :focus) {
  color: #0e76bd;
  text-decoration: none;
  background-color: rgba(14, 118, 189, 0.1);
}

.badge-outline-success {
  color: #1ABE17;
  border: 1px solid #1ABE17;
  background-color: transparent;
}

.badge-outline-success[href] {
  color: #1ABE17;
  text-decoration: none;
  background-color: rgba(26, 190, 23, 0.1);
}

.badge-outline-success[href]:is(:hover, :focus) {
  color: #1ABE17;
  text-decoration: none;
  background-color: rgba(26, 190, 23, 0.1);
}

.badge-outline-info {
  color: #0F65CD;
  border: 1px solid #0F65CD;
  background-color: transparent;
}

.badge-outline-info[href] {
  color: #0F65CD;
  text-decoration: none;
  background-color: rgba(15, 101, 205, 0.1);
}

.badge-outline-info[href]:is(:hover, :focus) {
  color: #0F65CD;
  text-decoration: none;
  background-color: rgba(15, 101, 205, 0.1);
}

.badge-outline-warning {
  color: #EAB300;
  border: 1px solid #EAB300;
  background-color: transparent;
}

.badge-outline-warning[href] {
  color: #EAB300;
  text-decoration: none;
  background-color: rgba(234, 179, 0, 0.1);
}

.badge-outline-warning[href]:is(:hover, :focus) {
  color: #EAB300;
  text-decoration: none;
  background-color: rgba(234, 179, 0, 0.1);
}

.badge-outline-danger {
  color: #E82646;
  border: 1px solid #E82646;
  background-color: transparent;
}

.badge-outline-danger[href] {
  color: #E82646;
  text-decoration: none;
  background-color: rgba(232, 38, 70, 0.1);
}

.badge-outline-danger[href]:is(:hover, :focus) {
  color: #E82646;
  text-decoration: none;
  background-color: rgba(232, 38, 70, 0.1);
}

.badge-outline-dark {
  color: #202C4B;
  border: 1px solid #202C4B;
  background-color: transparent;
}

.badge-outline-dark[href] {
  color: #202C4B;
  text-decoration: none;
  background-color: rgba(32, 44, 75, 0.1);
}

.badge-outline-dark[href]:is(:hover, :focus) {
  color: #202C4B;
  text-decoration: none;
  background-color: rgba(32, 44, 75, 0.1);
}

.badge-outline-light {
  color: #E9EDF4;
  border: 1px solid #E9EDF4;
  background-color: transparent;
}

.badge-outline-light[href] {
  color: #E9EDF4;
  text-decoration: none;
  background-color: rgba(233, 237, 244, 0.1);
}

.badge-outline-light[href]:is(:hover, :focus) {
  color: #E9EDF4;
  text-decoration: none;
  background-color: rgba(233, 237, 244, 0.1);
}

.badge-outline-black {
  color: #000;
  border: 1px solid #000;
  background-color: transparent;
}

.badge-outline-black[href] {
  color: #000;
  text-decoration: none;
  background-color: rgba(0, 0, 0, 0.1);
}

.badge-outline-black[href]:is(:hover, :focus) {
  color: #000;
  text-decoration: none;
  background-color: rgba(0, 0, 0, 0.1);
}

.badge-outline-purple {
  color: #4A00E5;
  border: 1px solid #4A00E5;
  background-color: transparent;
}

.badge-outline-purple[href] {
  color: #4A00E5;
  text-decoration: none;
  background-color: rgba(74, 0, 229, 0.1);
}

.badge-outline-purple[href]:is(:hover, :focus) {
  color: #4A00E5;
  text-decoration: none;
  background-color: rgba(74, 0, 229, 0.1);
}

.badge-outline-yellow {
  color: #ffff00;
  border: 1px solid #ffff00;
  background-color: transparent;
}

.badge-outline-yellow[href] {
  color: #ffff00;
  text-decoration: none;
  background-color: rgba(255, 255, 0, 0.1);
}

.badge-outline-yellow[href]:is(:hover, :focus) {
  color: #ffff00;
  text-decoration: none;
  background-color: rgba(255, 255, 0, 0.1);
}

.badge-outline-teal {
  color: #02a8b5;
  border: 1px solid #02a8b5;
  background-color: transparent;
}

.badge-outline-teal[href] {
  color: #02a8b5;
  text-decoration: none;
  background-color: rgba(2, 168, 181, 0.1);
}

.badge-outline-teal[href]:is(:hover, :focus) {
  color: #02a8b5;
  text-decoration: none;
  background-color: rgba(2, 168, 181, 0.1);
}

/*-----------------
    Soft bordered badge

    A compact pill with a soft fill, a matching border and an inner highlight.
    Colour comes from `--badge-accent` / `--badge-accent-rgb`, so one class
    serves every variant instead of a bespoke class per placement.
-----------------*/
.badge-soft-bordered {
  --badge-accent: #1f3b60;
  --badge-accent-rgb: 31, 59, 96;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.02em;
  line-height: 1;
  padding: 3px 8px 3px 7px;
  border-radius: 50rem;
  color: var(--badge-accent);
  background: rgba(var(--badge-accent-rgb), 0.12);
  border: 1px solid rgba(var(--badge-accent-rgb), 0.22);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);
}

.badge-soft-bordered.badge-soft-bordered-success {
  --badge-accent: #1ABE17;
  --badge-accent-rgb: 26, 190, 23;
}

.badge-soft-bordered.badge-soft-bordered-warning {
  --badge-accent: #EAB300;
  --badge-accent-rgb: 234, 179, 0;
}

.badge-soft-bordered.badge-soft-bordered-danger {
  --badge-accent: #E82646;
  --badge-accent-rgb: 232, 38, 70;
}

.badge-soft-bordered.badge-soft-bordered-info {
  --badge-accent: #0F65CD;
  --badge-accent-rgb: 15, 101, 205;
}

/*-----------------
    Badge — tag

    The one accent-driven filled label in the template. Colour comes from the
    surrounding `--accent` / `--accent-soft`, so a section recolours every tag
    beneath it by setting one variable instead of carrying a class per colour.

        <span class="badge badge-tag accent-info d-inline-flex align-items-center gap-1">
            <i class="ti ti-discount"></i>Sibling 5%
        </span>

    Sizes: the default suits panel headers and card footers, `.badge-tag-sm` the
    category label above a card title, `.badge-tag-xs` a dense inbox or table
    row. `.badge-tag-dot` adds the leading dot that reads as a live state.

    Replaces .portal-tag, .portal-tag-xs and .category-badge — one design, one
    component. Every property Bootstrap's `.badge` sets is restated here, so the
    component renders identically with or without `.badge` beside it.
-----------------*/
.badge-tag {
  gap: 4px;
  font-size: 10.5px;
  font-weight: 650;
  line-height: 1;
  letter-spacing: normal;
  text-transform: none;
  padding: 4px 8px;
  border-radius: 7px;
  color: var(--accent);
  background: var(--accent-soft);
}

.badge-tag i {
  font-size: 12px;
}

.badge-tag-sm {
  gap: 4px;
  font-size: 10px;
  line-height: inherit;
  padding: 2px 7px;
  border-radius: 6px;
}

.badge-tag-xs {
  font-size: 9px;
}

.badge-tag-dot::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--accent);
}

/*-----------------
    Badge — meta

    The bordered tag that carries a record's secondary facts inside a list row:
    a channel, a template type, a language. Quieter than the accent tag because
    it stays on the page's own greys instead of taking a colour.

    Replaces .eml-tag, .sms-tag, .acs-tag, .acd-tag, .lng-tag and .aig-tag —
    six byte-identical rules across six pages, now one component.
-----------------*/
.badge-meta {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: normal;
  text-transform: none;
  padding: 2px 8px;
  border-radius: 6px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
}

/*-----------------
    Badge — status

    The bordered pill that reports a record's state at the end of a list row.
    `.badge-status-lg` is the roomier step used in card headers;
    `.badge-status-strong` darkens the label where the pill is the row's
    primary content rather than an aside.

    Seven pages had drawn this pill for themselves, byte for byte. The geometry,
    typography and surface now live here once and those pages ride the same
    declarations. They keep their own class name only because each carries a
    different `.is-*` state palette — `.is-draft` is one colour on a form field
    and another on a broadcast — so collapsing the names would collide the
    states. New markup should use `.badge-status` directly.
-----------------*/
.badge-status,
.field-status-badge,
.message-status-badge,
.rule-status-badge,
.lng-badge,
.aig-badge,
.hwk-tag,
.ops-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  font-weight: 600;
  line-height: 1.5;
  letter-spacing: normal;
  text-transform: none;
  white-space: nowrap;
  padding: 2px 9px;
  border-radius: 999px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
}

.badge-status-lg,
.lng-badge,
.aig-badge {
  gap: 5px;
  font-size: 11.5px;
  padding: 3px 10px;
}

.badge-status-strong,
.hwk-tag,
.ops-chip {
  gap: 5px;
  line-height: inherit;
  padding: 4px 10px;
  color: var(--bs-emphasis-color);
}

/*-----------------
    Priority flag

    The uppercase severity label that closes an insight, an alert or a support
    ticket. Unlike the accent tag it names a fixed scale, so each level carries
    its own colour rather than following the surrounding accent.

    Promoted from pages/_parent-portal.scss — a reusable pattern, not page style.
-----------------*/
.priority-flag {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 3px 7px;
  border-radius: 6px;
}

.priority-flag-high {
  color: var(--bs-danger);
  background: var(--tint-danger);
}

.priority-flag-medium {
  color: var(--bs-warning);
  background: var(--tint-warning);
}

.priority-flag-low {
  color: var(--bs-success);
  background: var(--tint-success);
}

/*-----------------
    Notification dot

    The unread marker on an inbox row, a tab or a menu item: a badge with a
    state but no content. `.notification-dot-accent` follows the surrounding
    accent where a list already recolours row by row.

    Promoted from pages/_parent-portal.scss — a reusable pattern, not page style.
-----------------*/
.notification-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--bs-primary);
}

.notification-dot-accent {
  background: var(--accent);
}

/*-----------------
    Disabled badge

    One modifier for the whole badge family — accent tags, priority flags,
    category badges and Bootstrap's own `.badge` alike. Drains the colour and
    dims the label rather than restyling it, so a disabled badge still reads as
    the badge it was.
-----------------*/
.badge-disabled {
  opacity: 0.55;
  filter: grayscale(1);
  pointer-events: none;
}

.border-container {
  display: inline-block;
  width: 5rem;
  height: 5rem;
  margin: 0.25rem;
  background-color: #E9EDF4;
}

.border {
  border: 1px solid #E9EDF4 !important;
}

.border.border-dashed {
  border-style: dashed !important;
}

.border.border-dotted {
  border-style: dotted !important;
}

.border.border-primary {
  border: 1px solid #1f3b60 !important;
  opacity: 1;
}

.border.border-primary.border-opacity-10 {
  border-color: rgba(31, 59, 96, 0.1) !important;
}

.border.border-primary.border-opacity-25 {
  border-color: rgba(31, 59, 96, 0.25) !important;
}

.border.border-primary.border-opacity-50 {
  border-color: rgba(31, 59, 96, 0.5) !important;
}

.border.border-primary.border-opacity-75 {
  border-color: rgba(31, 59, 96, 0.75) !important;
}

.border.border-primary.border-opacity-100 {
  border-color: #1f3b60 !important;
}

.border.border-secondary {
  border: 1px solid #0e76bd !important;
  opacity: 1;
}

.border.border-secondary.border-opacity-10 {
  border-color: rgba(14, 118, 189, 0.1) !important;
}

.border.border-secondary.border-opacity-25 {
  border-color: rgba(14, 118, 189, 0.25) !important;
}

.border.border-secondary.border-opacity-50 {
  border-color: rgba(14, 118, 189, 0.5) !important;
}

.border.border-secondary.border-opacity-75 {
  border-color: rgba(14, 118, 189, 0.75) !important;
}

.border.border-secondary.border-opacity-100 {
  border-color: #0e76bd !important;
}

.border.border-info {
  border: 1px solid #0F65CD !important;
  opacity: 1;
}

.border.border-info.border-opacity-10 {
  border-color: rgba(15, 101, 205, 0.1) !important;
}

.border.border-info.border-opacity-25 {
  border-color: rgba(15, 101, 205, 0.25) !important;
}

.border.border-info.border-opacity-50 {
  border-color: rgba(15, 101, 205, 0.5) !important;
}

.border.border-info.border-opacity-75 {
  border-color: rgba(15, 101, 205, 0.75) !important;
}

.border.border-info.border-opacity-100 {
  border-color: #0f65cd !important;
}

.border.border-success {
  border: 1px solid #1ABE17 !important;
  opacity: 1;
}

.border.border-success.border-opacity-10 {
  border-color: rgba(26, 190, 23, 0.1) !important;
}

.border.border-success.border-opacity-25 {
  border-color: rgba(26, 190, 23, 0.25) !important;
}

.border.border-success.border-opacity-50 {
  border-color: rgba(26, 190, 23, 0.5) !important;
}

.border.border-success.border-opacity-75 {
  border-color: rgba(26, 190, 23, 0.75) !important;
}

.border.border-success.border-opacity-100 {
  border-color: #1abe17 !important;
}

.border.border-warning {
  border: 1px solid #EAB300 !important;
  opacity: 1;
}

.border.border-warning.border-opacity-10 {
  border-color: rgba(234, 179, 0, 0.1) !important;
}

.border.border-warning.border-opacity-25 {
  border-color: rgba(234, 179, 0, 0.25) !important;
}

.border.border-warning.border-opacity-50 {
  border-color: rgba(234, 179, 0, 0.5) !important;
}

.border.border-warning.border-opacity-75 {
  border-color: rgba(234, 179, 0, 0.75) !important;
}

.border.border-warning.border-opacity-100 {
  border-color: #eab300 !important;
}

.border.border-danger {
  border: 1px solid #E82646 !important;
  opacity: 1;
}

.border.border-danger.border-opacity-10 {
  border-color: rgba(232, 38, 70, 0.1) !important;
}

.border.border-danger.border-opacity-25 {
  border-color: rgba(232, 38, 70, 0.25) !important;
}

.border.border-danger.border-opacity-50 {
  border-color: rgba(232, 38, 70, 0.5) !important;
}

.border.border-danger.border-opacity-75 {
  border-color: rgba(232, 38, 70, 0.75) !important;
}

.border.border-danger.border-opacity-100 {
  border-color: #e82646 !important;
}

.border.border-white {
  border: 1px solid #FFF !important;
  opacity: 1;
}

.border.border-white.border-opacity-10 {
  border-color: rgba(255, 255, 255, 0.1) !important;
}

.border.border-white.border-opacity-25 {
  border-color: rgba(255, 255, 255, 0.25) !important;
}

.border.border-white.border-opacity-50 {
  border-color: rgba(255, 255, 255, 0.5) !important;
}

.border.border-white.border-opacity-75 {
  border-color: rgba(255, 255, 255, 0.75) !important;
}

.border.border-white.border-opacity-100 {
  border-color: white !important;
}

.border.border-light {
  border: 1px solid #E9EDF4 !important;
  opacity: 1;
}

.border.border-light.border-opacity-10 {
  border-color: rgba(233, 237, 244, 0.1) !important;
}

.border.border-light.border-opacity-25 {
  border-color: rgba(233, 237, 244, 0.25) !important;
}

.border.border-light.border-opacity-50 {
  border-color: rgba(233, 237, 244, 0.5) !important;
}

.border.border-light.border-opacity-75 {
  border-color: rgba(233, 237, 244, 0.75) !important;
}

.border.border-light.border-opacity-100 {
  border-color: #e9edf4 !important;
}

.border.border-dark {
  border: 1px solid #202C4B !important;
  opacity: 1;
}

.border.border-dark.border-opacity-10 {
  border-color: rgba(32, 44, 75, 0.1) !important;
}

.border.border-dark.border-opacity-25 {
  border-color: rgba(32, 44, 75, 0.25) !important;
}

.border.border-dark.border-opacity-50 {
  border-color: rgba(32, 44, 75, 0.5) !important;
}

.border.border-dark.border-opacity-75 {
  border-color: rgba(32, 44, 75, 0.75) !important;
}

.border.border-dark.border-opacity-100 {
  border-color: #202c4b !important;
}

.border.border-orange {
  border: 1px solid #FD7E14 !important;
  opacity: 1;
}

.border.border-orange.border-opacity-10 {
  border-color: rgba(253, 126, 20, 0.1) !important;
}

.border.border-orange.border-opacity-25 {
  border-color: rgba(253, 126, 20, 0.25) !important;
}

.border.border-orange.border-opacity-50 {
  border-color: rgba(253, 126, 20, 0.5) !important;
}

.border.border-orange.border-opacity-75 {
  border-color: rgba(253, 126, 20, 0.75) !important;
}

.border.border-orange.border-opacity-100 {
  border-color: #fd7e14 !important;
}

.border.border-opacity-10 {
  --bs-border-opacity: 0.1 !important;
}

.border.border-opacity-25 {
  --bs-border-opacity: 0.25 !important;
}

.border.border-opacity-50 {
  --bs-border-opacity: 0.5 !important;
}

.border.border-opacity-75 {
  --bs-border-opacity: 0.75 !important;
}

.border.border-opacity-100 {
  --bs-border-opacity: 1 !important;
}

.border.border-1 {
  border-width: 1px !important;
}

.border.border-2 {
  border-width: 2px !important;
}

.border.border-3 {
  border-width: 3px !important;
}

.border.border-4 {
  border-width: 4px !important;
}

.border.border-5 {
  border-width: 5px !important;
}

.border.border-block-start-dashed {
  border-top-style: dashed;
}

.border.border-block-start-dotted {
  border-top-style: dotted;
}

.border.border-inline-end-dashed {
  border-inline-end-style: dashed;
}

.border.border-inline-end-dotted {
  border-inline-end-style: dotted;
}

.border.border-block-end-dashed {
  border-bottom-style: dashed;
}

.border.border-block-end-dotted {
  border-bottom-style: dotted;
}

.border.border-inline-start-dashed {
  border-inline-start-style: dashed;
}

.border.border-inline-start-dotted {
  border-inline-start-style: dotted;
}

.border.border-0 {
  border: 0 !important;
}

.border.border-top-0 {
  border-block-start: 0 !important;
}

.border.border-end-0 {
  border-inline-end: 0 !important;
}

.border.border-bottom-0 {
  border-block-end: 0 !important;
}

.border.border-start-0 {
  border-inline-start: 0 !important;
}

.border-top {
  border-top: 1px solid #E9EDF4 !important;
}

.border-top.border-block-start-dashed {
  border-top-style: dashed !important;
}

.border-top.border-block-start-dotted {
  border-top-style: dotted !important;
}

.border-top.border-primary {
  border-color: #1f3b60 !important;
}

.border-top.border-secondary {
  border-color: #0e76bd !important;
}

.border-top.border-warning {
  border-color: #EAB300 !important;
}

.border-top.border-info {
  border-color: #0F65CD !important;
}

.border-top.border-success {
  border-color: #1ABE17 !important;
}

.border-top.border-danger {
  border-color: #E82646 !important;
}

.border-top.border-light {
  border-color: #E9EDF4 !important;
}

.border-top.border-dark {
  border-color: #202C4B !important;
}

.border-end {
  border-inline-end: 1px solid #E9EDF4 !important;
}

.border-end.border-inline-end-dashed {
  border-inline-end-style: dashed !important;
}

.border-end.border-inline-end-dotted {
  border-inline-end-style: dotted !important;
}

.border-end.border-primary {
  border-color: #1f3b60 !important;
}

.border-end.border-secondary {
  border-color: #0e76bd !important;
}

.border-end.border-warning {
  border-color: #EAB300 !important;
}

.border-end.border-info {
  border-color: #0F65CD !important;
}

.border-end.border-success {
  border-color: #1ABE17 !important;
}

.border-end.border-danger {
  border-color: #E82646 !important;
}

.border-end.border-light {
  border-color: #E9EDF4 !important;
}

.border-end.border-dark {
  border-color: #202C4B !important;
}

.border-bottom {
  border-bottom: 1px solid #E9EDF4 !important;
}

.border-bottom.border-block-end-dashed {
  border-bottom-style: dashed !important;
}

.border-bottom.border-block-end-dotted {
  border-bottom-style: dotted !important;
}

.border-bottom.border-primary {
  border-color: #1f3b60 !important;
}

.border-bottom.border-secondary {
  border-color: #0e76bd !important;
}

.border-bottom.border-warning {
  border-color: #EAB300 !important;
}

.border-bottom.border-info {
  border-color: #0F65CD !important;
}

.border-bottom.border-success {
  border-color: #1ABE17 !important;
}

.border-bottom.border-danger {
  border-color: #E82646 !important;
}

.border-bottom.border-light {
  border-color: #E9EDF4 !important;
}

.border-bottom.border-dark {
  border-color: #202C4B !important;
}

.border-bottom.border-skyblue {
  border-color: #05C3FB !important;
}

.border-start {
  border-inline-start: 1px solid #E9EDF4 !important;
}

.border-start.border-inline-start-dashed {
  border-inline-start-style: dashed !important;
}

.border-start.border-inline-start-dotted {
  border-inline-start-style: dotted !important;
}

.border-start.border-primary {
  border-color: #1f3b60 !important;
}

.border-start.border-secondary {
  border-color: #0e76bd !important;
}

.border-start.border-warning {
  border-color: #EAB300 !important;
}

.border-start.border-info {
  border-color: #0F65CD !important;
}

.border-start.border-success {
  border-color: #1ABE17 !important;
}

.border-start.border-danger {
  border-color: #E82646 !important;
}

.border-start.border-light {
  border-color: #E9EDF4 !important;
}

.border-start.border-dark {
  border-color: #202C4B !important;
}

.border-primary {
  border-color: #1f3b60 !important;
}

.border-secondary {
  border-color: #0e76bd !important;
}

.border-warning {
  border-color: #EAB300 !important;
}

.border-info {
  border-color: #0F65CD !important;
}

.border-success {
  border-color: #1ABE17 !important;
}

.border-danger {
  border-color: #E82646 !important;
}

.border-skyblue {
  border-color: #05C3FB !important;
}

.border-purple {
  border-color: #4A00E5 !important;
}

.border-pink {
  border-color: #E83E8C !important;
}

.border-teal {
  border-color: #02a8b5 !important;
}

.border-3 {
  border-width: 3px !important;
}

.br-1 {
  border-radius: 0.0625rem;
}

.br-2 {
  border-radius: 0.125rem;
}

.br-3 {
  border-radius: 0.1875rem;
}

.br-4 {
  border-radius: 0.25rem;
}

.br-5 {
  border-radius: 0.3125rem !important;
}

.br-6 {
  border-radius: 0.375rem;
}

.br-7 {
  border-radius: 0.4375rem;
}

.br-8 {
  border-radius: 0.5rem;
}

.br-9 {
  border-radius: 0.5625rem;
}

.br-10 {
  border-radius: 0.625rem;
}

.br-15 {
  border-radius: 0.9375rem;
}

.br-20 {
  border-radius: 1.25rem;
}

.rounded {
  border-radius: 4px !important;
}

.calendar-events {
  border: 1px solid transparent;
  cursor: move;
  padding: 10px 15px;
}

.calendar-events:hover {
  border-color: #E9EDF4;
  background-color: #FFF;
}

.calendar-events i {
  margin-right: 8px;
}

.calendar {
  float: left;
  margin-bottom: 0;
}

.fc-toolbar.fc-header-toolbar {
  margin-bottom: 10px;
  flex-wrap: wrap;
}

.fc-toolbar.fc-header-toolbar .fc-toolbar-chunk {
  margin-bottom: 10px;
}

.fc-toolbar.fc-header-toolbar .fc-left,
.fc-toolbar.fc-header-toolbar .fc-right {
  margin-bottom: 10px;
}

.fc-toolbar h2 {
  font-size: 18px;
  font-weight: 600;
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  line-height: 30px;
  text-transform: uppercase;
}

.fc-day-grid-event .fc-time {
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

.fc-day {
  background: #FFF;
}

.fc-toolbar .fc-state-active,
.fc-toolbar .ui-state-active,
.fc-toolbar button:focus,
.fc-toolbar button:hover,
.fc-toolbar .ui-state-hover {
  z-index: 0;
}

.fc th.fc-widget-header {
  background: #F4F6FA;
  font-size: 14px;
  text-transform: uppercase;
}

.fc-unthemed th,
.fc-unthemed td,
.fc-unthemed thead,
.fc-unthemed tbody,
.fc-unthemed .fc-divider,
.fc-unthemed .fc-row,
.fc-unthemed .fc-popover {
  border-color: #E9EDF4;
}

.fc-basic-view .fc-day-number,
.fc-basic-view .fc-week-number {
  padding: 2px 5px;
}

.fc-button {
  background: #F4F6FA;
  border: none;
  color: #515B73;
  text-transform: capitalize;
  box-shadow: none !important;
  border-radius: 5px !important;
  margin: 0 3px !important;
  padding: 6px 12px !important;
  height: auto !important;
}

.fc-text-arrow {
  font-family: inherit;
  font-size: 16px;
}

.fc-state-hover {
  background: #F8FAFC;
}

.fc-state-highlight {
  background: #F8FAFC;
}

.fc-state-down,
.fc-state-active,
.fc-state-disabled {
  background-color: #1f3b60 !important;
  color: #FFF !important;
  text-shadow: none !important;
}

.fc-cell-overlay {
  background: #F8FAFC;
}

.fc-unthemed .fc-today {
  background: #FFF;
}

.fc-event {
  border-radius: 2px;
  border: none;
  color: #FFF !important;
  cursor: move;
  font-size: 13px;
  margin: 1px 7px;
  padding: 5px 5px;
  text-align: center;
}

.fc-basic-view td.fc-week-number span {
  padding-right: 8px;
  font-weight: 700;
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

.fc-basic-view td.fc-day-number {
  padding-right: 8px;
  font-weight: 700;
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

.event-form .input-group .form-control {
  height: 40px;
}

.fc-theme-standard .fc-scrollgrid {
  border: 1px solid #E9EDF4;
}

.fc .fc-col-header-cell-cushion {
  color: #202C4B;
  font-size: 14px;
  font-weight: 700;
  padding: 0;
}

.fc th {
  background: #F4F6FA;
  border-color: #F4F6FA;
  height: 40px;
  line-height: 40px;
}

.fc th.columnheader:last-child {
  border-right: #F4F6FA;
}

.fc td {
  border-color: #E9EDF4;
}

.fc .fc-daygrid-day-number {
  color: #202C4B;
  font-size: 14px;
}

.fc .fc-toolbar-title {
  font-size: 18px;
  font-weight: 600;
  color: #202C4B;
}

.fc-event {
  border: 1px solid #FFF;
  border-radius: 5px;
  background: #FFF;
  color: #000;
  padding: 5px;
}

.fc-event.progress-danger {
  border-color: #E82646;
}

.fc-event.progress-info {
  border-color: #0F65CD;
}

.fc-event.progress-pending {
  border-color: #05C3FB;
}

.fc-event.progress-success {
  border-color: #1ABE17;
}

.fc-event-main {
  color: #202C4B !important;
}

.fc .fc-button-primary {
  background-color: #F4F6FA;
  border-color: #F4F6FA;
  color: #515B73;
  font-size: 14px;
  height: 26px;
  border-radius: 5px;
  padding: 2px 5px !important;
  text-transform: capitalize;
}

.fc .fc-button-primary:hover,
.fc .fc-button-primary.active,
.fc .fc-button-primary:active {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
}

.fc .fc-button-primary:focus {
  box-shadow: none;
}

.fc .fc-button-primary.fc-dayGridMonth-button,
.fc .fc-button-primary:not(:disabled).fc-button-active,
.fc .fc-button-primary.fc-today-button {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  font-size: 14px;
  font-weight: 400;
  height: 26px;
  border-radius: 0;
  border-width: 1px 0;
  padding: 0;
}

.fc .fc-button-primary.fc-dayGridMonth-button:hover,
.fc .fc-button-primary:not(:disabled).fc-button-active:hover,
.fc .fc-button-primary.fc-today-button:hover {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
}

.fc .fc-button-primary.fc-dayGridMonth-button:focus,
.fc .fc-button-primary:not(:disabled).fc-button-active:focus,
.fc .fc-button-primary.fc-today-button:focus {
  box-shadow: none;
}

.fc .fc-button-primary.fc-custombtn-button {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  font-size: 15px;
  font-weight: 500;
  position: relative;
  padding: 7px 20px 7px 40px !important;
}

.fc .fc-button-primary.fc-custombtn-button::before {
  position: absolute;
  top: 50%;
  left: 20px;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  font-family: "Fontawesome";
  content: "\f055";
}

.fc .fc-list-event:hover td {
  background-color: transparent;
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
/* ---------- CALENDAR / EVENTS ---------- */
.calendar-event {
  gap: 12px;
  padding: 10px 0;
  border-bottom: 1px solid var(--border-soft);
}

.calendar-event:last-child {
  border-bottom: 0;
}

.calendar-event-date {
  width: 48px;
  border-radius: 10px;
  padding: 6px 0;
}

.calendar-event-date b {
  display: block;
  font-size: 17px;
  font-weight: 800;
  line-height: 1;
}

.calendar-event-date span {
  font-size: 9.5px;
  text-transform: uppercase;
}

.calendar-event-body b {
  font-size: 12.5px;
  color: var(--heading);
  display: block;
}

/* Dark Mode — calendar.html's own #calendar mount only. calendar-data.js
   (shared with events.html/plugins.html/tickets.html) sets each event's
   background/text as an inline style, so those light pastel hexes can't
   be edited without changing those other pages; override just the
   background here and unify the text colour to the theme's readable
   heading colour, since two of the five category text hues are too dark
   to read against any dark surface. */
[data-theme=dark] #calendar .fc-event,
[data-bs-theme=dark] #calendar .fc-event {
  background-color: var(--tone-brand-soft) !important;
  border-color: var(--border-strong) !important;
  color: var(--heading) !important;
}

.calendar-event-body span {
  font-size: 11px;
  color: var(--muted);
}

.apexcharts-legend.apexcharts-align-center.position-right {
  display: none;
}

.apexcharts-toolbar {
  display: none !important;
}

#sales_charts,
.chart-set {
  overflow: hidden;
}

.apexcharts-canvas {
  width: 100% !important;
}

.apex-charts .apexcharts-canvas {
  margin: 0 auto;
}

.apexcharts-legend {
  padding: 0 !important;
}

.h-250 {
  height: 250px;
}

#attendance_chart2 {
  margin: 24px 0 0;
}

#attendance_chart2 .attendance-percentage {
  position: absolute;
  right: 0;
  top: 50%;
  transform: translate(-50%, -50%);
  max-width: 100px;
  text-align: center;
  color: #515B73;
}

#attendance_chart2 .attendance-percentage span {
  font-size: 28px;
  color: #202C4B;
}

#attendance_chart2 .apexcharts-legend-marker {
  width: 8px !important;
  height: 3px !important;
  border-radius: 5px !important;
}

#attendance_chart {
  margin: 24px 0;
}

#attendance_chart .attendance-percentage {
  position: absolute;
  left: 50%;
  top: 43%;
  transform: translate(-50%, -50%);
  max-width: 100px;
  text-align: center;
  color: #515B73;
}

#attendance_chart .attendance-percentage span {
  font-size: 28px;
  color: #202C4B;
}

#attendance_chart .apexcharts-legend-marker {
  width: 8px !important;
  height: 3px !important;
  border-radius: 5px !important;
}

#exam-result-chart {
  margin-left: -15px;
}

/*-----------------
    Chart fill

    A chart mounted as a flex child so it grows with its card. The floor
    matters: a percentage chart height resolves against the parent, and
    without it the chart can collapse to nothing.
-----------------*/
.chart-fill {
  flex: 1 1 auto;
  min-height: 17.5rem;
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
/* ---------- PERFORMANCE ANALYTICS ---------- */
.performance-panel {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}

/* compact variants — replace ad-hoc inline padding overrides */
.chart-sparkline {
  height: 34px;
  margin-top: 8px;
}

.chart-sparkline .ln {
  fill: none;
  stroke: currentColor;
  stroke-width: 2.4;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.chart-sparkline .ar {
  fill: currentColor;
  opacity: 0.18;
}

/* compact stat strip — communication volume at a glance */
.communication-stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  margin-bottom: 14px;
}

.chart-surface {
  padding: 9px 10px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-list);
  background: var(--surface);
  border-left-width: 3px;
}

.chart-surface b {
  display: block;
  font-size: 16px;
  font-weight: 800;
  color: var(--heading);
  letter-spacing: -0.02em;
  line-height: 1.1;
}

.chart-surface span {
  font-size: 10.5px;
  color: var(--muted);
}

@media (max-width: 575.98px) {
  .communication-stats {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ---------- ATTENDANCE HEATMAP ---------- */
.heatmap {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(16px, 1fr));
  gap: 4px;
}

.heatmap span {
  aspect-ratio: 1;
  border-radius: 4px;
  background: var(--surface-soft);
}

.heatmap span.l1 {
  background: rgba(22, 163, 74, 0.25);
}

.heatmap span.l2 {
  background: rgba(22, 163, 74, 0.45);
}

.heatmap span.l3 {
  background: rgba(22, 163, 74, 0.68);
}

.heatmap span.l4 {
  background: rgba(22, 163, 74, 0.9);
}

.heatmap span.ab {
  background: rgba(220, 38, 38, 0.55);
}

.heatmap-legend {
  gap: 5px;
  font-size: 10.5px;
  color: var(--muted);
  margin-top: 8px;
}

.heatmap-legend i {
  width: 12px;
  height: 12px;
  border-radius: 3px;
  display: inline-block;
}

/* mini attendance donut */
.attendance-split {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

.attendance-split .v {
  font-size: 20px;
  font-weight: 800;
  color: var(--heading);
}

.attendance-split .l {
  font-size: 10.5px;
  color: var(--muted);
}

@media (max-width: 1199px) {
  .performance-panel {
    grid-template-columns: 1fr;
  }
}

/* ---------- SCORE RAIL ---------- */
/* headline ring plus supporting facts, used as the left rail of an
   analytics panel */
.performance-panel-rail {
  display: grid;
  grid-template-columns: 250px 1fr 300px;
  gap: 20px;
}

/* ---------- TREND + BAR CHART ---------- */
.trend-panel {
  padding: 12px 14px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-list);
  background: var(--surface);
}

.trend-header {
  gap: 10px;
}

.trend-header b {
  font-size: 24px;
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--heading);
  line-height: 1;
}

.trend-header b small {
  font-size: 13px;
  font-weight: 700;
  color: var(--muted);
}

.trend-header span {
  display: block;
  font-size: 10.5px;
  color: var(--muted);
  margin-top: 3px;
}

.trend-panel .chart-sparkline {
  height: 46px;
}

.bar-chart {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 1fr;
  gap: 8px;
  align-items: end;
  height: 128px;
  margin-top: 14px;
}

.bar-chart .b {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  height: 100%;
  gap: 5px;
}

.bar-chart .val {
  font-size: 10.5px;
  font-weight: 700;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}

/* column height comes from an inline `height` so the value stays with the data */
.bar-chart .col {
  width: 100%;
  max-width: 30px;
  border-radius: 7px 7px 3px 3px;
}

.bar-chart .cap {
  font-size: 10px;
  color: var(--muted);
}

.bar-chart .b.on .val {
  color: var(--heading);
}

/* ---------- DONUT + LEGEND ---------- */
/* every legend row maps to an arc, so chart and legend always agree.
   Arc lengths are set inline via stroke-dasharray (circumference 339.3). */
.donut-chart {
  width: 158px;
  height: 158px;
  margin: 0 auto;
}

.donut-chart svg {
  transform: rotate(-90deg);
  width: 100%;
  height: 100%;
  overflow: visible;
}

.donut-chart circle {
  fill: none;
  stroke-width: 11;
}

.donut-chart .track {
  stroke: var(--surface-soft);
}

.donut-chart .seg {
  stroke: currentColor;
  stroke-linecap: round;
}

.donut-chart .c {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
}

.donut-chart .c b {
  font-size: 27px;
  font-weight: 800;
  letter-spacing: -0.5px;
  color: var(--heading);
  line-height: 1;
}

.donut-chart .c span {
  font-size: 10.5px;
  color: var(--muted);
  margin-top: 2px;
}

.donut-chart .c em {
  font-style: normal;
  font-size: 10px;
  font-weight: 600;
  color: var(--heading);
  margin-top: 5px;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--surface-soft);
}

.chart-legend {
  gap: 8px;
}

.chart-legend>div {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 12.5px;
  color: var(--muted);
}

.chart-legend .k {
  width: 10px;
  height: 10px;
  border-radius: 3px;
  flex-shrink: 0;
}

.chart-legend b {
  margin-left: auto;
  color: var(--heading);
  font-variant-numeric: tabular-nums;
}

@media (max-width: 1399px) {
  .performance-panel-rail {
    grid-template-columns: 200px 1fr 260px;
    gap: 16px;
  }
}

@media (max-width: 1199px) {
  .performance-panel-rail {
    grid-template-columns: 1fr 1fr;
  }

  .performance-panel-rail>.trend-column {
    grid-column: 1/-1;
  }
}

@media (max-width: 767px) {
  .performance-panel-rail {
    grid-template-columns: 1fr;
  }
}

.chat-user-actives .call-meet-blk {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  background: #FFF;
  border-radius: 5px;
  margin-bottom: 15px;
  padding: 10px;
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

.chat-user-actives .call-meet-blk:hover {
  background-color: #000;
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

.chat-user-actives .call-meet-blk .meet-border {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  width: 39px;
  height: 39px;
  background: #FFF;
  border: 0.5px solid #B5B9C3;
  border-radius: 10px;
  margin-right: 10px;
}

.chat-user-actives .call-meet-blk .meet-border svg {
  width: 16px;
  color: #339DFF;
}

.chat-user-actives .call-meet-blk .recent-user-titles h5 {
  font-size: 14px;
  font-weight: 600;
  color: #000;
  margin-bottom: 5px;
  width: 150px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.chat-user-actives .call-meet-blk .recent-user-titles p {
  font-size: 10px;
  color: #6A7287;
}

.new-join-link .chat-user-actives .meet-border {
  background: gray;
  border: 0;
  border-radius: 6px;
}

.new-join-link .chat-user-actives .meet-border:hover {
  background: #1f3b60;
}

.new-join-link .chat-user-actives .meet-border:hover svg {
  color: #FFF;
}

.new-join-link .chat-user-actives .meet-border svg {
  color: #1f3b60;
}

.new-join-link .chat-user-actives .recent-user-titles h5 {
  color: #1f3b60;
  width: 100%;
  margin-bottom: 0;
  font-size: 15px;
}

.meet-chat-blk .join-call .join-video {
  position: relative;
  margin-bottom: 25px;
}

.meet-chat-blk .join-call .join-video img {
  border-radius: 10px;
}

.meet-chat-blk .join-call .join-video .video-avatar {
  color: #FFF;
  background: #5D5D5D;
  font-size: 50px;
  border-radius: 10px;
  height: 100%;
  width: 100%;
  position: absolute;
  top: 0;
  left: 0;
  display: none;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.meet-chat-blk .join-call .join-video .video-avatar.active {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
  height: 426px;
}

.meet-chat-blk .join-call .join-video .call-icons {
  text-align: center;
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
}

.meet-chat-blk .join-call .join-video .call-icons .call-items {
  border-radius: 5px;
  padding: 0;
  margin: 0;
  list-style: none;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  position: absolute;
  bottom: 30px;
  left: 50%;
  transform: translate(-50%, 0);
}

.meet-chat-blk .join-call .join-video .call-icons .call-items .call-item {
  display: inline-block;
  text-align: center;
  margin-right: 15px;
}

.meet-chat-blk .join-call .join-video .call-icons .call-items .call-item:last-child {
  margin-right: 0px;
}

.meet-chat-blk .join-call .join-video .call-icons .call-items .call-item a {
  color: #FFF;
  background: #FFF;
  border-radius: 10px;
  width: 54px;
  height: 54px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  font-size: 20px;
  white-space: nowrap;
}

@media (max-width: 767.98px) {
  .meet-chat-blk .join-call .join-video .call-icons .call-items .call-item a {
    width: 45px;
    height: 45px;
  }
}

.meet-chat-blk .join-call .join-video .call-icons .call-items .call-item a i {
  color: #6A7287;
}

.meet-chat-blk .join-call .join-video .call-icons .call-items .call-item a.stop {
  color: #FFF;
  background: #E82646;
}

.meet-chat-blk .join-call .join-video .call-icons .call-items .call-item a.stop i {
  color: #FFF;
}

.meet-chat-blk .join-call .join-video .meet-drop ul li i {
  font-size: 18px;
}

.meet-chat-blk .join-call .join-content {
  text-align: center;
  max-width: 500px;
  margin: auto;
}

.meet-chat-blk .join-call .join-content h4 {
  font-size: 22px;
  font-weight: 600;
  margin-bottom: 20px;
}

@media (max-width: 767.98px) {
  .meet-chat-blk .join-call .join-content h4 {
    font-size: 18px;
  }
}

.meet-chat-blk .join-call .join-content p {
  font-size: 13px;
  color: #6A7287;
}

.conference-meet-group {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.conference-meet-group .meeting-list {
  width: 100%;
  transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
}

.conference-meet-group .meeting-list.add-meeting {
  width: 65%;
  margin-right: 24px;
}

@media (max-width: 767.98px) {
  .conference-meet-group .meeting-list.add-meeting {
    display: none;
    margin-right: 0px;
  }
}

.conference-meet-group .right-user-side {
  width: 0;
  opacity: 0;
  transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
}

.conference-meet-group .right-user-side.right-side-party {
  width: 0;
  opacity: 0;
  transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
}

.conference-meet-group .right-user-side.right-side-party .party-msg-blk .last-call-time .call-recent {
  background: none;
}

.conference-meet-group .right-user-side.right-side-party .party-msg-blk .last-call-time .call-recent svg {
  color: #1f3b60;
  width: 14px;
}

.conference-meet-group .right-user-side.chat-rooms {
  width: 0;
  opacity: 0;
  transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
}

.conference-meet-group .right-user-side.chat-rooms .slime-grp {
  padding: 0;
}

.conference-meet-group .right-user-side.chat-rooms .slime-grp .left-chat-title {
  padding: 20px;
  border-bottom: 1px solid #E9EDF4;
  border-radius: 10px 10px 0 0;
}

.conference-meet-group .right-user-side.chat-rooms.open-chats {
  width: 35%;
  opacity: 1;
}

@media (max-width: 767.98px) {
  .conference-meet-group .right-user-side.chat-rooms.open-chats {
    width: 100%;
  }
}

.conference-meet-group .right-user-side.open-message {
  width: 35%;
  opacity: 1;
}

@media (max-width: 767.98px) {
  .conference-meet-group .right-user-side.open-message {
    width: 100%;
  }
}

.meet-drop {
  background: rgba(255, 255, 255, 0.6);
  border-radius: 10px;
  position: absolute;
  top: 20px;
  right: 20px;
}

.meet-drop.meet-mutes {
  background: #1f3b60;
  right: inherit;
  left: 20px;
}

.meet-drop.meet-mutes ul li a {
  color: #FFF;
  width: 50px;
  height: 50px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

@media (max-width: 767.98px) {
  .meet-drop.meet-mutes ul li a {
    width: 38px;
    height: 38px;
  }
}

.meet-drop.meet-mutes-bottom {
  background: #1f3b60;
  bottom: 20px;
  border-radius: 50px;
  top: inherit;
}

.meet-drop.meet-mutes-bottom ul li a {
  color: #FFF;
  width: 50px;
  height: 50px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

@media (max-width: 767.98px) {
  .meet-drop.meet-mutes-bottom ul li a {
    width: 38px;
    height: 38px;
  }
}

.meet-drop.meet-mutes-bottom ul li a i {
  font-size: 20px;
}

.meet-call-menu-blk .video-call-action {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

@media (max-width: 767.98px) {
  .meet-call-menu-blk .video-call-action {
    display: block;
  }
}

.meet-call-menu-blk .video-call-action ul {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.meet-call-menu-blk .video-call-action ul li {
  margin-right: 5px;
}

.meet-call-menu-blk .video-call-action ul li:last-child {
  margin-right: 0;
}

.meet-call-menu-blk .video-call-action ul li a {
  width: 40px;
  height: 40px;
  border-radius: 50px;
  background: #CDD0D7;
  border: 1px solid #CDD0D7;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  color: #000;
  font-size: 18px;
}

.meet-call-menu-blk .video-call-action ul li a.call-end {
  background-color: #E82646;
  border-color: #E82646;
  color: #FFF;
  width: 60px;
  height: 60px;
  rotate: 135deg;
  font-size: 20px;
}

.meet-call-menu-blk .video-call-action ul li a.stop {
  color: #FFF;
  background: #E82646;
  border-color: #E82646;
}

.meet-call-menu-blk .video-call-action ul li a.stop i {
  color: #FFF;
}

.meet-call-menu-blk .video-call-action ul li.active a {
  background: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
}

.meet-call-menu-blk .video-call-action ul li.active a img {
  filter: invert(1) brightness(100);
}

@media (max-width: 767.98px) {
  .meet-call-menu-blk .video-call-action ul {
    margin-bottom: 5px;
    justify-content: center;
  }
}

@media (max-width: 767.98px) {
  .meet-call-menu-blk .video-call-action ul:last-child {
    margin-bottom: 0px;
  }
}

.recording-time {
  position: relative;
  padding-left: 20px;
}

.recording-time::before {
  content: "";
  position: absolute;
  left: 0px;
  top: 4px;
  background-color: #E82646;
  width: 13px;
  height: 13px;
  border-radius: 50px;
}

.recording-time::after {
  content: "";
  position: absolute;
  left: 3px;
  top: 7px;
  background-color: #FFF;
  width: 7px;
  height: 7px;
  border-radius: 50px;
  animation: blink-animation 1.5s steps(5, start) infinite;
  -webkit-animation: blink-animation 1.5s steps(5, start) infinite;
}

.page-content {
  width: 100%;
}

.join-call {
  width: 100%;
  margin: 0 auto;
}

.join-video {
  position: relative;
  margin-bottom: 25px;
}

.join-video img {
  border-radius: 10px;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.join-video.join-video-front img {
  height: 423px;
}

.video-avatar {
  color: #FFF;
  background: #B5B9C3;
  font-size: 50px;
  border-radius: 10px;
  height: 100%;
  width: 100%;
  position: absolute;
  top: 0;
  left: 0;
  display: none;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

.video-avatar h4 {
  font-weight: 700;
  font-size: 24px;
  color: #FFF;
}

.video-avatar.active {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.join-video.video-hide>img,
.video-wrap.video-hide>video {
  display: none;
}

.join-content p {
  font-weight: 400;
  font-size: 14px;
  margin-bottom: 25px;
  color: #000;
}

.join-content label {
  font-size: 18px;
  margin-bottom: 0;
  color: #000;
  font-weight: 700;
}

.part-name {
  position: absolute;
  top: 20px;
  left: 12px;
  text-align: left;
  background: rgba(255, 255, 255, 0.6);
  border-radius: 50px;
  padding: 5px 15px;
}

.part-name h4 {
  font-weight: 500;
  font-size: 15px;
  color: #6A7287;
  margin-bottom: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

@media (max-width: 767.98px) {
  .part-name h4 {
    font-size: 13px;
  }
}

.part-name.sub-part-name {
  background: #FFF;
  bottom: 10px;
  top: inherit;
}

.part-name.sub-part-name h4 {
  color: #202C4B;
  font-size: 12px;
}

.grid-join .part-name {
  background: rgba(0, 0, 0, 0.3);
  top: inherit;
  bottom: 20px;
}

.grid-join .part-name h4 {
  color: #FFF;
}

.join-hover-img {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}

.join-hover-img .event-user-group .avatar-group {
  background: rgba(0, 0, 0, 0.3);
  padding: 2px 10px;
  border-radius: 50px;
}

.join-hover-img .event-user-group .avatar-group .avatar {
  width: 26px;
  height: 26px;
  border: 1px solid #FFF;
}

.join-hover-img .event-user-group .avatar-group .avatar+.avatar {
  margin-left: -16px;
}

.join-hover-img .event-user-group .avatar-group .avatar:last-child {
  margin-right: 0px;
}

.more-icon {
  position: absolute;
  bottom: 10px;
  right: 12px;
}

@media (max-width: 767.98px) {
  .more-icon {
    bottom: 8px;
    right: 13px;
  }
}

.more-icon a {
  color: #6A7287;
  width: 30px;
  height: 30px;
  background: #FFF;
  border-radius: 50px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.more-icon a:hover {
  opacity: 0.8;
}

.more-icon a.other-mic-off.stop i {
  color: #E82646;
}

.more-icon.audio-more-icon a.other-mic-off.stop {
  background-color: #E82646 !important;
}

.more-icon.audio-more-icon a.other-mic-off.stop i {
  color: #FFF;
}

.call-recent.recent-part a.other-mic-off.stop,
.call-recent.recent-part a.other-video-off.stop {
  background: #E82646 !important;
}

.call-recent.recent-part a.other-mic-off.stop i,
.call-recent.recent-part a.other-video-off.stop i {
  color: #FFF;
}

.meeting .part-name {
  top: 15px;
  left: 15px;
}

.meeting .more-icon {
  top: 15px;
  right: 15px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.vertical-view .vertical-sec .part-name h4 {
  font-size: 14px;
  font-weight: 400;
}

.horizontal-view .join-video.single-user .part-name h4 {
  font-size: 14px;
  font-weight: 400;
}

.meeting-wrapper,
.meeting {
  width: inherit;
  max-width: inherit;
}

.meet-footer {
  position: fixed;
  bottom: 25px;
  width: 100%;
  max-width: 950px;
  left: 50%;
  transform: translate(-50%, 0);
  z-index: 3;
}

.show-chat-list,
.show-invite-list,
.show-chat-list .user-sidebar-right,
.show-invite-list .invite-sidebar-right {
  transition: all 0.8s ease;
}

.user-sidebar-right,
.invite-sidebar-right {
  background: #dedede;
  border-radius: 10px;
  width: 410px;
  position: absolute;
  top: 105px;
  bottom: 117px;
  right: 0;
  margin-right: -410px;
  transition: all 0.8s ease;
  overflow: hidden;
  font-size: 13px;
  z-index: 3;
}

.join-contents {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  flex-wrap: wrap;
  align-content: flex-start;
  box-sizing: border-box;
  width: 100%;
  margin: 0 auto;
  overflow: hidden;
}

.join-contents.grid-view {
  align-content: center;
}

.ripple {
  width: 114px;
  height: 114px;
  background: rgba(0, 0, 0, 0.2);
  border-radius: 50%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

.multigrid-view .text-box {
  height: 61px;
  width: 61px;
}

.multigrid-view .ripple {
  width: 80px;
  height: 80px;
  background: rgba(0, 0, 0, 0.2);
  border-radius: 50%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

.meeting .join-video {
  margin: 0 5px 10px;
  width: 100%;
}

.join-video.user-active {
  background: #415B6A;
  border-radius: 10px;
  width: 100%;
  height: 370px;
}

.join-video.user-active.audio-calls {
  height: calc(100vh - 250px);
  padding: 60px 0;
}

.join-video.vertical-active {
  margin-right: 24px;
}

.join-video.single-user {
  width: 100%;
  min-height: 230px;
  box-sizing: border-box;
  margin-right: 24px;
  -webkit-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  text-align: center;
  height: auto;
  background: #415B6A;
  border-radius: 10px;
  padding: 0;
  flex-grow: 1;
}

@media (max-width: 1399.98px) {
  .join-video.single-user {
    width: 100%;
  }
}

@media (max-width: 1199.98px) {
  .join-video.single-user {
    min-height: 203px;
  }
}

@media (max-width: 991.98px) {
  .join-video.single-user {
    min-height: 230px;
  }
}

.join-video.single-user:nth-child(even) {
  margin-right: 0px;
}

@media (max-width: 767.98px) {
  .join-video.single-user:nth-child(even) {
    margin-right: 10px;
  }
}

@media (max-width: 767.98px) {
  .join-video.single-user {
    width: 100%;
    min-height: 257px;
  }
}

@media (max-width: 767.98px) {
  .multi-grid .join-video.single-user {
    width: 45%;
  }
}

.multi-grid .join-video.single-user:nth-child(even) {
  margin-right: 24px;
}

@media (max-width: 767.98px) {
  .multi-grid .join-video.single-user:nth-child(even) {
    margin-right: 0px;
  }
}

.multi-grid .join-video.single-user:nth-child(4n) {
  margin-right: 0px;
}

@media (max-width: 767.98px) {
  .multi-grid .join-video.single-user:nth-child(4n):nth-child(4n) {
    margin-right: 0px;
  }
}

.multigrid-view .join-video.single-user {
  flex-grow: 0;
}

.horizontal-view .join-video.single-user:nth-child(even) {
  margin-right: 24px;
}

.horizontal-view .join-video.single-user:nth-child(5) {
  margin-right: 0px;
}

@media (max-width: 767.98px) {
  .horizontal-view .join-video.single-user:nth-child(3n) {
    margin-right: 0;
  }
}

.text-avatar {
  color: #FFF;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.text-avatar h4 {
  color: #FFF;
}

.text-box {
  height: 86px;
  width: 86px;
  border-radius: 50%;
  background-color: rgba(0, 0, 0, 0.2);
  font-size: 36px;
  font-weight: 700;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
}

.more-icon.mic-view .mic-on,
.more-icon .mic-off {
  display: none;
}

.more-icon.mic-view .mic-off {
  display: inline-flex;
}

.grid-view .join-video.single-user {
  width: 47%;
}

@media (max-width: 767.98px) {
  .grid-view .join-video.single-user {
    width: 40%;
  }
}

@media (max-width: 767.98px) {
  .grid-view .join-video.single-user:nth-child(2n) {
    margin-right: 0px;
  }
}

@media (max-width: 767.98px) {
  .grid-view .join-video.single-user:nth-child(3n) {
    margin-right: 24px;
  }
}

.join-contents.multigrid-view {
  max-width: 100%;
  justify-content: center;
}

.meeting {
  position: absolute;
  top: 80px;
  bottom: 107px;
  left: 0;
  right: 0;
}

.meeting-list {
  flex-direction: column;
  height: 100%;
  width: 100%;
  position: relative;
}

.user-active .more-icon .handraise-on {
  display: none;
}

.user-active .more-icon .handraise-on.active {
  display: block;
  animation: mymove 5s;
}

.user-active .more-icon .handraise-on.active .meeting .join-video.user-active::before {
  animation: mymove 5s infinite;
  opacity: 1;
}

@keyframes mymove {
  from {
    color: #0074E0;
  }

  to {
    color: transparent;
  }
}

.join-contents.vertical-view {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  align-content: center;
  max-width: 1300px;
}

@media (max-width: 767.98px) {
  .join-contents.vertical-view {
    display: block;
  }
}

.join-contents.vertical-view .join-video.user-active {
  flex: 1;
  margin-bottom: 24px;
}

.join-contents.vertical-view .join-video.single-user {
  width: 97%;
  flex-grow: 1;
  display: flex;
}

@media (max-width: 767.98px) {
  .join-contents.vertical-view .join-video.single-user {
    width: 100%;
  }
}

.join-contents.vertical-view .vertical-sec {
  width: 20%;
}

@media (max-width: 991.98px) {
  .join-contents.vertical-view .vertical-sec {
    width: 30%;
  }
}

@media (max-width: 767.98px) {
  .join-contents.vertical-view .vertical-sec {
    width: 100%;
  }
}

.join-contents.vertical {
  flex-direction: column;
  height: 200px;
}

.meeting .join-contents.vertical .join-video.user-active {
  flex: 1 0 100%;
}

.meeting .join-contents.vertical .join-video.single-user {
  flex: 0;
}

.meeting .join-contents.vertical .join-video {
  width: auto;
}

.chat-footer .btn:hover {
  background: rgb(31.4732142857, 66.09375, 203.5267857143);
  color: #FFF;
}

.join-contents.show-whiteboard {
  display: none;
}

.join-contents.single-view {
  padding-top: 0;
  margin-top: 25px;
  position: relative;
}

.join-contents.single-view .single-user {
  position: absolute;
  right: 8px;
  top: 40px;
  width: 130px;
  height: 130px;
  min-height: 130px;
}

.join-contents.single-view .single-user img {
  height: 130px;
}

.record-time {
  position: absolute;
  top: 20px;
  z-index: 1;
  position: absolute;
  left: 20px;
}

.record-time span {
  background-color: rgba(255, 255, 255, 0.2);
  display: inline-block;
  border-radius: 130px;
  color: #FFF;
  font-size: 14px;
  font-weight: 600;
  width: 80px;
  height: 30px;
  text-align: center;
  line-height: 34px;
  position: relative;
  padding-left: 15px;
}

.record-time span:before {
  content: "";
  position: absolute;
  left: 7px;
  top: 7px;
  background-color: #FFF;
  width: 18px;
  height: 18px;
  border-radius: 50px;
}

.record-time span:after {
  content: "";
  position: absolute;
  left: 12px;
  top: 12px;
  background-color: #E82646;
  width: 8px;
  height: 8px;
  border-radius: 50px;
  animation: blink-animation 1.5s steps(5, start) infinite;
  -webkit-animation: blink-animation 1.5s steps(5, start) infinite;
}

@keyframes blink-animation {
  to {
    visibility: hidden;
  }
}

@-webkit-keyframes blink-animation {
  to {
    visibility: hidden;
  }
}

.volume-col {
  position: absolute;
  left: 20px;
  bottom: 20px;
}

.volume-col .inner-volume-col {
  background-color: #B5B9C3;
  border-radius: 130px;
  width: 30px;
  height: 120px;
  position: relative;
  z-index: 9;
}

.volume-col #volume {
  position: absolute;
  left: 50%;
  top: 15px;
  margin: 0 auto;
  height: 80px;
  width: 5px;
  background: #FFF;
  border-radius: 15px;
  transform: translateX(-50%);
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
}

.volume-col #volume .ui-slider-range-min {
  height: 5px;
  width: 100%;
  position: absolute;
  bottom: 0;
  background: #1f3b60;
  border: none;
  border-radius: 10px;
  outline: none;
}

.volume-col #volume .ui-slider-handle {
  width: 20px;
  height: 20px;
  border-radius: 20px;
  background: #1f3b60;
  position: absolute;
  left: 50%;
  margin-top: -8px;
  cursor: pointer;
  outline: none;
  transform: translateX(-50%);
  -webkit-transform: translateX(-50%);
  -ms-transform: translateX(-50%);
}

.volume-col #player {
  width: auto;
  height: 104px;
  position: relative;
  margin: 0 auto;
  top: 0px;
}

.volume-col #player i {
  position: absolute;
  margin-top: -6px;
  color: #666;
}

.volume-col .volume-icons {
  color: #FFF;
  margin-left: 0px;
  font-size: 18px;
  margin-top: 22px;
}

.chat-msg-blk {
  padding: 15px;
}

.chat-msg-blk .chats {
  max-width: 100%;
  margin-bottom: 1.5rem;
  display: flex;
  display: -webkit-flex;
}

@media (max-width: 767.98px) {
  .chat-msg-blk .chats {
    max-width: 100%;
  }
}

.chat-msg-blk .chats .chat-action-btns .chat-user-time .chats-dot a {
  color: #2CA87F;
}

.chat-msg-blk .chats.chats-right {
  margin-left: auto;
  flex-direction: row-reverse;
  -webkit-flex-direction: row-reverse;
}

.chat-msg-blk .chats.chats-right .chat-content {
  order: 1;
  -webkit-order: 1;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content {
  background-color: #E9EDF4;
  border-radius: 8px;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .chat-time {
  justify-content: flex-start;
  -webkit-justify-content: flex-start;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col {
  position: relative;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col ul li {
  margin-right: 8px;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col ul li:last-child {
  margin-right: 0px;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col ul li .image-download-col {
  position: relative;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col ul li .image-download-col.image-not-download a img {
  -webkit-filter: blur(4px);
  filter: blur(1px);
  border-color: #000;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col ul li .image-download-col.image-not-download span {
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col ul li .image-download-col.image-not-download span i {
  color: #FFF;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col ul li .image-download-col .download-action {
  position: absolute;
  right: 8px;
  bottom: 8px;
  line-height: 0;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col ul li .image-download-col .download-action a {
  color: #FFF;
  font-size: 10px;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content .download-col ul li .image-download-col img {
  border-radius: 5px;
}

.chat-msg-blk .chats.chats-right .chat-content .message-content::before {
  border-bottom: 6px solid transparent;
  border-left: 6px solid #E9EDF4;
  border-right: 0;
  border-top: 6px solid transparent;
  content: "";
  height: 0;
  width: 0;
  position: absolute;
  top: 8px;
  right: -4px;
  left: auto;
}

.chat-msg-blk .chats.chats-right .chat-action-btns {
  order: 2;
  -webkit-order: 2;
  display: flex;
  display: -webkit-flex;
  flex-wrap: wrap;
  -webkit-flex-wrap: wrap;
  justify-content: center;
  -webkit-justify-content: center;
}

.chat-msg-blk .chats.chats-right .chat-action-btns .chat-user-time .chats-dot a {
  color: #2CA87F;
}

.chat-msg-blk .chats .message-content {
  background-color: #E9EDF4;
  border-radius: 8px;
  padding: 10px 20px;
  font-weight: 500;
  margin-bottom: 5px;
  position: relative;
}

.chat-msg-blk .chats .message-content h4 {
  font-size: 13px;
  color: #202C4B;
  margin-bottom: 0px;
  line-height: 1.4;
  font-weight: 500;
}

.chat-msg-blk .chats .message-content .chat-time {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  font-size: 10px;
  font-weight: 500;
  color: #2CA87F;
  margin-bottom: 0;
}

.chat-msg-blk .chats .message-content .chat-time svg {
  width: 10px;
}

.chat-msg-blk .chats .message-content::before {
  border-bottom: 6px solid transparent;
  border-right: 6px solid #E9EDF4;
  border-top: 6px solid transparent;
  content: "";
  height: 0;
  width: 0;
  position: absolute;
  top: 8px;
  left: -4px;
  right: auto;
}

.chat-msg-blk .chats .chat-profile-name h6 {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: left;
  -webkit-justify-content: left;
  -ms-flex-pack: left;
  font-size: 8px;
  font-weight: 500;
  color: #6A7287;
}

.chat-msg-blk .chats .chat-profile-name h6 i {
  font-size: 12px;
  color: #008024;
}

.chat-msg-blk .chat-line {
  margin: 0px 0 20px;
  position: relative;
  text-align: center;
  width: 100%;
}

.chat-msg-blk .chat-line:before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  background-color: #2CA87F;
  width: 100%;
  height: 1px;
}

.chat-msg-blk .chat-line .chat-date {
  background-color: #2CA87F;
  color: #2CA87F;
  font-size: 13px;
  padding: 7px 14px;
  border-radius: 3px;
  display: inline-block;
  font-weight: 600;
  position: relative;
}

.right-user-side.call-user-side .slime-grp .right-sidebar-profile {
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
  border-bottom: 0;
  padding-bottom: 10px;
}

.right-user-side.call-user-side .slime-grp .right-sidebar-profile .profile-call-blk {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.right-user-side.call-user-side .slime-grp .right-sidebar-profile .edit-group svg {
  width: 16px;
  color: #2CA87F;
}

.right-user-side.call-user-side .slime-grp .chat-options {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  border-bottom: 1px solid #2CA87F;
  padding-bottom: 20px;
}

.right-user-side.call-user-side .slime-grp .chat-options ul li a {
  color: #2CA87F;
  width: 30px;
  height: 30px;
  background-color: gray;
  padding: 0;
  border-radius: 50px;
}

.right-user-side.call-user-side .slime-grp .chat-options ul li a:hover {
  background: #1f3b60;
  border-color: #1f3b60;
}

.right-user-side.call-user-side .slime-grp .chat-options ul li a:hover svg {
  color: #FFF;
}

.right-user-side.call-user-side .slime-grp .chat-options ul li a svg {
  width: 15px;
}

.right-user-side.right-side-party .slime-grp {
  padding: 0px;
}

.right-user-side.right-side-party .slime-grp .card-body-blk {
  padding: 20px;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list {
  border-radius: 0.25rem;
  display: flex;
  display: -webkit-flex;
  -ms-flex-direction: column;
  flex-direction: column;
  padding-left: 0;
  margin-bottom: 0;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  padding: 5px;
  display: flex;
  display: -webkit-flex;
  border-radius: 6px;
  background-color: #F6F7F8;
  margin-bottom: 10px;
  border: 0;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item:hover {
  background-color: #F6F7F8;
  transition: ease all 0.5s;
  -webkit-transition: ease all 0.5s;
  -ms-transition: ease all 0.5s;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .avatar {
  margin-right: 0.8rem;
  display: inline-block;
  margin-bottom: 0;
  height: 40px;
  width: 40px;
  position: relative;
  flex-shrink: 0;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .avatar::before {
  top: 0;
  bottom: inherit;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .avatar img {
  border-radius: 0px;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
  flex-grow: 1;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .name-list-user {
  display: grid;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .name-list-user h5 {
  font-size: 15px;
  font-weight: 400;
  margin-bottom: 2px;
  color: #6A7287;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .name-list-user p {
  font-size: 12px;
  color: #E82646;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .name-list-user p svg {
  width: 14px;
  height: 14px;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .chat-user-time .chats-dot a {
  color: #E82646;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .last-chat-time .text-muted {
  font-size: 10px;
  color: #202C4B;
  font-weight: 500;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .last-chat-time .new-message-count {
  width: 20px;
  height: 20px;
  display: flex;
  display: -webkit-flex;
  align-items: center;
  -webkit-align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  line-height: 0;
  font-size: 11px;
  background-color: #1f3b60;
  color: #FFF;
  border-radius: 50%;
  margin-left: auto;
  margin-top: 5px;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .last-call-time {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .last-call-time .call-recent a {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  width: 30px;
  height: 30px;
  background: #B8BCC9;
  color: #202C4B;
  border-radius: 50px;
}

.right-user-side.right-side-party .slime-grp .card-body-blk .user-list .user-list-item .users-list-body .last-call-time .call-recent a svg {
  color: #202C4B;
}

.right-user-side .slimScrollDiv {
  height: calc(100vh - 110px) !important;
}

.right-user-side .slimScrollDiv .slimscroll {
  height: calc(100vh - 110px) !important;
}

.right-user-side.audio .slimScrollDiv {
  height: calc(100vh - 305px) !important;
}

.right-user-side.audio .slimScrollDiv .slimscroll {
  height: calc(100vh - 305px) !important;
}

.right-user-side .slime-grp {
  background: #FFF;
  padding: 15px;
}

.right-user-side .slime-grp .chat-footer {
  position: sticky;
  left: 0px;
  right: 0px;
  bottom: 0px;
  padding: 15px;
  background: #FFF;
  border-radius: 10px;
}

.right-user-side .slime-grp .chat-footer form {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  position: relative;
}

.right-user-side .slime-grp .chat-footer form .comman-icon {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
}

.right-user-side .slime-grp .chat-footer form .comman-icon a {
  color: #6A7287;
}

.right-user-side .slime-grp .chat-footer form .smile-col {
  right: inherit;
  left: 15px;
}

.right-user-side .slime-grp .chat-footer form .attach-col {
  right: inherit;
  left: 45px;
}

.right-user-side .slime-grp .chat-footer form .micro-col {
  right: 50px;
  left: inherit;
}

.right-user-side .slime-grp .chat-footer form .micro-col a {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  font-size: 16px;
}

.right-user-side .slime-grp .chat-footer form .send-chat {
  right: 5px;
}

.right-user-side .slime-grp .chat-footer form .send-chat a {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  width: 34px;
  height: 34px;
  background: #1f3b60;
  border-radius: 50px;
}

.right-user-side .slime-grp .chat-footer form .send-chat a:hover {
  background: #1b2950;
}

.right-user-side .slime-grp .chat-footer form .send-chat a:hover svg {
  color: #FFF;
}

.right-user-side .slime-grp .chat-footer form .send-chat a svg {
  width: 14px;
  color: #FFF;
}

.right-user-side .slime-grp .chat-footer form .chat_form {
  border-radius: 20px;
  margin-right: 0px;
  background: #FFF;
  border: 1px solid rgba(145, 158, 171, 0.3);
  border-radius: 6px;
  height: 48px;
  padding: 10px 70px;
}

.right-user-side .slime-grp .chat-footer form .chat_form::placeholder {
  font-size: 14px;
  color: rgba(0, 0, 0, 0.2);
}

.owl-carousel.video-slide .owl-nav.disabled {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
  width: 100%;
}

.owl-carousel.video-slide .owl-nav {
  top: calc(50% - 24px);
  -webkit-transform: translate(0, -50%);
  -ms-transform: translate(0, -50%);
  transform: translate(0, -50%);
  position: absolute;
}

@media (max-width: 1399.98px) {
  .owl-carousel.video-slide .owl-nav {
    width: 100%;
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    justify-content: space-between;
    -webkit-justify-content: space-between;
    -ms-flex-pack: space-between;
  }
}

.owl-carousel.video-slide .owl-nav button.owl-next,
.owl-carousel.video-slide .owl-nav button.owl-prev {
  background-color: #F4F6FA;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  width: 20px;
  height: 20px;
}

.owl-carousel.video-slide .owl-nav button.owl-next:hover,
.owl-carousel.video-slide .owl-nav button.owl-prev:hover {
  background-color: #1f3b60;
}

.owl-carousel.video-slide .owl-nav button.owl-next:hover i,
.owl-carousel.video-slide .owl-nav button.owl-prev:hover i {
  color: #FFF;
}

.owl-carousel.video-slide .owl-nav button.owl-next i,
.owl-carousel.video-slide .owl-nav button.owl-prev i {
  color: #6A7287;
}

.audio-call-group {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  height: 100%;
}

.audio-call-group ul {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: space-evenly;
  -webkit-justify-content: space-evenly;
  -ms-flex-pack: space-evenly;
  width: 100%;
}

.audio-call-group ul li {
  position: relative;
}

.audio-call-group ul li.active .avatar::before {
  content: "";
  width: 220px;
  height: 220px;
  position: absolute;
  border: 1px solid #1f3b60;
  border-radius: 50%;
  left: -25px;
  top: -25px;
}

@media (max-width: 991.98px) {
  .audio-call-group ul li.active .avatar::before {
    width: 150px;
    height: 150px;
    left: -10px;
    top: -10px;
  }
}

@media (max-width: 767.98px) {
  .audio-call-group ul li.active .avatar::before {
    width: 100px;
    height: 100px;
    left: -5px;
    top: -5px;
  }
}

.audio-call-group ul li .avatar {
  width: 170px;
  height: 170px;
  margin: 0;
  position: relative;
}

@media (max-width: 991.98px) {
  .audio-call-group ul li .avatar {
    width: 130px;
    height: 130px;
  }
}

@media (max-width: 767.98px) {
  .audio-call-group ul li .avatar {
    width: 90px;
    height: 90px;
  }
}

.audio-call-group ul li .avatar img {
  width: 100%;
  position: relative;
}

.audio-call-group ul li .user-audio-call h5 {
  font-size: 14px;
  color: #FFF;
  font-weight: 400;
  text-transform: capitalize;
  text-align: center;
  margin-top: 35px;
}

@media (max-width: 767.98px) {
  .audio-call-group ul li .user-audio-call h5 {
    margin-top: 15px;
  }
}

.audio-call-group ul li .more-icon {
  position: absolute;
  bottom: 10px;
  right: inherit;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  z-index: 9;
}

@media (max-width: 767.98px) {
  .audio-call-group ul li .more-icon {
    bottom: 0px;
  }
}

.audio-call-group ul li .more-icon a {
  background-color: #1f3b60;
  color: #FFF;
}

.audio-volume {
  position: absolute;
  width: fit-content;
  height: 134px;
  bottom: 20px;
  left: 20px;
  background: #B5B9C3;
  border-radius: 50px;
  padding: 10px 14px;
  width: 30px;
  padding-bottom: 30px;
}

.audio-volume .volume-icons a {
  position: absolute;
  bottom: 0;
  width: 30px;
  height: 30px;
  left: 0;
  border-radius: 50px;
  background: #FFF;
  border: 1px solid #EAB300;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.custom-input {
  width: 100%;
  height: 4px;
  width: 3px;
  height: 100%;
  background: #FFF;
  border-radius: 5px;
  writing-mode: vertical-lr;
}

.custom-input::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 12px;
  height: 12px;
  background: #1f3b60 !important;
  border-radius: 50%;
  cursor: pointer;
}

.custom-input::-moz-range-thumb {
  width: 12px;
  height: 12px;
  background: #1f3b60 !important;
  border-radius: 50%;
  cursor: pointer;
}

.table-top-head {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

@media (max-width: 575.98px) {
  .table-top-head.low-stock-top-head {
    flex-wrap: wrap;
    justify-content: start;
  }
}

.table-top-head.low-stock-top-head li {
  margin-bottom: 10px;
}

.table-top-head.low-stock-top-head li:last-child {
  margin-right: 0;
}

.table-top-head li {
  margin-right: 10px;
  flex-shrink: 0;
}

.table-top-head li:last-child {
  margin-right: 0;
}

.table-top-head li #collapse-header {
  margin-right: 0;
}

@media (max-width: 991.98px) {
  .table-top-head li #collapse-header {
    display: none;
  }
}

.table-top-head li a {
  height: 38px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  border: 1px solid #B5B9C3;
  background: #FFF;
  border-radius: 8px;
  padding: 6px;
}

.table-top-head li a svg {
  color: #202C4B;
}

.table-top-head li a:hover {
  background: #e3e3e3;
}

.table-top-head li a label {
  margin-right: 10px;
}

.table-top-head li a.btn-secondary {
  background-color: #202C4B;
  color: #FFF;
  padding: 10px;
  font-weight: 700;
  font-size: 14px;
}

.table-top-head li a.btn-secondary:hover {
  background-color: #1f3b60;
}

.table-top-head li a.btn-secondary svg {
  width: 16px;
  margin-right: 5px;
  color: #FFF;
}

@media (max-width: 767.98px) {
  .table-top-head li a.btn-secondary {
    padding: 5px;
    font-size: 14px;
  }
}

.table-top-head li a .action-edit.sales-action {
  color: #339DFF;
}

.table-top-head li .status-toggle {
  height: 38px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  border: 1px solid #E6E8EB;
  background: #FFF;
  border-radius: 8px;
  padding: 6px 10px;
}

.table-top-head li .status-toggle label {
  margin-right: 10px;
}

.main-chat-blk .slimscroll {
  height: calc(100vh - 60px) !important;
}

.main-chat-blk .slimscroll-active-sidebar a {
  color: #6A7287;
}

.main-chat-blk .emoj-group ul {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.main-chat-blk .emoj-group ul li+li {
  margin-left: 10px;
}

.main-chat-blk .emoj-group ul li a {
  width: 34px;
  height: 34px;
  background: #F4F6FA;
  border-radius: 50px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.main-chat-blk .message-content {
  position: relative;
  overflow-wrap: break-word;
  word-break: break-word;
}

.main-chat-blk .message-content:hover .emoj-group {
  opacity: 1;
  transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
}

.main-chat-blk .emoj-group {
  position: absolute;
  top: 50%;
  right: -100px;
  opacity: 0;
  transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
  -webkit-transform: translate(0, -50%);
  -ms-transform: translate(0, -50%);
  transform: translate(0, -50%);
}

.main-chat-blk .rig-emoji-group {
  position: absolute;
  right: 210px;
}

.main-chat-blk .wrap-emoji-group {
  position: absolute;
  right: 290px;
}

.main-chat-blk .emoj-group-list-foot {
  display: none;
  position: absolute;
  top: -50px;
  left: -90px;
  transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
}

.main-chat-blk .emoj-group-list-foot ul {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  background: #F4F6FA;
  border-radius: 50px;
  padding: 5px;
}

.main-chat-blk .emoj-group-list-foot ul li a {
  padding: 0;
  display: flex;
  align-items: center;
}

.main-chat-blk .emoj-group-list-foot ul li.add-emoj a {
  background: #F4F6FA;
}

.main-chat-blk .emoj-group-list-foot ul li.add-emoj a i {
  font-size: 20px;
}

.main-chat-blk .down-emoji-circle {
  position: absolute;
  left: 10px !important;
  top: -38px !important;
}

.main-chat-blk .emoj-action-foot .down-emoji-circle ul {
  padding: 10px;
}

.main-chat-blk .down-emoji-circle ul li+li {
  margin-left: 14px;
}

.main-chat-blk .emoj-action-foot .down-emoji-circle ul li:last-child a {
  width: 34px;
  height: 34px;
  border-radius: 50px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.main-chat-blk .chat-page-wrapper .content {
  padding: 0;
}

.main-chat-blk .chat-page-wrapper .sidebar {
  position: initial;
}

@media (max-width: 991.98px) {
  .main-chat-blk .chat-page-wrapper .sidebar {
    margin-left: 0;
  }
}

.main-chat-blk .chat-page-wrapper .left-chat-title {
  padding: 12px;
  border-bottom: 1px solid #E9EDF4;
  min-height: 72px;
}

.main-chat-blk .chat-page-wrapper .setting-title-head h4 {
  font-size: 18px;
  color: #202C4B;
  font-weight: 700;
}

.main-chat-blk .chat-page-wrapper .chat .slimscroll {
  height: calc(100vh - 135px) !important;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.main-chat-blk .chat-page-wrapper .dropdown-menu .dropdown-item {
  font-size: 14px;
  cursor: pointer;
  padding: 7px 14px;
  font-weight: 500;
}

.main-chat-blk .chat-page-wrapper .dropdown-menu .dropdown-item i {
  font-size: 16px;
}

.main-chat-blk .chat-page-wrapper .dropdown-menu .dropdown-item span {
  float: right;
  font-size: 18px;
}

.main-chat-blk .chat-page-wrapper .dropdown-menu .dropdown-item.active {
  background: none;
  color: inherit;
}

.main-chat-blk .chat-page-wrapper .dropdown-menu {
  background: #FFF;
  box-sizing: border-box;
  box-shadow: 0px 4px 3px 0px rgba(0, 0, 0, 0.1);
  border-radius: 8px;
  min-width: 173px;
}

.main-chat-blk .chat-page-wrapper .dropdown-menu .dropdown-item {
  margin: 0;
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.main-chat-blk .chat-page-wrapper .dropdown-menu.chat-drop-menu .dropdown-item i {
  font-size: 16px;
}

.main-chat-blk .chat-page-wrapper .dropdown-menu .dropdown-item:hover,
.main-chat-blk .chat-page-wrapper .dropdown-menu .dropdown-item:focus,
.main-chat-blk .chat-page-wrapper .dropdown-menu .dropdown-item:active {
  background-color: #F4F6FA;
}

.main-chat-blk .chat-page-wrapper .dropdown-menu .dropdown-item span {
  margin-right: 10px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.main-chat-blk .chat-page-wrapper .contact-close_call {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

@-webkit-keyframes wave {

  0%,
  100%,
  60% {
    -webkit-transform: initial;
    transform: initial;
  }

  30% {
    -webkit-transform: translateY(-5px);
    transform: translateY(-5px);
  }
}

@keyframes wave {

  0%,
  100%,
  60% {
    -webkit-transform: initial;
    transform: initial;
  }

  30% {
    -webkit-transform: translateY(-5px);
    transform: translateY(-5px);
  }
}

.main-chat-blk .chat {
  flex: 1;
  display: flex;
  flex-direction: column;
  transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  background: #FFF;
}

.main-chat-blk .chat .chat-header {
  display: flex;
  display: -webkit-flex;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  padding: 15px 24px;
  align-items: center;
  border-bottom: 1px solid #E9EDF4;
  background: #FFF;
  position: relative;
  flex-shrink: 0;
}

@media (max-width: 575.98px) {
  .main-chat-blk .chat .chat-header {
    padding: 12px;
  }
}

.main-chat-blk .chat .chat-header .user-details {
  display: flex;
  display: -webkit-flex;
  align-items: center;
  -webkit-align-items: center;
  min-width: 0;
  flex-shrink: 1;
}

.main-chat-blk .chat .chat-header .user-details figure {
  margin-right: 1rem;
}

.main-chat-blk .chat .chat-header .user-details h5 {
  font-size: 15px;
  font-weight: 600;
  margin-bottom: 4px;
  line-height: 1;
  color: #202C4B;
}

.main-chat-blk .chat .chat-header .user-details>div:last-child {
  min-width: 0;
  overflow: hidden;
}

.main-chat-blk .chat .chat-header .user-details>div:last-child h6,
.main-chat-blk .chat .chat-header .user-details>div:last-child .last-seen {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

@media (max-width: 575.98px) {
  .main-chat-blk .chat .chat-header .user-details .avatar.avatar-lg {
    width: 2.25rem;
    height: 2.25rem;
    line-height: 2.25rem;
  }
}

.main-chat-blk .chat .chat-header .chat-options {
  flex-shrink: 0;
}

.main-chat-blk .chat .chat-header .chat-options ul {
  margin-bottom: 0;
  display: flex;
  display: -webkit-flex;
  align-items: center;
  -webkit-align-items: center;
}

.main-chat-blk .chat .chat-header .chat-options ul>li>a {
  font-size: 14px;
  color: #202C4B;
  cursor: pointer;
  width: 40px;
  height: 40px;
  padding: 0;
  border: none;
  display: flex;
  display: -webkit-flex;
  align-items: center;
  -webkit-align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
}

.main-chat-blk .chat .chat-header .chat-options ul>li>a i {
  font-size: 20px;
}

.main-chat-blk .chat .chat-header .chat-options ul>li>a:not(.no-bg):hover {
  background-color: #E6E8EB;
  border-color: #E6E8EB;
}

@media (max-width: 575.98px) {
  .main-chat-blk .chat .chat-header .chat-options ul>li>a {
    width: 32px;
    height: 32px;
  }

  .main-chat-blk .chat .chat-header .chat-options ul>li>a i {
    font-size: 18px;
  }
}

.main-chat-blk .chat .chat-body {
  flex: 1;
  min-height: 0;
  padding: 24px;
}

@media (max-width: 575.98px) {
  .main-chat-blk .chat .chat-body {
    padding: 15px;
  }
}

.main-chat-blk .chat .chat-body:not(.no-message) {
  overflow-y: auto;
}

.main-chat-blk .chat .chat-body .messages {
  display: flex;
  display: -webkit-flex;
  flex-direction: column;
  -webkit-flex-direction: column;
  align-items: flex-start;
  -webkit-align-items: flex-start;
}

.main-chat-blk .chat .chat-body .messages .chats {
  max-width: 75%;
  margin-bottom: 1.5rem;
  display: flex;
  display: -webkit-flex;
}

@media (max-width: 575.98px) {
  .main-chat-blk .chat .chat-body .messages .chats {
    max-width: 100%;
  }
}

.main-chat-blk .chat .chat-body .messages .chats:last-child {
  margin-bottom: 0;
}

.main-chat-blk .chat .chat-body .messages .chats .chat-time {
  display: flex;
  display: -webkit-flex;
  align-items: center;
  -webkit-align-items: center;
  margin-bottom: 0;
}

.main-chat-blk .chat .chat-body .messages .chats .chat-time .avatar {
  margin-right: 1rem;
}

.main-chat-blk .chat .chat-body .messages .chats .chat-time h5 {
  font-size: 15px;
  margin-bottom: 0;
}

.main-chat-blk .chat .chat-body .messages .chats .chat-time .time {
  color: #FFF;
  margin-top: 2px;
  font-size: 12px;
  font-weight: 400;
}

.main-chat-blk .chat .chat-body .messages .chats .chat-time .time i {
  color: rgba(247, 247, 247, 0.5);
}

.main-chat-blk .chat .chat-body .messages .chats .chat-time .time i img {
  width: 14px;
  height: auto;
  margin-left: 2px;
  vertical-align: 0px;
}

.main-chat-blk .chat .chat-body .messages .chats .message-content {
  border-radius: 0px 15px 15px 15px;
  background: #F2F5FF;
  padding: 14px 20px;
  color: #202C4B;
  font-size: 14px;
  font-weight: 400;
}

.main-chat-blk .chat .chat-body .messages .chats .message-content a {
  color: #299cdb;
}

.main-chat-blk .chat .chat-body .messages .chats .message-content.award-link a {
  color: #202C4B;
  margin-bottom: 2px;
  display: block;
}

.main-chat-blk .chat .chat-body .messages .chats .message-content.award-link img {
  border-radius: 10px;
}

.main-chat-blk .chat .chat-body .messages .chats .message-content.chat-award-link a {
  display: flex;
}

.main-chat-blk .chat .chat-body .messages .chats .message-content.fancy-msg-box .image-not-download span {
  position: absolute;
  color: #FFF;
  font-size: 13px;
  font-weight: 500;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}

.main-chat-blk .chat .chat-body .messages .chat-profile-name h6 {
  margin-bottom: 0;
}

.main-chat-blk .chat .chat-body .messages .chat-profile-name h6 span {
  font-size: 12px;
  color: #838A9B;
  font-weight: 400;
  padding-left: 10px;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right {
  margin-left: auto;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .chat-time {
  justify-content: flex-end;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .message-content {
  border-radius: 15px 0px 15px 15px;
  background: #F2F5FF;
  color: #202C4B;
  padding: 15px;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .message-content .chat-time {
  justify-content: flex-start;
  -webkit-justify-content: flex-start;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .message-content .chat-time .time {
  color: #838A9B;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .message-content .chat-time .time i {
  color: #299cdb;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .chat-action-btns {
  order: 2;
  -webkit-order: 2;
  display: flex;
  display: -webkit-flex;
  flex-wrap: wrap;
  -webkit-flex-wrap: wrap;
  justify-content: center;
  -webkit-justify-content: center;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .chat-action-btns .chat-action-col {
  width: 20px;
  text-align: center;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .chat-action-btns .chat-read-col {
  display: flex;
  display: -webkit-flex;
  align-items: flex-end;
  -webkit-align-items: flex-end;
  padding-bottom: 22px;
  color: #6A7287;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .chat-content {
  order: 1;
  -webkit-order: 1;
}

.main-chat-blk .chat .chat-body .messages .chats.chats-right .chat-avatar {
  padding: 8px 0px 0 15px;
}

.main-chat-blk .chat .chat-body .messages .download-col {
  position: relative;
}

.main-chat-blk .chat .chat-body .messages .download-col ul {
  list-style: none;
  padding: 0;
  margin: 0 0 5px 0;
  display: flex;
  display: -webkit-flex;
}

.main-chat-blk .chat .chat-body .messages .download-col ul li+li {
  margin-left: 5px;
}

.main-chat-blk .chat .chat-body .messages .download-col .image-download-col {
  position: relative;
}

.main-chat-blk .chat .chat-body .messages .download-col .image-download-col a>img {
  border: 1px solid transparent;
  width: 80px;
  border-radius: 8px;
}

.main-chat-blk .chat .chat-body .messages .download-col .image-download-col.image-not-download a>img {
  -webkit-filter: blur(1px);
  filter: blur(1px);
}

.main-chat-blk .chat .chat-body .messages .file-download {
  position: relative;
  background: #E9EDF4;
  border-radius: 10px;
  padding: 10px;
  margin-bottom: 7px;
}

.main-chat-blk .chat .chat-body .messages .file-download .file-type {
  width: 54px;
  height: 54px;
  background-color: #FFF;
  border-radius: 4px;
}

.main-chat-blk .chat .chat-body .messages .file-download .file-type i {
  color: #838A9B;
  font-size: 24px;
}

.main-chat-blk .chat .chat-body .messages .file-download .file-details span.file-name {
  color: #202C4B;
  display: inline-block;
  width: 100%;
  font-size: 15px;
  font-weight: 500;
}

.main-chat-blk .chat .chat-body .messages .file-download .file-details ul {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding: 0;
  margin-bottom: 0;
}

.main-chat-blk .chat .chat-body .messages .file-download .file-details ul li {
  list-style: none;
  color: #202C4B;
  font-size: 14px;
  position: relative;
}

.main-chat-blk .chat .chat-body .messages .file-download .file-details ul li::before {
  content: "";
  position: absolute;
  width: 1px;
  height: 13px;
  background: #C2C2C2;
  right: -8px;
  top: 5px;
}

.main-chat-blk .chat .chat-body .messages .file-download .file-details ul li:last-child::before {
  display: none;
}

.main-chat-blk .chat .chat-body .messages .file-download .file-details ul li a {
  color: #1f3b60;
}

.main-chat-blk .chat .chat-body .messages .file-download .file-details ul li+li {
  padding-left: 15px;
}

.main-chat-blk .chat .chat-body.no-message {
  user-select: none;
}

.main-chat-blk .chat .chat-footer {
  position: relative;
  flex-shrink: 0;
  background: #FFF;
  border-top: 1px solid #E9EDF4;
}

.main-chat-blk .chat .chat-footer form {
  display: flex;
  display: -webkit-flex;
  align-items: center;
  -webkit-align-items: center;
  padding: 24px;
}

@media (max-width: 991.98px) {
  .main-chat-blk .chat .chat-footer form {
    padding-bottom: 15px;
  }
}

@media (max-width: 575.98px) {
  .main-chat-blk .chat .chat-footer form {
    padding: 12px;
    gap: 6px;
  }
}

.main-chat-blk .chat .chat-footer form .form-buttons {
  flex-shrink: 0;
}

.main-chat-blk .chat .chat-footer form .form-buttons .btn {
  margin-left: 0px;
  color: #9CA1AF;
  font-size: 20px;
  padding: 0;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  display: flex;
  justify-content: center;
  align-items: center;
  margin-right: 10px;
}

.main-chat-blk .chat .chat-footer form .form-buttons .btn:last-child {
  margin-right: 0;
}

.main-chat-blk .chat .chat-footer form .form-buttons .btn.send-btn {
  width: 40px;
  height: 40px;
  border-radius: 6px;
  background: #1f3b60;
  display: inline-flex;
  justify-content: center;
  align-items: center;
  color: #FFF !important;
  margin-left: 10px;
  flex-shrink: 0;
}

.main-chat-blk .chat .chat-footer form .form-buttons .btn.send-btn:hover {
  background-color: #FFF;
  border-color: #39435F;
}

.main-chat-blk .chat .chat-footer form .form-buttons .btn.send-btn:hover i {
  color: #39435F;
}

.main-chat-blk .chat .chat-footer form .form-buttons .btn.send-btn:focus {
  box-shadow: none;
}

.main-chat-blk .chat .chat-footer form .attach-col i {
  color: #39435F;
  font-size: 20px;
}

.main-chat-blk .chat .chat-footer form .attach-col {
  right: inherit;
  left: 60px;
}

.main-chat-blk .chat .chat-footer form .smile-col i {
  color: #39435F;
  font-size: 20px;
  font-size: 22px;
}

.main-chat-blk .chat .chat-footer form .smile-col {
  right: inherit;
  left: 15px;
}

.main-chat-blk .chat .chat-footer form .smile-foot {
  margin-right: 10px;
  flex-shrink: 0;
}

.main-chat-blk .chat .chat-footer form .smile-foot .action-circle {
  width: 38px;
  height: 38px;
  background: #FFF;
  border-radius: 50px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.main-chat-blk .chat .chat-footer form .smile-foot .action-circle:hover {
  background-color: #E6E8EB;
  border-color: #E6E8EB;
}

.main-chat-blk .chat .chat-footer form .smile-foot .action-circle i {
  font-size: 18px;
}

.main-chat-blk .chat-options ul.list-inline .list-inline-item {
  margin-bottom: 0;
}

.main-chat-blk .chat-options.chat-option-profile .list-inline-item a {
  background: #1f3b60;
  width: 38px;
  height: 38px;
  border-radius: 50px;
  color: #202C4B;
  padding: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  color: #FFF !important;
}

.main-chat-blk .chat-options.chat-option-profile .list-inline-item a:hover {
  background: rgb(31.4732142857, 66.09375, 203.5267857143);
  color: #FFF;
}

.main-chat-blk .chat-options.chat-option-profile .list-inline {
  border-bottom: 1px solid #E9EDF4;
  margin-bottom: 0;
  padding-bottom: 15px;
}

.main-chat-blk .last-seen-profile span {
  color: #202C4B;
  font-size: 14px;
  font-weight: 400;
  margin-bottom: 12px;
  display: block;
}

.main-chat-blk .right_sidebar_profile {
  margin-top: 0px;
}

.main-chat-blk .chat-search {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  transition: ease all 0.5s;
  -webkit-transition: ease all 0.5s;
  -ms-transition: ease all 0.5s;
  opacity: 0;
  visibility: hidden;
}

.main-chat-blk .chat-search input[type=text] {
  padding: 8px 8px 8px 35px;
  width: 100%;
  min-height: 47px;
  border-radius: 0px 0px 5px 5px;
  background-color: #FFF;
  color: #202C4B;
}

.main-chat-blk .chat-search.visible-chat {
  opacity: 1;
  visibility: visible;
  top: 100%;
  transition: ease all 0.5s;
  -webkit-transition: ease all 0.5s;
  -ms-transition: ease all 0.5s;
  z-index: 9;
}

.main-chat-blk .form-control-feedback {
  z-index: 2;
  display: block;
  text-align: center;
  pointer-events: none;
  color: rgba(0, 0, 0, 0.4);
  position: absolute;
  left: 13px;
  top: 50%;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
}

.main-chat-blk .form-control-feedback i {
  font-size: 16px;
  color: #202C4B;
}

.main-chat-blk .user-chat-search {
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  transition: ease all 0.5s;
  -webkit-transition: ease all 0.5s;
  -ms-transition: ease all 0.5s;
  opacity: 0;
  visibility: hidden;
}

.main-chat-blk .user-chat-search input[type=text] {
  padding: 8px 8px 8px 35px;
  width: 100%;
  min-height: 47px;
  border-radius: 0px 0px 5px 5px;
  border: 1px solid #E5E7EB;
  font-size: 13px;
  background-color: #FFF;
  color: #202C4B;
  font-size: 15px;
  font-weight: 500;
}

.main-chat-blk .user-chat-search input[type=text]:hover {
  border-color: #CDD0D7;
}

.main-chat-blk .user-chat-search input[type=text]:focus {
  border-color: #CDD0D7;
}

.main-chat-blk .user-chat-search input[type=text]:focus-visible {
  border-color: #CDD0D7;
}

.main-chat-blk .user-chat-search.visible-chat {
  opacity: 1;
  visibility: visible;
  top: 100%;
  transition: ease all 0.5s;
  -webkit-transition: ease all 0.5s;
  -ms-transition: ease all 0.5s;
  z-index: 9;
}

.main-chat-blk .all-chats {
  position: relative;
}

.main-chat-blk .close-btn-chat {
  width: 25px;
  height: 25px;
  border-radius: 25px;
  color: #202C4B;
  display: flex;
  display: -webkit-flex;
  justify-content: center;
  -webkit-justify-content: center;
  align-items: center;
  -webkit-align-items: center;
  position: absolute;
  right: 12px;
  top: 9px;
  cursor: pointer;
}

.main-chat-blk .user-close-btn-chat {
  width: 25px;
  height: 25px;
  border-radius: 25px;
  color: #202C4B;
  display: flex;
  display: -webkit-flex;
  justify-content: center;
  -webkit-justify-content: center;
  align-items: center;
  -webkit-align-items: center;
  position: absolute;
  right: 12px;
  top: 9px;
  cursor: pointer;
}

.main-chat-blk .chat-avatar {
  padding: 8px 15px 0 8px;
  display: flex;
  display: -webkit-flex;
  align-items: flex-start;
  -webkit-align-items: flex-start;
  flex-shrink: 0;
}

.main-chat-blk .chat-profile-name {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  margin-bottom: 5px;
}

.main-chat-blk .chat-profile-name .chat-action-col a {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.main-chat-blk .chats.chats-right {
  flex-direction: row-reverse;
  -webkit-flex-direction: row-reverse;
}

.main-chat-blk .chat-voice-group ul {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  padding: 0;
  margin-bottom: 0;
}

.main-chat-blk .chat-voice-group ul li span {
  width: 28px;
  height: 28px;
  background: #1f3b60;
  border-radius: 50px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.main-chat-blk .chat-voice-group li {
  margin-bottom: 0;
  color: #202C4B;
  font-size: 14px;
  font-weight: 400;
  list-style: none;
}

.main-chat-blk .chat-voice-group li+li {
  padding-left: 10px;
}

.main-chat-blk .review-files p {
  margin-bottom: 5px;
  color: #202C4B;
  font-size: 14px;
}

.main-chat-blk .like-chat-grp ul {
  padding: 0;
  margin-bottom: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  margin-top: 10px;
}

.main-chat-blk .like-chat-grp ul li {
  list-style: none;
}

.main-chat-blk .like-chat-grp ul li a {
  border: 1px solid #E0E0E0;
  border-radius: 50px;
  padding: 3px 12px;
  display: block;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  color: #202C4B;
  font-weight: 400;
  font-size: 14px;
}

.main-chat-blk .like-chat-grp ul li a img {
  margin-left: 5px;
}

.main-chat-blk .like-chat-grp ul li+li {
  margin-left: 10px;
}

.main-chat-blk .like-chat-grp ul li.like-chat a {
  background: #FEF6DC;
}

.main-chat-blk .like-chat-grp ul li.comment-chat a {
  background: #FFE8E9;
}

.main-chat-blk .chat-line {
  margin: 0px 0 20px;
  position: relative;
  text-align: center;
  width: 100%;
}

.main-chat-blk .chat-line:before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  background-color: #E9EDF4;
  width: 100%;
  height: 1px;
}

.main-chat-blk .chat-date {
  border-radius: 100px;
  background: #E9EDF4;
  color: #202C4B;
  font-size: 14px;
  padding: 4px 20px;
  display: inline-block;
  font-weight: 400;
  position: relative;
  border: 1px solid #E9EDF4;
}

.main-chat-blk .chat+.sidebar-group {
  margin-right: 0px;
}

.main-chat-blk .chat+.sidebar-group .sidebar {
  margin-right: 0px;
}

.main-chat-blk .chat-message-grp {
  padding: 24px;
  padding-top: 0;
}

.main-chat-blk .chat-message-grp ul {
  padding: 0;
}

.main-chat-blk .chat-message-grp ul li {
  list-style: none;
  margin-bottom: 15px;
}

.main-chat-blk .chat-message-grp ul li:last-child {
  margin-bottom: 0px;
}

.main-chat-blk .chat-message-grp ul li a {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
}

.main-chat-blk .chat-message-grp ul li a:hover .stared-group h6 {
  color: #39435F;
}

.main-chat-blk .stared-group {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.main-chat-blk .stared-group span {
  width: 30px;
  height: 30px;
  border-radius: 6px;
  margin-right: 10px;
  background: #F4F6FA;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.main-chat-blk .stared-group span i {
  font-size: 16px;
}

.main-chat-blk .count-group {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.main-chat-blk .count-group span {
  width: 16px;
  height: 16px;
  border-radius: 50px;
  color: #FFF;
  font-size: 10px;
  background: #1f3b60;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  margin-right: 5px;
}

.main-chat-blk .count-group i {
  color: #424242;
  font-size: 16px;
}

.main-chat-blk .nav.nav-tabs.chat-tabs .nav-item .nav-link {
  font-size: 16px;
  font-weight: bold;
  color: #FFF;
  background-color: transparent;
  border: 0;
}

.main-chat-blk .nav.nav-tabs.chat-tabs .nav-item .nav-link.active {
  font-size: 16px;
  font-weight: bold;
  color: #647EE7;
}

.main-chat-blk .header-top ul li a {
  color: #000;
  font-size: 18px;
}

.main-chat-blk .user-list {
  border-radius: 0.25rem;
  display: flex;
  display: -webkit-flex;
  flex-direction: column;
  -webkit-flex-direction: column;
  padding-left: 0;
  margin-bottom: 0;
}

.main-chat-blk .user-list li a {
  padding: 17px 20px;
  display: flex;
  display: -webkit-flex;
  cursor: pointer;
  border-radius: 6px;
  margin-bottom: 10px;
  border: 0;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}

.main-chat-blk .user-list li .avatar {
  margin-right: 0.8rem;
  display: inline-block;
  margin-bottom: 0;
  height: 46px;
  width: 46px;
  border-radius: 50%;
  position: relative;
  z-index: 0;
}

.main-chat-blk .user-list .avatar>a>img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.main-chat-blk .user-list .avatar>img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.main-chat-blk .avatar-away::before {
  content: "";
  position: absolute;
  display: block;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  top: 0px;
  right: 2px;
  border: 2px solid #FFF;
  z-index: 9;
  background-color: #ffff00;
}

.main-chat-blk .avatar-offline::before {
  content: "";
  position: absolute;
  display: block;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  top: 0px;
  right: 2px;
  border: 2px solid #FFF;
  z-index: 9;
}

.main-chat-blk .avatar-online::before {
  content: "";
  position: absolute;
  display: block;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  top: 0px;
  right: 2px;
  border: 2px solid #FFF;
  z-index: 9;
  background-color: #2CA87F;
}

.main-chat-blk .animate-typing-col {
  color: #1ABE17;
}

.main-chat-blk .animate-typing-col .dot {
  display: inline-block;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  margin-right: -1px;
  background: #1ABE17;
  -webkit-animation: wave 1.3s linear infinite;
  animation: wave 1.3s linear infinite;
  opacity: 0.6;
}

.main-chat-blk .animate-typing-col .dot:nth-child(2) {
  -webkit-animation-delay: -1.1s;
  animation-delay: -1.1s;
}

.main-chat-blk .animate-typing-col .dot:nth-child(3) {
  -webkit-animation-delay: -0.9s;
  animation-delay: -0.9s;
}

.main-chat-blk .chat_form {
  border-radius: 20px;
  margin-right: 0px;
  background: #FFF;
  box-shadow: 0px 4.4px 12px -1px rgba(222, 222, 222, 0.36);
  border-radius: 6px;
  height: 40px;
  padding: 10px 10px;
  flex: 1 1 auto;
  min-width: 0;
}

.main-chat-blk .contact-close a {
  color: #202C4B;
  opacity: 0.5;
  border-color: #B5B9C3;
}

.main-chat-blk .main-wrapper .content .sidebar-group.right-sidebar .sidebar {
  width: 310px;
}

.main-chat-blk .left-sidebar {
  display: flex;
  display: -webkit-flex;
  flex-direction: column;
  -webkit-flex-direction: column;
  transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
}

.main-chat-blk .left-sidebar-wrap {
  background: #FFF;
  overflow: hidden;
  width: 448px;
  display: flex;
  display: -webkit-flex;
  flex-direction: column;
  -webkit-flex-direction: column;
  flex: 1;
}

.main-chat-blk .right-sidebar {
  display: flex;
  display: -webkit-flex;
  flex-direction: column;
  -webkit-flex-direction: column;
  background-color: #E9EDF4;
  opacity: 100%;
  transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  position: relative;
  width: 320px;
}

.main-chat-blk .right-sidebar .right-sidebar-wrap {
  background-color: #FFF;
  border-left: 1px solid #E9EDF4;
  border-radius: 0px;
  margin-top: 0px;
  margin-bottom: 0px;
  height: calc(100vh - 0px);
}

.main-chat-blk .right-sidebar .right-sidebar-wrap .sidebar-body {
  padding: 0;
}

.main-chat-blk .right-sidebar .right-sidebar-wrap .right-sidebar-profile {
  padding: 24px;
  padding-bottom: 0;
  margin-bottom: 15px;
}

.main-chat-blk .right-sidebar .contact-close_call .close_profile {
  width: 25px;
  height: 25px;
  border-radius: 25px;
  color: #202C4B;
  display: flex;
  display: -webkit-flex;
  justify-content: center;
  -webkit-justify-content: center;
  align-items: center;
  -webkit-align-items: center;
}

.main-chat-blk .right-sidebar .contact-close_call .close_profile.close-star {
  color: #EAB300;
}

.main-chat-blk .right-sidebar .contact-close_call .close_profile.close-trash {
  color: #E82646;
}

.main-chat-blk .right-sidebar.video-right-sidebar {
  width: 371px;
}

.main-chat-blk .right-sidebar.video-right-sidebar .chat .chat-body {
  padding-bottom: 110px;
}

.main-chat-blk .right-sidebar.video-right-sidebar .chat {
  margin-left: 0 !important;
  display: block;
}

.main-chat-blk .member-details {
  margin-bottom: 10px;
}

.main-chat-blk .chat-member-details {
  padding: 0 24px;
}

.main-chat-blk .chat-member-details .member-details ul {
  padding: 0;
  border-bottom: 1px solid #EDEDED;
}

.main-chat-blk .chat-member-details .member-details ul li {
  list-style: none;
  margin-bottom: 15px;
}

.main-chat-blk .chat-member-details .member-details ul li h6 {
  font-size: 15px;
  font-weight: 400;
  color: #202C4B;
  margin-bottom: 5px;
}

.main-chat-blk .chat-member-details .member-details ul li h5 {
  font-size: 15px;
  font-weight: 500;
  color: #202C4B;
  margin-bottom: 0px;
}

.main-chat-blk .chat-member-details .member-details ul li span {
  font-size: 16px;
  font-weight: 400;
  color: #202C4B;
}

.main-chat-blk .chat-member-details .member-details ul li a {
  font-size: 15px;
  font-weight: 500;
  color: #39435F;
  border-radius: 100px;
  padding: 5px;
  background: #F5F5F5;
  display: flex;
  align-items: center;
  justify-content: center;
}

.main-chat-blk .chat-member-details .member-details ul li a:hover {
  color: #202C4B;
}

.main-chat-blk .chat-member-details .member-details ul li a+a {
  margin-left: 10px;
}

.main-chat-blk .right-sidebar.show-right-sidebar {
  margin-right: 0;
}

.main-chat-blk .right-sidebar.video-right-sidebar.show-right-sidebar {
  margin-right: 0;
}

.main-chat-blk .right-sidebar.hide-right-sidebar {
  margin-right: -320px;
}

.main-chat-blk .right-sidebar.video-right-sidebar.hide-right-sidebar {
  margin-right: -371px;
}

.main-chat-blk .chat-cont-type {
  display: flex;
  align-items: center;
  justify-content: center;
}

.main-chat-blk .chat-cont-type .chat-type-wrapper {
  margin-bottom: 0;
}

.main-chat-blk .chat-cont-type .chat-type-wrapper p {
  color: #838A9B;
  font-size: 12px;
  font-weight: 400;
  margin-bottom: 0;
}

.main-chat-blk .checkmark {
  position: absolute;
  top: 0;
  left: 0;
  height: 22px;
  width: 22px;
  background-color: #FFF;
  border: 1px solid #E9EDF4;
  border-radius: 50%;
}

.main-chat-blk .checkmark:after {
  content: "";
  position: absolute;
  display: none;
}

.main-chat-blk .right-sidebar-profile>.avatar {
  background: rgba(66, 11, 161, 0.1);
}

.main-chat-blk .group_img {
  position: relative;
  display: inline-block;
}

.main-chat-blk .group-name-search {
  margin-bottom: 14px;
}

.main-chat-blk .right-sidebar-head {
  padding: 0px 24px;
}

.main-chat-blk .right-sidebar-head h5 {
  font-size: 15px;
  font-weight: 600;
  color: #202C4B;
  margin-bottom: 0px;
}

.main-chat-blk .right-sidebar-head.share-media .share-media-blk {
  margin-bottom: 20px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .nav-tabs {
  margin-bottom: 15px;
  padding: 5px;
  border-radius: 8px;
  display: flex;
  justify-content: space-between;
  flex-wrap: nowrap;
  overflow-x: auto;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs {
  border-bottom: 1px solid #E9EDF4;
  padding-bottom: 10px;
  margin-bottom: 15px;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .nav .nav-item.active {
  background: #1f3b60;
  border-radius: 6px;
  color: #202C4B;
  color: #FFF;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .nav .nav-item {
  padding: 2px 10px;
  font-size: 14px;
  color: #202C4B;
  font-weight: 500;
  border: 0;
  margin-right: 10px;
  background: #fff;
  color: #202C4B;
  border-radius: 6px;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .nav .nav-item:last-child {
  margin-right: 0px;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .share-media-img li {
  margin: 0px 6px 6px 0px;
  position: relative;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .share-media-img li img {
  border-radius: 8px;
  width: 84px;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .share-media-img li span i {
  font-size: 20px;
  color: #FFF;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .share-media-img li span {
  position: absolute;
  color: #FFF;
  font-size: 13px;
  font-weight: 500;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .share-media-img li:hover span i {
  color: #B5B9C3;
}

.main-chat-blk .right-sidebar-head.share-media .about-media-tabs .share-media-img li.blur-media img {
  filter: blur(2px);
}

.main-chat-blk .media-file {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
  margin-bottom: 15px;
}

.main-chat-blk .media-file:last-child {
  margin-bottom: 0;
}

.main-chat-blk .media-doc-blk {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.main-chat-blk .media-doc-blk span {
  width: 50px;
  height: 50px;
  border-radius: 5px;
  background: #F5F5F5;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  margin-right: 10px;
}

.main-chat-blk .media-doc-blk span i {
  font-size: 24px;
}

.main-chat-blk .document-detail ul {
  padding: 0;
  margin-bottom: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.main-chat-blk .document-detail ul li {
  list-style: none;
  color: #202C4B;
  font-size: 14px;
  font-weight: 400;
  position: relative;
}

.main-chat-blk .document-detail ul li::before {
  content: "";
  position: absolute;
  width: 1px;
  height: 13px;
  background: #C2C2C2;
  right: -8px;
  top: 5px;
}

.main-chat-blk .document-detail ul li:last-child::before {
  display: none;
}

.main-chat-blk .document-detail ul li+li {
  padding-left: 15px;
}

.main-chat-blk .document-detail h6 {
  color: #202C4B;
  font-size: 15px;
  font-weight: 500;
}

.main-chat-blk .media-download a {
  color: #202C4B;
}

.main-chat-blk .media-link-grp {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  margin-bottom: 15px;
}

.main-chat-blk .media-link-detail h6 a {
  color: #202C4B;
  font-size: 15px;
  font-weight: 500;
  margin-bottom: 5px;
}

.main-chat-blk .media-link-detail span a {
  color: #202C4B;
  font-size: 14px;
  font-weight: 400;
  word-break: break-all;
}

.main-chat-blk .media-link-detail a:hover {
  color: #39435F;
}

.main-chat-blk .share-media-blk a {
  color: #39435F;
  font-weight: 500;
}

.main-chat-blk .link-img {
  flex-shrink: 0;
}

.main-chat-blk .link-img img {
  border-radius: 4px;
  margin-right: 10px;
}

.main-chat-blk .chat-action-col>a {
  color: #202C4B;
}

.main-chat-blk .dreams_chat {
  width: 40px;
  height: 40px;
  object-fit: cover;
}

.main-chat-blk .chatimage img {
  width: 120px;
  height: 120px;
}

.main-chat-blk .avatar-group .avatar+.avatar {
  margin-left: -0.75rem;
}

.main-chat-blk ul.list-inline .list-inline-item {
  margin-bottom: 0.5rem;
}

.main-chat-blk .avatar {
  border-radius: 50%;
}

.main-chat-blk .avatar>a {
  width: 100%;
  height: 100%;
  display: block;
  transition: color 0.3s;
  color: #1f3b60;
}

.main-chat-blk .avatar>a>img,
.main-chat-blk .avatar>img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.main-chat-blk .avatar.avatar-sm {
  height: 1.3rem;
  width: 1.3rem;
}

.main-chat-blk .avatar.avatar-xl {
  height: 100px;
  width: 100px;
}

.main-chat-blk .add-section ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

.main-chat-blk .add-section ul li {
  float: left;
  border-radius: 50px;
  width: 28px;
  height: 28px;
  display: flex;
  display: -webkit-flex;
  align-items: center;
  -webkit-align-items: center;
  justify-content: center;
  -webkit-justify-content: center;
}

.main-chat-blk .add-section ul li+li {
  margin-left: 10px;
}

.main-chat-blk .add-section ul li a {
  display: flex;
  display: -webkit-flex;
  align-items: center;
  -webkit-align-items: center;
  font-size: 20px;
}

.main-chat-blk .all-chats .add-section ul li:hover {
  background-color: #F4F6FA;
  border-color: #F4F6FA;
}

.main-chat-blk .online {
  color: #1ABE17;
  font-weight: 500;
}

.main-chat-blk .fav-title {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
  margin-bottom: 15px;
}

.main-chat-blk .fav-title h6 {
  margin-bottom: 0;
  font-size: 18px;
  font-weight: 600;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

.main-chat-blk .fav-title h6 i {
  font-size: 22px;
}

.main-chat-blk .fav-title a {
  margin-bottom: 0;
  color: #1f3b60;
  font-weight: 500;
}

.main-chat-blk .fav-title a:hover {
  color: rgb(31.4732142857, 66.09375, 203.5267857143);
}

.main-chat-blk .profile-name span {
  color: #6A7287;
  font-size: 12px;
  display: inline-block;
  margin-top: 9px;
}

.main-chat-blk .dropdown-menu .dropdown-item span.edit-profile-icon,
.main-chat-blk .dropdown-menu .dropdown-item span.profile-icon-col {
  font-size: 15px;
}

.main-chat-blk .avatar {
  position: relative;
  display: inline-block;
  flex-shrink: 0;
}

.main-chat-blk .avatar>img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.main-chat-blk .avatar-away::before,
.main-chat-blk .avatar-offline::before,
.main-chat-blk .avatar-online::before {
  position: absolute;
  right: 0;
  bottom: 0;
  width: 25%;
  height: 25%;
  border-radius: 50%;
  content: "";
  border: 2px solid #FFF;
}

.main-chat-blk .avatar-online::before {
  background-color: #1ABE17;
}

.main-chat-blk .avatar-offline::before {
  background-color: #E82646;
}

.main-chat-blk .avatar-away::before {
  background-color: #EAB300;
}

.main-chat-blk .avatar .border {
  border-width: 3px !important;
}

.main-chat-blk .avatar .rounded {
  border-radius: 6px !important;
}

.main-chat-blk .avatar-xs {
  width: 1.65rem;
  height: 1.65rem;
}

.main-chat-blk .avatar-xs .border {
  border-width: 2px !important;
}

.main-chat-blk .avatar-xs .rounded {
  border-radius: 4px !important;
}

.main-chat-blk .avatar-xs.avatar-away::before,
.main-chat-blk .avatar-xs.avatar-offline::before,
.main-chat-blk .avatar-xs.avatar-online::before {
  border-width: 1px;
}

.main-chat-blk .avatar-sm {
  width: 2.5rem;
  height: 2.5rem;
}

.main-chat-blk .avatar-sm .border {
  border-width: 3px !important;
}

.main-chat-blk .avatar-sm .rounded {
  border-radius: 4px !important;
}

.main-chat-blk .avatar-sm.avatar-away::before,
.main-chat-blk .avatar-sm.avatar-offline::before,
.main-chat-blk .avatar-sm.avatar-online::before {
  border-width: 2px;
}

.main-chat-blk .avatar-lg .border {
  border-width: 3px !important;
}

.main-chat-blk .avatar-lg .rounded {
  border-radius: 8px !important;
}

.main-chat-blk .avatar-lg.avatar-away::before,
.main-chat-blk .avatar-lg.avatar-offline::before,
.main-chat-blk .avatar-lg.avatar-online::before {
  border-width: 3px;
}

.main-chat-blk .avatar-xl {
  width: 5rem;
  height: 5rem;
}

.main-chat-blk .avatar-xl .border {
  border-width: 4px !important;
}

.main-chat-blk .avatar-xl .rounded {
  border-radius: 8px !important;
}

.main-chat-blk .avatar-xl.avatar-away::before,
.main-chat-blk .avatar-xl.avatar-offline::before,
.main-chat-blk .avatar-xl.avatar-online::before {
  border-width: 4px;
}

.main-chat-blk .avatar-xxl {
  width: 5.125rem;
  height: 5.125rem;
}

.main-chat-blk .avatar-xxl .border {
  border-width: 6px !important;
}

.main-chat-blk .avatar-xxl .rounded {
  border-radius: 8px !important;
}

.main-chat-blk .avatar-xxl.avatar-away::before,
.main-chat-blk .avatar-xxl.avatar-offline::before,
.main-chat-blk .avatar-xxl.avatar-online::before {
  border-width: 4px;
}

.main-chat-blk .contact-close {
  float: right;
  left: 95%;
  right: 0px;
  position: relative;
  top: 5%;
}

.main-chat-blk .nav.nav-tabs {
  border: none;
  line-height: 2;
}

.main-chat-blk .badge {
  padding: 5px 10px;
  font-size: 11px;
}

.main-chat-blk .badge.badge-success {
  background: #1ABE17;
}

.main-chat-blk .badge.badge-danger {
  background: #E82646;
}

.main-chat-blk .badge.badge-secondary {
  background: #0e76bd;
}

.main-chat-blk .badge.badge-info {
  background: #0F65CD;
}

.main-chat-blk .badge.badge-warning {
  background: #EAB300;
}

.main-chat-blk .badge.badge-primary {
  background: #1f3b60;
}

.main-chat-blk .btn {
  position: relative;
}

.main-chat-blk .btn .badge {
  padding: 2px 6px;
  right: 7px;
  top: -7px;
  position: absolute;
}

.main-chat-blk .input-group .input-group-text {
  font-size: 14px;
}

.main-chat-blk .tooltip>.tooltip-inner {
  text-align: left;
  max-width: 500px;
  --bs-tooltip-bg: $primary;
}

.main-chat-blk .tooltip {
  --bs-tooltip-bg: $primary;
}

.main-chat-blk .tooltip .arrow {
  display: none;
  background-color: #1f3b60;
}

.main-chat-blk .tooltip .tooltip-inner {
  background-color: #1f3b60;
}

.main-chat-blk .sticky-top {
  z-index: auto;
}

.main-chat-blk .tab-content {
  padding-top: 30px;
}

.main-chat-blk .main-wrapper {
  height: 100vh;
  overflow: hidden;
}

.main-chat-blk .sidebar-contact {
  z-index: 500;
}

.main-chat-blk .main-wrapper .content {
  display: flex;
  display: -webkit-flex;
}

.main-chat-blk .main-wrapper .content .sidebar-group {
  display: flex;
  display: -webkit-flex;
  flex-direction: column;
  position: relative;
  z-index: 99;
  width: 340px;
}

@media (max-width: 991.98px) {
  .main-chat-blk .main-wrapper .content .sidebar-group {
    width: 100%;
  }
}

.main-chat-blk .main-wrapper .content .sidebar-group .sidebar {
  background: #FFF;
  overflow: hidden;
  width: 340px !important;
  display: flex;
  flex-direction: column;
  flex: 1;
  border-right: 1px solid #E9EDF4;
}

@media (max-width: 991.98px) {
  .main-chat-blk .main-wrapper .content .sidebar-group .sidebar {
    width: 100% !important;
  }
}

.main-chat-blk .main-wrapper .content .sidebar-group .sidebar:not(.active) {
  display: none;
}

.main-chat-blk .chat-header ul {
  margin-bottom: 0;
}

.main-chat-blk .chat-header ul li:not(.list-inline-item) {
  margin-bottom: 0;
  width: 48px;
  margin-right: 15px !important;
}

.main-chat-blk .chat-header ul li:last-child {
  margin-right: 0 !important;
}

.main-chat-blk .sidebar-body {
  flex: 1;
  overflow: auto;
  padding: 24px 24px 10px;
  width: 100%;
}

@media (max-width: 575.98px) {
  .main-chat-blk .sidebar-body {
    padding: 15px 15px 10px;
  }
}

.main-chat-blk .pin-chat img {
  margin-right: 6px;
}

.main-chat-blk .sidebar-body .profile-name {
  font-weight: 600;
  color: #202C4B;
  font-size: 18px;
  margin-bottom: 0;
}

.main-chat-blk .sidebar .user-list li a {
  padding: 10px;
  display: flex;
  display: -webkit-flex;
  cursor: pointer;
  margin-bottom: 15px;
  border: 1px solid #E9EDF4;
  box-shadow: none;
  border-radius: 5px;
  position: relative;
  transition: ease all 0.5s;
  -webkit-transition: ease all 0.5s;
  -ms-transition: ease all 0.5s;
}

.main-chat-blk .sidebar .user-list li a:hover {
  background-color: #F4F6FA;
  transition: ease all 0.5s;
  -webkit-transition: ease all 0.5s;
  -ms-transition: ease all 0.5s;
}

.main-chat-blk .sidebar .user-list li figure {
  margin-right: 1rem;
}

.main-chat-blk .sidebar .user-list li.unread h5 {
  color: #FFF;
}

.main-chat-blk .sidebar .user-list li.unread p {
  color: #FFF;
}

.main-chat-blk .rightside_tab {
  padding-top: 5px !important;
}

.main-chat-blk .chat-pin {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: end;
  -webkit-justify-content: end;
  -ms-flex-pack: end;
}

.main-chat-blk .chat-pin .green-check {
  color: #1ABE17;
}

.main-chat-blk .chat-pin img {
  width: 10px;
}

.main-chat-blk .group-setting .stared-group span {
  width: 50px;
  height: 50px;
}

.main-chat-blk .check-star i {
  color: #EAB300;
}

.main-chat-blk .emoj-group-list {
  display: none;
  position: absolute;
  top: -50px;
  left: -90px;
  transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -webkit-transition: all 0.5s ease;
}

.main-chat-blk .emoj-group-list ul {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  background: #F4F6FA;
  border-radius: 50px;
  padding: 5px;
}

.main-chat-blk .emoj-group-list ul li a {
  padding: 0;
}

.main-chat-blk .emoj-group-list ul li.add-emoj a {
  background: #F4F6FA;
}

.main-chat-blk .emoj-group-list ul li.add-emoj a i {
  font-size: 20px;
}

.main-chat-blk .chat .slimscroll {
  height: calc(100vh - 60px) !important;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.main-chat-blk .bootstrap-datetimepicker-widget span {
  position: relative;
}

.chat-window .card .card-header {
  background-color: #FFF;
  border-bottom: 1px solid #B5B9C3;
}

.chat-window .badge-success {
  background-color: #1ABE17 !important;
}

.chat-page .footer {
  display: none;
}

.chat-search .input-group .form-control {
  margin: 0;
  padding: 0 0 0 36px;
  height: 46px;
}

.chat-search .input-group .input-group-prepend {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  color: #515B73;
  pointer-events: none;
  z-index: 4;
  position: absolute;
  top: 0;
  right: 15px;
  bottom: 0;
}

.chat-cont-left .chat-scroll {
  max-height: calc(100vh - 200px);
  overflow-y: auto;
  padding: 0;
}

.chat-cont-left .chat-scroll .media {
  border-bottom: 1px solid #B5B9C3;
  margin: 0;
  padding: 10px;
  -webkit-transition: all 0.2s;
  -ms-transition: all 0.2s;
  transition: all 0.2s;
}

.chat-cont-left .chat-scroll .media.active {
  background-color: #E6E8EB;
}

.chat-cont-left .chat-scroll .media:hover {
  background-color: #E6E8EB;
}

.chat-cont-left .chat-scroll .media .media-img-wrap {
  margin: 0 15px 0 0;
  position: relative;
}

.chat-cont-left .chat-scroll .media .media-img-wrap .avatar>img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.chat-cont-left .chat-scroll .media .media-body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
}

.chat-cont-left .chat-scroll .media .media-body .user-name {
  max-width: 170px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #202C4B;
  font-size: 16px;
  font-weight: 700;
}

.chat-cont-left .chat-scroll .media .media-body .user-last-chat {
  color: #39435F;
  font-size: 14px;
  line-height: 24px;
  max-width: 170px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.chat-cont-left .chat-scroll .media .media-body .last-chat-time {
  color: #6A7287;
  font-size: 13px;
}

.chat-cont-left .chat-scroll .media .media-body div:last-child {
  text-align: right;
}

.chat-cont-right {
  -webkit-transition: all 0.4s;
  -ms-transition: all 0.4s;
  transition: all 0.4s;
}

.chat-cont-right .chat-scroll {
  max-height: calc(100vh - 293px);
  overflow-y: auto;
}

.chat-cont-right .msg_head .back-user-list {
  display: none;
  margin: 0 0 0 -10px;
  padding: 0 10px;
}

.chat-cont-right .img_cont {
  position: relative;
  height: 45px;
  width: 45px;
}

.chat-cont-right .img_cont .user_img {
  height: 45px;
  min-width: 45px;
  width: 45px;
  border: 1.5px solid #1f3b60;
}

.chat-cont-right .user_info {
  margin: 0 auto 0 15px;
  padding: 0;
  width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.chat-cont-right ul.list-unstyled {
  margin: 0 auto;
  padding: 0;
  width: 100%;
}

.chat-cont-right ul.list-unstyled .media.sent {
  margin-bottom: 20px;
}

.chat-cont-right ul.list-unstyled .media.sent .avatar {
  order: 3;
  height: 30px;
  width: 30px;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: flex-end;
  -ms-flex-align: flex-end;
  align-items: flex-end;
  -ms-flex-direction: column;
  flex-direction: column;
  margin: 0 20px 0 0;
  padding: 0;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .msg-box {
  margin: 0;
  padding: 0 0 0 50px;
  position: relative;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .msg-box+.msg-box {
  margin: 5px 0 0;
  padding: 0;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .msg-box p {
  margin: 0;
  padding: 0;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .msg-box:first-child::before {
  border-bottom: 6px solid transparent;
  border-left: 6px solid #e3e3e3;
  border-top: 6px solid #e3e3e3;
  border-right: 6px solid transparent;
  content: "";
  height: 0;
  width: 0;
  position: absolute;
  top: 0;
  right: -12px;
  left: auto;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .msg-box>div {
  margin: 0;
  padding: 10px 15px;
  border-radius: 10px;
  background-color: #e3e3e3;
  display: inline-block;
  position: relative;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .msg-box:first-child>div {
  border-radius: 10px 0 10px 10px;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-attachments {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  margin: 0 -1px;
  padding: 4px 0;
  width: 100%;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-attachments .chat-attachment {
  position: relative;
  max-width: 130px;
  overflow: hidden;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-attachments .chat-attachment:before {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background: #000;
  content: "";
  opacity: 0.4;
  -webkit-transition: all 0.4s;
  -ms-transition: all 0.4s;
  transition: all 0.4s;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-attachments .chat-attachment:hover .chat-attach-download {
  opacity: 1;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-attachments>div {
  margin: 0 1px;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-attachments img {
  max-width: 100%;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-attachments .chat-attach-download {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  opacity: 0;
  -webkit-transition: all 0.4s;
  -ms-transition: all 0.4s;
  transition: all 0.4s;
  color: #FFF;
  width: 32px;
  line-height: 32px;
  background: rgba(255, 255, 255, 0.2);
  text-align: center;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  margin: 5px 0 0;
  padding: 0;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  clear: both;
  flex-direction: row-reverse;
  list-style: none;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-info li {
  margin: 0;
  padding: 0 0 0 16px;
  position: relative;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-info li:not(:last-child)::after {
  position: absolute;
  top: 50%;
  right: auto;
  left: 8px;
  transform: translate(-50%, -50%);
  background: #1f3b60;
  content: "";
  height: 4px;
  width: 4px;
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-info .chat-time {
  color: rgba(50, 65, 72, 0.4);
}

.chat-cont-right ul.list-unstyled .media.sent .media-body .chat-msg-info a {
  color: #39435F;
}

.chat-cont-right ul.list-unstyled .media.received {
  position: relative;
  margin-bottom: 20px;
}

.chat-cont-right ul.list-unstyled .media.received .media-body {
  position: relative;
  margin: 0 0 0 20px;
  padding: 0;
}

.chat-cont-right ul.list-unstyled .media.received .media-body::before {
  border-bottom: 6px solid transparent;
  border-right: 6px solid #1f3b60;
  border-top: 6px solid #1f3b60;
  border-left: 6px solid transparent;
  content: "";
  height: 0;
  position: absolute;
  top: 0px;
  right: auto;
  left: -6px;
  width: 0;
}

.chat-cont-right ul.list-unstyled .media.received .media-body>div {
  margin: 0;
  padding: 10px 15px;
  border-radius: 10px;
  background-color: #1f3b60;
  display: table;
  position: relative;
}

.chat-cont-right ul.list-unstyled .media.received .media-body>div p {
  color: #FFF;
  margin: 0;
  padding: 0;
}

.chat-cont-right ul.list-unstyled .media.received .msg-box {
  display: block;
}

.chat-cont-right ul.list-unstyled .media.received .msg-box+.msg-box {
  margin-top: 5px;
}

.chat-cont-right ul.list-unstyled .media.received .chat-msg-info {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  margin: 5px 0 0;
  padding: 0;
  clear: both;
  list-style: none;
}

.chat-cont-right ul.list-unstyled .media.received .chat-msg-info .chat-time {
  color: rgba(255, 255, 255, 0.8);
}

.chat-cont-right ul.list-unstyled .media.received .chat-msg-attachments {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  margin: 0 -1px;
  padding: 4px 0;
  width: 100%;
}

.chat-cont-right ul.list-unstyled .media.received .chat-msg-attachments .chat-attachment {
  position: relative;
  max-width: 130px;
  overflow: hidden;
}

.chat-cont-right ul.list-unstyled .media.received .chat-msg-attachments .chat-attachment:before {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background: #000;
  content: "";
  opacity: 0.4;
  -webkit-transition: all 0.4s;
  -ms-transition: all 0.4s;
  transition: all 0.4s;
}

.chat-cont-right ul.list-unstyled .media.received .chat-msg-attachments .chat-attachment:hover .chat-attach-download {
  opacity: 1;
}

.chat-cont-right ul.list-unstyled .media.received .chat-msg-attachments>div {
  margin: 0 1px;
}

.chat-cont-right ul.list-unstyled .media.received .chat-msg-attachments img {
  max-width: 100%;
}

.chat-cont-right ul.list-unstyled .media.received .chat-msg-attachments .chat-attach-download {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  -webkit-transition: all 0.4s;
  -ms-transition: all 0.4s;
  transition: all 0.4s;
  opacity: 0;
  color: #FFF;
  width: 32px;
  line-height: 32px;
  background: rgba(255, 255, 255, 0.2);
  text-align: center;
}

.chat-cont-right ul.list-unstyled .chat-date {
  font-size: 14px;
  margin: 1.875rem 0;
  overflow: hidden;
  position: relative;
  text-align: center;
  text-transform: capitalize;
}

.chat-cont-right ul.list-unstyled .chat-date:before {
  background-color: #E9EDF4;
  content: "";
  height: 1px;
  margin-right: 28px;
  position: absolute;
  top: 50%;
  right: 50%;
  width: 100%;
}

.chat-cont-right ul.list-unstyled .chat-date:after {
  background-color: #E9EDF4;
  content: "";
  height: 1px;
  margin: 0 0 0 28px;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100%;
}

.card-footer {
  background-color: #FFF;
  border-top: 1px solid #B5B9C3;
  margin: 0;
  padding: 1rem 1.5rem;
}

.card-footer .type_msg {
  background-color: rgba(0, 0, 0, 0.1) !important;
  border: 0 !important;
  overflow-y: auto;
}

@media (max-width: 991.98px) {
  .main-chat-blk .chat.chat-messages {
    display: none;
    width: 100%;
    flex: 1 1 100%;
  }

  .main-chat-blk .sidebar-group.left-sidebar {
    width: 100%;
    flex: 1 1 100%;
  }

  .main-chat-blk.chat-open .sidebar-group.left-sidebar {
    display: none;
  }

  .main-chat-blk.chat-open .chat.chat-messages {
    display: flex;
  }

  .main-chat-blk .chat.chat-messages.hide-chatbar {
    display: none;
  }

  .main-chat-blk .right-sidebar.right-side-contact {
    position: absolute;
    inset: 0;
    z-index: 100;
    width: 100%;
  }

  .main-chat-blk .right-sidebar.right-side-contact.hide-right-sidebar {
    display: none;
  }

  .main-chat-blk .right-sidebar.right-side-contact.show-right-sidebar {
    display: flex;
    margin-right: 0;
  }
}

.msg-typing {
  width: auto;
  height: 24px;
  padding-top: 8px;
}

.msg-typing span {
  height: 8px;
  width: 8px;
  float: left;
  background-color: #FFF;
  display: block;
  opacity: 0.4;
  margin: 0 1px;
  border-radius: 50%;
}

.msg-typing span:nth-of-type(1) {
  animation: 1s blink infinite 0.33333s;
}

.msg-typing span:nth-of-type(2) {
  animation: 1s blink infinite 0.66666s;
}

.msg-typing span :nth-of-type(3) {
  animation: 1s blink infinite 0.99999s;
}

@keyframes blink {
  50% {
    opacity: 1;
  }
}

.sticky-top {
  z-index: 11;
}

.dropdown-auto {
  overflow: auto;
}

.dropdown-divider {
  margin: 0;
}

.dropdown .dropdown-toggle {
  font-weight: 400;
  font-size: 14px;
}

.dropdown .dropdown-toggle:after {
  display: inline-block;
  margin-inline-start: 0.5rem;
  vertical-align: 0;
  content: "\ea5f";
  font-family: "tabler-icons";
  border: 0;
  font-size: 0.875rem;
  font-weight: 400;
}

.dropdown .dropdown-toggle.btn-primary {
  color: #FFF;
}

.dropdown .dropdown-menu {
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

.dropdown-menu {
  border-color: #E9EDF4;
  box-shadow: 0px 4px 13px -2px rgba(19, 16, 34, 0.06);
  font-size: 0.875rem;
  color: #202C4B;
  background-color: #FFF;
  padding: 0;
  z-index: 11;
}

.dropdown-divider {
  border-color: #E9EDF4;
}

.dropdown-item-text {
  color: #6A7287;
}

.dropdown-header {
  color: #6A7287;
}

.dropdown-item {
  color: #202C4B !important;
  padding: 0.594rem 0.9375rem;
  font-size: 14px;
}

.dropdown-item i {
  margin-right: 6px !important;
}

.dropdown-item.disabled,
.dropdown-item:disabled {
  color: #6A7287;
  opacity: 0.5;
}

.dropdown-item:not(.active):hover,
.dropdown-item:not(.active):focus,
.dropdown-item:not(.active):active {
  color: #202C4B;
  background-color: #F4F6FA;
}

.dropdown-item.active {
  background-color: #F4F6FA;
}

.dropdown-toggle::after {
  display: inline-block;
  margin-inline-start: 0.25rem;
  vertical-align: 0;
  content: "\ea5f";
  font-family: "tabler-icons";
  border: 0;
  font-size: 0.75rem;
  font-weight: 400;
}

.dropup .dropdown-toggle::after {
  display: inline-block;
  margin-inline-start: 0.25rem;
  vertical-align: 0;
  content: "\ea5f";
  font-family: "tabler-icons";
  border: 0;
  font-size: 0.75rem;
  font-weight: 400;
}

.dropup .dropdown-toggle::after {
  display: inline-block;
  margin-inline-start: 0.25rem;
  vertical-align: 0;
  content: "\ea62";
  font-family: "tabler-icons";
  border: 0;
  font-size: 0.75rem;
  font-weight: 400;
}

.dropend .dropdown-toggle::after {
  display: inline-block;
  margin-inline-start: 0.25rem;
  vertical-align: 0;
  content: "\ea61";
  font-family: "tabler-icons";
  border: 0;
  font-size: 0.75rem;
  font-weight: 400;
}

.dropstart .dropdown-toggle::before {
  display: inline-block;
  margin-inline-start: 0.25rem;
  vertical-align: 0;
  content: "\ea60";
  font-family: "tabler-icons";
  border: 0;
  font-size: 0.75rem;
  font-weight: 400;
}

.btn.dropdown-toggle-split {
  opacity: 0.85;
}

.btn-list a.dropdown-item {
  margin-block-end: 0;
}

.btn-list .btn-soft-success:hover {
  transform: translateY(0);
}

.btn-list .btn-soft-danger:hover {
  transform: translateY(0);
}

.dropdown-menu.dropdown-menu-primary {
  background-color: #1f3b60;
}

.dropdown-menu.dropdown-menu-primary li a {
  color: rgba(255, 255, 255, 0.9);
}

.dropdown-menu.dropdown-menu-primary .dropdown-item:hover,
.dropdown-menu.dropdown-menu-primary .dropdown-item:focus,
.dropdown-menu.dropdown-menu-primary .dropdown-item:active,
.dropdown-menu.dropdown-menu-primary .dropdown-item.active {
  color: #FFF;
}

.dropdown-menu.dropdown-menu-secondary {
  background-color: #0e76bd;
}

.dropdown-menu.dropdown-menu-secondary li a {
  color: rgba(255, 255, 255, 0.9);
}

.dropdown-menu.dropdown-menu-secondary .dropdown-item:hover,
.dropdown-menu.dropdown-menu-secondary .dropdown-item:focus,
.dropdown-menu.dropdown-menu-secondary .dropdown-item:active,
.dropdown-menu.dropdown-menu-secondary .dropdown-item.active {
  color: #FFF;
}

.dropdown-menu.dropdown-menu-warning {
  background-color: #EAB300;
}

.dropdown-menu.dropdown-menu-warning li a {
  color: rgba(255, 255, 255, 0.9);
}

.dropdown-menu.dropdown-menu-warning .dropdown-item:hover,
.dropdown-menu.dropdown-menu-warning .dropdown-item:focus,
.dropdown-menu.dropdown-menu-warning .dropdown-item:active,
.dropdown-menu.dropdown-menu-warning .dropdown-item.active {
  color: #FFF;
}

.dropdown-menu.dropdown-menu-info {
  background-color: #0F65CD;
}

.dropdown-menu.dropdown-menu-info li a {
  color: rgba(255, 255, 255, 0.9);
}

.dropdown-menu.dropdown-menu-info .dropdown-item:hover,
.dropdown-menu.dropdown-menu-info .dropdown-item:focus,
.dropdown-menu.dropdown-menu-info .dropdown-item:active,
.dropdown-menu.dropdown-menu-info .dropdown-item.active {
  color: #FFF;
}

.dropdown-menu.dropdown-menu-success {
  background-color: #1ABE17;
}

.dropdown-menu.dropdown-menu-success li a {
  color: rgba(255, 255, 255, 0.9);
}

.dropdown-menu.dropdown-menu-success .dropdown-item:hover,
.dropdown-menu.dropdown-menu-success .dropdown-item:focus,
.dropdown-menu.dropdown-menu-success .dropdown-item:active,
.dropdown-menu.dropdown-menu-success .dropdown-item.active {
  color: #FFF;
}

.dropdown-menu.dropdown-menu-danger {
  background-color: #E82646;
}

.dropdown-menu.dropdown-menu-danger li a {
  color: rgba(255, 255, 255, 0.9);
}

.dropdown-menu.dropdown-menu-danger .dropdown-item:hover,
.dropdown-menu.dropdown-menu-danger .dropdown-item:focus,
.dropdown-menu.dropdown-menu-danger .dropdown-item:active,
.dropdown-menu.dropdown-menu-danger .dropdown-item.active {
  color: #FFF;
}

.dropdown-menu.dropmenu-item-primary .dropdown-item:hover,
.dropdown-menu.dropmenu-item-primary .dropdown-item:focus,
.dropdown-menu.dropmenu-item-primary .dropdown-item:active,
.dropdown-menu.dropmenu-item-primary .dropdown-item.active {
  background-color: rgba(31, 59, 96, 0.1) !important;
  color: #1f3b60;
}

.dropdown-menu.dropmenu-item-secondary .dropdown-item:hover,
.dropdown-menu.dropmenu-item-secondary .dropdown-item:focus,
.dropdown-menu.dropmenu-item-secondary .dropdown-item:active,
.dropdown-menu.dropmenu-item-secondary .dropdown-item.active {
  background-color: rgba(14, 118, 189, 0.1) !important;
  color: #0e76bd;
}

.dropdown-menu.dropmenu-item-warning .dropdown-item:hover,
.dropdown-menu.dropmenu-item-warning .dropdown-item:focus,
.dropdown-menu.dropmenu-item-warning .dropdown-item:active,
.dropdown-menu.dropmenu-item-warning .dropdown-item.active {
  background-color: rgba(234, 179, 0, 0.1) !important;
  color: #EAB300;
}

.dropdown-menu.dropmenu-item-info .dropdown-item:hover,
.dropdown-menu.dropmenu-item-info .dropdown-item:focus,
.dropdown-menu.dropmenu-item-info .dropdown-item:active,
.dropdown-menu.dropmenu-item-info .dropdown-item.active {
  background-color: rgba(15, 101, 205, 0.1) !important;
  color: #0F65CD;
}

.dropdown-menu.dropmenu-item-success .dropdown-item:hover,
.dropdown-menu.dropmenu-item-success .dropdown-item:focus,
.dropdown-menu.dropmenu-item-success .dropdown-item:active,
.dropdown-menu.dropmenu-item-success .dropdown-item.active {
  background-color: rgba(26, 190, 23, 0.1) !important;
  color: #1ABE17;
}

.dropdown-menu.dropmenu-item-danger .dropdown-item:hover,
.dropdown-menu.dropmenu-item-danger .dropdown-item:focus,
.dropdown-menu.dropmenu-item-danger .dropdown-item:active,
.dropdown-menu.dropmenu-item-danger .dropdown-item.active {
  background-color: rgba(232, 38, 70, 0.1) !important;
  color: #E82646;
}

.dropdown-menu.dropmenu-light-primary {
  background-color: rgba(14, 118, 189, 0.1);
  backdrop-filter: blur(2rem);
}

.dropdown-menu.dropmenu-light-primary .dropdown-item:hover,
.dropdown-menu.dropmenu-light-primary .dropdown-item:focus,
.dropdown-menu.dropmenu-light-primary .dropdown-item:active,
.dropdown-menu.dropmenu-light-primary .dropdown-item.active {
  color: #FFF;
  background-color: #1f3b60 !important;
}

.dropdown-menu.dropmenu-light-secondary {
  background-color: rgba(14, 118, 189, 0.1);
  backdrop-filter: blur(2rem);
}

.dropdown-menu.dropmenu-light-secondary .dropdown-item:hover,
.dropdown-menu.dropmenu-light-secondary .dropdown-item:focus,
.dropdown-menu.dropmenu-light-secondary .dropdown-item:active,
.dropdown-menu.dropmenu-light-secondary .dropdown-item.active {
  color: #FFF;
  background-color: #0e76bd !important;
}

.dropdown-menu.dropmenu-light-info {
  background-color: rgba(15, 101, 205, 0.1);
  backdrop-filter: blur(2rem);
}

.dropdown-menu.dropmenu-light-info .dropdown-item:hover,
.dropdown-menu.dropmenu-light-info .dropdown-item:focus,
.dropdown-menu.dropmenu-light-info .dropdown-item:active,
.dropdown-menu.dropmenu-light-info .dropdown-item.active {
  color: #FFF;
  background-color: #0F65CD !important;
}

.dropdown-menu.dropmenu-light-warning {
  background-color: rgba(234, 179, 0, 0.1);
  backdrop-filter: blur(2rem);
}

.dropdown-menu.dropmenu-light-warning .dropdown-item:hover,
.dropdown-menu.dropmenu-light-warning .dropdown-item:focus,
.dropdown-menu.dropmenu-light-warning .dropdown-item:active,
.dropdown-menu.dropmenu-light-warning .dropdown-item.active {
  color: #FFF;
  background-color: #EAB300 !important;
}

.dropdown-menu.dropmenu-light-success {
  background-color: rgba(26, 190, 23, 0.1);
  backdrop-filter: blur(2rem);
}

.dropdown-menu.dropmenu-light-success .dropdown-item:hover,
.dropdown-menu.dropmenu-light-success .dropdown-item:focus,
.dropdown-menu.dropmenu-light-success .dropdown-item:active,
.dropdown-menu.dropmenu-light-success .dropdown-item.active {
  color: #FFF;
  background-color: #1ABE17 !important;
}

.dropdown-menu.dropmenu-light-danger {
  background-color: rgba(232, 38, 70, 0.1);
  backdrop-filter: blur(2rem);
}

.dropdown-menu.dropmenu-light-danger .dropdown-item:hover,
.dropdown-menu.dropmenu-light-danger .dropdown-item:focus,
.dropdown-menu.dropmenu-light-danger .dropdown-item:active,
.dropdown-menu.dropmenu-light-danger .dropdown-item.active {
  color: #FFF;
  background-color: #E82646 !important;
}

.dropdown-divider {
  margin: 0;
}

.bd-example>.dropdown-menu {
  position: static;
  display: block;
}

.card-dropdown>a {
  background: #FFF;
  border-radius: 6px;
  font-weight: 400;
  box-shadow: 0px 4.4px 20px -1px rgba(19, 16, 34, 0.0509803922);
  border: 0;
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  color: #515B73;
  padding: 10px 10px 10px 30px;
  position: relative;
}

.card-dropdown>a .cal-icon {
  position: absolute;
  left: 10px;
  top: 50%;
  transform: translateY(-50%);
  z-index: 10;
}

.card-dropdown>a i {
  font-size: 16px;
  margin-right: 5px;
}

.card-dropdown>a[aria-expanded=true]::after {
  -webkit-transition: all 0.2s ease;
  -ms-transition: all 0.2s ease;
  transition: all 0.2s ease;
  transform: rotate(180deg);
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
}

.card-dropdown .dropdown-menu {
  border: 0;
  border-radius: 6px;
  padding: 15px;
  box-shadow: 0px 4px 9px -1px rgba(19, 16, 34, 0.031372549);
}

.card-dropdown .dropdown-menu li a {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  padding: 10px;
  border-radius: 6px;
  font-size: 14px;
}

.card-dropdown .dropdown-menu li a i {
  font-size: 16px;
  margin-right: 8px;
}

.card-dropdown .dropdown-menu li a:hover {
  background: #EDF1F6;
  color: #39435F;
}

.dropdown-md {
  min-width: 320px !important;
}

.dropdown-menu.notes-menu {
  z-index: 99999;
}

.dropdown-menu.notes-menu a.dropdown-item {
  color: #202C4B;
  font-size: 14px;
  font-weight: 400;
  display: flex;
  align-items: center;
  padding: 8px 15px;
}

.dropdown-menu.notes-menu span {
  margin-right: 8px;
}

.dropdown-menu.notes-menu svg {
  width: 14px;
  height: 14px;
  color: #6A7287;
}

.drop-arrow-none:after {
  display: none;
  content: none !important;
}

.table-inbox .starred.fas.fa-star {
  color: #EAB300;
}

.table-inbox .checked {
  background-color: #B5B9C3;
}

.table-inbox th {
  border-color: #F0F2F7;
}

.table-inbox tbody tr td {
  font-size: 14px;
  color: #0e76bd;
  border-color: #E9EDF4;
}

.unread .name,
.unread .subject,
.unread .mail-date {
  color: #000;
  font-weight: 700;
}

.email-header .btn-white {
  min-width: auto;
  height: 38px;
  border: 1px solid #E9EDF4;
}

.email-header .btn-white i {
  margin-left: 5px;
}

.dropset.btn-icon {
  height: 45px !important;
}

aside {
  padding: 24px;
}

.video-section .item {
  opacity: 0.4;
  transition: 0.4s ease all;
  transform: scale(0.8);
}

@media (max-width: 1000px) {
  .video-section .item {
    margin: 0;
    transform: scale(0.9);
  }
}

.video-section .active .item {
  opacity: 1;
  transform: scale(1);
}

.video-section .owl-item {
  -webkit-backface-visibility: hidden;
  backface-visibility: hidden;
  -webkit-transform: translateZ(0) scale(1, 1);
  transform: translateZ(0) scale(1, 1);
}

.video-section video {
  max-width: 100%;
  height: 100%;
  border-radius: 10px 10px 0 0;
}

.delete-alert {
  padding: 10px 20px;
  background: #FAD4DA;
  border: none;
  border-radius: 8px;
}

.delete-alert p {
  font-size: 15px;
}

.delete-alert .btn {
  font-weight: 700;
}

.deleted-info {
  display: none;
}

.deleted-info .bin-bg {
  width: 184px;
  height: 184px;
  border-radius: 100%;
  background: #E9EDF4;
  margin: 0 auto;
}

svg.feather-16 {
  width: 16px;
  height: 16px;
}

svg.feather-14 {
  width: 14px;
  height: 14px;
}

.active-dark-btn a.active {
  background: #202C4B;
  color: #FFF;
}

.active-dark-btn a:hover {
  background: #202C4B;
  color: #FFF;
}

.custom-file-container {
  box-sizing: border-box;
  position: relative;
  display: block;
}

.custom-file-container .custom-file-container__custom-file {
  box-sizing: border-box;
  position: relative;
  display: inline-block;
  width: 100%;
  height: calc(2.25rem + 2px);
  margin-bottom: 0;
  margin-top: 5px;
}

.custom-file-container input[type=file] {
  height: auto;
  min-height: calc(1.5em + 0.75rem + 2px);
}

.custom-file-container .custom-file-container__custom-file__custom-file-input {
  box-sizing: border-box;
  min-width: 14rem;
  max-width: 100%;
  height: calc(2.25rem + 2px);
  margin: 0;
  opacity: 0;
}

.custom-file-container .custom-file-container__custom-file__custom-file-control {
  box-sizing: border-box;
  z-index: 1;
  height: auto;
  overflow: hidden;
  line-height: 1.5;
  user-select: none;
  background-clip: padding-box;
  border-radius: 0.25rem;
  height: auto;
  border: 1px solid #E6E8EB;
  color: #6A7287;
  font-size: 15px;
  padding: 8px 10px;
  letter-spacing: 1px;
  background-color: #E6E8EB;
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
}

.custom-file-container .custom-file-container__custom-file__custom-file-control__button {
  box-sizing: border-box;
  z-index: 6;
  display: block;
  height: auto;
  padding: 10px 16px;
  line-height: 1.25;
  background-color: rgba(27, 85, 226, 0.23);
  color: #1f3b60;
  border-left: 1px solid #E9EDF4;
  box-sizing: border-box;
  position: absolute;
  top: 0;
  right: 0;
}

.custom-file-container .custom-file-container__image-preview {
  box-sizing: border-box;
  transition: all 0.2s ease;
  margin-top: 50px;
  margin-bottom: 40px;
  height: 250px;
  width: 100%;
  border-radius: 4px;
  background-size: contain;
  background-position: center center;
  background-repeat: no-repeat;
  background-color: #FFF;
  overflow: auto;
  padding: 15px;
}

.custom-file-container .custom-file-container__image-multi-preview {
  box-sizing: border-box;
  transition: all 0.2s ease;
  margin-top: 50px;
  margin-bottom: 40px;
  height: 250px;
  width: 100%;
  border-radius: 4px;
  background-size: contain;
  background-position: center center;
  background-repeat: no-repeat;
  background-color: #FFF;
  overflow: auto;
  padding: 15px;
}

.icons-list {
  padding: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}

.icons-list li {
  display: block;
  width: 40px;
  height: 40px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  font-size: 18px;
  border-radius: 50px;
  border: 1px solid #e6ebf1;
  color: #1f3b60;
  margin: 5px;
  -webkit-box-shadow: 0 2px 3px rgb(215, 197, 255);
  -moz-box-shadow: 0 2px 3px rgb(215, 197, 255);
  box-shadow: 0 2px 3px rgb(215, 197, 255);
}

.progress {
  background-color: #E9EDF4;
  --bs-progress-height: 0.75rem;
  border-radius: 0.25rem;
}

.progress-stacked {
  background-color: #E9EDF4;
}

.progress-bar {
  color: #FFF;
  background-color: #1f3b60;
}

@keyframes progress-animate {
  0% {
    width: 0;
  }
}

.progress-animate {
  position: relative;
  border-radius: 0.625rem;
}

.progress-animate .progress-bar {
  position: relative;
  border-radius: 0.625rem;
  animation: 2s progress-animate;
}

.progress.progress-xs,
.progress-stacked.progress-xs {
  height: 0.3125rem;
}

.progress.progress-sm,
.progress-stacked.progress-sm {
  height: 0.5rem;
}

.progress.progress-md,
.progress-stacked.progress-md {
  height: 0.625rem;
}

.progress.progress-lg,
.progress-stacked.progress-lg {
  height: 1rem;
}

.progress.progress-xl,
.progress-stacked.progress-xl {
  height: 1.25rem;
}

.progress-vertical {
  min-height: 250px;
  height: 250px;
  width: 10px;
  position: relative;
  display: inline-block;
  margin-bottom: 0;
  margin-right: 20px;
}

.progress-vertical .progress-bar {
  width: 100%;
}

.progress-vertical.progress-xl {
  width: 15px;
}

.progress-vertical.progress-lg {
  width: 12px;
}

.progress-vertical.progress-sm {
  width: 8px;
}

.progress-vertical.progress-xs {
  width: 5px;
}

.progress-vertical-bottom {
  min-height: 250px;
  height: 250px;
  position: relative;
  width: 10px;
  display: inline-block;
  margin-bottom: 0;
  margin-right: 20px;
}

.progress-vertical-bottom .progress-bar {
  width: 100%;
  bottom: 0;
  position: absolute;
}

.progress-vertical-bottom.progress-xl {
  width: 15px;
}

.progress-vertical-bottom.progress-lg {
  width: 12px;
}

.progress-vertical-bottom.progress-sm {
  width: 8px;
}

.progress-vertical-bottom.progress-xs {
  width: 5px;
}

.progress-custom {
  overflow: visible;
  position: relative;
}

.progress-custom .progress-bar {
  position: relative;
  overflow: visible;
}

.progress-custom .progress-bar:after {
  content: "";
  width: 1.15rem;
  height: 1.15rem;
  border-radius: 50%;
  box-shadow: 0 0.313rem 0.313rem rgba(31, 59, 96, 0.5);
  background: #FFF;
  position: absolute;
  inset-inline-end: -0.375rem;
  inset-block-start: -0.375rem;
  border: 0.25rem solid #1f3b60;
}

.progress-custom .progress-bar.bg-secondary:after {
  border: 0.25rem solid #0e76bd;
  box-shadow: 0 0.313rem 0.313rem rgba(var(--secondary-rgb), 0.2);
}

.progress-custom .progress-bar.bg-warning:after {
  border: 0.25rem solid #EAB300;
  box-shadow: 0 0.313rem 0.313rem rgba(var(--warning-rgb), 0.2);
}

.progress-custom .progress-bar.bg-info:after {
  border: 0.25rem solid #0F65CD;
  box-shadow: 0 0.313rem 0.313rem rgba(var(--info-rgb), 0.2);
}

.progress-custom .progress-bar.bg-success:after {
  border: 0.25rem solid #1ABE17;
  box-shadow: 0 0.313rem 0.313rem rgba(var(--success-rgb), 0.2);
}

.progress-custom .progress-bar.bg-danger:after {
  border: 0.25rem solid #E82646;
  box-shadow: 0 0.313rem 0.313rem rgba(var(--danger-rgb), 0.2);
}

.progress-custom .progress-bar-value {
  width: 1.875rem;
  height: 1.25rem;
  line-height: 1.25rem;
  border-radius: 0.188rem;
  background: #1f3b60;
  box-shadow: 0 0.313rem 0.313rem rgba(0, 0, 0, 0.4);
  font-size: 0.625rem;
  font-weight: 600;
  color: #FFF;
  text-align: center;
  position: absolute;
  inset-block-end: 1.5rem;
  inset-inline-end: -0.688rem;
}

.progress-custom .progress-bar-value:after {
  content: "";
  border-block-start: 0.438rem solid #1f3b60;
  border-inline-start: 0.438rem solid transparent;
  border-inline-end: 0.438rem solid transparent;
  position: absolute;
  inset-block-end: -0.375rem;
  inset-inline-start: 28%;
}

.progress-custom .progress-bar-value.bg-secondary {
  background-color: #0e76bd;
}

.progress-custom .progress-bar-value.bg-secondary:after {
  border-block-start: 0.438rem solid #0e76bd;
}

.progress-custom .progress-bar-value.bg-success {
  background-color: #1ABE17;
}

.progress-custom .progress-bar-value.bg-success:after {
  border-block-start: 0.438rem solid #1ABE17;
}

.progress-custom .progress-bar-value.bg-warning {
  background-color: #EAB300;
}

.progress-custom .progress-bar-value.bg-warning:after {
  border-block-start: 0.438rem solid #EAB300;
}

.progress-custom .progress-bar-value.bg-danger {
  background-color: #E82646;
}

.progress-custom .progress-bar-value.bg-danger:after {
  border-block-start: 0.438rem solid #E82646;
}

.progress-custom .progress-bar-value.bg-info {
  background-color: #0F65CD;
}

.progress-custom .progress-bar-value.bg-info:after {
  border-block-start: 0.438rem solid #0F65CD;
}

[dir=rtl] .progress-bar-title {
  border-radius: 0 0.313rem 0.313rem 0;
}

.progress-item-1,
.progress-item-2,
.progress-item-3 {
  position: absolute;
  margin-block-start: -0.25rem;
  z-index: 1;
  height: 0.938rem;
  width: 0.938rem;
  border-radius: 1.563rem;
  background-color: #E9EDF4;
}

.progress-item-1 {
  inset-inline-start: 25%;
}

.progress-item-2 {
  inset-inline-start: 50%;
}

.progress-item-3 {
  inset-inline-start: 75%;
}

.custom-progress-3 {
  overflow: visible;
  border-radius: 0.625rem;
}

.custom-progress-3 .progress-bar {
  position: relative;
  overflow: visible;
  margin: 0.313rem;
  border-radius: 0.25rem;
}

.custom-progress-3 .progress-bar:before {
  content: "";
  position: absolute;
  width: 0.25rem;
  height: 0.25rem;
  inset-inline-start: 0.125rem;
  background-color: #FFF;
  border-radius: 50%;
}

.custom-progress-3 .progress-bar .progress-bar-value {
  border: 0.125rem solid #1f3b60;
  width: 2.5rem;
  height: 1.563rem;
  line-height: 1.313rem;
  border-radius: 3.125rem;
  background: #FFF;
  font-size: 0.625rem;
  font-weight: 600;
  color: #1f3b60;
  text-align: center;
  position: absolute;
  inset-inline-end: -0.625rem;
}

.custom-progress-3 .progress-bar .progress-bar-value.secondary {
  border: 0.125rem solid #0e76bd;
  color: #0e76bd;
}

.custom-progress-3 .progress-bar .progress-bar-value.warning {
  border: 0.125rem solid #EAB300;
  color: #EAB300;
}

.custom-progress-3 .progress-bar .progress-bar-value.info {
  border: 0.125rem solid #0F65CD;
  color: #0F65CD;
}

.custom-progress-3 .progress-bar .progress-bar-value.success {
  border: 0.125rem solid #1ABE17;
  color: #1ABE17;
}

.custom-progress-3 .progress-bar .progress-bar-value.danger {
  border: 0.125rem solid #E82646;
  color: #E82646;
}

.custom-progress-4.progress {
  background-color: rgba(31, 59, 96, 0.1);
  border-radius: 0.25rem;
}

.custom-progress-4.progress.secondary {
  background-color: rgba(14, 118, 189, 0.1);
}

.custom-progress-4.progress.secondary .progress-bar-label {
  color: #0e76bd;
}

.custom-progress-4.progress.warning {
  background-color: rgba(234, 179, 0, 0.1);
}

.custom-progress-4.progress.warning .progress-bar-label {
  color: #EAB300;
}

.custom-progress-4.progress.info {
  background-color: rgba(15, 101, 205, 0.1);
}

.custom-progress-4.progress.info .progress-bar-label {
  color: #0F65CD;
}

.custom-progress-4.progress.success {
  background-color: rgba(26, 190, 23, 0.1);
}

.custom-progress-4.progress.success .progress-bar-label {
  color: #1ABE17;
}

.custom-progress-4.progress.danger {
  background-color: rgba(232, 38, 70, 0.1);
}

.custom-progress-4.progress.danger .progress-bar-label {
  color: #E82646;
}

.custom-progress-4.progress .progress-bar {
  border-radius: 0.25rem;
}

.custom-progress-4.progress .progress-bar-label {
  position: absolute;
  inset-inline-end: 0.313rem;
  font-weight: 600;
  font-size: 0.813rem;
  color: #1f3b60;
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
/* ring (shared) */
.progress-ring {
  --v: 0;
  width: 90px;
  height: 90px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: conic-gradient(currentColor calc(var(--v) * 1%), var(--bs-secondary-bg) 0);
}

.progress-ring-hole {
  width: 68px;
  height: 68px;
  border-radius: 50%;
  background: var(--surface);
  display: flex;
  place-items: center;
  justify-content: center;
  flex-direction: column;
}

.progress-ring-hole b {
  font-size: 20px;
  font-weight: 800;
  color: var(--heading);
}

.progress-ring-hole span {
  font-size: 9px;
  color: var(--muted);
}

.score-rail {
  gap: 10px;
  padding: 16px 14px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-list);
  background: linear-gradient(180deg, var(--tone-brand-soft), var(--surface) 62%);
}

/* ---------- SPLIT BAR ---------- */
/* one track divided into labelled segments — each segment carries a bg-* */
.split-bar {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--border-soft);
}

.split-bar-head {
  margin-bottom: 7px;
}

.split-bar-head span {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--muted);
  font-weight: 650;
}

.split-bar-head b {
  font-size: 11px;
  color: var(--heading);
}

.split-bar-track {
  gap: 2px;
  height: 9px;
  border-radius: 999px;
  background: var(--surface-soft);
}

.split-bar-keys {
  gap: 4px 10px;
  margin-top: 8px;
}

.split-bar-keys>span {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 10px;
  color: var(--muted);
}

.split-bar-keys>span>i {
  width: 8px;
  height: 8px;
  border-radius: 3px;
}

.progress-ring-sm {
  width: 72px;
  height: 72px;
}

.progress-ring-sm .progress-ring-hole {
  width: 54px;
  height: 54px;
}

.progress-ring-sm .progress-ring-hole b {
  font-size: 16px;
}

/* ---------- LABELLED PROGRESS ROWS ---------- */
.progress-list {
  gap: 12px;
}

.progress-list-item .top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 12.5px;
  color: var(--heading);
  margin-bottom: 5px;
}

.progress-list-item .top>span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.progress-list-item .top .ic {
  width: 24px;
  height: 24px;
  border-radius: 7px;
  display: grid;
  place-items: center;
  font-size: 13px;
}

.page-link {
  color: #6A7287;
  background-color: #FFF;
  border: 1px solid #E9EDF4;
}

.page-link:focus {
  box-shadow: none;
  background-color: #E9EDF4;
}

.page-link:hover {
  color: #1f3b60;
  background-color: #E9EDF4;
  border-color: #E9EDF4;
}

.page-item.active .page-link {
  color: #FFF;
  background-color: #1f3b60;
  border-color: #1f3b60;
}

.disabled>.page-link,
.page-link.disabled {
  color: #6A7287;
  background-color: #FFF;
  border-color: #E9EDF4;
  opacity: 0.7;
}

/* Dark Mode — .page-link is a solid white surface with no dark
   counterpart, so pagination stayed a white box in dark mode. Reuse the
   existing surface/border/heading tokens rather than new colours. */
[data-theme=dark] .page-link,
[data-bs-theme=dark] .page-link {
  color: var(--bs-secondary-color);
  background-color: var(--surface);
  border-color: var(--border-soft);
}

[data-theme=dark] .page-link:focus,
[data-theme=dark] .page-link:hover,
[data-bs-theme=dark] .page-link:focus,
[data-bs-theme=dark] .page-link:hover {
  background-color: var(--surface-soft);
}

[data-theme=dark] .page-link:hover,
[data-bs-theme=dark] .page-link:hover {
  color: var(--bs-primary);
}

[data-theme=dark] .disabled>.page-link,
[data-theme=dark] .page-link.disabled,
[data-bs-theme=dark] .disabled>.page-link,
[data-bs-theme=dark] .page-link.disabled {
  color: var(--bs-secondary-color);
  background-color: var(--surface);
  border-color: var(--border-soft);
}

[dir=rtl] .pagination .page-link .bx-chevron-left::before {
  content: "\ea50";
}

[dir=rtl] .pagination .page-link .bx-chevron-right::before {
  content: "\ea4d";
}

[dir=rtl] .pagination .page-link .ri-arrow-right-s-line:before {
  content: "\ea64";
}

[dir=rtl] .pagination .page-link .ri-arrow-left-s-line:before {
  content: "\ea6e";
}

.pagination-style-1 .pagination .page-item {
  margin: 0 0.25rem;
}

.pagination-style-1 .pagination .page-item .page-link {
  border: 0;
  border-radius: 4px;
  font-size: 0.8125rem;
}

.pagination-style-1 .pagination .page-item .page-link i {
  font-weight: 600;
}

.pagination-style-1 .pagination .page-item.active .page-link {
  border-radius: 4px;
  background-color: #1f3b60;
  color: #FFF;
}

.pagination-style-1 .pagination .page-item.active:hover .page-link {
  border-radius: 4px;
  background-color: #1f3b60;
  color: #FFF;
}

.pagination-style-1 .pagination .page-item:hover .page-link {
  background-color: #E9EDF4;
  color: #1f3b60;
}

.pagination-style-2 .pagination {
  border-radius: 4px;
}

.pagination-style-2 .pagination .page-item {
  margin: 0 0.25rem;
}

.pagination-style-2 .pagination .page-item .page-link {
  border: 0 !important;
  font-size: 0.8125rem;
}

.pagination-style-2 .pagination .page-item.active .page-link {
  background-color: #FFF;
  color: #1f3b60;
  position: relative;
  font-weight: bold;
}

.pagination-style-2 .pagination .page-item.active .page-link:before {
  position: absolute;
  content: "";
  inset-block-end: 0;
  inset-inline-start: 0;
  width: 100%;
  height: 0.1rem;
  background-color: #1f3b60;
}

.pagination-style-2 .pagination .page-item:hover .page-link {
  background-color: transparent;
}

.pagination-style-3 .pagination {
  border-radius: 50px;
  padding: 0.25rem;
  align-items: center;
}

.pagination-style-3 .pagination .page-item {
  margin: 0 0.25rem;
}

.pagination-style-3 .pagination .page-item .page-link {
  border: 0;
  border-radius: 50px;
  font-size: 0.8125rem;
}

.pagination-style-3 .pagination .page-item .page-link i {
  font-weight: 600;
}

.pagination-style-3 .pagination .page-item.active .page-link {
  background-color: #1f3b60;
  color: #FFF;
}

.pagination-style-3 .pagination .page-item.active:hover .page-link {
  background-color: #1f3b60;
}

.pagination-style-3 .pagination .page-item:hover .page-link {
  background-color: #E9EDF4;
}

.pagination-style-4 .pagination .page-item .page-link {
  border: 0 !important;
  font-size: 0.8125rem;
  border-radius: 4px;
}

.pagination-style-4 .pagination .page-item .page-link i {
  font-weight: 600;
}

.pagination-style-4 .pagination .page-item.active .page-link {
  border: 0;
  border-radius: 4px;
  background-color: #1f3b60;
  color: #FFF;
}

.pagination-style-4 .pagination .page-item.active:hover .page-link {
  background-color: #1f3b60;
}

.pagination-style-4 .pagination .page-item:hover .page-link {
  background-color: transparent;
}

.pagination-style-4 .pagination .page-item .page-link {
  border: 0 !important;
  font-size: 0.8125rem;
  border-radius: 4px;
}

.pagination-style-4 .pagination .page-item .page-link i {
  font-weight: 600;
}

.pagination-style-4 .pagination .page-item.active .page-link {
  border: 0;
  border-radius: 4px;
  background-color: #1f3b60;
  color: #FFF;
}

.pagination-style-4 .pagination .page-item.active:hover .page-link {
  background-color: #1f3b60;
}

.pagination-style-4 .pagination .page-item:hover .page-link {
  background-color: transparent;
}

.pagination-boxed .page-link {
  display: inline-flex;
  justify-content: center;
  align-items: center;
  margin-left: 0.35rem !important;
  height: 35px;
  width: 35px;
  padding: 0;
  border-radius: 4px;
}

.pagination-boxed.pagination-sm .page-link {
  height: 31px;
  width: 31px;
}

.pagination-boxed.pagination-lg .page-link {
  font-size: 1.09375rem;
  height: 53px;
  width: 53px;
}

.pagination-rounded .page-link {
  border-radius: 50% !important;
}

.pagination-primary .page-item.active .page-link {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
}

.pagination-primary .page-item.active .page-link:hover {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
}

.pagination-primary .page-item .page-link:hover {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
}

.pagination-secondary .page-item.active .page-link {
  background-color: #0e76bd;
  border-color: #0e76bd;
  color: #FFF;
}

.pagination-secondary .page-item.active .page-link:hover {
  background-color: #0e76bd;
  border-color: #0e76bd;
  color: #FFF;
}

.pagination-secondary .page-item .page-link:hover {
  background-color: #0e76bd;
  border-color: #0e76bd;
  color: #FFF;
}

.pagination-success .page-item.active .page-link {
  background-color: #1ABE17;
  border-color: #1ABE17;
  color: #FFF;
}

.pagination-success .page-item.active .page-link:hover {
  background-color: #1ABE17;
  border-color: #1ABE17;
  color: #FFF;
}

.pagination-success .page-item .page-link:hover {
  background-color: #1ABE17;
  border-color: #1ABE17;
  color: #FFF;
}

.pagination-info .page-item.active .page-link {
  background-color: #0F65CD;
  border-color: #0F65CD;
  color: #FFF;
}

.pagination-info .page-item.active .page-link:hover {
  background-color: #0F65CD;
  border-color: #0F65CD;
  color: #FFF;
}

.pagination-info .page-item .page-link:hover {
  background-color: #0F65CD;
  border-color: #0F65CD;
  color: #FFF;
}

.pagination-warning .page-item.active .page-link {
  background-color: #EAB300;
  border-color: #EAB300;
  color: #FFF;
}

.pagination-warning .page-item.active .page-link:hover {
  background-color: #EAB300;
  border-color: #EAB300;
  color: #FFF;
}

.pagination-warning .page-item .page-link:hover {
  background-color: #EAB300;
  border-color: #EAB300;
  color: #FFF;
}

.pagination-danger .page-item.active .page-link {
  background-color: #E82646;
  border-color: #E82646;
  color: #FFF;
}

.pagination-danger .page-item.active .page-link:hover {
  background-color: #E82646;
  border-color: #E82646;
  color: #FFF;
}

.pagination-danger .page-item .page-link:hover {
  background-color: #E82646;
  border-color: #E82646;
  color: #FFF;
}

.pagination-dark .page-item.active .page-link {
  background-color: #202C4B;
  border-color: #202C4B;
  color: #FFF;
}

.pagination-dark .page-item.active .page-link:hover {
  background-color: #202C4B;
  border-color: #202C4B;
  color: #FFF;
}

.pagination-dark .page-item .page-link:hover {
  background-color: #202C4B;
  border-color: #202C4B;
  color: #FFF;
}

.pagination-light .page-item.active .page-link {
  background-color: #E9EDF4;
  border-color: #E9EDF4;
  color: #FFF;
}

.pagination-light .page-item.active .page-link:hover {
  background-color: #E9EDF4;
  border-color: #E9EDF4;
  color: #FFF;
}

.pagination-light .page-item .page-link:hover {
  background-color: #E9EDF4;
  border-color: #E9EDF4;
  color: #FFF;
}

.pagination-black .page-item.active .page-link {
  background-color: #000;
  border-color: #000;
  color: #FFF;
}

.pagination-black .page-item.active .page-link:hover {
  background-color: #000;
  border-color: #000;
  color: #FFF;
}

.pagination-black .page-item .page-link:hover {
  background-color: #000;
  border-color: #000;
  color: #FFF;
}

.pagination-purple .page-item.active .page-link {
  background-color: #4A00E5;
  border-color: #4A00E5;
  color: #FFF;
}

.pagination-purple .page-item.active .page-link:hover {
  background-color: #4A00E5;
  border-color: #4A00E5;
  color: #FFF;
}

.pagination-purple .page-item .page-link:hover {
  background-color: #4A00E5;
  border-color: #4A00E5;
  color: #FFF;
}

.pagination-yellow .page-item.active .page-link {
  background-color: #ffff00;
  border-color: #ffff00;
  color: #FFF;
}

.pagination-yellow .page-item.active .page-link:hover {
  background-color: #ffff00;
  border-color: #ffff00;
  color: #FFF;
}

.pagination-yellow .page-item .page-link:hover {
  background-color: #ffff00;
  border-color: #ffff00;
  color: #FFF;
}

.pagination-teal .page-item.active .page-link {
  background-color: #02a8b5;
  border-color: #02a8b5;
  color: #FFF;
}

.pagination-teal .page-item.active .page-link:hover {
  background-color: #02a8b5;
  border-color: #02a8b5;
  color: #FFF;
}

.pagination-teal .page-item .page-link:hover {
  background-color: #02a8b5;
  border-color: #02a8b5;
  color: #FFF;
}

.pagination-gradient .page-link {
  background-image: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
}

h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  color: #202C4B;
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  font-weight: 700;
  margin-bottom: 0;
}

h1,
.h1 {
  font-size: 30px;
  font-weight: 700;
}

@media (max-width: 991.98px) {

  h1,
  .h1 {
    font-size: 28px;
  }
}

@media (max-width: 767.98px) {

  h1,
  .h1 {
    font-size: 24px;
  }
}

h2,
.h2 {
  font-size: 24px;
  font-weight: 700;
}

@media (max-width: 767.98px) {

  h2,
  .h2 {
    font-size: 22px;
  }
}

h3,
.h3 {
  font-size: 20px;
  font-weight: 600;
}

@media (max-width: 767.98px) {

  h3,
  .h3 {
    font-size: 18px;
  }
}

h4,
.h4 {
  font-size: 18px;
  font-weight: 600;
}

@media (max-width: 767.98px) {

  h4,
  .h4 {
    font-size: 16px;
  }
}

h5,
.h5 {
  font-size: 16px;
  font-weight: 500;
}

h6,
.h6 {
  font-size: 15px;
  font-weight: 500;
}

.fs-sm {
  font-size: 0.6875rem;
}

.fs-base {
  font-size: 0.875rem;
}

.fs-lg {
  font-size: 1.125rem;
}

.fs-1 {
  font-size: 0.0625rem;
}

.fs-2 {
  font-size: 0.125rem;
}

.fs-3 {
  font-size: 0.1875rem;
}

.fs-4 {
  font-size: 0.25rem;
}

.fs-5 {
  font-size: 0.3125rem !important;
}

.fs-6 {
  font-size: 0.375rem !important;
}

.fs-7 {
  font-size: 0.4375rem;
}

.fs-8 {
  font-size: 0.5rem !important;
}

.fs-9 {
  font-size: 0.5625rem;
}

.fs-10 {
  font-size: 0.75em !important;
}

.fs-11 {
  font-size: 0.6875rem;
}

.fs-12 {
  font-size: 0.75rem;
}

.fs-13 {
  font-size: 0.8125rem;
}

.fs-14 {
  font-size: 0.875rem !important;
}

.fs-15 {
  font-size: 0.9375rem;
}

.fs-16 {
  font-size: 1rem;
}

.fs-17 {
  font-size: 1.0625rem;
}

.fs-18 {
  font-size: 1.125rem;
}

.fs-19 {
  font-size: 1.1875rem;
}

.fs-20 {
  font-size: 1.25rem;
}

.fs-21 {
  font-size: 1.3125rem;
}

.fs-22 {
  font-size: 1.375rem;
}

.fs-23 {
  font-size: 1.4375rem;
}

.fs-24 {
  font-size: 1.5rem;
}

.fs-25 {
  font-size: 1.5625rem;
}

.fs-26 {
  font-size: 1.625rem;
}

.fs-27 {
  font-size: 1.6875rem;
}

.fs-28 {
  font-size: 1.75rem;
}

.fs-29 {
  font-size: 1.8125rem;
}

.fs-30 {
  font-size: 1.875rem;
}

.fs-32 {
  font-size: 2rem;
}

.fs-34 {
  font-size: 2.125rem;
}

.fs-36 {
  font-size: 2.25rem;
}

.fs-38 {
  font-size: 2.375rem;
}

.fs-40 {
  font-size: 2.5rem;
}

.text-default {
  color: #6A7287 !important;
}

.text-muted {
  color: #677788 !important;
}

.text-primary {
  color: #1f3b60 !important;
  opacity: 1;
}

.text-primary.text-opacity-75 {
  color: rgba(31, 59, 96, 0.75) !important;
}

.text-primary.text-opacity-25 {
  color: rgba(31, 59, 96, 0.25) !important;
}

.text-primary.text-opacity-50 {
  color: rgba(31, 59, 96, 0.5) !important;
}

.text-secondary {
  color: #0e76bd !important;
  opacity: 1;
}

.text-info {
  color: #0F65CD !important;
  opacity: 1;
}

.text-success {
  color: #1ABE17 !important;
  opacity: 1;
}

.text-warning {
  color: #EAB300 !important;
  opacity: 1;
}

.text-danger {
  color: #E82646 !important;
  opacity: 1;
}

.text-skyblue {
  color: #05C3FB !important;
  opacity: 1;
}

.text-blue {
  color: #339DFF !important;
}

.text-green {
  color: #2CA87F !important;
}

.text-pink {
  color: #E83E8C !important;
}

.text-teal {
  color: #02a8b5 !important;
}

.text-orange {
  color: #FD7E14 !important;
}

.text-indigo {
  color: #05C3FB !important;
}

.text-purple {
  color: #4A00E5 !important;
}

.text-dark {
  color: #202C4B !important;
}

.text-light {
  color: #E9EDF4 !important;
}

.text-gray {
  color: #838A9B !important;
}

.text-black {
  color: #000 !important;
}

.text-white {
  color: #FFF !important;
}

.text-fixed-white {
  color: #FFF !important;
}

.text-fixed-black {
  color: #000 !important;
}

.text-gray-1 {
  color: #E6E8EB;
}

.text-gray-2 {
  color: #CDD0D7;
}

.text-gray-3 {
  color: #B5B9C3;
}

.text-gray-4 {
  color: #9CA1AF;
}

.text-gray-5 {
  color: #838A9B;
}

.text-gray-6 {
  color: #6A7287;
}

.text-gray-7 {
  color: #515B73;
}

.text-gray-8 {
  color: #39435F;
}

.text-gray-9 {
  color: #202C4B !important;
}

a {
  color: #202C4B;
  cursor: pointer;
  text-decoration: none;
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

a:hover {
  color: #1f3b60;
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

a:focus {
  outline: 0;
}

.link-primary {
  color: #1f3b60 !important;
}

.link-primary:hover,
.link-primary:focus,
.link-primary:active {
  color: rgb(31.4732142857, 66.09375, 203.5267857143) !important;
}

.link-secondary {
  color: #0e76bd !important;
}

.link-secondary:hover,
.link-secondary:focus,
.link-secondary:active {
  color: #0e76bd !important;
}

.link-success {
  color: #1ABE17 !important;
}

.link-success:hover,
.link-success:focus,
.link-success:active {
  color: #1ABE17 !important;
}

.link-danger {
  color: #E82646 !important;
}

.link-danger:hover,
.link-danger:focus,
.link-danger:active {
  color: #E82646 !important;
}

.link-warning {
  color: #EAB300 !important;
}

.link-warning:hover,
.link-warning:focus,
.link-warning:active {
  color: #EAB300 !important;
}

.link-info {
  color: #0F65CD !important;
}

.link-info:hover,
.link-info:focus,
.link-info:active {
  color: #0F65CD !important;
}

.link-light {
  color: #E9EDF4 !important;
}

.link-light:hover,
.link-light:focus,
.link-light:active {
  color: #E9EDF4 !important;
}

.link-dark {
  color: #202C4B !important;
}

.link-dark:hover,
.link-dark:focus,
.link-dark:active {
  color: #202C4B !important;
}

hr.text-danger {
  border-color: #E82646 !important;
}

.blockquote-container {
  padding: 1.25rem;
  border-left: 4px solid #9CA1AF;
  position: relative;
}

.blockquote-container.text-end {
  border-right: 4px solid #9CA1AF;
  border-left: 0;
}

.blockquote.custom-blockquote {
  font-size: 0.85rem;
  font-weight: 600;
  padding: 1rem;
  border-radius: 4px;
  position: relative;
}

.blockquote.custom-blockquote:before {
  content: "\f10d";
  font-family: "Fontawesome";
  z-index: 0;
  font-size: 2rem;
  position: absolute;
  inset-block-start: 0;
  inset-inline-start: 0.5rem;
}

.blockquote.custom-blockquote.primary {
  background-color: rgba(31, 59, 96, 0.1);
  border-inline-start: 2px solid #1f3b60;
}

.blockquote.custom-blockquote.primary:before {
  color: rgba(31, 59, 96, 0.1);
}

.blockquote.custom-blockquote.secondary {
  background-color: rgba(14, 118, 189, 0.1);
  border-inline-start: 2px solid #0e76bd;
}

.blockquote.custom-blockquote.secondary:before {
  color: rgba(14, 118, 189, 0.1);
}

.blockquote.custom-blockquote.info {
  background-color: rgba(15, 101, 205, 0.1);
  border-inline-start: 2px solid #0F65CD;
}

.blockquote.custom-blockquote.info:before {
  color: rgba(15, 101, 205, 0.1);
}

.blockquote.custom-blockquote.warning {
  background-color: rgba(234, 179, 0, 0.1);
  border-inline-start: 2px solid #EAB300;
}

.blockquote.custom-blockquote.warning:before {
  color: rgba(234, 179, 0, 0.1);
}

.blockquote.custom-blockquote.success {
  background-color: rgba(26, 190, 23, 0.1);
  border-inline-start: 2px solid #1ABE17;
}

.blockquote.custom-blockquote.success:before {
  color: rgba(26, 190, 23, 0.1);
}

.blockquote.custom-blockquote.danger {
  background-color: rgba(232, 38, 70, 0.1);
  border-inline-start: 2px solid #E82646;
}

.blockquote.custom-blockquote.danger:before {
  color: rgba(232, 38, 70, 0.1);
}

[data-theme-mode=dark] .shadow-sm {
  box-shadow: 0 0.125rem 0.25rem rgba(33, 37, 41, 0.3) !important;
}

[data-theme-mode=dark] .shadow {
  box-shadow: 0 0.5rem 1rem rgba(33, 37, 41, 0.3) !important;
}

[data-theme-mode=dark] .shadow-lg {
  box-shadow: 0 1rem 3rem rgba(33, 37, 41, 0.3) !important;
}

@media screen and (min-width: 576px) {
  .w-sm-auto {
    width: auto;
  }
}

[dir=rtl] .text-break {
  word-wrap: break-word !important;
  word-break: break-word !important;
}

.transform-none {
  transform: none !important;
}

.list-circle {
  list-style: circle;
  padding-left: 2rem;
}

/*-----------------
	Panel typography scale

		Eyebrow → title → sub is the standard three-part panel heading; `.portal-heading`
		is the smaller in-panel variant. The sizes (10.5 / 18 / 12.5 / 13px) and the
		.1em eyebrow tracking are design-system values, not arbitrary numbers.

	Promoted from pages/_parent-portal.scss — a reusable pattern, not page style.
-----------------*/
.portal-eyebrow {
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--bs-tertiary-color);
  gap: 6px;
}

.portal-eyebrow i {
  font-size: 13px;
  color: var(--bs-primary);
}

.portal-title {
  font-size: 18px;
  font-weight: 750;
  letter-spacing: -0.02em;
  color: var(--bs-emphasis-color);
  margin: 3px 0 0;
}

.portal-sub {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
}

.portal-heading {
  font-size: 13px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  letter-spacing: -0.01em;
  gap: 7px;
}

.portal-heading i {
  font-size: 15px;
  color: var(--bs-secondary-color);
}

.alert {
  padding: 0.625rem 0.85rem;
  border-radius: 4px;
  font-size: 0.8125rem;
}

.alert.alert-dismissible {
  padding: 0.625rem 2.25rem 0.625rem 0.85rem;
}

.alert i {
  font-size: 20px;
}

.alert .btn-close {
  background-image: none;
  padding: 0.85rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

.alert .btn-close i {
  font-size: 18px;
  line-height: 18px;
}

.alert:last-child {
  margin-bottom: 0;
}

.alert .alert-link {
  font-weight: 600;
}

[dir=rtl] .alert.alert-dismissible {
  padding: 0.625rem 0.85rem 0.625rem 2.25rem;
}

.alert-warning {
  background-color: rgba(234, 179, 0, 0.1);
  color: #EAB300;
  border-color: rgba(234, 179, 0, 0.1);
}

.alert-warning.text-bg-warning {
  background-color: #EAB300 !important;
  border-color: #EAB300;
  color: #fff !important;
}

.alert-warning .alert-link {
  color: #EAB300;
}

.alert-warning .btn-close {
  color: #EAB300;
}

.alert-warning .btn-close.custom-close {
  background-color: #EAB300;
  color: #FFF;
  opacity: 1;
  border-radius: 50px;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  padding: 0.85rem;
}

.alert-primary {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
  border-color: rgba(31, 59, 96, 0.1);
}

.alert-primary.text-bg-primary {
  background-color: #1f3b60 !important;
  border-color: #1f3b60;
}

.alert-primary .alert-link {
  color: #1f3b60;
}

.alert-primary .custom-alert-icon {
  color: #1f3b60;
}

.alert-primary .btn-close {
  color: #1f3b60;
}

.alert-primary .btn-close.custom-close {
  background-color: #1f3b60;
  color: #FFF;
  opacity: 1;
  border-radius: 50px;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  padding: 0.85rem;
}

.alert-secondary {
  background-color: rgba(14, 118, 189, 0.1);
  color: #0e76bd;
  border-color: rgba(14, 118, 189, 0.1);
}

.alert-secondary.text-bg-secondary {
  background-color: #0e76bd !important;
  border-color: #0e76bd;
}

.alert-secondary .alert-link {
  color: #0e76bd;
}

.alert-secondary .btn-close {
  color: #0e76bd;
}

.alert-secondary .btn-close.custom-close {
  background-color: #0e76bd;
  color: #FFF;
  opacity: 1;
  border-radius: 50px;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  padding: 0.85rem;
}

.alert-success {
  background-color: rgba(26, 190, 23, 0.1);
  color: #1ABE17;
  border-color: rgba(26, 190, 23, 0.1);
}

.alert-success.text-bg-success {
  background-color: #1ABE17 !important;
  border-color: #1ABE17;
}

.alert-success .alert-link {
  color: #1ABE17;
}

.alert-success .btn-close {
  color: #1ABE17;
}

.alert-success .btn-close.custom-close {
  background-color: #1ABE17;
  color: #FFF;
  opacity: 1;
  border-radius: 50px;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  padding: 0.85rem;
}

.alert-info {
  background-color: rgba(15, 101, 205, 0.1);
  color: #0F65CD;
  border-color: rgba(15, 101, 205, 0.1);
}

.alert-info.text-bg-info {
  background-color: #0F65CD !important;
  border-color: #0F65CD;
  color: #fff !important;
}

.alert-info .alert-link {
  color: #0F65CD;
}

.alert-info .btn-close {
  color: #0F65CD;
}

.alert-info .btn-close.custom-close {
  background-color: #0F65CD;
  color: #FFF;
  opacity: 1;
  border-radius: 50px;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  padding: 0.85rem;
}

.alert-danger {
  background-color: rgba(232, 38, 70, 0.1);
  color: #E82646;
  border-color: rgba(232, 38, 70, 0.1);
}

.alert-danger.text-bg-danger {
  background-color: #E82646 !important;
  border-color: #E82646;
}

.alert-danger .alert-link {
  color: #E82646;
}

.alert-danger .btn-close {
  color: #E82646;
}

.alert-danger .btn-close.custom-close {
  background-color: #E82646;
  color: #FFF;
  opacity: 1;
  border-radius: 50px;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  padding: 0.85rem;
}

.alert-light {
  background-color: #E9EDF4;
  color: #6A7287;
  border-color: #E9EDF4;
}

.alert-light.text-bg-light {
  background-color: #E9EDF4 !important;
  border-color: #E9EDF4;
}

.alert-light .alert-link {
  color: #6A7287;
}

.alert-light .btn-close {
  color: #6A7287;
}

.alert-light .btn-close.custom-close {
  background-color: #E9EDF4;
  color: #FFF;
  opacity: 1;
  border-radius: 50px;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  padding: 0.85rem;
}

.alert-dark {
  background-color: rgba(32, 44, 75, 0.1);
  color: #6A7287;
  border-color: rgba(32, 44, 75, 0.1);
}

.alert-dark.text-bg-dark {
  background-color: #202C4B !important;
  border-color: #202C4B;
}

.alert-dark .alert-link {
  color: #6A7287;
}

.alert-dark .btn-close {
  color: #FFF;
}

.alert-dark .btn-close.custom-close {
  background-color: #202C4B;
  color: #FFF;
  opacity: 1;
  border-radius: 50px;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  padding: 0.85rem;
}

.alert-solid-primary {
  background-color: #1f3b60;
  color: #FFF;
  border-color: #1f3b60;
}

.alert-solid-primary .btn-close {
  color: #FFF;
}

.alert-solid-secondary {
  background-color: #0e76bd;
  color: #FFF;
  border-color: #0e76bd;
}

.alert-solid-secondary .btn-close {
  color: #FFF;
}

.alert-solid-warning {
  background-color: #EAB300;
  color: #FFF;
  border-color: #EAB300;
}

.alert-solid-warning .btn-close {
  color: #FFF;
}

.alert-solid-info {
  background-color: #0F65CD;
  color: #FFF;
  border-color: #0F65CD;
}

.alert-solid-info .btn-close {
  color: #FFF;
}

.alert-solid-success {
  background-color: #1ABE17;
  color: #FFF;
  border-color: #1ABE17;
}

.alert-solid-success .btn-close {
  color: #FFF;
}

.alert-solid-danger {
  background-color: #E82646;
  color: #FFF;
  border-color: #E82646;
}

.alert-solid-danger .btn-close {
  color: #FFF;
}

.alert-solid-light {
  background-color: #E9EDF4;
  color: #6A7287;
  border-color: #9CA1AF;
}

.alert-solid-dark {
  background-color: #202C4B;
  color: #FFF;
  border-color: #202C4B;
}

.alert-solid-dark .btn-close {
  color: #FFF;
}

.alert-outline-primary {
  background-color: #FFF;
  color: #1f3b60;
  border-color: #1f3b60;
}

.alert-outline-primary .btn-close {
  color: #1f3b60;
}

.alert-outline-secondary {
  background-color: #FFF;
  color: #0e76bd;
  border-color: #0e76bd;
}

.alert-outline-secondary .btn-close {
  color: #0e76bd;
}

.alert-outline-info {
  background-color: #FFF;
  color: #0F65CD;
  border-color: #0F65CD;
}

.alert-outline-info .btn-close {
  color: #0F65CD;
}

.alert-outline-warning {
  background-color: #FFF;
  color: #EAB300;
  border-color: #EAB300;
}

.alert-outline-warning .btn-close {
  color: #EAB300;
}

.alert-outline-success {
  background-color: #FFF;
  color: #1ABE17;
  border-color: #1ABE17;
}

.alert-outline-success .btn-close {
  color: #1ABE17;
}

.alert-outline-danger {
  background-color: #FFF;
  color: #E82646;
  border-color: #E82646;
}

.alert-outline-danger .btn-close {
  color: #E82646;
}

.alert-outline-light {
  background-color: #FFF;
  color: #6A7287;
  border-color: #E9EDF4;
}

.alert-outline-dark {
  background-color: #FFF;
  color: #202C4B;
  border-color: #202C4B;
}

.alert-outline-dark .btn-close {
  color: #202C4B;
}

.alert-primary.custom-alert-icon {
  border-inline-start: 0.313rem solid #1f3b60 !important;
  color: #677788;
  background-color: #FFF;
  border: 1px solid #9CA1AF;
  font-size: 0.813rem;
}

.alert-primary.custom-alert-icon .btn-close {
  color: #6A7287;
}

.alert-primary.custom-alert-icon>i {
  color: #1f3b60;
}

.alert-secondary.custom-alert-icon {
  border-inline-start: 0.313rem solid #0e76bd !important;
  color: #677788;
  background-color: #FFF;
  border: 1px solid #9CA1AF;
  font-size: 0.813rem;
}

.alert-secondary.custom-alert-icon .btn-close {
  color: #6A7287;
}

.alert-secondary.custom-alert-icon>i {
  color: #0e76bd;
}

.alert-warning.custom-alert-icon {
  border-inline-start: 0.313rem solid #EAB300 !important;
  color: #677788;
  background-color: #FFF;
  border: 1px solid #9CA1AF;
  font-size: 0.813rem;
}

.alert-warning.custom-alert-icon .btn-close {
  color: #6A7287;
}

.alert-warning.custom-alert-icon>i {
  color: #EAB300;
}

.alert-danger.custom-alert-icon {
  border-inline-start: 0.313rem solid #E82646 !important;
  color: #677788;
  background-color: #FFF;
  border: 1px solid #9CA1AF;
  font-size: 0.813rem;
}

.alert-danger.custom-alert-icon .btn-close {
  color: #6A7287;
}

.alert-danger.custom-alert-icon>i {
  color: #E82646;
}

.alert-success.custom-alert-icon {
  border-inline-start: 0.313rem solid #1ABE17 !important;
  color: #677788;
  background-color: #FFF;
  border: 1px solid #9CA1AF;
  font-size: 0.813rem;
}

.alert-success.custom-alert-icon .btn-close {
  color: #6A7287;
}

.alert-info.custom-alert-icon {
  border-inline-start: 0.313rem solid #0F65CD !important;
  color: #677788;
  background-color: #FFF;
  border: 1px solid #9CA1AF;
  font-size: 0.813rem;
}

.alert-info.custom-alert-icon .btn-close {
  color: #6A7287;
}

.alert-light.custom-alert-icon {
  border-inline-start: 0.313rem solid #E9EDF4 !important;
  color: #677788;
  background-color: #FFF;
  border: 1px solid #9CA1AF;
  font-size: 0.813rem;
}

.alert-light.custom-alert-icon .btn-close {
  color: #6A7287;
}

.alert-dark.custom-alert-icon {
  border-inline-start: 0.313rem solid #202C4B !important;
  color: #677788;
  background-color: #FFF;
  border: 1px solid #9CA1AF;
  font-size: 0.813rem;
}

.alert-dark.custom-alert-icon .btn-close {
  color: #6A7287;
}

.custom-alert1 {
  margin-block-end: 0;
  background-color: #FFF;
  border: 0;
  padding: 1.25rem;
  color: #6A7287;
}

.custom-alert1 p {
  margin-block-end: 2.5rem;
  color: #677788;
  font-size: 0.8rem;
}

.custom-alert1 .custom-alert-icon {
  font-size: 40px;
  margin-bottom: 0.85rem;
}

.custom-alert1 .custom-alert-icon i {
  font-size: 40px;
}

.custom-alert1 .btn-close {
  padding: 0;
  margin-block-end: 1rem;
}

.custom-alert1.alert-primary {
  border-block-start: 0.313rem solid #1f3b60;
}

.custom-alert1.alert-primary .custom-alert-icon {
  color: #1f3b60;
}

.custom-alert1.alert-secondary {
  border-block-start: 0.313rem solid #0e76bd;
}

.custom-alert1.alert-secondary .custom-alert-icon {
  color: #0e76bd;
}

.custom-alert1.alert-warning {
  border-block-start: 0.313rem solid #EAB300;
}

.custom-alert1.alert-warning .custom-alert-icon {
  color: #EAB300;
}

.custom-alert1.alert-danger {
  border-block-start: 0.313rem solid #E82646;
}

.custom-alert1.alert-danger .custom-alert-icon {
  color: #E82646;
}

.alert-img {
  display: flex;
  align-items: center;
}

.alert-img .avatar {
  border: 1px solid rgba(0, 0, 0, 0.1);
}

@media screen and (max-width: 400px) {
  .btn-close.custom-close {
    margin: 9px 9px 9px 0;
  }
}

.op-7 {
  opacity: 0.7;
}

.op-8 {
  opacity: 0.8;
}

.custom-popover {
  --bs-popover-max-width: 12.5rem;
  --bs-popover-border-color: #1f3b60;
  --bs-popover-header-bg: #1f3b60;
  --bs-popover-header-color: #FFF;
  --bs-popover-body-padding-x: 1rem;
  --bs-popover-body-padding-y: 0.5rem;
}

.popover {
  background-color: #FFF;
  border: 1px solid #9CA1AF;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  font-size: 0.8rem;
  border-radius: 4px;
  z-index: 999;
}

.popover .popover-header {
  background-color: #FFF;
  border-block-end: 1px solid #9CA1AF;
}

.popover .popover-body {
  color: #6A7287;
}

.popover.only-body {
  border-radius: 0.3rem;
}

.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.bs-popover-top>.popover-arrow::after,
.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.bs-popover-top>.popover-arrow::before {
  border-top-color: #E9EDF4;
}

.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.bs-popover-end>.popover-arrow::after,
.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.bs-popover-end>.popover-arrow::before {
  border-right-color: #E9EDF4;
}

.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.bs-popover-start>.popover-arrow::after,
.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.bs-popover-start>.popover-arrow::before {
  border-left-color: #E9EDF4;
}

.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.bs-popover-bottom>.popover-arrow::after,
.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.bs-popover-bottom>.popover-arrow::before,
.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.bs-popover-bottom .popover-header::before {
  border-bottom-color: #E9EDF4;
}

.header-primary .popover-header {
  background-color: #1f3b60;
  color: #FFF;
}

.header-primary.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.header-primary.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
  border-bottom-color: #1f3b60;
}

.header-secondary .popover-header {
  background-color: #0e76bd;
  color: #FFF;
}

.header-secondary.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.header-secondary.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
  border-bottom-color: #0e76bd;
}

.header-warning .popover-header {
  background-color: #EAB300;
  color: #FFF;
}

.header-warning.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.header-warning.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
  border-bottom-color: #EAB300;
}

.header-info .popover-header {
  background-color: #0F65CD;
  color: #FFF;
}

.header-info.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.header-info.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
  border-bottom-color: #0F65CD;
}

.header-success .popover-header {
  background-color: #1ABE17;
  color: #FFF;
}

.header-success.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.header-success.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
  border-bottom-color: #1ABE17;
}

.header-danger .popover-header {
  background-color: #E82646;
  color: #FFF;
}

.header-danger.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.header-danger.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
  border-bottom-color: #E82646;
}

.popover-primary.popover {
  border: 1px solid #1f3b60;
}

.popover-primary.popover .popover-header {
  background-color: #1f3b60;
  border-block-end: 1px solid rgba(255, 255, 255, 0.1);
  color: #FFF;
  border-radius: 0.3rem 0.3rem 0 0;
}

.popover-primary.popover .popover-body {
  background-color: #1f3b60;
  color: #FFF;
  border-radius: 0 0 0.3rem 0.3rem;
}

.popover-primary.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-primary.bs-popover-top>.popover-arrow::after,
.popover-primary.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-primary.bs-popover-top>.popover-arrow::before {
  border-top-color: #1f3b60;
}

.popover-primary.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-primary.bs-popover-end>.popover-arrow::after,
.popover-primary.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-primary.bs-popover-end>.popover-arrow::before {
  border-right-color: #1f3b60;
}

.popover-primary.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-primary.bs-popover-start>.popover-arrow::after,
.popover-primary.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-primary.bs-popover-start>.popover-arrow::before {
  border-left-color: #1f3b60;
}

.popover-primary.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-primary.bs-popover-bottom>.popover-arrow::after,
.popover-primary.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-primary.bs-popover-bottom>.popover-arrow::before,
.popover-primary.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-primary.bs-popover-bottom .popover-header::before {
  border-bottom-color: #1f3b60;
}

.popover-secondary.popover {
  border: 1px solid #0e76bd;
}

.popover-secondary.popover .popover-header {
  background-color: #0e76bd;
  border-block-end: 1px solid rgba(255, 255, 255, 0.1);
  color: #FFF;
  border-radius: 0.3rem 0.3rem 0 0;
}

.popover-secondary.popover .popover-body {
  background-color: #0e76bd;
  color: #FFF;
  border-radius: 0 0 0.3rem 0.3rem;
}

.popover-secondary.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-secondary.bs-popover-top>.popover-arrow::after,
.popover-secondary.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-secondary.bs-popover-top>.popover-arrow::before {
  border-top-color: #0e76bd;
}

.popover-secondary.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-secondary.bs-popover-end>.popover-arrow::after,
.popover-secondary.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-secondary.bs-popover-end>.popover-arrow::before {
  border-right-color: #0e76bd;
}

.popover-secondary.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-secondary.bs-popover-start>.popover-arrow::after,
.popover-secondary.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-secondary.bs-popover-start>.popover-arrow::before {
  border-left-color: #0e76bd;
}

.popover-secondary.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-secondary.bs-popover-bottom>.popover-arrow::after,
.popover-secondary.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-secondary.bs-popover-bottom>.popover-arrow::before,
.popover-secondary.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-secondary.bs-popover-bottom .popover-header::before {
  border-bottom-color: #0e76bd;
}

.popover-warning.popover {
  border: 1px solid #EAB300;
}

.popover-warning.popover .popover-header {
  background-color: #EAB300;
  border-block-end: 1px solid rgba(255, 255, 255, 0.1);
  color: #FFF;
  border-radius: 0.3rem 0.3rem 0 0;
}

.popover-warning.popover .popover-body {
  background-color: #EAB300;
  color: #FFF;
  border-radius: 0 0 0.3rem 0.3rem;
}

.popover-warning.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-warning.bs-popover-top>.popover-arrow::after,
.popover-warning.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-warning.bs-popover-top>.popover-arrow::before {
  border-top-color: #EAB300;
}

.popover-warning.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-warning.bs-popover-end>.popover-arrow::after,
.popover-warning.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-warning.bs-popover-end>.popover-arrow::before {
  border-right-color: #EAB300;
}

.popover-warning.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-warning.bs-popover-start>.popover-arrow::after,
.popover-warning.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-warning.bs-popover-start>.popover-arrow::before {
  border-left-color: #EAB300;
}

.popover-warning.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-warning.bs-popover-bottom>.popover-arrow::after,
.popover-warning.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-warning.bs-popover-bottom>.popover-arrow::before,
.popover-warning.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-warning.bs-popover-bottom .popover-header::before {
  border-bottom-color: #EAB300;
}

.popover-info.popover {
  border: 1px solid #0F65CD;
}

.popover-info.popover .popover-header {
  background-color: #0F65CD;
  border-block-end: 1px solid rgba(255, 255, 255, 0.1);
  color: #FFF;
  border-radius: 0.3rem 0.3rem 0 0;
}

.popover-info.popover .popover-body {
  background-color: #0F65CD;
  color: #FFF;
  border-radius: 0 0 0.3rem 0.3rem;
}

.popover-info.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-info.bs-popover-top>.popover-arrow::after,
.popover-info.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-info.bs-popover-top>.popover-arrow::before {
  border-top-color: #0F65CD;
}

.popover-info.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-info.bs-popover-end>.popover-arrow::after,
.popover-info.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-info.bs-popover-end>.popover-arrow::before {
  border-right-color: #0F65CD;
}

.popover-info.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-info.bs-popover-start>.popover-arrow::after,
.popover-info.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-info.bs-popover-start>.popover-arrow::before {
  border-left-color: #0F65CD;
}

.popover-info.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-info.bs-popover-bottom>.popover-arrow::after,
.popover-info.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-info.bs-popover-bottom>.popover-arrow::before,
.popover-info.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-info.bs-popover-bottom .popover-header::before {
  border-bottom-color: #0F65CD;
}

.popover-success.popover {
  border: 1px solid #1ABE17;
}

.popover-success.popover .popover-header {
  background-color: #1ABE17;
  border-block-end: 1px solid rgba(255, 255, 255, 0.1);
  color: #FFF;
  border-radius: 0.3rem 0.3rem 0 0;
}

.popover-success.popover .popover-body {
  background-color: #1ABE17;
  color: #FFF;
  border-radius: 0 0 0.3rem 0.3rem;
}

.popover-success.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-success.bs-popover-top>.popover-arrow::after,
.popover-success.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-success.bs-popover-top>.popover-arrow::before {
  border-top-color: #1ABE17;
}

.popover-success.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-success.bs-popover-end>.popover-arrow::after,
.popover-success.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-success.bs-popover-end>.popover-arrow::before {
  border-right-color: #1ABE17;
}

.popover-success.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-success.bs-popover-start>.popover-arrow::after,
.popover-success.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-success.bs-popover-start>.popover-arrow::before {
  border-left-color: #1ABE17;
}

.popover-success.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-success.bs-popover-bottom>.popover-arrow::after,
.popover-success.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-success.bs-popover-bottom>.popover-arrow::before,
.popover-success.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-success.bs-popover-bottom .popover-header::before {
  border-bottom-color: #1ABE17;
}

.popover-danger.popover {
  border: 1px solid #E82646;
}

.popover-danger.popover .popover-header {
  background-color: #E82646;
  border-block-end: 1px solid rgba(255, 255, 255, 0.1);
  color: #FFF;
  border-radius: 0.3rem 0.3rem 0 0;
}

.popover-danger.popover .popover-body {
  background-color: #E82646;
  color: #FFF;
  border-radius: 0 0 0.3rem 0.3rem;
}

.popover-danger.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-danger.bs-popover-top>.popover-arrow::after,
.popover-danger.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-danger.bs-popover-top>.popover-arrow::before {
  border-top-color: #E82646;
}

.popover-danger.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-danger.bs-popover-end>.popover-arrow::after,
.popover-danger.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-danger.bs-popover-end>.popover-arrow::before {
  border-right-color: #E82646;
}

.popover-danger.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-danger.bs-popover-start>.popover-arrow::after,
.popover-danger.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-danger.bs-popover-start>.popover-arrow::before {
  border-left-color: #E82646;
}

.popover-danger.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-danger.bs-popover-bottom>.popover-arrow::after,
.popover-danger.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-danger.bs-popover-bottom>.popover-arrow::before,
.popover-danger.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-danger.bs-popover-bottom .popover-header::before {
  border-bottom-color: #E82646;
}

.popover-purple.popover {
  border: 1px solid #4A00E5;
}

.popover-purple.popover .popover-header {
  background-color: #4A00E5;
  border-block-end: 1px solid rgba(255, 255, 255, 0.1);
  color: #FFF;
  border-radius: 0.3rem 0.3rem 0 0;
}

.popover-purple.popover .popover-body {
  background-color: #4A00E5;
  color: #FFF;
  border-radius: 0 0 0.3rem 0.3rem;
}

.popover-purple.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-purple.bs-popover-top>.popover-arrow::after,
.popover-purple.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-purple.bs-popover-top>.popover-arrow::before {
  border-top-color: #4A00E5;
}

.popover-purple.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-purple.bs-popover-end>.popover-arrow::after,
.popover-purple.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-purple.bs-popover-end>.popover-arrow::before {
  border-right-color: #4A00E5;
}

.popover-purple.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-purple.bs-popover-start>.popover-arrow::after,
.popover-purple.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-purple.bs-popover-start>.popover-arrow::before {
  border-left-color: #4A00E5;
}

.popover-purple.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-purple.bs-popover-bottom>.popover-arrow::after,
.popover-purple.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-purple.bs-popover-bottom>.popover-arrow::before,
.popover-purple.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-purple.bs-popover-bottom .popover-header::before {
  border-bottom-color: #4A00E5;
}

.popover-teal.popover {
  border: 1px solid #02a8b5;
}

.popover-teal.popover .popover-header {
  background-color: #02a8b5;
  border-block-end: 1px solid rgba(255, 255, 255, 0.1);
  color: #FFF;
  border-radius: 0.3rem 0.3rem 0 0;
}

.popover-teal.popover .popover-body {
  background-color: #02a8b5;
  color: #FFF;
  border-radius: 0 0 0.3rem 0.3rem;
}

.popover-teal.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-teal.bs-popover-top>.popover-arrow::after,
.popover-teal.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-teal.bs-popover-top>.popover-arrow::before {
  border-top-color: #02a8b5;
}

.popover-teal.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-teal.bs-popover-end>.popover-arrow::after,
.popover-teal.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-teal.bs-popover-end>.popover-arrow::before {
  border-right-color: #02a8b5;
}

.popover-teal.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-teal.bs-popover-start>.popover-arrow::after,
.popover-teal.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-teal.bs-popover-start>.popover-arrow::before {
  border-left-color: #02a8b5;
}

.popover-teal.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-teal.bs-popover-bottom>.popover-arrow::after,
.popover-teal.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-teal.bs-popover-bottom>.popover-arrow::before,
.popover-teal.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-teal.bs-popover-bottom .popover-header::before {
  border-bottom-color: #02a8b5;
}

.popover-primary-light.popover {
  border: 1px solid rgba(31, 59, 96, 0.1);
}

.popover-primary-light.popover .popover-header {
  background-color: rgba(31, 59, 96, 0.1);
  border-block-end: 1px solid rgba(31, 59, 96, 0.1);
  color: #1f3b60;
  border-radius: 0;
}

.popover-primary-light.popover .popover-body {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

.popover-primary-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-primary-light.bs-popover-top>.popover-arrow::after,
.popover-primary-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-primary-light.bs-popover-top>.popover-arrow::before {
  border-top-color: rgba(31, 59, 96, 0.1);
}

.popover-primary-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-primary-light.bs-popover-end>.popover-arrow::after,
.popover-primary-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-primary-light.bs-popover-end>.popover-arrow::before {
  border-right-color: rgba(31, 59, 96, 0.1);
}

.popover-primary-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-primary-light.bs-popover-start>.popover-arrow::after,
.popover-primary-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-primary-light.bs-popover-start>.popover-arrow::before {
  border-left-color: rgba(31, 59, 96, 0.1);
}

.popover-primary-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-primary-light.bs-popover-bottom>.popover-arrow::after,
.popover-primary-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-primary-light.bs-popover-bottom>.popover-arrow::before,
.popover-primary-light.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-primary-light.bs-popover-bottom .popover-header::before {
  border-bottom-color: rgba(31, 59, 96, 0.1);
}

.popover-secondary-light.popover {
  border: 1px solid rgba(14, 118, 189, 0.1);
}

.popover-secondary-light.popover .popover-header {
  background-color: rgba(14, 118, 189, 0.1);
  border-block-end: 1px solid rgba(14, 118, 189, 0.1);
  color: #0e76bd;
  border-radius: 0;
}

.popover-secondary-light.popover .popover-body {
  background-color: rgba(14, 118, 189, 0.1);
  color: #0e76bd;
}

.popover-secondary-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-secondary-light.bs-popover-top>.popover-arrow::after,
.popover-secondary-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-secondary-light.bs-popover-top>.popover-arrow::before {
  border-top-color: rgba(var(--secondary-rgb), 0.1);
}

.popover-secondary-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-secondary-light.bs-popover-end>.popover-arrow::after,
.popover-secondary-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-secondary-light.bs-popover-end>.popover-arrow::before {
  border-right-color: rgba(14, 118, 189, 0.1);
}

.popover-secondary-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-secondary-light.bs-popover-start>.popover-arrow::after,
.popover-secondary-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-secondary-light.bs-popover-start>.popover-arrow::before {
  border-left-color: rgba(var(--secondary-rgb), 0.1);
}

.popover-secondary-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-secondary-light.bs-popover-bottom>.popover-arrow::after,
.popover-secondary-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-secondary-light.bs-popover-bottom>.popover-arrow::before,
.popover-secondary-light.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-secondary-light.bs-popover-bottom .popover-header::before {
  border-bottom-color: rgba(var(--secondary-rgb), 0.1);
}

.popover-warning-light.popover {
  border: 1px solid rgba(234, 179, 0, 0.1);
}

.popover-warning-light.popover .popover-header {
  background-color: rgba(234, 179, 0, 0.1);
  border-block-end: 1px solid rgba(234, 179, 0, 0.1);
  color: #EAB300;
  border-radius: 0;
}

.popover-warning-light.popover .popover-body {
  background-color: rgba(234, 179, 0, 0.1);
  color: #EAB300;
}

.popover-warning-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-warning-light.bs-popover-top>.popover-arrow::after,
.popover-warning-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-warning-light.bs-popover-top>.popover-arrow::before {
  border-top-color: rgba(234, 179, 0, 0.1);
}

.popover-warning-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-warning-light.bs-popover-end>.popover-arrow::after,
.popover-warning-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-warning-light.bs-popover-end>.popover-arrow::before {
  border-right-color: rgba(234, 179, 0, 0.1);
}

.popover-warning-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-warning-light.bs-popover-start>.popover-arrow::after,
.popover-warning-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-warning-light.bs-popover-start>.popover-arrow::before {
  border-left-color: rgba(234, 179, 0, 0.1);
}

.popover-warning-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-warning-light.bs-popover-bottom>.popover-arrow::after,
.popover-warning-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-warning-light.bs-popover-bottom>.popover-arrow::before,
.popover-warning-light.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-warning-light.bs-popover-bottom .popover-header::before {
  border-bottom-color: rgba(234, 179, 0, 0.1);
}

.popover-info-light.popover {
  border: 1px solid rgba(15, 101, 205, 0.1);
}

.popover-info-light.popover .popover-header {
  background-color: rgba(15, 101, 205, 0.1);
  border-block-end: 1px solid rgba(15, 101, 205, 0.1);
  color: #0F65CD;
  border-radius: 0;
}

.popover-info-light.popover .popover-body {
  background-color: rgba(15, 101, 205, 0.1);
  color: #0F65CD;
}

.popover-info-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-info-light.bs-popover-top>.popover-arrow::after,
.popover-info-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-info-light.bs-popover-top>.popover-arrow::before {
  border-top-color: rgba(15, 101, 205, 0.1);
}

.popover-info-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-info-light.bs-popover-end>.popover-arrow::after,
.popover-info-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-info-light.bs-popover-end>.popover-arrow::before {
  border-right-color: rgba(15, 101, 205, 0.1);
}

.popover-info-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-info-light.bs-popover-start>.popover-arrow::after,
.popover-info-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-info-light.bs-popover-start>.popover-arrow::before {
  border-left-color: rgba(15, 101, 205, 0.1);
}

.popover-info-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-info-light.bs-popover-bottom>.popover-arrow::after,
.popover-info-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-info-light.bs-popover-bottom>.popover-arrow::before,
.popover-info-light.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-info-light.bs-popover-bottom .popover-header::before {
  border-bottom-color: rgba(15, 101, 205, 0.1);
}

.popover-success-light.popover {
  border: 1px solid rgba(26, 190, 23, 0.1);
}

.popover-success-light.popover .popover-header {
  background-color: rgba(26, 190, 23, 0.1);
  border-block-end: 1px solid rgba(26, 190, 23, 0.1);
  color: #1ABE17;
  border-radius: 0;
}

.popover-success-light.popover .popover-body {
  background-color: rgba(26, 190, 23, 0.1);
  color: #1ABE17;
}

.popover-success-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-success-light.bs-popover-top>.popover-arrow::after,
.popover-success-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-success-light.bs-popover-top>.popover-arrow::before {
  border-top-color: rgba(26, 190, 23, 0.1);
}

.popover-success-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-success-light.bs-popover-end>.popover-arrow::after,
.popover-success-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-success-light.bs-popover-end>.popover-arrow::before {
  border-right-color: rgba(26, 190, 23, 0.1);
}

.popover-success-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-success-light.bs-popover-start>.popover-arrow::after,
.popover-success-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-success-light.bs-popover-start>.popover-arrow::before {
  border-left-color: rgba(26, 190, 23, 0.1);
}

.popover-success-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-success-light.bs-popover-bottom>.popover-arrow::after,
.popover-success-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-success-light.bs-popover-bottom>.popover-arrow::before,
.popover-success-light.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-success-light.bs-popover-bottom .popover-header::before {
  border-bottom-color: rgba(26, 190, 23, 0.1);
}

.popover-danger-light.popover {
  border: 1px solid rgba(232, 38, 70, 0.1);
}

.popover-danger-light.popover .popover-header {
  background-color: rgba(232, 38, 70, 0.1);
  border-block-end: 1px solid rgba(232, 38, 70, 0.1);
  color: #E82646;
  border-radius: 0;
}

.popover-danger-light.popover .popover-body {
  background-color: rgba(232, 38, 70, 0.1);
  color: #E82646;
}

.popover-danger-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-danger-light.bs-popover-top>.popover-arrow::after,
.popover-danger-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-danger-light.bs-popover-top>.popover-arrow::before {
  border-top-color: rgba(232, 38, 70, 0.1);
}

.popover-danger-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-danger-light.bs-popover-end>.popover-arrow::after,
.popover-danger-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-danger-light.bs-popover-end>.popover-arrow::before {
  border-right-color: rgba(232, 38, 70, 0.1);
}

.popover-danger-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-danger-light.bs-popover-start>.popover-arrow::after,
.popover-danger-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-danger-light.bs-popover-start>.popover-arrow::before {
  border-left-color: rgba(232, 38, 70, 0.1);
}

.popover-danger-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-danger-light.bs-popover-bottom>.popover-arrow::after,
.popover-danger-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-danger-light.bs-popover-bottom>.popover-arrow::before,
.popover-danger-light.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-danger-light.bs-popover-bottom .popover-header::before {
  border-bottom-color: rgba(232, 38, 70, 0.1);
}

.popover-purple-light.popover {
  border: 1px solid rgba(var(--purple-rgb), 0.1);
}

.popover-purple-light.popover .popover-header {
  background-color: rgba(var(--purple-rgb), 0.1);
  border-block-end: 1px solid rgba(var(--purple-rgb), 0.1);
  color: #4A00E5;
  border-radius: 0;
}

.popover-purple-light.popover .popover-body {
  background-color: rgba(var(--purple-rgb), 0.1);
  color: #4A00E5;
}

.popover-purple-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-purple-light.bs-popover-top>.popover-arrow::after,
.popover-purple-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-purple-light.bs-popover-top>.popover-arrow::before {
  border-top-color: rgba(var(--purple-rgb), 0.1);
}

.popover-purple-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-purple-light.bs-popover-end>.popover-arrow::after,
.popover-purple-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-purple-light.bs-popover-end>.popover-arrow::before {
  border-right-color: rgba(var(--purple-rgb), 0.1);
}

.popover-purple-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-purple-light.bs-popover-start>.popover-arrow::after,
.popover-purple-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-purple-light.bs-popover-start>.popover-arrow::before {
  border-left-color: rgba(var(--purple-rgb), 0.1);
}

.popover-purple-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-purple-light.bs-popover-bottom>.popover-arrow::after,
.popover-purple-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-purple-light.bs-popover-bottom>.popover-arrow::before,
.popover-purple-light.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-purple-light.bs-popover-bottom .popover-header::before {
  border-bottom-color: rgba(var(--purple-rgb), 0.1);
}

.popover-teal-light.popover {
  border: 1px solid rgba(var(--teal-rgb), 0.1);
}

.popover-teal-light.popover .popover-header {
  background-color: rgba(var(--teal-rgb), 0.1);
  border-block-end: 1px solid rgba(var(--teal-rgb), 0.1);
  color: #02a8b5;
  border-radius: 0;
}

.popover-teal-light.popover .popover-body {
  background-color: rgba(var(--teal-rgb), 0.1);
  color: #02a8b5;
}

.popover-teal-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,
.popover-teal-light.bs-popover-top>.popover-arrow::after,
.popover-teal-light.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,
.popover-teal-light.bs-popover-top>.popover-arrow::before {
  border-top-color: rgba(var(--teal-rgb), 0.1);
}

.popover-teal-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,
.popover-teal-light.bs-popover-end>.popover-arrow::after,
.popover-teal-light.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,
.popover-teal-light.bs-popover-end>.popover-arrow::before {
  border-right-color: rgba(var(--teal-rgb), 0.1);
}

.popover-teal-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,
.popover-teal-light.bs-popover-start>.popover-arrow::after,
.popover-teal-light.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,
.popover-teal-light.bs-popover-start>.popover-arrow::before {
  border-left-color: rgba(var(--teal-rgb), 0.1);
}

.popover-teal-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,
.popover-teal-light.bs-popover-bottom>.popover-arrow::after,
.popover-teal-light.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,
.popover-teal-light.bs-popover-bottom>.popover-arrow::before,
.popover-teal-light.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,
.popover-teal-light.bs-popover-bottom .popover-header::before {
  border-bottom-color: rgba(var(--teal-rgb), 0.1);
}

.popover-dark {
  background-color: #0C1C29;
  border-color: #0C1C29;
}

.popover-dark .popover-header {
  background-color: rgba(255, 255, 255, 0.1) !important;
  border-color: #0C1C29;
}

.popover-dark.bs-popover-auto[data-popper-placement^=top] .popover-arrow::before,
.popover-dark.bs-popover-top .popover-arrow::after {
  border-top-color: #0C1C29;
}

.popover-dark.bs-popover-auto[data-popper-placement^=bottom] .popover-arrow::before,
.popover-dark.bs-popover-bottom .popover-arrow::after {
  border-bottom-color: #0C1C29;
}

.popover-dark.bs-popover-auto[data-popper-placement^=left] .popover-arrow::before,
.popover-dark.bs-popover-left .popover-arrow::after {
  border-left-color: #0C1C29;
}

.popover-dark.bs-popover-auto[data-popper-placement^=right] .popover-arrow::before,
.popover-dark.bs-popover-right .popover-arrow::after {
  border-right-color: #0C1C29;
}

.form-control {
  border-color: #E9EDF4;
  color: #202C4B;
  background-color: #ffffff;
  font-size: 14px;
  font-weight: 400;
  line-height: 1.6;
  border-radius: 5px;
  padding: 0.5rem 0.625rem;
  height: 38px;
  transition: all 0.5s;
}

.form-control:focus {
  box-shadow: none;
  border-color: #E9EDF4;
}

textarea.form-control {
  min-height: 38px;
  height: auto;
}

textarea {
  resize: none;
}

.form-control[type=file] {
  padding: 0.3rem 0.5rem;
}

.form-control[type=file].form-control-sm {
  padding: 0.25rem 0.5rem !important;
}

.form-control[type=file].form-control-lg {
  padding: 0.5rem 1rem !important;
}

.form-text {
  color: #677788;
}

.form-control-light {
  background-color: #E9EDF4;
  border: 0;
}

.form-control-light:focus {
  background-color: #E9EDF4;
}

.form-control-primary {
  background-color: rgba(31, 59, 96, 0.1);
  border: 0;
  color: #1f3b60;
}

.form-control-primary:focus {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

.form-input-color {
  height: 2.25rem;
  width: 2.25rem;
  border-radius: 4px;
  overflow: hidden;
  padding: 0;
}

.form-floating>.form-control-plaintext~label,
.form-floating>.form-control:focus~label,
.form-floating>.form-control:not(:placeholder-shown)~label,
.form-floating>.form-select~label {
  color: #677788;
}

.form-floating>.form-control:not(:placeholder-shown)~label::after {
  background-color: transparent;
}

.form-select {
  background-color: #ffffff;
  border: 1px solid #E9EDF4;
  color: #6A7287;
  font-size: 14px;
  height: 38px;
  box-sizing: border-box;
}

.form-select:not([multiple]):not([size]) {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
  background-size: 1.25rem;
  line-height: 1;
  height: 38px;
  box-sizing: border-box;
}

.form-select option {
  background-color: #FFF;
  padding: 0.35rem 0.75rem;
  border-radius: 0.25rem;
  margin-block-end: 0.25rem;
}

.form-select option:last-child {
  margin-block-end: 0;
}

.form-select option:checked {
  background-color: rgba(var(#1f3b60), 0.2);
  color: #1f3b60;
}

.form-select option:select {
  background-color: rgba(var(#1f3b60), 0.2);
  color: #1f3b60;
}

.form-select option:hover {
  background-color: rgba(var(#1f3b60), 0.2);
  color: #1f3b60;
}

.form-select option:focus {
  background-color: rgba(var(#1f3b60), 0.2);
  color: #1f3b60;
}

.form-check-input {
  width: 0.9rem;
  height: 0.9rem;
  background-color: #FFF;
  border: 1px solid #E9EDF4;
}

.form-check-input:checked {
  background-color: #1f3b60;
  border-color: #1f3b60;
}

.form-check-input.form-checked-outline:checked {
  background-color: transparent;
  border-color: #1f3b60;
}

.form-check-input.form-checked-secondary:checked {
  background-color: #0e76bd;
  border-color: #0e76bd;
}

.form-check-input.form-checked-warning:checked {
  background-color: #EAB300;
  border-color: #EAB300;
}

.form-check-input.form-checked-info:checked {
  background-color: #0F65CD;
  border-color: #0F65CD;
}

.form-check-input.form-checked-success:checked {
  background-color: #1ABE17;
  border-color: #1ABE17;
}

.form-check-input.form-checked-danger:checked {
  background-color: #E82646;
  border-color: #E82646;
}

.form-check-input.form-checked-light:checked {
  background-color: #E9EDF4;
  border-color: #E9EDF4;
}

.form-check-input.form-checked-dark:checked {
  background-color: #202C4B;
  border-color: #202C4B;
}

.form-check-input:focus {
  box-shadow: none;
}

.form-checked-outline:checked[type=checkbox] {
  background-image: none;
  position: relative;
  background-color: transparent;
}

.form-checked-outline:checked[type=checkbox]:before {
  content: "\f633";
  font-family: bootstrap-icons !important;
  position: absolute;
  color: #1f3b60;
  width: 0.625rem;
  height: 0.625rem;
  inset-block-start: -1px;
  inset-inline-start: 0px;
  font-size: 0.688rem;
}

.form-checked-outline:checked[type=checkbox].form-checked-secondary:before {
  color: #0e76bd;
}

.form-checked-outline:checked[type=checkbox].form-checked-warning:before {
  color: #EAB300;
}

.form-checked-outline:checked[type=checkbox].form-checked-info:before {
  color: #0F65CD;
}

.form-checked-outline:checked[type=checkbox].form-checked-success:before {
  color: #1ABE17;
}

.form-checked-outline:checked[type=checkbox].form-checked-danger:before {
  color: #E82646;
}

.form-checked-outline:checked[type=checkbox].form-checked-light:before {
  color: #E9EDF4;
}

.form-checked-outline:checked[type=checkbox].form-checked-dark:before {
  color: #202C4B;
}

.form-checked-outline:checked[type=radio] {
  background-image: none;
  position: relative;
  background-color: transparent;
}

.form-checked-outline:checked[type=radio]:before {
  content: "\f309";
  font-family: bootstrap-icons !important;
  position: absolute;
  color: #1f3b60;
  width: 0.625rem;
  height: 0.625rem;
  inset-block-start: -1.13rem;
  inset-inline-start: -0.6rem;
  font-size: 2rem;
}

.form-checked-outline:checked[type=radio].form-checked-secondary:before {
  color: #0e76bd;
}

.form-checked-outline:checked[type=radio].form-checked-warning:before {
  color: #EAB300;
}

.form-checked-outline:checked[type=radio].form-checked-info:before {
  color: #0F65CD;
}

.form-checked-outline:checked[type=radio].form-checked-success:before {
  color: #1ABE17;
}

.form-checked-outline:checked[type=radio].form-checked-danger:before {
  color: #E82646;
}

.form-checked-outline:checked[type=radio].form-checked-light:before {
  color: #E9EDF4;
}

.form-checked-outline:checked[type=radio].form-checked-dark:before {
  color: #202C4B;
}

fieldset:disabled .btn {
  color: #FFF;
  background-color: #1f3b60;
  border-color: #1f3b60;
}

.form-select:focus {
  border-color: rgba(var(#1f3b60), 0.5);
  outline: 0;
  box-shadow: none;
}

.btn-check:focus+.btn,
.btn:focus {
  background-color: none;
  border-color: none;
  outline: 0;
}

.btn-check:active+.btn:focus,
.btn-check:checked+.btn:focus,
.btn.active:focus,
.btn.show:focus,
.btn:active:focus {
  box-shadow: none;
}

.form-control:disabled,
.form-select:disabled {
  background-color: #E9EDF4;
  color: #6A7287;
}

.form-control-plaintext {
  color: #6A7287;
}

.form-control::-webkit-file-upload-button {
  color: #6A7287;
  background-color: #f7f8f9;
}

.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
  background-color: #f7f8f9;
}

.form-control:focus {
  color: #202C4B;
}

.form-control:focus::-webkit-input-placeholder,
.form-control:focus::placeholder {
  color: #9CA1AF;
  padding-inline-start: 0.3rem;
  transition: padding-inline-start 0.1s ease-in;
}

.form-control::-webkit-input-placeholder {
  color: #9CA1AF;
  padding-inline-start: 0px;
  transition: padding-inline-start 0.1s ease-in;
}

.form-control:-moz-placeholder {
  color: #9CA1AF;
}

.form-control::-moz-placeholder {
  color: #9CA1AF;
}

.form-control:-ms-input-placeholder {
  color: #9CA1AF;
}

.form-control-sm,
input.form-control-sm {
  font-size: 0.8125rem;
  padding: 0.25rem 0.625rem;
  height: 32px !important;
  min-height: 32px !important;
  line-height: 1.5;
  box-sizing: border-box;
}

/* Match the small select to `.form-control-sm` above so the two line up when
   they sit side by side in a filter row or modal. */
.form-select-sm,
select.form-select-sm,
.form-select:not([multiple]):not([size]).form-select-sm {
  font-size: 0.8125rem;
  padding: 0.25rem 2.25rem 0.25rem 0.625rem;
  height: 32px !important;
  min-height: 32px !important;
  line-height: 1.5;
  box-sizing: border-box;
}

/* Input Group Small Elements (32px) */
.input-group-sm>.form-control,
.input-group-sm>.form-select,
.input-group-sm>.input-group-text,
.input-group-sm>.btn {
  height: 32px !important;
  min-height: 32px !important;
  padding-top: 0.25rem !important;
  padding-bottom: 0.25rem !important;
  font-size: 0.8125rem !important;
  line-height: 1.5 !important;
  box-sizing: border-box;
}

.form-control-lg {
  font-size: 1rem;
  padding: 0.5rem 1rem;
}

.form-check-md .form-check-input {
  width: 1.15rem;
  height: 1.15rem;
}

.form-check-md.form-switch .form-check-input {
  width: 2.25rem;
}

.form-check-md label {
  margin-inline-start: 0.5rem;
  font-size: 0.95rem;
  margin-block-start: 3px;
}

.form-check-lg .form-check-input {
  width: 1.35rem;
  height: 1.35rem;
}

.form-check-lg.form-switch .form-check-input {
  width: 2.5rem;
}

.form-check-lg label {
  margin-inline-start: 0.5rem;
  font-size: 1rem;
  margin-block-start: 3px;
}

.label-primary {
  background: #1f3b60;
  color: #FFF;
}

.label-secondary {
  background: #0e76bd;
  color: #FFF;
}

.label-warning {
  background: #EAB300;
  color: #FFF;
}

.label-info {
  background: #0F65CD;
  color: #FFF;
}

.label-success {
  background: #1ABE17;
  color: #FFF;
}

.label-danger {
  background: #E82646;
  color: #FFF;
}

.label-light {
  background: #E9EDF4;
  color: #FFF;
}

.label-dark {
  background: #202C4B;
  color: #FFF;
}

.form-floating>.form-control-plaintext::placeholder,
.form-floating>.form-control::placeholder {
  color: transparent !important;
}

.form-floating>.form-control,
.form-floating>.form-control-plaintext,
.form-floating>.form-select {
  height: calc(3.5rem - 4px);
}

.form-floating.floating-primary label {
  color: #1f3b60;
  opacity: 1;
}

.form-floating.floating-primary input {
  border: 1px solid #1f3b60;
}

.form-floating.floating-primary>.form-control:focus~label {
  color: #1f3b60 !important;
}

.form-floating.floating-secondary label {
  color: #0e76bd;
  opacity: 1;
}

.form-floating.floating-secondary input {
  border: 1px solid #0e76bd;
}

.form-floating.floating-secondary>.form-control:focus~label {
  color: #0e76bd !important;
}

.form-floating.floating-warning label {
  color: #EAB300;
  opacity: 1;
}

.form-floating.floating-warning input {
  border: 1px solid #EAB300;
}

.form-floating.floating-warning>.form-control:focus~label {
  color: #EAB300 !important;
}

.form-floating.floating-info label {
  color: #0F65CD;
  opacity: 1;
}

.form-floating.floating-info input {
  border: 1px solid #0F65CD;
}

.form-floating.floating-info>.form-control:focus~label {
  color: #0F65CD !important;
}

.form-floating.floating-success label {
  color: #1ABE17;
  opacity: 1;
}

.form-floating.floating-success input {
  border: 1px solid #1ABE17;
}

.form-floating.floating-success>.form-control:focus~label {
  color: #1ABE17 !important;
}

.form-floating.floating-danger label {
  color: #E82646;
  opacity: 1;
}

.form-floating.floating-danger input {
  border: 1px solid #E82646;
}

.form-floating.floating-danger>.form-control:focus~label {
  color: #E82646 !important;
}

.form-floating>.form-control-plaintext~label::after,
.form-floating>.form-control:focus~label::after,
.form-floating>.form-control:not(:placeholder-shown)~label::after,
.form-floating>.form-select~label::after {
  background-color: #FFF;
  border-radius: 4px;
}

.form-control.is-valid:focus,
.was-validated .form-control:valid:focus {
  border-color: #1ABE17;
  box-shadow: none;
}

.form-control.is-valid,
.was-validated .form-control:valid {
  border-color: #1ABE17;
}

.form-control-color {
  width: 1.75rem;
  height: 1.75rem;
  overflow: hidden;
  padding: 0;
}

.bootstrap-tagsinput {
  border-color: #E9EDF4;
  color: #6A7287;
  background-color: #ffffff;
  font-size: 15px;
  font-weight: 400;
  border-radius: 5px;
  padding: 0.45rem 0.625rem;
  height: 38px;
  box-shadow: none;
  overflow-y: auto;
  width: 100%;
}

.bootstrap-tagsinput .tag {
  background: #E9EDF4;
  border-radius: 5px;
  padding: 0 5px;
  font-size: 14px;
  color: #515B73;
  display: inline-flex;
  align-items: center;
}

.bootstrap-tagsinput .tag span::after {
  color: #202C4B;
}

.bootstrap-tagsinput .tag [data-role=remove]:hover {
  box-shadow: none;
}

.bootstrap-tagsinput .tag [data-role=remove]:hover:active {
  box-shadow: none;
}

[dir=rtl] [type=email],
[dir=rtl] [type=number],
[dir=rtl] [type=tel],
[dir=rtl] [type=url] {
  direction: rtl;
}

.form-select.is-invalid:not([multiple]):not([size]) {
  padding-right: 1.125rem;
  background-size: 16px 28px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}

input[type=range]::-webkit-slider-runnable-track {
  background-color: #E9EDF4;
}

[dir=rtl] .form-checked-outline:checked[type=checkbox]:before {
  inset-inline-start: 1px;
}

.form-check {
  min-height: inherit !important;
}

.col-form-label-lg,
.col-form-label-sm,
.col-form-label {
  font-weight: 600;
}

.col-form-label {
  font-size: 15px;
  font-weight: 500;
  color: #202C4B;
}

.form-label {
  font-size: 14px;
  font-weight: 500;
  color: #202C4B;
}

[data-theme-mode=dark] input[type=week]::-webkit-calendar-picker-indicator,
[data-theme-mode=dark] input[type=month]::-webkit-calendar-picker-indicator,
[data-theme-mode=dark] input[type=date]::-webkit-calendar-picker-indicator,
[data-theme-mode=dark] input[type=datetime-local]::-webkit-calendar-picker-indicator,
[data-theme-mode=dark] input[type=time]::-webkit-calendar-picker-indicator {
  filter: invert(1);
}

[dir=rtl] input[type=week],
[dir=rtl] input[type=month],
[dir=rtl] input[type=date],
[dir=rtl] input[type=datetime-local],
[dir=rtl] input[type=time] {
  text-align: end;
}

.input-group-text {
  border-color: #E9EDF4;
}

/**
Form help
 */
.form-help {
  display: inline-flex;
  font-weight: 700;
  align-items: center;
  justify-content: center;
  width: 1.125rem;
  height: 1.125rem;
  font-size: 0.75rem;
  color: #FFF;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  user-select: none;
  background: #0e76bd;
  border-radius: 4px;
}

.form-help:hover,
.form-help[aria-describedby] {
  color: #FFF;
  background: #1f3b60;
}

.input-icon {
  position: relative;
}

.input-icon .form-control:not(:last-child),
.input-icon .form-select:not(:last-child) {
  padding-right: 2.5rem;
}

/* Input Group */
.input-group-link {
  font-size: 12px;
}

.input-group-flat:focus-within {
  border-radius: 4px;
}

.input-group-flat:focus-within .form-control,
.input-group-flat:focus-within .input-group-text {
  border-color: #E9EDF4 !important;
}

.input-group-flat .form-control:focus {
  box-shadow: none;
}

.input-group-flat .form-control:not(:last-child) {
  border-right: 0;
}

.input-group-flat .form-control:not(:first-child) {
  border-left: 0;
}

.input-group-flat .input-group-text:first-child {
  padding-right: 0;
}

.input-group-flat .input-group-text:last-child {
  padding-left: 0;
}

.custom-radio {
  display: block;
  position: relative;
  padding-left: 25px;
  cursor: pointer;
  font-size: 15px;
  color: #515B73;
  text-transform: capitalize;
}

.custom-radio input {
  position: absolute;
  opacity: 0;
  cursor: pointer;
  height: 0;
  width: 0;
}

.custom-radio input:checked~.checkmark {
  border-color: #1f3b60;
  background: #1f3b60;
}

.custom-radio input:checked~.checkmark::after {
  opacity: 1;
  visibility: visible;
}

.custom-radio .checkmark {
  width: 20px;
  height: 20px;
  border: 1px solid #E9EDF4;
  border-radius: 50%;
  -webkit-transition: all 0.3s;
  -ms-transition: all 0.3s;
  transition: all 0.3s;
  margin: 0;
  position: absolute;
  top: 0;
  left: 0;
}

.custom-radio .checkmark::after {
  content: "";
  width: 8px;
  height: 8px;
  background-color: #FFF;
  opacity: 0;
  visibility: hidden;
  border-radius: 50%;
  -webkit-transition: all 0.3s;
  -ms-transition: all 0.3s;
  transition: all 0.3s;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.check-radio-group {
  flex-wrap: wrap;
  row-gap: 10px;
}

.check-radio-group .custom-radio {
  margin-right: 15px;
}

.check {
  display: block;
  margin: 0;
  padding: 0;
  width: 0;
  height: 0;
  visibility: hidden;
  opacity: 0;
  pointer-events: none;
  position: absolute;
}

.checktoggle {
  background-color: rgba(115, 103, 240, 0.2);
  border-radius: 12px;
  cursor: pointer;
  display: block;
  font-size: 0;
  height: 24px;
  margin-bottom: 0;
  position: relative;
  width: 46px;
}

.status-toggle.modal-status label {
  height: 16px;
  width: 30px;
  background-color: #FFF;
  border: 1px solid #E9EDF4;
  margin-bottom: 0;
}

.check:checked+.checktoggle {
  background-color: #FFF;
}

.checktoggle:after {
  content: " ";
  display: block;
  transform: translate(2px, -50%);
  width: 10px;
  height: 10px;
  background-color: #B5B9C3;
  transition: left 300ms ease, transform 300ms ease;
  border-radius: 50%;
  transform: translate(2px, -50%);
  -webkit-transform: translate(4px, -50%);
  -ms-transform: translate(2px, -50%);
  position: absolute;
  top: 50%;
  left: 0;
}

.check:checked+.checktoggle:after {
  background-color: #1f3b60;
  left: 100%;
  transform: translate(calc(-90% - 4px), -50%);
}

.input-icon-addon {
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 2.5rem;
  color: #515B73;
  pointer-events: none;
  font-size: 1.2em;
}

.input-icon-addon:last-child {
  right: 0;
  left: auto;
}

.input-icon-addon .spinner-border-sm {
  border-width: 1px;
}

.input-icon-start .form-control {
  padding-left: 28px;
}

.icon-addon {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 2rem;
  color: #515B73;
  pointer-events: none;
  font-size: 1.2em;
}

.form-wrap .form-wrap-icon {
  position: relative;
}

.form-wrap .form-wrap-icon i {
  font-size: 18px;
  position: absolute;
  top: 50%;
  right: 15px;
  transform: translateY(-50%);
}

.toggle-password {
  cursor: pointer;
  width: 30px;
  height: 30px;
  color: #202C4B;
  font-size: 18px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  border-radius: 50%;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  position: absolute;
  top: 50%;
  right: 10px;
}

.toggle-password:hover {
  color: #1f3b60;
}

.pass-group {
  position: relative;
}

.toggle-passwords,
.toggle-passworda {
  cursor: pointer;
  width: 30px;
  height: 30px;
  color: #202C4B;
  font-size: 18px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  border-radius: 50%;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  position: absolute;
  top: 50%;
  right: 10px;
}

.toggle-passwords:hover,
.toggle-passworda:hover {
  color: #1f3b60;
}

.form-wrap-checkbox {
  position: relative;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  justify-content: space-between;
  -webkit-justify-content: space-between;
  -ms-flex-pack: space-between;
}

.form-wrap-checkbox .check {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  cursor: pointer;
  color: #202C4B;
  margin-bottom: 0;
}

.form-wrap-checkbox .check input {
  display: none;
}

.form-wrap-checkbox .check input:checked+.box {
  background: #0e76bd;
}

.form-wrap-checkbox .check input:checked+.box:after {
  top: 0;
}

.form-wrap-checkbox .check .box {
  width: 20px;
  height: 20px;
  display: block;
  margin-right: 8px;
  transition: all 1.1s cubic-bezier(0.19, 1, 0.22, 1);
  background: #FBFBFD;
  position: relative;
  overflow: hidden;
  cursor: pointer;
  border: 1px solid #E9EDF4;
  border-radius: 5px;
}

.form-wrap-checkbox .check .box:after {
  width: 12px;
  height: 6px;
  content: "";
  position: absolute;
  border-left: 2px solid;
  border-bottom: 2px solid;
  border-color: #FFF;
  transform: rotate(-45deg) translate3d(0, 0, 0);
  transform-origin: center center;
  transition: all 1.1s cubic-bezier(0.19, 1, 0.22, 1);
  left: 0;
  right: 0;
  top: 200%;
  bottom: 3px;
  margin: auto;
}

.form-sort .select2-container--default .select2-selection--single .select2-selection__rendered {
  padding-left: 35px;
}

.form-sort span.select2-container.select2-container--default.select2-container--open {
  z-index: 99;
}

.form-sort {
  position: relative;
  width: 149px;
  height: 40px;
}

.form-sort .info-img {
  position: absolute;
  top: 52%;
  z-index: 100;
  width: 16px;
  height: 16px;
  left: 0;
  margin-left: 10px;
  color: #6A7287;
  transform: translateY(-50%);
  line-height: normal;
}

@media (max-width: 575.98px) {
  .form-sort {
    margin-top: 24px;
  }
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
.filter-input {
  cursor: text;
  font-weight: 500;
  color: var(--heading);
}

/*-----------------
	Multi-column field grid (add/edit Student, Staff, Teacher forms):
	`.row-cols-xxl-5.row-cols-md-6` only sets a column count from md up,
	so its field columns had no width rule at all below md and fell back
	to unstyled flex-shrink sizing, cramming several fields onto one line.
	Give them the missing base of one field per row below md, matching
	every other stacked form section on the same page.
-----------------*/
@media (max-width: 767.98px) {
  .row.row-cols-xxl-5.row-cols-md-6>[class*=col-] {
    flex: 0 0 100%;
    max-width: 100%;
  }
}

.filter-input::placeholder {
  color: var(--muted);
  font-weight: 500;
}

.notes-tog i {
  transform: rotate(180deg);
}

.notes-tog.active i {
  transform: rotate(0deg);
}

.section-bulk-wrap .form-sort {
  position: relative;
}

.section-bulk-widget {
  transition: 0.6s all;
}

.section-notes-dashboard {
  display: none;
  transition: 0.6s all;
}

.notes-tog i {
  transition: 0.5s all;
}

.notes-tag-left .notes-tog i {
  transform: rotate(360deg);
  transition: 0.5s all;
}

.budgeted-role-notes {
  width: 100%;
}

.notes-summernote .card {
  margin-bottom: 0 !important;
}

.dropdown-item:active {
  background: transparent;
}

.notes-summernote p {
  color: #6A7287;
  font-size: 15px;
  font-weight: 400;
}

.budget-role-notes .owl-carousel .owl-nav {
  margin: 0;
  position: absolute;
}

.custom-pagination .paginations {
  align-items: center;
}

.custom-pagination .paginations span {
  display: flex;
  align-items: center;
  color: #6A7287;
  width: 16px;
  height: 16px;
}

.custom-pagination .paginations span .fa-chevron-left {
  margin-right: 8px;
}

.custom-pagination .paginations .page-wrap li a {
  margin-right: 8px;
  border-radius: 85px;
  color: #6A7287;
  font-size: 14px;
  font-weight: 500;
  display: flex;
  width: 30px;
  height: 30px;
  padding: 5px;
  justify-content: center;
  align-items: center;
}

.custom-pagination .paginations .page-wrap li a.active {
  background: #1f3b60;
  color: #FFF;
}

.custom-pagination .paginations .page-wrap li :hover {
  background: #1f3b60;
  color: #FFF;
  transition: 0.3s all;
}

.accordion-button:after {
  display: none;
}

.todo-accordion .accordion-item {
  background: transparent;
  margin-bottom: 15px;
  border: 0;
  padding: 0;
}

.line-clamb-2 {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
}

.notes-tog {
  bottom: -15px;
}

.input-blocks input[type=text].datetimepicker {
  padding-left: 35px;
}

.iti__country-list {
  z-index: 101;
}

.todo-inbox-check {
  margin-right: 15px;
}

.todo-inbox-check .checkboxs {
  margin-bottom: 0;
  display: flex;
  align-items: center;
}

.todo-inbox-check .checkboxs input~.checkmarks {
  border-color: rgba(145, 158, 171, 0.3);
  border-radius: 5px;
  margin-top: 0;
  width: 20px;
  height: 20px;
}

.todo-inbox-check .checkboxs input:checked~.checkmarks {
  border-color: #1f3b60;
  background-color: #1f3b60;
}

.todo-accordion .accordion-button:after {
  display: none;
}

.todo-calendar {
  position: relative;
}

.todo-calendar .input-groupicon.calender-input input {
  padding-left: 10px;
}

.todo-calendar .calender-input {
  position: relative;
}

.todo-calendar .calender-input .info-img {
  position: absolute;
  top: 11px;
  z-index: 100;
  width: 16px;
  height: 16px;
  right: 5px !important;
  color: #6A7287;
}

.todo-accordion .accordion-item {
  background: transparent;
  margin-bottom: 30px;
}

.todo-accordion .accordion-item .accordion-header {
  cursor: pointer;
}

.todo-accordion .accordion-item .accordion-header .accordion-button {
  background: transparent;
  padding: 0;
}

.todo-accordion .accordion-item .accordion-header .accordion-button.collapsed .todo-today-content {
  margin-bottom: 0;
}

.todo-accordion .accordion-item .accordion-header .todo-drop-down a span i {
  color: #6A7287;
}

.todo-accordion .accordion-item .accordion-body {
  padding: 0;
}

.section-bulk-wrap .form-sort .ti-filter {
  position: absolute;
  left: 10px;
  top: 50%;
  transform: translateY(-50%);
  z-index: 100;
}

.input-block.todo-inbox-check {
  margin-bottom: 0;
  position: relative;
}

.section-bulk-widget .nav-pills .nav-link:hover {
  background: #202C4B;
  color: #FFF !important;
}

.section-bulk-widget .nav-pills .nav-link.active {
  background: #202C4B;
  color: #FFF !important;
}

.square-rotate {
  transform: rotate(45deg);
}

.todo-strike-content .strike-info h4 {
  text-decoration: line-through;
}

.todo-strike-content .strike-info p {
  text-decoration: line-through;
}

caption {
  color: #677788;
}

.table-active {
  --bs-table-color-state: var(--default-text-color);
}

.table {
  color: #6A7287;
  border-color: #9CA1AF;
  margin-block-end: 0;
}

.table tbody tr {
  border-color: #E9EDF4;
}

.table tbody tr th {
  font-weight: 500;
}

.table th,
.table td {
  padding: 12px 20px;
  vertical-align: middle;
  font-size: 14px;
  white-space: nowrap;
}

.table thead tr {
  border-color: #E9EDF4;
}

.table thead tr th {
  font-weight: 500;
  border-color: #E9EDF4;
  font-size: 14px;
}

.table.table-sm> :not(caption)>*>* {
  padding: 0.3rem;
}

.table.table-dark {
  color: #F0F2F7;
  border-color: rgba(255, 255, 255, 0.1);
}

.table .thead-primary th {
  background-color: #1f3b60;
  color: #FFF;
}

.table .thead-secondary th {
  background-color: #0e76bd;
  color: #FFF;
}

.table .thead-info th {
  background-color: #0F65CD;
  color: #FFF;
}

.table .thead-warning th {
  background-color: #EAB300;
  color: #FFF;
}

.table .thead-danger th {
  background-color: #E82646;
  color: #FFF;
}

.table .thead-success th {
  background-color: #1ABE17;
  color: #FFF;
}

.table .thead-dark th {
  background-color: #202C4B;
  color: #FFF;
}

.table .thead-light th {
  background-color: #F2F4F8;
  color: #202C4B;
}

.table.table-primary {
  background-color: #FFF;
  color: #000;
  --bs-table-color-state: $black;
  border-color: var(--bs-table-border-color);
  --bs-table-bg: rgba(var(--primary-rgb), 0.1);
  --bs-table-border-color: rgba(var(--primary-rgb), 0.05);
  --bs-table-striped-bg: rgba(var(--primary-rgb), 0.2);
  --bs-table-active-bg: rgba(var(--primary-rgb), 0.2);
  --bs-table-hover-bg: rgba(var(--primary-rgb), 0.2);
}

.table.table-primary.table-striped>tbody>tr:nth-of-type(odd)>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--primary-rgb), 0.2);
  color: #000;
}

.table.table-primary.table.table-hover>tbody>tr:hover>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--primary-rgb), 0.4);
  color: #FFF;
}

.table.table-primary .table-active {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgb(var(--primary-rgb));
  color: #FFF;
}

.table.table-secondary {
  background-color: #FFF;
  color: #000;
  --bs-table-color-state: $black;
  border-color: var(--bs-table-border-color);
  --bs-table-bg: rgba(var(--secondary-rgb), 0.1);
  --bs-table-border-color: rgba(var(--secondary-rgb), 0.05);
  --bs-table-striped-bg: rgba(var(--secondary-rgb), 0.2);
  --bs-table-active-bg: rgba(var(--secondary-rgb), 0.2);
  --bs-table-hover-bg: rgba(var(--secondary-rgb), 0.2);
}

.table.table-secondary.table-striped>tbody>tr:nth-of-type(odd)>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--secondary-rgb), 0.2);
  color: #000;
}

.table.table-secondary.table.table-hover>tbody>tr:hover>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--secondary-rgb), 0.4);
  color: #FFF;
}

.table.table-secondary .table-active {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgb(var(--secondary-rgb));
  color: #FFF;
}

.table.table-warning {
  background-color: #FFF;
  color: #000;
  --bs-table-color-state: $black;
  border-color: var(--bs-table-border-color);
  --bs-table-bg: rgba(var(--warning-rgb), 0.1);
  --bs-table-border-color: rgba(var(--warning-rgb), 0.05);
  --bs-table-striped-bg: rgba(var(--warning-rgb), 0.2);
  --bs-table-active-bg: rgba(var(--warning-rgb), 0.2);
  --bs-table-hover-bg: rgba(var(--warning-rgb), 0.2);
}

.table.table-warning.table-striped>tbody>tr:nth-of-type(odd)>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--warning-rgb), 0.2);
  color: #000;
}

.table.table-warning.table.table-hover>tbody>tr:hover>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--warning-rgb), 0.4);
  color: #FFF;
}

.table.table-warning .table-active {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgb(var(--warning-rgb));
  color: #FFF;
}

.table.table-success {
  background-color: #FFF;
  color: #000;
  --bs-table-color-state: $black;
  border-color: var(--bs-table-border-color);
  --bs-table-bg: rgba(var(--success-rgb), 0.1);
  --bs-table-border-color: rgba(var(--success-rgb), 0.05);
  --bs-table-striped-bg: rgba(var(--success-rgb), 0.2);
  --bs-table-active-bg: rgba(var(--success-rgb), 0.2);
  --bs-table-hover-bg: rgba(var(--success-rgb), 0.2);
}

.table.table-success.table-striped>tbody>tr:nth-of-type(odd)>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--success-rgb), 0.2);
  color: #000;
}

.table.table-success.table.table-hover>tbody>tr:hover>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--success-rgb), 0.4);
  color: #FFF;
}

.table.table-success .table-active {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgb(var(--success-rgb));
  color: #FFF;
}

.table.table-danger {
  background-color: #FFF;
  color: #000;
  --bs-table-color-state: $black;
  border-color: var(--bs-table-border-color);
  --bs-table-bg: rgba(var(--danger-rgb), 0.1);
  --bs-table-border-color: rgba(var(--danger-rgb), 0.05);
  --bs-table-striped-bg: rgba(var(--danger-rgb), 0.2);
  --bs-table-active-bg: rgba(var(--danger-rgb), 0.2);
  --bs-table-hover-bg: rgba(var(--danger-rgb), 0.2);
}

.table.table-danger.table-striped>tbody>tr:nth-of-type(odd)>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--danger-rgb), 0.2);
  color: #000;
}

.table.table-danger.table.table-hover>tbody>tr:hover>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--danger-rgb), 0.4);
  color: #FFF;
}

.table.table-danger .table-active {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgb(var(--danger-rgb));
  color: #FFF;
}

.table.table-info {
  background-color: #FFF;
  color: #000;
  --bs-table-color-state: $black;
  border-color: var(--bs-table-border-color);
  --bs-table-bg: rgba(var(--info-rgb), 0.1);
  --bs-table-border-color: rgba(var(--info-rgb), 0.05);
  --bs-table-striped-bg: rgba(var(--info-rgb), 0.2);
  --bs-table-active-bg: rgba(var(--info-rgb), 0.2);
  --bs-table-hover-bg: rgba(var(--info-rgb), 0.2);
}

.table.table-info.table-striped>tbody>tr:nth-of-type(odd)>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--info-rgb), 0.2);
  color: #000;
}

.table.table-info.table.table-hover>tbody>tr:hover>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--info-rgb), 0.4);
  color: #FFF;
}

.table.table-info .table-active {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgb(var(--info-rgb));
  color: #FFF;
}

.table.table-light {
  background-color: #FFF;
  color: #000;
  --bs-table-color-state: $black;
  border-color: var(--bs-table-border-color);
  --bs-table-bg: rgba(var(--light-rgb), 0.1);
  --bs-table-border-color: rgba(var(--light-rgb), 0.05);
  --bs-table-striped-bg: rgba(var(--light-rgb), 0.2);
  --bs-table-active-bg: rgba(var(--light-rgb), 0.2);
  --bs-table-hover-bg: rgba(var(--light-rgb), 0.2);
}

.table.table-light.table-striped>tbody>tr:nth-of-type(odd)>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--light-rgb), 0.2);
  color: #000;
}

.table.table-light.table.table-hover>tbody>tr:hover>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--light-rgb), 0.4);
  color: #FFF;
}

.table.table-light .table-active {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgb(var(--light-rgb));
  color: #FFF;
}

.table.table-dark {
  background-color: #FFF;
  color: #000;
  --bs-table-color-state: $black;
  border-color: var(--bs-table-border-color);
  --bs-table-bg: rgba(var(--dark-rgb), 0.1);
  --bs-table-border-color: rgba(var(--dark-rgb), 0.05);
  --bs-table-striped-bg: rgba(var(--dark-rgb), 0.2);
  --bs-table-active-bg: rgba(var(--dark-rgb), 0.2);
  --bs-table-hover-bg: rgba(var(--dark-rgb), 0.2);
}

.table.table-dark.table-striped>tbody>tr:nth-of-type(odd)>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--dark-rgb), 0.2);
  color: #000;
}

.table.table-dark.table.table-hover>tbody>tr:hover>* {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgba(var(--dark-rgb), 0.4);
  color: #FFF;
}

.table.table-dark .table-active {
  background-color: var(--bs-table-accent-bg);
  --bs-table-accent-bg: rgb(var(--dark-rgb));
  color: #FFF;
}

.table.table-bordered.border-primary tbody,
.table.table-bordered.border-primary td,
.table.table-bordered.border-primary tfoot,
.table.table-bordered.border-primary th,
.table.table-bordered.border-primary thead,
.table.table-bordered.border-primary tr {
  border-color: rgba(31, 59, 96, 0.1);
}

.table.table-bordered.border-info tbody,
.table.table-bordered.border-info td,
.table.table-bordered.border-info tfoot,
.table.table-bordered.border-info th,
.table.table-bordered.border-info thead,
.table.table-bordered.border-info tr {
  border-color: rgba(15, 101, 205, 0.1);
}

.table.table-bordered.border-secondary tbody,
.table.table-bordered.border-secondary td,
.table.table-bordered.border-secondary tfoot,
.table.table-bordered.border-secondary th,
.table.table-bordered.border-secondary thead,
.table.table-bordered.border-secondary tr {
  border-color: rgba(14, 118, 189, 0.1);
}

.table.table-bordered.border-warning tbody,
.table.table-bordered.border-warning td,
.table.table-bordered.border-warning tfoot,
.table.table-bordered.border-warning th,
.table.table-bordered.border-warning thead,
.table.table-bordered.border-warning tr {
  border-color: rgba(234, 179, 0, 0.1);
}

.table.table-bordered.border-success tbody,
.table.table-bordered.border-success td,
.table.table-bordered.border-success tfoot,
.table.table-bordered.border-success th,
.table.table-bordered.border-success thead,
.table.table-bordered.border-success tr {
  border-color: rgba(26, 190, 23, 0.1);
}

.table.table-bordered.border-danger tbody,
.table.table-bordered.border-danger td,
.table.table-bordered.border-danger tfoot,
.table.table-bordered.border-danger th,
.table.table-bordered.border-danger thead,
.table.table-bordered.border-danger tr {
  border-color: rgba(232, 38, 70, 0.1);
}

.table.table-striped>tbody>tr:nth-of-type(odd)>* {
  --bs-table-accent-bg: rgba(var(--dark-rgb), 0.0125);
  color: #6A7287;
}

.table.table-striped-columns> :not(caption)>tr> :nth-child(2n) {
  --bs-table-accent-bg: rgba(var(--dark-rgb), 0.025);
  color: #6A7287;
}

.table tbody.table-group-divider {
  border-top: 1px solid #9CA1AF;
}

.table.table-hover>tbody>tr:hover>* {
  --bs-table-accent-bg: #f7f8f9;
  color: #6A7287;
}

.table .table-active {
  --bs-table-accent-bg: #E9EDF4;
  color: #6A7287;
}

.table thead.table-primary {
  background-color: #FFF;
  color: var(--bs-table-color);
  --bs-table-color-state: #000;
  --bs-table-color: #000;
  --bs-table-bg: rgba(var(--primary-rgb), 0.1);
  --bs-table-border-color: rgba(var(--primary-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--primary-rgb), 0.5);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--primary-rgb), 0.5);
  --bs-table-hover-bg: rgba(var(--primary-rgb), 0.5);
  color: var(--bs-table-color);
  border-color: var(--bs-table-border-color);
}

.table thead.table-secondary {
  background-color: #FFF;
  color: var(--bs-table-color);
  --bs-table-color-state: #000;
  --bs-table-color: #000;
  --bs-table-bg: rgba(var(--secondary-rgb), 0.1);
  --bs-table-border-color: rgba(var(--secondary-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--secondary-rgb), 0.5);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--secondary-rgb), 0.5);
  --bs-table-hover-bg: rgba(var(--secondary-rgb), 0.5);
  color: var(--bs-table-color);
  border-color: var(--bs-table-border-color);
}

.table thead.table-warning {
  background-color: #FFF;
  color: var(--bs-table-color);
  --bs-table-color-state: #000;
  --bs-table-color: #000;
  --bs-table-bg: rgba(var(--warning-rgb), 0.1);
  --bs-table-border-color: rgba(var(--warning-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--warning-rgb), 0.5);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--warning-rgb), 0.5);
  --bs-table-hover-bg: rgba(var(--warning-rgb), 0.5);
  color: var(--bs-table-color);
  border-color: var(--bs-table-border-color);
}

.table thead.table-success {
  background-color: #FFF;
  color: var(--bs-table-color);
  --bs-table-color-state: #000;
  --bs-table-color: #000;
  --bs-table-bg: rgba(var(--success-rgb), 0.1);
  --bs-table-border-color: rgba(var(--success-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--success-rgb), 0.5);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--success-rgb), 0.5);
  --bs-table-hover-bg: rgba(var(--success-rgb), 0.5);
  color: var(--bs-table-color);
  border-color: var(--bs-table-border-color);
}

.table thead.table-danger {
  background-color: #FFF;
  color: var(--bs-table-color);
  --bs-table-color-state: #000;
  --bs-table-color: #000;
  --bs-table-bg: rgba(var(--danger-rgb), 0.1);
  --bs-table-border-color: rgba(var(--danger-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--danger-rgb), 0.5);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--danger-rgb), 0.5);
  --bs-table-hover-bg: rgba(var(--danger-rgb), 0.5);
  color: var(--bs-table-color);
  border-color: var(--bs-table-border-color);
}

.table thead.table-info {
  background-color: #FFF;
  color: var(--bs-table-color);
  --bs-table-color-state: #000;
  --bs-table-color: #000;
  --bs-table-bg: rgba(var(--info-rgb), 0.1);
  --bs-table-border-color: rgba(var(--info-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--info-rgb), 0.5);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--info-rgb), 0.5);
  --bs-table-hover-bg: rgba(var(--info-rgb), 0.5);
  color: var(--bs-table-color);
  border-color: var(--bs-table-border-color);
}

.table thead.table-light {
  background-color: #FFF;
  color: var(--bs-table-color);
  --bs-table-color-state: #000;
  --bs-table-color: #000;
  --bs-table-bg: rgba(var(--light-rgb), 0.1);
  --bs-table-border-color: rgba(var(--light-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--light-rgb), 0.5);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--light-rgb), 0.5);
  --bs-table-hover-bg: rgba(var(--light-rgb), 0.5);
  color: var(--bs-table-color);
  border-color: var(--bs-table-border-color);
}

.table thead.table-dark {
  background-color: #FFF;
  color: var(--bs-table-color);
  --bs-table-color-state: #000;
  --bs-table-color: #000;
  --bs-table-bg: rgba(var(--dark-rgb), 0.1);
  --bs-table-border-color: rgba(var(--dark-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--dark-rgb), 0.5);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--dark-rgb), 0.5);
  --bs-table-hover-bg: rgba(var(--dark-rgb), 0.5);
  color: var(--bs-table-color);
  border-color: var(--bs-table-border-color);
}

.table tfoot {
  border-color: #E9EDF4;
}

.datanew tbody {
  border-top: 1px solid #E9EDF4;
}

.table-primary {
  --bs-table-color: #000;
  --bs-table-color-state: $black;
  --bs-table-bg: rgba(var(--primary-rgb), 0.1);
  --bs-table-border-color: rgba(var(--primary-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--primary-rgb), 0.3);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--primary-rgb), 0.3);
  --bs-table-active-color: #000;
  --bs-table-hover-bg: rgba(var(--primary-rgb), 0.3);
  --bs-table-hover-color: #000;
  color: #000;
  border-color: rgba(var(--primary-rgb), 0.1);
  background-color: #FFF;
}

.table-secondary {
  --bs-table-color: #000;
  --bs-table-color-state: $black;
  --bs-table-bg: rgba(var(--secondary-rgb), 0.1);
  --bs-table-border-color: rgba(var(--secondary-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--secondary-rgb), 0.3);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--secondary-rgb), 0.3);
  --bs-table-active-color: #000;
  --bs-table-hover-bg: rgba(var(--secondary-rgb), 0.3);
  --bs-table-hover-color: #000;
  color: #000;
  border-color: rgba(var(--secondary-rgb), 0.1);
  background-color: #FFF;
}

.table-warning {
  --bs-table-color: #000;
  --bs-table-color-state: $black;
  --bs-table-bg: rgba(var(--warning-rgb), 0.1);
  --bs-table-border-color: rgba(var(--warning-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--warning-rgb), 0.3);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--warning-rgb), 0.3);
  --bs-table-active-color: #000;
  --bs-table-hover-bg: rgba(var(--warning-rgb), 0.3);
  --bs-table-hover-color: #000;
  color: #000;
  border-color: rgba(var(--warning-rgb), 0.1);
  background-color: #FFF;
}

.table-success {
  --bs-table-color: #000;
  --bs-table-color-state: $black;
  --bs-table-bg: rgba(var(--success-rgb), 0.1);
  --bs-table-border-color: rgba(var(--success-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--success-rgb), 0.3);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--success-rgb), 0.3);
  --bs-table-active-color: #000;
  --bs-table-hover-bg: rgba(var(--success-rgb), 0.3);
  --bs-table-hover-color: #000;
  color: #000;
  border-color: rgba(var(--success-rgb), 0.1);
  background-color: #FFF;
}

.table-info {
  --bs-table-color: #000;
  --bs-table-color-state: $black;
  --bs-table-bg: rgba(var(--info-rgb), 0.1);
  --bs-table-border-color: rgba(var(--info-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--info-rgb), 0.3);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--info-rgb), 0.3);
  --bs-table-active-color: #000;
  --bs-table-hover-bg: rgba(var(--info-rgb), 0.3);
  --bs-table-hover-color: #000;
  color: #000;
  border-color: rgba(var(--info-rgb), 0.1);
  background-color: #FFF;
}

.table-danger {
  --bs-table-color: #000;
  --bs-table-color-state: $black;
  --bs-table-bg: rgba(var(--danger-rgb), 0.1);
  --bs-table-border-color: rgba(var(--danger-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--danger-rgb), 0.3);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--danger-rgb), 0.3);
  --bs-table-active-color: #000;
  --bs-table-hover-bg: rgba(var(--danger-rgb), 0.3);
  --bs-table-hover-color: #000;
  color: #000;
  border-color: rgba(var(--danger-rgb), 0.1);
  background-color: #FFF;
}

.table-dark {
  --bs-table-color: #000;
  --bs-table-color-state: $black;
  --bs-table-bg: rgba(var(--dark-rgb), 0.1);
  --bs-table-border-color: rgba(var(--dark-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--dark-rgb), 0.3);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--dark-rgb), 0.3);
  --bs-table-active-color: #000;
  --bs-table-hover-bg: rgba(var(--dark-rgb), 0.3);
  --bs-table-hover-color: #000;
  color: #000;
  border-color: rgba(var(--dark-rgb), 0.1);
  background-color: #FFF;
}

.table-light {
  --bs-table-color: #000;
  --bs-table-color-state: $black;
  --bs-table-bg: rgba(var(--light-rgb), 0.1);
  --bs-table-border-color: rgba(var(--light-rgb), 0.1);
  --bs-table-striped-bg: rgba(var(--light-rgb), 0.3);
  --bs-table-striped-color: #000;
  --bs-table-active-bg: rgba(var(--light-rgb), 0.3);
  --bs-table-active-color: #000;
  --bs-table-hover-bg: rgba(var(--light-rgb), 0.3);
  --bs-table-hover-color: #000;
  color: #000;
  border-color: rgba(var(--light-rgb), 0.1);
  background-color: #FFF;
}

[data-theme-mode=dark] .table-dark {
  border-color: rgba(0, 0, 0, 0.025);
}

[dir=rtl] .table {
  margin-inline-end: 1px;
}

.invoice-table {
  border: 1px solid #E9EDF4;
  border-radius: 5px;
  margin: 20px 0;
}

.invoice-table thead th {
  border-bottom: 1px solid #E9EDF4;
}

.invoice-table thead th:first-child {
  width: 80%;
}

.invoice-table tbody tr:last-child td {
  border-bottom: 0;
}

.invoice-table .delete-invoive-list {
  width: 38px;
  height: 38px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #FDE9ED;
  color: #E82646;
  border-radius: 5px;
  font-size: 16px;
}

.invoice-product-table {
  border-top: 1px solid #E9EDF4;
}

.table {
  margin: 0;
}

.table tbody tr td {
  color: #515B73;
  font-size: 14px;
}

.table tbody tr td .product-img img {
  border: 0;
}

.table tbody tr.active {
  border-bottom: 0;
}

.table tbody tr.active td {
  font-size: 18px;
  color: #515B73;
  font-weight: 600;
  border-bottom: 0;
}

.table tbody tr .checkboxs .checkmarks {
  top: 50%;
  transform: translateY(-50%);
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
}

.new tbody tr td {
  border-bottom: none;
}

.dataTables_filter+.dataTables_filter {
  display: none;
}

.productimgname {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
}

.productimgname a {
  color: #0e76bd;
  font-weight: 500;
}

.table .input-blocks input[type=text] {
  height: 40px;
}

.table {
  margin: 0;
}

.table tbody tr td {
  color: #515B73;
}

.table tbody tr td .product-img img {
  border: 0;
}

.table tbody tr td a {
  color: #202C4B;
}

.table tbody tr td a.product-img {
  margin-right: 5px;
  flex-shrink: 0;
}

.table tbody tr td a .info-img {
  margin-right: 8px;
  width: 16px;
  height: 16px;
}

.table tbody tr td a:hover {
  color: #1f3b60;
}

.table tbody tr.active {
  border-bottom: 0;
}

.table tbody tr.active td {
  font-size: 18px;
  color: #515B73;
  font-weight: 600;
  border-bottom: 0;
}

table tbody .productimgname {
  min-width: 200px;
}

table tbody .productimgname a.stock-img.product-img {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  margin-right: 8px;
}

table tbody .productimgname a.stock-img.product-img img {
  width: 50px;
  height: 50px;
  max-width: 100%;
  margin-right: 0;
}

table.table-bordered thead tr th p {
  margin-bottom: 0;
}

.custom-table {
  border-radius: 5px;
}

.custom-table table thead tr th {
  background: #E6E8EB;
  color: #202C4B;
  font-size: 14px;
  border: 0;
  padding: 12px 20px;
}

.custom-table table tbody tr td {
  border: 0;
  padding: 12px 20px;
}

.custom-table table tbody tr td .detail-link {
  font-weight: 600;
  color: #202C4B;
  text-decoration: underline;
}

.custom-table table tbody tr td .detail-link:hover {
  color: #1f3b60;
}

.table tbody tr td a.delete-icon {
  font-size: 16px;
  color: #E82646;
}

.table tbody tr td a.delete-icon:hover {
  color: rgb(198.0125, 20.9875, 50.1875);
}

.custom-table {
  overflow: hidden;
}

.custom-table .table-responsive tr th {
  border: 0;
  border-bottom: 1px solid #E9EDF4;
}

.custom-table .table-responsive tr.report-first-head th {
  border-bottom: 0;
}

.custom-table .table-responsive tr td {
  border: 0;
  border-bottom: 1px solid #E9EDF4;
}

.custom-table .table-responsive tr td input.form-control {
  min-width: 200px;
}

.custom-table .table-responsive tr:last-child td {
  border-bottom: 0;
}

.table tr td .attendance-range {
  width: 8px;
  height: 15px;
  border-radius: 5px;
  display: block;
}

.table.table-dark> :not(caption)>*>* {
  background-color: #0B0D0E !important;
  border-color: rgba(255, 255, 255, 0.1);
  color: #fff;
}

.table> :not(caption)>.table-success>* {
  background-color: #1ABE17;
  border-color: #1ABE17;
  color: #fff;
}

.table> :not(caption)>.table-info>* {
  background-color: #0F65CD;
  border-color: #0F65CD;
  color: #fff;
}

.table> :not(caption)>.table-warning>* {
  background-color: #EAB300;
  border-color: #EAB300;
  color: #fff;
}

.table> :not(caption)>.table-danger>* {
  background-color: #E82646;
  border-color: #E82646;
  color: #fff;
}

.border-primary.table-bordered thead tr th,
.border-primary.table-bordered tbody tr td {
  border: 1px solid #1f3b60 !important;
}

.border-success.table-bordered thead tr th,
.border-success.table-bordered tbody tr td {
  border: 1px solid #1ABE17 !important;
}

.accordion-button {
  background-color: #FFF;
  color: #6A7287;
  padding: 0.75rem 1rem;
  font-size: 0.85rem;
  font-weight: 500;
}

.accordion-button:not(.collapsed) {
  color: #6A7287;
  background-color: #f7f8f9;
  box-shadow: none;
}

.accordion-button:focus {
  border-color: rgba(31, 59, 96, 0.3);
  box-shadow: none;
}

.accordion-button:after,
.accordion-button:not(.collapsed)::after {
  background-image: none;
}

.accordion-button:after {
  content: "\f078";
  font-family: "Fontawesome";
  font-size: 12px;
  line-height: 1;
  background-color: #FFF;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 3.125rem;
  color: #6A7287;
}

.accordion-body {
  padding: 1rem;
  font-size: 0.8125rem;
  color: #677788;
}

.accordion-item {
  color: #6A7287;
  background-color: #FFF;
  border: 1px solid #E9EDF4;
}

.accordions-items-seperate .accordion-item:not(:first-of-type) {
  margin-block-start: 1rem;
}

.accordions-items-seperate .accordion-item {
  border-block-start: 1px solid #E9EDF4;
  border-radius: 4px;
  overflow: hidden;
}

.accordion-item:last-of-type {
  border-bottom-right-radius: 0.35rem;
  border-bottom-left-radius: 0.35rem;
}

.accordion-item:first-of-type {
  border-top-left-radius: 0.35rem;
  border-top-right-radius: 0.35rem;
}

.accordion.accordion-primary .accordion-button {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

.accordion.accordion-primary .accordion-button:after {
  background-color: #1f3b60;
  color: #FFF;
}

.accordion.accordion-primary .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-primary .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-secondary .accordion-button {
  background-color: rgba(14, 118, 189, 0.1);
  color: #0e76bd;
}

.accordion.accordion-secondary .accordion-button:after {
  background-color: #0e76bd;
  color: #FFF;
}

.accordion.accordion-secondary .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-secondary .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-success .accordion-button {
  background-color: rgba(26, 190, 23, 0.1);
  color: #1ABE17;
}

.accordion.accordion-success .accordion-button:after {
  background-color: #1ABE17;
  color: #FFF;
}

.accordion.accordion-success .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-success .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-danger .accordion-button {
  background-color: rgba(232, 38, 70, 0.1);
  color: #E82646;
}

.accordion.accordion-danger .accordion-button:after {
  background-color: #E82646;
  color: #FFF;
}

.accordion.accordion-danger .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-danger .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-warning .accordion-button {
  background-color: rgba(234, 179, 0, 0.1);
  color: #EAB300;
}

.accordion.accordion-warning .accordion-button:after {
  background-color: #EAB300;
  color: #FFF;
}

.accordion.accordion-warning .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-warning .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-info .accordion-button {
  background-color: rgba(15, 101, 205, 0.1);
  color: #0F65CD;
}

.accordion.accordion-info .accordion-button:after {
  background-color: #0F65CD;
  color: #FFF;
}

.accordion.accordion-info .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-info .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-solid-primary .accordion-button {
  background-color: #1f3b60;
  color: #FFF;
}

.accordion.accordion-solid-primary .accordion-button:after {
  background-color: #FFF;
  color: #1f3b60;
}

.accordion.accordion-solid-primary .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-solid-primary .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-solid-secondary .accordion-button {
  background-color: #0e76bd;
  color: #FFF;
}

.accordion.accordion-solid-secondary .accordion-button:after {
  background-color: #FFF;
  color: #0e76bd;
}

.accordion.accordion-solid-secondary .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-solid-secondary .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-solid-success .accordion-button {
  background-color: #1ABE17;
  color: #FFF;
}

.accordion.accordion-solid-success .accordion-button:after {
  background-color: #FFF;
  color: #1ABE17;
}

.accordion.accordion-solid-success .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-solid-success .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-solid-danger .accordion-button {
  background-color: #E82646;
  color: #FFF;
}

.accordion.accordion-solid-danger .accordion-button:after {
  background-color: #FFF;
  color: #E82646;
}

.accordion.accordion-solid-danger .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-solid-danger .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-solid-warning .accordion-button {
  background-color: #EAB300;
  color: #FFF;
}

.accordion.accordion-solid-warning .accordion-button:after {
  background-color: #FFF;
  color: #EAB300;
}

.accordion.accordion-solid-warning .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-solid-warning .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-solid-info .accordion-button {
  background-color: #0F65CD;
  color: #FFF;
}

.accordion.accordion-solid-info .accordion-button:after {
  background-color: #FFF;
  color: #0F65CD;
}

.accordion.accordion-solid-info .accordion-button.collapsed {
  background-color: #FFF;
  color: #6A7287;
}

.accordion.accordion-solid-info .accordion-button.collapsed:after {
  background-color: #f7f8f9;
  color: #6A7287;
}

.accordion.accordion-border-primary .accordion-item {
  border: 1px solid #1f3b60;
}

.accordion.accordion-border-primary .accordion-button {
  background-color: #FFF;
  color: #1f3b60;
  border-block-end: 0px;
}

.accordion.accordion-border-primary .accordion-button:after {
  background-color: #FFF;
  color: #1f3b60;
  border: 1px solid #1f3b60;
}

.accordion.accordion-border-primary .accordion-button:not(.collapsed) {
  border-block-end: 1px solid #1f3b60;
}

.accordion.accordion-border-secondary .accordion-item {
  border: 1px solid #0e76bd;
}

.accordion.accordion-border-secondary .accordion-button {
  background-color: #FFF;
  color: #0e76bd;
  border-block-end: 0px;
}

.accordion.accordion-border-secondary .accordion-button:after {
  background-color: #FFF;
  color: #0e76bd;
  border: 1px solid #0e76bd;
}

.accordion.accordion-border-secondary .accordion-button:not(.collapsed) {
  border-block-end: 1px solid #0e76bd;
}

.accordion.accordion-border-success .accordion-item {
  border: 1px solid #1ABE17;
}

.accordion.accordion-border-success .accordion-button {
  background-color: #FFF;
  color: #1ABE17;
  border-block-end: 0px;
}

.accordion.accordion-border-success .accordion-button:after {
  background-color: #FFF;
  color: #1ABE17;
  border: 1px solid #1ABE17;
}

.accordion.accordion-border-success .accordion-button:not(.collapsed) {
  border-block-end: 1px solid #1ABE17;
}

.accordion.accordion-border-danger .accordion-item {
  border: 1px solid #E82646;
}

.accordion.accordion-border-danger .accordion-button {
  background-color: #FFF;
  color: #E82646;
  border-block-end: 0px;
}

.accordion.accordion-border-danger .accordion-button:after {
  background-color: #FFF;
  color: #E82646;
  border: 1px solid #E82646;
}

.accordion.accordion-border-danger .accordion-button:not(.collapsed) {
  border-block-end: 1px solid #E82646;
}

.accordion.accordion-border-warning .accordion-item {
  border: 1px solid #EAB300;
}

.accordion.accordion-border-warning .accordion-button {
  background-color: #FFF;
  color: #EAB300;
  border-block-end: 0px;
}

.accordion.accordion-border-warning .accordion-button:after {
  background-color: #FFF;
  color: #EAB300;
  border: 1px solid #EAB300;
}

.accordion.accordion-border-warning .accordion-button:not(.collapsed) {
  border-block-end: 1px solid #EAB300;
}

.accordion.accordion-border-info .accordion-item {
  border: 1px solid #0F65CD;
}

.accordion.accordion-border-info .accordion-button {
  background-color: #FFF;
  color: #0F65CD;
  border-block-end: 0px;
}

.accordion.accordion-border-info .accordion-button:after {
  background-color: #FFF;
  color: #0F65CD;
  border: 1px solid #0F65CD;
}

.accordion.accordion-border-info .accordion-button:not(.collapsed) {
  border-block-end: 1px solid #0F65CD;
}

.accordion.accordionicon-none .accordion-button:after {
  display: none;
}

.accordion.accordionicon-left .accordion-button {
  padding-inline-start: 2.5rem;
}

.accordion.accordionicon-left .accordion-button:after {
  position: absolute;
  inset-inline-start: 0.625rem;
}

.accordion.accordion-customicon1 .accordion-button:after {
  content: "+";
  font-family: "Fontawesome";
  background-color: #f7f8f9;
}

.accordion.accordion-customicon1 .accordion-button:not(.collapsed)::after {
  content: "\f068";
  font-family: "Fontawesome";
  background-color: #FFF;
}

.customized-accordion .accordion-item.custom-accordion-primary .accordion-button {
  background-color: rgba(31, 59, 96, 0.1);
  border-inline-start: 0.25rem solid rgba(31, 59, 96, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-primary .accordion-button:after {
  background-color: rgba(31, 59, 96, 0.6);
  color: #FFF;
}

.customized-accordion .accordion-item.custom-accordion-primary .accordion-body {
  background-color: rgba(31, 59, 96, 0.1);
  padding-block-start: 0;
  border-inline-start: 0.25rem solid rgba(31, 59, 96, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-secondary .accordion-button {
  background-color: rgba(14, 118, 189, 0.1);
  border-inline-start: 0.25rem solid rgba(14, 118, 189, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-secondary .accordion-button:after {
  background-color: rgba(14, 118, 189, 0.6);
  color: #FFF;
}

.customized-accordion .accordion-item.custom-accordion-secondary .accordion-body {
  background-color: rgba(14, 118, 189, 0.1);
  padding-block-start: 0;
  border-inline-start: 0.25rem solid rgba(14, 118, 189, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-warning .accordion-button {
  background-color: rgba(234, 179, 0, 0.1);
  border-inline-start: 0.25rem solid rgba(234, 179, 0, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-warning .accordion-button:after {
  background-color: rgba(234, 179, 0, 0.6);
  color: #FFF;
}

.customized-accordion .accordion-item.custom-accordion-warning .accordion-body {
  background-color: rgba(234, 179, 0, 0.1);
  padding-block-start: 0;
  border-inline-start: 0.25rem solid rgba(234, 179, 0, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-info .accordion-button {
  background-color: rgba(15, 101, 205, 0.1);
  border-inline-start: 0.25rem solid rgba(15, 101, 205, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-info .accordion-button:after {
  background-color: rgba(15, 101, 205, 0.6);
  color: #FFF;
}

.customized-accordion .accordion-item.custom-accordion-info .accordion-body {
  background-color: rgba(15, 101, 205, 0.1);
  padding-block-start: 0;
  border-inline-start: 0.25rem solid rgba(15, 101, 205, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-success .accordion-button {
  background-color: rgba(26, 190, 23, 0.1);
  border-inline-start: 0.25rem solid rgba(26, 190, 23, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-success .accordion-button:after {
  background-color: rgba(26, 190, 23, 0.6);
  color: #FFF;
}

.customized-accordion .accordion-item.custom-accordion-success .accordion-body {
  background-color: rgba(26, 190, 23, 0.1);
  padding-block-start: 0;
  border-inline-start: 0.25rem solid rgba(26, 190, 23, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-danger .accordion-button {
  background-color: rgba(232, 38, 70, 0.1);
  border-inline-start: 0.25rem solid rgba(232, 38, 70, 0.6);
}

.customized-accordion .accordion-item.custom-accordion-danger .accordion-button:after {
  background-color: rgba(232, 38, 70, 0.6);
  color: #FFF;
}

.customized-accordion .accordion-item.custom-accordion-danger .accordion-body {
  background-color: rgba(232, 38, 70, 0.1);
  padding-block-start: 0;
  border-inline-start: 0.25rem solid rgba(232, 38, 70, 0.6);
}

.page-header-breadcrumb .breadcrumb-item+.breadcrumb-item::before {
  content: var(--bs-breadcrumb-divider, "\ea65");
  font-family: "tabler-icons" !important;
}

[dir=rtl] .page-header-breadcrumb .breadcrumb-item+.breadcrumb-item::before {
  content: var(--bs-breadcrumb-divider, "\ea64");
  font-family: "tabler-icons" !important;
}

.breadcrumb .breadcrumb-item a {
  color: #6A7287;
}

.breadcrumb .breadcrumb-item a:hover {
  color: #1f3b60;
}

.breadcrumb .breadcrumb-item.active {
  color: #202C4B;
}

.breadcrumb-item+.breadcrumb-item::before {
  color: #6A7287;
  opacity: 0.4;
}

.breadcrumb-arrow .breadcrumb-item+.breadcrumb-item::before {
  color: #6A7287;
  content: "\f101";
  font-family: "Fontawesome" !important;
}

.breadcrumb-pipe .breadcrumb-item+.breadcrumb-item::before {
  color: #6A7287;
  content: "\f061";
  font-family: "Fontawesome" !important;
}

.breadcrumb-line .breadcrumb-item+.breadcrumb-item::before {
  color: #6A7287;
  content: "-";
}

.breadcrumb-dot .breadcrumb-item+.breadcrumb-item::before {
  color: #6A7287;
  content: "•";
}

.breadcrumb-divide .breadcrumb-item+.breadcrumb-item::before {
  color: #6A7287;
  content: "\f054";
  font-family: "Fontawesome" !important;
}

.breadcrumb-separatorless .breadcrumb-item+.breadcrumb-item::before {
  content: "";
  display: none;
}

.breadcrumb-colored {
  padding: 12px 15px;
  border-radius: 4px;
}

.breadcrumb-colored li a {
  color: #FFF;
}

.breadcrumb-colored .breadcrumb-item a {
  color: #FFF;
}

.breadcrumb-colored .breadcrumb-item.active {
  color: #FFF;
  opacity: 0.8;
}

.breadcrumb-colored .breadcrumb-item+.breadcrumb-item a {
  color: #FFF;
}

.breadcrumb-colored .breadcrumb-item+.breadcrumb-item::before {
  color: #FFF;
}

.embedded-breadcrumb:before {
  opacity: 0.7;
}

[data-theme-mode=dark] .embedded-breadcrumb:before {
  filter: invert(1);
}

.card {
  margin-bottom: 1.5rem;
  background-color: #FFF;
  transition: all 0.5s ease-in-out;
  position: relative;
  border-radius: 12px;
  border: 1px solid #E9EDF4;
  box-shadow: 0px 4.4px 12px -1px rgba(222, 222, 222, 0.3607843137);
  color: inherit;
}

.card .card-body {
  padding: 1.25rem;
}

@media (max-width: 767.98px) {
  .card .card-body {
    padding: 16px;
  }
}

.card .card-title {
  font-size: 18px;
  font-weight: 600;
  text-transform: capitalize;
  color: #202C4B;
}

@media (max-width: 767.98px) {
  .card .card-title {
    font-size: 16px;
  }
}

.card .card-title:has(> i:first-child) {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}

.card .card-header {
  border-color: #E9EDF4;
  position: relative;
  background: transparent;
  padding: 1rem 1.25rem 1rem;
}

@media (max-width: 767.98px) {
  .card .card-header {
    padding: 15px;
  }
}

.card .card-header .card-title {
  margin-bottom: 0rem;
}

.card .card-header .subtitle {
  padding-top: 0.3125rem;
  font-size: 0.875rem;
  line-height: 1.5;
}

.card .card-footer {
  border-color: #E9EDF4;
  background: transparent;
  padding: 1rem 1.25rem 1rem;
}

.card-group .card {
  margin-bottom: 1.5rem;
}

.card.custom-card {
  border-radius: 4px;
  border: 0;
  background-color: #FFF;
  position: relative;
  margin-block-end: 1.5rem;
  width: 100%;
}

.card.custom-card .card-header {
  padding: 1rem 1.25rem;
  background-color: transparent !important;
  border-block-end: 1px solid #9CA1AF;
  display: flex;
  align-items: center;
  position: relative;
  flex-wrap: wrap;
  gap: 0.25rem;
}

.card.custom-card .card-header:first-child {
  border-radius: 0.625rem 0.625rem 0 0;
}

.card.custom-card .card-header .card-title {
  position: relative;
  margin-block-end: 0;
  font-size: 0.9375rem;
  font-weight: 700;
  text-transform: capitalize;
}

.card.custom-card .card-header .card-title .subtitle {
  margin-block-end: 0;
  text-transform: initial;
}

.card.custom-card .card-footer {
  background-color: transparent !important;
  border-block-start: 1px solid #9CA1AF;
  padding: 1rem 1.5rem;
  font-size: 14px;
}

.card.custom-card .card-body {
  padding: 1.5rem;
  color: #6A7287;
}

.card.custom-card .card-link {
  font-size: 0.75rem;
}

.card .card-text {
  font-size: 0.813rem;
}

.card .footer-card-icon {
  width: 60px;
  height: 60px;
}

.card.overlay-card {
  position: relative;
  overflow: hidden;
  color: rgba(255, 255, 255, 0.9);
}

.card.overlay-card .card-header {
  border-block-end: 1px solid rgba(255, 255, 255, 0.1);
}

.card.overlay-card .card-footer {
  border-block-start: 1px solid rgba(255, 255, 255, 0.1);
}

.card.overlay-card .over-content-bottom {
  top: auto;
}

.card.overlay-card:before {
  content: "";
  inset-inline-start: 0;
  inset-inline-end: 0;
  inset-block-start: 0;
  inset-block-end: 0;
  background-color: rgba(0, 0, 0, 0.2);
  position: absolute;
}

.card.card-bg-primary {
  background-color: #1f3b60;
  color: #FFF;
}

.card.card-bg-primary .card-header {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-end: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-primary .card-header:before {
  background-color: #FFF;
}

.card.card-bg-primary .card-body {
  color: #FFF;
}

.card.card-bg-primary .card-footer {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-start: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-secondary {
  background-color: #0e76bd;
  color: #FFF;
}

.card.card-bg-secondary .card-header {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-end: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-secondary .card-header:before {
  background-color: #FFF;
}

.card.card-bg-secondary .card-body {
  color: #FFF;
}

.card.card-bg-secondary .card-footer {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-start: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-warning {
  background-color: #EAB300;
  color: #FFF;
}

.card.card-bg-warning .card-header {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-end: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-warning .card-header:before {
  background-color: #FFF;
}

.card.card-bg-warning .card-body {
  color: #FFF;
}

.card.card-bg-warning .card-footer {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-start: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-info {
  background-color: #0F65CD;
  color: #FFF;
}

.card.card-bg-info .card-header {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-end: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-info .card-header:before {
  background-color: #FFF;
}

.card.card-bg-info .card-body {
  color: #FFF;
}

.card.card-bg-info .card-footer {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-start: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-success {
  background-color: #1ABE17;
  color: #FFF;
}

.card.card-bg-success .card-header {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-end: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-success .card-header:before {
  background-color: #FFF;
}

.card.card-bg-success .card-body {
  color: #FFF;
}

.card.card-bg-success .card-footer {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-start: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-danger {
  background-color: #E82646;
  color: #FFF;
}

.card.card-bg-danger .card-header {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-end: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-danger .card-header:before {
  background-color: #FFF;
}

.card.card-bg-danger .card-body {
  color: #FFF;
}

.card.card-bg-danger .card-footer {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-start: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-light {
  background-color: #E9EDF4;
  color: #6A7287;
}

.card.card-bg-light .card-header {
  background-color: rgba(0, 0, 0, 0.05) !important;
  color: #6A7287;
  border-block-end: #9CA1AF;
}

.card.card-bg-light .card-body {
  color: #6A7287;
}

.card.card-bg-light .card-footer {
  background-color: rgba(0, 0, 0, 0.05) !important;
  color: #6A7287;
  border-block-start: #9CA1AF;
}

.card.card-bg-dark {
  background-color: #202C4B;
  color: #FFF;
}

.card.card-bg-dark .card-header {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-end: 1px solid rgba(255, 255, 255, 0.2);
}

.card.card-bg-dark .card-header:before {
  background-color: #FFF;
}

.card.card-bg-dark .card-body {
  color: #FFF;
}

.card.card-bg-dark .card-footer {
  background-color: rgba(255, 255, 255, 0.1) !important;
  color: #FFF;
  border-block-start: 1px solid rgba(255, 255, 255, 0.2);
}

.card .card-anchor {
  position: absolute;
  top: 0;
  inset-inline-end: 0;
  bottom: 0;
  inset-inline-start: 0;
  z-index: 1;
  pointer-events: auto;
  content: "";
}

.card .collapse-close {
  display: none;
}

.card.card .collapsed .collapse-close {
  display: block;
}

.card.card .collapsed .collapse-open {
  display: none;
}

.card.card-fullscreen {
  position: fixed;
  top: 0;
  inset-inline-start: 0;
  inset-inline-start: 0;
  bottom: 0;
  z-index: 9999;
  margin: 0;
}

.cals-icon {
  font-size: 50px;
  color: #838A9B;
}

.callout {
  padding: 1.25rem;
  margin-block-start: 1.25rem;
  margin-block-end: 1.25rem;
  background-color: #E9EDF4;
  border-inline-start: 0.25rem solid #9CA1AF;
}

.callout-info {
  background-color: rgba(15, 101, 205, 0.075);
  border-color: rgba(15, 101, 205, 0.5);
}

.callout-warning {
  background-color: rgba(234, 179, 0, 0.075);
  border-color: rgba(234, 179, 0, 0.5);
}

.callout-danger {
  background-color: rgba(232, 38, 70, 0.075);
  border-color: rgba(232, 38, 70, 0.5);
}

.btn-facebook {
  background-color: #3B5998;
  color: #FFF;
  border: 1px solid #3B5998;
}

.btn-facebook:hover,
.btn-facebook:focus,
.btn-facebook:active {
  background-color: #3B5998 !important;
  color: #FFF !important;
  border: 1px solid #3B5998 !important;
}

.btn-instagram {
  background: #f09433;
  background: -moz-linear-gradient(45deg, #f09433 0%, #e6683c 25%, #dc2743 50%, #cc2366 75%, #bc1888 100%);
  background: -webkit-linear-gradient(45deg, #f09433 0%, #e6683c 25%, #dc2743 50%, #cc2366 75%, #bc1888 100%);
  background: linear-gradient(45deg, #f09433 0%, #e6683c 25%, #dc2743 50%, #cc2366 75%, #bc1888 100%);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#f09433", endColorstr="#bc1888", GradientType=1);
  color: #FFF;
  border: 1px solid transparent;
}

.btn-instagram:hover,
.btn-instagram:focus,
.btn-instagram:active {
  color: #FFF;
  border: 1px solid transparent;
}

.btn-twitter {
  background-color: #00ACEE;
  color: #FFF;
  border: 1px solid #00ACEE;
}

.btn-twitter:hover,
.btn-twitter:focus,
.btn-twitter:active {
  background-color: #00ACEE !important;
  color: #FFF !important;
  border: 1px solid #00ACEE !important;
}

.btn-icon {
  width: 2.313rem;
  height: 2.313rem;
  font-size: 0.95rem;
  flex-shrink: 0;
}

.btn-wave {
  display: inline-block !important;
}

@media (max-width: 575px) {
  .overlay-card .card-text {
    font-size: 0.613rem !important;
  }
}

@media (max-width: 400px) {
  .overlay-card .card-text {
    font-size: 0.413rem !important;
  }
}

.card .form-control-plaintext {
  min-height: 38px;
}

/*-----------------
    Accent card header

    A single class on the `.card-header` gives its `.card-title` a leading
    accent bar. Nothing is added to the markup beyond that one class — the bar
    is drawn with a pseudo element on the existing title.
-----------------*/
.card .card-header.card-header-accent .card-title {
  position: relative;
  padding-left: 0.7rem;
}

.card .card-header.card-header-accent .card-title::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 3px;
  height: 1.05em;
  border-radius: 3px;
  background: linear-gradient(180deg, #1f3b60, #6d8bff);
}

.card .card-header.card-header-accent.accent-success .card-title::before {
  background: linear-gradient(180deg, #1ABE17, rgb(74.8478873239, 232.8422535211, 71.9577464789));
}

.card .card-header.card-header-accent.accent-info .card-title::before {
  background: linear-gradient(180deg, #0F65CD, rgb(70.3136363636, 147.7918181818, 241.4863636364));
}

.card .card-header.card-header-accent.accent-warning .card-title::before {
  background: linear-gradient(180deg, #EAB300, rgb(255, 211.7051282051, 70.8));
}

.card .card-header.card-header-accent.accent-danger .card-title::before {
  background: linear-gradient(180deg, #E82646, rgb(240.7975, 121.0025, 140.7625));
}

.card .card-header.card-header-accent.accent-dark .card-title::before {
  background: linear-gradient(180deg, #202C4B, rgb(59.4542056075, 81.7495327103, 139.3457943925));
}

/*-----------------
    Premium card chrome

    The elevated card treatment every dashboard and workspace page shares:
    a hairline border, softly rounded corners, a layered resting shadow and
    a lift on hover. Matched to index2.html's Catalyst shell so cards look
    identical whether or not a page carries `body.mui-premium`.
-----------------*/
.card {
  border: 1px solid #e8eaed;
  border-radius: 16px;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 8px 24px rgba(15, 23, 42, 0.06);
  transition: box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  /*&:hover {
  	transform: translateY(-3px);
  	box-shadow: 0 1rem 2.25rem rgba(15, 23, 42, 0.13);
  } */
}

.card-header {
  background: transparent;
  border-bottom: 1px solid #e8eaed;
  border-radius: 15px 15px 0 0 !important;
}

.card-header:first-child {
  border-radius: 15px 15px 0 0 !important;
}

[data-theme=dark] .card,
[data-bs-theme=dark] .card {
  border-color: rgba(255, 255, 255, 0.08);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}

[data-theme=dark] .card-header,
[data-bs-theme=dark] .card-header {
  border-bottom-color: rgba(255, 255, 255, 0.08);
}

/*-----------------
    Reusable hover card

    A global, opt-in helper for interactive cards (stat tiles, clickable
    summaries, link cards). Layers a pointer cursor, an accent border and a
    deeper lift on top of the base `.card` chrome. Drop `card-hover` onto any
    `.card` on any page — no page-specific classes required.
-----------------*/
.card.card-hover {
  cursor: pointer;
}

.card.card-hover:hover {
  position: relative;
  z-index: 2;
  transform: translateY(-4px);
  border-color: #1f3b60;
  box-shadow: 0 1rem 2.25rem rgba(15, 23, 42, 0.16);
}

[data-theme=dark] .card.card-hover:hover,
[data-bs-theme=dark] .card.card-hover:hover {
  border-color: #1f3b60;
}

/*-----------------
	Card hover lite:
	A subtle, flat, lightweight hover effect without any lift, jump, or shadow.
	Softly tints the border and background for an elegant, non-distracting visual cue.
	Works identically in both LTR and RTL for light and dark themes.
-----------------*/
.card.card-hover-lite,
.card-hover-lite {
  cursor: pointer;
  transition: border-color 0.2s ease, background-color 0.2s ease !important;
  transform: none !important;
}

.card.card-hover-lite:hover,
.card-hover-lite:hover {
  transform: none !important;
  box-shadow: none !important;
  border-color: #cbd5e1 !important;
  background-color: #f8fafc !important;
}

[data-theme=dark] .card.card-hover-lite:hover,
[data-bs-theme=dark] .card.card-hover-lite:hover,
[data-theme=dark] .card-hover-lite:hover,
[data-bs-theme=dark] .card-hover-lite:hover {
  border-color: rgba(255, 255, 255, 0.15) !important;
  background-color: rgba(255, 255, 255, 0.03) !important;
}


/*-----------------
	Insight card

	The one-line reading that sits under a chart. Previously assembled from
	`d-flex align-items-center bg-light-subtle border rounded-3 p-2` on each
	dashboard; folded into a single class so the padding and tone stay in
	step across pages. Tone modifiers only recolour the surface and rule.
-----------------*/
.insight-card {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--bs-border-color);
  border-radius: 0.75rem;
  background: var(--bs-tertiary-bg);
}

.insight-card.insight-card-success {
  border-color: rgba(26, 190, 23, 0.3);
  background: rgba(26, 190, 23, 0.06);
}

.insight-card.insight-card-warning {
  border-color: rgba(234, 179, 0, 0.3);
  background: rgba(234, 179, 0, 0.08);
}

.insight-card.insight-card-danger {
  border-color: rgba(232, 38, 70, 0.3);
  background: rgba(232, 38, 70, 0.06);
}

/*-----------------
	Action card

	A launcher tile: glyph, label, supporting line and a trailing arrow that
	slides on hover. Anchors and buttons both work, so it can navigate or
	open a modal without a second variant.
-----------------*/
.action-card {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  width: 100%;
  padding: 0.875rem;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  background: #FFF;
  text-align: left;
  transition: all 0.2s ease-in-out;
}

.action-card:hover {
  border-color: #1f3b60;
  box-shadow: 0px 4.4px 12px -1px rgba(222, 222, 222, 0.3607843137);
}

.action-card:hover .action-card-go {
  color: #1f3b60;
  transform: translateX(2px);
}

.action-card .action-card-body {
  flex: 1 1 auto;
  min-width: 0;
}

.action-card .action-card-title {
  display: block;
  font-size: 0.875rem;
  font-weight: 600;
  color: #202C4B;
}

.action-card .action-card-text {
  display: block;
  font-size: 0.75rem;
  color: #677788;
}

.action-card .action-card-go {
  flex-shrink: 0;
  font-size: 1rem;
  color: #EDF1F6;
  transition: all 0.2s ease-in-out;
}

[data-bs-theme=dark] .action-card {
  background: transparent;
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
/*-----------------
	Dashboard widgets

	Reusable dashboard components: profile card, statistic cards, info and
	timeline lists, lesson schedule, class cards, progress rings and bars,
	status pills and progress meters. Nothing here is page-specific --
	the teacher dashboard is simply the first page to assemble them.

	`.content-section` is the token scope. The colour ramp is deliberately
	NOT aliased to `--bs-success` and friends: these components use their own
	slightly different tones, and pointing them at Bootstrap's would change
	the rendering. Only the primary is Bootstrap's, and it is read directly
	as `var(--bs-primary)`.
-----------------*/
/* the token scope: the neutral ramp now lives in utils/_design-tokens.scss,
   so this only carries the body ink the section establishes */
.content-section {
  color: var(--bs-body-color, #374151);
}

/* base blocks */
.card-widget {
  background: var(--surface);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  box-shadow: var(--shadow-card);
}

.card-widget-body {
  padding: 18px;
}

/* ---------- HERO ---------- */
.card-profile {
  border-radius: var(--radius);
  border: 1px solid var(--border-soft);
  box-shadow: var(--shadow-card);
  background: linear-gradient(120deg, #eef1fb 0%, #f6f7fb 60%, #eef7f4 100%);
  padding: 20px;
}

[data-bs-theme=dark] .card-profile,
[data-theme=dark] .card-profile {
  background: linear-gradient(120deg, rgba(31, 59, 96, 0.14), rgba(13, 148, 136, 0.08)), var(--surface);
}

.card-profile::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(31, 59, 96, 0.1) 1px, transparent 1px);
  background-size: 18px 18px;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 40%);
  mask-image: linear-gradient(90deg, transparent, #000 40%);
  opacity: 0.5;
  pointer-events: none;
}

.card-profile-grid {
  z-index: 1;
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 20px;
}

.card-profile-identity {
  gap: 14px;
}

.card-profile-identity .card-profile-photo img {
  width: 80px;
}

/* .card-profile-photo — all declarations now Bootstrap utilities in the markup */
.card-profile-greeting {
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-primary);
}

.card-profile-name {
  font-size: 22px;
  font-weight: 800;
  color: var(--heading);
  line-height: 1.1;
  margin: 2px 0 6px;
}

.card-profile-meta {
  gap: 6px;
}

/* .card-profile-clock — all declarations now Bootstrap utilities in the markup */
.card-profile-time {
  font-size: 28px;
  font-weight: 800;
  color: var(--heading);
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

.card-profile-date {
  font-size: 12px;
  color: var(--muted);
  margin-top: 4px;
}

.card-profile-stats {
  z-index: 1;
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 10px;
  margin-top: 18px;
}

.card-profile-stat {
  gap: 9px;
  padding: 10px 11px;
  border-radius: 12px;
  background: var(--surface);
  border: 1px solid var(--border-soft);
}

.card-profile-stat .ic {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  flex-shrink: 0;
}

.card-profile-stat .tx b {
  display: block;
  font-size: 14px;
  font-weight: 800;
  color: var(--heading);
  line-height: 1.1;
}

.card-profile-stat .tx span {
  font-size: 10px;
  color: var(--muted);
}

.card-profile-ring {
  --v: 0;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: conic-gradient(currentColor calc(var(--v) * 1%), var(--bs-secondary-bg) 0);
}

.card-profile-ring i {
  width: 30px;
  height: 30px;
  border-radius: 50%;
  background: var(--surface);
  display: grid;
  place-items: center;
  font-size: 10px;
  font-weight: 800;
  font-style: normal;
  color: var(--heading);
}

.card-profile-actions {
  z-index: 1;
  gap: 8px;
  margin-top: 16px;
  padding-top: 16px;
  border-top: 1px dashed var(--border-soft);
}

.card-class {
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  background: var(--surface);
  transition: transform var(--transition-card), box-shadow var(--transition-card);
}

.card-class:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-card-lift);
}

.card-class-header {
  gap: 11px;
  padding: 14px;
}

.card-class-icon {
  width: 44px;
  height: 44px;
  border-radius: 13px;
  display: grid;
  place-items: center;
  font-size: 22px;
}

.card-class-icon i {
  color: #fff;
}

.card-class-header b {
  display: block;
  font-size: 14px;
  color: var(--heading);
}

.card-class-header span {
  font-size: 11px;
  color: var(--muted);
}

/* .card-class-badge — all declarations now Bootstrap utilities in the markup */
.card-class-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  padding: 12px 14px;
}

.card-class-stat b {
  display: block;
  font-size: 15px;
  font-weight: 800;
  color: var(--heading);
}

.card-class-stat span {
  font-size: 10px;
  color: var(--muted);
}

.card-class-actions {
  gap: 6px;
  padding: 0 14px 14px;
}

.card-class-actions .icon-action {
  flex: 1;
}

/* card whose last element should sit flush with the card's bottom edge,
   so a stretched (h-100) card never leaves a gap under its content */
/* .flow-list — all declarations now Bootstrap utilities in the markup */
.flow-list>.flow-end {
  margin-top: auto;
}

/* ---------- AI PANEL ---------- */
.insight-panel {
  background: linear-gradient(135deg, rgba(123, 97, 255, 0.1), rgba(31, 59, 96, 0.05)), var(--surface);
}

.insight-panel .widget-title i {
  color: var(--tone-purple);
}

.content-section :focus-visible {
  outline: 2px solid var(--bs-primary);
  outline-offset: 2px;
  border-radius: 6px;
}

@media (max-width: 1199px) {
  .card-profile-stats {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (max-width: 991px) {
  .card-profile-grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 767px) {
  .card-profile-stats {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ---------- PROFILE BADGES ---------- */
/* entitlement chips under the profile name — colour comes from the
   bg-*-transparent / text-* utilities on each badge */
.card-profile-badges {
  gap: 6px;
  margin-top: 10px;
}

.card-profile-badge {
  gap: 5px;
  font-size: 11px;
  font-weight: 600;
  padding: 5px 10px;
  border-radius: 999px;
}

.card-profile-badge i {
  font-size: 14px;
}

/* ---------- ID CARD ---------- */
.id-card {
  border: 1px solid var(--border-soft);
  border-radius: 16px;
}

.id-card-header {
  gap: 12px;
  padding: 16px;
  color: #fff;
  background: linear-gradient(135deg, var(--bs-primary), var(--tone-purple));
}

.id-card-header img {
  width: 64px;
  height: 64px;
  border-radius: 14px;
  object-fit: cover;
  border: 2px solid rgba(255, 255, 255, 0.5);
}

.id-card-header b {
  font-size: 16px;
}

.id-card-header .id-card-class {
  font-size: 12px;
  opacity: 0.9;
}

.id-card-header .org {
  font-size: 11px;
  opacity: 0.85;
  margin-top: 2px;
}

.id-card .info-list {
  padding: 14px;
}

/*-----------------
	Flush card

	The template's `.card` carries marketing styling: a hard white background
	that ignores the dark theme, a heavier shadow, a bottom margin and a hover
	transition. `.card-flush` returns it to the design-system surface so a card
	can host dashboard content without fighting those defaults.

	Structure is plain Bootstrap — no wrapper component:

	    <div class="card card-flush">
	        <div class="card-body">…</div>
	    </div>

	Only tokens are used, so it follows the theme in both modes.
-----------------*/
.card-flush {
  margin-bottom: 0;
  background-color: var(--bs-body-bg);
  border-color: var(--bs-border-color);
  box-shadow: var(--shadow);
  transition: none;
}

.card-flush>.card-body {
  padding: 18px;
}

.tooltip.tooltip-primary .tooltip-inner {
  background-color: #1f3b60;
}

.tooltip.tooltip-primary.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,
.tooltip.tooltip-primary.bs-tooltip-top .tooltip-arrow::before {
  border-top-color: #1f3b60;
}

.tooltip.tooltip-primary.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,
.tooltip.tooltip-primary.bs-tooltip-end .tooltip-arrow::before {
  border-right-color: #1f3b60;
}

.tooltip.tooltip-primary.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,
.tooltip.tooltip-primary.bs-tooltip-start .tooltip-arrow::before {
  border-left-color: #1f3b60;
}

.tooltip.tooltip-primary.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,
.tooltip.tooltip-primary.bs-tooltip-end .tooltip-arrow::before {
  border-bottom-color: #1f3b60;
}

.tooltip.tooltip-secondary .tooltip-inner {
  background-color: #0e76bd;
}

.tooltip.tooltip-secondary.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,
.tooltip.tooltip-secondary.bs-tooltip-top .tooltip-arrow::before {
  border-top-color: #0e76bd;
}

.tooltip.tooltip-secondary.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,
.tooltip.tooltip-secondary.bs-tooltip-end .tooltip-arrow::before {
  border-right-color: #0e76bd;
}

.tooltip.tooltip-secondary.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,
.tooltip.tooltip-secondary.bs-tooltip-start .tooltip-arrow::before {
  border-left-color: #0e76bd;
}

.tooltip.tooltip-secondary.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,
.tooltip.tooltip-secondary.bs-tooltip-end .tooltip-arrow::before {
  border-bottom-color: #0e76bd;
}

.tooltip.tooltip-warning .tooltip-inner {
  background-color: #EAB300;
}

.tooltip.tooltip-warning.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,
.tooltip.tooltip-warning.bs-tooltip-top .tooltip-arrow::before {
  border-top-color: #EAB300;
}

.tooltip.tooltip-warning.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,
.tooltip.tooltip-warning.bs-tooltip-end .tooltip-arrow::before {
  border-right-color: #EAB300;
}

.tooltip.tooltip-warning.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,
.tooltip.tooltip-warning.bs-tooltip-start .tooltip-arrow::before {
  border-left-color: #EAB300;
}

.tooltip.tooltip-warning.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,
.tooltip.tooltip-warning.bs-tooltip-end .tooltip-arrow::before {
  border-bottom-color: #EAB300;
}

.tooltip.tooltip-info .tooltip-inner {
  background-color: #0F65CD;
}

.tooltip.tooltip-info.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,
.tooltip.tooltip-info.bs-tooltip-top .tooltip-arrow::before {
  border-top-color: #0F65CD;
}

.tooltip.tooltip-info.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,
.tooltip.tooltip-info.bs-tooltip-end .tooltip-arrow::before {
  border-right-color: #0F65CD;
}

.tooltip.tooltip-info.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,
.tooltip.tooltip-info.bs-tooltip-start .tooltip-arrow::before {
  border-left-color: #0F65CD;
}

.tooltip.tooltip-info.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,
.tooltip.tooltip-info.bs-tooltip-end .tooltip-arrow::before {
  border-bottom-color: #0F65CD;
}

.tooltip.tooltip-success .tooltip-inner {
  background-color: #1ABE17;
}

.tooltip.tooltip-success.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,
.tooltip.tooltip-success.bs-tooltip-top .tooltip-arrow::before {
  border-top-color: #1ABE17;
}

.tooltip.tooltip-success.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,
.tooltip.tooltip-success.bs-tooltip-end .tooltip-arrow::before {
  border-right-color: #1ABE17;
}

.tooltip.tooltip-success.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,
.tooltip.tooltip-success.bs-tooltip-start .tooltip-arrow::before {
  border-left-color: #1ABE17;
}

.tooltip.tooltip-success.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,
.tooltip.tooltip-success.bs-tooltip-end .tooltip-arrow::before {
  border-bottom-color: #1ABE17;
}

.tooltip.tooltip-danger .tooltip-inner {
  background-color: #E82646;
}

.tooltip.tooltip-danger.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,
.tooltip.tooltip-danger.bs-tooltip-top .tooltip-arrow::before {
  border-top-color: #E82646;
}

.tooltip.tooltip-danger.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,
.tooltip.tooltip-danger.bs-tooltip-end .tooltip-arrow::before {
  border-right-color: #E82646;
}

.tooltip.tooltip-danger.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,
.tooltip.tooltip-danger.bs-tooltip-start .tooltip-arrow::before {
  border-left-color: #E82646;
}

.tooltip.tooltip-danger.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,
.tooltip.tooltip-danger.bs-tooltip-end .tooltip-arrow::before {
  border-bottom-color: #E82646;
}

.tooltip.tooltip-dark .tooltip-inner {
  background-color: #202C4B;
}

.tooltip.tooltip-dark.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,
.tooltip.tooltip-dark.bs-tooltip-top .tooltip-arrow::before {
  border-top-color: #202C4B;
}

.tooltip.tooltip-dark.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,
.tooltip.tooltip-dark.bs-tooltip-end .tooltip-arrow::before {
  border-right-color: #202C4B;
}

.tooltip.tooltip-dark.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,
.tooltip.tooltip-dark.bs-tooltip-start .tooltip-arrow::before {
  border-left-color: #202C4B;
}

.tooltip.tooltip-dark.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,
.tooltip.tooltip-dark.bs-tooltip-end .tooltip-arrow::before {
  border-bottom-color: #202C4B;
}

.tooltip.tooltip-dark .tooltip-inner {
  color: #FFF;
}

.tooltip.tooltip-light .tooltip-inner {
  background-color: #E9EDF4;
}

.tooltip.tooltip-light.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,
.tooltip.tooltip-light.bs-tooltip-top .tooltip-arrow::before {
  border-top-color: #E9EDF4;
}

.tooltip.tooltip-light.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,
.tooltip.tooltip-light.bs-tooltip-end .tooltip-arrow::before {
  border-right-color: #E9EDF4;
}

.tooltip.tooltip-light.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,
.tooltip.tooltip-light.bs-tooltip-start .tooltip-arrow::before {
  border-left-color: #E9EDF4;
}

.tooltip.tooltip-light.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,
.tooltip.tooltip-light.bs-tooltip-end .tooltip-arrow::before {
  border-bottom-color: #E9EDF4;
}

.tooltip.tooltip-light .tooltip-inner {
  color: #6A7287;
}

.nav-item {
  margin-inline-end: 0.5rem;
}

.nav-item:last-child {
  margin-inline-end: 0;
}

.nav-link {
  color: #6A7287;
  border-radius: 4px;
}

.nav-link.active {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

.navbar-brand {
  color: #6A7287;
}

.navbar-brand:focus,
.navbar-brand:hover {
  color: #6A7287;
  opacity: 0.9;
}

.navbar-nav .nav-link.active,
.navbar-nav .show>.nav-link {
  color: #1f3b60;
}

.nav-link.disabled {
  color: #6A7287;
  opacity: 0.3;
}

.nav-tabs .nav-link.disabled,
.nav-tabs .nav-link:disabled {
  color: rgba(32, 44, 75, 0.5);
}

.navbar-text {
  color: #6A7287;
}

.navbar-dark.bg-dark .nav-link,
.navbar-dark.bg-dark .navbar-brand {
  color: #FFF;
}

.navbar-dark .navbar-nav .nav-link.active,
.navbar-dark .navbar-nav .show>.nav-link {
  color: #FFF;
}

.nav-pills .nav-link.active,
.nav-pills .show>.nav-link {
  color: #FFF;
  background-color: #1f3b60;
}

.nav.nav-style-1 {
  border: 0;
}

.nav.nav-style-1 .nav-item {
  margin-inline-end: 0.25rem;
}

.nav.nav-style-1 .nav-item:last-child {
  margin-inline-end: 0;
}

.nav.nav-style-1 .nav-link.active {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

.nav.nav-style-1 .nav-link.active:hover {
  background: rgba(31, 59, 96, 0.1);
}

.nav.nav-style-1 .nav-link:hover {
  background: transparent;
  color: #1f3b60;
}

.nav.nav-style-2 .nav-item .nav-link {
  border-block-start: 3px solid transparent;
}

.nav.nav-style-2 .nav-item .nav-link.active {
  background-color: rgba(31, 59, 96, 0.1);
  border-block-start: 3px solid #1f3b60;
  color: #1f3b60;
}

.nav.nav-style-3 .nav-link {
  border-radius: 0;
}

.nav.nav-style-3 .nav-link {
  border-block-end: 3px solid transparent;
}

.nav.nav-style-3 .nav-link.active {
  background-color: transparent;
  border-block-end: 3px solid #1f3b60;
  color: #1f3b60;
}

.nav.nav-style-4 {
  border: 0;
}

.nav.nav-style-4 .nav-link {
  color: #677788;
  border: 0;
}

.nav.nav-style-4 .nav-link {
  margin-bottom: 3px;
}

.nav.nav-style-4 .nav-link.active {
  background-color: #E9EDF4;
  color: #6A7287;
  border: 0;
}

.nav.nav-style-4 .nav-link:hover,
.nav.nav-style-4 .nav-link:focus {
  border: 0;
}

.nav.nav-style-4 .nav-link:hover {
  background-color: #E9EDF4;
  color: #6A7287;
}

.nav-tabs.nav-style-5 {
  border: 0;
}

.nav-tabs.nav-style-5 .nav-link {
  color: #677788;
  border: 0;
  margin-bottom: 3px;
}

.nav-tabs.nav-style-5 .nav-link.active {
  background-color: #1f3b60;
  color: #FFF;
  border: 0;
}

.nav-tabs.nav-style-5 .nav-link:hover,
.nav-tabs.nav-style-5 .nav-link:focus {
  border: 0;
  background-color: #1f3b60;
  color: #FFF;
}

.nav-style-6 {
  border: 0;
}

.nav-style-6.nav-pills .nav-link.active {
  border: 1px solid #1f3b60;
  border-block-end: 2px solid #1f3b60;
  background-color: transparent;
  color: #1f3b60;
}

.nav-tabs-header {
  border: 0 !important;
}

.nav-tabs-header .nav-item {
  margin-inline-end: 0.5rem;
}

.nav-tabs-header .nav-item:last-child {
  margin-inline-end: 0;
}

.nav-tabs-header .nav-item .nav-link {
  border: 1px solid transparent;
  font-size: 0.8rem;
  padding: 0.4rem 0.5rem;
  font-weight: 500;
}

.nav-tabs-header .nav-item .nav-link.active {
  background: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
  border: 1px solid transparent;
}

.nav-tabs-header .nav-item .nav-link:hover,
.nav-tabs-header .nav-item .nav-link:focus {
  border: 1px solid transparent;
  background-color: transparent;
  color: #1f3b60;
}

.nav-tabs-footer {
  border: 0;
}

.nav-tabs-footer .nav-item {
  margin-inline-end: 0.5rem;
}

.nav-tabs-footer .nav-item:last-child {
  margin-inline-end: 0;
}

.nav-tabs-footer .nav-item .nav-link {
  background-color: transparent;
  color: #1f3b60;
  border: 1px solid #1f3b60;
  font-size: 0.8rem;
}

.nav-tabs-footer .nav-item .nav-link.active {
  background: #1f3b60;
  color: #FFF;
  border: 1px solid #1f3b60;
}

.nav-tabs-footer .nav-item .nav-link:hover,
.nav-tabs-footer .nav-item .nav-link:focus {
  border: 1px solid #1f3b60;
  background-color: transparent;
  color: #1f3b60;
}

.vertical-tabs-2 {
  border: 0;
}

.vertical-tabs-2 .nav-item {
  margin-inline-end: 0.5rem;
}

.vertical-tabs-2 .nav-item:last-child {
  margin-inline-end: 0;
}

.vertical-tabs-2 .nav-item .nav-link {
  min-width: 7.5rem;
  max-width: 7.5rem;
  text-align: center;
  border: 1px solid #9CA1AF;
  margin-bottom: 0.5rem;
  color: #677788;
  background-color: #E9EDF4;
}

.vertical-tabs-2 .nav-item .nav-link i {
  font-size: 1rem;
}

.vertical-tabs-2 .nav-item .nav-link.active {
  background-color: #1f3b60;
  color: #FFF;
  position: relative;
}

.vertical-tabs-2 .nav-item .nav-link.active:before {
  content: "";
  position: absolute;
  inset-inline-end: -0.5rem;
  inset-block-start: 38%;
  transform: rotate(45deg);
  width: 1rem;
  height: 1rem;
  background-color: #1f3b60;
}

.vertical-tabs-2 .nav-item .nav-link.active:hover {
  color: #FFF;
}

.vertical-tabs-2 .nav-item .nav-link:hover {
  color: #1f3b60;
}

.vertical-tabs-3 {
  border: 0;
}

.vertical-tabs-3 .nav-item {
  border: 0;
  margin-inline-end: 0.5rem;
}

.vertical-tabs-3 .nav-item:last-child {
  margin-inline-end: 0;
}

.vertical-tabs-3 .nav-item .nav-link {
  min-width: 160px;
  max-width: 160px;
  border: 1px solid #1f3b60;
  padding: 1.3rem;
  margin-block-end: 0.5rem;
}

.vertical-tabs-3 .nav-item .nav-link i {
  width: 2rem;
  height: 2rem;
  line-height: 2rem;
  text-align: center;
  font-size: 1rem;
  background: #1f3b60;
  color: #FFF;
  border-radius: 3.125rem;
  font-weight: 500;
}

.vertical-tabs-3 .nav-item .nav-link.active {
  background: #1f3b60;
  border: 1px solid #1f3b60;
  color: #FFF;
}

.vertical-tabs-3 .nav-item .nav-link.active:hover {
  background: #1f3b60;
  border: 1px solid #1f3b60;
  color: #FFF;
}

.vertical-tabs-3 .nav-item .nav-link.active i {
  background: #FFF;
  color: #1f3b60;
}

.vertical-tabs-3 .nav-item .nav-link:hover,
.vertical-tabs-3 .nav-item .nav-link:focus {
  border: 1px solid #1f3b60;
  color: #1f3b60;
  background: transparent;
}

.nav.tab-style-1 {
  border-block-end: 0;
  padding: 0.65rem;
  background-color: #E9EDF4;
  border-radius: 7px;
  margin-block-end: 1rem;
}

.nav.tab-style-1 .nav-item {
  margin-inline-end: 0.5rem;
}

.nav.tab-style-1 .nav-item:last-child {
  margin-inline-end: 0;
}

.nav.tab-style-1 .nav-link {
  border-radius: 7px;
  padding: 0.35rem 1rem;
}

.nav.tab-style-1 .nav-link.active {
  background-color: #1f3b60 !important;
  color: #FFF !important;
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  transition: color 0.15s ease-in;
}

.nav-tabs.tab-style-1 .nav-link:hover {
  background: transparent;
  color: #1f3b60;
}

.tab-style-2 {
  border-block-end: 0;
}

.tab-style-2 .nav-item {
  margin-inline-end: 0.5rem;
}

.tab-style-2 .nav-item:last-child {
  margin-inline-end: 0;
}

.tab-style-2 .nav-item .nav-link {
  border: 0;
}

.tab-style-2 .nav-item .nav-link i {
  width: 1.875rem;
  height: 1.875rem;
  padding: 0.4rem;
  border-radius: 50px;
  background-color: #E9EDF4;
  color: #6A7287;
  display: inline-block;
}

.tab-style-2 .nav-item .nav-link:hover {
  border: 0;
  background: transparent;
  color: #1f3b60;
}

.tab-style-2 .nav-item .nav-link:hover i {
  color: #1f3b60;
}

.tab-style-2 .nav-item .nav-link.active {
  background-color: transparent;
  position: relative;
  border: 0;
  color: #1f3b60;
}

.tab-style-2 .nav-item .nav-link.active i {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

.tab-style-2 .nav-item .nav-link.active:before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  inset-inline-end: 0;
  inset-block-end: 0;
  width: 100%;
  height: 0.175rem;
  background-color: #1f3b60;
  border-radius: 50px;
}

.tab-style-3 {
  border-block-end: 0;
}

.tab-style-3 .nav-item {
  position: relative;
  margin-inline-end: 0.5rem;
}

.tab-style-3 .nav-item:last-child {
  margin-inline-end: 0;
}

.tab-style-3 .nav-item .nav-link {
  position: relative;
  border: 0;
  font-size: 0.75rem;
}

.tab-style-3 .nav-item .nav-link:before {
  position: absolute;
  content: "";
  inset-block-end: -1.063rem;
  inset-inline-end: 0;
  inset-inline-start: 0;
  width: 100%;
  height: 0.1rem;
  background-color: #E9EDF4;
  border-radius: 50%;
}

.tab-style-3 .nav-item .nav-link:after {
  position: absolute;
  content: "";
  inset-block-end: -2rem;
  inset-inline-start: 1.75rem;
  inset-inline-end: 0;
  inset-inline-start: 30%;
  width: 2rem;
  height: 2rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #FFF;
  border-radius: 50%;
  border: 2px solid #9CA1AF;
}

.tab-style-3 .nav-item .nav-link.home:after {
  content: "1";
}

.tab-style-3 .nav-item .nav-link.about:after {
  content: "2";
}

.tab-style-3 .nav-item .nav-link.services:after {
  content: "3";
}

.tab-style-3 .nav-item .nav-link:hover {
  border: 0;
  background: transparent;
  color: #1f3b60;
}

.tab-style-3 .nav-item .nav-link.active {
  background-color: transparent;
  border: 0;
  color: #1f3b60;
}

.tab-style-3 .nav-item .nav-link.active:before {
  background-color: #1f3b60;
}

.tab-style-3 .nav-item .nav-link.active:after {
  border-color: #1f3b60;
  color: #1f3b60;
}

.tab-style-4.nav-tabs {
  border: 0;
}

.tab-style-4.nav-tabs .nav-item {
  margin-inline-end: 0.5rem;
}

.tab-style-4.nav-tabs .nav-item:last-child {
  margin-inline-end: 0;
}

.tab-style-4.nav-tabs .nav-link {
  border: 0;
}

.tab-style-4.nav-tabs .nav-link:hover {
  border: 0;
  background: transparent;
  color: #1f3b60;
}

.tab-style-4.nav-tabs .nav-link.active {
  background-color: transparent;
  border: 0;
  color: #1f3b60;
  position: relative;
  overflow: hidden;
}

.tab-style-4.nav-tabs .nav-link.active::before {
  position: absolute;
  content: "";
  width: 0.75rem;
  inset-block-start: 31px;
  transform: rotate(45deg);
  inset-inline-start: 47%;
  overflow: hidden;
  z-index: 1;
  height: 0.75rem;
  background-color: #1f3b60;
  border: 1px solid #1f3b60;
}

.tab-style-4.nav-tabs .nav-link.active:after {
  position: absolute;
  content: "";
  width: 40%;
  height: 1px;
  inset-inline-start: 30%;
  inset-block-end: 0;
  background-color: #1f3b60;
}

#tab-style-4 .tab-pane.active {
  border: 1px solid #1f3b60;
  background-color: #1f3b60;
  color: #FFF;
  padding: 16px;
  border-radius: 7px;
}

.tab-style-5 .nav-item {
  margin-inline-end: 0.5rem;
}

.tab-style-5 .nav-item:last-child {
  margin-inline-end: 0;
}

.tab-style-5 .nav-item .nav-link.active {
  background: #1f3b60;
}

.tab-style-6 {
  border: 0;
  background-color: #FFF;
  border-radius: 7px;
  color: #1f3b60;
  padding: 0.5rem;
}

.tab-style-6 .nav-item {
  border: 0;
  margin-inline-end: 0.5rem;
}

.tab-style-6 .nav-item:last-child {
  margin-inline-end: 0;
}

.tab-style-6 .nav-item .nav-link {
  color: #1f3b60;
  padding: 0.5rem 1rem;
  font-size: 0.813rem;
  border: 0;
  font-weight: 500;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
}

.tab-style-6 .nav-item .nav-link.active {
  border: 0;
  background-color: #1f3b60;
  color: #FFF;
  border: 0;
  box-shadow: 0px 3px 10px 0px rgba(var(--dark-rgb), 0.05);
}

.tab-style-6 .nav-item .nav-link:hover,
.tab-style-6 .nav-item .nav-link:focus {
  border: 0;
}

.tab-style-7 .nav-link {
  margin-block-end: 0.5rem;
  font-size: 0.813rem;
  color: #677788;
  text-align: left;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
}

.tab-style-7 .nav-link:active,
.tab-style-7 .nav-link.active {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

.nav-style-1 .nav-item .nav-link.active {
  background-color: rgba(31, 59, 96, 0.1);
  color: #1f3b60;
}

@media screen and (max-width: 400px) {
  .tab-style-4 .nav-link {
    padding-inline: 0.5rem;
  }
}

.nav-tabs {
  border-bottom: 0;
}

.nav-tabs.nav-tabs-bottom li {
  margin-bottom: -1px;
}

.nav-tabs .nav-link {
  margin-bottom: -1px;
  background: 0 0;
  border: 1px solid transparent;
  border-top-left-radius: 0.25rem;
  border-top-right-radius: 0.25rem;
}

.nav-tabs .nav-link.active {
  border-color: #B5B9C3;
}

.nav-tabs li a {
  color: #202C4B;
  border-bottom-width: 2px;
}

.nav-tabs li a.active {
  border-color: transparent;
  border-bottom-color: #1f3b60;
  background-color: transparent;
  -webkit-transition: all 0.2s ease;
  -ms-transition: all 0.2s ease;
  transition: all 0.2s ease;
  color: #1f3b60;
}

.nav-tabs .nav-tabs-solid {
  background-color: #FFF;
  border: 0;
}

.nav-tabs .nav-tabs-solid .active {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
}

.nav-tabs .nav-link:hover {
  border-color: transparent;
  color: #1f3b60;
}

.nav-tabs.nav-tabs-top li a {
  border-width: 2px 0 0 0;
}

.nav-tabs.nav-tabs-top li a.active {
  border-top-color: #1f3b60;
  border-radius: 0;
}

.nav-tabs.nav-tabs-top li a:hover {
  border-top-color: #1f3b60;
  background-color: transparent;
  border-radius: 0;
}

.nav-tabs.nav-tabs-bottom li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-tabs-bottom li a.active,
.nav-tabs.nav-tabs-bottom li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-tabs-solid {
  background-color: #FFF;
  border: 0;
}

.nav-tabs.nav-tabs-solid.nav-tabs-rounded li a.active {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-tabs-solid.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-tabs-solid.nav-tabs-rounded-fill li a.active {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-tabs-solid li a.active {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  border-radius: 0;
}

.nav-link:hover {
  color: #1f3b60;
}

.page-menu .nav-tabs li a {
  font-size: 16px;
}

.tabs-set .nav-tabs {
  border-bottom: 0;
  margin-bottom: 20px;
}

.tabs-set .nav-tabs .nav-link {
  color: #0e76bd;
  padding: 8px 15px;
  font-size: 16px;
  font-weight: 700;
  border: 0;
  min-width: 120px;
  margin-right: 10px;
  border-radius: 8px;
  background: var(--Stroke, rgba(145, 158, 171, 0.3));
}

.tabs-set .nav-tabs .nav-link:focus {
  border-color: transparent;
}

.tabs-set .nav-tabs .nav-link:hover {
  border-color: transparent;
}

.tabs-set .nav-tabs .nav-link.active {
  border: 0;
  border-bottom: 2px solid #1f3b60;
  background: #1f3b60;
  color: #FFF;
}

.tabs-sets .nav-tabs {
  border-bottom: 0;
  margin: 0 0 40px;
}

.tabs-sets .nav-tabs .nav-link {
  color: #000;
  font-size: 14px;
  font-weight: 700;
  border: 0;
  background: #B5B9C3;
  margin-right: 10px;
  padding: 8px 15px;
  border-radius: 8px;
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

.tabs-sets .nav-tabs .nav-link:focus,
.tabs-sets .nav-tabs .nav-link:hover,
.tabs-sets .nav-tabs .nav-link.active {
  background: #1f3b60;
  color: #FFF;
}

@media (max-width: 767.98px) {
  .nav-tabs {
    border-bottom: 0;
    position: relative;
    background-color: #FFF;
    border: 1px solid #F8FAFC;
    padding: 5px 0;
    border-radius: 3px;
  }
}

.bg-nav-pills .nav-item {
  margin: 0;
}

.bg-nav-pills .nav-item .nav-link {
  color: #6A7287;
  background: #F4F6FA;
}

.bg-nav-pills .nav-item .nav-link.active {
  background-color: #1f3b60;
  color: #FFF;
}

.nav-tabs.nav-bordered {
  border-bottom: 1px solid #E9EDF4;
}

.nav-tabs.nav-bordered .nav-item .nav-link {
  border: 0;
  color: #6A7287;
  border-bottom: 2px solid transparent;
  border-radius: 0;
}

.nav-tabs.nav-bordered .nav-item .nav-link.active {
  color: #202C4B;
  border-bottom: 2px solid #1f3b60;
}

.nav-tabs .nav-link {
  padding: 0.5rem 1rem;
}

.nav-tabs .nav-link:hover,
.nav-tabs .nav-link:focus {
  border-color: #FFF #FFF #E9EDF4 #FFF;
}

.nav-tabs .nav-link.active:hover,
.nav-tabs .nav-link.active:focus {
  border-color: #E9EDF4 #E9EDF4 #FFF #E9EDF4;
}

.default-tabs {
  border-bottom: 1px solid #E9EDF4;
}

.default-tabs .nav-link {
  border-bottom: 0;
  border-radius: 5px 5px 0px 0px;
}

.default-tabs .nav-link.active {
  border-color: #E9EDF4;
}

.nav-tabs.nav-bordered-primary.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-primary.nav-tabs-top .nav-item .nav-link:focus {
  color: #1f3b60;
}

.nav-tabs.nav-bordered-primary.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #1f3b60;
  border-bottom: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-primary.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-primary.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-primary.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-primary .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-primary .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-primary .nav-item .nav-link:focus {
  color: #1f3b60;
}

.nav-tabs.nav-bordered-primary .nav-item .nav-link.active {
  border-bottom: 2px solid #1f3b60;
  color: #1f3b60;
}

.nav-tabs.nav-solid-primary {
  border: 0;
}

.nav-tabs.nav-solid-primary.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-primary.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #1f3b60;
}

.nav-tabs.nav-solid-primary.nav-tabs-rounded li a.active {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-primary.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-primary.nav-tabs-rounded-fill li a.active {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-primary li a:hover {
  border-color: transparent;
  color: #1f3b60;
}

.nav-tabs.nav-solid-primary li a.active {
  background-color: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-primary li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-secondary.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-secondary.nav-tabs-top .nav-item .nav-link:focus {
  color: #0e76bd;
}

.nav-tabs.nav-bordered-secondary.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #0e76bd;
  border-bottom: 0;
  color: #0e76bd;
}

.nav-tabs.nav-bordered-secondary.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-secondary.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-secondary.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-secondary .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-secondary .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-secondary .nav-item .nav-link:focus {
  color: #0e76bd;
}

.nav-tabs.nav-bordered-secondary .nav-item .nav-link.active {
  border-bottom: 2px solid #0e76bd;
  color: #0e76bd;
}

.nav-tabs.nav-solid-secondary {
  border: 0;
}

.nav-tabs.nav-solid-secondary.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-secondary.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #0e76bd;
}

.nav-tabs.nav-solid-secondary.nav-tabs-rounded li a.active {
  background-color: #0e76bd;
  border-color: #0e76bd;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-secondary.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-secondary.nav-tabs-rounded-fill li a.active {
  background-color: #0e76bd;
  border-color: #0e76bd;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-secondary li a:hover {
  border-color: transparent;
  color: #0e76bd;
}

.nav-tabs.nav-solid-secondary li a.active {
  background-color: #0e76bd;
  border-color: #0e76bd;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-secondary li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-success.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-success.nav-tabs-top .nav-item .nav-link:focus {
  color: #1ABE17;
}

.nav-tabs.nav-bordered-success.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #1ABE17;
  border-bottom: 0;
  color: #1ABE17;
}

.nav-tabs.nav-bordered-success.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-success.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-success.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-success .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-success .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-success .nav-item .nav-link:focus {
  color: #1ABE17;
}

.nav-tabs.nav-bordered-success .nav-item .nav-link.active {
  border-bottom: 2px solid #1ABE17;
  color: #1ABE17;
}

.nav-tabs.nav-solid-success {
  border: 0;
}

.nav-tabs.nav-solid-success.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-success.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #1ABE17;
}

.nav-tabs.nav-solid-success.nav-tabs-rounded li a.active {
  background-color: #1ABE17;
  border-color: #1ABE17;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-success.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-success.nav-tabs-rounded-fill li a.active {
  background-color: #1ABE17;
  border-color: #1ABE17;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-success li a:hover {
  border-color: transparent;
  color: #1ABE17;
}

.nav-tabs.nav-solid-success li a.active {
  background-color: #1ABE17;
  border-color: #1ABE17;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-success li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-info.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-info.nav-tabs-top .nav-item .nav-link:focus {
  color: #0F65CD;
}

.nav-tabs.nav-bordered-info.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #0F65CD;
  border-bottom: 0;
  color: #0F65CD;
}

.nav-tabs.nav-bordered-info.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-info.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-info.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-info .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-info .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-info .nav-item .nav-link:focus {
  color: #0F65CD;
}

.nav-tabs.nav-bordered-info .nav-item .nav-link.active {
  border-bottom: 2px solid #0F65CD;
  color: #0F65CD;
}

.nav-tabs.nav-solid-info {
  border: 0;
}

.nav-tabs.nav-solid-info.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-info.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #0F65CD;
}

.nav-tabs.nav-solid-info.nav-tabs-rounded li a.active {
  background-color: #0F65CD;
  border-color: #0F65CD;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-info.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-info.nav-tabs-rounded-fill li a.active {
  background-color: #0F65CD;
  border-color: #0F65CD;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-info li a:hover {
  border-color: transparent;
  color: #0F65CD;
}

.nav-tabs.nav-solid-info li a.active {
  background-color: #0F65CD;
  border-color: #0F65CD;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-info li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-warning.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-warning.nav-tabs-top .nav-item .nav-link:focus {
  color: #EAB300;
}

.nav-tabs.nav-bordered-warning.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #EAB300;
  border-bottom: 0;
  color: #EAB300;
}

.nav-tabs.nav-bordered-warning.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-warning.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-warning.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-warning .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-warning .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-warning .nav-item .nav-link:focus {
  color: #EAB300;
}

.nav-tabs.nav-bordered-warning .nav-item .nav-link.active {
  border-bottom: 2px solid #EAB300;
  color: #EAB300;
}

.nav-tabs.nav-solid-warning {
  border: 0;
}

.nav-tabs.nav-solid-warning.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-warning.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #EAB300;
}

.nav-tabs.nav-solid-warning.nav-tabs-rounded li a.active {
  background-color: #EAB300;
  border-color: #EAB300;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-warning.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-warning.nav-tabs-rounded-fill li a.active {
  background-color: #EAB300;
  border-color: #EAB300;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-warning li a:hover {
  border-color: transparent;
  color: #EAB300;
}

.nav-tabs.nav-solid-warning li a.active {
  background-color: #EAB300;
  border-color: #EAB300;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-warning li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-danger.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-danger.nav-tabs-top .nav-item .nav-link:focus {
  color: #E82646;
}

.nav-tabs.nav-bordered-danger.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #E82646;
  border-bottom: 0;
  color: #E82646;
}

.nav-tabs.nav-bordered-danger.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-danger.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-danger.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-danger .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-danger .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-danger .nav-item .nav-link:focus {
  color: #E82646;
}

.nav-tabs.nav-bordered-danger .nav-item .nav-link.active {
  border-bottom: 2px solid #E82646;
  color: #E82646;
}

.nav-tabs.nav-solid-danger {
  border: 0;
}

.nav-tabs.nav-solid-danger.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-danger.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #E82646;
}

.nav-tabs.nav-solid-danger.nav-tabs-rounded li a.active {
  background-color: #E82646;
  border-color: #E82646;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-danger.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-danger.nav-tabs-rounded-fill li a.active {
  background-color: #E82646;
  border-color: #E82646;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-danger li a:hover {
  border-color: transparent;
  color: #E82646;
}

.nav-tabs.nav-solid-danger li a.active {
  background-color: #E82646;
  border-color: #E82646;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-danger li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-dark.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-dark.nav-tabs-top .nav-item .nav-link:focus {
  color: #202C4B;
}

.nav-tabs.nav-bordered-dark.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #202C4B;
  border-bottom: 0;
  color: #202C4B;
}

.nav-tabs.nav-bordered-dark.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-dark.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-dark.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-dark .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-dark .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-dark .nav-item .nav-link:focus {
  color: #202C4B;
}

.nav-tabs.nav-bordered-dark .nav-item .nav-link.active {
  border-bottom: 2px solid #202C4B;
  color: #202C4B;
}

.nav-tabs.nav-solid-dark {
  border: 0;
}

.nav-tabs.nav-solid-dark.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-dark.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #202C4B;
}

.nav-tabs.nav-solid-dark.nav-tabs-rounded li a.active {
  background-color: #202C4B;
  border-color: #202C4B;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-dark.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-dark.nav-tabs-rounded-fill li a.active {
  background-color: #202C4B;
  border-color: #202C4B;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-dark li a:hover {
  border-color: transparent;
  color: #202C4B;
}

.nav-tabs.nav-solid-dark li a.active {
  background-color: #202C4B;
  border-color: #202C4B;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-dark li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-light.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-light.nav-tabs-top .nav-item .nav-link:focus {
  color: #E9EDF4;
}

.nav-tabs.nav-bordered-light.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #E9EDF4;
  border-bottom: 0;
  color: #E9EDF4;
}

.nav-tabs.nav-bordered-light.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-light.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-light.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-light .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-light .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-light .nav-item .nav-link:focus {
  color: #E9EDF4;
}

.nav-tabs.nav-bordered-light .nav-item .nav-link.active {
  border-bottom: 2px solid #E9EDF4;
  color: #E9EDF4;
}

.nav-tabs.nav-solid-light {
  border: 0;
}

.nav-tabs.nav-solid-light.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-light.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #E9EDF4;
}

.nav-tabs.nav-solid-light.nav-tabs-rounded li a.active {
  background-color: #E9EDF4;
  border-color: #E9EDF4;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-light.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-light.nav-tabs-rounded-fill li a.active {
  background-color: #E9EDF4;
  border-color: #E9EDF4;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-light li a:hover {
  border-color: transparent;
  color: #E9EDF4;
}

.nav-tabs.nav-solid-light li a.active {
  background-color: #E9EDF4;
  border-color: #E9EDF4;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-light li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-black.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-black.nav-tabs-top .nav-item .nav-link:focus {
  color: #000;
}

.nav-tabs.nav-bordered-black.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #000;
  border-bottom: 0;
  color: #000;
}

.nav-tabs.nav-bordered-black.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-black.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-black.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-black .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-black .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-black .nav-item .nav-link:focus {
  color: #000;
}

.nav-tabs.nav-bordered-black .nav-item .nav-link.active {
  border-bottom: 2px solid #000;
  color: #000;
}

.nav-tabs.nav-solid-black {
  border: 0;
}

.nav-tabs.nav-solid-black.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-black.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #000;
}

.nav-tabs.nav-solid-black.nav-tabs-rounded li a.active {
  background-color: #000;
  border-color: #000;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-black.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-black.nav-tabs-rounded-fill li a.active {
  background-color: #000;
  border-color: #000;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-black li a:hover {
  border-color: transparent;
  color: #000;
}

.nav-tabs.nav-solid-black li a.active {
  background-color: #000;
  border-color: #000;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-black li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-purple.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-purple.nav-tabs-top .nav-item .nav-link:focus {
  color: #4A00E5;
}

.nav-tabs.nav-bordered-purple.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #4A00E5;
  border-bottom: 0;
  color: #4A00E5;
}

.nav-tabs.nav-bordered-purple.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-purple.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-purple.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-purple .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-purple .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-purple .nav-item .nav-link:focus {
  color: #4A00E5;
}

.nav-tabs.nav-bordered-purple .nav-item .nav-link.active {
  border-bottom: 2px solid #4A00E5;
  color: #4A00E5;
}

.nav-tabs.nav-solid-purple {
  border: 0;
}

.nav-tabs.nav-solid-purple.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-purple.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #4A00E5;
}

.nav-tabs.nav-solid-purple.nav-tabs-rounded li a.active {
  background-color: #4A00E5;
  border-color: #4A00E5;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-purple.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-purple.nav-tabs-rounded-fill li a.active {
  background-color: #4A00E5;
  border-color: #4A00E5;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-purple li a:hover {
  border-color: transparent;
  color: #4A00E5;
}

.nav-tabs.nav-solid-purple li a.active {
  background-color: #4A00E5;
  border-color: #4A00E5;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-purple li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-yellow.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-yellow.nav-tabs-top .nav-item .nav-link:focus {
  color: #ffff00;
}

.nav-tabs.nav-bordered-yellow.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #ffff00;
  border-bottom: 0;
  color: #ffff00;
}

.nav-tabs.nav-bordered-yellow.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-yellow.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-yellow.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-yellow .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-yellow .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-yellow .nav-item .nav-link:focus {
  color: #ffff00;
}

.nav-tabs.nav-bordered-yellow .nav-item .nav-link.active {
  border-bottom: 2px solid #ffff00;
  color: #ffff00;
}

.nav-tabs.nav-solid-yellow {
  border: 0;
}

.nav-tabs.nav-solid-yellow.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-yellow.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #ffff00;
}

.nav-tabs.nav-solid-yellow.nav-tabs-rounded li a.active {
  background-color: #ffff00;
  border-color: #ffff00;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-yellow.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-yellow.nav-tabs-rounded-fill li a.active {
  background-color: #ffff00;
  border-color: #ffff00;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-yellow li a:hover {
  border-color: transparent;
  color: #ffff00;
}

.nav-tabs.nav-solid-yellow li a.active {
  background-color: #ffff00;
  border-color: #ffff00;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-yellow li a.active:hover {
  color: #FFF;
}

.nav-tabs.nav-bordered-teal.nav-tabs-top .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-teal.nav-tabs-top .nav-item .nav-link:focus {
  color: #02a8b5;
}

.nav-tabs.nav-bordered-teal.nav-tabs-top .nav-item .nav-link.active {
  border-top: 2px solid #02a8b5;
  border-bottom: 0;
  color: #02a8b5;
}

.nav-tabs.nav-bordered-teal.nav-tabs-top li a {
  border-width: 0 0 2px 0;
}

.nav-tabs.nav-bordered-teal.nav-tabs-top li a.active,
.nav-tabs.nav-bordered-teal.nav-tabs-top li a:hover {
  border-bottom-color: #1f3b60;
  background: transparent;
  border-radius: 0;
  color: #1f3b60;
}

.nav-tabs.nav-bordered-teal .nav-item .nav-link {
  color: #202C4B;
}

.nav-tabs.nav-bordered-teal .nav-item .nav-link:hover,
.nav-tabs.nav-bordered-teal .nav-item .nav-link:focus {
  color: #02a8b5;
}

.nav-tabs.nav-bordered-teal .nav-item .nav-link.active {
  border-bottom: 2px solid #02a8b5;
  color: #02a8b5;
}

.nav-tabs.nav-solid-teal {
  border: 0;
}

.nav-tabs.nav-solid-teal.nav-tabs-rounded li a {
  border-radius: 50px;
}

.nav-tabs.nav-solid-teal.nav-tabs-rounded li a:hover {
  border-color: transparent;
  color: #02a8b5;
}

.nav-tabs.nav-solid-teal.nav-tabs-rounded li a.active {
  background-color: #02a8b5;
  border-color: #02a8b5;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-teal.nav-tabs-rounded-fill li a {
  border-color: #E9EDF4;
}

.nav-tabs.nav-solid-teal.nav-tabs-rounded-fill li a.active {
  background-color: #02a8b5;
  border-color: #02a8b5;
  color: #FFF;
  border-radius: 50px;
}

.nav-tabs.nav-solid-teal li a:hover {
  border-color: transparent;
  color: #02a8b5;
}

.nav-tabs.nav-solid-teal li a.active {
  background-color: #02a8b5;
  border-color: #02a8b5;
  color: #FFF;
  border-radius: 0;
}

.nav-tabs.nav-solid-teal li a.active:hover {
  color: #FFF;
}

.list-group .list-group-item.active {
  background: #1f3b60;
  border-color: #1f3b60;
  color: #fff;
}

.list-group-item {
  background-color: #FFF;
  border-color: #E9EDF4;
  color: #6A7287;
}

.list-group-item.active {
  background: #1f3b60 !important;
  border-color: #1f3b60 !important;
}

.list-group-item.disabled {
  color: #6A7287 !important;
  background-color: #E6E8EB !important;
  border-color: #E9EDF4 !important;
}

.list-group-item-primary {
  background: #F2F5FF;
  border-color: #F2F5FF;
  color: #1f3b60;
}

.list-group-item-secondary {
  background: #E8FCFF;
  border-color: #E8FCFF;
  color: #0e76bd;
}

.list-group-item-success {
  background: #E8F9E8;
  border-color: #E8F9E8;
  color: #1ABE17;
}

.list-group-item-danger {
  background: #FDE9ED;
  border-color: #FDE9ED;
  color: #E82646;
}

.list-group-item-info {
  background: #E7F1FC;
  border-color: #E7F1FC;
  color: #0F65CD;
}

.list-group-item-warning {
  background: #FEF8EA;
  border-color: #FEF8EA;
  color: #EAB300;
}

.list-group-item-light {
  background: #D1D6DE;
  border-color: #E9EDF4;
  color: #202C4B;
}

.list-group-item-dark {
  background: #F3F6FF;
  border-color: #E6E8EB;
  color: #202C4B;
}

.list-group-item-action {
  color: #6A7287;
}

.list-group-item-action.list-group-item-primary:hover {
  background: #F2F5FF;
}

.list-group-item-action.list-group-item-secondary:hover {
  background: #E8FCFF;
}

.list-group-item-action.list-group-item-warning:hover {
  background: #FEF8EA;
}

.list-group-item-action.list-group-item-success:hover {
  background: #E8F9E8;
}

.list-group-item-action.list-group-item-danger:hover {
  background: #FDE9ED;
}

.list-group-item-action.list-group-item-info:hover {
  background: #E7F1FC;
}

.list-group-item-action.list-group-item-light:hover {
  background: #D1D6DE;
}

.list-group-item-action.list-group-item-dark:hover {
  background: #E6E8EB;
}

/*-----------------
    Custom Tab — segmented control

    Equal-width items sit inside a soft track; the selected one lifts onto a
    raised surface. Styles `.nav-link.active`, so Bootstrap's own tab plugin
    drives it — no extra script needed.

        <ul class="nav custom-tab" role="tablist">
          <li class="nav-item">
            <a class="nav-link active" data-bs-toggle="tab" href="#pane">Settings</a>
          </li>
        </ul>

    A plain <div class="custom-tab"> holding <button class="nav-link"> works
    too, matching the button/tablist pattern.
-----------------*/
.custom-tab {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 4px;
  border: 0;
  border-radius: 12px;
  background: #F4F6FA;
}

.custom-tab>.nav-item {
  flex: 1 1 0;
  min-width: 0;
  /* the global .nav-item gutter would double up with the track gap */
  margin-inline-end: 0;
}

.custom-tab>.nav-item>.nav-link,
.custom-tab>.nav-link {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 36px;
  padding: 0 0.75rem;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: #6A7287;
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  transition: background-color 0.18s ease, color 0.18s ease, box-shadow 0.18s ease;
}

.custom-tab>.nav-item>.nav-link i,
.custom-tab>.nav-link i {
  font-size: 1rem;
  margin-inline-end: 0.375rem;
}

.custom-tab>.nav-item>.nav-link:hover:not(.active):not(.disabled),
.custom-tab>.nav-link:hover:not(.active):not(.disabled) {
  color: #202C4B;
}

.custom-tab>.nav-item>.nav-link.active,
.custom-tab>.nav-item>.nav-link[aria-selected=true],
.custom-tab>.nav-link.active,
.custom-tab>.nav-link[aria-selected=true] {
  background: #FFF;
  color: #202C4B;
  font-weight: 600;
  box-shadow: 0 1px 2px rgba(17, 24, 39, 0.08);
}

.custom-tab>.nav-item>.nav-link.disabled,
.custom-tab>.nav-link.disabled {
  opacity: 0.5;
  pointer-events: none;
}

/* let the track hug its items instead of filling the row */

.custom-tab.custom-tab-inline {
  display: inline-flex;
}

.custom-tab.custom-tab-inline>.nav-item {
  flex: 0 0 auto;
}

.custom-tab.custom-tab-sm>.nav-item>.nav-link,
.custom-tab.custom-tab-sm>.nav-link {
  height: 30px;
  font-size: 0.8125rem;
}

.custom-tab.custom-tab-lg>.nav-item>.nav-link,
.custom-tab.custom-tab-lg>.nav-link {
  height: 42px;
  font-size: 0.9375rem;
}

[data-theme=dark] .custom-tab,
[data-bs-theme=dark] .custom-tab {
  background: rgba(255, 255, 255, 0.06);
}

[data-theme=dark] .custom-tab>.nav-item>.nav-link.active,
[data-theme=dark] .custom-tab>.nav-item>.nav-link[aria-selected=true],
[data-theme=dark] .custom-tab>.nav-link.active,
[data-theme=dark] .custom-tab>.nav-link[aria-selected=true],
[data-bs-theme=dark] .custom-tab>.nav-item>.nav-link.active,
[data-bs-theme=dark] .custom-tab>.nav-item>.nav-link[aria-selected=true],
[data-bs-theme=dark] .custom-tab>.nav-link.active,
[data-bs-theme=dark] .custom-tab>.nav-link[aria-selected=true] {
  background: #1a2236;
  color: #e9edf5;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}

/*-----------------
    Custom Tab 2 — boxed / folder tabs

    Tabs sit on a hairline rule and the selected one lifts onto the surface,
    masking the rule beneath it so it reads as joined to the panel below.

        <ul class="nav custom-tab-2" role="tablist">
          <li class="nav-item">
            <a class="nav-link active" data-bs-toggle="tab" href="#pane">Overview</a>
          </li>
        </ul>
-----------------*/
.custom-tab-2 {
  display: flex;
  align-items: flex-end;
  gap: 2px;
  padding: 0;
  border: 0;
  border-bottom: 1px solid #E9EDF4;
}

.custom-tab-2>.nav-item {
  margin-inline-end: 0;
}

.custom-tab-2>.nav-item>.nav-link,
.custom-tab-2>.nav-link {
  display: flex;
  align-items: center;
  padding: 0.5rem 1rem;
  /* pulls the tab down so its own border can cover the rule */
  margin-bottom: -1px;
  border: 1px solid transparent;
  border-radius: 8px 8px 0 0;
  background: transparent;
  color: #6A7287;
  font-size: 0.875rem;
  font-weight: 500;
  line-height: 1.4;
  white-space: nowrap;
  transition: background-color 0.18s ease, color 0.18s ease, border-color 0.18s ease;
}

.custom-tab-2>.nav-item>.nav-link i,
.custom-tab-2>.nav-link i {
  font-size: 1rem;
  margin-inline-end: 0.375rem;
}

.custom-tab-2>.nav-item>.nav-link:hover:not(.active):not(.disabled),
.custom-tab-2>.nav-link:hover:not(.active):not(.disabled) {
  background: #F6F8FB;
  color: #202C4B;
}

.custom-tab-2>.nav-item>.nav-link.active,
.custom-tab-2>.nav-item>.nav-link[aria-selected=true],
.custom-tab-2>.nav-link.active,
.custom-tab-2>.nav-link[aria-selected=true] {
  background: #FFF;
  border-color: #E9EDF4;
  border-bottom-color: #FFF;
  color: #202C4B;
  font-weight: 600;
}

.custom-tab-2>.nav-item>.nav-link.disabled,
.custom-tab-2>.nav-link.disabled {
  opacity: 0.5;
  pointer-events: none;
}

/*-----------------
    Custom Tab 3 — chip tabs

    Fully rounded outlined chips for filter-style switching. Each chip can
    carry a count via `.custom-tab-count`, which recolours when selected.

        <a class="nav-link active" data-bs-toggle="tab" href="#pane">
            All <span class="custom-tab-count">12</span>
        </a>
-----------------*/
.custom-tab-3 {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  padding: 0;
  border: 0;
}

.custom-tab-3>.nav-item {
  margin-inline-end: 0;
}

.custom-tab-3>.nav-item>.nav-link,
.custom-tab-3>.nav-link {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  height: 34px;
  padding: 0 0.875rem;
  border: 1px solid #E9EDF4;
  border-radius: 999px;
  background: #FFF;
  color: #6A7287;
  font-size: 0.8125rem;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  transition: background-color 0.18s ease, color 0.18s ease, border-color 0.18s ease;
}

.custom-tab-3>.nav-item>.nav-link i,
.custom-tab-3>.nav-link i {
  font-size: 0.9375rem;
  margin-inline-end: 0;
}

.custom-tab-3>.nav-item>.nav-link .custom-tab-count,
.custom-tab-3>.nav-link .custom-tab-count {
  display: inline-grid;
  place-items: center;
  min-width: 20px;
  height: 20px;
  padding: 0 0.375rem;
  border-radius: 999px;
  background: #F0F2F7;
  color: #202C4B;
  font-size: 0.6875rem;
  font-weight: 600;
  line-height: 1;
  transition: background-color 0.18s ease, color 0.18s ease;
}

.custom-tab-3>.nav-item>.nav-link:hover:not(.active):not(.disabled),
.custom-tab-3>.nav-link:hover:not(.active):not(.disabled) {
  border-color: #1f3b60;
  color: #1f3b60;
}

.custom-tab-3>.nav-item>.nav-link.active,
.custom-tab-3>.nav-item>.nav-link[aria-selected=true],
.custom-tab-3>.nav-link.active,
.custom-tab-3>.nav-link[aria-selected=true] {
  background: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  font-weight: 600;
}

.custom-tab-3>.nav-item>.nav-link.active .custom-tab-count,
.custom-tab-3>.nav-item>.nav-link[aria-selected=true] .custom-tab-count,
.custom-tab-3>.nav-link.active .custom-tab-count,
.custom-tab-3>.nav-link[aria-selected=true] .custom-tab-count {
  background: rgba(255, 255, 255, 0.24);
  color: #FFF;
}

.custom-tab-3>.nav-item>.nav-link.disabled,
.custom-tab-3>.nav-link.disabled {
  opacity: 0.5;
  pointer-events: none;
}

/*-----------------
    Custom Tab 4 — icon tile tabs

    Equal-width tiles with the icon stacked over the label. Suits a small set
    of top-level modes where the icon carries most of the meaning.

        <ul class="nav custom-tab-4" role="tablist">
          <li class="nav-item">
            <a class="nav-link active" data-bs-toggle="tab" href="#pane">
                <i class="ti ti-layout-grid"></i>Grid
            </a>
          </li>
        </ul>
-----------------*/
.custom-tab-4 {
  display: flex;
  align-items: stretch;
  gap: 10px;
  padding: 0;
  border: 0;
}

.custom-tab-4>.nav-item {
  flex: 1 1 0;
  min-width: 0;
  margin-inline-end: 0;
}

.custom-tab-4>.nav-item>.nav-link,
.custom-tab-4>.nav-link {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.375rem;
  width: 100%;
  height: 100%;
  padding: 0.875rem 0.75rem;
  border: 1px solid #E9EDF4;
  border-radius: 10px;
  background: #FFF;
  color: #6A7287;
  font-size: 0.8125rem;
  font-weight: 500;
  line-height: 1.3;
  text-align: center;
  transition: background-color 0.18s ease, color 0.18s ease, border-color 0.18s ease;
}

.custom-tab-4>.nav-item>.nav-link i,
.custom-tab-4>.nav-link i {
  font-size: 1.25rem;
  margin-inline-end: 0;
  color: #838A9B;
  transition: color 0.18s ease;
}

.custom-tab-4>.nav-item>.nav-link:hover:not(.active):not(.disabled),
.custom-tab-4>.nav-link:hover:not(.active):not(.disabled) {
  border-color: #1f3b60;
  color: #202C4B;
}

.custom-tab-4>.nav-item>.nav-link:hover:not(.active):not(.disabled) i,
.custom-tab-4>.nav-link:hover:not(.active):not(.disabled) i {
  color: #1f3b60;
}

.custom-tab-4>.nav-item>.nav-link.active,
.custom-tab-4>.nav-item>.nav-link[aria-selected=true],
.custom-tab-4>.nav-link.active,
.custom-tab-4>.nav-link[aria-selected=true] {
  border-color: #1f3b60;
  background: #F2F5FF;
  color: #1f3b60;
  font-weight: 600;
}

.custom-tab-4>.nav-item>.nav-link.active i,
.custom-tab-4>.nav-item>.nav-link[aria-selected=true] i,
.custom-tab-4>.nav-link.active i,
.custom-tab-4>.nav-link[aria-selected=true] i {
  color: #1f3b60;
}

.custom-tab-4>.nav-item>.nav-link.disabled,
.custom-tab-4>.nav-link.disabled {
  opacity: 0.5;
  pointer-events: none;
}

[data-theme=dark] .custom-tab-2,
[data-bs-theme=dark] .custom-tab-2 {
  border-bottom-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .custom-tab-2>.nav-item>.nav-link:hover:not(.active):not(.disabled),
[data-theme=dark] .custom-tab-2>.nav-link:hover:not(.active):not(.disabled),
[data-bs-theme=dark] .custom-tab-2>.nav-item>.nav-link:hover:not(.active):not(.disabled),
[data-bs-theme=dark] .custom-tab-2>.nav-link:hover:not(.active):not(.disabled) {
  background: rgba(255, 255, 255, 0.04);
  color: #e9edf5;
}

[data-theme=dark] .custom-tab-2>.nav-item>.nav-link.active,
[data-theme=dark] .custom-tab-2>.nav-item>.nav-link[aria-selected=true],
[data-theme=dark] .custom-tab-2>.nav-link.active,
[data-theme=dark] .custom-tab-2>.nav-link[aria-selected=true],
[data-bs-theme=dark] .custom-tab-2>.nav-item>.nav-link.active,
[data-bs-theme=dark] .custom-tab-2>.nav-item>.nav-link[aria-selected=true],
[data-bs-theme=dark] .custom-tab-2>.nav-link.active,
[data-bs-theme=dark] .custom-tab-2>.nav-link[aria-selected=true] {
  background: #141b2d;
  border-color: rgba(255, 255, 255, 0.08);
  border-bottom-color: #141b2d;
  color: #e9edf5;
}

[data-theme=dark] .custom-tab-3>.nav-item>.nav-link,
[data-theme=dark] .custom-tab-3>.nav-link,
[data-bs-theme=dark] .custom-tab-3>.nav-item>.nav-link,
[data-bs-theme=dark] .custom-tab-3>.nav-link {
  background: transparent;
  border-color: rgba(255, 255, 255, 0.12);
}

[data-theme=dark] .custom-tab-3>.nav-item>.nav-link .custom-tab-count,
[data-theme=dark] .custom-tab-3>.nav-link .custom-tab-count,
[data-bs-theme=dark] .custom-tab-3>.nav-item>.nav-link .custom-tab-count,
[data-bs-theme=dark] .custom-tab-3>.nav-link .custom-tab-count {
  background: rgba(255, 255, 255, 0.1);
  color: #e9edf5;
}

[data-theme=dark] .custom-tab-4>.nav-item>.nav-link,
[data-theme=dark] .custom-tab-4>.nav-link,
[data-bs-theme=dark] .custom-tab-4>.nav-item>.nav-link,
[data-bs-theme=dark] .custom-tab-4>.nav-link {
  background: transparent;
  border-color: rgba(255, 255, 255, 0.12);
}

[data-theme=dark] .custom-tab-4>.nav-item>.nav-link.active,
[data-theme=dark] .custom-tab-4>.nav-item>.nav-link[aria-selected=true],
[data-theme=dark] .custom-tab-4>.nav-link.active,
[data-theme=dark] .custom-tab-4>.nav-link[aria-selected=true],
[data-bs-theme=dark] .custom-tab-4>.nav-item>.nav-link.active,
[data-bs-theme=dark] .custom-tab-4>.nav-item>.nav-link[aria-selected=true],
[data-bs-theme=dark] .custom-tab-4>.nav-link.active,
[data-bs-theme=dark] .custom-tab-4>.nav-link[aria-selected=true] {
  background: rgba(31, 59, 96, 0.14);
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
/* ---------- TABS ---------- */
.pill-tabs {
  gap: 3px;
  background: var(--surface-soft);
  padding: 3px;
  border-radius: 999px;
}

.pill-tab {
  font-size: 12px;
  font-weight: 600;
  color: var(--muted);
  padding: 6px 13px;
  border-radius: 999px;
  cursor: pointer;
  border: 0;
  background: transparent;
  transition: all var(--transition-card);
}

.pill-tab:hover {
  color: var(--heading);
}

.pill-tab.active {
  background: var(--surface);
  color: var(--bs-primary);
  box-shadow: var(--shadow-card);
}

.pill-tabpane {
  display: none;
}

.pill-tabpane.active {
  display: block;
  animation: pane-fade-in 0.35s ease;
}

/* ---------- SKELETON ---------- */
/* ---------- animations ---------- */
@keyframes pane-fade-in {
  from {
    opacity: 0;
    transform: translateY(8px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

/*-----------------
	Carousel nav control

	Rescued from the former pages/_student-dashboard.scss, whose other twelve
	selectors were dead. Used by the file manager and notes carousels, so it is
	a shared control rather than a page style.
-----------------*/
.nav-control {
  display: flex;
  align-items: center;
}

.nav-control button {
  border: 1px solid #E9EDF4;
  border-radius: 50%;
  width: 24px;
  height: 24px;
  background: #FFF;
  color: #515B73;
  font-size: 11px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.nav-control button:hover {
  background: #202C4B;
  color: #FFF;
}

.nav-control button.owl-prev {
  margin-right: 8px;
}

[data-bs-toggle=card-fullscreen] svg {
  width: 15px;
  height: 15px;
}

[data-bs-toggle=card-remove] svg {
  width: 15px;
  height: 15px;
}

svg.collapse-open,
svg.collapse-close {
  width: 15px;
  height: 15px;
}

.btn-icon.btn-danger-light {
  color: #E82646;
  background: #FDE9ED;
}

@media (min-width: 576px) {
  .mx-sm-7 {
    margin-inline: 3rem !important;
  }
}

.grid-structure .grid-container {
  background-color: #E9EDF4;
  margin-bottom: 10px;
  font-size: 0.8rem;
  font-weight: 600;
  padding: 10px 20px;
}

/*-----------------
    Glass backdrop

    Frosts the page behind a modal or an offcanvas instead of flatly dimming it.

    Bootstrap fades a backdrop in by animating `opacity` up to 0.5, but opacity
    also attenuates `backdrop-filter` — a half-transparent layer only half
    applies its blur, so the page underneath still reads sharp. The layer is
    therefore driven to full opacity and the dimming moved into the background
    colour's own alpha channel, which leaves the blur at full strength while the
    fade-in still animates from transparent.

    Only applied where the filter is supported; elsewhere Bootstrap's plain
    50% black backdrop stands, so nothing is left unreadably clear.
-----------------*/
@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) {

  .modal-backdrop,
  .offcanvas-backdrop {
    -webkit-backdrop-filter: blur(7px) saturate(140%);
    backdrop-filter: blur(7px) saturate(140%);
  }

  .modal-backdrop {
    --bs-backdrop-bg: rgba(32, 44, 75, 0.42);
    --bs-backdrop-opacity: 1;
  }

  /*----- offcanvas hard-codes its colour and opacity, so both are restated -----*/
  .offcanvas-backdrop {
    background-color: rgba(32, 44, 75, 0.42);
  }

  .offcanvas-backdrop.show {
    opacity: 1;
  }
}

.modal .card {
  border: 0;
}

.modal .modal-content {
  border: 1px solid #E9EDF4;
  box-shadow: 0px 4px 74px 0px rgba(208, 208, 208, 0.2509803922);
  border-radius: 5px;
}

.modal .modal-title {
  font-size: 20px;
  font-weight: 600;
}

@media (max-width: 991.98px) {
  .modal .modal-title {
    font-size: 16px;
  }
}

.modal .logo-lg img {
  width: 150px;
}

.modal .modal-header {
  border-color: #E9EDF4;
  border-bottom: 1px solid #E9EDF4;
}

.modal .modal-header .close,
.modal .modal-header .btn-close {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  color: #EF677E;
  opacity: 1;
  font-size: 12px;
  width: 22px;
  height: 22px;
  border: 0;
  font-weight: 700;
  background-color: transparent;
  border-radius: 50px;
}

.modal .modal-header .close:hover,
.modal .modal-header .btn-close:hover {
  background-color: transparent;
  color: #FFF;
}

.modal .modal-footer {
  border-top: 1px solid #E9EDF4;
  gap: 12px;
}

.modal .modal-footer .btn {
  margin: 0;
}

.modal .modal-footer .btn-secondary {
  background: #0e76bd;
}

.modal .modal-footer .btn-secondary:hover {
  -webkit-box-shadow: inset 0 0px 0px 100px #FFF;
  -moz-box-shadow: inset 0 0px 0px 100px #FFF;
  box-shadow: inset 0 0px 0px 100px #FFF;
  color: #0e76bd !important;
}

.modal .note-editor.note-frame.card {
  border: 1px solid rgba(0, 0, 0, 0.2) !important;
}

.modal-content .modal-header {
  justify-content: space-between;
}

.modal-content .modal-header .custom-btn-close {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: #838A9B;
  color: #FFF;
  margin: 0;
  padding: 0;
  background-image: none;
}

.modal-content .modal-header .custom-btn-close:hover {
  background-color: #E82646;
}

.modal-btn .btn {
  padding: 5px 20px;
}

.modal.animated .modal-dialog {
  transform: translate(0, 0);
}

.modal.effect-scale .modal-dialog {
  transform: scale(0.7);
  opacity: 0;
  transition: all 0.3s;
}

.modal.effect-scale.show .modal-dialog {
  transform: scale(1);
  opacity: 1;
}

.modal.effect-slide-in-right .modal-dialog {
  transform: translateX(20%);
  opacity: 0;
  transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
}

.modal.effect-slide-in-right.show .modal-dialog {
  transform: translateX(0);
  opacity: 1;
}

.modal.effect-slide-in-bottom .modal-dialog {
  transform: translateY(20%);
  opacity: 0;
  transition: all 0.3s;
}

.modal.effect-slide-in-bottom.show .modal-dialog {
  transform: translateY(0);
  opacity: 1;
}

.modal.effect-newspaper .modal-dialog {
  transform: scale(0) rotate(720deg);
  opacity: 0;
}

.modal.effect-newspaper.show~.modal-backdrop,
.modal.effect-newspaper .modal-dialog {
  transition: all 0.5s;
}

.modal.effect-newspaper.show .modal-dialog {
  transform: scale(1) rotate(0deg);
  opacity: 1;
}

.modal.effect-fall {
  -webkit-perspective: 1300px;
  -moz-perspective: 1300px;
  perspective: 1300px;
}

.modal.effect-fall .modal-dialog {
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
  transform: translateZ(600px) rotateX(20deg);
  opacity: 0;
}

.modal.effect-fall.show .modal-dialog {
  transition: all 0.3s ease-in;
  transform: translateZ(0px) rotateX(0deg);
  opacity: 1;
}

.modal.effect-flip-horizontal {
  perspective: 1300px;
}

.modal.effect-flip-horizontal .modal-dialog {
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
  transform: rotateY(-70deg);
  transition: all 0.3s;
  opacity: 0;
}

.modal.effect-flip-horizontal.show .modal-dialog {
  transform: rotateY(0deg);
  opacity: 1;
}

.modal.effect-flip-vertical {
  perspective: 1300px;
}

.modal.effect-flip-vertical .modal-dialog {
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
  transform: rotateX(-70deg);
  transition: all 0.3s;
  opacity: 0;
}

.modal.effect-flip-vertical.show .modal-dialog {
  transform: rotateX(0deg);
  opacity: 1;
}

.modal.effect-super-scaled .modal-dialog {
  transform: scale(2);
  opacity: 0;
  transition: all 0.3s;
}

.modal.effect-super-scaled.show .modal-dialog {
  transform: scale(1);
  opacity: 1;
}

.modal.effect-sign {
  perspective: 1300px;
}

.modal.effect-sign .modal-dialog {
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
  transform: rotateX(-60deg);
  transform-origin: 50% 0;
  opacity: 0;
  transition: all 0.3s;
}

.modal.effect-sign.show .modal-dialog {
  transform: rotateX(0deg);
  opacity: 1;
}

.modal.effect-rotate-bottom {
  perspective: 1300px;
}

.modal.effect-rotate-bottom .modal-dialog {
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
  transform: translateY(100%) rotateX(90deg);
  transform-origin: 0 100%;
  opacity: 0;
  transition: all 0.3s ease-out;
}

.modal.effect-rotate-bottom.show .modal-dialog {
  transform: translateY(0%) rotateX(0deg);
  opacity: 1;
}

.modal.effect-rotate-left {
  perspective: 1300px;
}

.modal.effect-rotate-left .modal-dialog {
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
  transform: translateZ(100px) translateX(-30%) rotateY(90deg);
  transform-origin: 0 100%;
  opacity: 0;
  transition: all 0.3s;
}

.modal.effect-rotate-left.show .modal-dialog {
  transform: translateZ(0px) translateX(0%) rotateY(0deg);
  opacity: 1;
}

.offcanvas.offcanvas-end {
  width: auto !important;
}

.offcanvas.offcanvas-end.em-payrol-add {
  max-width: 1192px !important;
}

#delete-modal .modal-dialog {
  max-width: 400px;
}

#delete-modal .modal-dialog .delete-icon {
  width: 60px;
  height: 60px;
  border-radius: 5px;
  margin: 0 auto 24px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  background: #FDE9ED;
  color: #E82646;
  font-size: 40px;
}

#delete-modal .modal-dialog h4 {
  font-size: 20px;
  margin-bottom: 5px;
}

#delete-modal .modal-dialog p {
  margin-bottom: 24px;
}

.custom-modal .modal-header {
  justify-content: space-between;
  align-items: center;
}

.modal-header .badge {
  box-shadow: none;
}

.offcanvas .btn-close {
  background: transparent;
  font-size: 20px;
  padding: 0;
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all 0.7s;
}

.offcanvas .btn-close:hover {
  color: #E82646;
}

.grid-showcase {
  margin-bottom: -10px;
}

.grid-showcase span,
.grid-showcase .grid-wrapper {
  display: block;
  padding: 10px;
  margin-bottom: 10px;
  text-align: center;
  background-color: rgba(242, 243, 247, 0.7);
}

.grid-align {
  margin-bottom: -16px;
}

.grid-align .row {
  padding: 15px 0;
  min-height: 7rem;
  margin-bottom: 16px;
}

.grid-vertical {
  min-height: 150px;
  padding: 10px;
  color: #000;
}

.swal2-actions .swal2-confirm.btn:active {
  background-color: #1f3b60;
  border-color: #1f3b60;
}

.swal2-confirm {
  margin-right: 5px;
}

/* index2 shell + widgets — extracted from app-new.css */
/*-----------------
    Data table

    Wrap any plain Bootstrap `<table>` in `.data-table` and it picks up the
    grid treatment used on the Classes page — sticky uppercase header, quiet
    row borders, a hover state and a selected state driven by the row's own
    checkbox.

    Nothing is required on the table itself: no extra classes on `<table>`,
    `<thead>`, `<tr>` or `<td>`. Everything is reached through element
    selectors and the Bootstrap classes already in the markup.

        <div class="data-table">
            <table class="table">…</table>
        </div>
-----------------*/
.data-table {
  position: relative;
  overflow: auto;
}

.data-table .dt-detail p {
  white-space: normal;
}

/*-----------------
      Table shell
  -----------------*/

.data-table>.table,
.data-table>.table-responsive>.table {
  width: 100%;
  margin-bottom: 0;
  border-collapse: separate;
  border-spacing: 0;
  /* Bootstrap paints cell backgrounds through this variable; clearing it
     lets the rules below own the surface and hover colours */
  --bs-table-bg: transparent;
  --bs-table-accent-bg: transparent;
}

.data-table>.table>thead>tr>th,
.data-table>.table-responsive>.table>thead>tr>th {
  position: sticky;
  top: 0;
  z-index: 5;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 14px 16px;
  border-bottom: 1px solid var(--bs-border-color);
  border-top: 0;
  white-space: nowrap;
  user-select: none;
  vertical-align: middle;
}

.data-table>.table>tbody>tr>td,
.data-table>.table>tbody>tr>th,
.data-table>.table-responsive>.table>tbody>tr>td,
.data-table>.table-responsive>.table>tbody>tr>th {
  padding: 10px 12px;
  border-bottom: 1px solid var(--bs-border-color);
  border-top: 0;
  vertical-align: middle;
  font-size: 13px;
  background: var(--bs-body-bg);
  transition: background var(--transition);
}

.data-table>.table>tbody>tr:hover>td,
.data-table>.table>tbody>tr:hover>th,
.data-table>.table-responsive>.table>tbody>tr:hover>td,
.data-table>.table-responsive>.table>tbody>tr:hover>th {
  background: var(--bs-tertiary-bg);
}

/* a checked row reads as selected without needing a class */

.data-table>.table>tbody>tr:has(input[type=checkbox]:checked)>td,
.data-table>.table>tbody>tr:has(input[type=checkbox]:checked)>th,
.data-table>.table-responsive>.table>tbody>tr:has(input[type=checkbox]:checked)>td,
.data-table>.table-responsive>.table>tbody>tr:has(input[type=checkbox]:checked)>th {
  background: var(--tint-primary);
}

.data-table>.table>tbody>tr:last-child>td,
.data-table>.table>tbody>tr:last-child>th,
.data-table>.table-responsive>.table>tbody>tr:last-child>td,
.data-table>.table-responsive>.table>tbody>tr:last-child>th {
  border-bottom: 0;
}

/*-----------------
      Cell contents

      No sizing is imposed here — avatars, badges and action buttons keep
      whatever the existing `.avatar`, `.badge` and `.btn` components give
      them. The table only makes sure they sit on the row's centre line.
  -----------------*/

.data-table .table>tbody>tr>td>.d-flex,
.data-table .table>tbody>tr>td>.dropdown,
.data-table .table>tbody>tr>th>.d-flex,
.data-table .table>tbody>tr>th>.dropdown {
  align-items: center;
}

/*-----------------
      Responsive — the header stays put and the grid scrolls sideways
  -----------------*/

@media (max-width: 991.98px) {

  .data-table>.table>thead>tr>th,
  .data-table>.table-responsive>.table>thead>tr>th {
    padding: 12px;
  }

  .data-table>.table>tbody>tr>td,
  .data-table>.table>tbody>tr>th,
  .data-table>.table-responsive>.table>tbody>tr>td,
  .data-table>.table-responsive>.table>tbody>tr>th {
    padding: 10px;
  }
}

/*-----------------
    Grid extras

    The pieces a data grid needs beyond a plain table: a user cell, status
    pill, row actions, expander and detail row. They live here so a page only
    ever reaches for `.data-table` and its `dt-` children, instead of
    borrowing another page's prefix and then overriding the sizing.
-----------------*/
.data-table .dt-user {
  display: flex;
  align-items: center;
  gap: 10px;
}

.data-table .dt-user .dt-avatar {
  position: relative;
  width: 38px;
  height: 38px;
  border-radius: 10px;
  overflow: hidden;
  flex-shrink: 0;
  border: 1px solid var(--bs-border-color);
  box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
}

.data-table .dt-user .dt-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.data-table .dt-user .dt-name {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-heading-color, #111827);
  line-height: 1.2;
  text-decoration: none;
}

.data-table .dt-user .dt-name:hover {
  color: var(--bs-primary);
}

.data-table .dt-user .dt-sub {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-top: 1px;
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.data-table .dt-user .dt-sub .dt-dot {
  opacity: 0.5;
}

.data-table .dt-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 600;
  padding: 5px 11px;
  border-radius: 999px;
  line-height: 1;
}

.data-table .dt-pill .dt-pill-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
}

.data-table .dt-pill.is-active {
  background: rgba(22, 163, 74, 0.12);
  color: #15803d;
}

.data-table .dt-pill.is-inactive {
  background: rgba(107, 114, 128, 0.14);
  color: #4b5563;
}

.data-table .dt-pill.is-new {
  background: rgba(8, 145, 178, 0.12);
  color: #0e7490;
}

.data-table .dt-pill.is-archived {
  background: rgba(123, 97, 255, 0.12);
  color: #6d28d9;
}

.data-table .dt-pill.is-pending {
  background: rgba(245, 158, 11, 0.14);
  color: #b45309;
}

.data-table .dt-pill.is-emergency {
  background: rgba(220, 38, 38, 0.12);
  color: #b91c1c;
}

.data-table .dt-pill.is-exam {
  background: rgba(219, 39, 119, 0.12);
  color: #be185d;
}

.data-table .dt-actions {
  display: flex;
  align-items: center;
  gap: 4px;
  justify-content: flex-end;
}

.data-table .dt-ib {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  flex-shrink: 0;
  text-decoration: none;
  transition: all var(--transition);
}

.data-table .dt-ib i {
  font-size: 14px;
}

.data-table .dt-ib:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.data-table .dt-ib.success {
  color: #16a34a;
}

.data-table .dt-ib.success:hover {
  border-color: #16a34a;
  color: #16a34a;
  background: rgba(22, 163, 74, 0.08);
}

.data-table .dt-ib.danger {
  color: #dc2626;
}

.data-table .dt-ib.danger:hover {
  border-color: #dc2626;
  color: #dc2626;
  background: rgba(220, 38, 38, 0.08);
}

.data-table .dt-sortable {
  cursor: pointer;
  transition: color var(--transition);
}

.data-table .dt-sortable:hover {
  color: var(--bs-primary);
}

.data-table .dt-sortable .dt-sort-ic {
  font-size: 14px;
  opacity: 0.5;
  vertical-align: middle;
  transition: transform var(--transition), opacity var(--transition);
}

.data-table .dt-sortable.dt-sort-asc .dt-sort-ic {
  opacity: 1;
  color: var(--bs-primary);
}

.data-table .dt-sortable.dt-sort-desc .dt-sort-ic {
  opacity: 1;
  color: var(--bs-primary);
  transform: rotate(180deg);
}

.data-table .dt-resize {
  position: absolute;
  right: 0;
  top: 0;
  bottom: 0;
  width: 6px;
  cursor: col-resize;
  opacity: 0;
}

.data-table>.table>thead>tr>th:hover .dt-resize {
  opacity: 1;
  background: var(--tint-primary);
}

.data-table .dt-expand {
  width: 26px;
  height: 26px;
  border-radius: 7px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all var(--transition);
}

.data-table .dt-expand i {
  transition: transform var(--transition);
}

.data-table .dt-expand[aria-expanded=true] {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: var(--bs-body-bg);
}

.data-table .dt-expand[aria-expanded=true] i {
  transform: rotate(90deg);
}

.data-table>.table>tbody>tr.dt-detail>td {
  padding: 0 !important;
  background: var(--bs-secondary-bg) !important;
  border-bottom: 0;
}

.data-table .dt-detail-inner {
  display: none;
  padding: 18px 20px;
}

.data-table>.table>tbody>tr.dt-detail.open>td {
  border-bottom: 1px solid var(--bs-border-color);
}

.data-table>.table>tbody>tr.dt-detail.open .dt-detail-inner {
  display: block;
}

.data-table>.table>tbody>tr:last-child>td,
.data-table>.table>tbody>tr:last-child>th {
  border-bottom: 0;
}

/*-----------------
    Selection column

    A checkbox that matches the grid rather than the browser default, plus the
    sticky first column it usually sits in.
-----------------*/
.data-table .dt-check {
  appearance: none;
  -webkit-appearance: none;
  width: 18px;
  height: 18px;
  border: 1.8px solid var(--bs-border-color);
  border-radius: 5px;
  background: var(--bs-body-bg);
  cursor: pointer;
  position: relative;
  transition: all var(--transition);
  vertical-align: middle;
}

.data-table .dt-check:hover {
  border-color: var(--bs-primary);
}

.data-table .dt-check:checked,
.data-table .dt-check:indeterminate {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
}

.data-table .dt-check:checked::after {
  content: "";
  position: absolute;
  left: 5px;
  top: 1.5px;
  width: 5px;
  height: 9px;
  border: solid var(--bs-body-bg);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

.data-table .dt-check:indeterminate::after {
  content: "";
  position: absolute;
  left: 3px;
  top: 6px;
  width: 8px;
  height: 2px;
  background: var(--bs-body-bg);
  border-radius: 1px;
}

.data-table>.table>thead>tr>th.dt-pin,
.data-table>.table>tbody>tr>td.dt-pin {
  position: sticky;
  left: 0;
  z-index: 4;
  background: var(--bs-body-bg);
}

.data-table>.table>thead>tr>th.dt-pin {
  z-index: 6;
  background: var(--bs-secondary-bg);
}

/* ============================================================
   Opt-in mobile card mode — add `.dt-cards` to a `.data-table`
   and below the lg breakpoint its rows become stacked cards
   with sticky action buttons. Desktop is untouched; pages that
   don't opt in keep the horizontally-scrolling grid.
   ============================================================ */
@media (max-width: 991.98px) {
  .data-table.dt-cards {
    overflow: visible;
  }

  .data-table.dt-cards>.table {
    display: block;
  }

  .data-table.dt-cards>.table>thead {
    display: none;
  }

  .data-table.dt-cards>.table>tbody {
    display: block;
  }

  .data-table.dt-cards>.table>tbody>tr.dt-row {
    display: block;
    position: relative;
    border: 1px solid var(--bs-border-color);
    border-radius: 12px;
    margin: 0 12px 12px;
    padding: 42px 14px 6px;
    background: var(--bs-body-bg);
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.05);
  }

  .data-table.dt-cards>.table>tbody>tr.dt-row.dt-selected {
    box-shadow: 0 0 0 2px var(--bs-primary) inset;
  }

  .data-table.dt-cards>.table>tbody>tr.dt-row>td {
    display: block;
    width: auto !important;
    border: 0 !important;
    padding: 6px 0;
  }

  .data-table.dt-cards>.table>tbody>tr.dt-row>td.dt-pin,
  .data-table.dt-cards>.table>tbody>tr.dt-row>td.card-expand-toggle {
    position: absolute;
    top: 10px;
    width: auto !important;
    padding: 0;
    background: transparent;
  }

  .data-table.dt-cards>.table>tbody>tr.dt-row>td.dt-pin {
    left: 14px;
  }

  .data-table.dt-cards>.table>tbody>tr.dt-row>td.card-expand-toggle {
    right: 14px;
  }

  .data-table.dt-cards>.table>tbody>tr.dt-row>td:last-child {
    position: sticky;
    bottom: 0;
    z-index: 1;
    margin-top: 8px;
    padding: 8px 0 2px;
    border-top: 1px solid var(--bs-border-color) !important;
    background: var(--bs-body-bg);
  }

  .data-table.dt-cards>.table>tbody>tr.dt-row>td:last-child .dt-actions {
    justify-content: flex-start;
    flex-wrap: wrap;
  }

  .data-table.dt-cards>.table>tbody>tr.dt-detail {
    display: block;
    border: 0;
  }

  .data-table.dt-cards>.table>tbody>tr.dt-detail>td {
    display: block;
    padding: 0 12px;
  }

  .data-table.dt-cards>.table>tbody>tr.dt-detail:not(.open) {
    display: none;
  }
}

/* ============================================================
   CARD TOOLBAR / QUICKBAR / FOOTER
   Workspace chrome for a `.data-table` card — toolbar, quick
   filters, filter chips, empty state and pagination footer.
   Renamed from the sw-* workspace set so the data-table card
   owns these as self-contained components. Colour tokens come
   from the `--sw-*` custom properties set on `.data-workspace`
   with plain fallbacks for standalone use.
   ============================================================ */
/* ---------- Toolbar ---------- */
.card-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  width: 100%;
}

.card-toolbar .card-search {
  position: relative;
  flex: 0 1 250px;
  min-width: 180px;
}

.card-toolbar .card-search input {
  width: 100%;
  height: 34px;
  border: 1px solid var(--bs-border-color);
  border-radius: 8px;
  background: var(--bs-secondary-bg);
  padding: 0 58px 0 32px;
  font-size: 13px;
  transition: box-shadow var(--transition), border-color var(--transition), background var(--transition);
}

.card-toolbar .card-search input:focus {
  outline: none;
  background: var(--bs-body-bg);
  border-color: var(--bs-primary);
  box-shadow: 0 0 0 3px rgba(31, 59, 96, 0.1);
}

.card-toolbar .card-search .card-search-ic {
  position: absolute;
  left: 11px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--bs-secondary-color);
  font-size: 15px;
  pointer-events: none;
}

.card-toolbar .card-search .card-search-kbd {
  position: absolute;
  right: 4px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 10px;
  color: var(--bs-secondary-color);
  border: 1px solid var(--bs-border-color);
  border-radius: 7px;
  padding: 8px 5px;
  background: var(--bs-body-bg);
  line-height: 1;
}

/* ---------- Pill button ---------- */
.card-btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 34px;
  padding: 0 11px;
  border: 1px solid var(--bs-border-color);
  border-radius: 8px;
  background: var(--bs-body-bg);
  color: var(--bs-body-color, #1f2937);
  font-size: 12.5px;
  font-weight: 500;
  line-height: 1;
  cursor: pointer;
  transition: all var(--transition);
  white-space: nowrap;
}

.card-btn i {
  font-size: 15px;
}

.card-btn:hover {
  background: var(--bs-tertiary-bg);
  border-color: var(--bs-primary);
  color: var(--bs-primary);
  transform: translateY(-1px);
  box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
}

.card-btn.card-btn-icon {
  padding: 0;
  width: 34px;
  justify-content: center;
}

.card-btn.active,
.card-btn[aria-pressed=true] {
  background: rgba(31, 59, 96, 0.1);
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

/* ---------- Density segmented control ---------- */
.card-density {
  display: inline-flex;
  border: 1px solid var(--bs-border-color);
  border-radius: 8px;
  overflow: hidden;
  background: var(--bs-body-bg);
}

.card-density button {
  border: 0;
  background: transparent;
  width: 32px;
  height: 34px;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.card-density button i {
  font-size: 16px;
}

.card-density button.active {
  background: rgba(31, 59, 96, 0.1);
  color: var(--bs-primary);
}

/* ---------- Quick filter bar ---------- */
.card-quickbar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 10px;
}

.card-quickbar .card-btn {
  height: 32px;
  padding: 0 10px;
}

.card-quick {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 32px;
  padding: 0 12px;
  border-radius: 999px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  font-size: 12.5px;
  font-weight: 500;
  cursor: pointer;
  transition: all var(--transition);
}

.card-quick i {
  font-size: 15px;
}

.card-quick .card-quick-count {
  background: var(--bs-secondary-bg);
  border-radius: 999px;
  padding: 1px 7px;
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-body-color, #1f2937);
}

.card-quick:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.card-quick.active {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: var(--bs-body-bg);
}

.card-quick.active .card-quick-count {
  background: rgba(255, 255, 255, 0.25);
  color: var(--bs-body-bg);
}

/* ---------- Active filter chips ---------- */
.card-chips {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 12px;
}

.card-chips:empty {
  display: none;
}

.card-chips .card-chip-clear {
  background: transparent;
  color: var(--bs-secondary-color);
  text-decoration: underline;
  cursor: pointer;
  border: 0;
  font-size: 12px;
}

.card-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 28px;
  padding: 0 6px 0 12px;
  border-radius: 999px;
  background: rgba(31, 59, 96, 0.1);
  color: var(--bs-primary);
  font-size: 12px;
  font-weight: 500;
}

.card-chip button {
  border: 0;
  background: rgba(0, 0, 0, 0.06);
  color: inherit;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-size: 13px;
  line-height: 1;
  transition: background var(--transition);
}

.card-chip button:hover {
  background: rgba(0, 0, 0, 0.16);
}

/* ---------- Menu heading (inside dropdowns) ---------- */
.dropdown-menu .card-menu-head {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-secondary-color);
  padding: 6px 10px 4px;
  font-weight: 600;
}

/* ---------- Empty state ---------- */
.card-empty {
  display: none;
  text-align: center;
  padding: 60px 20px;
}

.card-empty.show {
  display: block;
}

.card-empty .card-empty-art {
  width: 132px;
  height: 132px;
  margin: 0 auto 18px;
  border-radius: 50%;
  background: radial-gradient(circle at 30% 30%, rgba(31, 59, 96, 0.1), transparent 70%);
  display: flex;
  align-items: center;
  justify-content: center;
}

.card-empty .card-empty-art i {
  font-size: 60px;
  color: var(--bs-primary);
}

.card-empty h5 {
  font-weight: 700;
  margin-bottom: 6px;
}

.card-empty p {
  color: var(--bs-secondary-color);
  max-width: 380px;
  margin: 0 auto 18px;
}

/* ---------- Pagination footer ---------- */
.card-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
  padding: 10px 12px;
  border-top: 1px solid var(--bs-border-color);
}

.card-foot-info {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
}

.card-foot-info span {
  color: var(--bs-heading-color, #111827);
  font-weight: 600;
}

.card-foot-size {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  margin-left: auto;
}

.card-foot-size .form-select {
  height: 30px;
  width: auto;
  padding: 0 26px 0 9px;
  font-size: 12.5px;
}

.card-pagination {
  display: flex;
  align-items: center;
  gap: 3px;
}

.card-page-numbers {
  display: inline-flex;
  gap: 3px;
  align-items: center;
}

.card-page-btn {
  min-width: 30px;
  height: 30px;
  padding: 0 6px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  border-radius: 8px;
  color: var(--bs-body-color, #374151);
  font-size: 12.5px;
  font-weight: 500;
  cursor: pointer;
  transition: all var(--transition);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.card-page-btn i {
  font-size: 15px;
}

.card-page-btn:hover:not(:disabled) {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.card-page-btn.active {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: var(--bs-body-bg);
}

.card-page-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* ---------- Fullscreen ---------- */
.data-workspace.card-fullscreen {
  position: fixed;
  inset: 0;
  z-index: 1055;
  background: var(--bs-body-bg, var(--bs-body-bg));
  padding: 18px;
  overflow: auto;
}

.data-workspace.card-fullscreen .data-table {
  max-height: calc(100vh - 260px);
  overflow: auto;
}

/* ---------- Toolbar extras (filter menus, count badges, search clear) ---------- */
.card-filter-menu {
  min-width: 340px;
  max-width: 92vw;
}

.card-col-menu {
  min-width: 210px;
  max-width: 92vw;
}

.card-search-x[hidden],
.card-count[hidden],
.card-clear-quick[hidden] {
  display: none;
}

.card-search .card-search-x {
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  width: 20px;
  height: 20px;
  border: 0;
  border-radius: 50%;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color, var(--bs-secondary-color));
  display: flex;
  place-items: center;
  font-size: 13px;
  cursor: pointer;
  align-items: center;
  justify-content: center;
  transition: all var(--transition);
}

.card-search .card-search-x:hover {
  background: var(--bs-primary);
  color: var(--bs-body-bg);
}

.card-vcount {
  margin-left: auto;
  font-size: 11px;
  font-weight: 700;
  color: var(--bs-secondary-color, var(--bs-secondary-color));
}

.card-count {
  display: inline-grid;
  place-items: center;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 999px;
  background: var(--bs-primary);
  color: var(--bs-body-bg);
  font-size: 10px;
  font-weight: 700;
  line-height: 1;
}

/* ============================================================
   DATA-TABLE STATUS + PRESENCE EXTENSIONS
   ============================================================ */
/* extra status pills */
.dt-pill.is-blocked {
  background: rgba(220, 38, 38, 0.12);
  color: #b91c1c;
}

.dt-pill.is-suspended {
  background: rgba(217, 119, 6, 0.14);
  color: #b45309;
}

.dt-pill.is-review {
  background: rgba(99, 102, 241, 0.12);
  color: #4338ca;
}

.dt-pill.is-completed {
  background: rgba(13, 148, 136, 0.12);
  color: #0f766e;
}

.dt-pill.is-active .dt-pill-dot {
  background: #16a34a;
}

.dt-pill.is-inactive .dt-pill-dot {
  background: var(--bs-secondary-color);
}

.dt-pill.is-pending .dt-pill-dot {
  background: #d97706;
}

.dt-pill.is-blocked .dt-pill-dot {
  background: #dc2626;
}

.dt-pill.is-suspended .dt-pill-dot {
  background: #ea580c;
}

.dt-pill.is-review .dt-pill-dot {
  background: #6366f1;
}

.dt-pill.is-completed .dt-pill-dot {
  background: #0d9488;
}

/* live statuses get a soft pulse ring */
.dt-pill.is-active .dt-pill-dot,
.dt-pill.is-pending .dt-pill-dot,
.dt-pill.is-review .dt-pill-dot {
  position: relative;
}

.dt-pill.is-active .dt-pill-dot::after,
.dt-pill.is-pending .dt-pill-dot::after,
.dt-pill.is-review .dt-pill-dot::after {
  content: "";
  position: absolute;
  inset: -3px;
  border-radius: 50%;
  background: inherit;
  opacity: 0.45;
  animation: dt-pill-pulse 1.8s ease-out infinite;
}

@keyframes dt-pill-pulse {
  0% {
    transform: scale(0.6);
    opacity: 0.5;
  }

  70% {
    transform: scale(1.9);
    opacity: 0;
  }

  100% {
    opacity: 0;
  }
}

/* online presence dot on the profile avatar */
.dt-user .dt-avatar {
  position: relative;
  overflow: visible;
}

.dt-user .dt-avatar .dt-presence {
  position: absolute;
  right: -1px;
  bottom: -1px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: #9ca3af;
  border: 2px solid var(--bs-body-bg);
  box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.5);
}

.dt-user .dt-avatar .dt-presence.on {
  background: #16a34a;
  animation: dt-presence-pulse 2s ease-out infinite;
}

@keyframes dt-presence-pulse {
  0% {
    box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.5);
  }

  70% {
    box-shadow: 0 0 0 6px rgba(22, 163, 74, 0);
  }

  100% {
    box-shadow: 0 0 0 0 rgba(22, 163, 74, 0);
  }
}

/* ---------- Last-login cell ---------- */
.dt-login {
  line-height: 1.35;
}

.dt-login-date {
  font-weight: 500;
  color: var(--bs-body-color, #1f2937);
}

.dt-login-time {
  font-size: 12px;
  color: var(--bs-secondary-color, var(--bs-secondary-color));
}

.dt-login-rel {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  color: var(--bs-secondary-color, var(--bs-secondary-color));
  margin-top: 2px;
}

.dt-login-rel i {
  font-size: 12px;
}

.dt-login.is-never .dt-login-date {
  color: var(--bs-secondary-color, var(--bs-secondary-color));
  font-weight: 400;
}

[data-bs-theme=dark] .dt-login-date {
  color: #e9edf5;
}

.data-table.dt-scroll {
  max-height: calc(100vh - 300px);
  min-height: 260px;
}

/* An absent row is tinted rather than recoloured, so its text stays as legible
   as every other row. Bootstrap's `.table-*` row variants cannot do this here:
   the grid paints an opaque background on the cells themselves, and the
   variant's `--bs-table-color` washes the roll and admission numbers out. */
.data-table>.table>tbody>tr.dt-absent>td {
  background: rgba(234, 179, 0, 0.08);
}

.data-table>.table>tbody>tr.dt-absent:hover>td {
  background: rgba(234, 179, 0, 0.14);
}

/* ============================================================
   Class Routine — weekly schedule workspace
   A day × time grid of subject cards, plus the mobile agenda.
   Scoped to .rt-* so it never touches the rest of the app.
   ============================================================ */
.rt-grid table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  min-width: 940px;
}

.rt-grid thead th {
  position: sticky;
  top: 0;
  z-index: 3;
  background: var(--bs-secondary-bg);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
  padding: 12px 10px;
  text-align: left;
  border-bottom: 1px solid var(--bs-border-color, #e6e9f0);
  white-space: nowrap;
}

.rt-grid thead th:first-child {
  left: 0;
  z-index: 4;
}

.rt-grid tbody td.rt-time {
  position: sticky;
  left: 0;
  z-index: 2;
  background: var(--bs-body-bg);
}

.rt-grid tbody td {
  padding: 8px;
  vertical-align: top;
  min-width: 156px;
  border-bottom: 1px solid var(--bs-border-color, #e6e9f0);
}

.rt-grid .rt-day-h {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.rt-grid .rt-day-h b {
  color: var(--bs-heading-color, #111827);
  text-transform: none;
  font-size: 13px;
}

.rt-time {
  width: 104px;
  min-width: 104px;
  font-size: 12.5px;
  font-weight: 600;
  color: #374151;
}

.rt-time small {
  display: block;
  color: #9ca3af;
  font-weight: 500;
  margin-top: 2px;
}

.rt-time .rt-pnum {
  display: inline-block;
  font-size: 11px;
  color: var(--bs-primary, #1f3b60);
  font-weight: 600;
}

.rt-card {
  position: relative;
  border: 1px solid var(--bs-border-color, #e6e9f0);
  border-radius: 10px;
  padding: 10px 10px 8px 16px;
  background: #fff;
  transition: box-shadow 0.18s ease, transform 0.18s ease;
}

.rt-card:hover {
  box-shadow: 0 8px 20px rgba(17, 24, 39, 0.1);
  transform: translateY(-2px);
}

.rt-card.is-selected {
  box-shadow: 0 0 0 2px var(--bs-primary, #1f3b60) inset;
}

.rt-card .rt-accent {
  position: absolute;
  left: 0;
  top: 8px;
  bottom: 8px;
  width: 4px;
  border-radius: 0 4px 4px 0;
}

.rt-card .rt-title {
  font-size: 13.5px;
  font-weight: 600;
  color: #111827;
  line-height: 1.2;
}

.rt-card .rt-sub {
  font-size: 11.5px;
  color: #6b7280;
}

.rt-card .dt-pill {
  padding: 3px 8px;
  font-size: 11px;
}

.rt-card .rt-hover {
  max-height: 0;
  overflow: hidden;
  opacity: 0;
  transition: max-height 0.2s ease, opacity 0.2s ease, margin 0.2s ease;
}

.rt-card:hover .rt-hover {
  max-height: 60px;
  opacity: 1;
  margin-top: 6px;
}

.rt-detail {
  display: none;
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px dashed var(--bs-border-color, #e6e9f0);
}

.rt-card.is-open .rt-detail {
  display: block;
}

.rt-card.is-open .rt-hover {
  display: none;
}

td.rt-break {
  text-align: center;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.03em;
  color: var(--bs-secondary-color);
  background: repeating-linear-gradient(45deg, #f8f9fc, #f8f9fc 10px, #f2f3f8 10px, #f2f3f8 20px);
}

.rt-free {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 56px;
  color: #c0c6d2;
  font-size: 12px;
  border: 1px dashed var(--bs-border-color, #e6e9f0);
  border-radius: 10px;
}

.rt-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
}

.rt-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.rt-legend-dot {
  width: 10px;
  height: 10px;
  border-radius: 3px;
  flex-shrink: 0;
}

.rt-insight {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  padding: 12px 0;
  border-bottom: 1px solid var(--bs-border-color, #e6e9f0);
}

@media (max-width: 575.98px) {
  .rt-insight {
    flex-direction: column;
  }
}

.rt-insight:last-child {
  border-bottom: 0;
}

.rt-insight-ic {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  font-size: 18px;
}

.rt-agenda-day {
  margin-bottom: 18px;
}

.rt-agenda-day>h6 {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--bs-body-bg);
  padding: 8px 0;
  margin: 0 0 8px;
  border-bottom: 1px solid var(--bs-border-color, #e6e9f0);
}

.rt-agenda-item {
  display: flex;
  gap: 12px;
  padding: 6px 0;
}

@media (max-width: 575.98px) {
  .rt-agenda-item {
    flex-direction: column;
  }
}

.rt-agenda-time {
  width: 74px;
  flex-shrink: 0;
  font-size: 12px;
  font-weight: 600;
  color: #374151;
}

.rt-agenda-time small {
  display: block;
  color: #9ca3af;
  font-weight: 500;
}

#classWorkspace[data-view=agenda] .rt-grid,
#classWorkspace[data-view=day] .rt-grid {
  display: none !important;
}

#classWorkspace[data-view=agenda] .rt-agenda,
#classWorkspace[data-view=day] .rt-agenda {
  display: block !important;
}

.rounded-circle {
  border-radius: 50% !important;
}

/* dashboard primitives — reusable across every page */
/*-----------------
    Chip

    A compact inline label: an icon or dot followed by a short piece of text.
    Used for timestamps, priorities, trends, SLA states, legends and any other
    micro-annotation that sits beside a title.

        <span class="chip chip-soft chip-success">
            <i class="ti ti-trending-up"></i>Trending
        </span>

    A bare `.chip` is transparent and inherits its colour, so it also serves as
    a plain inline meta item. Add `.chip-soft` for the tinted pill, and any of
    the tone modifiers — or a `bg-*-transparent` utility — for colour.
-----------------*/
.chip {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  font-size: 0.6875rem;
  font-weight: 600;
  line-height: 1.4;
  color: var(--chip-color, inherit);
  white-space: nowrap;
}

.chip>i:not([class*=ti-]):not([class*=fa-]) {
  width: 0.5625rem;
  height: 0.5625rem;
  border-radius: 0.1875rem;
  display: inline-block;
  flex-shrink: 0;
  background: currentcolor;
}

.chip b {
  font-weight: 700;
  color: var(--chip-strong, inherit);
}

.chip small {
  font-size: 0.65rem;
  opacity: 0.8;
}

/*----- tinted pill -----*/

.chip.chip-soft {
  background: var(--chip-bg, #E9EDF4);
  padding: 0.125rem 0.4375rem;
  border-radius: 50rem;
}

/*----- squared corners, for priority style labels -----*/

.chip.chip-square {
  border-radius: 5px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  font-size: 0.625rem;
  font-weight: 700;
}

/*----- sizes -----*/

.chip.chip-sm {
  font-size: 0.625rem;
  gap: 0.125rem;
}

.chip.chip-lg {
  font-size: 0.75rem;
  gap: 0.3125rem;
}

.chip.chip-lg.chip-soft {
  padding: 0.1875rem 0.625rem;
}

/*----- tones: colour plus the matching soft background -----*/

.chip.chip-muted {
  --chip-color: #6A7287;
  --chip-bg: #E9EDF4;
}

.chip.chip-primary {
  --chip-color: #1f3b60;
  --chip-bg: #F2F5FF;
}

.chip.chip-success {
  --chip-color: #1ABE17;
  --chip-bg: #E8F9E8;
}

.chip.chip-info {
  --chip-color: #0F65CD;
  --chip-bg: #E7F1FC;
}

.chip.chip-warning {
  --chip-color: #EAB300;
  --chip-bg: #FEF8EA;
}

.chip.chip-danger {
  --chip-color: #E82646;
  --chip-bg: #FDE9ED;
}

.chip.chip-purple {
  --chip-color: #4A00E5;
  --chip-bg: #F3EDFF;
}

/*----- on a coloured or photographic surface -----*/

.chip.chip-on-media {
  --chip-color: #FFF;
  --chip-bg: rgba(255, 255, 255, 0.18);
  border: 1px solid rgba(255, 255, 255, 0.28);
  backdrop-filter: blur(4px);
}

/* completes the tone set alongside the theme's other accents */
.chip.chip-pink {
  --chip-color: #E83E8C;
  --chip-bg: #FDE6F8;
}

/* Dark Mode — chip-soft's tone backgrounds are solid light tints with no
   dark counterpart, so they read as a dull, washed-out patch on a dark
   surface. Re-point each at the matching --tone-*-soft token, already
   dark-aware, instead of restating new colours; --chip-color (the text)
   is already vivid enough to read on both surfaces, so it's untouched. */
[data-theme=dark] .chip.chip-muted,
[data-bs-theme=dark] .chip.chip-muted {
  --chip-bg: rgba(255, 255, 255, .08);
}

[data-theme=dark] .chip.chip-primary,
[data-bs-theme=dark] .chip.chip-primary {
  --chip-bg: var(--tone-brand-soft);
}

[data-theme=dark] .chip.chip-success,
[data-bs-theme=dark] .chip.chip-success {
  --chip-bg: var(--tone-success-soft);
}

[data-theme=dark] .chip.chip-info,
[data-bs-theme=dark] .chip.chip-info {
  --chip-bg: var(--tone-info-soft);
}

[data-theme=dark] .chip.chip-warning,
[data-bs-theme=dark] .chip.chip-warning {
  --chip-bg: var(--tone-warning-soft);
}

[data-theme=dark] .chip.chip-danger,
[data-bs-theme=dark] .chip.chip-danger {
  --chip-bg: var(--tone-danger-soft);
}

[data-theme=dark] .chip.chip-purple,
[data-bs-theme=dark] .chip.chip-purple {
  --chip-bg: var(--tone-purple-soft);
}

[data-theme=dark] .chip.chip-pink,
[data-bs-theme=dark] .chip.chip-pink {
  --chip-bg: var(--tone-pink-soft);
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
.filter-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  font-weight: 600;
  color: var(--muted);
  background: var(--surface);
  border: 1px solid var(--border-soft);
  padding: 4px 9px;
  border-radius: 999px;
}

.filter-chip i {
  font-size: 13px;
  color: var(--bs-primary);
}

/*-----------------
	Meta chip

	The bordered pill that carries a record's secondary facts — an ID, a term, a
	portal state — beside its name. Reads as quieter than a badge because the
	fill stays on the page surface and only the border draws the shape.

	Promoted from pages/_parent-portal.scss — a reusable pattern, not page style.
-----------------*/
.meta-chip {
  font-size: 11px;
  color: var(--bs-secondary-color);
  gap: 4px;
  padding: 3px 8px;
  border: 1px solid var(--bs-border-color);
  border-radius: 999px;
  background: var(--bs-body-bg);
}

.meta-chip i {
  font-size: 12px;
  color: var(--bs-primary);
}

/*-----------------
    Status dot

    A small filled circle that marks state — online, unread, a legend swatch,
    a live feed. Colour comes from a tone modifier, a `bg-*` utility, or
    `currentcolor` when it sits inside coloured text.

        <span class="status-dot status-dot-success"></span>
        <span class="status-dot status-dot-pulse"></span>
-----------------*/
.status-dot {
  display: inline-block;
  flex-shrink: 0;
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  background: var(--status-dot-color, currentcolor);
  vertical-align: middle;
  /*----- sizes -----*/
}

.status-dot.status-dot-sm {
  width: 0.375rem;
  height: 0.375rem;
}

.status-dot.status-dot-lg {
  width: 0.5625rem;
  height: 0.5625rem;
}

/*----- a square swatch, for chart legends -----*/

.status-dot.status-dot-square {
  border-radius: 0.1875rem;
}

/*----- tones -----*/

.status-dot.status-dot-primary {
  --status-dot-color: #1f3b60;
}

.status-dot.status-dot-success {
  --status-dot-color: #1ABE17;
}

.status-dot.status-dot-info {
  --status-dot-color: #0F65CD;
}

.status-dot.status-dot-warning {
  --status-dot-color: #EAB300;
}

.status-dot.status-dot-danger {
  --status-dot-color: #E82646;
}

.status-dot.status-dot-muted {
  --status-dot-color: #838A9B;
}

/*----- breathing ring, for anything reporting live data -----*/

.status-dot.status-dot-pulse {
  box-shadow: 0 0 0 0 currentcolor;
  animation: status-dot-pulse 1.6s infinite;
}

@keyframes status-dot-pulse {
  0% {
    box-shadow: 0 0 0 0 rgba(var(--status-dot-rgb, 34, 197, 94), 0.5);
  }

  70% {
    box-shadow: 0 0 0 6px rgba(var(--status-dot-rgb, 34, 197, 94), 0);
  }

  100% {
    box-shadow: 0 0 0 0 rgba(var(--status-dot-rgb, 34, 197, 94), 0);
  }
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
/* shared helpers — replace repeated inline style overrides */
.status-dot-inline {
  width: 8px;
  height: 8px;
  padding: 0;
  border-radius: 50%;
}

.live-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
}

/*-----------------
    Data list

    The repeating row that makes up most dashboard panels: an avatar or icon
    tile, a body that flexes, and a trailing value or badge.

        <div class="data-list-item">
            <span class="avatar avatar-icon avatar-md bg-primary-transparent">…</span>
            <div class="data-list-body">
                <div class="data-list-title">Route 01 · North</div>
                <div class="data-list-subtitle">Downtown Ave · 34 km/h</div>
            </div>
            <span class="badge badge-soft-success">On route</span>
        </div>

    Rows divide themselves, so they need no wrapper. Add `.data-list` to a
    surrounding element only when you want the whole list to share a density,
    a hover state, or the boxed-card treatment.
-----------------*/
.data-list-item {
  display: flex;
  align-items: center;
  gap: var(--data-list-gap, 0.6rem);
  padding: var(--data-list-padding-y, 0.5rem) var(--data-list-padding-x, 0);
  position: relative;
  transition: background 0.15s ease;
}

.data-list-item+.data-list-item {
  border-top: 1px solid var(--data-list-border, #E9EDF4);
}

/*----- rows whose content stacks rather than centring -----*/

.data-list-item.data-list-item-top {
  align-items: flex-start;
}

/*----- unread / attention state, marked with an edge rule -----*/

.data-list-item.is-unread {
  background: var(--data-list-hover, #F2F5FF);
}

.data-list-item.is-unread::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  inset-block: 0;
  width: 3px;
  background: #1f3b60;
}

/*----- the parts of a row -----*/
.data-list-body {
  flex: 1;
  min-width: 0;
}

.data-list-title {
  font-size: 0.8125rem;
  font-weight: 600;
  color: #202C4B;
  line-height: 1.3;
  margin: 0;
}

.data-list-title:has(> i:first-child) {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}

.data-list-subtitle {
  display: flex;
  align-items: center;
  gap: 0.25rem;
  font-size: 0.75rem;
  color: #6A7287;
  margin: 0;
}

.data-list-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin-top: 0.2rem;
}

.data-list-end {
  flex-shrink: 0;
  text-align: end;
  min-width: 0;
}

.data-list-end .meter {
  width: var(--data-list-meter-width, 4.125rem);
  margin-inline-start: auto;
  margin-block-start: 0.3125rem;
}

/*-----------------
    List header and footer

    A summary or link row that closes a list. It reads the list's own
    horizontal padding, so it always lines up with the rows above it rather
    than guessing at a matching `px-*` utility.
-----------------*/
.data-list-header,
.data-list-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.5rem var(--data-list-padding-x, 0);
}

.data-list-footer {
  border-top: 1px solid var(--data-list-border, #E9EDF4);
}

.data-list-header {
  border-bottom: 1px solid var(--data-list-border, #E9EDF4);
}

/*-----------------
    List-level options
-----------------*/
.data-list {
  list-style: none;
  margin: 0;
  padding: 0;
  /*----- row density -----*/
}

.data-list.data-list-sm {
  --data-list-padding-y: 0.28rem;
  --data-list-gap: 0.5rem;
}

.data-list.data-list-lg {
  --data-list-padding-y: 0.7rem;
  --data-list-gap: 0.7rem;
}

/*----- rows that span the full width of a card with no body padding -----*/

.data-list.data-list-inset {
  --data-list-padding-x: 1.35rem;
  --data-list-padding-y: 0.7rem;
}

/*----- dashed rather than solid dividers -----*/

.data-list.data-list-dashed .data-list-item+.data-list-item {
  border-top-style: dashed;
}

/*----- highlight the row under the pointer -----*/

.data-list.data-list-hover .data-list-item:hover {
  background: var(--data-list-hover, #F2F5FF);
}

/*----- separate bordered cards instead of divided rows -----*/

.data-list.data-list-cards .data-list-item {
  padding: 0.6rem 0.7rem;
  border: 1px solid var(--data-list-border, #E9EDF4);
  border-radius: 8px;
}

.data-list.data-list-cards .data-list-item+.data-list-item {
  margin-top: 0.55rem;
}

/* accent rule down the leading edge, coloured by the same token the
     row's icon tile uses so the two always agree */

.data-list.data-list-cards.data-list-cards-accent .data-list-item {
  border-inline-start: 3px solid var(--avatar-accent, #1f3b60);
}

.data-list.data-list-cards.data-list-hover .data-list-item:hover {
  background: transparent;
  box-shadow: 0 3px 10px rgba(15, 23, 42, 0.07);
}

/*-----------------
    Ranking index — the position number that opens a leaderboard row
-----------------*/
.data-list-index {
  flex-shrink: 0;
  width: 1.25rem;
  text-align: center;
  font-size: 1rem;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  color: #838A9B;
}

.data-list-item.is-top .data-list-index {
  color: #1f3b60;
}

/*-----------------
    Hover actions

    Row controls that stay out of the way until the row is pointed at. They
    remain visible to keyboard users and on touch, where there is no hover.
-----------------*/
.data-list-item .hover-actions {
  opacity: 0;
  transition: opacity 0.2s ease;
}

.data-list-item:hover .hover-actions,
.data-list-item:focus-within .hover-actions {
  opacity: 1;
}

@media (hover: none) {
  .data-list-item .hover-actions {
    opacity: 1;
  }
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
/* ---------- TIMETABLE ---------- */
.lesson-list {
  gap: 10px;
}

.lesson-item {
  display: grid;
  grid-template-columns: 78px 1fr auto;
  gap: 12px;
  padding: 12px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-list);
  background: var(--surface);
  border-left-width: 3px;
  transition: transform var(--transition-card), box-shadow var(--transition-card);
}

.lesson-item:hover {
  transform: translateX(3px);
  box-shadow: var(--shadow-card);
}

/* .lesson-time — all declarations now Bootstrap utilities in the markup */
.lesson-time b {
  display: block;
  font-size: 13px;
  font-weight: 800;
  color: var(--heading);
}

.lesson-time span {
  font-size: 10px;
  color: var(--muted);
}

.lesson-body b {
  font-size: 13.5px;
  color: var(--heading);
}

.lesson-tags {
  gap: 5px;
  margin-top: 4px;
}

.lesson-tag {
  font-size: 10.5px;
  color: var(--muted);
  gap: 3px;
}

.lesson-tag i {
  font-size: 12px;
}

.lesson-actions {
  gap: 6px;
}

@media (max-width: 575px) {
  .lesson-item {
    grid-template-columns: 60px 1fr;
  }

  .lesson-actions {
    grid-column: 1/-1;
  }
}

/* list rows (assignments, insights, messages, notifications, activity) */
.info-list {
  gap: 9px;
}

.info-list-item {
  gap: 11px;
  padding: 11px 12px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-list);
  background: var(--surface);
  transition: transform var(--transition-card), box-shadow var(--transition-card);
}

.info-list-item:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-card);
}

.info-list-icon {
  width: 38px;
  height: 38px;
  border-radius: 11px;
  display: grid;
  place-items: center;
  font-size: 18px;
}

.info-list-item-sm {
  padding: 9px;
}

.info-list-item-sm .info-list-icon {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  font-size: 15px;
}

.info-list-avatar {
  width: 38px;
  height: 38px;
  border-radius: 11px;
}

.info-list-body {
  flex: 1;
  min-width: 0;
}

.info-list-body b {
  display: block;
  font-size: 13px;
  color: var(--heading);
}

.info-list-body span {
  font-size: 11.5px;
  color: var(--muted);
}

.info-list-body .un {
  display: -webkit-box;
  -webkit-line-clamp: 1;
  line-clamp: 1;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.info-list-end {
  font-size: 11px;
  color: var(--muted);
  gap: 4px;
}

.insight-badge {
  gap: 4px;
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--tone-purple);
  background: var(--tone-purple-soft);
  padding: 3px 9px;
  border-radius: 999px;
}

.insight-score {
  gap: 14px;
  padding: 14px;
  border-radius: var(--radius-list);
  background: var(--surface);
  border: 1px solid var(--border-soft);
  margin-bottom: 12px;
}

.insight-score .tx b {
  font-size: 15px;
  color: var(--heading);
}

.insight-score .tx p {
  margin: 2px 0 0;
  font-size: 11.5px;
  color: var(--muted);
}

.insight-item {
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px solid var(--border-soft);
}

.insight-item:last-child {
  border-bottom: 0;
}

.insight-item .ic {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  display: grid;
  place-items: center;
  font-size: 15px;
  flex-shrink: 0;
}

.insight-item .tx b {
  display: block;
  font-size: 12.5px;
  color: var(--heading);
}

.insight-item .tx span {
  font-size: 11px;
  color: var(--muted);
}

/* ---------- TERM LADDER ---------- */
.term-list {
  gap: 6px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid var(--border-soft);
}

.term-item {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 8px;
  padding: 7px 10px;
  border-radius: 9px;
  border: 1px solid var(--border-soft);
  border-left-width: 3px;
  background: var(--surface);
}

.term-item .t {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--heading);
}

.term-item .v {
  font-size: 14px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--heading);
  font-variant-numeric: tabular-nums;
}

/* ---------- SUBJECT ROWS ---------- */
.subject-list {
  gap: 8px;
}

.subject-item {
  display: grid;
  grid-template-columns: 34px 1fr auto;
  gap: 11px;
  padding: 9px 11px;
  border: 1px solid var(--border-soft);
  border-left-width: 3px;
  border-radius: 10px;
  background: var(--surface);
  transition: transform var(--transition-card), box-shadow var(--transition-card);
}

.subject-item:hover {
  transform: translateY(-1px);
  box-shadow: var(--shadow-card);
}

.subject-item>.ic {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  display: grid;
  place-items: center;
  font-size: 17px;
}

.subject-item .mid {
  min-width: 0;
}

.subject-item .top {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 6px;
}

.subject-item .top b {
  font-size: 12.5px;
  font-weight: 650;
  color: var(--heading);
  white-space: nowrap;
}

.subject-item .top span {
  font-size: 10.5px;
  color: var(--muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.subject-item .end {
  display: flex;
  align-items: center;
  gap: 7px;
}

.subject-item .pc {
  font-size: 14px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--heading);
  font-variant-numeric: tabular-nums;
}

.subject-item .pc small {
  font-size: 10px;
  font-weight: 700;
  color: var(--muted);
}

.subject-item .gr {
  min-width: 30px;
  text-align: center;
  font-size: 10.5px;
  font-weight: 800;
  padding: 3px 5px;
  border-radius: 6px;
}

.subject-item .dl {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  font-size: 10.5px;
  font-weight: 700;
}

.subject-item .dl i {
  font-size: 12px;
}

/* the class-average marker sits on top of the track, so the track cannot clip
   it the way `.progress` does by default; `left` is set inline */
.subject-item .progress {
  position: relative;
  overflow: visible;
}

.subject-item .progress-bar {
  border-radius: inherit;
}

.subject-item .progress .avg {
  position: absolute;
  top: -3px;
  width: 2px;
  height: 14px;
  border-radius: 2px;
  background: var(--heading);
  opacity: 0.55;
}

.subject-legend {
  gap: 6px;
  font-size: 10.5px;
  color: var(--muted);
}

.subject-legend .mk {
  width: 2px;
  height: 12px;
  border-radius: 2px;
  background: var(--heading);
  opacity: 0.55;
}

/* compact variant: name, track, value, tag on a single line */
.subject-item-compact {
  display: grid;
  grid-template-columns: 92px 1fr 38px 50px;
  gap: 10px;
  padding: 0;
  border: 0;
  background: none;
}

.subject-item-compact:hover {
  transform: none;
  box-shadow: none;
}

.subject-item-compact .nm {
  font-size: 12px;
  font-weight: 600;
  color: var(--heading);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.subject-item-compact .pc {
  font-size: 11.5px;
  font-weight: 700;
  text-align: right;
}

.subject-item-compact .gr {
  font-size: 10px;
}

/* ---------- NOTE CALLOUT ---------- */
/* tinted advisory line; the tint comes from a bg-*-transparent utility */
.insight-note {
  gap: 8px;
  padding: 10px 12px;
  border-radius: 10px;
  font-size: 11.5px;
  line-height: 1.5;
}

.insight-note i {
  font-size: 15px;
  flex-shrink: 0;
  margin-top: 1px;
}

.insight-note b {
  color: var(--heading);
}

/* ---------- HIGHLIGHT ROWS ---------- */
.highlight-list {
  gap: 8px;
  margin-top: 14px;
}

.highlight-item {
  gap: 10px;
  padding: 8px 10px;
  border-radius: 10px;
  border: 1px solid var(--border-soft);
  border-left-width: 3px;
  background: var(--surface);
}

.highlight-item .ic {
  width: 30px;
  height: 30px;
  flex-shrink: 0;
  border-radius: 9px;
  display: grid;
  place-items: center;
  font-size: 16px;
}

.highlight-item .tx {
  flex: 1;
  min-width: 0;
}

.highlight-item .tx b {
  display: block;
  font-size: 12px;
  font-weight: 650;
  color: var(--heading);
  line-height: 1.2;
}

.highlight-item .tx span {
  display: block;
  font-size: 10.5px;
  color: var(--muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ---------- DETAIL TILES ---------- */
.detail-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
}

.detail-tile {
  gap: 9px;
  padding: 11px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-list);
  background: var(--surface);
  transition: transform var(--transition-card), box-shadow var(--transition-card);
}

.detail-tile:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-card);
}

.detail-tile .ic {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  display: grid;
  place-items: center;
  font-size: 16px;
  flex-shrink: 0;
}

.detail-tile b {
  display: block;
  font-size: 13px;
  color: var(--heading);
}

.detail-tile span {
  font-size: 10.5px;
  color: var(--muted);
}

/* ---------- AVATAR STATUS ---------- */
/* .info-list-avatar-wrap — all declarations now Bootstrap utilities in the markup */
.info-list-avatar-wrap .dot {
  position: absolute;
  right: -2px;
  bottom: -2px;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  border: 2px solid var(--surface);
  background: var(--tone-success);
}

.info-list-avatar-wrap .dot.off {
  background: #9aa6c2;
}

@media (max-width: 1399px) {
  .subject-item .top span {
    display: none;
  }
}

@media (max-width: 575px) {
  .subject-item {
    grid-template-columns: 1fr auto;
  }

  .subject-item>.ic {
    display: none;
  }

  .subject-item-compact {
    grid-template-columns: 78px 1fr 34px 30px;
    gap: 7px;
  }

  .detail-grid {
    grid-template-columns: 1fr;
  }
}

/*-----------------
    Stat

    The figure-and-caption pairing that every dashboard repeats: a large value,
    a muted label, and an optional delta showing which way it moved.

        <div class="stat">
            <span class="stat-caption">Enrolment</span>
            <div class="stat-value">1,248</div>
            <span class="stat-label">Active students</span>
            <span class="stat-delta stat-delta-up"><i class="ti ti-arrow-up"></i>3%</span>
        </div>

    The pieces are independent — use `.stat-caption` on its own as a section
    eyebrow, or `.stat-delta` beside any number.
-----------------*/
/*----- uppercase micro-caption, above a value or as a section eyebrow -----*/
.stat-caption {
  display: inline-block;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: #6A7287;
}

/*----- the figure itself -----*/
.stat-value {
  font-size: 1.85rem;
  font-weight: 800;
  letter-spacing: -0.03em;
  line-height: 1.1;
  color: #202C4B;
}

.stat-value.stat-value-sm {
  font-size: 1.5rem;
}

.stat-value.stat-value-xs {
  font-size: 1.125rem;
}

.stat-value>span,
.stat-value>small {
  font-size: 0.6em;
  font-weight: 500;
  letter-spacing: 0;
  color: #6A7287;
}

/*----- muted caption under or beside the figure -----*/
.stat-label {
  font-size: 0.8rem;
  color: #6A7287;
}

.stat-label.stat-label-sm {
  font-size: 0.74rem;
}

/*----- direction of travel -----*/
.stat-delta {
  display: inline-flex;
  align-items: center;
  gap: 0.125rem;
  font-size: 0.76rem;
  font-weight: 700;
  line-height: 1.3;
}

.stat-delta.stat-delta-sm {
  font-size: 0.72rem;
}

.stat-delta.stat-delta-up {
  color: #1ABE17;
}

.stat-delta.stat-delta-down {
  color: #E82646;
}

.stat-delta.stat-delta-flat {
  color: #838A9B;
}

/*-----------------
    Stat tile

    A bordered box holding one stat, used in KPI strips. It lifts on hover so
    it reads as a target when the whole tile is clickable.
-----------------*/
.stat-tile {
  border: 1px solid #E9EDF4;
  border-radius: 12px;
  padding: 0.7rem 0.8rem;
  height: 100%;
  transition: transform 0.2s ease, border-color 0.2s ease;
}

.stat-tile.stat-tile-hover:hover {
  transform: translateY(-2px);
  border-color: var(--avatar-accent, #1f3b60);
}

/*----- compact, centred variant for three-up stat grids -----*/

.stat-tile.stat-tile-plain {
  text-align: center;
  background: #E9EDF4;
  border: 0;
  border-radius: 5px;
  padding: 0.6rem 0.5rem;
}

/*----- sits on a coloured or photographic panel -----*/

.stat-tile.stat-tile-on-media {
  background: rgba(255, 255, 255, 0.15);
  border-color: rgba(255, 255, 255, 0.22);
  backdrop-filter: blur(4px);
  padding: 0.4rem 0.55rem;
  color: #FFF;
}

/*----- accent rule down the leading edge -----*/

.stat-tile.stat-tile-accent {
  position: relative;
  overflow: hidden;
}

.stat-tile.stat-tile-accent::before {
  content: "";
  position: absolute;
  inset-inline-start: 0;
  inset-block: 0;
  width: 3px;
  background: var(--avatar-accent, #1f3b60);
}

/*-----------------
    Stat grid — evenly divided columns of stats inside one card
-----------------*/
.stat-grid {
  display: grid;
  grid-template-columns: repeat(var(--stat-grid-columns, 3), 1fr);
  gap: 0.4rem;
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
/* ---------- KPI ---------- */
.stats-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 12px;
}

.stats-grid.stats-grid-compact {
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
}

.card-stat {
  padding: 14px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  background: var(--surface);
  box-shadow: var(--shadow-card);
  transition: transform var(--transition-card), box-shadow var(--transition-card);
}

.card-stat:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-card-lift);
}

.card-stat-header {
  gap: 8px;
  margin-bottom: 8px;
}

.card-stat-delta {
  font-size: 10.5px;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 999px;
  gap: 2px;
}

.card-stat-delta.up {
  color: var(--tone-success);
  background: var(--tone-success-soft);
}

.card-stat-delta.down {
  color: var(--tone-danger);
  background: var(--tone-danger-soft);
}

.card-stat-delta.flat {
  color: var(--muted);
  background: var(--surface-soft);
}

.card-stat-value {
  font-size: 24px;
  font-weight: 800;
  color: var(--heading);
  line-height: 1;
}

.card-stat-value small {
  font-size: 12px;
  font-weight: 600;
  color: var(--muted);
}

.card-stat-label {
  font-size: 11px;
  color: var(--muted);
  margin-top: 3px;
}

/* ---------- MY CLASSES ---------- */
.class-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}

.award-icon i {
  color: #fff;
}

/* ---------- ACHIEVEMENTS ---------- */
.award-list {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

.award-item {
  padding: 14px 8px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-list);
  background: var(--surface);
  transition: transform var(--transition-card);
}

.award-item:hover {
  transform: translateY(-3px);
}

.award-icon {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  margin: 0 auto 8px;
  display: grid;
  place-items: center;
  font-size: 22px;
}

.award-icon i {
  font-size: 22px !important;
}

.award-item b {
  display: block;
  font-size: 12px;
  color: var(--heading);
}

.award-item span {
  font-size: 10px;
  color: var(--muted);
}

@media (max-width: 1199px) {
  .stats-grid {
    grid-template-columns: repeat(3, 1fr);
  }

  .class-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 767px) {
  .stats-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .class-grid {
    grid-template-columns: 1fr;
  }

  .award-list {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (max-width: 575px) {

  .stats-grid,
  .card-profile-stats {
    grid-template-columns: 1fr;
  }
}

/* ---------- METRIC TILES ---------- */
/* small figure + caption block; the left rail takes a border-* utility */
.metric-tile {
  padding: 14px;
  border: 1px solid var(--border-soft);
  border-left-width: 3px;
  border-radius: var(--radius-list);
  background: var(--surface);
  transition: transform var(--transition-card), box-shadow var(--transition-card);
}

.metric-tile:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-card);
}

.metric-tile-value {
  font-size: 22px;
  font-weight: 800;
  letter-spacing: -0.4px;
  color: var(--heading);
  margin: 8px 0 2px;
}

.metric-tile-value small {
  font-size: 11px;
  font-weight: 700;
  color: var(--muted);
}

.metric-tile-label {
  font-size: 11px;
  color: var(--muted);
}

.metric-tile-sm {
  padding: 9px;
}

.metric-tile-sm .metric-tile-value {
  font-size: 17px;
  margin: 4px 0 1px;
}

.metric-tile-md {
  padding: 11px;
}

.metric-tile-md .metric-tile-value {
  font-size: 19px;
  margin: 6px 0 2px;
}

/* ---------- COUNTDOWN STRIP ---------- */
.countdown-strip {
  gap: 12px;
  padding: 12px 14px;
  border: 1px solid var(--border-soft);
  border-left-width: 3px;
  border-radius: var(--radius-list);
  background: var(--surface);
}

.countdown-strip .ic {
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: 10px;
  display: grid;
  place-items: center;
  font-size: 19px;
}

.countdown-strip .tx {
  min-width: 0;
  flex: 1;
}

.countdown-strip .tx b {
  display: block;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--heading);
  line-height: 1.2;
}

.countdown-strip .tx span {
  font-size: 10.5px;
  color: var(--muted);
}

.countdown-strip .num {
  text-align: center;
  flex-shrink: 0;
}

.countdown-strip .num b {
  display: block;
  font-size: 22px;
  font-weight: 800;
  letter-spacing: -0.02em;
  line-height: 1;
}

.countdown-strip .num span {
  font-size: 9.5px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--muted);
}

.fact-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin-top: 4px;
}

.fact-tile {
  padding: 9px 10px;
  border-radius: 10px;
  background: var(--surface);
  border: 1px solid var(--border-soft);
  border-left-width: 3px;
}

.fact-tile b {
  display: block;
  font-size: 17px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--heading);
  line-height: 1.1;
}

.fact-tile b small {
  font-size: 11px;
  font-weight: 700;
  color: var(--muted);
}

.fact-tile span {
  font-size: 10px;
  color: var(--muted);
}

/* ---------- SUMMARY CELLS ---------- */
.summary-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  margin-top: 12px;
}

.summary-cell {
  padding: 8px 10px;
  border-radius: 9px;
  border: 1px solid var(--border-soft);
  border-left-width: 3px;
  background: var(--surface);
}

.summary-cell .k {
  display: block;
  font-size: 9.5px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--muted);
}

.summary-cell b {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--heading);
  white-space: nowrap;
}

/* ---------- GOAL RINGS ---------- */
.goal-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}

.goal-item {
  padding: 14px 8px;
  border: 1px solid var(--border-soft);
  border-radius: var(--radius);
  background: var(--surface);
  transition: transform var(--transition-card), box-shadow var(--transition-card);
}

.goal-item:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-card);
}

.goal-item .progress-ring {
  width: 80px;
  height: 80px;
  margin: 0 auto 8px;
}

.goal-item .progress-ring-hole {
  width: 60px;
  height: 60px;
}

.goal-item .progress-ring-hole b {
  font-size: 15px;
}

.goal-item b {
  display: block;
  font-size: 12.5px;
  color: var(--heading);
}

.goal-item span {
  font-size: 10.5px;
  color: var(--muted);
}

/* ---------- STREAK CHIPS ---------- */
.streak-list {
  gap: 5px;
}

.streak-list span {
  width: 28px;
  height: 28px;
  border-radius: 9px;
  display: grid;
  place-items: center;
  font-size: 12px;
  background: var(--surface-soft);
  color: var(--muted);
}

.amount-value {
  font-size: 16px;
  color: var(--heading);
}

@media (max-width: 1399px) {
  .summary-grid {
    grid-template-columns: 1fr 1fr;
  }
}

@media (max-width: 767px) {
  .fact-grid {
    grid-template-columns: repeat(4, 1fr);
  }

  .goal-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 480px) {
  .fact-grid {
    grid-template-columns: 1fr 1fr;
  }
}

/*-----------------
    Meter

    A slim proportion bar. Bootstrap's `.progress` expects a `.progress-bar`
    child and carries chart-sized defaults; `.meter` is the hairline version
    used inside list rows and ranking tables, and it accepts either one fill
    or several segments.

        <div class="meter">
            <span class="bg-primary" style="width:72%"></span>
        </div>

        <div class="meter meter-lg meter-segmented">
            <span class="bg-success" style="width:56%"></span>
            <span class="bg-warning" style="width:24%"></span>
        </div>
-----------------*/
.meter {
  display: flex;
  height: var(--meter-height, 0.375rem);
  border-radius: 50rem;
  background: var(--meter-track, #E9EDF4);
  overflow: hidden;
}

.meter>span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--meter-fill, #1f3b60);
  transition: width 0.3s ease;
}

/*----- heights -----*/

.meter.meter-xs {
  --meter-height: 0.25rem;
}

.meter.meter-lg {
  --meter-height: 0.625rem;
}

.meter.meter-xl {
  --meter-height: 0.5rem;
}

/*----- butted segments rather than one rounded fill -----*/

.meter.meter-segmented {
  border-radius: 5px;
}

.meter.meter-segmented>span {
  border-radius: 0;
}

/*----- a projected / not-yet-real value: striped fill at reduced opacity
          so a forecast reads differently from a recorded figure -----*/

.meter.meter-dashed>span {
  opacity: 0.55;
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.45) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.45) 50%, rgba(255, 255, 255, 0.45) 75%, transparent 75%, transparent);
  background-size: 0.5rem 0.5rem;
}

/*-----------------
    Benchmark marker

    A hairline dropped onto the track at a reference value — a class average, a
    target, last period's figure — so a row shows both where it stands and what
    it is being measured against.

        <div class="meter meter-success">
            <span style="width:94%"></span>
            <i class="meter-marker" style="left:82%"></i>
        </div>

    The meter becomes the marker's containing block, so `left` is a plain
    percentage of the track.
-----------------*/
.meter {
  position: relative;
}

.meter .meter-marker {
  position: absolute;
  top: -2px;
  bottom: -2px;
  width: 2px;
  border-radius: 1px;
  background: var(--meter-marker, #515B73);
  transition: left 0.3s ease;
}

/*-----------------
    Meter tones — the fill colour, applied to the track rather than each span
-----------------*/
.meter-primary {
  --meter-fill: #1f3b60;
}

.meter-secondary {
  --meter-fill: #0e76bd;
}

.meter-success {
  --meter-fill: #1ABE17;
}

.meter-info {
  --meter-fill: #0F65CD;
}

.meter-warning {
  --meter-fill: #EAB300;
}

.meter-danger {
  --meter-fill: #E82646;
}

.meter-purple {
  --meter-fill: #4A00E5;
}

.meter-pink {
  --meter-fill: #E83E8C;
}

.meter-dark {
  --meter-fill: #202C4B;
}

/*-----------------
    Gauge

    A circular percentage dial drawn with a conic gradient — no chart library
    and no SVG. Set the value and colour through custom properties so a single
    element carries the whole reading.

        <div class="gauge" style="--gauge-value:82">
            <span class="gauge-value">82%</span>
        </div>

    `--gauge-value` is a plain number (0–100). `--gauge-color` tints the arc,
    `--gauge-track` the remainder, and `--gauge-surface` the punched-out centre
    so the dial can sit on a tinted panel.
-----------------*/
.gauge {
  position: relative;
  width: var(--gauge-size, 6.5rem);
  height: var(--gauge-size, 6.5rem);
  border-radius: 50%;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  background: conic-gradient(var(--gauge-color, #1f3b60) calc(var(--gauge-value, 70) * 1%), var(--gauge-track, #E9EDF4) 0);
}

.gauge::before {
  content: "";
  position: absolute;
  width: calc(var(--gauge-size, 6.5rem) - var(--gauge-thickness, 1.625rem));
  height: calc(var(--gauge-size, 6.5rem) - var(--gauge-thickness, 1.625rem));
  border-radius: 50%;
  background: var(--gauge-surface, #FFF);
}

.gauge .gauge-value {
  position: relative;
  font-weight: 800;
  font-size: 1.15rem;
  letter-spacing: -0.02em;
  line-height: 1.15;
  text-align: center;
  color: #202C4B;
}

.gauge .gauge-value>small {
  display: block;
  font-size: 0.5em;
  font-weight: 600;
  letter-spacing: 0;
  color: #6A7287;
}

/*----- sizes -----*/

.gauge.gauge-xs {
  --gauge-size: 2.5rem;
  --gauge-thickness: 0.625rem;
}

.gauge.gauge-xs .gauge-value {
  font-size: 0.625rem;
}

.gauge.gauge-sm {
  --gauge-size: 5rem;
  --gauge-thickness: 1.25rem;
}

.gauge.gauge-sm .gauge-value {
  font-size: 0.95rem;
}

.gauge.gauge-lg {
  --gauge-size: 9.75rem;
  --gauge-thickness: 2.25rem;
}

.gauge.gauge-lg .gauge-value {
  font-size: 1.9rem;
}

[data-theme=dark] .gauge,
[data-bs-theme=dark] .gauge {
  --gauge-surface: #141b2d;
}

/*-----------------
    Gauge tones — the arc colour, taken from the theme rather than a hex
-----------------*/
.gauge-primary {
  --gauge-color: #1f3b60;
}

.gauge-secondary {
  --gauge-color: #0e76bd;
}

.gauge-success {
  --gauge-color: #1ABE17;
}

.gauge-info {
  --gauge-color: #0F65CD;
}

.gauge-warning {
  --gauge-color: #EAB300;
}

.gauge-danger {
  --gauge-color: #E82646;
}

.gauge-purple {
  --gauge-color: #4A00E5;
}

.gauge-pink {
  --gauge-color: #E83E8C;
}

.gauge-teal {
  --gauge-color: #02a8b5;
}

/*-----------------
    Sparkline

    A trend indicator small enough to sit inside a table cell or a list row.
    Two forms share the class: an inline bar chart built from `<i>` elements,
    and an SVG line drawn with `<path class="line">`.

        <span class="sparkline">
            <i style="height:60%"></i><i style="height:84%"></i><i style="height:100%"></i>
        </span>

        <svg class="sparkline sparkline-line" viewBox="0 0 100 40">
            <path class="line" d="…" stroke="currentColor"></path>
        </svg>

    Bars take their colour from `--sparkline-fill`, or from a background
    utility on each bar when a row mixes colours.
-----------------*/
.sparkline {
  display: flex;
  align-items: flex-end;
  gap: 2px;
  height: var(--sparkline-height, 1.5rem);
  flex: 1 1 auto;
}

.sparkline>i {
  flex: 1 1 auto;
  min-height: 3px;
  border-radius: 2px 2px 0 0;
  opacity: 0.85;
  background: var(--sparkline-fill, #1f3b60);
}

/*----- the SVG line form -----*/

.sparkline.sparkline-line {
  display: block;
  width: 100%;
  height: 2.5rem;
  overflow: visible;
}

.sparkline.sparkline-line path.line {
  fill: none;
  stroke-width: 2.4;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/*----- heights -----*/

.sparkline.sparkline-sm {
  --sparkline-height: 1.125rem;
}

.sparkline.sparkline-lg {
  --sparkline-height: 2.5rem;
}

/*-----------------
    Sparkline tones — set the fill once on the chart, not on every bar
-----------------*/
.sparkline-primary {
  --sparkline-fill: #1f3b60;
}

.sparkline-secondary {
  --sparkline-fill: #0e76bd;
}

.sparkline-success {
  --sparkline-fill: #1ABE17;
}

.sparkline-info {
  --sparkline-fill: #0F65CD;
}

.sparkline-warning {
  --sparkline-fill: #EAB300;
}

.sparkline-danger {
  --sparkline-fill: #E82646;
}

.sparkline-purple {
  --sparkline-fill: #4A00E5;
}

/* an intermediate height, between the inline default and `.sparkline-lg` */
.sparkline.sparkline-md {
  --sparkline-height: 2rem;
}

.sparkline-pink {
  --sparkline-fill: #E83E8C;
}

/*-----------------
    Activity feed

    A vertical run of events joined by a rail, each marked by an icon tile.
    Distinct from `.timeline`, which alternates panels left and right — this
    is the compact single-column feed dashboards use for recent activity.

        <ul class="activity-feed">
            <li>
                <span class="avatar avatar-icon avatar-md bg-primary-transparent">
                    <i class="ti ti-send"></i>
                </span>
                <h6 class="mb-1">Fee reminder sent to 412 parents</h6>
                <span class="chip chip-soft chip-muted"><i class="ti ti-clock"></i>20m</span>
            </li>
        </ul>

    The tile is positioned onto the rail automatically, so it can sit anywhere
    among the item's children. `.activity-feed-roomy` adds hover feedback and
    padding for feeds whose rows are clickable.
-----------------*/
.activity-feed {
  list-style: none;
  margin: 0;
  padding: 0;
}

.activity-feed>li,
.activity-feed>.activity-feed-item {
  position: relative;
  padding: 0 0 1.05rem 2.5rem;
}

.activity-feed>li::before,
.activity-feed>.activity-feed-item::before {
  content: "";
  position: absolute;
  inset-inline-start: 15px;
  top: 37px;
  bottom: 3px;
  width: 2px;
  background: var(--activity-feed-rail, #E9EDF4);
}

.activity-feed>li:last-child,
.activity-feed>.activity-feed-item:last-child {
  padding-bottom: 0;
}

.activity-feed>li:last-child::before,
.activity-feed>.activity-feed-item:last-child::before {
  display: none;
}

.activity-feed>li>.avatar,
.activity-feed>.activity-feed-item>.avatar {
  position: absolute;
  inset-inline-start: 0;
  top: 1px;
}

.activity-feed>li h6,
.activity-feed>.activity-feed-item h6 {
  font-size: 0.8125rem;
  font-weight: 500;
  line-height: 1.3;
}

/*----- roomier rows that respond to the pointer -----*/

.activity-feed.activity-feed-roomy>li,
.activity-feed.activity-feed-roomy>.activity-feed-item {
  padding: 0.5rem 0.5rem 0.5rem 2.875rem;
  border-radius: 8px;
  transition: background 0.15s ease;
}

.activity-feed.activity-feed-roomy>li::before,
.activity-feed.activity-feed-roomy>.activity-feed-item::before {
  inset-inline-start: 21px;
  top: 41px;
  bottom: -9px;
}

.activity-feed.activity-feed-roomy>li>.avatar,
.activity-feed.activity-feed-roomy>.activity-feed-item>.avatar {
  inset-inline-start: 6px;
  top: 5px;
}

.activity-feed.activity-feed-roomy>li:last-child,
.activity-feed.activity-feed-roomy>.activity-feed-item:last-child {
  padding-bottom: 0.45rem;
}

.activity-feed.activity-feed-roomy>li:hover,
.activity-feed.activity-feed-roomy>.activity-feed-item:hover {
  background: var(--activity-feed-hover, #F2F5FF);
}

/*-----------------
    Feed divider

    A date or group heading between runs of items. The rule after the label
    fills whatever width is left, so it never needs measuring.
-----------------*/
.activity-feed>li.activity-feed-divider,
.activity-feed>.activity-feed-divider {
  padding: 0.55rem 0 0.35rem;
}

.activity-feed>li.activity-feed-divider:first-child,
.activity-feed>.activity-feed-divider:first-child {
  padding-top: 0;
}

.activity-feed>li.activity-feed-divider::before,
.activity-feed>.activity-feed-divider::before {
  display: none;
}

.activity-feed>li.activity-feed-divider:hover,
.activity-feed>.activity-feed-divider:hover {
  background: transparent;
}

.activity-feed>li.activity-feed-divider>span,
.activity-feed>.activity-feed-divider>span {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  width: 100%;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: #838A9B;
}

.activity-feed>li.activity-feed-divider>span::after,
.activity-feed>.activity-feed-divider>span::after {
  content: "";
  flex: 1 1 auto;
  height: 1px;
  background: var(--activity-feed-rail, #E9EDF4);
}

.activity-feed.activity-feed-roomy>li.activity-feed-divider,
.activity-feed.activity-feed-roomy>.activity-feed-divider {
  padding-inline: 0.5rem;
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
/* ---------- ACTIVITY TIMELINE ---------- */
.timeline-list {
  padding-left: 6px;
}

.timeline-item {
  gap: 12px;
  padding: 9px 0;
}

.timeline-item:not(:last-child)::before {
  content: "";
  position: absolute;
  left: 15px;
  top: 40px;
  bottom: -9px;
  width: 2px;
  background: var(--border-soft);
}

.timeline-icon {
  width: 32px;
  height: 32px;
  border-radius: 10px;
  display: grid;
  place-items: center;
  font-size: 15px;
  z-index: 1;
}

.timeline-body b {
  font-size: 12.5px;
  color: var(--heading);
}

.timeline-body p {
  margin: 1px 0 0;
  font-size: 11px;
  color: var(--muted);
}

.timeline-time {
  font-size: 10.5px;
  color: var(--muted);
}

/*-----------------
	Time-gutter timeline

		Distinct from `.activity-feed` (icon rail) and `.timeline-item` (flex row):
		here a fixed 62px time column sits beside the body, with the connector drawn
		between dots. Used for day schedules and agendas.

	Promoted from pages/_parent-portal.scss — a reusable pattern, not page style.
-----------------*/
/* ---------- TODAY TIMELINE ---------- */
.portal-timeline-track {
  padding-left: 4px;
}

.portal-timeline {
  display: grid;
  grid-template-columns: 62px 1fr;
  gap: 14px;
  padding-bottom: 18px;
}

.portal-timeline:last-child {
  padding-bottom: 0;
}

.portal-timeline-time {
  font-size: 11.5px;
  font-weight: 650;
  color: var(--bs-secondary-color);
  padding-top: 1px;
  font-variant-numeric: tabular-nums;
}

.portal-timeline-time small {
  display: block;
  font-size: 9.5px;
  color: var(--bs-tertiary-color);
  font-weight: 600;
}

.portal-timeline-body {
  padding-left: 22px;
}

.portal-timeline-body::before {
  content: "";
  position: absolute;
  left: 5px;
  top: 16px;
  bottom: -18px;
  width: 2px;
  background: var(--bs-border-color);
}

.portal-timeline:last-child .portal-timeline-body::before {
  display: none;
}

.portal-timeline-dot {
  left: 0;
  top: 3px;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--bs-body-bg);
  border: 2px solid var(--accent);
  z-index: 1;
}

.portal-timeline.live .portal-timeline-dot {
  background: var(--accent);
  box-shadow: 0 0 0 4px var(--accent-soft);
  animation: px-pulse2 1.6s infinite;
}

@keyframes px-pulse2 {
  0% {
    box-shadow: 0 0 0 0 var(--accent-soft);
  }

  70% {
    box-shadow: 0 0 0 6px transparent;
  }
}

.portal-timeline-body b {
  font-size: 13px;
  color: var(--bs-emphasis-color);
  font-weight: 650;
}

.portal-timeline-body p {
  margin: 2px 0 0;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/*-----------------
    Route map

    A schematic live-tracking map: a street grid, the planned route, the
    portion already covered, the stops along it, and a vehicle that animates
    from one end to the other. Drawn entirely in SVG so it needs no map tiles
    and no plugin.

        <div class="route-map">
            <svg class="route-map-canvas" viewBox="0 0 640 240">
                <g class="route-map-grid">…</g>
                <path id="busPath" class="route-map-line" d="…"></path>
                <path class="route-map-line is-covered" d="…"></path>
                <g class="route-map-stop is-done"><circle …><text …></g>
                <g class="route-map-vehicle">…</g>
            </svg>
            <span class="route-map-badge">…</span>
        </div>

    Stops take `.is-done` for ones already served and `.is-next` for the one
    being approached; everything else reads as still ahead.
-----------------*/
.route-map {
  position: relative;
  border: 1px solid #E9EDF4;
  border-radius: 8px;
  background: var(--route-map-surface, #E9EDF4);
  overflow: hidden;
}

.route-map-canvas {
  display: block;
  width: 100%;
  height: auto;
}

/*----- the street grid the route is laid over -----*/
.route-map-grid path {
  fill: none;
  stroke: var(--route-map-grid, rgba(31, 59, 96, 0.14));
  stroke-width: 1;
}

/*----- the route itself, and the stretch already covered -----*/
.route-map-line {
  fill: none;
  stroke: var(--route-map-track, #E9EDF4);
  stroke-width: 8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.route-map-line.is-covered {
  stroke: var(--route-map-covered, #1ABE17);
}

/*-----------------
    Stops

    A circle on the line with its name set beneath. The three states are told
    apart by fill rather than by size, so the line keeps an even rhythm.
-----------------*/
.route-map-stop circle {
  fill: #FFF;
  stroke: var(--route-map-track, #E9EDF4);
  stroke-width: 3;
}

.route-map-stop text {
  fill: #6A7287;
  font-size: 12px;
  font-weight: 600;
  text-anchor: middle;
}

.route-map-stop.is-done circle {
  fill: #1ABE17;
  stroke: #1ABE17;
}

.route-map-stop.is-next circle {
  fill: #1f3b60;
  stroke: #1f3b60;
}

.route-map-stop.is-next text {
  fill: #1f3b60;
}

/*----- the vehicle riding the route -----*/
.route-map-vehicle circle {
  fill: #1f3b60;
}

.route-map-vehicle text {
  font-size: 15px;
  text-anchor: middle;
}

/*----- "live · updated just now", pinned to a corner of the map -----*/
.route-map-badge {
  position: absolute;
  inset-block-start: 0.625rem;
  inset-inline-end: 0.625rem;
}

[data-theme=dark] .route-map,
[data-bs-theme=dark] .route-map {
  --route-map-surface: #202C4B;
  --route-map-grid: rgba(255, 255, 255, 0.08);
  --route-map-track: var(--border-strong);
}

[data-theme=dark] .route-map .route-map-stop circle,
[data-bs-theme=dark] .route-map .route-map-stop circle {
  fill: #202C4B;
}

/* dashboard components — moved out of app-new.css */
/*-----------------
    Dashboard Shell

    The design tokens the dashboard components read (timetable, heatstrip,
    eventrow, skeleton, qa-toggle). Set once on the page's `.dashboard` root
    so every component and every modal inside it resolves the same palette.
-----------------*/
.dashboard {
  --avatar-accent: var(--bs-primary);
  --avatar-accent-soft: var(--tint-primary);
  color: var(--bs-body-color, #374151);
}

/*-----------------
    Hero banner
    The greeting card that anchors a dashboard. Faint radial brand tints sit
    in opposite corners — matched to index2's welcome banner — so the hero
    reads as the page's focal point without a heavy gradient panel.
-----------------*/
.dashboard .dash-hero {
  position: relative;
  overflow: hidden;
}

.dashboard .dash-hero::before {
  content: "";
  position: absolute;
  inset-inline-end: -70px;
  top: -90px;
  width: 300px;
  height: 300px;
  border-radius: 50%;
  background: radial-gradient(circle, var(--tint-primary), transparent 68%);
  pointer-events: none;
}

.dashboard .dash-hero::after {
  content: "";
  position: absolute;
  inset-inline-start: -90px;
  bottom: -120px;
  width: 260px;
  height: 260px;
  border-radius: 50%;
  background: radial-gradient(circle, var(--tint-teal), transparent 70%);
  opacity: 0.7;
  pointer-events: none;
}

.dashboard .dash-hero .card-body {
  position: relative;
  z-index: 1;
}

.dashboard .dash-hero h2 {
  font-weight: 800;
  letter-spacing: -0.02em;
}

/*-----------------
    Spotlight panel
    A soft accent-washed panel that gives a headline figure (a GPA dial, a
    balance, a score) a home instead of floating it on the white card. The
    wash follows whatever `.accent-*` sits on the element, so one panel serves
    every tone. Meant to hold a gauge — the dial's punched-out centre stays
    on the card surface token so it reads cleanly against the tint.
-----------------*/
.dashboard .dash-spotlight {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius);
  border: 1px solid var(--bs-border-color);
  padding: 1.25rem;
  background: radial-gradient(120% 90% at 50% -10%, var(--tint-primary), transparent 70%), var(--bs-body-bg);
}

.dashboard .dash-spotlight .gauge {
  --gauge-surface: var(--bs-body-bg);
}

.dashboard .dash-spotlight-divider {
  height: 1px;
  background: var(--bs-border-color);
  margin: 1rem -1.25rem;
}

/*-----------------
    Spacing rhythm
    Dashboards breathe more than form pages: roomier card and stat-tile
    padding, aligned to index2's shell.
-----------------*/
.dashboard .card>.card-body {
  padding: 1.5rem;
}

.dashboard .card>.card-header {
  padding: 1.1rem 1.5rem;
}

.dashboard .stat-tile {
  padding: 0.9rem 1rem;
}

/* Inside a dashboard the plain tile drops its grey fill and reads as a
   hairline-bordered box — the calmer look these figure groups had before, and
   a better match for the card surface they sit on. (index2's stat-grid keeps
   the filled variant, since it isn't a `.dashboard`.) */
.dashboard .stat-tile.stat-tile-plain {
  background: transparent;
  border: 1px solid var(--bs-border-color);
}

@media (max-width: 767.98px) {
  .dashboard .card>.card-body {
    padding: 1.15rem;
  }

  .dashboard .card>.card-header {
    padding: 1rem 1.15rem;
  }

  .dashboard .stat-tile {
    padding: 0.75rem 0.85rem;
  }
}

/* The global `.accent-*` utility (see _avatar.scss) already declares the
   avatar token pair. Mirroring it onto the dashboard pair means one accent
   class colours avatars, timetable rails, event tiles and meters alike, so a
   page never has to carry both vocabularies on the same element. */
/*-----------------
    Dashboard Classcard

    The "My Classes" widget: a grid of class cards, each with a tinted
    gradient header, a three-up stats row and an action bar. Reads the
    `--dash-*` tokens from the `.dashboard` root; the accent utilities
    (`.accent-*`) drive the per-card tint through the shell's bridge.
-----------------*/
/*----- my classes -----*/
.classcards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}

.classcard {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  overflow: hidden;
  transition: transform var(--transition), box-shadow var(--transition);
}

.classcard:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
}

.classcard-top {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 14px;
  background: linear-gradient(120deg, var(--tint-primary), transparent);
}

.classcard-top b {
  display: block;
  font-size: 14px;
  color: var(--bs-emphasis-color);
}

.classcard-top span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.classcard-badge {
  margin-left: auto;
  align-self: flex-start;
}

.classcard-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  padding: 12px 14px;
}

.classcard-stat b {
  display: block;
  font-size: 15px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.classcard-stat span {
  font-size: 10px;
  color: var(--bs-secondary-color);
}

.classcard-actions {
  display: flex;
  gap: 6px;
  padding: 0 14px 14px;
}

.classcard-actions .btn {
  flex: 1;
}

@media (max-width: 1199px) {
  .classcards {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 767px) {
  .classcards {
    grid-template-columns: 1fr;
  }
}

/*-----------------
    Dashboard Controls

    The quick-attendance segmented toggle and the toast stack — the two
    interactive controls the dashboard JS drives directly.
-----------------*/
/*----- quick attendance -----*/
.qa-toggle {
  display: inline-flex;
  border: 1px solid var(--bs-border-color);
  border-radius: 999px;
  overflow: hidden;
  flex-shrink: 0;
}

.qa-toggle button {
  border: 0;
  background: transparent;
  font-size: 11.5px;
  font-weight: 600;
  padding: 5px 13px;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
}

.qa-toggle button.p.active {
  background: var(--bs-success);
  color: #fff;
}

.qa-toggle button.a.active {
  background: var(--bs-danger);
  color: #fff;
}

/* the whole roster row is a click target */
#dashQaList .data-list-item {
  cursor: pointer;
}

/*----- toasts -----*/
#toastStack {
  position: fixed;
  top: 76px;
  right: 20px;
  z-index: 3000;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

#toastStack .toast {
  min-width: 250px;
}

/*-----------------
    Dashboard Widgets

    The pieces of the dashboard shell still in service: the attendance
    heatmap strip and the calendar event row. Both read the `--dash-*`
    tokens declared on the `.dashboard` root.
-----------------*/
/*----- attendance heatmap -----*/
.heatstrip {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(16px, 1fr));
  gap: 4px;
}

.heatstrip span {
  aspect-ratio: 1;
  border-radius: 4px;
  background: var(--bs-secondary-bg);
}

.heatstrip span.l1 {
  background: rgba(22, 163, 74, 0.25);
}

.heatstrip span.l2 {
  background: rgba(22, 163, 74, 0.45);
}

.heatstrip span.l3 {
  background: rgba(22, 163, 74, 0.68);
}

.heatstrip span.l4 {
  background: rgba(22, 163, 74, 0.9);
}

.heatstrip span.ab {
  background: rgba(220, 38, 38, 0.55);
}

.heatstrip-legend {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
  margin-top: 8px;
}

.heatstrip-legend i {
  width: 12px;
  height: 12px;
  border-radius: 3px;
  display: inline-block;
  background: var(--bs-secondary-bg);
}

/* legend swatches carry the same level classes as the cells they explain, so
   the key can never drift out of step with the strip */
.heatstrip-legend i.l1 {
  background: rgba(22, 163, 74, 0.25);
}

.heatstrip-legend i.l2 {
  background: rgba(22, 163, 74, 0.45);
}

.heatstrip-legend i.l3 {
  background: rgba(22, 163, 74, 0.68);
}

.heatstrip-legend i.l4 {
  background: rgba(22, 163, 74, 0.9);
}

.heatstrip-legend i.ab {
  background: rgba(220, 38, 38, 0.55);
}

/*----- calendar events -----*/
.eventrow {
  display: flex;
  gap: 12px;
  align-items: center;
  padding: 10px 0;
  border-bottom: 1px solid var(--bs-border-color);
}

.eventrow:last-child {
  border-bottom: 0;
}

.eventrow-date {
  width: 48px;
  flex-shrink: 0;
  text-align: center;
  border-radius: 10px;
  padding: 6px 0;
  background: var(--tint-primary);
  color: var(--bs-primary);
}

.eventrow-date b {
  display: block;
  font-size: 17px;
  font-weight: 800;
  line-height: 1;
}

.eventrow-date span {
  font-size: 9.5px;
  text-transform: uppercase;
}

.eventrow-body b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  display: block;
}

.eventrow-body span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
#tdQaList .info-list-item {
  cursor: pointer;
}

#tdQaList .info-list-item[data-att=absent] {
  border-color: var(--tone-danger);
  background: var(--tone-danger-soft);
}

/*-----------------
    Dashboard widgets — hero, performance, AI, funnel, ranking panels.
    Extracted from app-new.css unchanged.
-----------------*/
/*-----------------
    Design tokens consumed by the widgets. Previously declared on
    `body.mui-premium` in _app-shell.scss; moved here so the widgets stay
    self-contained now that the body class is gone.
-----------------*/
@media (max-width: 1199.98px) {
  .widget-canvas .pk-exec .pk-exec-kpi:nth-child(3n+1) {
    border-left: 0;
  }
}

@media (max-width: 767.98px) {
  .widget-canvas .pk-exec .pk-exec-kpi {
    border-left: 0 !important;
    border-top: 1px solid var(--bs-border-color);
  }
}

@media (max-width: 1399.98px) {
  .widget-canvas .pk-si-donut {
    border-left: 0;
    border-top: 1px solid var(--bs-border-color);
  }
}

/* leaderboard rank chip */
/* map placeholder */
.widget-canvas .map-panel {
  position: relative;
  border-radius: 12px;
  min-height: 200px;
  overflow: hidden;
  border: 1px solid var(--bs-border-color);
  background-image: linear-gradient(rgba(var(--bs-primary-rgb), 0.1) 1px, transparent 1px), linear-gradient(90deg, rgba(var(--bs-primary-rgb), 0.1) 1px, transparent 1px), radial-gradient(120% 120% at 30% 20%, rgba(var(--bs-primary-rgb), 0.1), transparent 60%);
  background-size: 26px 26px, 26px 26px, 100% 100%;
  display: grid;
  place-items: center;
}

.widget-canvas .map-panel .map-panel-pin {
  background: var(--bs-primary);
  box-shadow: 0 8px 20px rgba(var(--bs-primary-rgb), 0.4);
  z-index: 2;
}

.widget-canvas .map-panel .map-panel-pin::after {
  content: "";
  position: absolute;
  width: 46px;
  height: 46px;
  border-radius: 50%;
  background: rgba(var(--bs-primary-rgb), 0.35);
  animation: pkPing 2s var(--transition) infinite;
}

@media (max-width: 991.98px) {
  .widget-canvas .pk-inbox-item .pk-inbox-actions {
    opacity: 1;
  }
}

/* premium performer cards */
.widget-canvas .spotlight-card {
  position: relative;
  overflow: hidden;
  border: 0 !important;
  border-radius: 16px;
}

.widget-canvas .spotlight-card.perf-green {
  background: linear-gradient(135deg, #22c55e 0%, #0f8f42 100%);
  box-shadow: 0 10px 24px rgba(22, 163, 74, 0.28);
}

.widget-canvas .spotlight-card.perf-blue {
  background: linear-gradient(135deg, #5b76e6 0%, #2f6fd0 100%);
  box-shadow: 0 10px 24px rgba(31, 59, 96, 0.28);
}

.widget-canvas .spotlight-card::before {
  content: "";
  position: absolute;
  right: -46px;
  top: -56px;
  width: 180px;
  height: 180px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.12);
}

.widget-canvas .spotlight-card::after {
  content: "";
  position: absolute;
  right: 56px;
  top: 34px;
  width: 96px;
  height: 96px;
  border-radius: 50%;
  border: 2px dashed rgba(255, 255, 255, 0.22);
}

.widget-canvas .spotlight-card>* {
  position: relative;
  z-index: 2;
}

.widget-canvas .spotlight-card .spotlight-img {
  max-height: 150px;
  width: auto;
  filter: drop-shadow(0 8px 14px rgba(0, 0, 0, 0.28));
  margin-bottom: -16px;
}

/* ============================================================
SCHOOL HERO STRIP (index2 only) — compact, white background
Card border/radius/shadow inherited from base .content .card.
Only a faint brand tint sits inside the white hero.
============================================================ */
.widget-canvas .welcome-banner {
  position: relative;
  overflow: hidden;
}

.widget-canvas .welcome-banner::before {
  content: "";
  position: absolute;
  right: -70px;
  top: -90px;
  width: 280px;
  height: 280px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(var(--bs-primary-rgb), 0.1), transparent 68%);
  pointer-events: none;
}

.widget-canvas .welcome-banner .card-body {
  position: relative;
  z-index: 1;
  padding: 1.35rem 1.5rem;
}

/* brand tile + greeting */
.widget-canvas .welcome-banner .welcome-banner-brand {
  background: linear-gradient(135deg, var(--bs-primary), #6d8bff);
  box-shadow: 0 8px 18px rgba(var(--bs-primary-rgb), 0.3);
}

.widget-canvas .welcome-banner h2 {
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--bs-emphasis-color);
  font-size: 1.4rem;
}

/* KPI strip — white bordered tiles with divider feel */
@media (max-width: 575.98px) {
  .widget-canvas .welcome-banner .card-body {
    padding: 1.15rem;
  }
}

/* ---- Popular Categories → bubble cluster + insights ---- */
.widget-canvas .bubble-cloud {
  display: flex;
  flex-wrap: wrap;
  gap: 0.55rem;
  align-items: center;
  justify-content: center;
  padding: 0.4rem 0 0.9rem;
}

.widget-canvas .bubble {
  border-radius: 50%;
  display: grid;
  place-items: center;
  text-align: center;
  color: #fff;
  line-height: 1.05;
  padding: 4px;
  box-shadow: 0 6px 14px rgba(15, 23, 42, 0.14);
  transition: transform 0.18s var(--transition);
  cursor: default;
}

.widget-canvas .bubble.bubble-01 {
  width: 85px;
  height: 85px;
}

.widget-canvas .bubble.bubble-02 {
  width: 75px;
  height: 75px;
}

.widget-canvas .bubble.bubble-03 {
  width: 60px;
  height: 60px;
}

.widget-canvas .bubble.bubble-04 {
  width: 45px;
  height: 45px;
}

.widget-canvas .bubble.bubble-05 {
  width: 38px;
  height: 38px;
}

.widget-canvas .bubble:hover {
  transform: scale(1.06);
}

.widget-canvas .bubble b {
  font-size: 15px;
  font-weight: 800;
  letter-spacing: -0.02em;
}

.widget-canvas .bubble span {
  font-size: 9.5px;
  opacity: 0.92;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.02em;
}

/* ---- Best Teacher / Top Student — achievement chip + tighter stats ---- */
.widget-canvas .spotlight-card .spotlight-img {
  max-height: 132px;
}

/* ============================================================
   Premium body treatment — still used by student-grid.html
   ============================================================ */
/* ===== pk-premium.css ===== */
/* ============================================================
PreSkool — Premium Card + Button layer (portable)
Matches index2.html's button/card language WITHOUT the full
enterprise shell. Opt in per page with <body class="pk-premium">.
Light + Dark (data-theme="dark") aware.
============================================================ */
/* ---- Cards ---- */
body.pk-premium .card {
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 6px 18px rgba(15, 23, 42, 0.05);
  transition: box-shadow 0.25s var(--transition), transform 0.25s var(--transition);
}

body.pk-premium .card:hover {
  box-shadow: 0 0.75rem 1.75rem rgba(15, 23, 42, 0.12);
}

body.pk-premium .card .card-header {
  background: transparent;
  border-bottom: 1px solid var(--bs-border-color);
}

[data-theme=dark] body.pk-premium .card {
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}

[data-theme=dark] body.pk-premium .card:hover {
  box-shadow: 0 0.75rem 1.75rem rgba(0, 0, 0, 0.5);
}

/* ---- Buttons: shared radius/weight ---- */
body.pk-premium .btn {
  border-radius: 10px;
  font-weight: 500;
}

/* ---- 3D PRIMARY BUTTON (same as index2) ---- */
body.pk-premium .btn.btn-primary {
  position: relative;
  border: 0 !important;
  border-radius: 10px;
  font-weight: 600;
  background: var(--bs-primary) !important;
  box-shadow: 0 2px 0 #2c47b5, 0 6px 14px rgba(var(--bs-primary-rgb), 0.35) !important;
  transition: transform 0.12s var(--transition), box-shadow 0.12s var(--transition), background-color 0.12s var(--transition) !important;
}

body.pk-premium .btn.btn-primary:hover,
body.pk-premium .btn.btn-primary:focus {
  transform: translateY(-1px);
  background: #4568e8 !important;
  box-shadow: 0 3px 0 #2c47b5, 0 10px 20px rgba(var(--bs-primary-rgb), 0.42) !important;
}

body.pk-premium .btn.btn-primary:active {
  transform: translateY(2px);
  background: var(--bs-primary) !important;
  box-shadow: 0 0 0 #2c47b5, 0 2px 5px rgba(var(--bs-primary-rgb), 0.3) !important;
}

body.pk-premium .btn.btn-primary i {
  line-height: 1;
}

[data-theme=dark] body.pk-premium .btn.btn-primary {
  box-shadow: 0 2px 0 #223a95, 0 6px 14px rgba(0, 0, 0, 0.45) !important;
}

[data-theme=dark] body.pk-premium .btn.btn-primary:hover,
[data-theme=dark] body.pk-premium .btn.btn-primary:focus {
  box-shadow: 0 3px 0 #223a95, 0 10px 20px rgba(0, 0, 0, 0.5) !important;
}

[data-theme=dark] body.pk-premium .btn.btn-primary:active {
  box-shadow: 0 0 0 #223a95, 0 2px 5px rgba(0, 0, 0, 0.4) !important;
}

/* ---- 3D LIGHT BUTTON (same as index2) ---- */
body.pk-premium .btn.btn-light,
body.pk-premium .btn.btn-outline-light.bg-white {
  position: relative;
  border: 1px solid var(--bs-border-color) !important;
  border-radius: 10px;
  font-weight: 600;
  color: var(--bs-emphasis-color) !important;
  background: var(--bs-body-bg) !important;
  box-shadow: 0 2px 0 #d5dae2, 0 4px 10px rgba(15, 23, 42, 0.08) !important;
  transition: transform 0.12s var(--transition), box-shadow 0.12s var(--transition), background-color 0.12s var(--transition) !important;
}

body.pk-premium .btn.btn-light:hover,
body.pk-premium .btn.btn-light:focus,
body.pk-premium .btn.btn-outline-light.bg-white:hover {
  transform: translateY(-1px);
  background: var(--bs-tertiary-bg) !important;
  box-shadow: 0 3px 0 #d5dae2, 0 8px 16px rgba(15, 23, 42, 0.1) !important;
}

body.pk-premium .btn.btn-light:active,
body.pk-premium .btn.btn-outline-light.bg-white:active {
  transform: translateY(2px);
  background: var(--bs-body-bg) !important;
  box-shadow: 0 0 0 #d5dae2, 0 2px 4px rgba(15, 23, 42, 0.08) !important;
}

body.pk-premium .btn.btn-light i {
  line-height: 1;
}

[data-theme=dark] body.pk-premium .btn.btn-light,
[data-theme=dark] body.pk-premium .btn.btn-outline-light.bg-white {
  box-shadow: 0 2px 0 rgba(0, 0, 0, 0.5), 0 4px 10px rgba(0, 0, 0, 0.45) !important;
}

[data-theme=dark] body.pk-premium .btn.btn-light:hover,
[data-theme=dark] body.pk-premium .btn.btn-light:focus {
  box-shadow: 0 3px 0 rgba(0, 0, 0, 0.5), 0 8px 16px rgba(0, 0, 0, 0.5) !important;
}

[data-theme=dark] body.pk-premium .btn.btn-light:active {
  box-shadow: 0 0 0 rgba(0, 0, 0, 0.5), 0 2px 4px rgba(0, 0, 0, 0.4) !important;
}

/*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
.widget-title {
  gap: 7px;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--heading);
}

.widget-title i {
  font-size: 18px;
  color: var(--bs-primary);
}

.widget-subtitle {
  font-size: 11.5px;
  font-weight: 500;
  color: var(--muted);
}

.widget-header {
  gap: 12px;
  margin-bottom: 14px;
}

.widget-link {
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-primary);
  text-decoration: none;
  gap: 3px;
}

.widget-link:hover {
  color: var(--bs-primary);
  text-decoration: underline;
}

/* ---------- ROUTE STRIP ---------- */
.route-line {
  height: 8px;
  border-radius: 999px;
  background: var(--surface-soft);
  margin: 14px 0 8px;
}

.route-line .fill {
  position: absolute;
  inset: 0 auto 0 0;
  border-radius: 999px;
  background: var(--bs-primary);
}

.route-line .bus {
  position: absolute;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 14px;
  color: #fff;
  background: var(--bs-primary);
  box-shadow: 0 0 0 3px var(--surface);
}

/* .route-stops — all declarations now Bootstrap utilities in the markup */
.route-stops span {
  font-size: 10px;
  color: var(--muted);
}

.route-stops .done {
  color: var(--tone-success);
  font-weight: 650;
}

.route-stops .now {
  color: var(--bs-primary);
  font-weight: 700;
}

/* ---------- LIVE TRACKER ---------- */
.tracker-hero {
  gap: 14px;
  padding: 14px 16px;
  border-radius: var(--radius-list);
  color: #fff;
  background: linear-gradient(130deg, #1f2433, #343b52);
  margin-bottom: 14px;
}

.tracker-id {
  gap: 12px;
  min-width: 0;
}

.tracker-id .ic {
  width: 42px;
  height: 42px;
  flex-shrink: 0;
  border-radius: 12px;
  display: grid;
  place-items: center;
  font-size: 21px;
  color: #fff;
  background: rgba(255, 255, 255, 0.14);
}

.tracker-id b {
  display: block;
  font-size: 14px;
  font-weight: 700;
}

.tracker-id span {
  font-size: 11.5px;
  opacity: 0.72;
}

/* .tracker-eta — all declarations now Bootstrap utilities in the markup */
.tracker-eta b {
  display: block;
  font-size: 26px;
  font-weight: 800;
  letter-spacing: -0.03em;
  line-height: 1;
}

.tracker-eta span {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  opacity: 0.72;
}

.tracker-map {
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-list);
  background: var(--surface-soft);
  margin-bottom: 14px;
}

.tracker-svg {
  height: auto;
}

.tracker-svg .grid path {
  stroke: var(--border-soft);
  stroke-width: 1;
  fill: none;
}

.tracker-svg .route {
  fill: none;
  stroke: var(--border-soft);
  stroke-width: 7;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.tracker-svg .route-done {
  fill: none;
  stroke: url(#trackerRouteGradient);
  stroke-width: 7;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.tracker-svg .stop circle {
  fill: var(--surface);
  stroke: var(--border-soft);
  stroke-width: 3;
}

.tracker-svg .stop text {
  font-size: 12px;
  font-weight: 600;
  text-anchor: middle;
  fill: var(--muted);
}

.tracker-svg .stop.done circle {
  stroke: var(--tone-success);
}

.tracker-svg .stop.done text {
  fill: var(--tone-success);
}

.tracker-svg .stop.next circle {
  stroke: var(--bs-primary);
}

.tracker-svg .stop.next text {
  fill: var(--bs-primary);
  font-weight: 700;
}

.tracker-svg .bus circle {
  fill: var(--bs-primary);
}

.tracker-svg .bus text {
  font-size: 14px;
  text-anchor: middle;
}

.tracker-badge {
  top: 10px;
  right: 10px;
  gap: 6px;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 700;
  color: var(--tone-danger);
  background: var(--surface);
  border: 1px solid var(--border-soft);
}

/* a scrolling events panel — also rescued from the former
   pages/_student-dashboard.scss; used by the layout demo pages */
.event-wrapper {
  max-height: 480px;
  overflow-y: auto;
}

/*-----------------
	Section header

		The band that opens a page section: eyebrow + title on the left, actions on
		the right, with the vertical rhythm baked in so sections space themselves.

	Promoted from pages/_parent-portal.scss — a reusable pattern, not page style.
-----------------*/
/* ---------- primitives ---------- */
.portal-section {
  gap: 12px;
  margin: 26px 2px 14px;
}

.portal-section:first-child {
  margin-top: 4px;
}

/* ---- The month header ---- */

#holidayWorkspace .hol-cal-card .card-header {
  background: transparent;
}

#holidayWorkspace .hol-month-title {
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--bs-emphasis-color);
  min-width: 148px;
  text-align: center;
}

#holidayWorkspace .hol-nav-btn {
  width: 34px;
  height: 34px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 9px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color);
  transition: background 0.18s ease, border-color 0.18s ease, transform 0.18s ease;
}

#holidayWorkspace .hol-nav-btn:hover {
  background: var(--bs-secondary-bg);
  transform: translateY(-1px);
}

/* ---- Legend chips ---- */

#holidayWorkspace .hol-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 0.85rem;
}

#holidayWorkspace .hol-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-size: 12px;
  font-weight: 500;
  color: var(--bs-secondary-color);
}

#holidayWorkspace .hol-legend-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--bs-primary);
}

/* ---- Calendar grid ---- */

#holidayWorkspace .hol-cal {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 1px;
  background: var(--bs-border-color);
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  overflow: hidden;
}

#holidayWorkspace .hol-dow {
  background: var(--bs-secondary-bg);
  padding: 0.65rem 0.5rem;
  text-align: center;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
}

#holidayWorkspace .hol-cell {
  background: var(--bs-body-bg);
  min-height: 118px;
  padding: 0.5rem 0.5rem 0.55rem;
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  position: relative;
  transition: background 0.18s ease;
}

#holidayWorkspace .hol-cell:hover {
  background: var(--bs-secondary-bg);
}

#holidayWorkspace .hol-cell:hover .hol-cell-add {
  opacity: 1;
}

#holidayWorkspace .hol-cell.is-out {
  background: var(--bs-secondary-bg);
}

#holidayWorkspace .hol-cell.is-out .hol-daynum {
  color: #b9c0cf;
}

#holidayWorkspace .hol-cell.is-weekend {
  background: #fafbfe;
}

#holidayWorkspace .hol-cell.is-today .hol-daynum {
  background: var(--bs-primary);
  color: #fff;
}

#holidayWorkspace .hol-cell-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

#holidayWorkspace .hol-daynum {
  width: 27px;
  height: 27px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#holidayWorkspace .hol-cell-add {
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 6px;
  border: 1px dashed var(--bs-border-color);
  color: var(--bs-secondary-color);
  background: var(--bs-body-bg);
  opacity: 0;
  transition: opacity 0.18s ease, background 0.18s ease;
}

#holidayWorkspace .hol-cell-add:hover {
  background: var(--bs-secondary-bg);
}

#holidayWorkspace .hol-events {
  display: flex;
  flex-direction: column;
  gap: 0.28rem;
}

/* ---- Event pills ---- */

#holidayWorkspace .hol-event {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.22rem 0.45rem;
  border-radius: 7px;
  border-left: 3px solid var(--bs-primary);
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  color: color-mix(in srgb, var(--bs-primary) 62%, #1b2436);
  font-size: 11.5px;
  font-weight: 600;
  line-height: 1.25;
  text-decoration: none;
  transition: transform 0.16s ease, box-shadow 0.16s ease, background 0.16s ease;
}

#holidayWorkspace .hol-event:hover {
  transform: translateX(2px);
  background: color-mix(in srgb, var(--bs-primary) 20%, transparent);
  box-shadow: 0 4px 12px rgba(27, 36, 54, 0.08);
}

#holidayWorkspace .hol-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--bs-primary);
  flex: 0 0 auto;
}

#holidayWorkspace .hol-ev-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Category accents (shared by pills, legend, list dots) */
/* =========================================================
     Sidebar widgets — premium, distinct from stock BS cards
     ========================================================= */

#holidayWorkspace .hol-side .card {
  border-radius: var(--radius);
}

#holidayWorkspace .hol-widget>.card-header {
  background: transparent;
  border-bottom: 1px solid var(--bs-border-color);
  padding-bottom: 0.85rem;
}

#holidayWorkspace .hol-widget>.card-body {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
}

/* Section header: icon chip + title + optional link */

#holidayWorkspace .hol-cardhead {
  display: flex;
  align-items: center;
  gap: 0.6rem;
}

#holidayWorkspace .hol-cardhead-ic {
  width: 32px;
  height: 32px;
  flex: 0 0 auto;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  color: var(--bs-primary);
}

#holidayWorkspace .hol-cardhead h5 {
  margin: 0;
  font-size: 15px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#holidayWorkspace .hol-head-link {
  font-size: 12.5px;
  font-weight: 600;
  text-decoration: none;
  color: var(--bs-primary);
  display: inline-flex;
  align-items: center;
}

#holidayWorkspace .hol-head-link i {
  transition: transform 0.16s ease;
}

#holidayWorkspace .hol-head-link:hover i {
  transform: translateX(2px);
}

/* ---- Quick Statistics tiles ---- */

#holidayWorkspace .hol-stat {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.7rem 0.7rem;
  border-radius: 12px;
  background: color-mix(in srgb, var(--bs-primary) 7%, var(--bs-body-bg));
  border: 1px solid color-mix(in srgb, var(--bs-primary) 15%, transparent);
  transition: transform 0.16s ease, box-shadow 0.16s ease, background 0.16s ease;
}

#holidayWorkspace .hol-stat:hover {
  transform: translateY(-2px);
  background: color-mix(in srgb, var(--bs-primary) 11%, var(--bs-body-bg));
  box-shadow: 0 8px 20px rgba(27, 36, 54, 0.09);
}

#holidayWorkspace .hol-stat-ic {
  width: 38px;
  height: 38px;
  flex: 0 0 auto;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  background: color-mix(in srgb, var(--bs-primary) 17%, transparent);
  color: var(--bs-primary);
}

#holidayWorkspace .hol-stat-val {
  margin: 0;
  font-size: 20px;
  font-weight: 700;
  line-height: 1;
  color: var(--bs-emphasis-color);
}

#holidayWorkspace .hol-stat-label {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ---- Upcoming / Recent mini rows ---- */

#holidayWorkspace .hol-mini {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  padding: 0.5rem;
  border-radius: 12px;
  text-decoration: none;
  color: inherit;
  border: 1px solid transparent;
  transition: background 0.16s ease, border-color 0.16s ease, transform 0.16s ease;
}

#holidayWorkspace .hol-mini:hover {
  background: var(--bs-secondary-bg);
  border-color: var(--bs-border-color);
  transform: translateX(2px);
}

#holidayWorkspace .hol-mini:hover .hol-mini-go {
  opacity: 1;
  transform: translateX(0);
}

#holidayWorkspace .hol-date {
  width: 44px;
  height: 46px;
  flex: 0 0 auto;
  border-radius: 11px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: color-mix(in srgb, var(--bs-primary) 13%, transparent);
  color: var(--bs-primary);
  border: 1px solid color-mix(in srgb, var(--bs-primary) 22%, transparent);
}

#holidayWorkspace .hol-date-d {
  font-size: 17px;
  font-weight: 700;
  line-height: 1;
}

#holidayWorkspace .hol-date-m {
  font-size: 10px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

#holidayWorkspace .hol-mini-body {
  flex: 1;
  min-width: 0;
}

#holidayWorkspace .hol-mini-title {
  display: block;
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

#holidayWorkspace .hol-mini-meta {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

#holidayWorkspace .hol-mini-badge {
  flex: 0 0 auto;
  font-size: 10.5px;
  font-weight: 700;
  padding: 0.18rem 0.5rem;
  border-radius: 20px;
  background: color-mix(in srgb, var(--bs-primary) 15%, transparent);
  color: var(--bs-primary);
  white-space: nowrap;
}

#holidayWorkspace .hol-mini-badge.is-past {
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
}

#holidayWorkspace .hol-mini-go {
  flex: 0 0 auto;
  color: var(--bs-secondary-color);
  opacity: 0;
  transform: translateX(-4px);
  transition: opacity 0.16s ease, transform 0.16s ease;
}

#holidayWorkspace .hol-cat-rail {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--bs-primary);
  flex: 0 0 auto;
}

/* ---- Category rows ---- */

#holidayWorkspace .hol-cat-item {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.5rem 0.55rem;
  border-radius: 12px;
  text-decoration: none;
  color: inherit;
  border: 1px solid transparent;
  transition: background 0.16s ease, border-color 0.16s ease, transform 0.16s ease;
}

#holidayWorkspace .hol-cat-item:hover {
  background: var(--bs-secondary-bg);
  border-color: var(--bs-border-color);
  transform: translateX(2px);
}

#holidayWorkspace .hol-cat-item:hover .hol-mini-go {
  opacity: 1;
  transform: translateX(0);
}

#holidayWorkspace .hol-cat-item.active {
  background: color-mix(in srgb, var(--bs-primary) 8%, var(--bs-body-bg));
  border-color: color-mix(in srgb, var(--bs-primary) 26%, transparent);
}

#holidayWorkspace .hol-cat-ic {
  width: 32px;
  height: 32px;
  flex: 0 0 auto;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  background: color-mix(in srgb, var(--bs-primary) 15%, transparent);
  color: var(--bs-primary);
}

#holidayWorkspace .hol-cat-name {
  flex: 1;
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#holidayWorkspace .hol-cat-count {
  font-size: 11px;
  font-weight: 700;
  color: var(--bs-primary);
  background: color-mix(in srgb, var(--bs-primary) 13%, transparent);
  border-radius: 20px;
  padding: 0.12rem 0.5rem;
}

/* ---- List rows ---- */

#holidayWorkspace .hol-list-row {
  transition: background 0.14s ease;
}

#holidayWorkspace .hol-list-row:hover {
  background: var(--bs-secondary-bg);
}

/* ---- Responsive: agenda-style stacking ---- */

@media (max-width: 991.98px) {
  #holidayWorkspace .hol-cell {
    min-height: 92px;
  }
}

@media (max-width: 575.98px) {
  #holidayWorkspace .hol-cal {
    grid-template-columns: 1fr;
    gap: 0;
  }

  #holidayWorkspace .hol-dow {
    display: none;
  }

  #holidayWorkspace .hol-cell {
    min-height: 0;
    flex-direction: row;
    align-items: flex-start;
    gap: 0.75rem;
    border-bottom: 1px solid var(--bs-border-color);
  }

  #holidayWorkspace .hol-cell.is-out {
    display: none;
  }

  #holidayWorkspace .hol-cell.is-empty {
    display: none;
  }

  #holidayWorkspace .hol-cell-top {
    flex: 0 0 44px;
    flex-direction: column;
  }

  #holidayWorkspace .hol-events {
    flex: 1;
  }

  #holidayWorkspace .hol-cell-add {
    display: none;
  }
}

/* ---- Dark mode ---- */
[data-theme=dark] #holidayWorkspace .hol-cell.is-weekend,
[data-layout-mode=dark] #holidayWorkspace .hol-cell.is-weekend {
  background: #1b2233;
}

[data-theme=dark] #holidayWorkspace .hol-event,
[data-layout-mode=dark] #holidayWorkspace .hol-event {
  color: color-mix(in srgb, var(--bs-primary) 70%, #e8ebf3);
}

/* ---- Queue (master) ---- */

#expenseWorkspace .exp-queue,
#incomeWorkspace .exp-queue {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  max-height: calc(100vh - 300px);
  overflow-y: auto;
  padding: 0.15rem 0.3rem 0.15rem 0.15rem;
  scrollbar-width: thin;
}

#expenseWorkspace .exp-queue::-webkit-scrollbar,
#incomeWorkspace .exp-queue::-webkit-scrollbar {
  width: 6px;
}

#expenseWorkspace .exp-queue::-webkit-scrollbar-thumb,
#incomeWorkspace .exp-queue::-webkit-scrollbar-thumb {
  background: var(--bs-border-color);
  border-radius: 20px;
}

#expenseWorkspace .exp-card,
#incomeWorkspace .exp-card {
  position: relative;
  display: block;
  text-decoration: none;
  color: inherit;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  background: var(--bs-body-bg);
  padding: 0.85rem 0.9rem 0.85rem 1.05rem;
  cursor: pointer;
  transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease, background 0.16s ease;
}

#expenseWorkspace .exp-card::before,
#incomeWorkspace .exp-card::before {
  content: "";
  position: absolute;
  left: 0;
  top: 12px;
  bottom: 12px;
  width: 3px;
  border-radius: 3px;
  background: var(--bs-primary);
  opacity: 0.5;
  transition: opacity 0.16s ease;
}

#expenseWorkspace .exp-card:hover,
#incomeWorkspace .exp-card:hover {
  border-color: color-mix(in srgb, var(--bs-primary) 30%, var(--bs-border-color));
  box-shadow: 0 8px 20px rgba(27, 36, 54, 0.07);
  transform: translateY(-1px);
}

#expenseWorkspace .exp-card.active,
#incomeWorkspace .exp-card.active {
  border-color: var(--bs-primary);
  background: color-mix(in srgb, var(--bs-primary) 4%, var(--bs-body-bg));
  box-shadow: 0 8px 22px rgba(27, 36, 54, 0.09);
}

#expenseWorkspace .exp-card.active::before,
#incomeWorkspace .exp-card.active::before {
  opacity: 1;
}

#expenseWorkspace .exp-card-title,
#incomeWorkspace .exp-card-title {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  display: block;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

#expenseWorkspace .exp-card-amount,
#incomeWorkspace .exp-card-amount {
  font-size: 16px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  white-space: nowrap;
}

#expenseWorkspace .exp-card-meta,
#incomeWorkspace .exp-card-meta {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* Priority accent per card */
/* ---- Detail (sticky) ---- */

#expenseWorkspace .exp-detail-wrap,
#incomeWorkspace .exp-detail-wrap {
  position: sticky;
  top: 0;
}

#expenseWorkspace .exp-hero,
#incomeWorkspace .exp-hero {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
}

#expenseWorkspace .exp-hero-amount,
#incomeWorkspace .exp-hero-amount {
  font-size: 26px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1;
}

#expenseWorkspace .exp-info-item .exp-info-label,
#incomeWorkspace .exp-info-item .exp-info-label {
  display: block;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 0.1rem;
}

#expenseWorkspace .exp-info-item .exp-info-val,
#incomeWorkspace .exp-info-item .exp-info-val {
  font-size: 13px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
}

/* ---- Receipt cards ---- */

#expenseWorkspace .exp-receipt,
#incomeWorkspace .exp-receipt {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  border: 1px solid var(--bs-border-color);
  border-radius: 11px;
  padding: 0.55rem 0.65rem;
  background: var(--bs-body-bg);
  transition: border-color 0.16s ease, box-shadow 0.16s ease;
}

#expenseWorkspace .exp-receipt:hover,
#incomeWorkspace .exp-receipt:hover {
  border-color: color-mix(in srgb, var(--bs-primary) 30%, var(--bs-border-color));
  box-shadow: 0 6px 14px rgba(27, 36, 54, 0.06);
}

#expenseWorkspace .exp-receipt-ic,
#incomeWorkspace .exp-receipt-ic {
  width: 40px;
  height: 40px;
  flex: 0 0 auto;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  background: color-mix(in srgb, var(--bs-danger) 12%, transparent);
  color: var(--bs-danger);
}

/* ---- Approval timeline ---- */

#expenseWorkspace .exp-tl,
#incomeWorkspace .exp-tl {
  list-style: none;
  margin: 0;
  padding: 0;
}

#expenseWorkspace .exp-tl-step,
#incomeWorkspace .exp-tl-step {
  position: relative;
  display: flex;
  gap: 0.8rem;
  padding-bottom: 1.1rem;
}

#expenseWorkspace .exp-tl-step:last-child,
#incomeWorkspace .exp-tl-step:last-child {
  padding-bottom: 0;
}

#expenseWorkspace .exp-tl-ic,
#incomeWorkspace .exp-tl-ic {
  width: 34px;
  height: 34px;
  flex: 0 0 auto;
  z-index: 1;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  border: 2px solid var(--bs-body-bg);
  box-shadow: 0 0 0 1px var(--bs-border-color);
}

#expenseWorkspace .exp-tl-step:not(:last-child) .exp-tl-ic::after,
#incomeWorkspace .exp-tl-step:not(:last-child) .exp-tl-ic::after {
  content: "";
  position: absolute;
  left: 16px;
  top: 34px;
  bottom: 0;
  width: 2px;
  background: var(--bs-border-color);
}

#expenseWorkspace .exp-tl-step.is-done .exp-tl-ic,
#incomeWorkspace .exp-tl-step.is-done .exp-tl-ic {
  background: var(--bs-success);
  color: #fff;
  box-shadow: 0 0 0 1px var(--bs-success);
}

#expenseWorkspace .exp-tl-step.is-current .exp-tl-ic,
#incomeWorkspace .exp-tl-step.is-current .exp-tl-ic {
  background: var(--bs-primary);
  color: #fff;
  box-shadow: 0 0 0 1px var(--bs-primary);
  animation: expPulse 1.8s ease-in-out infinite;
}

#expenseWorkspace .exp-tl-step.is-reject .exp-tl-ic,
#incomeWorkspace .exp-tl-step.is-reject .exp-tl-ic {
  background: var(--bs-danger);
  color: #fff;
  box-shadow: 0 0 0 1px var(--bs-danger);
}

#expenseWorkspace .exp-tl-step.is-muted,
#incomeWorkspace .exp-tl-step.is-muted {
  opacity: 0.55;
}

#expenseWorkspace .exp-tl-title,
#incomeWorkspace .exp-tl-title {
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#expenseWorkspace .exp-tl-meta,
#incomeWorkspace .exp-tl-meta {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

@keyframes expPulse {

  0%,
  100% {
    box-shadow: 0 0 0 1px var(--bs-primary);
  }

  50% {
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--bs-primary) 30%, transparent);
  }
}

/* ---- Approval action buttons ---- */

#expenseWorkspace .exp-actions,
#incomeWorkspace .exp-actions {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.5rem;
}

/* ---- Comments / discussion ---- */

#expenseWorkspace .exp-comment,
#incomeWorkspace .exp-comment {
  display: flex;
  gap: 0.65rem;
}

#expenseWorkspace .exp-comment-body,
#incomeWorkspace .exp-comment-body {
  flex: 1;
  background: var(--bs-secondary-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  padding: 0.6rem 0.75rem;
}

#expenseWorkspace .exp-comment-body.is-finance,
#incomeWorkspace .exp-comment-body.is-finance {
  background: color-mix(in srgb, var(--bs-primary) 6%, var(--bs-body-bg));
  border-color: color-mix(in srgb, var(--bs-primary) 18%, transparent);
}

#expenseWorkspace .exp-comment-name,
#incomeWorkspace .exp-comment-name {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#expenseWorkspace .exp-comment-time,
#incomeWorkspace .exp-comment-time {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

#expenseWorkspace .exp-comment-text,
#incomeWorkspace .exp-comment-text {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  margin: 0.15rem 0 0;
}

/* ---- Empty state ---- */

#expenseWorkspace .exp-empty,
#incomeWorkspace .exp-empty {
  display: none;
}

#expenseWorkspace.is-empty .exp-empty,
#incomeWorkspace.is-empty .exp-empty {
  display: block;
}

#expenseWorkspace.is-empty .exp-detail-live,
#incomeWorkspace.is-empty .exp-detail-live {
  display: none;
}

/* ---- Responsive ---- */

@media (max-width: 991.98px) {

  #expenseWorkspace .exp-queue,
  #incomeWorkspace .exp-queue {
    max-height: none;
  }

  #expenseWorkspace .exp-detail-wrap,
  #incomeWorkspace .exp-detail-wrap {
    position: static;
  }

  #expenseWorkspace .exp-actions,
  #incomeWorkspace .exp-actions {
    grid-template-columns: 1fr 1fr;
  }
}

/* ---- Category list (master) ---- */

#categoryWorkspace .cat-list {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  max-height: calc(100vh - 300px);
  overflow-y: auto;
  padding: 0.15rem 0.3rem 0.15rem 0.15rem;
  scrollbar-width: thin;
}

#categoryWorkspace .cat-list::-webkit-scrollbar {
  width: 6px;
}

#categoryWorkspace .cat-list::-webkit-scrollbar-thumb {
  background: var(--bs-border-color);
  border-radius: 20px;
}

#categoryWorkspace .cat-card {
  position: relative;
  display: block;
  text-decoration: none;
  color: inherit;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  background: var(--bs-body-bg);
  padding: 0.85rem 0.9rem 0.85rem 1.05rem;
  cursor: pointer;
  transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease, background 0.16s ease;
}

#categoryWorkspace .cat-card::before {
  content: "";
  position: absolute;
  left: 0;
  top: 12px;
  bottom: 12px;
  width: 3px;
  border-radius: 3px;
  background: var(--bs-primary);
  opacity: 0.5;
  transition: opacity 0.16s ease;
}

#categoryWorkspace .cat-card:hover {
  border-color: color-mix(in srgb, var(--bs-primary) 30%, var(--bs-border-color));
  box-shadow: 0 8px 20px rgba(27, 36, 54, 0.07);
  transform: translateY(-1px);
}

#categoryWorkspace .cat-card.active {
  border-color: var(--bs-primary);
  background: color-mix(in srgb, var(--bs-primary) 4%, var(--bs-body-bg));
  box-shadow: 0 8px 22px rgba(27, 36, 54, 0.09);
}

#categoryWorkspace .cat-card.active::before {
  opacity: 1;
}

#categoryWorkspace .cat-icon {
  width: 42px;
  height: 42px;
  flex: 0 0 auto;
  border-radius: 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  background: color-mix(in srgb, var(--bs-primary) 15%, transparent);
  color: var(--bs-primary);
}

#categoryWorkspace .cat-card-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  display: block;
}

#categoryWorkspace .cat-card-code {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

#categoryWorkspace .cat-color-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--bs-primary);
  display: inline-block;
}

/* Slim budget meter on the card + detail */

#categoryWorkspace .cat-meter {
  height: 6px;
  border-radius: 20px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
}

#categoryWorkspace .cat-meter-fill {
  height: 100%;
  border-radius: 20px;
  background: var(--bs-primary);
  transition: width 0.35s ease;
}

#categoryWorkspace .cat-meter-fill.is-over {
  background: var(--bs-danger);
}

/* Accent tokens */
/* ---- Detail (sticky) ---- */

#categoryWorkspace .cat-detail-wrap {
  position: sticky;
  top: 0;
}

#categoryWorkspace .cat-hero-icon {
  width: 58px;
  height: 58px;
  flex: 0 0 auto;
  border-radius: 14px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 28px;
  background: color-mix(in srgb, var(--bs-primary) 15%, transparent);
  color: var(--bs-primary);
}

#categoryWorkspace .cat-info-item .cat-info-label {
  display: block;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 0.1rem;
}

#categoryWorkspace .cat-info-item .cat-info-val {
  font-size: 13px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
}

/* Recent expense mini rows */

#categoryWorkspace .cat-mini {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  padding: 0.45rem 0.5rem;
  border-radius: 10px;
  text-decoration: none;
  color: inherit;
  border: 1px solid transparent;
  transition: background 0.16s ease, border-color 0.16s ease;
}

#categoryWorkspace .cat-mini:hover {
  background: var(--bs-secondary-bg);
  border-color: var(--bs-border-color);
}

/* Approval workflow steps */

#categoryWorkspace .cat-flow {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
}

#categoryWorkspace .cat-flow-step {
  display: flex;
  align-items: center;
  gap: 0.65rem;
}

#categoryWorkspace .cat-flow-ic {
  width: 30px;
  height: 30px;
  flex: 0 0 auto;
  border-radius: 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  color: var(--bs-primary);
}

/* ---- Empty state ---- */

#categoryWorkspace .cat-empty {
  display: none;
}

#categoryWorkspace.is-empty .cat-empty {
  display: block;
}

#categoryWorkspace.is-empty .cat-detail-live {
  display: none;
}

/* ---- Responsive ---- */

@media (max-width: 991.98px) {
  #categoryWorkspace .cat-list {
    max-height: none;
  }

  #categoryWorkspace .cat-detail-wrap {
    position: static;
  }
}

/* ---------- Sticky action bar ---------- */

#invoiceWorkspace .iv-actionbar {
  position: sticky;
  top: 0;
  z-index: 5;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.75rem;
  background: color-mix(in srgb, var(--bs-body-bg) 82%, transparent);
  backdrop-filter: blur(10px);
  border: 1px solid var(--bs-border-color) !important;
  box-shadow: 0 8px 24px -16px rgba(27, 36, 54, 0.3);
}

#invoiceWorkspace .iv-ab-title {
  font-size: 16px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
}

#invoiceWorkspace .iv-ab-sub {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

#invoiceWorkspace .iv-ab-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
}

/* ---------- Section heads ---------- */

#invoiceWorkspace .iv-cardhead {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin-bottom: 1rem;
}

#invoiceWorkspace .iv-cardhead-ic {
  width: 38px;
  height: 38px;
  flex: 0 0 auto;
  border-radius: 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  color: var(--bs-primary);
  background: linear-gradient(135deg, color-mix(in srgb, var(--bs-primary) 18%, transparent), color-mix(in srgb, var(--bs-primary) 7%, transparent));
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--bs-primary) 14%, transparent);
}

#invoiceWorkspace .iv-cardhead-title {
  font-size: 14.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  line-height: 1.15;
}

#invoiceWorkspace .iv-cardhead-sub {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ---------- Invoice hero ---------- */

#invoiceWorkspace .iv-hero {
  position: relative;
  overflow: hidden;
  border-radius: 20px;
  padding: 1.5rem 1.6rem;
  background: radial-gradient(120% 140% at 100% 0%, color-mix(in srgb, var(--bs-primary) 16%, transparent) 0%, transparent 55%), linear-gradient(135deg, color-mix(in srgb, var(--bs-primary) 8%, var(--bs-body-bg)) 0%, var(--bs-body-bg) 60%);
  border: 1px solid color-mix(in srgb, var(--bs-primary) 14%, var(--bs-border-color));
  box-shadow: 0 18px 40px -22px color-mix(in srgb, var(--bs-primary) 55%, transparent);
}

#invoiceWorkspace .iv-hero-glow {
  position: absolute;
  top: -70px;
  right: -40px;
  width: 240px;
  height: 240px;
  border-radius: 50%;
  background: radial-gradient(circle, color-mix(in srgb, var(--bs-primary) 22%, transparent), transparent 70%);
  pointer-events: none;
}

#invoiceWorkspace .iv-hero-grid {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
  justify-content: space-between;
  gap: 1.4rem;
}

#invoiceWorkspace .iv-hero-left {
  flex: 1 1 340px;
  min-width: 0;
}

#invoiceWorkspace .iv-hero-brand {
  display: flex;
  align-items: center;
  gap: 0.9rem;
  margin-bottom: 1.25rem;
}

#invoiceWorkspace .iv-hero-logo {
  width: 54px;
  height: 54px;
  flex: 0 0 auto;
  border-radius: 15px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 26px;
  color: #fff;
  background: linear-gradient(135deg, var(--bs-primary), color-mix(in srgb, var(--bs-primary) 55%, #7b61ff));
  box-shadow: 0 10px 22px -8px color-mix(in srgb, var(--bs-primary) 70%, transparent);
}

#invoiceWorkspace .iv-hero-eyebrow {
  display: block;
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
}

#invoiceWorkspace .iv-hero-no {
  font-size: 24px;
  font-weight: 800;
  letter-spacing: -0.5px;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
}

#invoiceWorkspace .iv-hero-status {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 12px;
  font-weight: 600;
  padding: 0.3rem 0.7rem;
  border-radius: 30px;
  color: var(--bs-warning);
  background: color-mix(in srgb, var(--bs-warning) 15%, transparent);
}

#invoiceWorkspace .iv-hero-meta {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
  gap: 0.9rem 1.2rem;
}

#invoiceWorkspace .iv-hero-mi .iv-hero-mi-label {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-bottom: 0.15rem;
}

#invoiceWorkspace .iv-hero-mi .iv-hero-mi-label i {
  font-size: 13px;
}

#invoiceWorkspace .iv-hero-mi .iv-hero-mi-val {
  font-size: 13.5px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

#invoiceWorkspace .iv-hero-due {
  flex: 0 1 260px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 0.35rem;
  padding: 1.15rem 1.25rem;
  border-radius: 16px;
  color: #fff;
  background: linear-gradient(150deg, color-mix(in srgb, var(--bs-primary) 92%, #000) 0%, var(--bs-primary) 55%, color-mix(in srgb, var(--bs-primary) 60%, #7b61ff) 100%);
  box-shadow: 0 16px 34px -14px color-mix(in srgb, var(--bs-primary) 75%, transparent);
}

#invoiceWorkspace .iv-hero-due-label {
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  opacity: 0.85;
}

#invoiceWorkspace .iv-hero-due-val {
  font-size: 30px;
  font-weight: 800;
  letter-spacing: -0.5px;
  line-height: 1;
}

#invoiceWorkspace .iv-hero-due-bar {
  height: 6px;
  border-radius: 20px;
  background: rgba(255, 255, 255, 0.28);
  overflow: hidden;
  margin: 0.5rem 0 0.1rem;
}

#invoiceWorkspace .iv-hero-due-fill {
  display: block;
  height: 100%;
  width: 0;
  border-radius: 20px;
  background: #fff;
  transition: width 0.9s cubic-bezier(0.4, 0, 0.2, 1);
}

#invoiceWorkspace .iv-hero-due-sub {
  font-size: 11.5px;
  opacity: 0.85;
}

#invoiceWorkspace .iv-hero-due-actions {
  display: flex;
  gap: 0.5rem;
  margin-top: 0.65rem;
}

/* ---------- Student profile ---------- */

#invoiceWorkspace .iv-profile {
  display: flex;
  align-items: center;
  gap: 0.85rem;
}

#invoiceWorkspace .iv-profile-info {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.75rem 1rem;
}

#invoiceWorkspace .iv-info-item .iv-info-label {
  display: block;
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-bottom: 0.1rem;
}

#invoiceWorkspace .iv-info-item .iv-info-val {
  font-size: 13px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
  word-break: break-word;
}

#invoiceWorkspace .iv-info-full {
  grid-column: 1/-1;
}

/* ---------- Financial summary ---------- */

#invoiceWorkspace .iv-sum {
  list-style: none;
  margin: 0;
  padding: 0;
}

#invoiceWorkspace .iv-sum-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.5rem 0;
  font-size: 13px;
  color: var(--bs-emphasis-color);
  border-bottom: 1px dashed var(--bs-border-color);
}

#invoiceWorkspace .iv-sum-row:last-child {
  border-bottom: 0;
}

#invoiceWorkspace .iv-sum-row .iv-sum-label {
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
}

#invoiceWorkspace .iv-sum-row .iv-sum-val {
  font-weight: 600;
}

#invoiceWorkspace .iv-sum-row.is-minus .iv-sum-val {
  color: var(--bs-success);
}

#invoiceWorkspace .iv-sum-row.is-add .iv-sum-val {
  color: var(--bs-danger);
}

#invoiceWorkspace .iv-sum-total {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 0.35rem;
  padding: 0.95rem 1.1rem;
  border-radius: 14px;
  color: #fff;
  background: linear-gradient(135deg, color-mix(in srgb, var(--bs-primary) 90%, #000), var(--bs-primary));
  box-shadow: 0 14px 30px -14px color-mix(in srgb, var(--bs-primary) 75%, transparent);
}

#invoiceWorkspace .iv-sum-total .iv-sum-total-label {
  font-size: 12.5px;
  font-weight: 600;
  opacity: 0.9;
}

#invoiceWorkspace .iv-sum-total .iv-sum-total-val {
  font-size: 23px;
  font-weight: 800;
  letter-spacing: -0.5px;
  line-height: 1;
}

#invoiceWorkspace .iv-paybar {
  height: 8px;
  border-radius: 20px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
}

#invoiceWorkspace .iv-paybar-fill {
  height: 100%;
  border-radius: 20px;
  background: var(--bs-success);
  width: 0;
  transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

/* ---------- Fee breakdown table ---------- */

#invoiceWorkspace .iv-fee-table {
  border-collapse: separate;
  border-spacing: 0;
}

#invoiceWorkspace .iv-fee-table thead th {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--bs-secondary-color);
  font-weight: 600;
  background: var(--bs-secondary-bg);
  border-top: 1px solid var(--bs-border-color);
  border-bottom: 1px solid var(--bs-border-color);
  padding-top: 0.65rem;
  padding-bottom: 0.65rem;
}

#invoiceWorkspace .iv-fee-table thead th:first-child {
  border-left: 1px solid var(--bs-border-color);
  border-top-left-radius: 11px;
}

#invoiceWorkspace .iv-fee-table thead th:last-child {
  border-right: 1px solid var(--bs-border-color);
  border-top-right-radius: 11px;
}

#invoiceWorkspace .iv-fee-table tbody td {
  vertical-align: middle;
  font-size: 13px;
  color: var(--bs-emphasis-color);
  border-bottom: 1px solid var(--bs-border-color);
}

#invoiceWorkspace .iv-fee-table tbody tr {
  transition: background 0.14s ease;
}

#invoiceWorkspace .iv-fee-table tbody tr:hover td {
  background: color-mix(in srgb, var(--bs-primary) 4%, transparent);
}

#invoiceWorkspace .iv-fee-table tfoot td {
  font-weight: 600;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
}

#invoiceWorkspace .iv-fee-table .iv-fee-cat {
  font-weight: 600;
}

#invoiceWorkspace .iv-fee-table .iv-fee-desc {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ---------- Timelines (payment + activity) ---------- */

#invoiceWorkspace .iv-tl {
  list-style: none;
  margin: 0;
  padding: 0;
}

#invoiceWorkspace .iv-tl-step {
  position: relative;
  display: flex;
  gap: 0.85rem;
  padding-bottom: 1.15rem;
}

#invoiceWorkspace .iv-tl-step:last-child {
  padding-bottom: 0;
}

#invoiceWorkspace .iv-tl-ic {
  width: 34px;
  height: 34px;
  flex: 0 0 auto;
  z-index: 1;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  border: 2px solid var(--bs-body-bg);
  box-shadow: 0 0 0 1px var(--bs-border-color);
}

#invoiceWorkspace .iv-tl-step:not(:last-child) .iv-tl-ic::after {
  content: "";
  position: absolute;
  left: 16px;
  top: 34px;
  bottom: 0;
  width: 2px;
  background: var(--bs-border-color);
}

#invoiceWorkspace .iv-tl-step.is-done .iv-tl-ic {
  background: var(--bs-success);
  color: #fff;
  box-shadow: 0 0 0 1px var(--bs-success);
}

#invoiceWorkspace .iv-tl-step.is-current .iv-tl-ic {
  background: var(--bs-primary);
  color: #fff;
  box-shadow: 0 0 0 1px var(--bs-primary);
  animation: ivPulse 1.8s ease-in-out infinite;
}

#invoiceWorkspace .iv-tl-step.is-muted {
  opacity: 0.55;
}

#invoiceWorkspace .iv-tl-body {
  padding-top: 0.1rem;
}

#invoiceWorkspace .iv-tl-title {
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#invoiceWorkspace .iv-tl-meta {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

@keyframes ivPulse {

  0%,
  100% {
    box-shadow: 0 0 0 1px var(--bs-primary);
  }

  50% {
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--bs-primary) 30%, transparent);
  }
}

/* ---------- Quick actions ---------- */

#invoiceWorkspace .iv-qa {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0.65rem 0.4rem;
}

#invoiceWorkspace .iv-qa-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.35rem;
  text-decoration: none;
  color: var(--bs-secondary-color);
  border: 0;
  background: transparent;
  cursor: pointer;
}

#invoiceWorkspace .iv-qa-btn:hover .iv-qa-ic {
  color: #fff;
  border-color: transparent;
  background: linear-gradient(135deg, var(--bs-primary), color-mix(in srgb, var(--bs-primary) 55%, #7b61ff));
  transform: translateY(-3px);
  box-shadow: 0 12px 22px -8px color-mix(in srgb, var(--bs-primary) 70%, transparent);
}

#invoiceWorkspace .iv-qa-btn:hover .iv-qa-lbl {
  color: var(--bs-emphasis-color);
}

#invoiceWorkspace .iv-qa-ic {
  width: 48px;
  height: 48px;
  border-radius: 15px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 21px;
  background: var(--bs-secondary-bg);
  border: 1px solid var(--bs-border-color);
  color: var(--bs-emphasis-color);
  transition: border-color 0.16s ease, color 0.16s ease, transform 0.16s ease, box-shadow 0.16s ease, background 0.16s ease;
}

#invoiceWorkspace .iv-qa-lbl {
  font-size: 10.5px;
  font-weight: 500;
  text-align: center;
  line-height: 1.2;
  transition: color 0.16s ease;
}

/* ---------- Attachments ---------- */

#invoiceWorkspace .iv-file {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  padding: 0.7rem 0.8rem;
  background: var(--bs-body-bg);
  transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;
}

#invoiceWorkspace .iv-file:hover {
  border-color: color-mix(in srgb, var(--bs-primary) 30%, var(--bs-border-color));
  box-shadow: 0 8px 18px rgba(27, 36, 54, 0.07);
  transform: translateY(-1px);
}

#invoiceWorkspace .iv-file-ic {
  width: 42px;
  height: 42px;
  flex: 0 0 auto;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 19px;
  background: color-mix(in srgb, var(--bs-danger) 12%, transparent);
  color: var(--bs-danger);
}

#invoiceWorkspace .iv-file-ic.is-pdf {
  background: color-mix(in srgb, var(--bs-danger) 12%, transparent);
  color: var(--bs-danger);
}

#invoiceWorkspace .iv-file-ic.is-img {
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  color: var(--bs-primary);
}

#invoiceWorkspace .iv-file-ic.is-doc {
  background: color-mix(in srgb, var(--bs-success) 12%, transparent);
  color: var(--bs-success);
}

#invoiceWorkspace .iv-file-name {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#invoiceWorkspace .iv-file-meta {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

#invoiceWorkspace .iv-card {
  transition: box-shadow 0.2s ease, transform 0.2s ease, border-color 0.2s ease;
}

#invoiceWorkspace .iv-card:hover {
  box-shadow: 0 16px 38px -20px rgba(27, 36, 54, 0.28);
  border-color: color-mix(in srgb, var(--bs-primary) 18%, var(--bs-border-color));
}

#invoiceWorkspace .skeleton-loader {
  display: none;
}

#invoiceWorkspace.is-loading .skeleton-loader {
  display: block;
}

#invoiceWorkspace.is-loading .iv-live {
  display: none;
}

#invoiceWorkspace .skeleton {
  border-radius: 8px;
  background: var(--bs-secondary-bg);
}

#invoiceWorkspace .skeleton::after {
  background: linear-gradient(90deg, transparent, color-mix(in srgb, #fff 65%, transparent), transparent);
}

#invoiceWorkspace .skeleton-line {
  height: 12px;
  margin-bottom: 0.6rem;
}

#invoiceWorkspace .skeleton-block {
  height: 120px;
}

#invoiceWorkspace .skeleton-btn {
  height: 40px;
  width: 110px;
  display: inline-block;
  border-radius: 8px;
}

#invoiceWorkspace .skeleton-circle {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  display: inline-block;
}

/* ---------- Empty state ---------- */

#invoiceWorkspace .iv-empty {
  display: none;
  text-align: center;
  padding: 3.5rem 1rem;
}

#invoiceWorkspace.is-empty .iv-empty {
  display: block;
}

#invoiceWorkspace.is-empty .iv-live,
#invoiceWorkspace.is-empty .skeleton-loader {
  display: none;
}

#invoiceWorkspace .iv-empty-ic {
  width: 78px;
  height: 78px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 34px;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
}

/* ---------- Responsive ---------- */

@media (max-width: 991.98px) {
  #invoiceWorkspace .iv-detail-sticky {
    position: static;
  }
}

@media (max-width: 575.98px) {
  #invoiceWorkspace .iv-profile-info {
    grid-template-columns: 1fr;
  }
}

#invoiceWorkspace .iv-detail-sticky {
  position: sticky;
  top: 64px;
}

/* ---------- Dark mode ---------- */
[data-theme=dark] #invoiceWorkspace .skeleton::after,
[data-layout-mode=dark] #invoiceWorkspace .skeleton::after {
  background: linear-gradient(90deg, transparent, color-mix(in srgb, #fff 12%, transparent), transparent);
}

/* ---------- Featured / pinned strip ---------- */

#noticeWorkspace .nb-sec-head {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0 0 0.85rem;
}

#noticeWorkspace .nb-sec-ic {
  width: 30px;
  height: 30px;
  flex: 0 0 auto;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  color: var(--bs-primary);
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
}

#noticeWorkspace .nb-sec-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
}

#noticeWorkspace .nb-sec-sub {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ---------- Card grid ---------- */

#noticeWorkspace .nb-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 1rem;
  align-items: start;
}

#noticeWorkspace .nb-featured-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(360px, 1fr));
  gap: 1rem;
  margin-bottom: 1.5rem;
}

/* ---------- Notice card ---------- */

#noticeWorkspace .nb-card {
  position: relative;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  padding: 1.1rem 1.15rem 1rem;
  cursor: pointer;
  transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
}

#noticeWorkspace .nb-card:hover {
  border-color: color-mix(in srgb, var(--bs-primary) 35%, var(--bs-border-color));
  box-shadow: 0 16px 38px -20px rgba(27, 36, 54, 0.3);
  transform: translateY(-3px);
}

#noticeWorkspace .nb-card:focus-visible {
  outline: 2px solid var(--bs-primary);
  outline-offset: 2px;
}

#noticeWorkspace .nb-card.is-featured {
  background: radial-gradient(120% 130% at 100% 0%, color-mix(in srgb, var(--bs-primary) 12%, transparent) 0%, transparent 55%), var(--bs-body-bg);
  border-color: color-mix(in srgb, var(--bs-primary) 28%, var(--bs-border-color));
}

#noticeWorkspace .nb-card.is-featured::before {
  width: 5px;
  opacity: 1;
}

/* priority accents */

#noticeWorkspace .nb-card-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.5rem;
  margin-bottom: 0.6rem;
}

#noticeWorkspace .nb-pin {
  position: absolute;
  top: 14px;
  right: 82px;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  color: var(--bs-primary);
  background: color-mix(in srgb, var(--bs-primary) 14%, transparent);
}

#noticeWorkspace .nb-pri-dot {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-primary);
}

#noticeWorkspace .nb-pri-dot::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--bs-primary);
}

#noticeWorkspace .nb-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.35;
  margin: 0 0 0.4rem;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

#noticeWorkspace .nb-desc {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  line-height: 1.5;
  margin: 0 0 0.8rem;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

#noticeWorkspace .nb-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 0.9rem;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 0.75rem;
}

#noticeWorkspace .nb-meta .nb-meta-i {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
}

#noticeWorkspace .nb-meta .nb-meta-i i {
  font-size: 13px;
}

#noticeWorkspace .nb-pub {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-bottom: 0.85rem;
}

#noticeWorkspace .nb-pub .nb-pub-name {
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#noticeWorkspace .nb-pub .nb-pub-role {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

#noticeWorkspace .nb-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-top: auto;
  padding-top: 0.75rem;
  border-top: 1px solid var(--bs-border-color);
}

#noticeWorkspace .nb-foot-stats {
  display: inline-flex;
  gap: 0.85rem;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

#noticeWorkspace .nb-foot-stat {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
}

#noticeWorkspace .nb-foot-stat i {
  font-size: 14px;
}

#noticeWorkspace .nb-actions {
  display: inline-flex;
  gap: 0.25rem;
}

#noticeWorkspace .nb-card:has(.dropdown-menu.show) {
  z-index: 5;
}

#noticeWorkspace .nb-actions .dropdown-menu {
  z-index: 1050;
}

/* ---------- Compact list view ---------- */

#noticeWorkspace.is-list .nb-grid,
#noticeWorkspace.is-list .nb-featured-grid {
  grid-template-columns: 1fr;
}

#noticeWorkspace.is-list .nb-featured-grid {
  margin-bottom: 1rem;
}

#noticeWorkspace.is-list .nb-card {
  flex-direction: row;
  align-items: center;
  flex-wrap: wrap;
  padding: 0.85rem 1rem;
}

#noticeWorkspace.is-list .nb-card.is-featured {
  background: var(--bs-body-bg);
}

#noticeWorkspace.is-list .nb-title {
  -webkit-line-clamp: 1;
  line-clamp: 1;
  margin-bottom: 0.25rem;
}

#noticeWorkspace.is-list .nb-desc {
  -webkit-line-clamp: 1;
  line-clamp: 1;
  margin-bottom: 0;
  flex: 1 1 260px;
}

#noticeWorkspace.is-list .nb-card-main {
  flex: 1 1 320px;
  min-width: 0;
}

#noticeWorkspace.is-list .nb-meta {
  margin-bottom: 0;
  margin-left: auto;
}

#noticeWorkspace.is-list .nb-pub {
  margin-bottom: 0;
}

#noticeWorkspace.is-list .nb-foot {
  margin-top: 0;
  padding-top: 0;
  border-top: 0;
  flex: 0 0 auto;
}

#noticeWorkspace.is-list .nb-foot-stats {
  display: none;
}

#noticeWorkspace .nb-card-main {
  display: contents;
}

#noticeWorkspace.is-list .nb-card-main {
  display: block;
}

/* ---------- Attachment cards (offcanvas + modal) ---------- */

#noticeWorkspace .nb-file {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  padding: 0.65rem 0.75rem;
  background: var(--bs-body-bg);
  transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;
}

#noticeWorkspace .nb-file:hover {
  border-color: color-mix(in srgb, var(--bs-primary) 30%, var(--bs-border-color));
  box-shadow: 0 8px 18px rgba(27, 36, 54, 0.07);
  transform: translateY(-1px);
}

#noticeWorkspace .nb-file-ic {
  width: 40px;
  height: 40px;
  flex: 0 0 auto;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  background: color-mix(in srgb, var(--bs-danger) 12%, transparent);
  color: var(--bs-danger);
}

#noticeWorkspace .nb-file-ic.is-img {
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  color: var(--bs-primary);
}

#noticeWorkspace .nb-file-ic.is-doc {
  background: color-mix(in srgb, var(--bs-info) 12%, transparent);
  color: var(--bs-info);
}

#noticeWorkspace .nb-file-ic.is-sheet {
  background: color-mix(in srgb, var(--bs-success) 12%, transparent);
  color: var(--bs-success);
}

#noticeWorkspace .nb-file-name {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#noticeWorkspace .nb-file-meta {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

/* ---------- Offcanvas detail bits ---------- */

#noticeWorkspace .nb-oc-hero {
  border-radius: 12px;
  padding: 1rem 1.1rem;
  background: radial-gradient(120% 130% at 100% 0%, color-mix(in srgb, var(--bs-primary) 14%, transparent) 0%, transparent 55%), var(--bs-secondary-bg);
  border: 1px solid var(--bs-border-color);
}

#noticeWorkspace .nb-info-item .nb-info-label {
  display: block;
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-bottom: 0.1rem;
}

#noticeWorkspace .nb-info-item .nb-info-val {
  font-size: 13px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
}

#noticeWorkspace .nb-readbar {
  height: 8px;
  border-radius: 20px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
}

#noticeWorkspace .nb-readbar-fill {
  display: block;
  height: 100%;
  border-radius: 20px;
  background: var(--bs-success);
  width: 0;
  transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

#noticeWorkspace .nb-comment {
  display: flex;
  gap: 0.6rem;
}

#noticeWorkspace .nb-comment-body {
  flex: 1;
  background: var(--bs-secondary-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  padding: 0.55rem 0.7rem;
}

#noticeWorkspace .nb-comment-name {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#noticeWorkspace .nb-comment-time {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

#noticeWorkspace .nb-comment-text {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  margin: 0.15rem 0 0;
}

/* ---------- Skeleton ---------- */

#noticeWorkspace .skeleton-loader {
  display: none;
}

#noticeWorkspace.is-loading .skeleton-loader {
  display: block;
}

#noticeWorkspace.is-loading .nb-live {
  display: none;
}

#noticeWorkspace .skeleton-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 1rem;
}

#noticeWorkspace .skeleton-card {
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  padding: 1.1rem;
  background: none;
  height: auto;
}

/* shared primitive from components/_ui-skeleton.scss, workspace tone */

#noticeWorkspace .skeleton {
  border-radius: 8px;
  background: var(--bs-secondary-bg);
}

#noticeWorkspace .skeleton::after {
  background: linear-gradient(90deg, transparent, color-mix(in srgb, #fff 65%, transparent), transparent);
}

#noticeWorkspace .skeleton-line {
  height: 12px;
  margin-bottom: 0.6rem;
}

#noticeWorkspace .skeleton-line.w-70 {
  width: 70%;
}

#noticeWorkspace .skeleton-line.w-40 {
  width: 40%;
}

#noticeWorkspace .skeleton-block {
  height: 60px;
  margin: 0.8rem 0;
}

/* ---------- Empty state ---------- */

#noticeWorkspace .nb-empty {
  display: none;
  text-align: center;
  padding: 3.5rem 1rem;
}

#noticeWorkspace.is-empty .nb-empty {
  display: block;
}

#noticeWorkspace.is-empty .nb-live-body {
  display: none;
}

#noticeWorkspace .nb-empty-ic {
  width: 78px;
  height: 78px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 34px;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
}

/* ---------- Fullscreen ---------- */

#noticeWorkspace.nb-fullscreen {
  position: fixed;
  inset: 0;
  z-index: 1045;
  background: var(--bs-secondary-bg);
  padding: 1rem 1.25rem;
  overflow: auto;
}

/* ---------- Notice detail offcanvas ---------- */
#nb_detail {
  --bs-offcanvas-width: 460px;
}

#nb_detail .offcanvas-footer {
  margin-top: auto;
}

#nb_detail .nb-pri-dot {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-primary);
}

#nb_detail .nb-pri-dot::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--bs-primary);
}

#nb_detail .nb-info-item .nb-info-label {
  display: block;
  font-size: 11px;
  color: #8a94a6;
  margin-bottom: 0.1rem;
}

#nb_detail .nb-info-item .nb-info-val {
  font-size: 13px;
  font-weight: 500;
}

#nb_detail .nb-readbar {
  height: 8px;
  border-radius: 20px;
  background: #f2f4f9;
  overflow: hidden;
}

#nb_detail .nb-readbar-fill {
  display: block;
  height: 100%;
  border-radius: 20px;
  background: var(--bs-success);
  width: 0;
  transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

#nb_detail .nb-comment {
  display: flex;
  gap: 0.6rem;
}

#nb_detail .nb-comment-body {
  flex: 1;
  background: #f7f8fb;
  border: 1px solid #e8ebf3;
  border-radius: 12px;
  padding: 0.55rem 0.7rem;
}

#nb_detail .nb-comment-name {
  font-size: 12.5px;
  font-weight: 600;
}

#nb_detail .nb-comment-time {
  font-size: 11px;
  color: #8a94a6;
}

#nb_detail .nb-comment-text {
  font-size: 12.5px;
  margin: 0.15rem 0 0;
}

#nb_detail .nb-file {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  border: 1px solid #e8ebf3;
  border-radius: 12px;
  padding: 0.65rem 0.75rem;
}

#nb_detail .nb-file-ic {
  width: 40px;
  height: 40px;
  flex: 0 0 auto;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  background: color-mix(in srgb, var(--bs-danger) 12%, transparent);
  color: var(--bs-danger);
}

#nb_detail .nb-file-ic.is-img {
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  color: var(--bs-primary);
}

#nb_detail .nb-file-name {
  font-size: 12.5px;
  font-weight: 600;
}

#nb_detail .nb-file-meta {
  font-size: 11px;
  color: #8a94a6;
}

/* ---------- Dark mode ---------- */
[data-theme=dark] #noticeWorkspace .skeleton::after,
[data-layout-mode=dark] #noticeWorkspace .skeleton::after {
  background: linear-gradient(90deg, transparent, color-mix(in srgb, #fff 12%, transparent), transparent);
}

[data-theme=dark] #nb_detail .nb-comment-body {
  background: #1B1632;
  border-color: #1B1632;
}

[data-theme=dark] #nb_detail .nb-readbar {
  background: #1B1632;
}

[data-theme=dark] #nb_detail .nb-file {
  border-color: #1B1632;
}

/* category accents */
/* ---------- Section heads ---------- */

#eventsWorkspace .ev-sec-head {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0 0 0.85rem;
}

#eventsWorkspace .ev-sec-ic {
  width: 30px;
  height: 30px;
  flex: 0 0 auto;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  color: var(--bs-primary);
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
}

#eventsWorkspace .ev-sec-title {
  font-size: 15px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
}

#eventsWorkspace .ev-sec-sub {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ---------- View switching ---------- */

#eventsWorkspace .ev-timeline-sec {
  display: none;
}

#eventsWorkspace.is-grid .ev-calendar-sec {
  display: none;
}

#eventsWorkspace.is-grid .ev-events-title {
  display: none;
}

#eventsWorkspace.is-timeline .ev-calendar-sec,
#eventsWorkspace.is-timeline .ev-events-sec {
  display: none;
}

#eventsWorkspace.is-timeline .ev-timeline-sec {
  display: block;
}

/* ---------- Calendar ---------- */

#eventsWorkspace .ev-cal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  margin-bottom: 1rem;
  flex-wrap: wrap;
}

#eventsWorkspace .ev-cal-nav {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}

#eventsWorkspace .ev-cal-month {
  font-size: 16px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  min-width: 150px;
  text-align: center;
}

#eventsWorkspace .ev-cal {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 1px;
  background: var(--bs-border-color);
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  overflow: hidden;
  animation: evFade 0.35s ease;
}

#eventsWorkspace .ev-dow {
  background: var(--bs-secondary-bg);
  padding: 0.55rem 0.4rem;
  text-align: center;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--bs-secondary-color);
}

#eventsWorkspace .ev-cell {
  background: var(--bs-body-bg);
  min-height: 104px;
  padding: 0.4rem 0.45rem;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  transition: background 0.16s ease;
}

#eventsWorkspace .ev-cell:hover {
  background: var(--bs-secondary-bg);
}

#eventsWorkspace .ev-cell.is-out {
  background: var(--bs-secondary-bg);
}

#eventsWorkspace .ev-cell.is-today .ev-daynum {
  background: var(--bs-primary);
  color: #fff;
}

#eventsWorkspace .ev-daynum {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#eventsWorkspace .ev-chip {
  display: flex;
  align-items: center;
  gap: 0.3rem;
  border: 0;
  width: 100%;
  text-align: left;
  cursor: pointer;
  padding: 0.2rem 0.4rem;
  border-radius: 6px;
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-primary);
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  transition: background 0.16s ease, transform 0.16s ease;
}

#eventsWorkspace .ev-chip::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--bs-primary);
  flex: 0 0 auto;
}

#eventsWorkspace .ev-chip:hover {
  background: color-mix(in srgb, var(--bs-primary) 22%, transparent);
  transform: translateX(2px);
}

#eventsWorkspace .ev-chip .ev-chip-txt {
  overflow: hidden;
  text-overflow: ellipsis;
}

#eventsWorkspace .ev-more {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
  background: none;
  border: 0;
  padding: 0 0.4rem;
  text-align: left;
  cursor: pointer;
}

#eventsWorkspace .ev-more:hover {
  color: var(--bs-primary);
}

@keyframes evFade {
  from {
    opacity: 0.4;
  }

  to {
    opacity: 1;
  }
}

/* ---------- Event card (feed / grid) ---------- */

#eventsWorkspace .ev-feed {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

#eventsWorkspace .ev-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 1rem;
  align-items: start;
}

#eventsWorkspace.is-grid .ev-feed {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 1rem;
  align-items: start;
}

#eventsWorkspace .ev-card {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  cursor: pointer;
  transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
}

#eventsWorkspace .ev-card:hover {
  border-color: color-mix(in srgb, var(--bs-primary) 35%, var(--bs-border-color));
  box-shadow: 0 16px 38px -20px rgba(27, 36, 54, 0.3);
  transform: translateY(-3px);
}

#eventsWorkspace .ev-card:focus-visible {
  outline: 2px solid var(--bs-primary);
  outline-offset: 2px;
}

#eventsWorkspace .ev-banner {
  position: relative;
  height: 96px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #fff;
  font-size: 34px;
  background: linear-gradient(135deg, var(--bs-primary), color-mix(in srgb, var(--bs-primary) 55%, #000));
  border-radius: 14px 14px 0 0 !important;
}

#eventsWorkspace .ev-banner-badge {
  position: absolute;
  top: 0.6rem;
  left: 0.6rem;
  font-size: 11px;
  font-weight: 600;
  padding: 0.2rem 0.6rem;
  border-radius: 30px;
  background: rgba(255, 255, 255, 0.9);
  color: var(--bs-primary);
}

#eventsWorkspace .ev-banner-date {
  position: absolute;
  top: 0.6rem;
  right: 0.6rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  background: rgba(255, 255, 255, 0.95);
  color: var(--bs-emphasis-color);
  border-radius: 9px;
  padding: 0.2rem 0.5rem;
  line-height: 1.05;
}

#eventsWorkspace .ev-banner-date b {
  font-size: 15px;
}

#eventsWorkspace .ev-banner-date span {
  font-size: 9.5px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
}

#eventsWorkspace .ev-card-body {
  padding: 0.9rem 1rem 1rem;
  display: flex;
  flex-direction: column;
  flex: 1;
}

#eventsWorkspace .ev-card-title {
  font-size: 14.5px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.35;
  margin: 0 0 0.5rem;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

#eventsWorkspace .ev-meta {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 0.7rem;
}

#eventsWorkspace .ev-meta-i {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
}

#eventsWorkspace .ev-meta-i i {
  font-size: 14px;
  color: var(--bs-primary);
}

#eventsWorkspace .ev-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-top: auto;
  padding-top: 0.7rem;
  border-top: 1px solid var(--bs-border-color);
}

#eventsWorkspace .ev-parts {
  display: inline-flex;
  align-items: center;
}

#eventsWorkspace .ev-parts .avatar {
  margin-left: -8px;
  border: 2px solid var(--bs-body-bg);
  border-radius: 50%;
}

#eventsWorkspace .ev-parts .avatar:first-child {
  margin-left: 0;
}

#eventsWorkspace .ev-parts-more {
  width: 26px;
  height: 26px;
  margin-left: -8px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  background: var(--bs-secondary-bg);
  border: 2px solid var(--bs-body-bg);
}

#eventsWorkspace .ev-actions {
  display: inline-flex;
  gap: 0.25rem;
}

#eventsWorkspace .ev-card:has(.dropdown-menu.show) {
  position: relative;
  z-index: 5;
}

#eventsWorkspace .ev-actions .dropdown-menu {
  z-index: 1050;
}

/* ---------- Timeline view ---------- */

#eventsWorkspace .ev-tl {
  list-style: none;
  margin: 0;
  padding: 0;
  position: relative;
}

#eventsWorkspace .ev-tl::before {
  content: "";
  position: absolute;
  left: 15px;
  top: 4px;
  bottom: 4px;
  width: 2px;
  background: var(--bs-border-color);
}

#eventsWorkspace .ev-tl-item {
  position: relative;
  padding: 0 0 1.1rem 3rem;
}

#eventsWorkspace .ev-tl-dot {
  position: absolute;
  left: 6px;
  top: 2px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--bs-primary);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--bs-primary) 18%, transparent);
}

#eventsWorkspace .ev-tl-card {
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  padding: 0.75rem 0.9rem;
  background: var(--bs-body-bg);
  cursor: pointer;
  transition: border-color 0.16s ease, box-shadow 0.16s ease;
}

#eventsWorkspace .ev-tl-card:hover {
  border-color: color-mix(in srgb, var(--bs-primary) 35%, var(--bs-border-color));
  box-shadow: 0 10px 24px -14px rgba(27, 36, 54, 0.25);
}

/* ---------- Progress timeline (offcanvas) ---------- */

#eventsWorkspace .ev-steps {
  list-style: none;
  margin: 0;
  padding: 0;
}

#eventsWorkspace .ev-step {
  position: relative;
  display: flex;
  gap: 0.8rem;
  padding-bottom: 1.05rem;
}

#eventsWorkspace .ev-step:last-child {
  padding-bottom: 0;
}

#eventsWorkspace .ev-step-ic {
  width: 32px;
  height: 32px;
  flex: 0 0 auto;
  z-index: 1;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  border: 2px solid var(--bs-body-bg);
  box-shadow: 0 0 0 1px var(--bs-border-color);
}

#eventsWorkspace .ev-step:not(:last-child) .ev-step-ic::after {
  content: "";
  position: absolute;
  left: 15px;
  top: 32px;
  bottom: 0;
  width: 2px;
  background: var(--bs-border-color);
}

#eventsWorkspace .ev-step.is-done .ev-step-ic {
  background: var(--bs-success);
  color: #fff;
  box-shadow: 0 0 0 1px var(--bs-success);
}

#eventsWorkspace .ev-step.is-current .ev-step-ic {
  background: var(--bs-primary);
  color: #fff;
  box-shadow: 0 0 0 1px var(--bs-primary);
  animation: evPulse 1.8s ease-in-out infinite;
}

#eventsWorkspace .ev-step.is-muted {
  opacity: 0.55;
}

#eventsWorkspace .ev-step-title {
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#eventsWorkspace .ev-step-meta {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

@keyframes evPulse {

  0%,
  100% {
    box-shadow: 0 0 0 1px var(--bs-primary);
  }

  50% {
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--bs-primary) 30%, transparent);
  }
}

/* ---------- Attachments ---------- */

#eventsWorkspace .ev-file {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  padding: 0.65rem 0.75rem;
  background: var(--bs-body-bg);
  transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;
}

#eventsWorkspace .ev-file:hover {
  border-color: color-mix(in srgb, var(--bs-primary) 30%, var(--bs-border-color));
  box-shadow: 0 8px 18px rgba(27, 36, 54, 0.07);
  transform: translateY(-1px);
}

#eventsWorkspace .ev-file-ic {
  width: 40px;
  height: 40px;
  flex: 0 0 auto;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  background: color-mix(in srgb, var(--bs-danger) 12%, transparent);
  color: var(--bs-danger);
}

#eventsWorkspace .ev-file-ic.is-img {
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  color: var(--bs-primary);
}

#eventsWorkspace .ev-file-ic.is-doc {
  background: color-mix(in srgb, var(--bs-info) 12%, transparent);
  color: var(--bs-info);
}

#eventsWorkspace .ev-file-name {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

#eventsWorkspace .ev-file-meta {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

/* ---------- Skeleton ---------- */

#eventsWorkspace .skeleton-loader {
  display: none;
}

#eventsWorkspace.is-loading .skeleton-loader {
  display: block;
}

#eventsWorkspace.is-loading .ev-live {
  display: none;
}

/* shared primitive from components/_ui-skeleton.scss, workspace tone */

#eventsWorkspace .skeleton {
  border-radius: 8px;
  background: var(--bs-secondary-bg);
}

#eventsWorkspace .skeleton::after {
  background: linear-gradient(90deg, transparent, color-mix(in srgb, #fff 65%, transparent), transparent);
}

#eventsWorkspace .skeleton-line {
  height: 12px;
  margin-bottom: 0.6rem;
}

#eventsWorkspace .skeleton-line.w-40 {
  width: 40%;
}

#eventsWorkspace .skeleton-line.w-70 {
  width: 70%;
}

#eventsWorkspace .skeleton-cal {
  height: 320px;
}

#eventsWorkspace .skeleton-card {
  height: 150px;
}

/* ---------- Empty state ---------- */

#eventsWorkspace .ev-empty {
  display: none;
  text-align: center;
  padding: 3.5rem 1rem;
}

#eventsWorkspace.is-empty .ev-empty {
  display: block;
}

#eventsWorkspace.is-empty .ev-live-body {
  display: none;
}

#eventsWorkspace .ev-empty-ic {
  width: 78px;
  height: 78px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 34px;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
}

/* ---------- Fullscreen ---------- */

#eventsWorkspace.ev-fullscreen {
  position: fixed;
  inset: 0;
  z-index: 1045;
  background: var(--bs-secondary-bg);
  padding: 1rem 1.25rem;
  overflow: auto;
}

/* ---------- Responsive: calendar collapses to agenda ---------- */

@media (max-width: 767.98px) {
  #eventsWorkspace .ev-cal {
    grid-template-columns: 1fr;
  }

  #eventsWorkspace .ev-dow {
    display: none;
  }

  #eventsWorkspace .ev-cell {
    min-height: auto;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
  }

  #eventsWorkspace .ev-cell.is-empty,
  #eventsWorkspace .ev-cell.is-out:not(:has(.ev-chip)) {
    display: none;
  }

  #eventsWorkspace .ev-cell .ev-daynum {
    margin-right: 0.5rem;
  }

  #eventsWorkspace .ev-chip {
    width: auto;
  }
}

/* ---------- Event detail offcanvas ---------- */
#ev_detail {
  --bs-offcanvas-width: 480px;
}

#ev_detail .ev-oc-banner {
  height: 130px;
  border-radius: 12px;
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: flex-end;
  padding: 0.9rem 1rem;
  color: #fff;
  background: linear-gradient(135deg, var(--bs-primary), color-mix(in srgb, var(--bs-primary) 55%, #000));
}

#ev_detail .ev-oc-cat {
  position: absolute;
  top: 0.7rem;
  left: 0.7rem;
  font-size: 11px;
  font-weight: 600;
  padding: 0.2rem 0.6rem;
  border-radius: 30px;
  background: rgba(255, 255, 255, 0.9);
  color: var(--bs-primary);
}

#ev_detail .ev-info-item .ev-info-label {
  display: block;
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-bottom: 0.1rem;
}

#ev_detail .ev-info-item .ev-info-val {
  font-size: 13px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
}

#ev_detail .ev-file {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  padding: 0.65rem 0.75rem;
}

#ev_detail .ev-file-ic {
  width: 40px;
  height: 40px;
  flex: 0 0 auto;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  background: color-mix(in srgb, var(--bs-danger) 12%, transparent);
  color: var(--bs-danger);
}

#ev_detail .ev-file-ic.is-img {
  background: color-mix(in srgb, var(--bs-primary) 12%, transparent);
  color: var(--bs-primary);
}

#ev_detail .ev-file-name {
  font-size: 12.5px;
  font-weight: 600;
}

#ev_detail .ev-file-meta {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

#ev_detail .ev-step {
  position: relative;
  display: flex;
  gap: 0.8rem;
  padding-bottom: 1.05rem;
}

#ev_detail .ev-step:last-child {
  padding-bottom: 0;
}

#ev_detail .ev-step-ic {
  width: 32px;
  height: 32px;
  flex: 0 0 auto;
  z-index: 1;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  background: #f2f4f9;
  color: var(--bs-secondary-color);
  border: 2px solid #fff;
  box-shadow: 0 0 0 1px var(--bs-border-color);
}

#ev_detail .ev-step:not(:last-child) .ev-step-ic::after {
  content: "";
  position: absolute;
  left: 15px;
  top: 32px;
  bottom: 0;
  width: 2px;
  background: var(--bs-border-color);
}

#ev_detail .ev-step.is-done .ev-step-ic {
  background: var(--bs-success);
  color: #fff;
}

#ev_detail .ev-step.is-current .ev-step-ic {
  background: var(--bs-primary);
  color: #fff;
}

#ev_detail .ev-step.is-muted {
  opacity: 0.55;
}

#ev_detail .ev-step-title {
  font-size: 13px;
  font-weight: 600;
}

#ev_detail .ev-step-meta {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ---------- Dark mode ---------- */
[data-theme=dark] #eventsWorkspace .skeleton::after,
[data-layout-mode=dark] #eventsWorkspace .skeleton::after {
  background: linear-gradient(90deg, transparent, color-mix(in srgb, #fff 12%, transparent), transparent);
}

/******* Pages ******/
.filter-wrapper {
  border-top: 1px solid #E9EDF4;
  padding-top: 20px;
}

.table-filter-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  margin-bottom: 10px;
}

.table-filter-head .filter-head-left {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}

@media (max-width: 575.98px) {
  .table-filter-head .filter-head-left {
    width: 100%;
  }
}

.table-filter-head .filter-head-left h5 {
  font-size: 15px;
  font-weight: 500;
  margin: 0 24px 10px 0;
}

.list-tab {
  margin-bottom: 10px;
}

.list-tab ul {
  border-bottom: 1px solid #E9EDF4;
}

.list-tab ul li {
  display: inline-block;
  margin-right: 24px;
  margin: 0 24px 0 0;
}

.list-tab ul li a {
  color: #515B73;
  display: inline-block;
  padding: 5px 0;
  position: relative;
}

.list-tab ul li a span {
  background: #FFF;
  border-radius: 5px;
  margin: 0 0 0 8px;
  padding: 5px;
  display: inline-block;
  font-size: 12px;
  color: #202C4B;
}

.list-tab ul li a::before {
  position: absolute;
  bottom: 0;
  left: 0;
  content: "";
  background: transparent;
  width: 100%;
  height: 3px;
}

.list-tab ul li a:hover {
  color: #1f3b60;
}

.list-tab ul li a.active {
  color: #1f3b60;
}

.list-tab ul li a.active::before {
  background: #1f3b60;
}

.load-more .btn {
  display: -webkit-inline-box;
  display: -ms-inline-flexbox;
  display: inline-flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
}

.load-more .btn i {
  margin-right: 5px;
}

.profile-uploader .btn {
  font-size: 12px;
  margin: 0 0 10px 0;
  padding: 6px 20px;
}

.profile-wrap {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
}

@media (max-width: 575.98px) {
  .profile-wrap {
    display: block;
  }
}

.profile-wrap .frames {
  width: 100px;
  height: 100px;
  border-radius: 5px;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  margin-right: 15px;
  color: #838A9B;
  font-size: 24px;
  border: 1px dashed #E9EDF4;
}

.profile-wrap .frames img {
  border-radius: 5px;
  width: 80px;
  height: 80px;
}

@media (max-width: 575.98px) {
  .profile-wrap .frames {
    margin: 0 0 10px 0;
  }
}

.profile-wrap .profile-upload p {
  font-size: 12px;
}

.profile-uploader .btn {
  font-size: 12px;
  margin: 0 0 10px 0;
  padding: 6px 20px;
}

.drag-upload-btn {
  font-size: 12px;
  font-weight: 600;
  background: #FFF;
  border: 1px dashed #E9EDF4;
  border-radius: 5px;
  margin: 0 12px 10px 0;
  padding: 6px 16px;
  position: relative;
  transition: all 0.5s;
}

.drag-upload-btn input {
  opacity: 0;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  cursor: pointer;
}

.drag-upload-btn:hover {
  background: #1f3b60;
  border-color: #1f3b60;
  color: #FFF;
  transition: all 0.5s;
}

.trash-icon {
  font-size: 15px;
  color: #E82646;
}

.trash-icon:hover {
  color: rgb(198.0125, 20.9875, 50.1875);
}

.drop-width {
  min-width: 350px;
  max-width: 100%;
}

@media (max-width: 575.98px) {
  .drop-width {
    min-width: 260px;
  }
}

/* Tickets page — Filter dropdown gets clipped/overlapped by the ticket
   list card below it; elevate its stacking context only while open. */
.tk-filter-drop {
  position: relative;
}

.tk-filter-drop:has(.dropdown-menu.show) {
  z-index: 1055;
}

.tk-filter-drop .dropdown-menu {
  z-index: 1060;
}

/*-----------------
    Student profile

    Merged from the former pages/_student-profile.scss — the student module
    keeps one stylesheet, and every reusable block it used (accents, skeleton,
    avatars, badges) now comes from the global component library.
-----------------*/
/* ============================================================
   STUDENT PROFILE page — migrated from app-new.css
   ============================================================ */
/* ===== student-profile.css ===== */
/* ============================================================
   Student 360° Profile — premium enterprise workspace
   Scoped under .student-profile so it never affects sidebar/header/
   layout or the global palette. Inherits Bootstrap --bs-*
   tokens and only adds neutral premium surfaces on top.
   ============================================================ */
/* Match card border / radius / shadow to index2.html (shell-catalyst).
   Scoped to .student-profile so it cannot bleed onto other pages in the merged bundle. */
.student-profile .card {
  border: 1px solid #e8eaed;
  border-radius: 16px;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 8px 24px rgba(15, 23, 42, 0.06);
}

[data-theme=dark] .student-profile .card,
[data-bs-theme=dark] .student-profile .card {
  border-color: rgba(255, 255, 255, 0.08);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}

.student-profile {
  --avatar-accent: var(--bs-primary);
  --avatar-accent-soft: var(--tint-primary);
}

@media (prefers-reduced-motion: reduce) {
  .student-profile * {
    animation: none !important;
    transition: none !important;
  }
}

/* colour accents */
/* ============================================================
   ACTION BUTTONS (page header)
   ============================================================ */
.profile-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.profile-button {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 38px;
  padding: 0 13px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  color: var(--bs-body-color, #1f2937);
  font-size: 13px;
  font-weight: 500;
  line-height: 1;
  cursor: pointer;
  transition: all var(--transition);
  white-space: nowrap;
  text-decoration: none;
}

.profile-button i {
  font-size: 16px;
}

.profile-button:hover {
  background: var(--bs-tertiary-bg);
  border-color: var(--bs-primary);
  color: var(--bs-primary);
  transform: translateY(-1px);
  box-shadow: var(--shadow);
}

.profile-button.profile-icon-button {
  padding: 0;
  width: 38px;
  justify-content: center;
}

.profile-button-primary {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.profile-button-primary:hover {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
  filter: brightness(1.06);
}

.profile-back {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 38px;
  height: 38px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  color: var(--bs-body-color, #1f2937);
  text-decoration: none;
  transition: all var(--transition);
}

.profile-back i {
  font-size: 18px;
}

.profile-back:hover {
  background: var(--bs-tertiary-bg);
  border-color: var(--bs-primary);
  color: var(--bs-primary);
  transform: translateX(-2px);
  box-shadow: var(--shadow);
}

.student-profile .dropdown-menu {
  min-width: 214px;
  border-radius: 12px;
}

.student-profile .dropdown-head {
  padding: 6px 10px 4px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
}

.student-profile .dropdown-item {
  display: flex;
  align-items: center;
  font-size: 13px;
  padding: 7px 10px;
}

.student-profile .dropdown-item i {
  font-size: 16px;
  color: var(--bs-secondary-color);
}

.student-profile .dropdown-item:hover i,
.student-profile .dropdown-item:focus i {
  color: var(--bs-primary);
}

/* ============================================================
   HERO
   ============================================================ */
.profile-hero {
  position: relative;
  overflow: hidden;
  padding: 24px;
  /* soft brand-tinted background */
  background: radial-gradient(130% 120% at 100% 0%, var(--tint-primary), transparent 55%), linear-gradient(135deg, var(--tint-primary) 0%, rgba(255, 255, 255, 0.4) 45%, var(--bs-secondary-bg) 100%);
}

/* white pattern overlay (dots + diagonal weave) */
.profile-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: radial-gradient(rgba(255, 255, 255, 0.9) 1.6px, transparent 1.7px), repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.5) 0 1px, transparent 1px 16px), repeating-linear-gradient(-45deg, rgba(255, 255, 255, 0.35) 0 1px, transparent 1px 16px);
  background-size: 20px 20px, auto, auto;
  background-position: 0 0;
  opacity: 0.7;
  pointer-events: none;
  -webkit-mask-image: linear-gradient(115deg, #000 0%, rgba(0, 0, 0, 0.35) 55%, transparent 90%);
  mask-image: linear-gradient(115deg, #000 0%, rgba(0, 0, 0, 0.35) 55%, transparent 90%);
}

/* soft white glow blobs for depth */
.profile-hero::after {
  content: "";
  position: absolute;
  top: -60px;
  right: -40px;
  width: 220px;
  height: 220px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255, 255, 255, 0.75), transparent 70%);
  pointer-events: none;
}

[data-bs-theme=dark] .profile-hero {
  background: radial-gradient(130% 120% at 100% 0%, rgba(31, 59, 96, 0.22), transparent 55%), linear-gradient(135deg, rgba(31, 59, 96, 0.16) 0%, var(--bs-body-bg) 55%);
}

[data-bs-theme=dark] .profile-hero::before {
  background-image: radial-gradient(rgba(255, 255, 255, 0.14) 1.4px, transparent 1.5px), repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.08) 0 1px, transparent 1px 16px), repeating-linear-gradient(-45deg, rgba(255, 255, 255, 0.06) 0 1px, transparent 1px 16px);
  background-size: 20px 20px, auto, auto;
  opacity: 1;
}

[data-bs-theme=dark] .profile-hero::after {
  background: radial-gradient(circle, rgba(255, 255, 255, 0.06), transparent 70%);
}

.hero-grid {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 22px;
  align-items: center;
}

@media (max-width: 1199.98px) {
  .hero-grid {
    grid-template-columns: 1fr;
    gap: 40px;
  }
}

.hero-photo {
  position: relative;
  width: 118px;
  height: 118px;
  border-radius: 20px;
  padding: 4px;
  background: var(--bs-body-bg);
  box-shadow: var(--shadow-lift);
}

.hero-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 16px;
}

.hero-photo .presence {
  position: absolute;
  right: 4px;
  bottom: 4px;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 3px solid var(--bs-body-bg);
  background: #16a34a;
}

.hero-id {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}

.hero-name {
  font-size: 24px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
  margin: 0;
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

@media (max-width: 575.98px) {
  .hero-name {
    justify-content: center;
  }
}

.hero-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 16px;
  margin-top: 6px;
}

.hero-meta>span {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 12.5px;
  color: var(--bs-secondary-color);
}

.hero-meta i {
  font-size: 15px;
  opacity: 0.8;
}

.hero-meta b {
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

.badges {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 10px;
}

.profile-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11.5px;
  font-weight: 600;
  padding: 4px 10px;
  border-radius: 999px;
  background: var(--accent-soft);
  color: var(--accent);
}

.profile-badge i {
  font-size: 13px;
}

.profile-badge .profile-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
}

.hero-right {
  display: flex;
  align-items: center;
  gap: 22px;
}

/* score rings */
.ring-group {
  display: flex;
  gap: 16px;
}

.profile-ring {
  text-align: center;
}

.ring-track {
  width: 74px;
  height: 74px;
  border-radius: 50%;
  background: conic-gradient(var(--accent) calc(var(--val, 0) * 1%), var(--bs-secondary-bg) 0);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 1s ease;
}

.profile-ring-hole {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: var(--bs-body-bg);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  box-shadow: inset 0 0 0 1px var(--bs-border-color);
}

.ring-lbl {
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-top: 6px;
  display: block;
}

/* QR + quick contact */
.hero-side {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 10px;
}

.qr-code {
  width: 76px;
  height: 76px;
  border-radius: 12px;
  border: 1px solid var(--bs-border-color);
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--bs-body-bg);
}

.qr-code i {
  font-size: 60px;
  color: var(--bs-emphasis-color);
}

.contact-list {
  display: flex;
  gap: 6px;
}

.profile-contact {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all var(--transition);
  text-decoration: none;
}

.profile-contact i {
  font-size: 16px;
}

.profile-contact:hover {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
}

.profile-contact.c-green:hover {
  background: #16a34a;
  border-color: #16a34a;
}

.profile-contact.c-amber:hover {
  background: #d97706;
  border-color: #d97706;
}

.profile-contact.c-whatsapp {
  color: #25d366;
}

.profile-contact.c-whatsapp:hover {
  background: #25d366;
  border-color: #25d366;
  color: #fff;
}

/* profile completion bar in hero */
.complete {
  margin-top: 14px;
}

.complete-top {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  margin-bottom: 5px;
}

.complete-top b {
  color: var(--bs-emphasis-color);
}

.profile-bar {
  height: 8px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
}

.profile-bar>span {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--accent);
  width: 0;
  transition: width 1.1s cubic-bezier(0.4, 0, 0.2, 1);
}

/* ============================================================
   EXECUTIVE OVERVIEW GRID
   ============================================================ */
.profile-overview-grid {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 12px;
}

@media (max-width: 575.98px) {
  .profile-overview-grid {
    grid-template-columns: repeat(1, 1fr) !important;
  }
}

.profile-overview {
  position: relative;
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: center;
  column-gap: 12px;
  padding: 12px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
  overflow: hidden;
}

/* corner accent glow */
.profile-overview::before {
  content: "";
  position: absolute;
  top: -34px;
  right: -34px;
  width: 96px;
  height: 96px;
  border-radius: 50%;
  background: var(--accent-soft);
  opacity: 0.55;
  transition: transform var(--transition), opacity var(--transition);
}

/* animated bottom accent bar */
.profile-overview::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--accent), transparent);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.4s var(--transition);
}

.profile-overview:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-lift);
  border-color: transparent;
}

.profile-overview:hover::before {
  transform: scale(1.3);
  opacity: 0.75;
}

.profile-overview:hover::after {
  transform: scaleX(1);
}

.profile-overview:hover>.avatar {
  transform: translateY(-2px) rotate(-5deg);
}

.overview-head {
  display: contents;
}

.profile-overview>.avatar {
  grid-column: 1;
  grid-row: 1/span 3;
  align-self: center;
  box-shadow: 0 8px 16px -8px var(--accent-soft), inset 0 1px 0 rgba(255, 255, 255, 0.35);
  transition: transform var(--transition);
}

.overview-lbl {
  grid-column: 2;
  grid-row: 1;
  position: relative;
  z-index: 1;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
}

.overview-val {
  grid-column: 2;
  grid-row: 2;
  position: relative;
  z-index: 1;
  font-size: 20px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
  letter-spacing: -0.01em;
}

.overview-sub {
  grid-column: 2;
  grid-row: 3;
  position: relative;
  z-index: 1;
  font-size: 10px;
  font-weight: 600;
  margin-top: 4px;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  width: fit-content;
  padding: 2px 7px;
  border-radius: 999px;
  color: var(--bs-secondary-color);
  background: var(--bs-secondary-bg);
}

.overview-sub i {
  font-size: 12px;
}

.document-upload {
  color: #15803d;
  background: rgba(22, 163, 74, 0.12);
}

.profile-down {
  color: #b91c1c;
  background: rgba(220, 38, 38, 0.12);
}

/* ============================================================
   INFO CARDS / DL rows
   ============================================================ */
.profile-card-title {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 15px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  margin: 0;
}

.profile-card-title .tab-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  color: #fff;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.28), rgba(255, 255, 255, 0)), var(--accent);
  box-shadow: 0 8px 16px -6px var(--accent-soft), inset 0 1px 0 rgba(255, 255, 255, 0.3);
}

/* Two-column info tiles (Personal Information) */
.definition-list {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}

.definition-list>div {
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 10px 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: 11px;
  background: var(--bs-secondary-bg);
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition), background var(--transition);
}

.definition-list>div:hover {
  transform: translateY(-2px);
  border-color: var(--bs-primary);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
}

.definition-list .meta-key {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 600;
}

.definition-list .value {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  word-break: break-word;
}

/* Single-column key/value rows (Transport,
Hostel,
Medical) */
.definition-list.one-col {
  grid-template-columns: 1fr;
  gap: 0;
}

.definition-list.one-col>div {
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 11px 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  transform: none;
  box-shadow: none;
  transition: none;
}

.definition-list.one-col>div:not(:last-child) {
  border-bottom: 1px solid var(--bs-border-color);
}

.definition-list.one-col>div:first-child {
  padding-top: 0;
}

.definition-list.one-col>div:last-child {
  padding-bottom: 0;
}

.definition-list.one-col .meta-key {
  font-size: 12px;
  text-transform: none;
  letter-spacing: 0;
  font-weight: 500;
}

.definition-list.one-col .value {
  text-align: right;
}

.profile-chip-set {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.profile-chip {
  font-size: 12px;
  font-weight: 500;
  padding: 5px 11px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  color: var(--bs-emphasis-color);
  border: 1px solid var(--bs-border-color);
  transition: all var(--transition);
}

.profile-chip:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.profile-chip.solid {
  background: var(--tint-primary);
  color: var(--bs-primary);
  border-color: transparent;
}

/* person row (parent/guardian) */
.profile-person {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 0;
  border-bottom: 1px solid var(--bs-border-color);
}

@media (max-width: 575.98px) {
  .profile-person {
    flex-direction: column;
    align-items: flex-start;
    gap: 12px;
  }
}

.profile-person:first-child {
  padding-top: 0;
}

.profile-person:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.profile-person img {
  width: 46px;
  height: 46px;
  border-radius: 12px;
  object-fit: cover;
  box-shadow: 0 0 0 3px var(--bs-secondary-bg);
}

.profile-person>.profile-contact {
  background: linear-gradient(135deg, var(--bs-primary), rgba(31, 59, 96, 0.55));
  color: #fff;
  border-color: transparent;
  box-shadow: 0 6px 14px -6px var(--tint-primary);
}

.profile-person .profile-person-name {
  font-weight: 600;
  font-size: 14px;
  color: var(--bs-emphasis-color);
}

.profile-person .person-role {
  font-size: 12px;
  color: var(--bs-secondary-color);
  line-height: 1.55;
}

.profile-person .person-actions {
  margin-left: auto;
  display: flex;
  gap: 6px;
}

@media (max-width: 575.98px) {
  .profile-person .person-actions {
    margin-left: unset;
  }
}

/* ============================================================
   TABS
   ============================================================ */
.tab-list {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  padding: 5px;
  margin: 0;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-secondary-bg);
}

.profile-tab {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
  flex: 0 0 auto;
  padding: 8px 14px;
  border-radius: 999px;
  border: 0;
  background: transparent;
  color: var(--bs-secondary-color);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: all var(--transition);
}

.profile-tab i {
  font-size: 16px;
}

.profile-tab:hover {
  color: var(--bs-primary);
}

.profile-tab.active {
  background: var(--bs-body-bg);
  color: var(--bs-primary);
  box-shadow: var(--shadow);
}

.tab-pane-block {
  display: none;
  animation: sp-fade 0.35s ease;
}

.tab-pane-block.active {
  display: block;
}

/* mini section heading inside panes */
.block-heading {
  font-size: 13px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  margin: 0 0 12px;
  display: flex;
  align-items: center;
  gap: 6px;
}

.block-heading i {
  color: var(--bs-primary);
  font-size: 16px;
}

.profile-tile {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  padding: 14px;
  background: var(--bs-body-bg);
  transition: all var(--transition);
}

.profile-tile:hover {
  box-shadow: var(--shadow);
}

/* stat mini */
.profile-mini {
  text-align: center;
  padding: 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
}

.profile-mini .v {
  font-size: 20px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.profile-mini .l {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-top: 2px;
}

/* ============================================================
   CHARTS (pure CSS/SVG)
   ============================================================ */
/* vertical bars */
.bar-group {
  display: flex;
  align-items: flex-end;
  gap: 8px;
  height: 150px;
  padding-top: 6px;
}

.bar-group .b {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  height: 100%;
  justify-content: flex-end;
}

.bar-group .b .col {
  width: 70%;
  max-width: 26px;
  border-radius: 6px 6px 0 0;
  background: linear-gradient(180deg, var(--bs-primary), var(--tint-primary));
  height: 0;
  transition: height 1s cubic-bezier(0.4, 0, 0.2, 1);
}

.bar-group .b.alt .col {
  background: linear-gradient(180deg, #16a34a, rgba(22, 163, 74, 0.15));
}

.bar-group .b .cap {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.bar-group .b .val {
  font-size: 10.5px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

/* horizontal subject bars */
.histogram-bar {
  margin-bottom: 12px;
}

.histogram-bar-top {
  display: flex;
  justify-content: space-between;
  font-size: 12.5px;
  margin-bottom: 5px;
}

.histogram-bar-top b {
  color: var(--bs-emphasis-color);
}

.histogram-bar-track {
  height: 8px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
}

.histogram-bar-fill {
  height: 100%;
  border-radius: 999px;
  width: 0;
  transition: width 1s cubic-bezier(0.4, 0, 0.2, 1);
  background: var(--accent);
}

/* heatmap */
.heatmap-block {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 5px;
}

.heatmap-block .d {
  aspect-ratio: 1;
  border-radius: 5px;
  background: var(--bs-secondary-bg);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  color: transparent;
}

.heatmap-block .d.l1 {
  background: rgba(22, 163, 74, 0.25);
}

.heatmap-block .d.l2 {
  background: rgba(22, 163, 74, 0.5);
}

.heatmap-block .d.l3 {
  background: rgba(22, 163, 74, 0.75);
}

.heatmap-block .d.l4 {
  background: #16a34a;
}

.heatmap-block .d.absent {
  background: rgba(220, 38, 38, 0.7);
}

.heatmap-block .d.late {
  background: rgba(217, 119, 6, 0.75);
}

.heatmap-block-legend {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-top: 10px;
}

.heatmap-block-legend .k {
  width: 12px;
  height: 12px;
  border-radius: 3px;
}

/* donut (svg) */
.profile-donut {
  display: flex;
  align-items: center;
  gap: 16px;
}

.profile-donut svg {
  width: 130px;
  height: 130px;
  transform: rotate(-90deg);
}

.profile-donut circle {
  fill: none;
  stroke-width: 14;
}

.profile-donut .track {
  stroke: var(--bs-secondary-bg);
}

.donut-legend {
  display: flex;
  flex-direction: column;
  gap: 8px;
  font-size: 12.5px;
}

.donut-legend>div {
  display: flex;
  align-items: center;
  gap: 8px;
}

.donut-legend .k {
  width: 12px;
  height: 12px;
  border-radius: 3px;
}

.donut-legend b {
  margin-left: auto;
  color: var(--bs-emphasis-color);
}

/* trend line (svg) */
.profile-trend svg {
  width: 100%;
  height: 120px;
}

.profile-trend .line {
  fill: none;
  stroke: var(--bs-primary);
  stroke-width: 2.5;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-dasharray: 600;
  stroke-dashoffset: 600;
  animation: sp-draw 1.4s ease forwards;
}

.profile-trend .area {
  fill: var(--tint-primary);
  opacity: 0.7;
}

.profile-trend .dot {
  fill: var(--bs-primary);
}

/* ranking badge */
.profile-rank {
  display: flex;
  align-items: center;
  gap: 14px;
}

.rank-num {
  font-size: 34px;
  font-weight: 800;
  color: var(--bs-primary);
  line-height: 1;
}

.rank-num small {
  font-size: 15px;
}

/* ============================================================
   TIMELINE
   ============================================================ */
.profile-timeline {
  position: relative;
  padding-left: 30px;
}

.profile-timeline::before {
  content: "";
  position: absolute;
  left: 11px;
  top: 4px;
  bottom: 4px;
  width: 2px;
  background: var(--bs-border-color);
}

.profile-timeline {
  position: relative;
  padding-bottom: 20px;
}

.profile-timeline:last-child {
  padding-bottom: 0;
}

.profile-timeline>.avatar {
  position: absolute;
  left: -30px;
  top: 0;
  box-shadow: 0 0 0 4px var(--bs-body-bg);
}

.profile-timeline-time {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.timeline-title {
  font-weight: 600;
  color: var(--bs-emphasis-color);
  font-size: 13.5px;
  margin: 2px 0;
}

.timeline-desc {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
}

/* ============================================================
   DOCUMENTS / LISTS
   ============================================================ */
.profile-document-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  transition: all var(--transition);
  background: var(--bs-body-bg);
}

.profile-document-row:hover {
  border-color: var(--bs-primary);
  box-shadow: var(--shadow);
  transform: translateY(-1px);
}

.profile-document-row .document-row-ic {
  width: 40px;
  height: 40px;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  background: var(--accent-soft);
  color: var(--accent);
}

.profile-document-row .document-row-name {
  font-weight: 600;
  color: var(--bs-emphasis-color);
  font-size: 13px;
}

.profile-document-row .document-row-meta {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* achievement */
.achievement {
  text-align: center;
  padding: 16px 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  transition: all var(--transition);
}

.achievement:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
}

.achievement-medal {
  width: 52px;
  height: 52px;
  margin: 0 auto 8px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 26px;
  background: var(--accent-soft);
  color: var(--accent);
}

.achievement-title {
  font-weight: 600;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.achievement-sub {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

/* quick actions grid */
.profile-quick-action-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
}

.profile-quick-action {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  padding: 14px 6px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  cursor: pointer;
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  font-size: 11px;
  font-weight: 600;
  text-align: center;
  transition: all var(--transition);
  text-decoration: none;
}

.profile-quick-action i {
  font-size: 20px;
  color: var(--accent);
  transition: transform var(--transition);
}

.profile-quick-action:hover {
  border-color: var(--bs-primary);
  background: var(--bs-tertiary-bg);
  color: var(--bs-emphasis-color);
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.profile-quick-action:hover i {
  transform: scale(1.15);
}

/* AI insights widget */
.profile-insight {
  position: relative;
  border-radius: 16px;
  overflow: hidden;
  background: linear-gradient(135deg, rgba(123, 97, 255, 0.16), rgba(31, 59, 96, 0.08) 60%, transparent);
  border: 1px solid rgba(123, 97, 255, 0.22);
  padding: 18px;
}

.profile-insight::before {
  content: "";
  position: absolute;
  top: -50px;
  right: -50px;
  width: 150px;
  height: 150px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(123, 97, 255, 0.28), transparent 70%);
  pointer-events: none;
}

.insight-head {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 14px;
  padding-bottom: 14px;
  border-bottom: 1px solid rgba(123, 97, 255, 0.18);
}

.profile-insight-badge {
  width: 38px;
  height: 38px;
  border-radius: 11px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #7b61ff, #1f3b60);
  color: #fff;
  font-size: 19px;
  box-shadow: 0 8px 18px -5px rgba(123, 97, 255, 0.6);
  position: relative;
}

.profile-insight-badge::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 11px;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.35), transparent 55%);
}

.insight-head h5 {
  margin: 0;
  font-size: 14.5px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.insight-head span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.profile-insight-item {
  position: relative;
  z-index: 1;
  background: rgba(255, 255, 255, 0.7);
  border: 1px solid rgba(123, 97, 255, 0.12);
  border-radius: 12px;
  padding: 12px 14px;
  margin-bottom: 8px;
  transition: transform var(--transition), box-shadow var(--transition);
}

.profile-insight-item:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 20px -8px rgba(123, 97, 255, 0.35);
}

.profile-insight-item:last-child {
  margin-bottom: 0;
}

.profile-insight-item .t {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.profile-insight-item .t i {
  font-size: 15px;
}

.profile-insight-item p {
  margin: 4px 0 0;
  font-size: 12px;
  color: #4b5563;
  line-height: 1.5;
}

.insight-risk {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 700;
  padding: 2px 8px;
  border-radius: 999px;
}

.insight-risk.low {
  background: rgba(22, 163, 74, 0.15);
  color: #15803d;
}

.insight-risk.med {
  background: rgba(217, 119, 6, 0.15);
  color: #b45309;
}

.insight-risk.high {
  background: rgba(220, 38, 38, 0.15);
  color: #b91c1c;
}

[data-bs-theme=dark] .profile-insight-item {
  background: rgba(255, 255, 255, 0.06);
}

[data-bs-theme=dark] .profile-insight-item p {
  color: #cbd2e0;
}

/* tables inside panes */
.student-profile .table {
  font-size: 13px;
}

.student-profile .table> :not(caption)>*>* {
  padding: 10px 12px;
}

/* status pill reuse */
.profile-pill {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11.5px;
  font-weight: 600;
  font-style: normal;
  padding: 4px 10px;
  border-radius: 999px;
  line-height: 1;
  white-space: nowrap;
}

@media (max-width: 575.98px) {
  .profile-pill {
    margin-left: unset !important;
  }
}

.profile-pill i {
  font-size: 13px;
}

.profile-pill.ok {
  background: rgba(22, 163, 74, 0.12);
  color: #15803d;
}

.profile-pill.warn {
  background: rgba(217, 119, 6, 0.12);
  color: #b45309;
}

.profile-pill.bad {
  background: rgba(220, 38, 38, 0.12);
  color: #b91c1c;
}

.profile-pill.info {
  background: rgba(8, 145, 178, 0.12);
  color: #0e7490;
}

.profile-pill .profile-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
}

/* ============================================================
   COMMUNICATION TAB
   ============================================================ */
.msgs {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.profile-message {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}

.profile-message:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
  border-color: var(--bs-primary);
}

.message-main {
  flex: 1;
  min-width: 0;
}

.message-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
}

.message-title {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

.message-date {
  font-size: 11px;
  color: var(--bs-secondary-color);
  flex-shrink: 0;
}

.message-sub {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin: 3px 0 6px;
}

.message-chan {
  font-size: 10px;
  font-weight: 700;
  padding: 1px 7px;
  border-radius: 5px;
}

.message-chan.email {
  background: rgba(37, 99, 235, 0.12);
  color: #2563eb;
}

.message-chan.message {
  background: rgba(22, 163, 74, 0.12);
  color: #16a34a;
}

.message-chan.sms {
  background: rgba(217, 119, 6, 0.12);
  color: #d97706;
}

.message-chan.call {
  background: rgba(13, 148, 136, 0.12);
  color: #0d9488;
}

.message-snippet {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  line-height: 1.5;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.profile-message>.profile-pill {
  align-self: flex-start;
  flex-shrink: 0;
}

.profile-message>.profile-pill i {
  font-size: 13px;
}

.announcement {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.announcement:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.announcement.pinned {
  border-color: transparent;
  background: linear-gradient(135deg, var(--tint-primary), transparent 75%);
  box-shadow: inset 0 0 0 1px var(--tint-primary);
}

.announcement-body {
  flex: 1;
  min-width: 0;
}

.announcement-body b {
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.announcement-pin {
  color: var(--bs-primary);
  font-size: 17px;
  flex-shrink: 0;
}

/* ============================================================
   ACHIEVEMENTS TAB
   ============================================================ */
.profile-award {
  position: relative;
  height: 100%;
  text-align: center;
  padding: 20px 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: 16px;
  background: var(--bs-body-bg);
  overflow: hidden;
  transition: transform var(--transition), box-shadow var(--transition);
}

.profile-award::before {
  content: "";
  position: absolute;
  top: -40px;
  left: 50%;
  transform: translateX(-50%);
  width: 120px;
  height: 80px;
  background: radial-gradient(circle, var(--rib-soft, var(--tint-primary)), transparent 70%);
}

.profile-award:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-lift);
}

.award-medal {
  position: relative;
  z-index: 1;
  width: 62px;
  height: 62px;
  border-radius: 50%;
  margin: 0 auto 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 30px;
  color: #fff;
}

.award-medal::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.55), transparent 55%);
}

.award-ribbon {
  position: absolute;
  top: 12px;
  right: 12px;
  z-index: 2;
  font-size: 10px;
  font-weight: 800;
  padding: 2px 8px;
  border-radius: 6px;
  color: #fff;
  background: var(--rib, var(--bs-primary));
}

.award-title {
  position: relative;
  z-index: 1;
  font-weight: 600;
  font-size: 13px;
  color: var(--bs-emphasis-color);
  line-height: 1.3;
}

.award-cat {
  position: relative;
  z-index: 1;
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-top: 3px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.award-cat i {
  font-size: 13px;
}

.profile-award.gold {
  --rib: #d97706;
  --rib-soft: rgba(245, 158, 11, .22);
}

.profile-award.gold .award-medal {
  background: linear-gradient(135deg, #fcd34d, #f59e0b);
  box-shadow: 0 10px 20px -6px rgba(245, 158, 11, 0.55);
}

.profile-award.silver {
  --rib: #6b7280;
  --rib-soft: rgba(148, 163, 184, .22);
}

.profile-award.silver .award-medal {
  background: linear-gradient(135deg, #e5e7eb, #9ca3af);
  box-shadow: 0 10px 20px -6px rgba(148, 163, 184, 0.5);
}

.profile-award.bronze {
  --rib: #b45309;
  --rib-soft: rgba(180, 83, 9, .2);
}

.profile-award.bronze .award-medal {
  background: linear-gradient(135deg, #e0a872, #b45309);
  box-shadow: 0 10px 20px -6px rgba(180, 83, 9, 0.5);
}

.profile-award.blue {
  --rib: #2563eb;
  --rib-soft: rgba(37, 99, 235, .2);
}

.profile-award.blue .award-medal {
  background: linear-gradient(135deg, #60a5fa, #2563eb);
  box-shadow: 0 10px 20px -6px rgba(37, 99, 235, 0.5);
}

/* earned badges */
.badge-alt-group {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

.badge-alt {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  gap: 8px;
  text-align: center;
  padding: 14px 8px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}

.badge-alt:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow);
  border-color: transparent;
}

.badge-alt span {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 28px;
  font-size: 10.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  line-height: 1.25;
}

@media (max-width: 400px) {
  .badge-alt-group {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ============================================================
   DOCUMENTS TAB
   ============================================================ */
.profile-document {
  position: relative;
  height: 100%;
  padding: 16px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  overflow: hidden;
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}

.profile-document::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  height: 3px;
  background: var(--accent);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.4s var(--transition);
}

.profile-document:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
  border-color: transparent;
}

.profile-document:hover::before {
  transform: scaleX(1);
}

.document-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  margin-bottom: 12px;
}

.document-ext {
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.06em;
  padding: 3px 8px;
  border-radius: 6px;
  background: var(--accent-soft);
  color: var(--accent);
}

.document-name {
  font-weight: 600;
  font-size: 13.5px;
  color: var(--bs-emphasis-color);
}

.document-meta {
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-top: 4px;
  display: flex;
  align-items: center;
  gap: 4px;
  flex-wrap: wrap;
}

.document-meta i {
  font-size: 13px;
}

.document-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px solid var(--bs-border-color);
}

.document-foot .profile-pill i {
  font-size: 13px;
}

.document-actions {
  display: flex;
  gap: 6px;
}

/* ============================================================
   LIBRARY TAB
   ============================================================ */
.library-stats {
  grid-template-columns: repeat(4, 1fr);
}

.books {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.profile-book {
  position: relative;
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  overflow: hidden;
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}

@media (max-width: 575.98px) {
  .profile-book {
    flex-direction: column;
    align-items: flex-start;
    gap: 12px;
  }
}

.profile-book:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
  border-color: var(--bs-primary);
}

.profile-book.overdue::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
  background: #dc2626;
}

.book-main {
  flex: 1;
  min-width: 0;
}

.book-title {
  font-weight: 600;
  font-size: 13.5px;
  color: var(--bs-emphasis-color);
}

.book-author {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.book-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 12px;
  margin-top: 5px;
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.book-meta span {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}

.book-meta i {
  font-size: 13px;
}

.book-side {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
  flex-shrink: 0;
}

.profile-button-sm {
  height: 28px;
  padding: 0 10px;
  font-size: 12px;
  border-radius: 8px;
}

.profile-button-sm i {
  font-size: 14px;
}

.profile-queue {
  margin-left: auto;
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 700;
  color: var(--bs-primary);
  background: var(--tint-primary);
  padding: 4px 10px;
  border-radius: 999px;
}

@media (max-width: 575.98px) {
  .profile-queue {
    margin-left: unset;
  }
}

.reading-history {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.reading-mini {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: 11px;
  transition: background var(--transition);
}

.reading-mini:hover {
  background: var(--bs-tertiary-bg);
}

.reading-mini b {
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.star-rating {
  display: flex;
  gap: 1px;
  margin-top: 2px;
}

.star-rating i {
  font-size: 13px;
  color: #f59e0b;
}

.star-rating i.ti-star {
  color: var(--bs-border-color);
}

@media (max-width: 575.98px) {
  .library-stats {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ============================================================
   ACADEMICS TAB
   ============================================================ */
.profile-kpi {
  position: relative;
  height: 100%;
  padding: 14px 16px;
  border-radius: 16px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  overflow: hidden;
  transition: box-shadow var(--transition), transform var(--transition);
}

.profile-kpi::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  height: 3px;
  background: var(--accent);
  opacity: 0.9;
}

.profile-kpi:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.profile-kpi.grad-primary {
  --accent: var(--accent-indigo);
  --accent-soft: var(--tint-info);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.profile-kpi.grad-gold {
  --accent: var(--bs-warning);
  --accent-soft: var(--tint-warning);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.kpi-bg {
  position: absolute;
  right: -10px;
  bottom: -16px;
  font-size: 84px;
  line-height: 1;
  opacity: 0.05;
  color: var(--accent);
}

.kpi-bg i {
  display: block;
}

.kpi-top {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 10px;
}

.kpi-tag {
  font-size: 11px;
  font-weight: 700;
  padding: 3px 10px;
  border-radius: 999px;
  background: var(--accent-soft);
  color: var(--accent);
}

.kpi-val {
  position: relative;
  z-index: 1;
  font-size: 28px;
  font-weight: 800;
  line-height: 1;
  color: var(--bs-emphasis-color);
}

.kpi-val small {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-secondary-color);
}

.kpi-lbl {
  position: relative;
  z-index: 1;
  font-size: 12px;
  margin-top: 4px;
  color: var(--bs-secondary-color);
}

.kpi-bar {
  position: relative;
  z-index: 1;
  height: 6px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
  margin-top: 10px;
}

.kpi-bar span {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--accent);
  width: 0;
  transition: width 1.1s cubic-bezier(0.4, 0, 0.2, 1);
}

.trend-x {
  display: flex;
  justify-content: space-between;
  margin-top: 4px;
}

.trend-x span {
  font-size: 9.5px;
  color: var(--bs-secondary-color);
}

.profile-kpi .profile-trend svg {
  height: 58px;
}

/* subject rows */
.subjmarks {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.profile-subject {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 11px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 13px;
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.profile-subject:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.subject-main {
  flex: 1;
  min-width: 0;
}

.subject-top {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 7px;
}

.subject-top .name {
  font-weight: 600;
  font-size: 13.5px;
  color: var(--bs-emphasis-color);
}

.subject-pct {
  font-weight: 800;
  font-size: 15px;
  color: var(--bs-emphasis-color);
  width: 46px;
  text-align: right;
}

/* grade badges */
.grade {
  font-size: 11px;
  font-weight: 800;
  padding: 2px 8px;
  border-radius: 6px;
  font-style: normal;
  line-height: 1.5;
}

.grade.a {
  background: rgba(22, 163, 74, 0.14);
  color: #15803d;
}

.grade.b {
  background: rgba(37, 99, 235, 0.14);
  color: #1d4ed8;
}

.grade.c {
  background: rgba(217, 119, 6, 0.14);
  color: #b45309;
}

.grade.d {
  background: rgba(220, 38, 38, 0.14);
  color: #b91c1c;
}

/* exams & results — result banner (distinct from Attendance ring) */
.exam-result {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 18px;
  align-items: stretch;
  padding: 18px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: radial-gradient(120% 150% at 100% 0, rgba(79, 70, 229, 0.06), transparent 55%), var(--bs-body-bg);
}

@media (max-width: 1399.98px) {
  .exam-result {
    grid-template-columns: 1fr;
  }
}

.exam-result-grade {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-width: 116px;
  padding: 14px 18px;
  border-radius: 14px;
  background: linear-gradient(150deg, #4f46e5, #7b61ff);
  color: #fff;
  box-shadow: 0 14px 26px -12px rgba(79, 70, 229, 0.55), inset 0 1px 0 rgba(255, 255, 255, 0.25);
}

.exam-result-letter {
  font-size: 46px;
  font-weight: 800;
  line-height: 1;
  letter-spacing: -1px;
}

.exam-result-band {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  font-weight: 600;
  padding: 3px 11px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.18);
}

.exam-result-band i {
  font-size: 13px;
}

.exam-result-mid {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 12px;
  min-width: 0;
}

.exam-result-scoreline {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}

.exam-result-pct {
  display: flex;
  align-items: baseline;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  line-height: 1;
}

.exam-result-pct span {
  font-size: 42px;
}

.exam-result-pct i {
  font-size: 20px;
  font-style: normal;
  color: var(--bs-secondary-color);
  margin-left: 2px;
}

.exam-result-cap {
  display: flex;
  flex-direction: column;
}

.exam-result-cap b {
  font-size: 14px;
  color: var(--bs-emphasis-color);
}

.exam-result-cap span {
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.exam-result-trend {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  font-weight: 600;
  color: #16a34a;
  background: rgba(22, 163, 74, 0.1);
  padding: 5px 11px;
  border-radius: 999px;
}

.exam-result-meter {
  position: relative;
  display: flex;
  gap: 3px;
  height: 12px;
  margin-top: 2px;
}

.exam-result-meter .seg {
  height: 100%;
  border-radius: 4px;
}

.exam-result-meter .seg.f {
  flex: 40;
  background: rgba(220, 38, 38, 0.28);
}

.exam-result-meter .seg.p {
  flex: 20;
  background: rgba(217, 119, 6, 0.35);
}

.exam-result-meter .seg.m {
  flex: 25;
  background: rgba(8, 145, 178, 0.32);
}

.exam-result-meter .seg.d {
  flex: 15;
  background: rgba(22, 163, 74, 0.45);
}

.exam-result-needle {
  position: absolute;
  top: -4px;
  bottom: -4px;
  left: 0;
  width: 3px;
  border-radius: 3px;
  background: var(--bs-emphasis-color);
  box-shadow: 0 0 0 3px var(--bs-body-bg);
  transition: left 1.1s cubic-bezier(0.22, 1, 0.36, 1);
}

.exam-result-needle::after {
  content: "";
  position: absolute;
  top: -6px;
  left: 50%;
  transform: translateX(-50%);
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--bs-emphasis-color);
  box-shadow: 0 0 0 3px var(--bs-body-bg);
}

.exam-result-scale {
  display: flex;
  justify-content: space-between;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.exam-result-side {
  display: flex;
  flex-direction: column;
  gap: 8px;
  justify-content: center;
  min-width: 200px;
}

.exam-result-stat {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  background: var(--bs-secondary-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.exam-result-stat:hover {
  transform: translateY(-1px);
  box-shadow: var(--shadow);
}

.exam-result-stat .ic {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  background: var(--accent-soft);
  color: var(--accent);
  flex-shrink: 0;
}

.exam-result-stat .tx {
  display: flex;
  flex-direction: column;
  line-height: 1.2;
}

.exam-result-stat .tx b {
  font-size: 16px;
  color: var(--bs-emphasis-color);
}

.exam-result-stat .tx span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

@media (max-width: 991px) {
  .exam-result {
    grid-template-columns: 1fr;
  }

  .exam-result-side {
    min-width: 0;
    flex-direction: row;
    flex-wrap: wrap;
  }

  .exam-result-side .exam-result-stat {
    flex: 1 1 30%;
  }
}

@media (max-width: 575px) {
  .exam-result-grade {
    flex-direction: row;
    min-width: 0;
  }

  .exam-result-letter {
    font-size: 34px;
  }

  .exam-result-pct span {
    font-size: 34px;
  }

  .exam-result-side .exam-result-stat {
    flex: 1 1 100%;
  }
}

[data-bs-theme=dark] .exam-result-stat,
[data-theme=dark] .exam-result-stat {
  background: rgba(255, 255, 255, 0.03);
}

/* exam results table */
.exam-table {
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  overflow: hidden;
}

.exam-row {
  display: grid;
  grid-template-columns: 1.6fr 1fr 1.4fr 0.7fr 0.8fr;
  align-items: center;
  gap: 10px;
  padding: 12px 14px;
}

.exam-row:not(.head):not(:last-child) {
  border-bottom: 1px solid var(--bs-border-color);
}

.exam-row.head {
  background: var(--bs-secondary-bg);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--bs-secondary-color);
  font-weight: 700;
  padding: 10px 14px;
}

.exam-row:not(.head):hover {
  background: var(--bs-tertiary-bg);
}

.exam-row .ex-name {
  font-weight: 600;
  color: var(--bs-emphasis-color);
  font-size: 13px;
}

.exam-row .ex-date {
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.exam-row .ex-score {
  font-weight: 700;
  color: var(--bs-emphasis-color);
  font-size: 13px;
}

.exam-row .ex-score small {
  font-weight: 500;
  color: var(--bs-secondary-color);
  font-size: 11px;
}

.score-bar {
  display: block;
  height: 4px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  margin-top: 5px;
  overflow: hidden;
}

.score-bar b {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--bs-primary);
}

/* teacher remark */
.profile-remark {
  position: relative;
  display: flex;
  gap: 14px;
  padding: 18px;
  border-radius: 16px;
  border: 1px solid var(--bs-border-color);
  background: linear-gradient(135deg, var(--tint-primary), transparent 70%);
}

.remark-quote {
  flex-shrink: 0;
  width: 40px;
  height: 40px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  background: var(--bs-primary);
  color: #fff;
}

.remark-body p {
  margin: 0 0 12px;
  font-size: 13.5px;
  font-style: italic;
  color: var(--bs-emphasis-color);
  line-height: 1.6;
}

.remark-by {
  display: flex;
  align-items: center;
  gap: 10px;
}

@media (max-width: 575.98px) {
  .remark-by {
    flex-wrap: wrap;
  }
}

.remark-by img {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  object-fit: cover;
}

.remark-by b {
  display: block;
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.remark-by span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.remark-teal {
  background: linear-gradient(135deg, rgba(13, 148, 136, 0.14), transparent 70%);
}

.remark-teal .remark-quote {
  background: #0d9488;
}

@media (max-width: 575.98px) {
  .exam-row {
    grid-template-columns: 1.4fr 1fr 0.8fr;
  }

  .exam-row .ex-date,
  .exam-row.head span:nth-child(2) {
    display: none;
  }
}

/* ============================================================
   ATTENDANCE TAB
   ============================================================ */
.attendance-ringcard {
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  padding: 20px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
}

.attendance-ring {
  width: 152px;
  height: 152px;
}

.attendance-ring .profile-ring-hole.big {
  width: 120px;
  height: 120px;
  flex-direction: column;
  font-size: 32px;
  font-weight: 800;
  gap: 0;
}

.attendance-ring .profile-ring-hole.big small {
  font-size: 10.5px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--bs-secondary-color);
  margin-top: 2px;
}

.attendance-ringcap {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.attendance-ringcap i {
  color: #16a34a;
  font-size: 15px;
}

.attendance-ringcap b {
  color: var(--bs-emphasis-color);
}

.attendance-stats {
  height: 100%;
  align-content: center;
}

.profile-tile-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 14px;
}

.attendance-avg {
  font-size: 11.5px;
  font-weight: 600;
  color: #15803d;
  background: rgba(22, 163, 74, 0.12);
  padding: 4px 10px;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.attendance-avg i {
  font-size: 14px;
}

.attendance-sub {
  font-size: 11px;
  font-weight: 500;
  color: var(--bs-secondary-color);
  background: var(--bs-secondary-bg);
  padding: 2px 9px;
  border-radius: 999px;
  margin-left: 4px;
}

.bar-group-target {
  position: relative;
}

.heatmap-block-wrap {
  padding: 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
}

.heatmap-block-days {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 5px;
  margin-bottom: 6px;
}

.heatmap-block-days span {
  text-align: center;
  font-size: 10px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  text-transform: uppercase;
  letter-spacing: 0.02em;
}

.heatmap-block .d {
  cursor: default;
  transition: transform var(--transition);
}

.heatmap-block .d:hover {
  transform: scale(1.15);
}

.heatmap-block-legend {
  flex-wrap: wrap;
}

/* ============================================================
   TIMETABLE TAB
   ============================================================ */
.today-chip {
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-primary);
  background: var(--tint-primary);
  padding: 3px 10px;
  border-radius: 999px;
  margin-left: 6px;
}

/* subject colour tokens */
.sub-blue {
  --sub: #2563eb;
  --sub-soft: rgba(37, 99, 235, .12);
}

.sub-green {
  --sub: #16a34a;
  --sub-soft: rgba(22, 163, 74, .12);
}

.sub-purple {
  --sub: #7b61ff;
  --sub-soft: rgba(123, 97, 255, .12);
}

.sub-teal {
  --sub: #0d9488;
  --sub-soft: rgba(13, 148, 136, .12);
}

.sub-amber {
  --sub: #d97706;
  --sub-soft: rgba(217, 119, 6, .12);
}

.sub-pink {
  --sub: #db2777;
  --sub-soft: rgba(219, 39, 119, .12);
}

/* today's class schedule */
.profile-schedule {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.schedule-item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 13px;
  background: var(--bs-body-bg);
  overflow: hidden;
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}

@media (max-width: 575.98px) {
  .schedule-item {
    flex-direction: column;
    align-items: flex-start;
    gap: 12px;
  }
}

.schedule-item::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
  background: var(--sub, var(--bs-primary));
}

.schedule-item:hover {
  transform: translateX(2px);
  box-shadow: var(--shadow);
}

.schedule-item.now {
  border-color: var(--sub);
  background: var(--sub-soft);
}

.profile-schedule-time {
  width: 58px;
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  line-height: 1.15;
}

.profile-schedule-time b {
  font-size: 14px;
  color: var(--bs-emphasis-color);
}

.profile-schedule-time span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.schedule-body {
  flex: 1;
  min-width: 0;
}

.schedule-subj {
  font-weight: 600;
  font-size: 14px;
  color: var(--bs-emphasis-color);
}

.profile-schedule-meta {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  display: flex;
  align-items: center;
  gap: 4px;
  flex-wrap: wrap;
}

.profile-schedule-meta i {
  font-size: 13px;
}

.schedule-status {
  font-size: 11px;
  font-weight: 700;
  padding: 4px 10px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  white-space: nowrap;
}

.schedule-status.next {
  background: rgba(8, 145, 178, 0.12);
  color: #0e7490;
}

.schedule-status.now {
  background: var(--sub);
  color: #fff;
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.schedule-status.now .profile-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: #fff;
  animation: sp-blink 1.2s infinite;
}

/* weekly timetable grid */
.timetable-wrap {
  overflow-x: auto;
}

.profile-timetable {
  width: 100%;
  border-collapse: separate;
  border-spacing: 6px;
  min-width: 580px;
}

.profile-timetable th {
  font-size: 11px;
  color: var(--bs-secondary-color);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  padding: 4px 6px 8px;
  text-align: center;
  font-weight: 700;
}

.profile-timetable thead th span {
  display: block;
  font-size: 9.5px;
  font-weight: 500;
  text-transform: none;
  letter-spacing: 0;
  opacity: 0.7;
  margin-top: 2px;
}

.profile-timetable tbody th {
  text-align: center;
  font-size: 12px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  background: var(--bs-secondary-bg);
  border-radius: 10px;
  width: 54px;
}

.profile-timetable td {
  text-align: center;
  padding: 3px;
}

.tt-chip {
  display: block;
  padding: 9px 6px;
  border-radius: 10px;
  font-size: 12px;
  font-weight: 600;
  background: var(--sub-soft, var(--bs-secondary-bg));
  color: var(--sub, var(--bs-emphasis-color));
  border: 1px solid transparent;
  transition: transform var(--transition), box-shadow var(--transition);
}

.tt-chip:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.tt-chip.free {
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  font-weight: 500;
  border-style: dashed;
  border-color: var(--bs-border-color);
}

/* subject palette (chips + legend keys) */
.s-math {
  --sub: #2563eb;
  --sub-soft: rgba(37, 99, 235, .12);
}

.s-sci {
  --sub: #16a34a;
  --sub-soft: rgba(22, 163, 74, .12);
}

.s-eng {
  --sub: #7b61ff;
  --sub-soft: rgba(123, 97, 255, .12);
}

.s-geo {
  --sub: #0d9488;
  --sub-soft: rgba(13, 148, 136, .12);
}

.s-his {
  --sub: #db2777;
  --sub-soft: rgba(219, 39, 119, .12);
}

.s-pe {
  --sub: #d97706;
  --sub-soft: rgba(217, 119, 6, .12);
}

.s-mus {
  --sub: #4f46e5;
  --sub-soft: rgba(79, 70, 229, .12);
}

.s-art {
  --sub: #0891b2;
  --sub-soft: rgba(8, 145, 178, .12);
}

.s-cs {
  --sub: #475569;
  --sub-soft: rgba(71, 85, 105, .12);
}

.timetable-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
}

.timetable-legend span {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.tt-key {
  width: 11px;
  height: 11px;
  border-radius: 4px;
  background: var(--sub, var(--bs-primary));
}

/* exam / assignment event tiles */
.profile-event {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 13px;
  background: var(--bs-body-bg);
  overflow: hidden;
  transition: transform var(--transition), box-shadow var(--transition);
}

@media (max-width: 575.98px) {
  .profile-event {
    flex-direction: column;
    align-items: flex-start;
  }
}

.profile-event::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
  background: var(--sub, var(--bs-primary));
}

.profile-event:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.profile-event-date {
  width: 46px;
  height: 46px;
  border-radius: 12px;
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  line-height: 1;
  background: var(--sub-soft, var(--tint-primary));
  color: var(--sub, var(--bs-primary));
}

.profile-event-date b {
  font-size: 18px;
  font-weight: 800;
}

.profile-event-date span {
  font-size: 10px;
  text-transform: uppercase;
}

.profile-event-body {
  flex: 1;
  min-width: 0;
}

.event-title {
  font-weight: 600;
  font-size: 13.5px;
  color: var(--bs-emphasis-color);
}

/* ============================================================
   SKELETON
   ============================================================ */
/* the primitive and its shared shapes come from components/_ui-skeleton.scss;
   only this page's own placeholder geometry lives here */
.profile-live {
  display: none;
}

.student-profile.loaded .profile-live {
  display: block;
}

.student-profile .skeleton {
  border-radius: 8px;
}

.student-profile .skeleton-photo {
  width: 118px;
  height: 118px;
  border-radius: 20px;
}

.student-profile .skeleton-ring {
  width: 74px;
  height: 74px;
  border-radius: 50%;
}

.student-profile .skeleton-btn {
  height: 38px;
  width: 120px;
  border-radius: var(--radius-sm);
}

.student-profile .skeleton-card {
  height: 120px;
  border-radius: var(--radius);
}

.student-profile .skeleton-ov {
  height: 92px;
  border-radius: var(--radius-sm);
}

.student-profile .skeleton-chart {
  height: 170px;
  border-radius: var(--radius-sm);
}

[data-bs-theme=dark] .student-profile .skeleton {
  background: #2a3042;
}

[data-bs-theme=dark] .student-profile .skeleton::after {
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.08), transparent);
}

/* ============================================================
   DARK MODE
   ============================================================ */
/* ============================================================
   ID CARD (modal) + CONFIRM
   ============================================================ */
.idcard {
  --id-accent: var(--bs-primary);
  position: relative;
  width: 300px;
  margin: 4px auto;
  background: #fff;
  border-radius: 18px;
  overflow: hidden;
  box-shadow: 0 18px 40px -12px rgba(17, 24, 39, 0.38), 0 0 0 1px rgba(17, 24, 39, 0.05);
}

.idcard-head {
  position: relative;
  padding: 22px 18px 40px;
  text-align: center;
  color: #fff;
  background: linear-gradient(135deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.22)), var(--id-accent);
}

.idcard-logo {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  background: rgba(255, 255, 255, 0.18);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  vertical-align: middle;
}

.idcard-logo i {
  font-size: 20px;
  color: #fff;
}

.idcard-brand {
  display: inline-block;
  vertical-align: middle;
  margin-left: 8px;
  text-align: left;
}

.idcard-brand h6 {
  margin: 0;
  font-size: 14px;
  font-weight: 800;
  letter-spacing: 0.04em;
}

.idcard-brand span {
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  opacity: 0.85;
}

.idcard-wave {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 30px;
  background: #fff;
  border-radius: 50% 50% 0 0/100% 100% 0 0;
}

.idcard-photo-wrap {
  position: relative;
  width: 88px;
  height: 88px;
  margin: -36px auto 0;
  border-radius: 16px;
  padding: 4px;
  background: #fff;
  box-shadow: 0 8px 18px -6px rgba(17, 24, 39, 0.3);
}

.idcard-photo-wrap img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 12px;
}

.idcard-identity {
  text-align: center;
  margin-top: 8px;
}

.idcard-identity h5 {
  margin: 0;
  font-size: 17px;
  font-weight: 700;
  color: #111827;
}

.idcard-role {
  display: inline-block;
  margin-top: 5px;
  padding: 3px 12px;
  border-radius: 999px;
  background: var(--tint-primary);
  color: var(--id-accent);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.14em;
}

.idcard-info {
  margin: 12px 18px 0;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  overflow: hidden;
}

.idcard-info .idcard-row {
  display: flex;
  justify-content: space-between;
  padding: 8px 12px;
  font-size: 12px;
}

.idcard-info .idcard-row:nth-child(odd) {
  background: var(--bs-secondary-bg);
}

.idcard-info .idcard-row span {
  color: var(--bs-secondary-color);
}

.idcard-info .idcard-row b {
  color: #111827;
}

.idcard-barcode {
  margin: 12px 18px 0;
  text-align: center;
}

.idcard-bars {
  height: 38px;
  border-radius: 4px;
  background-image: repeating-linear-gradient(90deg, #1f2937 0 2px, #fff 2px 4px, #1f2937 4px 7px, #fff 7px 9px, #1f2937 9px 10px, #fff 10px 13px, #1f2937 13px 16px, #fff 16px 17px);
}

.idcard-barcode span {
  display: block;
  margin-top: 4px;
  font-size: 11px;
  letter-spacing: 0.28em;
  color: #374151;
  font-weight: 600;
}

.idcard-foot {
  margin-top: 14px;
  padding: 10px 16px;
  text-align: center;
  font-size: 10.5px;
  color: #fff;
  background: linear-gradient(135deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.22)), var(--id-accent);
}

/* ============================================================
   FEES TAB
   ============================================================ */
.fee-banner {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 16px;
  margin-bottom: 16px;
  border-radius: 14px;
  border: 1px solid var(--bs-border-color);
  background: radial-gradient(120% 160% at 0% 0%, var(--tint-primary), transparent 60%), linear-gradient(135deg, var(--tint-primary), var(--bs-secondary-bg));
}

@media (max-width: 575.98px) {
  .fee-banner {
    flex-direction: column;
    align-items: start;
  }
}

.fee-banner-txt {
  display: flex;
  flex-direction: column;
  line-height: 1.35;
}

.fee-banner-txt b {
  font-size: 14px;
  color: var(--bs-emphasis-color);
}

.fee-banner-txt span {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
}

.fee-banner-txt strong {
  color: var(--bs-primary);
}

.fee-donut-card {
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  padding: 18px;
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 16px;
  background: var(--bs-body-bg);
}

.fee-donut {
  position: relative;
  width: 150px;
  height: 150px;
}

.fee-donut svg {
  width: 150px;
  height: 150px;
  transform: rotate(-90deg);
}

.fee-donut svg circle {
  fill: none;
  stroke-width: 16;
  stroke-linecap: round;
}

.fee-donut svg .track {
  stroke: var(--bs-secondary-bg);
}

.fee-donut-center {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.fee-donut-center .pct {
  font-size: 30px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  line-height: 1;
}

.fee-donut-center .lbl {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--bs-secondary-color);
  margin-top: 3px;
}

.fee-donut-card .donut-legend {
  flex-direction: row;
  flex-wrap: wrap;
  gap: 6px 16px;
  justify-content: center;
}

.fee-stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}

@media (max-width: 575.98px) {
  .fee-stats {
    grid-template-columns: 1fr;
  }
}

.fee-stat {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  overflow: hidden;
  transition: transform var(--transition), box-shadow var(--transition);
}

.fee-stat::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
  background: var(--accent);
}

.fee-stat:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
}

.fee-stat-body {
  flex: 1;
  min-width: 0;
}

.fee-stat-body .v {
  font-size: 19px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
}

.fee-stat-body .l {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.fee-mini {
  height: 5px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
  margin-top: 6px;
}

.fee-mini span {
  display: block;
  height: 100%;
  border-radius: 999px;
  width: 0;
  transition: width 1s cubic-bezier(0.4, 0, 0.2, 1);
}

.fee-progress {
  margin-top: 12px;
}

.fee-progress .top {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin-bottom: 6px;
}

.fee-progress .top b {
  color: var(--bs-emphasis-color);
}

/* invoice rows */
.fee-invoices {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.profile-invoice {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 13px;
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}

@media (max-width: 575.98px) {
  .profile-invoice {
    flex-direction: column;
    align-items: start;
  }
}

.profile-invoice:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
  border-color: var(--bs-primary);
}

.invoice-main {
  flex: 1;
  min-width: 0;
}

.invoice-title {
  font-weight: 600;
  font-size: 13.5px;
  color: var(--bs-emphasis-color);
}

.invoice-sub {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.invoice-amt {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
  font-weight: 700;
  font-size: 14px;
  color: var(--bs-emphasis-color);
  white-space: nowrap;
}

/* ============================================================
   ANIMATIONS
   ============================================================ */
@keyframes sp-blink {

  0%,
  100% {
    opacity: 1;
  }

  50% {
    opacity: 0.3;
  }
}

@keyframes sp-fade {
  from {
    opacity: 0;
    transform: translateY(6px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

@keyframes sp-draw {
  to {
    stroke-dashoffset: 0;
  }
}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 1399.98px) {
  .profile-overview-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (max-width: 991.98px) {
  .hero-grid {
    grid-template-columns: auto 1fr;
  }

  .hero-right {
    grid-column: 1/-1;
    justify-content: space-between;
    margin-top: 6px;
  }

  .profile-overview-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (max-width: 767.98px) {
  .hero-grid {
    grid-template-columns: 1fr;
    text-align: center;
    justify-items: center;
  }

  .hero-meta,
  .badges {
    justify-content: center;
  }

  .hero-right {
    flex-direction: column;
    gap: 16px;
  }

  .profile-overview-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .profile-quick-action-grid {
    grid-template-columns: repeat(3, 1fr);
  }

  .definition-list {
    grid-template-columns: 1fr;
  }
}

/* ============================================================
   NEW FEATURES — Health,
Notes,
Audit,
Transport track,
Pay gateway,
Login activity  (all scoped,
additive)
   ============================================================ */
/* tab lock chip */
.tab-lock {
  display: inline-flex;
  margin-left: 5px;
  opacity: 0.7;
}

.tab-lock i {
  font-size: 13px;
}

/* ---------- HEALTH: emergency banner ---------- */
.emergency {
  display: flex;
  gap: 14px;
  padding: 14px 16px;
  border-radius: var(--radius);
  border: 1px solid rgba(220, 38, 38, 0.28);
  background: linear-gradient(100deg, rgba(220, 38, 38, 0.08), rgba(220, 38, 38, 0.02));
  flex-direction: column;
  align-items: flex-start;
}

.emergency-body {
  min-width: 0;
}

.emergency-body b {
  display: block;
  font-size: 13.5px;
  color: var(--bs-emphasis-color);
}

.emergency-body span {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
}

.emergency-body strong {
  color: #dc2626;
}

.emergency-contact {
  margin-left: unset;
  display: flex;
  align-items: center;
  gap: 12px;
  flex-shrink: 0;
}

.emergency-contact .l {
  display: block;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--bs-secondary-color);
}

.emergency-contact b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

@media (max-width: 767px) {
  .emergency {
    flex-wrap: wrap;
  }

  .emergency-contact {
    margin-left: 0;
    width: 100%;
    justify-content: space-between;
  }
}

/* ---------- HEALTH: vitals ---------- */
.vital-group {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

.vital {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.vital:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.vital .ic {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  background: var(--accent-soft);
  color: var(--accent);
  flex-shrink: 0;
}

.vital .tx {
  display: flex;
  flex-direction: column;
  line-height: 1.15;
  min-width: 0;
}

.vital .tx b {
  font-size: 16px;
  color: var(--bs-emphasis-color);
}

.vital .tx b small {
  font-size: 11px;
  font-weight: 500;
  color: var(--bs-secondary-color);
}

.vital .tx span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

@media (max-width: 991px) {
  .vital-group {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (max-width: 575px) {
  .vital-group {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* vaccination table — 4 col override */
.exam-row.vaccination-row {
  grid-template-columns: 1.6fr 1fr 1.2fr 1fr;
}

@media (max-width: 575.98px) {
  .exam-row.vaccination-row {
    grid-template-columns: 1fr;
  }
}

/* ---------- HEALTH: conditions ---------- */
.profile-condition {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 11px 13px;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  margin-bottom: 8px;
  border-left-width: 3px;
}

.profile-condition:last-child {
  margin-bottom: 0;
}

.profile-condition.sev-high {
  border-left-color: #dc2626;
}

.profile-condition.sev-mid {
  border-left-color: #d97706;
}

.profile-condition.sev-low {
  border-left-color: #0891b2;
}

.condition-body {
  min-width: 0;
}

.condition-body b {
  display: block;
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.condition-body span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ---------- HEALTH: emergency steps ---------- */
.profile-step {
  display: flex;
  gap: 12px;
  height: 100%;
  padding: 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  background: var(--bs-secondary-bg);
}

.step-n {
  flex-shrink: 0;
  width: 26px;
  height: 26px;
  border-radius: 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  font-weight: 700;
  color: #fff;
  background: var(--bs-primary);
}

.profile-step b {
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.profile-step p {
  margin: 3px 0 0;
  font-size: 12px;
  color: var(--bs-secondary-color);
  line-height: 1.5;
}

/* ---------- TRANSPORT: live tracking ---------- */
.transport-track {
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px dashed var(--bs-border-color);
}

.transport-track-map {
  position: relative;
  height: 70px;
  border-radius: 12px;
  overflow: hidden;
  background: linear-gradient(135deg, #eef2ff, #f7f8fc);
  border: 1px solid var(--bs-border-color);
}

[data-bs-theme=dark] .transport-track-map,
[data-theme=dark] .transport-track-map {
  background: linear-gradient(135deg, rgba(99, 102, 241, 0.12), rgba(255, 255, 255, 0.02));
}

.transport-track-route {
  position: absolute;
  left: 14px;
  right: 14px;
  top: 50%;
  height: 3px;
  transform: translateY(-50%);
  border-radius: 3px;
  background: repeating-linear-gradient(90deg, var(--bs-primary) 0 8px, transparent 8px 14px);
  opacity: 0.5;
}

.transport-track-bus,
.transport-track-school {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 30px;
  height: 30px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  color: #fff;
}

.transport-track-bus {
  left: 12px;
  background: var(--bs-primary);
  box-shadow: 0 4px 10px -3px rgba(31, 59, 96, 0.6);
  animation: sp-busmove 4s ease-in-out infinite;
}

.transport-track-school {
  right: 12px;
  background: #16a34a;
}

@keyframes sp-busmove {

  0%,
  100% {
    left: 12px;
  }

  50% {
    left: calc(100% - 42px);
  }
}

.transport-track-info {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-top: 10px;
  flex-wrap: wrap;
}

.transport-track-eta {
  display: flex;
  flex-direction: column;
  line-height: 1.25;
}

.transport-track-eta b {
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.transport-track-eta span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.transport-track-eta .profile-dot.live {
  display: inline-block;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #16a34a;
  margin-right: 6px;
  box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.5);
  animation: sp-livepulse 1.6s infinite;
}

@keyframes sp-livepulse {
  0% {
    box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.5);
  }

  100% {
    box-shadow: 0 0 0 8px rgba(22, 163, 74, 0);
  }
}

.transport-track-info .profile-button {
  flex: 1;
  min-width: 140px;
}

/* ---------- NOTES: staff banner + switch ---------- */
.staff-bar {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border-radius: 12px;
  border: 1px solid rgba(217, 119, 6, 0.28);
  background: linear-gradient(100deg, rgba(217, 119, 6, 0.08), transparent);
}

.staff-bar-txt b {
  display: block;
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.staff-bar-txt span {
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.switch {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  margin: 0;
}

.switch input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.switch-track {
  position: relative;
  width: 38px;
  height: 22px;
  border-radius: 999px;
  background: var(--bs-border-color);
  transition: background var(--transition);
  flex-shrink: 0;
}

.switch-track::after {
  content: "";
  position: absolute;
  top: 2px;
  left: 2px;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
  transition: transform var(--transition);
}

.switch input:checked+.switch-track {
  background: var(--bs-primary);
}

.switch input:checked+.switch-track::after {
  transform: translateX(16px);
}

.switch-lbl {
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

/* ---------- NOTES: composer ---------- */
.note-composer {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 12px;
}

.note-composer-top {
  display: flex;
  gap: 10px;
}

.note-composer-top img {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  object-fit: cover;
  flex-shrink: 0;
}

.note-composer-top textarea {
  border: 1px solid var(--bs-border-color);
  border-radius: 10px;
  resize: vertical;
  font-size: 13px;
}

.note-composer-top textarea:focus {
  border-color: var(--bs-primary);
  box-shadow: 0 0 0 3px var(--tint-primary);
}

.note-composer-foot {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  margin-top: 10px;
}

.visibility {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  cursor: pointer;
  margin: 0;
  padding: 5px 10px;
  border: 1px solid var(--bs-border-color);
  border-radius: 999px;
}

.visibility input {
  accent-color: var(--bs-primary);
}

.visibility i {
  font-size: 14px;
}

/* ---------- NOTES: list ---------- */
.profile-notes {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.profile-note {
  display: flex;
  gap: 12px;
  padding: 13px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  background: var(--bs-body-bg);
  border-left-width: 3px;
}

.profile-note.c-counsel {
  border-left-color: #0d9488;
}

.profile-note.c-academic {
  border-left-color: #1f3b60;
}

.profile-note.c-behaviour {
  border-left-color: #d97706;
}

.profile-note.c-health {
  border-left-color: #dc2626;
}

.note-main {
  min-width: 0;
  flex: 1;
}

.note-top {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.note-top b {
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.note-role {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.note-vis {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 10.5px;
  font-weight: 600;
  color: #b45309;
  background: rgba(217, 119, 6, 0.12);
  padding: 2px 8px;
  border-radius: 999px;
}

.note-vis i {
  font-size: 12px;
}

.note-vis.shared {
  color: #0d9488;
  background: rgba(13, 148, 136, 0.12);
}

.note-date {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.note-main p {
  margin: 6px 0 0;
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  line-height: 1.55;
}

.badge-cat {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  padding: 2px 8px;
  border-radius: 6px;
}

.badge-cat.counsel {
  color: #0d9488;
  background: rgba(13, 148, 136, 0.12);
}

.badge-cat.academic {
  color: #1f3b60;
  background: rgba(31, 59, 96, 0.12);
}

.badge-cat.behaviour {
  color: #d97706;
  background: rgba(217, 119, 6, 0.12);
}

.badge-cat.health {
  color: #dc2626;
  background: rgba(220, 38, 38, 0.12);
}

.badge-cat.profile {
  color: #7b61ff;
  background: rgba(123, 97, 255, 0.12);
}

.badge-cat.fees {
  color: #16a34a;
  background: rgba(22, 163, 74, 0.12);
}

.note-new {
  animation: sp-fade 0.5s ease;
}

/* ---------- AUDIT ---------- */
.profile-audit {
  display: flex;
  flex-direction: column;
  gap: 0;
  position: relative;
  padding-left: 6px;
}

.audit-row {
  display: flex;
  gap: 14px;
  padding: 14px 0;
  border-bottom: 1px solid var(--bs-border-color);
  position: relative;
}

.audit-row:last-child {
  border-bottom: 0;
}

.audit-body {
  min-width: 0;
  flex: 1;
}

.audit-top {
  display: flex;
  align-items: center;
  gap: 8px;
}

.audit-top b {
  font-size: 13.5px;
  color: var(--bs-emphasis-color);
}

.audit-detail {
  margin-top: 4px;
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.audit-detail em {
  font-style: normal;
  font-weight: 600;
  padding: 1px 8px;
  border-radius: 6px;
}

.audit-detail em.old {
  color: #dc2626;
  background: rgba(220, 38, 38, 0.1);
  text-decoration: line-through;
}

.audit-detail em.new {
  color: #16a34a;
  background: rgba(22, 163, 74, 0.1);
}

.audit-detail i {
  font-size: 14px;
  color: var(--bs-secondary-color);
}

.audit-meta {
  margin-top: 6px;
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  flex-wrap: wrap;
}

.audit-meta img {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  object-fit: cover;
}

.audit-meta i {
  font-size: 7px;
  opacity: 0.6;
}

.audit-note {
  margin-top: 14px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  display: flex;
  align-items: center;
  gap: 6px;
}

.audit-note i {
  font-size: 14px;
}

/* ---------- LOGIN modal: portal + activity ---------- */
.portal {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  margin-top: 16px;
}

.portal-stat {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  background: var(--bs-secondary-bg);
}

.portal-stat .ic {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  background: var(--accent-soft);
  color: var(--accent);
  flex-shrink: 0;
}

.portal-stat b {
  display: block;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.portal-stat span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

@media (max-width: 575px) {
  .portal {
    grid-template-columns: 1fr;
  }
}

.login-log {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.login-log-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: 10px;
}

.login-log-row .ic {
  width: 32px;
  height: 32px;
  border-radius: 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  background: var(--accent-soft);
  color: var(--accent);
  flex-shrink: 0;
}

.login-log-row .tx {
  min-width: 0;
  flex: 1;
}

.login-log-row .tx b {
  display: block;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.login-log-row .tx span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.login-log-time {
  font-size: 11px;
  color: var(--bs-secondary-color);
  text-align: right;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 3px;
}

/* ---------- PAY modal ---------- */
.profile-lbl {
  display: block;
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 4px;
}

.payment-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 16px;
  border-radius: 12px;
  background: linear-gradient(120deg, var(--tint-primary), transparent);
  border: 1px solid var(--bs-border-color);
}

.payment-summary span {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--bs-secondary-color);
}

.payment-summary b {
  display: block;
  font-size: 15px;
  color: var(--bs-emphasis-color);
}

.payment-amt {
  font-size: 26px;
  font-weight: 800;
  color: var(--bs-primary);
}

.paymethods {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  margin-bottom: 14px;
}

.payment-method {
  margin: 0;
  cursor: pointer;
}

.payment-method input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.payment-method-b {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  padding: 12px 6px;
  border: 1.5px solid var(--bs-border-color);
  border-radius: 10px;
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  transition: all var(--transition);
}

.payment-method-b i {
  font-size: 20px;
}

.payment-method input:checked+.payment-method-b {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
  background: var(--tint-primary);
}

.payment-secure {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 12px;
  font-size: 11.5px;
  color: #16a34a;
}

.payment-secure i {
  font-size: 15px;
}

/* ============================================================
   LIVE BUS TRACKING — enterprise fleet-ops modal
   ============================================================ */
.livemap-content {
  position: relative;
  overflow: hidden;
  border: 0;
  border-radius: 20px;
  box-shadow: 0 30px 70px -20px rgba(15, 23, 42, 0.5);
}

.livemap-close {
  position: absolute;
  top: 14px;
  right: 14px;
  z-index: 6;
  width: 34px;
  height: 34px;
  border-radius: 10px;
  border: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  color: #fff;
  background: rgba(17, 24, 39, 0.42);
  backdrop-filter: blur(6px);
  cursor: pointer;
  transition: background var(--transition), transform var(--transition);
}

.livemap-close:hover {
  background: rgba(17, 24, 39, 0.66);
  transform: rotate(90deg);
}

/* map */
.livemap-map {
  position: relative;
  height: 280px;
  background: linear-gradient(150deg, #e9eef8 0%, #dfe6f3 55%, #e6ebf6 100%);
}

[data-bs-theme=dark] .livemap-map,
[data-theme=dark] .livemap-map {
  background: linear-gradient(150deg, #0d1018 0%, #141826 60%, #10131d 100%);
}

.livemap-svg {
  width: 100%;
  height: 100%;
  display: block;
}

.livemap-blocks rect {
  fill: rgba(120, 135, 170, 0.15);
}

[data-bs-theme=dark] .livemap-blocks rect,
[data-theme=dark] .livemap-blocks rect {
  fill: rgba(255, 255, 255, 0.035);
}

.livemap-grid-lines path {
  stroke: rgba(120, 135, 170, 0.14);
  stroke-width: 1;
  fill: none;
}

[data-bs-theme=dark] .livemap-grid-lines path,
[data-theme=dark] .livemap-grid-lines path {
  stroke: rgba(255, 255, 255, 0.04);
}

.livemap-road {
  fill: none;
  stroke: rgba(88, 104, 140, 0.28);
  stroke-width: 11;
  stroke-linecap: round;
  stroke-linejoin: round;
}

[data-bs-theme=dark] .livemap-road,
[data-theme=dark] .livemap-road {
  stroke: rgba(255, 255, 255, 0.07);
}

.livemap-route {
  fill: none;
  stroke: #fff;
  stroke-width: 6;
  stroke-linecap: round;
  stroke-linejoin: round;
}

[data-bs-theme=dark] .livemap-route,
[data-theme=dark] .livemap-route {
  stroke: rgba(255, 255, 255, 0.16);
}

.livemap-prog {
  fill: none;
  stroke: url(#lmProgGrad);
  stroke-width: 6;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.livemap-node circle {
  fill: #fff;
  stroke: #9aa6c2;
  stroke-width: 3;
}

.livemap-node.done circle {
  fill: #4f46e5;
  stroke: #fff;
}

.livemap-school circle {
  fill: #16a34a;
  stroke: #fff;
  stroke-width: 2.5;
}

.livemap-school path {
  fill: none;
  stroke: #fff;
  stroke-width: 2.2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.livemap-vehicle .livemap-disc {
  fill: #4f46e5;
  stroke: #fff;
  stroke-width: 2.5;
}

.livemap-vehicle .livemap-pulse {
  fill: #4f46e5;
  opacity: 0.35;
  animation: sp-lm-ping 1.8s ease-out infinite;
  transform-box: fill-box;
  transform-origin: center;
}

.livemap-glyph path {
  fill: none;
  stroke: #fff;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

@keyframes sp-lm-ping {
  0% {
    transform: scale(0.5);
    opacity: 0.5;
  }

  100% {
    transform: scale(2.6);
    opacity: 0;
  }
}

/* map overlays */
.livemap-topbar {
  position: absolute;
  top: 14px;
  left: 14px;
  right: 60px;
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  z-index: 4;
}

.livemap-live {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 11px;
  border-radius: 999px;
  background: rgba(17, 24, 39, 0.55);
  color: #fff;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.06em;
  backdrop-filter: blur(6px);
}

.livemap-live .d {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #22c55e;
  box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.6);
  animation: sp-livepulse 1.4s infinite;
}

.livemap-route-tag {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 11px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.72);
  color: #4f46e5;
  font-size: 11px;
  font-weight: 700;
  backdrop-filter: blur(6px);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.12);
}

.livemap-route-tag i {
  font-size: 14px;
}

.livemap-recenter {
  position: absolute;
  top: 56px;
  right: 14px;
  z-index: 4;
  width: 38px;
  height: 38px;
  border-radius: 11px;
  border: 0;
  background: rgba(255, 255, 255, 0.9);
  color: #4f46e5;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 19px;
  box-shadow: 0 4px 14px -3px rgba(15, 23, 42, 0.3);
  backdrop-filter: blur(6px);
  cursor: pointer;
  transition: transform var(--transition);
}

.livemap-recenter:hover {
  transform: scale(1.08);
}

[data-bs-theme=dark] .livemap-route-tag,
[data-theme=dark] .livemap-route-tag,
[data-bs-theme=dark] .livemap-recenter,
[data-theme=dark] .livemap-recenter {
  background: rgba(30, 36, 54, 0.85);
  color: #a5b4fc;
}

/* floating driver card */
.livemap-driver {
  position: absolute;
  left: 14px;
  bottom: 20px;
  z-index: 4;
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 8px 10px;
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.82);
  backdrop-filter: blur(10px);
  box-shadow: 0 10px 30px -10px rgba(15, 23, 42, 0.4);
  border: 1px solid rgba(255, 255, 255, 0.6);
}

[data-bs-theme=dark] .livemap-driver,
[data-theme=dark] .livemap-driver {
  background: rgba(24, 29, 44, 0.82);
  border-color: rgba(255, 255, 255, 0.08);
}

.livemap-driver-info b {
  display: block;
  font-size: 13px;
  color: var(--bs-emphasis-color);
  line-height: 1.2;
}

.livemap-driver-info span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  gap: 3px;
}

.livemap-driver-info span i {
  font-size: 13px;
  color: #f59e0b;
}

.livemap-driver-info em {
  font-style: normal;
}

.livemap-driver-call {
  flex-shrink: 0;
  width: 38px;
  height: 38px;
  border-radius: 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  color: #fff;
  background: linear-gradient(135deg, #4f46e5, #7b61ff);
  box-shadow: 0 6px 14px -4px rgba(79, 70, 229, 0.6);
  transition: transform var(--transition);
}

.livemap-driver-call:hover {
  transform: scale(1.06);
  color: #fff;
}

/* sheet */
.livemap-sheet {
  position: relative;
  z-index: 3;
  margin-top: -18px;
  padding: 20px 20px 4px;
  background: var(--bs-body-bg);
  border-radius: 20px 20px 0 0;
}

.livemap-sheet::before {
  content: "";
  position: absolute;
  top: 8px;
  left: 50%;
  transform: translateX(-50%);
  width: 42px;
  height: 4px;
  border-radius: 999px;
  background: var(--bs-border-color);
}

.livemap-hero {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 14px;
  flex-wrap: wrap;
  margin-top: 6px;
}

.livemap-hero-eta .l {
  display: block;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-secondary-color);
  margin-bottom: 2px;
}

.livemap-hero-eta b {
  font-size: 34px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  line-height: 1;
  letter-spacing: -1px;
}

.livemap-hero-eta b em {
  font-style: normal;
  font-size: 15px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  margin-left: 4px;
}

.livemap-hero-meta {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
}

.livemap-hero-sub {
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.livemap-hero-sub i {
  font-size: 14px;
  vertical-align: -2px;
  margin-right: 2px;
}

.livemap-hero-sub strong {
  color: var(--bs-emphasis-color);
}

.livemap-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  font-weight: 700;
  padding: 4px 10px;
  border-radius: 999px;
}

.livemap-chip i {
  font-size: 13px;
}

.livemap-chip.ok {
  color: #16a34a;
  background: rgba(22, 163, 74, 0.12);
}

.livemap-chip.info {
  color: #4f46e5;
  background: rgba(79, 70, 229, 0.12);
}

.livemap-pbar {
  height: 8px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  overflow: visible;
  margin-top: 18px;
  position: relative;
}

.livemap-pbar>span {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: linear-gradient(90deg, #4f46e5, #7b61ff);
  position: relative;
}

.livemap-pbar>span::after {
  content: "";
  position: absolute;
  right: 0;
  top: 50%;
  transform: translate(50%, -50%);
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 0 0 3px #7b61ff, 0 2px 6px rgba(79, 70, 229, 0.5);
}

.livemap-pbar-x {
  display: flex;
  justify-content: space-between;
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-top: 9px;
}

.livemap-pbar-x i {
  font-size: 13px;
  vertical-align: -2px;
  margin: 0 3px;
}

.livemap-stops {
  margin-top: 18px;
  position: relative;
}

.livemap-stops::before {
  content: "";
  position: absolute;
  left: 10px;
  top: 16px;
  bottom: 16px;
  width: 2px;
  background: var(--bs-border-color);
}

.livemap-stop {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 8px 0;
  position: relative;
}

.livemap-stop .dot {
  position: relative;
  z-index: 1;
  flex-shrink: 0;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--bs-body-bg);
  border: 2px solid var(--bs-border-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.livemap-stop .dot i {
  font-size: 12px;
}

.livemap-stop.done .dot {
  background: #16a34a;
  border-color: #16a34a;
  color: #fff;
}

.livemap-stop.now .dot {
  border-color: #4f46e5;
  background: #4f46e5;
  box-shadow: 0 0 0 5px var(--tint-primary);
  animation: sp-livepulse 1.6s infinite;
}

.livemap-stop .dot.flag {
  background: var(--bs-secondary-bg);
  border-color: var(--bs-border-color);
  color: var(--bs-secondary-color);
}

.livemap-stop .tx {
  flex: 1;
  min-width: 0;
}

.livemap-stop .tx b {
  display: block;
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.livemap-stop .tx span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.livemap-stop.now .tx b {
  color: var(--bs-primary);
}

.livemap-stop .tm {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  flex-shrink: 0;
}

.livemap-stop em {
  flex-shrink: 0;
}

.livemap-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 10px;
  margin-top: 18px;
}

.livemap-stat {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 11px 10px;
  border: 1px solid var(--bs-border-color);
  border-radius: 13px;
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.livemap-stat:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.livemap-stat .ic {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  background: var(--tint-primary);
  color: var(--bs-primary);
  flex-shrink: 0;
}

.livemap-stat .ic.ok {
  background: rgba(22, 163, 74, 0.12);
  color: #16a34a;
}

.livemap-stat .tx b {
  display: block;
  font-size: 14px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
}

.livemap-stat .tx b em {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 500;
  color: var(--bs-secondary-color);
  margin-left: 1px;
}

.livemap-stat .tx span {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.livemap-foot {
  justify-content: flex-end;
  gap: 8px;
  align-items: center;
}

.livemap-updated {
  margin-right: auto;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.livemap-updated i {
  font-size: 14px;
}

@media (max-width: 575px) {
  .livemap-map {
    height: 220px;
  }

  .livemap-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .livemap-hero {
    align-items: flex-start;
  }

  .livemap-hero-meta {
    align-items: flex-start;
  }

  .livemap-driver {
    right: 14px;
  }
}

/* ============================================================
   LOGIN & ACCESS — credentials modal (premium)
   ============================================================ */
.credential-content {
  position: relative;
  overflow: hidden;
  border: 0;
  border-radius: 20px;
  box-shadow: 0 30px 70px -20px rgba(15, 23, 42, 0.5);
}

.credential-close {
  position: absolute;
  top: 16px;
  right: 16px;
  z-index: 4;
  width: 32px;
  height: 32px;
  border-radius: 9px;
  border: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  color: #fff;
  background: rgba(255, 255, 255, 0.18);
  cursor: pointer;
  transition: background var(--transition), transform var(--transition);
}

.credential-close:hover {
  background: rgba(255, 255, 255, 0.32);
  transform: rotate(90deg);
}

.credential-head {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 22px 22px 40px;
  color: #fff;
  background: linear-gradient(135deg, #4f46e5 0%, #7b61ff 60%, #9333ea 100%);
  position: relative;
}

.credential-head::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(120% 160% at 100% 0, rgba(255, 255, 255, 0.18), transparent 55%);
  pointer-events: none;
}

.credential-head-tx h4 {
  margin: 0;
  font-size: 18px;
  font-weight: 700;
  color: #fff;
}

.credential-head-tx span {
  font-size: 12.5px;
  opacity: 0.85;
}

.credential-body {
  padding: 0 20px 18px;
  margin-top: -24px;
  position: relative;
  z-index: 1;
}

.credential-status {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  padding: 12px 14px;
  border-radius: 14px;
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  box-shadow: 0 10px 26px -14px rgba(15, 23, 42, 0.3);
  margin-bottom: 16px;
}

.credential-status-on {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  font-weight: 700;
  color: #16a34a;
}

.credential-status-on .d {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #22c55e;
  box-shadow: 0 0 0 0 rgba(34, 197, 94, 0.6);
  animation: sp-livepulse 1.5s infinite;
}

.credential-status-meta {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-left: auto;
}

.credential-status-meta i {
  font-size: 14px;
  vertical-align: -2px;
  margin-right: 3px;
}

.credential-creds {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.credential-cred {
  border: 1px solid var(--bs-border-color);
  border-radius: 16px;
  padding: 14px;
  background: var(--bs-body-bg);
  border-top: 3px solid var(--bs-primary);
}

.credential-cred.c-parent {
  border-top-color: #4f46e5;
}

.credential-cred.c-student {
  border-top-color: #0d9488;
}

.credential-cred-top {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 12px;
}

.credential-cred-id {
  min-width: 0;
  flex: 1;
}

.credential-cred-id b {
  display: block;
  font-size: 13px;
  color: var(--bs-emphasis-color);
  line-height: 1.2;
}

.credential-cred-id span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.credential-cred-top .profile-pill {
  flex-shrink: 0;
  align-self: center;
}

.credential-cred-id b {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.credential-field {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 9px 10px;
  border-radius: 10px;
  background: var(--bs-secondary-bg);
  margin-top: 8px;
}

.credential-field .k {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  color: var(--bs-secondary-color);
  width: 88px;
  flex-shrink: 0;
}

.credential-field .k i {
  font-size: 14px;
}

.credential-field .v {
  flex: 1;
  min-width: 0;
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
  letter-spacing: 0.02em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.credential-field .v.pw {
  letter-spacing: 1.5px;
}

.credential-ib {
  flex-shrink: 0;
  width: 30px;
  height: 30px;
  border-radius: 8px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  cursor: pointer;
  transition: all var(--transition);
}

.credential-ib:hover {
  color: var(--bs-primary);
  border-color: var(--bs-primary);
  background: var(--tint-primary);
}

.credential-h {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--bs-secondary-color);
  margin: 18px 0 10px;
}

.credential-h i {
  font-size: 15px;
}

.credential-foot {
  border-top: 1px solid var(--bs-border-color);
}

@media (max-width: 575px) {
  .credential-creds {
    grid-template-columns: 1fr;
  }

  .credential-status-meta {
    margin-left: 0;
  }
}

.calendar-card .card-body {
  overflow-x: scroll;
}

.calendar-card .card-body .tab-content {
  min-width: 750px;
}

.routine .dt-pill {
  display: flex;
  align-items: center;
  gap: 8px;
}

.routine .dt-pill .dt-pill-dot {
  width: 6px;
  height: 6px;
  display: block;
  border-radius: 50%;
}

.dt-pill-dot {
  width: 6px;
  height: 6px;
  display: inline-flex;
  border-radius: 50%;
  margin: 0px 6px 0px 0px;
}

.hol-calendar-view {
  position: sticky;
  top: 80px;
}

.auth-logo .logo-dark {
  display: block !important;
}

.auth-logo .logo-white {
  display: none !important;
}

.attendance-types .attendance-type-list {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}

.attendance-types .attendance-type-list li {
  border: 1px solid #E9EDF4;
  border-radius: 5px;
  background: #FFF;
  padding: 8px 10px;
  color: #202C4B;
  display: flex;
  align-items: center;
  margin-right: 5px;
  margin-bottom: 5px;
}

.attendance-types .attendance-type-list li:last-child {
  margin-right: 0;
}

.attendance-types .attendance-type-list li .attendance-icon {
  width: 20px;
  height: 20px;
  border-radius: 5px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  margin-right: 5px;
}

.student-pomote-note {
  background: #F2F5FF;
  display: inline-flex;
  align-items: center;
  border-radius: 5px;
  padding: 6px 10px;
  border: 1px solid #1f3b60;
  margin-bottom: 20px;
}

@media (max-width: 575.98px) {
  .student-pomote-note {
    display: block;
  }
}

.student-pomote-note .info-icon {
  color: #1f3b60;
  margin-right: 5px;
}

.student-pomote-note p {
  color: #1f3b60;
  display: flex;
  align-items: center;
}

@media (max-width: 575.98px) {
  .student-pomote-note p {
    display: block;
  }
}

.student-pomote-note p span {
  font-weight: 600;
  margin-right: 3px;
}

@media (max-width: 575.98px) {
  .student-pomote-note p span {
    display: block;
  }
}

.promote-card-main {
  display: none;
}

.promote-card-main.promote-card-main-show {
  display: block;
  margin-bottom: 24px;
}

.promoted-year p {
  margin-bottom: 10px;
  color: #000;
}

#student_promote .modal-dialog {
  max-width: 400px;
}

#student_promote .modal-dialog h4 {
  font-size: 20px;
  margin-bottom: 5px;
}

#student_promote .modal-dialog p {
  margin-bottom: 24px;
}

.success-msg-toast {
  top: 70px;
  right: 30px;
}

.success-msg-toast .toast {
  border: 0;
}

.success-msg-toast .toast .toast-header {
  padding: 10px;
  border-radius: 5px;
  border-left: 2px solid #1ABE17;
}

.success-msg-toast .toast .toast-header p {
  margin-bottom: 0;
  display: inline-flex;
  align-items: center;
  color: #202C4B;
  font-size: 15px;
}

.success-msg-toast .toast .toast-header p span {
  font-size: 16px;
  margin-right: 5px;
  line-height: normal;
}

.success-msg-toast .toast .toast-header .toast-close span i {
  color: #CDD0D7;
  transition: 0.5s all;
}

.success-msg-toast .toast .toast-header .toast-close span i:hover {
  color: #E82646;
  transition: 0.5s all;
}

.date-pic {
  position: relative;
}

.date-pic .cal-icon {
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
}

.student-detail-info {
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 24px;
}

.student-detail-info .student-img {
  width: 45px;
  height: 45px;
  border-radius: 5px;
  display: flex;
  flex-shrink: 0;
  margin-right: 10px;
}

.student-detail-info .student-img img {
  width: 100%;
  border-radius: 5px;
}

.student-detail-info .name-info h6 {
  font-size: 16px;
}

.student-detail-info .name-info h6 span {
  display: block;
  font-weight: 400;
}

.year-picker {
  width: 125px;
  position: relative;
  margin-bottom: 10px;
  margin-right: 5px;
}

.year-picker input {
  height: 39px;
  padding-left: 30px;
}

.year-picker .icon {
  position: absolute;
  right: 10px;
  top: 50%;
  line-height: normal;
  transform: translateY(-50%);
}

.year-picker .cal-icon {
  position: absolute;
  left: 10px;
  top: 50%;
  line-height: normal;
  transform: translateY(-50%);
}

.table-filter-head.attendance-report-head .filter-head-left .form-filter {
  margin-right: 5px;
}

.table-filter-head.attendance-report-head .search-filter-btn {
  margin-bottom: 10px;
}

.table-filter-head.attendance-report-head .search-filter-btn .btn {
  padding: 7px 20px;
}

.add-more-timetable {
  background: #E9EDF4;
  padding: 24px;
  border-radius: 5px;
}

.add-more-timetable .tab-links {
  margin-bottom: 24px;
}

.add-more-timetable .tab-links li {
  padding: 0;
  margin-right: 24px;
}

.add-more-timetable .tab-links li:last-child {
  margin-right: 0;
}

.add-more-timetable .tab-links li a {
  background: transparent;
  font-weight: 400;
  color: #515B73;
  padding: 0 20px 10px;
  position: relative;
}

.add-more-timetable .tab-links li a::after {
  content: "";
  width: 100%;
  height: 3px;
  border-radius: 5px;
  background: #1f3b60;
  position: absolute;
  left: 0;
  bottom: 0;
  opacity: 0;
  transition: 0.5s all;
}

.add-more-timetable .tab-links li.active {
  background: transparent;
}

.add-more-timetable .tab-links li.active a {
  background: transparent;
}

.add-more-timetable .tab-links li.active a::after {
  opacity: 1;
  transition: 0.5s all;
}

.add-more-timetable .delete-time-table {
  width: 30px;
  height: 30px;
  background: #FDE9ED;
  color: #E82646;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 5px;
}

.add-more-timetable .delete-time-table:hover {
  background: #E82646;
  color: #FFF;
}

.exam-schedule-add {
  border-top: 1px solid #E9EDF4;
  padding-top: 15px;
}

.exam-schedule-add .delete-schedule-table {
  width: 30px;
  height: 30px;
  background: #FDE9ED;
  color: #E82646;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 5px;
}

.exam-schedule-add .delete-schedule-table:hover {
  background: #E82646;
  color: #FFF;
}

.percentage-field {
  display: none;
}

.percentage-field.percentage-field-show {
  display: block;
}

.fixed-field {
  display: none;
}

.fixed-field.fixed-field-show {
  display: block;
}

.modal-card-table {
  border: 1px solid #E9EDF4;
  padding: 15px;
  border-radius: 5px;
  margin-bottom: 24px;
}

.modal-card-table .modal-table-head {
  border-bottom: 1px solid #E9EDF4;
  margin-bottom: 24px;
  padding-bottom: 24px;
}

.class-detail-info {
  margin-bottom: 20px;
}

.class-detail-info p {
  margin-bottom: 5px;
}

.class-detail-info span {
  color: #202C4B;
}

.content.blank-page {
  min-height: 100vh;
}

.content.blank-page .page-header {
  border-bottom: 1px solid #E9EDF4;
}

.content.blank-page .page-title h4 {
  margin-bottom: 0;
}

.book-issue-details {
  border: 1px solid #E9EDF4;
  border-radius: 5px;
  padding: 24px 24px 10px;
  margin-top: 15px;
}

.book-issue-details .book-details-head {
  display: flex;
  align-items: center;
  border-bottom: 1px solid #E9EDF4;
  margin-bottom: 15px;
  padding-bottom: 15px;
  justify-content: space-between;
}

.book-issue-details .book-details-head h6 {
  font-weight: 400;
}

.book-issue-details .book-details-head h6 span {
  color: #515B73;
}

.book-taker-info {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
}

.book-taker-info li {
  margin-right: 24px;
  margin-bottom: 14px;
}

.book-taker-info li .student-img {
  width: 45px;
  height: 45px;
  border-radius: 5px;
  display: flex;
  flex-shrink: 0;
  margin-right: 8px;
}

.book-taker-info li .student-img img {
  border-radius: 5px;
  width: 100%;
}

.book-taker-info li h6 {
  font-weight: 400;
}

.book-taker-info li h6 span {
  margin-bottom: 0;
  color: #202C4B;
}

.book-taker-info li span {
  margin-bottom: 3px;
  color: #515B73;
  display: block;
}

.live-track-info {
  background: #FFF;
  padding: 24px 24px 10px;
  border-radius: 5px;
  margin-bottom: 24px;
}

.live-track-map iframe {
  width: 100%;
  height: 300px;
}

.assigned-driver .assigned-driver-info {
  display: flex;
  align-items: center;
  background: #E9EDF4;
  border-radius: 5px;
  padding: 15px;
  margin-top: 15px;
}

.assigned-driver .assigned-driver-info .driver-img {
  width: 32px;
  height: 32px;
  border-radius: 5px;
  display: flex;
  margin-right: 8px;
  flex-shrink: 0;
}

.assigned-driver .assigned-driver-info .driver-img img {
  width: 100%;
  border-radius: 5px;
}

.assigned-driver .assigned-driver-info h5 {
  font-weight: 400;
}

.student-leave-info ul {
  display: flex;
  align-items: center;
  background: #F4F6FA;
  border-radius: 5px;
  padding: 15px 15px 5px;
  flex-wrap: wrap;
  margin-bottom: 20px;
}

.student-leave-info ul li {
  min-width: 120px;
  margin-bottom: 10px;
}

.student-leave-info ul li h6 {
  font-weight: 400;
  margin-top: 3px;
}

.exchange-link {
  width: 54px;
  height: 54px;
  border-radius: 15px;
}

.all-content {
  display: none;
}

.all-content.active {
  display: block;
}

.rating i.filled {
  color: #EAB300;
}

.rating .rating-rate {
  color: #000;
  margin-left: 5px;
}

.overlay-img .shape-01 {
  position: absolute;
  left: 40%;
}

.overlay-img .shape-02 {
  position: absolute;
  left: 60%;
  bottom: 0;
}

.overlay-img .shape-03 {
  position: absolute;
  left: 80%;
}

.overlay-img .shape-04 {
  position: absolute;
  right: 15%;
  bottom: 0;
}

.event-scroll {
  max-height: 495px;
  overflow-y: auto;
}

.class-hover {
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

.class-hover:hover {
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

.class-hover:hover .avatar {
  animation: rotate 1s ease-in-out;
}

@keyframes rotate {
  0% {
    transform: rotateY(0deg);
  }

  50% {
    transform: rotateY(90deg);
  }

  100% {
    transform: rotateY(0deg);
  }
}

.btn-hover {
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

.btn-hover:hover {
  background-color: #202C4B !important;
  color: #FFF !important;
}

.todo-list .todo-strike-content h6 {
  text-decoration-line: line-through;
}

.dark-hover:hover {
  background: #1f3b60 !important;
  border-color: #1f3b60 !important;
  color: #FFF;
}

.line-ellipsis {
  -webkit-line-clamp: 2;
  line-clamp: 2;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}

.student-slider.owl-carousel .owl-stage-outer,
.teacher-slider.owl-carousel .owl-stage-outer {
  height: 100% !important;
}

.student-slider.owl-carousel .owl-stage-outer .owl-stage,
.teacher-slider.owl-carousel .owl-stage-outer .owl-stage {
  height: 100%;
}

.student-slider.owl-carousel .owl-stage-outer .owl-stage .owl-item,
.teacher-slider.owl-carousel .owl-stage-outer .owl-stage .owl-item {
  height: 100%;
}

.activity-scroll {
  max-height: 240px;
  overflow-y: auto;
}

.notice-widget {
  position: relative;
}

.notice-widget:before {
  position: absolute;
  content: "";
  width: 1px;
  height: calc(100% - 25px);
  background-color: #E9EDF4;
  top: 20px;
  inset-inline-start: 16px;
}

.student-slider.owl-carousel .owl-nav {
  position: absolute;
  left: 50%;
  top: 30%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
}

.student-slider.owl-carousel .owl-nav button {
  width: 24px;
  height: 24px;
  background: #FFF;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
}

.student-slider.owl-carousel .owl-nav button.owl-prev {
  margin-right: 5px;
}

.student-slider.owl-carousel .owl-nav button:hover {
  background: #1f3b60;
  color: #FFF;
}

.teacher-slider.owl-carousel .owl-nav {
  position: absolute;
  left: 50%;
  top: 30%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
}

.teacher-slider.owl-carousel .owl-nav button {
  width: 24px;
  height: 24px;
  background: #FFF;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: #202C4B;
}

.teacher-slider.owl-carousel .owl-nav button.owl-prev {
  margin-right: 5px;
}

.teacher-slider.owl-carousel .owl-nav button:hover {
  background: #1f3b60;
  color: #FFF;
}

.animate-card {
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
}

.animate-card:hover {
  -webkit-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  transition: all 0.5s ease;
  transform: translateY(-3px);
  -webkit-transform: translateY(-3px);
  -ms-transform: translateY(-3px);
}

.account-page {
  background: #FFF;
}

.login-wrapper {
  width: 100%;
  overflow: hidden;
  height: 100vh;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  position: relative;
}

.login-wrapper.basic-type {
  overflow: auto;
  height: 100%;
  justify-content: center;
}

.login-wrapper.basic-type::before {
  display: none;
}

.login-wrapper.basic-type .login-content {
  overflow: unset;
  height: 100%;
}

@media (max-width: 991.98px) {
  .login-wrapper.account-bg {
    background-image: none;
  }
}

.login-wrapper.account-bg .login-content {
  background: rgba(255, 255, 255, 0.9490196078);
  backdrop-filter: blur(10px);
  margin-left: auto;
}

.login-wrapper .btn-outline-light:hover {
  background-color: #FFF !important;
}

.login-background {
  position: relative;
}

.login-background::before {
  content: "";
  background: rgba(75, 111, 255, 0.6);
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  backdrop-filter: blur(6px);
}

@media (max-width: 991.98px) {
  .login-background::before {
    display: none;
  }
}

.login-background .card>div {
  width: 70%;
}

.hover-a {
  position: relative;
  color: #1f3b60;
}

.hover-a:after {
  content: "";
  height: 2px;
  width: 100%;
  background: #1f3b60;
  transform: scale(0);
  -webkit-transform: scale(0);
  -ms-transform: scale(0);
  -webkit-transition: all 0.3s ease;
  -ms-transition: all 0.3s ease;
  transition: all 0.3s ease;
  position: absolute;
  bottom: -3px;
  left: 0;
}

.hover-a:hover:after {
  transform: scale(1);
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
}

.hover-a:hover {
  color: #1f3b60;
}

.login-wrapper.login-new {
  overflow: auto;
  height: 100vh;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  position: relative;
}

.login-wrapper.login-new .login-shapes {
  position: relative;
}

@media (max-width: 991.98px) {
  .login-wrapper.login-new .login-shapes {
    display: none;
  }
}

.login-wrapper.login-new .login-shapes .login-right-shape {
  position: fixed;
  top: 0;
  left: 0;
}

.login-wrapper.login-new .login-shapes .login-left-shape {
  position: fixed;
  bottom: 0;
  right: 0;
}

.login-wrapper.login-new .login-content.user-login {
  position: relative;
}

.login-wrapper.login-new .login-content.user-login .login-userset form .otp-box {
  margin-bottom: 34px;
}

.login-wrapper.login-new .login-content.user-login .login-userset form .otp-box input {
  width: 74px;
  height: 74px;
  background: #FFF;
  border: 1px solid #E9EDF4;
  border-radius: 8px;
  text-align: center;
  margin-right: 15px;
  font-weight: 700;
  font-size: 26px;
  color: #000;
  outline: none;
}

@media (max-width: 575.98px) {
  .login-wrapper.login-new .login-content.user-login .login-userset form .otp-box input {
    width: 40px;
    height: 40px;
  }
}

.login-wrapper.login-new .copyright-text {
  margin: 40px 0;
  text-align: center;
}

@media (max-width: 767.98px) {
  .login-wrapper.login-new .copyright-text {
    margin: 0 0 30px;
  }
}

.login-wrapper.login-new .copyright-text p {
  font-weight: 500;
  color: #202C4B;
  margin-bottom: 0;
}

.login-wrapper.login-new .lock-screen-list {
  text-align: center;
}

.login-wrapper.login-new .lock-screen-list .nav {
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
}

.login-wrapper.login-new .lock-screen-list .nav li {
  margin-right: 20px;
}

.login-wrapper.login-new .lock-screen-list .nav li:last-child {
  margin-right: 0;
}

.login-wrapper.login-new .lock-screen-list .nav li a {
  font-weight: 500;
}

.login-wrapper.login-new .lock-screen-list .copyright-text {
  margin: 20px 0 40px;
}

@media (max-width: 767.98px) {
  .login-wrapper.login-new .lock-screen-list .copyright-text {
    margin: 20px 0 30px;
  }
}

.login-wrapper.login-new .lock-screen-list .language-dropdown .dropdown-toggle {
  border: 0;
  padding: 0;
  border-radius: 5px;
}

.login-wrapper.login-new .lock-screen-list .language-dropdown .dropdown-toggle:after {
  border-top: 0;
  border-left: 0;
  border-bottom: 2px solid #9CA1AF;
  border-right: 2px solid #9CA1AF;
  content: "";
  display: inline-block;
  pointer-events: none;
  width: 8px;
  height: 8px;
  vertical-align: 2px;
  transform-origin: 66% 66%;
  -webkit-transform-origin: 66% 66%;
  -ms-transform-origin: 66% 66%;
  -webkit-transition: all 0.2s ease;
  -ms-transition: all 0.2s ease;
  transition: all 0.2s ease;
  transform: rotate(45deg);
  -webkit-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
}

.login-wrapper.login-new .lock-screen-list .language-dropdown .dropdown-toggle[aria-expanded=true]:after {
  transform: rotate(-135deg);
  -webkit-transform: rotate(-135deg);
  -ms-transform: rotate(-135deg);
}

.login-wrapper.login-new .lock-screen-list .language-dropdown .dropdown-menu {
  padding: 15px;
  background: #FFF;
  box-shadow: 0px 4px 13px -2px rgba(19, 16, 34, 0.06);
  border: 1px solid #F1FAFB;
}

.login-wrapper.login-new .lock-screen-list .language-dropdown .dropdown-menu .dropdown-item {
  padding: 5px 10px;
  background: #FFF;
  border-radius: 5px;
  display: block;
}

.login-wrapper.login-new .lock-screen-list .language-dropdown .dropdown-menu .dropdown-item:hover {
  background: #F8FAFC;
}

.login-or {
  text-align: center;
  font-size: 15px;
  color: #515B73;
  font-weight: 500;
  margin: 5px 0;
  padding: 10px 0;
  position: relative;
}

.login-or::after {
  width: 100%;
  content: "";
  border-top: 1px solid #CDD0D7;
  position: absolute;
  top: 50%;
  right: 0;
}

.login-or::before {
  width: 100%;
  content: "";
  border-top: 1px solid #CDD0D7;
  position: absolute;
  top: 50%;
  left: 0;
}

.login-or .span-or {
  background-color: #FFF;
  padding: 0 10px;
  z-index: 9;
  position: relative;
}

.authen-overlay-item {
  background: rgba(255, 255, 255, 0.1019607843);
  border-radius: 25px;
  padding: 24px;
  position: relative;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  max-width: 570px;
}

.comming-soon-pg {
  height: 100%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  justify-content: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  position: relative;
  z-index: 1;
  margin: 50px 0;
}

.comming-soon-pg .bg-img .top-bg {
  position: absolute;
  top: 0;
  left: 30px;
  z-index: -1;
}

.comming-soon-pg .bg-img .bottom-bg {
  position: absolute;
  right: 30px;
  bottom: 0;
  z-index: -1;
}

@media (max-width: 767.98px) {
  .comming-soon-pg .bg-img {
    display: none;
  }
}

@media (max-width: 991.98px) {
  .comming-soon-pg {
    height: 100%;
  }
}

.error-img {
  max-width: 450px;
}

@media (max-width: 1399.98px) {
  .error-img {
    max-width: 260px;
  }
}

.invoice-info .note-editable {
  background: #FFF;
  min-height: 80px;
}

.invoice-amount-details {
  background: #FFF;
  padding: 24px;
  border-radius: 5px;
  margin-bottom: 24px;
}

.invoice-amount-details ul li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 15px;
}

.invoice-amount-details ul li h6 {
  font-size: 15px;
}

.invoice-amount-details ul li:last-child {
  padding: 15px 0;
  border-top: 1px solid #E9EDF4;
  border-bottom: 1px solid #E9EDF4;
}

.service-upload {
  border: 2px dashed #E9EDF4;
  text-align: center;
  background-color: #FFF;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 38px;
}

.service-upload span {
  font-size: 15px;
  color: #515B73;
  display: block;
}

.service-upload input[type=file] {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  cursor: pointer;
}

.invoice-modal .modal-content {
  background: #FFF;
  padding: 20px;
}

.invoice-popup-head {
  background: #F4F6FA;
  padding: 24px 24px 14px;
  flex-wrap: wrap;
}

.invoice-popup-head img {
  margin-bottom: 10px;
}

.invoice-popup-head .popup-title {
  margin-bottom: 10px;
}

.invoice-popup-head .popup-title h2 {
  background: linear-gradient(270.14deg, #7638FF -0.04%, #3698FF 100%);
  background-clip: text;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  margin-bottom: 10px;
}

.tax-info {
  margin-top: 30px;
}

.tax-invoice-info {
  background: #F4F6FA;
  padding: 10px;
  margin-bottom: 15px;
}

.tax-invoice-info h4 {
  font-weight: 500;
}

.total-amount-tax {
  display: flex;
  justify-content: end;
  align-items: center;
  flex-wrap: wrap;
}

.total-amount-tax ul {
  min-width: 200px;
  text-align: right;
  margin-bottom: 0;
}

.total-amount-tax ul li {
  font-size: 16px;
  margin-bottom: 8px;
}

.total-amount-tax ul.total-amount li {
  font-size: 18px;
  font-weight: 600;
}

.payment-info {
  border-top: 1px solid #E9EDF4;
  border-bottom: 1px solid #E9EDF4;
}

.payment-info h6 {
  margin-bottom: 10px;
}

.term-condition-invoice {
  border-bottom: 1px solid #E9EDF4;
}

.term-condition-invoice p {
  font-weight: 500;
  color: #202C4B;
}

.note-toolbar {
  background: #FFF;
  border-color: #E9EDF4;
}

.note-editor.note-airframe,
.note-editor.note-frame {
  border-color: #E9EDF4;
}

.note-editor.note-airframe .note-statusbar,
.note-editor.note-frame .note-statusbar {
  border-top: 0;
  background-color: #FFF;
}

.invoice-logo-dark {
  display: block;
}

.invoice-logo-white {
  display: none;
}

.invoice-logo-white img {
  height: 42px;
}

.dash-select-student {
  margin-bottom: 10px;
}

.dash-select-student .avatar {
  border: 1px solid transparent;
}

.dash-select-student .avatar:hover {
  border-color: #1f3b60;
}

.dash-select-student .avatar.active {
  border-color: #1f3b60;
}

/*-----------------
    Student Attendance — Attendance Command Center
    Scoped to `.student-attendance`. Layout uses Bootstrap grid + utilities;
    only components Bootstrap has no equivalent for are defined here.
-----------------*/
.student-attendance {
  --attendance-present: var(--bs-success);
  --attendance-present-s: rgba(22, 163, 74, 0.1);
  --attendance-late: var(--bs-warning);
  --attendance-late-s: rgba(217, 119, 6, 0.1);
  --attendance-absent: var(--bs-danger);
  --attendance-absent-s: rgba(225, 29, 72, 0.1);
  --attendance-leave: var(--bs-info);
  --attendance-leave-s: rgba(8, 145, 178, 0.1);
  color: var(--bs-body-color);
  font-feature-settings: "tnum" 1;
}

.student-attendance .is-present {
  --accent: var(--bs-success);
  --accent-soft: var(--attendance-present-s);
}

.student-attendance .is-late {
  --accent: var(--bs-warning);
  --accent-soft: var(--attendance-late-s);
}

.student-attendance .is-warn {
  --accent: var(--bs-warning);
  --accent-soft: var(--attendance-late-s);
}

.student-attendance .is-absent {
  --accent: var(--bs-danger);
  --accent-soft: var(--attendance-absent-s);
}

.student-attendance .is-leave {
  --accent: var(--attendance-leave);
  --accent-soft: var(--attendance-leave-s);
}

.student-attendance .is-info {
  --accent: var(--attendance-leave);
  --accent-soft: var(--attendance-leave-s);
}

.student-attendance .is-violet {
  --accent: var(--accent-purple);
  --accent-soft: var(--tint-purple);
}

.student-attendance .is-primary {
  --accent: var(--bs-primary);
  --accent-soft: var(--tint-primary);
}

.student-attendance .is-muted {
  --accent: var(--bs-tertiary-color);
  --accent-soft: var(--bs-tertiary-bg);
}

.student-attendance :focus-visible {
  outline: 2px solid var(--bs-primary);
  outline-offset: 2px;
  border-radius: 8px;
}

.student-attendance .sub-text {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.muted-text {
  color: var(--bs-tertiary-color);
}

.warning-note {
  color: var(--bs-warning);
}

.student-attendance .toolbar-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 8px 13px;
  font-size: 12.5px;
  font-weight: 600;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color);
  cursor: pointer;
  white-space: nowrap;
  text-decoration: none;
  transition: all var(--transition);
}

.student-attendance .toolbar-button i {
  font-size: 15px;
}

.student-attendance .toolbar-button:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.student-attendance .toolbar-icon-button {
  width: 30px;
  height: 30px;
  flex-shrink: 0;
  border-radius: 8px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  cursor: pointer;
  transition: all var(--transition);
}

.student-attendance .toolbar-icon-button:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.student-attendance .toolbar-icon-button.is-ok:hover {
  border-color: var(--bs-success);
  color: var(--bs-success);
}

.student-attendance .toolbar-icon-button.is-no:hover {
  border-color: var(--bs-danger);
  color: var(--bs-danger);
}

.student-attendance .status-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 9px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 700;
  line-height: 1.4;
  white-space: nowrap;
  color: var(--accent);
  background: var(--accent-soft);
}

.student-attendance .status-chip i {
  font-size: 12px;
}

.student-attendance .status-chip.is-live {
  color: var(--bs-danger);
  background: var(--attendance-absent-s);
}

.student-attendance .status-chip.is-live::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentcolor;
  animation: att-pulse 1.6s infinite;
}

.student-attendance .choice-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
}

.student-attendance .choice-chip i {
  font-size: 13px;
  color: var(--bs-primary);
}

.student-attendance .choice-chip.is-open {
  color: var(--bs-success);
  border-color: var(--attendance-present-s);
}

.student-attendance .choice-chip.is-open i {
  color: var(--bs-success);
}

.student-attendance .live-flag-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
  background: var(--bs-success);
  box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.5);
  animation: att-pulse 1.6s infinite;
}

@keyframes att-pulse {
  0% {
    box-shadow: 0 0 0 0 rgba(22, 163, 74, 0.5);
  }

  100% {
    box-shadow: 0 0 0 7px rgba(22, 163, 74, 0);
  }
}

.student-attendance .side-panel-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 13px;
}

.student-attendance .side-panel-head>b {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.student-attendance .side-panel-head>b i {
  font-size: 16px;
  color: var(--bs-primary);
}

/*-----------------
    Command hero
-----------------*/
.attendance-hero-main {
  position: relative;
  overflow: hidden;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  padding: 20px;
  background: radial-gradient(120% 150% at 100% 0, rgba(31, 59, 96, 0.07), transparent 48%), linear-gradient(180deg, var(--bs-body-bg), var(--bs-secondary-bg));
}

.attendance-hero-title {
  font-size: 24px;
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--bs-emphasis-color);
  margin: 4px 0 8px;
}

.attendance-hero-rate {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 14px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.attendance-hero-rate b {
  display: block;
  font-size: 22px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--bs-emphasis-color);
  line-height: 1.05;
}

.attendance-hero-rate span {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.attendance-rail {
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px solid var(--bs-border-color);
}

.attendance-rail-done {
  font-size: 12px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.attendance-rail-bar {
  display: flex;
  gap: 2px;
  height: 12px;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
  overflow: hidden;
}

.attendance-rail-bar .seg {
  width: 0;
  background: var(--accent);
  transition: width 1.1s cubic-bezier(0.22, 1, 0.36, 1);
}

.attendance-rail-keys {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 10px;
}

.meta-key {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border-radius: 999px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  font-size: 11px;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
}

.meta-key i {
  width: 8px;
  height: 8px;
  border-radius: 3px;
  background: var(--accent);
}

.meta-key b {
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.meta-key:hover {
  border-color: var(--accent);
}

.meta-key.is-active {
  background: var(--accent-soft);
  border-color: var(--accent);
}

.ai-panel-title {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

/*-----------------
    Session board + quick actions
-----------------*/
.attendance-sessions {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.attendance-session {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 10px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.attendance-session .p {
  width: 24px;
  height: 24px;
  flex-shrink: 0;
  border-radius: 7px;
  display: grid;
  place-items: center;
  font-size: 11px;
  font-weight: 800;
  color: var(--bs-tertiary-color);
  background: var(--bs-tertiary-bg);
}

.attendance-session div {
  flex: 1;
  min-width: 0;
}

.attendance-session b {
  display: block;
  font-size: 12px;
  color: var(--bs-emphasis-color);
}

.attendance-session span:not(.p):not(.status-chip) {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.attendance-session.is-done .p {
  background: var(--bs-success);
  color: #fff;
}

.attendance-session.is-now {
  border-color: var(--bs-warning);
  background: var(--attendance-late-s);
}

.attendance-session.is-now .p {
  background: var(--bs-warning);
  color: #fff;
}

.student-attendance .quick-actions {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  width: 100%;
  height: 100%;
  padding: 12px 6px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  cursor: pointer;
  text-align: center;
  transition: all var(--transition);
}

.student-attendance .quick-actions .ic {
  width: 32px;
  height: 32px;
  border-radius: 10px;
  display: grid;
  place-items: center;
  font-size: 17px;
  color: var(--accent);
  background: var(--accent-soft);
}

.student-attendance .quick-actions b {
  font-size: 10.5px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
  line-height: 1.25;
}

.student-attendance .quick-actions:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
  border-color: var(--accent);
}

.student-attendance .filter-bar {
  position: sticky;
  top: 0;
  z-index: 10;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 12px 14px;
}

.student-attendance .view-toggle {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 11px;
  border-radius: 999px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
}

.student-attendance .view-toggle i {
  font-size: 14px;
}

.student-attendance .view-toggle span {
  padding: 1px 6px;
  border-radius: 999px;
  font-size: 10px;
  font-weight: 700;
  background: var(--bs-tertiary-bg);
  color: var(--bs-tertiary-color);
}

.student-attendance .view-toggle:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.student-attendance .view-toggle.is-on {
  background: var(--bs-primary);
  border-color: transparent;
  color: #fff;
}

.student-attendance .view-toggle.is-on span {
  background: rgba(255, 255, 255, 0.18);
  color: #fff;
}

.student-attendance .view-toggle.is-add {
  border-style: dashed;
}

.student-attendance .search-field {
  position: relative;
  flex: 1;
  min-width: 230px;
  display: flex;
  align-items: center;
}

.student-attendance .search-field>i {
  position: absolute;
  left: 11px;
  font-size: 16px;
  color: var(--bs-tertiary-color);
}

.student-attendance .search-field input {
  width: 100%;
  padding: 9px 40px 9px 34px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-tertiary-bg);
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.student-attendance .search-field input:focus {
  outline: none;
  border-color: var(--bs-primary);
  background: var(--bs-body-bg);
}

.student-attendance .search-field kbd {
  position: absolute;
  right: 10px;
  padding: 1px 6px;
  border-radius: 5px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  font-size: 10px;
  color: var(--bs-tertiary-color);
}

.student-attendance .search-field.search-field-sm {
  flex: 0 0 auto;
  min-width: 180px;
}

.student-attendance .search-field.search-field-sm input {
  padding: 6px 11px 6px 31px;
  font-size: 12px;
}

.student-attendance .search-field.search-field-sm>i {
  left: 10px;
  font-size: 15px;
}

.student-attendance .chip-row {
  padding-top: 11px;
  border-top: 1px solid var(--bs-border-color);
}

.student-attendance .clear-button {
  border: 0;
  background: none;
  padding: 4px 6px;
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-primary);
  cursor: pointer;
}

.student-attendance .record-grid-scroll {
  overflow-x: auto;
  overflow-y: auto;
  max-height: 640px;
}

.student-attendance .record-grid {
  width: 100%;
  min-width: 1420px;
  border-collapse: separate;
  border-spacing: 0;
}

.student-attendance .record-grid thead th {
  position: sticky;
  top: 0;
  z-index: 3;
  background: var(--bs-tertiary-bg);
  border-bottom: 1px solid var(--bs-border-color);
  padding: 11px 12px;
  text-align: left;
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-tertiary-color);
  white-space: nowrap;
}

.student-attendance .record-grid thead th.is-pin,
.student-attendance .record-grid thead th.is-pin-end {
  z-index: 4;
}

.student-attendance .record-grid tbody td {
  padding: 12px;
  border-bottom: 1px solid var(--bs-border-color);
  font-size: 12.5px;
  vertical-align: middle;
}

.student-attendance .record-grid td.is-pin,
.student-attendance .record-grid td.is-pin-end {
  position: sticky;
  z-index: 2;
  background: var(--bs-body-bg);
}

.student-attendance .record-grid .record-col-check {
  left: 0;
  width: 44px;
}

.student-attendance .record-grid .record-col-student {
  left: 44px;
  min-width: 240px;
  box-shadow: 1px 0 0 var(--bs-border-color);
}

.student-attendance .record-grid .record-col-actions {
  right: 0;
  box-shadow: -1px 0 0 var(--bs-border-color);
}

.student-attendance .record-grid.is-dense tbody td {
  padding: 7px 12px;
}

.student-attendance .record-row {
  transition: background var(--transition);
}

.student-attendance .record-row:hover td {
  background: var(--bs-tertiary-bg);
}

.student-attendance .record-row.is-sel td {
  background: var(--tint-primary);
}

.student-attendance .row-expander {
  width: 22px;
  height: 22px;
  margin-right: 8px;
  border-radius: 6px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-grid;
  place-items: center;
  font-size: 14px;
  cursor: pointer;
  vertical-align: middle;
  transition: all var(--transition);
}

.student-attendance .row-expander i {
  transition: transform var(--transition);
}

.student-attendance .row-expander:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.student-attendance .row-expander[aria-expanded=true] {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.student-attendance .row-expander[aria-expanded=true] i {
  transform: rotate(90deg);
}

.student-attendance .student-cell {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  vertical-align: middle;
}

.student-attendance .student-cell img {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  object-fit: cover;
  flex-shrink: 0;
}

.student-attendance .student-cell b {
  display: block;
  font-size: 12.5px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
}

.student-attendance .student-cell em {
  font-style: normal;
  font-size: 10.5px;
  color: var(--bs-tertiary-color);
}

.time-cell {
  display: inline-flex;
  flex-direction: column;
}

.time-cell em {
  font-style: normal;
  font-size: 10px;
  color: var(--bs-tertiary-color);
}

.student-attendance .remark-note {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  display: inline-block;
  max-width: 170px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.attendance-percent {
  font-size: 12.5px;
  font-weight: 800;
  padding: 3px 8px;
  border-radius: 7px;
}

.attendance-percent.is-good {
  color: var(--bs-success);
  background: var(--attendance-present-s);
}

.attendance-percent.is-warn {
  color: var(--bs-warning);
  background: var(--attendance-late-s);
}

.attendance-percent.is-bad {
  color: var(--bs-danger);
  background: var(--attendance-absent-s);
}

.student-attendance .record-row:hover .record-row-actions,
.record-row:focus-within .record-row-actions {
  opacity: 1;
}

/*-----------------
    Row expansion
-----------------*/
.detail-drawer-row>td {
  padding: 0 !important;
  background: var(--bs-secondary-bg);
  border-bottom: 1px solid var(--bs-border-color);
}

.student-attendance .detail-drawer {
  padding: 18px;
  margin: 0;
}

.detail-drawer-id {
  text-align: center;
  padding: 16px 12px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.detail-drawer-id img {
  width: 76px;
  height: 76px;
  border-radius: 20px;
  object-fit: cover;
  margin-bottom: 9px;
}

.detail-drawer-id b {
  display: block;
  font-size: 14px;
  color: var(--bs-emphasis-color);
}

.detail-drawer-id>span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.detail-drawer-list {
  display: flex;
  flex-direction: column;
  gap: 7px;
}

.detail-drawer-line {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 8px 10px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.detail-drawer-line>img {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  object-fit: cover;
  flex-shrink: 0;
}

.detail-drawer-line>span {
  flex: 1;
  min-width: 0;
}

.detail-drawer-line b {
  display: block;
  font-size: 12px;
  color: var(--bs-emphasis-color);
}

.detail-drawer-line em {
  font-style: normal;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.detail-drawer-icon {
  width: 30px;
  height: 30px;
  flex-shrink: 0;
  border-radius: 9px;
  display: grid;
  place-items: center;
  font-size: 15px;
  color: var(--accent);
  background: var(--accent-soft);
}

.student-attendance .stat-fact {
  padding: 9px 8px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  border-left: 3px solid var(--accent);
  background: var(--bs-body-bg);
  text-align: center;
}

.student-attendance .stat-fact b {
  display: block;
  font-size: 16px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.student-attendance .stat-fact span {
  font-size: 10px;
  color: var(--bs-secondary-color);
}

/*-----------------
    Heatmap
-----------------*/
.attendance-heatmap {
  display: grid;
  grid-template-columns: repeat(15, 1fr);
  gap: 4px;
}

.attendance-heatmap span {
  aspect-ratio: 1;
  border-radius: 4px;
  background: var(--bs-tertiary-bg);
}

.attendance-heatmap span.l1 {
  background: rgba(22, 163, 74, 0.25);
}

.attendance-heatmap span.l2 {
  background: rgba(22, 163, 74, 0.45);
}

.attendance-heatmap span.l3 {
  background: rgba(22, 163, 74, 0.68);
}

.attendance-heatmap span.l4 {
  background: rgba(22, 163, 74, 0.9);
}

.attendance-heatmap span.is-absent {
  background: rgba(225, 29, 72, 0.55);
}

.attendance-heatmap.attendance-heatmap-lg {
  grid-template-columns: repeat(30, 1fr);
}

.attendance-heatmap-legend {
  display: flex;
  align-items: center;
  gap: 5px;
  margin-top: 8px;
}

.attendance-heatmap-legend span {
  font-size: 10px;
  color: var(--bs-tertiary-color);
}

.attendance-heatmap-legend i {
  width: 11px;
  height: 11px;
  border-radius: 3px;
}

.attendance-heatmap-legend i.l1 {
  background: rgba(22, 163, 74, 0.25);
}

.attendance-heatmap-legend i.l2 {
  background: rgba(22, 163, 74, 0.45);
}

.attendance-heatmap-legend i.l3 {
  background: rgba(22, 163, 74, 0.68);
}

.attendance-heatmap-legend i.l4 {
  background: rgba(22, 163, 74, 0.9);
}

.attendance-heatmap-legend i.is-absent {
  background: rgba(225, 29, 72, 0.55);
}

.attendance-legend {
  display: flex;
  gap: 12px;
}

.attendance-legend span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.attendance-legend i {
  width: 14px;
  height: 3px;
  border-radius: 2px;
  background: var(--accent);
}

.student-attendance .chart-area {
  display: block;
  width: 100%;
  height: 180px;
}

.chart-area-grid path {
  stroke: var(--bs-border-color);
  stroke-width: 1;
  fill: none;
}

.chart-area-fill {
  fill: url(#attFill);
}

.chart-area-line {
  fill: none;
  stroke: var(--bs-success);
  stroke-width: 2.6;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.chart-area-dots circle {
  fill: var(--bs-body-bg);
  stroke: var(--bs-success);
  stroke-width: 2.4;
}

.chart-area-dots circle.is-last {
  fill: var(--bs-success);
}

.attendance-compare {
  display: flex;
  flex-direction: column;
  gap: 9px;
}

.attendance-compare-row {
  display: grid;
  grid-template-columns: 78px 1fr 38px;
  align-items: center;
  gap: 10px;
}

.attendance-compare-row .n {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

.attendance-compare-row .tr {
  height: 8px;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
  overflow: hidden;
}

.attendance-compare-row .tr>span {
  display: block;
  height: 100%;
  width: 0;
  border-radius: 999px;
  background: var(--accent);
  transition: width 1.1s cubic-bezier(0.22, 1, 0.36, 1);
}

.attendance-compare-row>b {
  font-size: 11.5px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  text-align: right;
}

.student-attendance .bar-chart {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 8px;
  align-items: end;
  height: 132px;
}

.student-attendance .bar-chart .b {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  gap: 5px;
  height: 100%;
}

.student-attendance .bar-chart .v {
  font-size: 10.5px;
  font-weight: 700;
  color: var(--bs-secondary-color);
}

.student-attendance .bar-chart .col {
  width: 100%;
  max-width: 32px;
  height: 0;
  border-radius: 7px 7px 3px 3px;
  background: var(--accent);
  opacity: 0.55;
  transition: height 0.9s cubic-bezier(0.22, 1, 0.36, 1);
}

.student-attendance .bar-chart .c {
  font-size: 10px;
  color: var(--bs-tertiary-color);
}

.student-attendance .bar-chart .is-peak .col {
  opacity: 1;
}

.student-attendance .bar-chart .is-peak .v {
  color: var(--bs-emphasis-color);
}

.student-attendance .timeline-row-item {
  display: grid;
  grid-template-columns: 42px 14px 1fr;
  align-items: start;
  gap: 6px;
  padding-bottom: 15px;
}

.student-attendance .timeline-row-item:last-child {
  padding-bottom: 0;
}

.student-attendance .timeline-row-item .tm {
  font-size: 10.5px;
  font-weight: 650;
  color: var(--bs-secondary-color);
  text-align: right;
  padding-top: 1px;
}

.student-attendance .timeline-row-item .pt {
  position: relative;
  width: 14px;
}

.student-attendance .timeline-row-item .pt::before {
  content: "";
  position: absolute;
  left: 3px;
  top: 4px;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--bs-body-bg);
  border: 2px solid var(--accent);
  z-index: 1;
}

.student-attendance .timeline-row-item:not(:last-child) .pt::after {
  content: "";
  position: absolute;
  left: 6.5px;
  top: 15px;
  bottom: -15px;
  width: 2px;
  background: var(--bs-border-color);
}

.student-attendance .timeline-row-item .bd b {
  display: block;
  font-size: 12px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
  line-height: 1.35;
}

.student-attendance .timeline-row-item .bd p {
  margin: 2px 0 0;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.notification-group .lbl {
  display: block;
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--bs-tertiary-color);
  margin-bottom: 7px;
}

.student-attendance .note-tag {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 10px;
  margin-bottom: 7px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  border-left: 3px solid var(--accent);
  background: var(--bs-body-bg);
  transition: transform var(--transition);
}

.student-attendance .note-tag:last-child {
  margin-bottom: 0;
}

.student-attendance .note-tag:hover {
  transform: translateX(2px);
}

.student-attendance .note-tag .ic {
  width: 28px;
  height: 28px;
  flex-shrink: 0;
  border-radius: 8px;
  display: grid;
  place-items: center;
  font-size: 15px;
  color: var(--accent);
  background: var(--accent-soft);
}

.student-attendance .note-tag .bd {
  flex: 1;
  min-width: 0;
}

.student-attendance .note-tag .bd b {
  display: block;
  font-size: 11.5px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
}

.student-attendance .note-tag .bd p {
  margin: 1px 0 0;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.student-attendance .pager-page {
  min-width: 30px;
  height: 30px;
  padding: 0 8px;
  border-radius: 8px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  font-size: 12px;
  font-weight: 650;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
}

.student-attendance .pager-page:hover:not(:disabled) {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.student-attendance .pager-page.is-on {
  background: var(--bs-primary);
  border-color: transparent;
  color: #fff;
}

.student-attendance .pager-page:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

.student-attendance .bulk-bar-inner {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  padding: 10px 14px;
  border-radius: 999px;
  background: var(--bs-emphasis-color);
  color: #fff;
  box-shadow: 0 18px 40px -12px rgba(16, 24, 40, 0.55);
  pointer-events: auto;
  animation: att-rise 0.28s cubic-bezier(0.22, 1, 0.36, 1);
}

.student-attendance .bulk-bar-inner .toolbar-button {
  background: rgba(255, 255, 255, 0.1);
  border-color: rgba(255, 255, 255, 0.16);
  color: #fff;
}

.student-attendance .bulk-bar-inner .toolbar-button:hover {
  background: rgba(255, 255, 255, 0.2);
  border-color: rgba(255, 255, 255, 0.3);
  color: #fff;
}

@keyframes att-rise {
  from {
    opacity: 0;
    transform: translateY(14px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

/*-----------------
    Modal helpers
-----------------*/
.attendance-mark {
  display: flex;
  flex-direction: column;
  gap: 7px;
}

.attendance-mark-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 11px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.attendance-mark-row img {
  width: 32px;
  height: 32px;
  border-radius: 9px;
  object-fit: cover;
  flex-shrink: 0;
}

.attendance-mark-row>span {
  flex: 1;
  min-width: 0;
}

.attendance-mark-row b {
  display: block;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.attendance-mark-row em {
  font-style: normal;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.toggle-switch {
  display: inline-flex;
  padding: 3px;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
  border: 1px solid var(--bs-border-color);
}

.toggle-switch button {
  width: 30px;
  height: 24px;
  border: 0;
  background: none;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 800;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
}

.toggle-switch button[data-mark-set=present].is-on {
  background: var(--bs-success);
  color: #fff;
}

.toggle-switch button[data-mark-set=late].is-on {
  background: var(--bs-warning);
  color: #fff;
}

.toggle-switch button[data-mark-set=absent].is-on {
  background: var(--bs-danger);
  color: #fff;
}

/*-----------------
    Skeleton
-----------------*/
.student-attendance.loading .live-flag {
  display: none;
}

.student-attendance:not(.loading) .skeleton-loader {
  display: none;
}

/* this page sweeps the fill itself, so the shared wipe layer stands down */
.student-attendance .skeleton {
  border-radius: var(--radius);
  background: linear-gradient(90deg, var(--bs-tertiary-bg) 25%, var(--bs-border-color) 37%, var(--bs-tertiary-bg) 63%);
  background-size: 400% 100%;
  animation: att-shimmer 1.4s ease infinite;
}

.student-attendance .skeleton::after {
  content: none;
}

.student-attendance .skeleton-hero {
  height: 300px;
  margin-bottom: 16px;
}

.student-attendance .skeleton-filters {
  height: 140px;
  margin-bottom: 16px;
}

.student-attendance .skeleton-grid {
  height: 420px;
}

.student-attendance .skeleton-side {
  height: 420px;
}

.student-attendance .skeleton-block {
  height: 240px;
}

@keyframes att-shimmer {
  0% {
    background-position: 100% 50%;
  }

  100% {
    background-position: 0 50%;
  }
}

/*-----------------
    Responsive
-----------------*/
@media (max-width: 991.98px) {
  .filter-bar {
    position: static;
  }

  .attendance-heatmap.attendance-heatmap-lg {
    grid-template-columns: repeat(15, 1fr);
  }
}

@media (max-width: 767.98px) {
  .bulk-bar-inner {
    border-radius: var(--radius);
    width: 100%;
  }

  .record-grid-scroll {
    max-height: none;
    overflow: visible;
  }

  .record-grid {
    min-width: 0;
  }

  .record-grid thead {
    display: none;
  }

  .record-grid,
  .record-grid tbody,
  .record-grid tr,
  .record-grid td {
    display: block;
    width: auto;
  }

  .record-grid tbody td {
    border-bottom: 0;
    padding: 6px 14px;
    text-align: left !important;
  }

  .record-grid tbody td:not(.record-col-student):not(.record-col-check):not(.record-col-actions)::before {
    content: attr(data-lbl);
    display: block;
    font-size: 9.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--bs-tertiary-color);
    margin-bottom: 1px;
  }

  .record-grid td.is-pin,
  .record-grid td.is-pin-end {
    position: static;
    box-shadow: none;
  }

  .record-grid td.record-col-check {
    position: absolute !important;
    top: 12px;
    right: 12px;
    width: auto;
    padding: 0;
  }

  .record-grid td.record-col-student {
    padding-top: 12px;
  }

  .record-grid td.record-col-actions {
    position: sticky;
    bottom: 0;
    padding: 8px 14px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
    border-radius: 0 0 var(--radius-sm) var(--radius-sm);
  }

  .record-row {
    position: relative;
    margin: 12px;
    padding: 6px 0 0;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
  }

  .record-row-actions {
    opacity: 1;
    justify-content: flex-end;
  }

  .detail-drawer-row>td {
    margin: 0 12px 12px;
  }
}

/* ============================================================
   MERGED OVERRIDES — avatar accent tokens
   (same-selector overrides merged from app-new.css; kept after
   the base rules so the later declaration wins, exactly as the
   second stylesheet did.)
   ============================================================ */
.student-attendance .is-present {
  --accent: var(--bs-success);
  --accent-soft: var(--attendance-present-s);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.student-attendance .is-late {
  --accent: var(--bs-warning);
  --accent-soft: var(--attendance-late-s);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.student-attendance .is-warn {
  --accent: var(--bs-warning);
  --accent-soft: var(--attendance-late-s);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.student-attendance .is-absent {
  --accent: var(--bs-danger);
  --accent-soft: var(--attendance-absent-s);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.student-attendance .is-leave {
  --accent: var(--attendance-leave);
  --accent-soft: var(--attendance-leave-s);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.student-attendance .is-info {
  --accent: var(--attendance-leave);
  --accent-soft: var(--attendance-leave-s);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.student-attendance .is-violet {
  --accent: var(--accent-purple);
  --accent-soft: var(--tint-purple);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.student-attendance .is-primary {
  --accent: var(--bs-primary);
  --accent-soft: var(--tint-primary);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

.student-attendance .is-muted {
  --accent: var(--bs-tertiary-color);
  --accent-soft: var(--bs-tertiary-bg);
  --avatar-accent: var(--accent);
  --avatar-accent-soft: var(--accent-soft);
}

/* ---- page overrides restored when the shared workspace components were
     collapsed: these declarations only ever existed on the attendance grid ---- */
.student-attendance .chart-axis b {
  font-size: 11.5px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.student-attendance .chart-axis span {
  flex-direction: column;
  display: flex;
  align-items: center;
}

.student-attendance .column-sort.is-asc i,
.column-sort.is-desc i {
  opacity: 1;
  color: var(--bs-primary);
}

.student-attendance .confidence-meter .tr {
  overflow: hidden;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
  flex: 1;
  height: 6px;
}

.student-attendance .confidence-meter .tr>span {
  border-radius: 999px;
  height: 100%;
  width: 0;
  background: var(--accent);
  transition: width 1.1s cubic-bezier(0.22, 1, 0.36, 1);
  display: block;
}

.student-attendance .mail-list {
  color: var(--bs-tertiary-color);
  font-size: 13px;
}

.student-attendance .record-grid td.is-pin,
.record-grid td.is-pin-end {
  background: var(--bs-body-bg);
  z-index: 2;
  position: sticky;
}

.student-attendance .record-grid thead th.is-pin,
.record-grid thead th.is-pin-end {
  z-index: 4;
}

.student-attendance .segmented-control button.is-on {
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color);
  box-shadow: var(--shadow);
}

.student-attendance .select-field select,
.select-field input {
  font-size: 12px;
  background: none;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  cursor: pointer;
  padding-right: 2px;
  border: 0;
}

.student-attendance .select-field select:focus,
.select-field input:focus {
  outline: none;
}

.student-attendance .select-field.select-field-sm {
  padding: 4px 8px;
}

.student-attendance .view-toggle-group.view-toggle-group-sm {
  padding-bottom: 0;
  border-bottom: 0;
}

/*-----------------
    Classes — Class Management workspace

    The grid, toolbar, row expansion, pagination, empty state, skeleton
    and context menu all come from the shared `.sw-*` workspace components
    (see the students-workspace block in the bundle). Only what is genuinely
    specific to classes lives here: the grade badge, the fixed-width grid
    columns, the two wide dropdown panels, and the bulk action bar.
-----------------*/
/* The premium card chrome that classes.html shares with every other page
   lives in components/_cards.scss — only workspace-specific rules remain
   here. */
/* the workspace wraps every section, so the footer sits one level deeper than
   Bootstrap's `:last-child` radius rule reaches */
.classes-workspace .workspace-footer {
  border-radius: 0 0 15px 15px;
}

/*-----------------
    Grid columns — the class cell stands in for the student avatar cell
-----------------*/
.card-expand-toggle {
  width: 34px;
}

.card-select {
  width: 46px;
}

.card-actions-row {
  min-width: 180px;
}

.record-icon-tile {
  width: 38px;
  height: 38px;
  flex-shrink: 0;
  border-radius: 10px;
  display: grid;
  place-items: center;
  font-size: 12.5px;
  font-weight: 800;
  color: var(--accent);
  background: var(--accent-soft);
}

[data-density=compact] .record-icon-tile {
  width: 30px;
  height: 30px;
  font-size: 11px;
}

/*-----------------
    Row height

    Padding, font size, the user cell, action buttons and the detail-row
    border now come from the shared .data-table component. Only the density
    modifiers and the action column width stay page-specific.
-----------------*/
.classes-workspace .card-actions-row {
  min-width: 150px;
}

.classes-workspace[data-density=compact] .data-table>.table>tbody>tr>td {
  padding: 6px 12px;
}

.classes-workspace[data-density=comfortable] .data-table>.table>tbody>tr>td {
  padding: 16px 12px;
}

/* The final row already draws a line across the grid, so the footer must
     not draw its own on top of it. Targeting the last row instead would miss:
     every data row is followed by a detail row, so `:last-child` is never the
     row you can see, and sorting or filtering moves which one is last. */

.classes-workspace .workspace-footer {
  border-top: 0;
}

/* With no rows on screen the table is hidden, and the empty state has no
     bottom edge of its own — the footer draws the divider in that case. */

.classes-workspace .workspace-empty-state.show+.workspace-footer {
  border-top: 1px solid var(--bs-border-color);
}

/*-----------------
      Footer — sized to sit with the reduced rows above it
  -----------------*/

.classes-workspace .workspace-footer {
  padding: 10px 12px;
  gap: 10px;
}

.classes-workspace .workspace-footer-info {
  font-size: 12.5px;
}

.classes-workspace .workspace-footer-size {
  gap: 6px;
  font-size: 12.5px;
}

.classes-workspace .workspace-footer-size .form-select {
  height: 30px;
  width: auto;
  padding: 0 26px 0 9px;
  font-size: 12.5px;
}

.classes-workspace .workspace-pagination {
  gap: 3px;
}

.classes-workspace .workspace-page-numbers {
  gap: 3px;
  align-items: center;
}

.classes-workspace .workspace-page-button {
  min-width: 30px;
  height: 30px;
  padding: 0 6px;
  font-size: 12.5px;
}

.classes-workspace .workspace-page-button i {
  font-size: 15px;
}

.pagination-gap {
  padding: 0 4px;
  font-size: 12.5px;
  color: var(--bs-secondary-color, #6b7280);
}

/*-----------------
    Toolbar sizing

    The shared toolbar controls are 40px tall, which reads heavy above a dense
    grid. Scoped to `.classes-workspace` so students.html keeps its own proportions. The
    search field follows the buttons down so the row stays on one baseline.
-----------------*/
.classes-workspace .page-toolbar {
  gap: 8px;
}

.classes-workspace .page-toolbar .workspace-button {
  height: 34px;
  padding: 0 11px;
  font-size: 12.5px;
  gap: 5px;
}

.classes-workspace .page-toolbar .workspace-button i {
  font-size: 15px;
}

.classes-workspace .page-toolbar .workspace-button.workspace-button-icon {
  width: 34px;
  padding: 0;
}

.classes-workspace .page-toolbar .search-toolbar {
  flex: 0 1 250px;
  min-width: 180px;
}

.classes-workspace .page-toolbar .search-toolbar input {
  height: 34px;
  padding: 0 58px 0 32px;
  font-size: 13px;
}

.classes-workspace .page-toolbar .search-toolbar .search-toolbar-icon {
  font-size: 15px;
  left: 11px;
}

.classes-workspace .page-toolbar .search-toolbar .search-toolbar-kbd {
  font-size: 10px;
  padding: 7px 5px;
}

.classes-workspace .density-toggle button {
  width: 32px;
  height: 34px;
}

.classes-workspace .density-toggle button i {
  font-size: 16px;
}

.classes-workspace .quick-filters {
  margin-top: 10px;
}

.classes-workspace .quick-filters .workspace-button {
  height: 32px;
  padding: 0 10px;
  font-size: 12.5px;
  gap: 5px;
}

.classes-workspace .quick-filters .workspace-button i {
  font-size: 15px;
}

.classes-workspace .search-clear {
  width: 20px;
  height: 20px;
  font-size: 13px;
}

/*-----------------
    Dropdown panels wide enough for their two-column forms
-----------------*/
.filter-menu {
  min-width: 340px;
  max-width: 92vw;
}

.column-menu {
  min-width: 210px;
  max-width: 92vw;
}

/* An explicit `display` on these classes outranks the user-agent `[hidden]`
   rule, so every element toggled with the hidden attribute has to opt back
   out by hand — otherwise it renders permanently. */
.search-clear[hidden],
.result-count[hidden],
.bulk-selection[hidden],
.quick-filter-clear[hidden] {
  display: none;
}

.classes-workspace .filter-chips:empty {
  display: none;
}

.search-clear {
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  width: 22px;
  height: 22px;
  border: 0;
  border-radius: 50%;
  background: var(--bs-tertiary-bg);
  color: var(--bs-secondary-color, #6b7280);
  display: grid;
  place-items: center;
  font-size: 14px;
  cursor: pointer;
  transition: all var(--transition);
}

.search-clear:hover {
  background: var(--bs-primary);
  color: #fff;
}

.view-count {
  margin-left: auto;
  font-size: 11px;
  font-weight: 700;
  color: var(--bs-secondary-color, #6b7280);
}

.result-count {
  display: inline-grid;
  place-items: center;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 999px;
  background: var(--bs-primary);
  color: #fff;
  font-size: 10px;
  font-weight: 700;
  line-height: 1;
}

/*-----------------
    Row expansion — four panels of class context inside .details-panel-inner
-----------------*/
.details-heading {
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 0 0 10px;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-secondary-color, #6b7280);
}

.details-heading i {
  font-size: 15px;
  color: var(--bs-primary);
}

.details-line {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  margin-bottom: 6px;
  border-radius: 10px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-card-bg, #fff);
}

.details-line>img {
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  border-radius: 50%;
  object-fit: cover;
}

/* the icon badge is a <span> too, and this rule outranks `.details-line-icon` — without
     the exclusion it was handed `flex: 1` and `flex-direction: column`, which
     stretched the badge and knocked its glyph off centre */

.details-line>span:not(.details-line-icon) {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.details-line>span:not(.details-line-icon) b {
  font-size: 12.5px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
}

.details-line>span:not(.details-line-icon) em {
  font-style: normal;
  font-size: 10.5px;
  color: var(--bs-secondary-color, #6b7280);
}

.details-line-icon {
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  border-radius: 9px;
  display: grid;
  place-items: center;
  font-size: 16px;
  color: var(--accent);
  background: var(--accent-soft);
}

.compact-icon-button {
  width: 28px;
  height: 28px;
  flex-shrink: 0;
  border-radius: 50%;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-card-bg, #fff);
  color: var(--bs-secondary-color, #6b7280);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  text-decoration: none;
  transition: all var(--transition);
}

.compact-icon-button:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
  transform: translateY(-2px);
}

.week-label {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.week-label span {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 6px 10px;
  border-radius: 8px;
  background: var(--bs-tertiary-bg);
  font-size: 11.5px;
  color: var(--bs-secondary-color, #6b7280);
}

.week-label span b {
  font-size: 11.5px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.record-fact {
  padding: 10px;
  border-radius: 9px;
  border: 1px solid var(--bs-border-color);
  border-left-width: 3px;
  background: var(--bs-card-bg, #fff);
}

.record-fact b {
  display: block;
  font-size: 16px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.record-fact span {
  font-size: 10.5px;
  color: var(--bs-secondary-color, #6b7280);
}

/* The toolbar sits in .card-header, a sibling of the skeleton rather than a
     child, so it painted straight away with the placeholder stacked under it.
     `:not()` un-matches itself once loaded, so the header needs no counter-rule
     to come back and cannot be stranded hidden. */
/* The shared component only ever turns the live view ON (`.is-loaded
     .live-content { display: block }`); it never turns it off, and both the header
     and the table are plain divs, so they paint before the reveal. */

.classes-workspace:not(.is-loaded) .card-header,
.classes-workspace:not(.is-loaded) .live-content {
  display: none;
}

.classes-workspace .skeleton-head {
  padding: 16px 16px 10px;
  border-bottom: 1px solid var(--bs-border-color);
}

.classes-workspace .skeleton-toolbar {
  gap: 8px;
  padding-bottom: 0;
}

.classes-workspace .skeleton-quick {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 10px;
}

.classes-workspace .skeleton-row {
  grid-template-columns: 34px 30px minmax(210px, 1.6fr) 90px 0.8fr minmax(150px, 1.2fr) 0.5fr 150px;
  gap: 12px;
  padding: 10px 12px;
  border-bottom-color: var(--bs-border-color);
}

.classes-workspace .skeleton-row:last-child {
  border-bottom: 0;
}

.classes-workspace .skeleton-thead {
  padding: 14px 12px;
  background: var(--bs-tertiary-bg);
}

.classes-workspace .skeleton-head {
  height: 9px;
  width: 68%;
  border-radius: 4px;
}

.classes-workspace .skeleton-head-end {
  margin-left: auto;
  width: 46px;
}

.classes-workspace .skeleton-cell {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

.classes-workspace .skeleton-stack {
  flex: 1;
  min-width: 0;
}

.classes-workspace .skeleton-stack .skeleton-line+.skeleton-line {
  margin-top: 5px;
}

.classes-workspace .skeleton-chev {
  width: 24px;
  height: 24px;
  border-radius: 7px;
}

.classes-workspace .skeleton-check {
  width: 18px;
  height: 18px;
  border-radius: 5px;
}

.classes-workspace .skeleton-avatar {
  width: 38px;
  height: 38px;
  border-radius: 10px;
}

.classes-workspace .skeleton-avatar.skeleton-round {
  border-radius: 50%;
}

.classes-workspace .skeleton-circle {
  width: 28px;
  height: 28px;
}

.classes-workspace .skeleton-line {
  height: 10px;
}

.classes-workspace .skeleton-thin {
  height: 8px;
  width: 65%;
}

.classes-workspace .skeleton-pill {
  height: 20px;
  width: 70px;
}

.classes-workspace .skeleton-foot {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  padding: 10px 12px;
}

.classes-workspace .skeleton-foot-info {
  width: 150px;
  height: 10px;
}

.classes-workspace .skeleton-foot-size {
  width: 84px;
  height: 30px;
  border-radius: 8px;
  margin-left: auto;
}

.classes-workspace .skeleton-pager {
  display: flex;
  gap: 3px;
}

.classes-workspace .skeleton-page {
  width: 30px;
  height: 30px;
  border-radius: 8px;
}

.classes-workspace .skeleton-search {
  height: 34px;
  width: 250px;
  border-radius: 8px;
}

.classes-workspace .skeleton-btn {
  height: 34px;
  width: 96px;
  border-radius: 8px;
}

.classes-workspace .skeleton-ico {
  height: 34px;
  width: 34px;
  border-radius: 8px;
}

.classes-workspace .skeleton-density {
  height: 34px;
  width: 96px;
  border-radius: 8px;
}

.classes-workspace .skeleton-chip {
  height: 32px;
  width: 104px;
  border-radius: 999px;
}

.classes-workspace .skeleton-quick .skeleton-btn {
  height: 32px;
  width: 84px;
}

/*-----------------
    Bulk action bar
-----------------*/
.bulk-selection {
  position: sticky;
  bottom: 16px;
  z-index: 20;
  margin-top: 16px;
  display: flex;
  justify-content: center;
  pointer-events: none;
}

.bulk-selection-inner {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  padding: 10px 14px;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
  pointer-events: auto;
  animation: cls-rise 0.28s cubic-bezier(0.22, 1, 0.36, 1);
}

.bulk-selection-inner .btn {
  background: var(--bs-tertiary-bg);
  border-color: var(--bs-border-color);
  color: var(--heading);
}

.bulk-selection-inner .btn:hover {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.bulk-selection-inner .btn.text-danger {
  color: #dc3545 !important;
}

@keyframes cls-rise {
  from {
    opacity: 0;
    transform: translateY(14px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

.bulk-selection-count {
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-secondary-color, #6b7280);
  white-space: nowrap;
}

.bulk-selection-count b {
  font-size: 14px;
  font-weight: 800;
  color: var(--heading);
}

.bulk-selection-close {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 0;
  background: var(--bs-tertiary-bg);
  color: var(--heading);
  cursor: pointer;
  display: grid;
  place-items: center;
  font-size: 15px;
}

.bulk-selection-close:hover {
  background: var(--bs-primary);
  color: #fff;
}

/*-----------------
    Import drop zone
-----------------*/
.stacked-dropdown {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  padding: 28px 16px;
  border-radius: 12px;
  border: 2px dashed var(--bs-border-color);
  background: var(--bs-tertiary-bg);
  text-align: center;
  transition: all var(--transition);
}

.stacked-dropdown:hover {
  border-color: var(--bs-primary);
}

.stacked-dropdown i {
  font-size: 30px;
  color: var(--bs-primary);
}

.stacked-dropdown b {
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.stacked-dropdown input {
  position: absolute;
  inset: 0;
  opacity: 0;
  cursor: pointer;
}

/*-----------------
    Responsive — the shared grid already collapses; keep the bar in step
-----------------*/
@media (max-width: 991.98px) {
  .bulk-selection-inner {
    border-radius: 0;
    width: calc(100% - 32px);
  }
}

/* ============================================================
   MERGED OVERRIDES — accent + workspace tokens
   (same-selector overrides merged from app-new.css; kept after
   the base rules so the later declaration wins, exactly as the
   second stylesheet did.)
   ============================================================ */
/*-----------------
    Row height

    Each class cell is two lines,
not the three a student cell carries,
so the
    shared 16px padding leaves the rows taller than their content needs.
-----------------*/
.classes-workspace table.record-grid-table tbody td {
  padding: 10px 12px;
  font-size: 13px;
}

.classes-workspace .workspace-actions {
  gap: 4px;
}

.classes-workspace .workspace-icon-button {
  width: 28px;
  height: 28px;
}

.classes-workspace .workspace-icon-button i {
  font-size: 14px;
}

.classes-workspace .record-identity {
  gap: 10px;
}

.classes-workspace .record-identity .record-avatar {
  width: 38px;
  height: 38px;
  border-radius: 10px;
}

.classes-workspace .record-identity .record-identity-name {
  font-size: 13.5px;
}

.classes-workspace .record-identity .record-identity-sub {
  font-size: 11.5px;
  margin-top: 1px;
}

.classes-workspace[data-density=compact] table.record-grid-table tbody td {
  padding: 6px 12px;
}

.classes-workspace[data-density=comfortable] table.record-grid-table tbody td {
  padding: 16px 12px;
}

.classes-workspace tr.details-panel-row:not(.open)>td {
  border-bottom: 0;
}

.classes-workspace .view-switcher a {
  width: 32px;
  height: 34px;
}

.classes-workspace .view-switcher a i {
  font-size: 16px;
}

/* The shared component only ever turns the live view ON
     (`.is-loaded .live-content { display: block }`); it never turns it off, and
     `.live-content` is a plain div, so without this it paints before the reveal
     and the skeleton stacks under real content. `:not()` un-matches itself
     once loaded, so nothing can be left stranded hidden. */

.crw:not(.is-loaded) .live-content {
  display: none;
}

/*----- skeleton geometry -----*/
/* Column track follows the live header: chevron, checkbox, report name,
     module, category, owner, generated, schedule, format, visibility,
     status, actions. Placeholder and loaded rows then occupy the same
     width and nothing shifts sideways on reveal. */

.crw .skeleton-row {
  grid-template-columns: 34px 30px minmax(200px, 1.6fr) 110px 96px minmax(130px, 1fr) 110px 104px 96px 96px 96px 150px;
  gap: 12px;
  padding: 10px 12px;
}

.crw .skeleton-row:last-child {
  border-bottom: 0;
}

/* stands in for the sticky table head: same track, tinted band */

.crw .skeleton-thead {
  padding: 14px 12px;
  background: var(--dt-surface-alt, #F8FAFC);
}

.crw .skeleton-head {
  height: 9px;
  width: 68%;
  border-radius: 4px;
}

.crw .skeleton-head-end {
  margin-left: auto;
  width: 46px;
}

.crw .skeleton-cell {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

.crw .skeleton-stack {
  flex: 1;
  min-width: 0;
}

.crw .skeleton-stack .skeleton-line+.skeleton-line {
  margin-top: 5px;
}

.crw .skeleton-chev {
  width: 24px;
  height: 24px;
  border-radius: 7px;
}

.crw .skeleton-check {
  width: 18px;
  height: 18px;
  border-radius: 5px;
}

.crw .skeleton-avatar {
  width: 38px;
  height: 38px;
  border-radius: 10px;
}

.crw .skeleton-circle {
  width: 26px;
  height: 26px;
}

.crw .skeleton-line {
  height: 10px;
}

.crw .skeleton-thin {
  height: 8px;
  width: 65%;
}

.crw .skeleton-pill {
  height: 20px;
  width: 66px;
}

/* stands in for the summary strip above the grid */

.crw .skeleton-sum {
  height: 58px;
  border-radius: 10px;
}

/* stands in for the pagination footer: info left, rows select and pager right */

.crw .skeleton-foot {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
  padding: 12px 16px;
}

.crw .skeleton-foot-info {
  width: 220px;
  height: 10px;
}

.crw .skeleton-foot-size {
  width: 84px;
  height: 30px;
  border-radius: 8px;
  margin-left: auto;
}

.crw .skeleton-pager {
  display: flex;
  gap: 3px;
}

.crw .skeleton-page {
  width: 30px;
  height: 30px;
  border-radius: 8px;
}

/*----- density -----*/
/* The base component sizes `table.record-grid-table`; this grid is a `.data-table`,
     so the three steps are restated against its own cell padding. */

.crw[data-density=compact] .data-table>table>tbody>tr>td {
  padding: 6px 12px;
}

.crw[data-density=comfortable] .data-table>table>tbody>tr>td {
  padding: 16px 12px;
}

/* the detail panel supplies its own padding, so density must not add to it */

.crw .data-table>table>tbody>tr.dt-detail>td {
  padding: 0 !important;
}

/* ============================================================
   Roles & Permissions — Premium Enterprise IAM workspace
   Scoped under .roles-page. Builds on Bootstrap + the template's
   card / accordion / form-switch / avatar components and only
   adds the bits an IAM console needs: a searchable role
   directory, a permission workspace, an audit timeline and a
   security score panel. Never touches sidebar / header / shell.
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .roles-page * {
    animation: none !important;
    transition: none !important;
  }
}

/* ============================================================
   ROLE DIRECTORY (left panel)
   ============================================================ */
.directory {
  display: flex;
  flex-direction: column;
  height: 100%;
}

.directory-search {
  position: relative;
}

.directory-search .form-control {
  padding-left: 34px;
}

.directory-search i {
  position: absolute;
  left: 11px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--bs-secondary-color);
  font-size: 16px;
  pointer-events: none;
}

/* category filter chips */
.category-list {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.category-row {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 28px;
  padding: 0 11px;
  border-radius: 999px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
  transition: all var(--transition);
}

.category-row:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.category-row.active {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.directory-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
  flex: 1 1 auto;
  min-height: 0;
  max-height: 784px;
  overflow-y: auto;
  padding: 2px;
}

/* individual role card */
.role-card {
  position: relative;
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  cursor: pointer;
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}

@media (max-width: 575.98px) {
  .role-card {
    flex-direction: column;
    align-items: start;
  }
}

.role-card::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  border-radius: var(--radius-sm) 0 0 var(--radius-sm);
  background: transparent;
  transition: background var(--transition);
}

.role-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
  border-color: transparent;
}

.role-card.active {
  border-color: transparent;
  background: linear-gradient(135deg, var(--tint-primary), transparent 70%), var(--bs-body-bg);
  box-shadow: var(--shadow);
}

.role-card.active::before {
  background: linear-gradient(180deg, var(--bs-primary), #7b93ff);
}

.role-card-icon {
  width: 42px;
  height: 42px;
  flex: 0 0 42px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  background: var(--accent-soft, var(--tint-primary));
  color: var(--accent, var(--bs-primary));
}

.role-card-body {
  min-width: 0;
  flex: 1;
}

.role-card-name {
  font-size: 14px;
  font-weight: 600;
  margin: 0;
  color: var(--bs-heading-color, #111827);
}

.role-card-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 10px;
  margin-top: 3px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.role-card-meta span {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}

.role-card-meta i {
  font-size: 13px;
}

.role-card-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex: 0 0 9px;
  background: var(--bs-success);
  box-shadow: 0 0 0 3px var(--tint-success);
}

.role-card-dot.off {
  background: #9ca3af;
  box-shadow: 0 0 0 3px rgba(156, 163, 175, 0.16);
}

/* role-card menus use a fixed-strategy Popper (see roles-permission.js) to
   escape #rpDirList's overflow-y: auto; keep them above fixed page chrome */
[data-rp-menu] .dropdown-menu {
  z-index: 1055;
}

/* accent variants for role icons */
.role-icon-primary {
  --accent: var(--bs-primary);
  --accent-soft: var(--tint-primary);
}

.role-icon-indigo {
  --accent: #6366f1;
  --accent-soft: rgba(99, 102, 241, .12);
}

.role-icon-success {
  --accent: var(--bs-success);
  --accent-soft: var(--tint-success);
}

.role-icon-amber {
  --accent: var(--bs-warning);
  --accent-soft: var(--tint-warning);
}

.role-icon-rose {
  --accent: var(--bs-danger);
  --accent-soft: var(--tint-danger);
}

.role-icon-teal {
  --accent: var(--accent-teal);
  --accent-soft: var(--tint-teal);
}

.role-icon-purple {
  --accent: var(--accent-purple);
  --accent-soft: var(--tint-purple);
}

.role-icon-slate {
  --accent: #475569;
  --accent-soft: rgba(71, 85, 105, .12);
}

/* ============================================================
   PERMISSION WORKSPACE (right panel)
   ============================================================ */
.workspace-head {
  display: flex;
  align-items: flex-start;
  gap: 16px;
  flex-wrap: wrap;
}

.workspace-head-icon {
  width: 56px;
  height: 56px;
  flex: 0 0 56px;
  border-radius: 16px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 26px;
  color: #fff;
  background: linear-gradient(135deg, var(--bs-primary), #7b93ff);
  box-shadow: 0 8px 18px var(--tint-primary);
}

/* permission toolbar */
.roles-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}

.search-field-roles {
  position: relative;
  flex: 1 1 240px;
  min-width: 180px;
}

.search-field-roles .form-control {
  height: 38px;
  padding-left: 34px;
}

.search-field-roles i {
  position: absolute;
  left: 11px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--bs-secondary-color);
  font-size: 16px;
  pointer-events: none;
}

/* permission module accordion */
.permission-module-list .accordion-item {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm) !important;
  margin-bottom: 12px;
  overflow: hidden;
  background: var(--bs-body-bg);
  transition: box-shadow var(--transition);
}

.permission-module-list .accordion-item:hover {
  box-shadow: var(--shadow);
}

.permission-module-list .accordion-button {
  border-radius: var(--radius-sm);
  font-weight: 600;
  padding: 14px 16px;
  background: var(--bs-body-bg);
}

@media (max-width: 575.98px) {
  .permission-module-list .accordion-button {
    flex-wrap: wrap;
    gap: 12px;
  }
}

.permission-module-list .accordion-button:not(.collapsed) {
  color: var(--bs-primary);
  background: var(--tint-primary);
  box-shadow: none;
}

.permission-module-list .accordion-button:focus {
  box-shadow: none;
}

.permission-module-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  margin-right: 12px;
  background: var(--tint-primary);
  color: var(--bs-primary);
}

.permission-module-count {
  margin-left: auto;
  margin-right: 12px;
  font-size: 11.5px;
  font-weight: 600;
  color: var(--bs-secondary-color);
}

/* permission switch grid */
.permission-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 10px;
}

.permission-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 10px 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: 10px;
  background: var(--bs-secondary-bg);
  transition: border-color var(--transition), background var(--transition);
}

.permission-row:hover {
  border-color: var(--bs-primary);
  background: var(--bs-body-bg);
}

.permission-row .form-check {
  margin: 0;
  min-height: auto;
  padding: 0;
}

.permission-row .form-check-input {
  margin: 0;
  cursor: pointer;
}

.permission-row label {
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
}

/* ============================================================
   USER ASSIGNMENT
   ============================================================ */
.user-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 4px;
  border-bottom: 1px solid var(--bs-border-color);
}

.user-row:last-child {
  border-bottom: 0;
}

.user-row-body {
  min-width: 0;
  flex: 1;
}

.user-row-body h6 {
  font-size: 14px;
  font-weight: 600;
  margin: 0;
}

.user-row-body span {
  font-size: 12px;
  color: var(--bs-secondary-color);
}

/* ============================================================
   AUDIT TIMELINE
   ============================================================ */
.roles-timeline {
  position: relative;
  padding-left: 26px;
}

.roles-timeline::before {
  content: "";
  position: absolute;
  left: 8px;
  top: 4px;
  bottom: 4px;
  width: 2px;
  background: var(--bs-border-color);
}

.roles-timeline-item {
  position: relative;
  padding-bottom: 18px;
}

.roles-timeline-item:last-child {
  padding-bottom: 0;
}

.roles-timeline-dot {
  position: absolute;
  left: -26px;
  top: 2px;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  color: #fff;
  background: var(--bs-primary);
}

.roles-timeline-item p {
  margin: 0;
  font-size: 13px;
  font-weight: 500;
  color: var(--bs-body-color, #1f2937);
}

.roles-timeline-item .roles-timeline-meta {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ============================================================
   SECURITY PANEL
   ============================================================ */
.score-block {
  position: relative;
  width: 130px;
  height: 130px;
  margin: 0 auto;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: radial-gradient(closest-side, var(--bs-body-bg) 78%, transparent 79% 100%), conic-gradient(var(--bs-success) var(--score-block, 82%), var(--bs-border-color) 0);
}

.score-value {
  font-size: 30px;
  font-weight: 800;
  line-height: 1;
  color: var(--bs-heading-color, #111827);
}

.score-label {
  font-size: 11px;
  color: var(--bs-secondary-color);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.section-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 11px 0;
  border-bottom: 1px solid var(--bs-border-color);
  font-size: 13px;
}

.section-row:last-child {
  border-bottom: 0;
}

.section-row .section-label {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: var(--bs-secondary-color);
}

.section-row .section-label i {
  font-size: 16px;
}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 991.98px) {
  .directory-list {
    max-height: 360px;
  }
}

/* ============================================================
   DARK MODE
   ============================================================ */
[data-bs-theme=dark] .role-card-name,
[data-bs-theme=dark] .user-row-body h6,
[data-bs-theme=dark] .score-value,
[data-bs-theme=dark] .roles-timeline-item p {
  color: #e9edf5;
}

/* ============================================================
   Delete Account Requests — Account Lifecycle Management
   Adds only the page-specific pieces on top of the shared
   .data-workspace / .data-table / card-* system: an approval
   workflow stepper, a compliance warning panel and the
   truncating reason cell. Never touches sidebar/header/shell.
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .closure-page * {
    animation: none !important;
    transition: none !important;
  }
}

/* ---------- Reason cell (truncates with tooltip + view) ---------- */
.closure-reason {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  max-width: 190px;
}

.closure-reason .closure-reason-text {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ============================================================
   APPROVAL WORKFLOW STEPPER
   ============================================================ */
.closure-flow {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.closure-step {
  position: relative;
  flex: 1 1 200px;
  min-width: 140px;
  padding: 14px 14px 14px 46px;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}

@media (max-width: 991.98px) {
  .closure-step {
    flex: 1 1 195px;
  }
}

.closure-step:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 24px rgba(17, 24, 39, 0.08);
}

.closure-step-icon {
  position: absolute;
  left: 12px;
  top: 12px;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
  color: #fff;
  background: var(--bs-secondary-color);
}

.closure-step-title {
  font-size: 13px;
  font-weight: 600;
  margin: 0;
  color: var(--bs-heading-color, #111827);
}

.closure-step-meta {
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin: 2px 0 0;
}

.closure-step-review {
  font-size: 11px;
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-top: 4px;
}

.closure-step-review i {
  font-size: 12px;
}

/* connector line between steps */
.closure-step::after {
  content: "";
  position: absolute;
  right: -8px;
  top: 25px;
  width: 8px;
  height: 2px;
  background: var(--bs-border-color);
}

.closure-step:last-child::after {
  display: none;
}

/* states */
.closure-step.is-done {
  border-color: var(--tint-success);
  background: linear-gradient(135deg, var(--tint-success), transparent 70%), var(--bs-body-bg);
}

.closure-step.is-done .closure-step-icon {
  background: var(--bs-success);
}

.closure-step.is-active {
  border-color: transparent;
  box-shadow: 0 8px 22px var(--tint-primary);
  background: linear-gradient(135deg, var(--tint-primary), transparent 70%), var(--bs-body-bg);
}

.closure-step.is-active .closure-step-icon {
  background: var(--bs-primary);
  animation: dar-pulse 1.8s ease-out infinite;
}

.closure-step.is-pending .closure-step-icon {
  background: #cbd5e1;
}

@keyframes dar-pulse {
  0% {
    box-shadow: 0 0 0 0 var(--tint-primary);
  }

  70% {
    box-shadow: 0 0 0 7px var(--tint-primary);
  }

  100% {
    box-shadow: 0 0 0 0 var(--tint-primary);
  }
}

/* ============================================================
   COMPLIANCE WARNING PANEL
   ============================================================ */
.warning-panel {
  border: 1px solid var(--tint-warning);
  border-radius: 16px;
  background: linear-gradient(135deg, var(--tint-warning), transparent 60%), var(--bs-body-bg);
  overflow: hidden;
}

.warning-panel-head {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px;
  border-bottom: 1px solid var(--tint-warning);
}

.warning-panel-icon {
  width: 44px;
  height: 44px;
  flex: 0 0 44px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  color: #fff;
  background: linear-gradient(135deg, #f59e0b, var(--bs-warning));
  box-shadow: 0 6px 16px var(--tint-warning);
}

.warning-panel-list {
  padding: 8px 16px 16px;
  margin: 0;
  list-style: none;
}

.warning-panel-list li {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 8px 0;
  font-size: 13px;
  color: var(--bs-body-color, #374151);
  border-bottom: 1px solid var(--bs-border-color);
}

.warning-panel-list li:last-child {
  border-bottom: 0;
}

.warning-panel-list li i {
  font-size: 17px;
  margin-top: 1px;
  flex: 0 0 17px;
}

/* ============================================================
   DARK MODE
   ============================================================ */
[data-bs-theme=dark] .closure-step-title {
  color: #e9edf5;
}

[data-bs-theme=dark] .closure-step.is-pending .closure-step-icon {
  background: #3a4252;
}

/* ============================================================
   Membership Plans — Subscription & Billing Management
   Adds the plan-grid, billing toggle, comparison, popularity
   insights and promotion pieces on top of Bootstrap + the
   shared card-* / data-table chrome and stats-card cards. Never
   touches sidebar / header / shell.
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .plan-page * {
    animation: none !important;
    transition: none !important;
  }
}

/* Overview metric cards reuse the directory stat component, but the little
   avatar "presence" dot only makes sense on people — hide it here. */
.plan-overview .stats-card-directory .stats-avatar::after {
  content: none;
}

/* ============================================================
   BILLING TOGGLE
   ============================================================ */
.billing-switch {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 8px 16px;
  border: 1px solid var(--bs-border-color);
  border-radius: 999px;
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
}

.billing-switch h6 {
  margin: 0;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  transition: color var(--transition);
}

.billing-switch .form-check-input {
  cursor: pointer;
}

.plan-page.is-yearly .billing-switch .billing-yearly,
.plan-page:not(.is-yearly) .billing-switch .billing-monthly {
  color: var(--bs-primary);
}

/* price swap driven by the .is-yearly state on .plan-page */
.plan-page .price-yearly {
  display: none;
}

.plan-page.is-yearly .price-monthly {
  display: none;
}

.plan-page.is-yearly .price-yearly {
  display: block;
}

/* ============================================================
   PLAN GRID
   ============================================================ */
.plan-card {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 22px;
  border: 1px solid var(--bs-border-color);
  border-radius: 16px;
  background: linear-gradient(180deg, var(--accent-soft, var(--tint-primary)), transparent 32%), var(--bs-body-bg);
  box-shadow: var(--shadow);
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
  overflow: hidden;
}

.plan-card::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 4px;
  background: linear-gradient(90deg, var(--accent, var(--bs-primary)), var(--accent-strong, #7b93ff));
}

.plan-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--shadow-lift);
  border-color: transparent;
}

.plan-card.is-popular {
  border-color: transparent;
  box-shadow: 0 0 0 2px var(--accent, var(--bs-success)), var(--shadow-lift);
}

.plan-card-badge {
  position: absolute;
  top: 14px;
  right: 14px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 700;
  color: #fff;
  background: linear-gradient(135deg, var(--accent, var(--bs-success)), var(--accent-strong, #4ade80));
  box-shadow: 0 6px 14px var(--accent-soft, var(--tint-success));
}

.plan-card-icon {
  width: 52px;
  height: 52px;
  border-radius: 15px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 26px;
  color: #fff;
  background: linear-gradient(135deg, var(--accent, var(--bs-primary)), var(--accent-strong, #7b93ff));
  box-shadow: 0 8px 18px var(--accent-soft, var(--tint-primary));
  margin-bottom: 14px;
}

.plan-card-name {
  font-size: 18px;
  font-weight: 700;
  margin: 0;
  color: var(--bs-heading-color, #111827);
}

.plan-card-desc {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  margin: 4px 0 0;
  min-height: 34px;
}

.price-block {
  display: flex;
  align-items: baseline;
  gap: 4px;
  margin: 14px 0 2px;
}

.price-block .plan-price-amount {
  font-size: 32px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--bs-heading-color, #111827);
  line-height: 1;
}

.price-block .plan-price-period {
  font-size: 13px;
  color: var(--bs-secondary-color);
}

.save-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11.5px;
  font-weight: 600;
  color: #15803d;
  background: var(--tint-success);
  border-radius: 999px;
  padding: 2px 9px;
}

/* subscriber + renewal mini-stats */
.plan-card-stats {
  display: flex;
  gap: 8px;
  margin: 16px 0;
}

.plan-card-stat {
  flex: 1;
  padding: 10px;
  border: 1px solid var(--bs-border-color);
  border-radius: 10px;
  background: var(--bs-secondary-bg);
  text-align: center;
}

.plan-card-stat .plan-stat-value {
  font-size: 16px;
  font-weight: 700;
  color: var(--bs-heading-color, #111827);
}

.plan-card-stat .plan-stat-label {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.renew-note {
  height: 6px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
  margin-top: 6px;
}

.renew-note>span {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--accent, var(--bs-primary)), var(--accent-strong, #7b93ff));
}

/* feature checklist */
.feature-row {
  list-style: none;
  padding: 0;
  margin: 4px 0 18px;
}

.feature-row li {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 6px 0;
  font-size: 13px;
  color: var(--bs-body-color, #374151);
}

.feature-row li i {
  font-size: 16px;
  flex: 0 0 16px;
}

.feature-row li.off {
  color: var(--bs-secondary-color);
}

.feature-row li.off .feature-text {
  text-decoration: line-through;
  opacity: 0.8;
}

.feature-row .feature-yes {
  color: var(--bs-success);
}

.feature-row .feature-no {
  color: #cbd5e1;
}

/* limits chips */
.limit-list {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 8px;
  padding: 12px;
  border: 1px dashed var(--bs-border-color);
  border-radius: 12px;
  margin-bottom: 18px;
}

.limit-row {
  display: flex;
  flex-direction: column;
}

.limit-row .limit-value {
  font-size: 14px;
  font-weight: 700;
  color: var(--bs-heading-color, #111827);
}

.limit-row .limit-label {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.plan-card-cta {
  margin-top: auto;
}

/* accent variants */
.plan-accent-slate {
  --accent: #475569;
  --accent-strong: #94a3b8;
  --accent-soft: rgba(71, 85, 105, .28);
}

.plan-accent-primary {
  --accent: var(--bs-primary);
  --accent-strong: #7b93ff;
  --accent-soft: var(--tint-primary);
}

.plan-accent-success {
  --accent: var(--bs-success);
  --accent-strong: #4ade80;
  --accent-soft: var(--tint-success);
}

.plan-accent-purple {
  --accent: var(--accent-purple);
  --accent-strong: #a78bfa;
  --accent-soft: var(--tint-purple);
}

.plan-accent-amber {
  --accent: var(--bs-warning);
  --accent-strong: #fbbf24;
  --accent-soft: var(--tint-warning);
}

.plan-accent-rose {
  --accent: var(--bs-danger);
  --accent-strong: #fb7185;
  --accent-soft: var(--tint-danger);
}

/* ============================================================
   POPULARITY INSIGHTS
   ============================================================ */
.insight-tile {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 0;
  border-bottom: 1px solid var(--bs-border-color);
}

.insight-tile:last-child {
  border-bottom: 0;
}

.insight-tile-icon {
  width: 40px;
  height: 40px;
  flex: 0 0 40px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 19px;
  background: var(--accent-soft, var(--tint-primary));
  color: var(--accent, var(--bs-primary));
}

.plan-icon-primary {
  --accent: var(--bs-primary);
  --accent-soft: var(--tint-primary);
}

.plan-icon-success {
  --accent: var(--bs-success);
  --accent-soft: var(--tint-success);
}

.plan-icon-purple {
  --accent: var(--accent-purple);
  --accent-soft: var(--tint-purple);
}

.plan-icon-amber {
  --accent: var(--bs-warning);
  --accent-soft: var(--tint-warning);
}

.plan-icon-rose {
  --accent: var(--bs-danger);
  --accent-soft: var(--tint-danger);
}

.insight-tile-body {
  min-width: 0;
  flex: 1;
}

.insight-tile-body p {
  margin: 0;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-heading-color, #111827);
}

.insight-tile-body span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.insight-tile-value {
  font-size: 15px;
  font-weight: 700;
}

/* ============================================================
   COMPARISON MATRIX (sticky first column)
   ============================================================ */
.compare-table {
  overflow-x: auto;
}

.compare-table table {
  min-width: 720px;
  margin: 0;
}

.compare-table th,
.compare-table td {
  text-align: center;
  padding: 12px 14px;
  border-bottom: 1px solid var(--bs-border-color);
  white-space: nowrap;
}

.compare-table thead th {
  font-size: 13px;
  font-weight: 700;
}

.compare-table tbody th,
.compare-table tbody td:first-child {
  position: sticky;
  left: 0;
  z-index: 2;
  text-align: left;
  background: var(--bs-body-bg);
  font-weight: 500;
  font-size: 13px;
}

.compare-table .compare-yes {
  color: var(--bs-success);
  font-size: 18px;
}

.compare-table .compare-no {
  color: #cbd5e1;
  font-size: 16px;
}

/* ============================================================
   PROMOTIONS + SIDEBAR WIDGETS
   ============================================================ */
.promo-banner {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 16px;
  border: 1px solid var(--bs-border-color);
  border-radius: 14px;
  background: var(--bs-body-bg);
  height: 100%;
  transition: transform var(--transition), box-shadow var(--transition);
}

.promo-banner:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow);
}

.promo-banner-icon {
  width: 46px;
  height: 46px;
  flex: 0 0 46px;
  border-radius: 13px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  background: var(--accent-soft, var(--tint-primary));
  color: var(--accent, var(--bs-primary));
}

.promo-banner-body h6 {
  margin: 0;
  font-size: 14px;
  font-weight: 600;
}

.promo-banner-body p {
  margin: 2px 0 0;
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.widget-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 11px 0;
  border-bottom: 1px solid var(--bs-border-color);
}

.widget-row:last-child {
  border-bottom: 0;
}

.widget-row .widget-row-body {
  min-width: 0;
  flex: 1;
}

.widget-row .widget-row-body p {
  margin: 0;
  font-size: 13px;
  font-weight: 500;
}

.widget-row .widget-row-body span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 575.98px) {
  .limit-list {
    grid-template-columns: 1fr;
  }
}

/* ============================================================
   DARK MODE
   ============================================================ */
[data-bs-theme=dark] .plan-card-name,
[data-bs-theme=dark] .price-block .plan-price-amount,
[data-bs-theme=dark] .plan-card-stat .plan-stat-value,
[data-bs-theme=dark] .limit-row .limit-value,
[data-bs-theme=dark] .insight-tile-body p,
[data-bs-theme=dark] .compare-table thead th {
  color: #e9edf5;
}

[data-bs-theme=dark] .compare-table tbody th,
[data-bs-theme=dark] .compare-table tbody td:first-child {
  background: var(--bs-body-bg);
}

/* ============================================================
   Membership Add-ons — Feature Marketplace
   Marketplace cards + bundles for the add-ons page. Reuses the
   mp-* tokens/components (insights, comparison, widgets) — the
   page wraps in `.mp-page` so those variables resolve — and adds
   only the marketplace-specific card and bundle styles here.
   Never touches sidebar / header / shell.
   ============================================================ */
/* ============================================================
   MARKETPLACE CARD
   ============================================================ */
.addon-card {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 18px;
  border: 1px solid var(--bs-border-color);
  border-radius: 16px;
  background: linear-gradient(160deg, var(--accent-soft, var(--tint-primary)), transparent 30%), var(--bs-body-bg);
  box-shadow: var(--shadow);
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
  width: 100%;
}

.addon-card:hover {
  transform: translateY(-5px);
  box-shadow: var(--shadow-lift);
  border-color: transparent;
}

.addon-card:has(.dropdown-menu.show) {
  z-index: 5;
}

.addon-card .dropdown-menu {
  z-index: 1050;
}

.addon-card-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 12px;
}

.addon-card-icon {
  width: 46px;
  height: 46px;
  flex: 0 0 46px;
  border-radius: 14px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 23px;
  color: #fff;
  background: linear-gradient(135deg, var(--accent, var(--bs-primary)), var(--accent-strong, #7b93ff));
  box-shadow: 0 6px 16px var(--accent-soft, var(--tint-primary));
}

.addon-card-popular {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 3px 9px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 700;
  color: #b45309;
  background: var(--tint-warning);
}

.addon-card-name {
  font-size: 15px;
  font-weight: 700;
  margin: 0;
  color: var(--bs-heading-color, #111827);
  display: flex;
  align-items: center;
  gap: 6px;
}

.addon-card-desc {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  margin: 5px 0 12px;
  min-height: 36px;
}

.addon-card-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 12px;
}

.addon-card-meta {
  display: flex;
  align-items: center;
  gap: 6px 14px;
  flex-wrap: wrap;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 14px;
}

.addon-card-meta span {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.addon-card-meta i {
  font-size: 14px;
}

.addon-card-price {
  display: flex;
  align-items: baseline;
  gap: 4px;
  margin-top: auto;
  padding-top: 12px;
  border-top: 1px solid var(--bs-border-color);
}

.addon-card-price .price-amount {
  font-size: 20px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--bs-heading-color, #111827);
  line-height: 1;
}

.addon-card-price .price-period {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.addon-card-price .price-free {
  font-size: 18px;
  font-weight: 800;
  color: var(--bs-success);
}

.addon-card-cta {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 12px;
}

/* active / installed ribbon corner */
.addon-card.is-installed::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  border-radius: 16px 16px 0 0;
  background: linear-gradient(90deg, var(--bs-success), #4ade80);
}

/* ============================================================
   FEATURE BUNDLES
   ============================================================ */
.bundle-card {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 20px;
  border: 1px solid var(--bs-border-color);
  border-radius: 16px;
  background: linear-gradient(135deg, var(--accent-soft, var(--tint-primary)), transparent 45%), var(--bs-body-bg);
  box-shadow: var(--shadow);
  transition: transform var(--transition), box-shadow var(--transition);
  width: 100%;
}

.bundle-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-lift);
}

.bundle-head {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 14px;
}

.bundle-icon {
  width: 48px;
  height: 48px;
  flex: 0 0 48px;
  border-radius: 14px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  color: #fff;
  background: linear-gradient(135deg, var(--accent, var(--bs-primary)), var(--accent-strong, #7b93ff));
  box-shadow: 0 8px 18px var(--accent-soft, var(--tint-primary));
}

.bundle-name {
  font-size: 16px;
  font-weight: 700;
  margin: 0;
  color: var(--bs-heading-color, #111827);
}

.bundle-sub {
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.bundle-features {
  list-style: none;
  padding: 0;
  margin: 0 0 14px;
}

.bundle-features li {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 5px 0;
  font-size: 13px;
  color: var(--bs-body-color, #374151);
}

.bundle-features li i {
  font-size: 15px;
  color: var(--bs-success);
}

.bundle-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: auto;
  padding-top: 14px;
  border-top: 1px solid var(--bs-border-color);
}

@media (max-width: 575.98px) {
  .bundle-foot {
    flex-direction: column;
    align-items: start;
    gap: 12px;
  }
}

.bundle-discount {
  font-size: 20px;
  font-weight: 800;
  color: var(--accent, var(--bs-primary));
  line-height: 1;
}

.bundle-discount small {
  display: block;
  font-size: 11px;
  font-weight: 500;
  color: var(--bs-secondary-color);
}

/* ============================================================
   DARK MODE  (tokens come from .mp-page dark overrides)
   ============================================================ */
[data-bs-theme=dark] .addon-card-name,
[data-bs-theme=dark] .addon-card-price .price-amount,
[data-bs-theme=dark] .bundle-name {
  color: #e9edf5;
}

/* ============================================================
   Class Time Table — Premium Academic Scheduling Workspace
   Adds the scheduling grid, sticky day headers, premium schedule
   cards and hover quick-actions on top of Bootstrap + the shared
   card / toolbar chrome. Reuses the existing bg-transparent-*
   colour system as the subject colour indicator — never touches
   the palette, sidebar, header or page shell.
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .timetable-page * {
    transition: none !important;
    animation: none !important;
  }
}

/* ---- Academic header facts ---- */
.stat-fact {
  display: flex;
  align-items: center;
  gap: 10px;
}

.stat-fact-icon {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 19px;
}

.stat-fact-value {
  font-weight: 600;
  line-height: 1.1;
  color: var(--bs-heading-color, #1f2937);
}

.stat-fact-label {
  font-size: 0.74rem;
  color: var(--bs-secondary-color);
}

/* ---- Scheduling grid ---- */
.timetable-grid {
  display: flex;
  gap: 14px;
  overflow-x: auto;
  padding-bottom: 8px;
}

.timetable-day {
  flex: 1 0 240px;
  min-width: 240px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.timetable-day-head {
  position: sticky;
  top: 0;
  z-index: 3;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 14px;
  border-radius: var(--radius-sm);
  background: var(--bs-tertiary-bg, #f7f8fc);
  border: 1px solid var(--bs-border-color);
  font-weight: 600;
  color: var(--bs-heading-color, #1f2937);
}

.timetable-day-head .timetable-day-count {
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--bs-secondary-color);
  background: var(--bs-card-bg, #fff);
  border-radius: 999px;
  padding: 2px 9px;
}

/* ---- Premium schedule card (colour comes from the reused bg-transparent-* class) ---- */
.timetable-slot {
  position: relative;
  border-radius: var(--radius-sm);
  padding: 14px;
  transition: transform var(--transition), box-shadow var(--transition);
}

.timetable-slot:hover {
  transform: translateY(-3px);
  box-shadow: 0 0.5rem 1.25rem rgba(17, 24, 39, 0.12);
}

.timetable-slot:focus-within {
  box-shadow: 0 0 0 2px rgba(var(--bs-primary-rgb), 0.3);
}

.timetable-slot-icon {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  background: var(--bs-card-bg, #fff);
}

.timetable-slot-time {
  font-size: 0.74rem;
  font-weight: 600;
  color: var(--bs-heading-color, #1f2937);
}

.timetable-slot-sub {
  font-weight: 600;
  color: var(--bs-heading-color, #1f2937);
  line-height: 1.2;
}

.timetable-slot-meta {
  font-size: 0.74rem;
  color: var(--bs-secondary-color);
}

/* hover / keyboard quick actions */
.toolbar-actions {
  position: absolute;
  top: 10px;
  right: 10px;
  opacity: 0;
  transform: translateY(-4px);
  transition: opacity var(--transition), transform var(--transition);
}

.timetable-slot:hover .toolbar-actions,
.timetable-slot:focus-within .toolbar-actions {
  opacity: 1;
  transform: none;
}

@media (hover: none) {
  .toolbar-actions {
    opacity: 1;
    transform: none;
  }
}

/* teacher chip on a soft card sits on white for contrast */
.timetable-slot-teacher {
  background: var(--bs-card-bg, #fff);
  border-radius: 8px;
}

/* ---- Special period cards ---- */
.timetable-special {
  border: 1px dashed var(--bs-border-color);
  border-radius: var(--radius-sm);
  transition: box-shadow var(--transition), transform var(--transition);
}

.timetable-special:hover {
  transform: translateY(-2px);
  box-shadow: 0 0.35rem 0.9rem rgba(17, 24, 39, 0.08);
}

/* ---- Empty state ---- */
.empty-state-art {
  width: 116px;
  height: 116px;
  margin: 0 auto 18px;
  border-radius: 26px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 52px;
  color: var(--bs-primary);
  background: rgba(var(--bs-primary-rgb), 0.1);
}

/* ---- List view: stack days as full-width rows ---- */
.timetable-grid.timetable-list {
  flex-direction: column;
}

.timetable-grid.timetable-list .timetable-day {
  min-width: 100%;
}

.timetable-grid.timetable-list .timetable-day-head {
  position: static;
}

/* ---- Responsive: stack days as full-width schedule cards on mobile ---- */
@media (max-width: 767.98px) {
  .timetable-grid {
    flex-direction: column;
  }

  .timetable-day {
    min-width: 100%;
  }

  .timetable-day-head {
    position: static;
  }
}

/* ---- Sticky side panels (desktop only) ---- */

@media (min-width: 992px) {
  .curriculum-page .curriculum-sticky {
    position: sticky;
    top: 1rem;
    max-height: calc(100vh - 9rem);
    overflow-y: auto;
    overflow-x: hidden;
  }
}

/* thin, unobtrusive scrollbar for the rails */

.curriculum-page .curriculum-sticky::-webkit-scrollbar {
  width: 6px;
}

.curriculum-page .curriculum-sticky::-webkit-scrollbar-thumb {
  background: rgba(0, 0, 0, 0.12);
  border-radius: 20px;
}

/* ---- Left navigation rail ---- */

.curriculum-page .curriculum-nav-title {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.curriculum-page .curriculum-nav .list-group-item {
  border: 0;
  padding: 0.45rem 0.65rem;
  border-radius: 0.5rem;
  font-size: 13px;
  cursor: pointer;
  transition: background-color 0.2s ease, color 0.2s ease;
}

.curriculum-page .curriculum-nav .list-group-item .curriculum-nav-icon {
  width: 18px;
  text-align: center;
}

/* ---- Explorer cards ---- */

.curriculum-page .curriculum-card {
  cursor: pointer;
  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}

.curriculum-page .curriculum-card.active {
  border-color: var(--bs-primary);
  box-shadow: 0 0 0 1px var(--bs-primary);
}

.curriculum-page .curriculum-card .curriculum-card-extra {
  transition: max-height 0.25s ease, opacity 0.2s ease;
}

/* Grid / list view of the explorer */

.curriculum-page .curriculum-explorer.is-list .col-cur {
  width: 100%;
  flex: 0 0 100%;
  max-width: 100%;
}

.curriculum-page .curriculum-explorer.is-list .curriculum-card .card-body {
  display: flex;
  align-items: center;
  gap: 1rem;
  flex-wrap: wrap;
}

.curriculum-page .curriculum-explorer.is-list .curriculum-card .curriculum-card-extra {
  display: none !important;
}

/* ---- Animated progress ---- */

.curriculum-page .curriculum-progress .progress-bar {
  transition: width 1s cubic-bezier(0.25, 0.8, 0.25, 1);
}

/* ---- Resource tile ---- */

.curriculum-page .resource-row {
  transition: border-color 0.2s ease, background-color 0.2s ease;
}

.curriculum-page .resource-row:hover {
  border-color: var(--bs-primary) !important;
}

.curriculum-page .resource-row .resource-actions {
  opacity: 0;
  transition: opacity 0.2s ease;
}

.curriculum-page .resource-row:hover .resource-actions {
  opacity: 1;
}

@media (max-width: 767.98px) {
  .curriculum-page .resource-row .resource-actions {
    opacity: 1;
  }
}

/* ---- Structure accordion progress ---- */

.curriculum-page .structure-row .accordion-button {
  font-size: 13px;
  font-weight: 600;
}

.curriculum-page .structure-row .accordion-button:not(.collapsed) {
  background: var(--bs-primary-bg-subtle, rgba(63, 81, 181, 0.08));
}

.curriculum-page .structure-row .structure-meta {
  font-size: 12px;
}

/* ---- Empty state ---- */

.curriculum-page .curriculum-empty {
  padding: 3rem 1rem;
}

.curriculum-page .curriculum-empty .curriculum-empty-icon {
  width: 84px;
  height: 84px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
}

/* ---- Dark theme niceties ---- */
[data-theme=dark] .curriculum-page .curriculum-sticky::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.16);
}

.layout-box-mode {
  background: #FBFBFD;
}

.layout-box-mode .main-wrapper {
  max-width: 1350px;
  margin: auto;
}

@media (max-width: 1399.98px) {
  .layout-box-mode .main-wrapper {
    max-width: 1170px;
  }
}

@media (max-width: 1199.98px) {
  .layout-box-mode .main-wrapper {
    max-width: 950px;
  }
}

@media (max-width: 991.98px) {
  .layout-box-mode .main-wrapper {
    max-width: 100%;
  }
}

.layout-box-mode .header {
  max-width: 1350px;
  margin: auto;
}

@media (max-width: 1399.98px) {
  .layout-box-mode .header {
    max-width: 1170px;
  }
}

@media (max-width: 1199.98px) {
  .layout-box-mode .header {
    max-width: 950px;
  }
}

@media (max-width: 991.98px) {
  .layout-box-mode .header {
    max-width: 100%;
  }
}

.layout-box-mode .sidebar {
  left: unset;
}

@media (max-width: 991.98px) {
  .layout-box-mode .page-wrapper .content {
    padding-right: 15px;
  }
}

body.layout-mode-rtl {
  direction: rtl;
}

body.layout-mode-rtl .sidebar {
  right: 0;
  left: unset;
  border-right: 0;
  border-left: 1px solid #E9EDF4;
}

body.layout-mode-rtl .sidebar .sidebar-menu>ul>li ul li a span {
  margin-right: 10px;
  margin-left: 0;
}

body.layout-mode-rtl .sidebar .sidebar-menu .menu-arrow {
  left: 10px;
  right: unset;
}

body.layout-mode-rtl .sidebar .sidebar-menu>ul>li .submenu-hdr::after {
  margin-right: 8px;
  margin-left: 0;
}

body.layout-mode-rtl .header-left {
  float: right;
  border-right: 0;
  border-left: 1px solid #E9EDF4;
}

body.layout-mode-rtl .page-wrapper {
  margin-right: 280px;
  margin-left: 0;
}

body.layout-mode-rtl.mini-sidebar .page-wrapper {
  margin-right: 80px;
}

body.layout-mode-rtl .header .date-range {
  padding-right: 30px !important;
  padding-left: 10px !important;
}

body.layout-mode-rtl .header .cal-icon {
  right: 10px;
  left: unset;
}

body.layout-mode-rtl .header .searchinputs input {
  padding-left: 45px;
  padding-right: 10px;
}

body.layout-mode-rtl .header .search-addon button {
  left: 16px;
  right: unset;
}

[data-topbar=primary] .header {
  background: #1f3b60;
  border-bottom-color: #778EEA;
}

[data-topbar=primary] .header .dark-logo {
  display: block;
}

[data-topbar=primary] .header .logo-normal {
  display: none;
}

[data-topbar=primary] .header #toggle_btn {
  color: #FFF;
}

[data-topbar=primary] .header .bg-white {
  background: transparent !important;
}

[data-topbar=primary] .header .btn-outline-light {
  color: #FFF !important;
  border-color: #778EEA !important;
}

[data-topbar=primary] .header .header-left {
  background: #1f3b60;
  border-color: #778EEA;
}

[data-topbar=primary] .header .searchinputs input {
  background: #1f3b60;
  color: #FFF;
  border-color: #778EEA;
}

[data-topbar=primary] .header .searchinputs input::placeholder {
  color: #FFF;
}

[data-topbar=primary] .header .searchinputs .search-addon button {
  background: #1f3b60;
  color: #FFF;
}

@media (min-width: 992px) {
  [data-topbar=primary] .mini-sidebar .header-left .dark-logo {
    display: none;
  }

  [data-topbar=primary] .mini-sidebar.expand-menu .dark-logo {
    display: block;
  }
}

[data-sidebar=dark] .sidebar {
  background: #0F0C1C;
  border-color: #1B1632;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li .submenu-hdr::after {
  background: #1B1632;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li .submenu>a.subdrop {
  background: #1B1632;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li.active a span {
  color: #1f3b60;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li.active a span,
[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li.active a i {
  color: #1f3b60;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li a {
  color: #B9B7C0;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li a:hover,
[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li a.active {
  color: #1f3b60;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li a i {
  background: #1B1632;
  color: #B9B7C0;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li a span {
  color: #B9B7C0;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li.active a {
  background: #1B1632;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a {
  color: #B9B7C0;
}

[data-sidebar=dark] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a.active {
  color: #1f3b60;
}

[data-sidebar=primary] .sidebar {
  background: #1f3b60;
  border-color: #1B1632;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li .submenu-hdr {
  color: #FFF;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li .submenu-hdr::after {
  background: #ECEFFC;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li .submenu>a.subdrop {
  background: #778EEA;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li .submenu>a.subdrop span {
  color: #FFF;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li .submenu a.active .menu-arrow::before {
  border-color: #ECEFFC;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li.active a span {
  color: #FFF;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li.active a span,
[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li.active a i {
  color: #1f3b60;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li a {
  color: #C5CFF6;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li a:hover,
[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li a.active {
  color: #FFF;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li a i {
  background: #ECEFFC;
  color: #1f3b60;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li a span {
  color: #C5CFF6;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li.active a {
  background: #778EEA;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a {
  color: #C5CFF6;
}

[data-sidebar=primary] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a.active {
  color: #1f3b60;
}

[data-sidebar=darkblack] .sidebar {
  background: #39435F;
  border-color: #1B1632;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li .submenu-hdr {
  color: #FFF;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li .submenu-hdr::after {
  background: #ECEFFC;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li .submenu>a.subdrop {
  background: #778EEA;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li .submenu>a.subdrop span {
  color: #FFF;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li .submenu a.active .menu-arrow::before {
  border-color: #ECEFFC;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li.active a span {
  color: #FFF;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li.active a span,
[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li.active a i {
  color: #1f3b60;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li a {
  color: #C5CFF6;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li a:hover,
[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li a.active {
  color: #FFF;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li a i {
  background: #ECEFFC;
  color: #1f3b60;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li a span {
  color: #C5CFF6;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li.active a {
  background: #778EEA;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a {
  color: #C5CFF6;
}

[data-sidebar=darkblack] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a.active {
  color: #1f3b60;
}

[data-sidebar=darkblue] .sidebar {
  background: #07396D;
  border-color: #1B1632;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li .submenu-hdr {
  color: #FFF;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li .submenu-hdr::after {
  background: #ECEFFC;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li .submenu>a.subdrop {
  background: #778EEA;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li .submenu>a.subdrop span {
  color: #FFF;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li .submenu a.active .menu-arrow::before {
  border-color: #ECEFFC;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li.active a span {
  color: #FFF;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li.active a span,
[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li.active a i {
  color: #1f3b60;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li a {
  color: #C5CFF6;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li a:hover,
[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li a.active {
  color: #FFF;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li a i {
  background: #ECEFFC;
  color: #1f3b60;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li a span {
  color: #C5CFF6;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li.active a {
  background: #778EEA;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a {
  color: #C5CFF6;
}

[data-sidebar=darkblue] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a.active {
  color: #1f3b60;
}

[data-topbar=dark] .header {
  background: #0F0C1C;
  border-bottom-color: #1B1632;
}

[data-topbar=dark] .header .dark-logo {
  display: block;
}

[data-topbar=dark] .header .logo-normal {
  display: none;
}

[data-topbar=dark] .header .header-left {
  background: #0F0C1C;
  border-color: #1B1632;
}

[data-topbar=dark] .header .searchinputs input {
  background: #131022;
  border-color: #1B1632;
  color: #B9B7C0;
}

[data-topbar=dark] .header .searchinputs .search-addon button {
  background: #1B1632;
  color: rgba(185, 183, 192, 0.5019607843);
}

[data-topbar=dark] .header .bg-white {
  background: #131022 !important;
}

[data-topbar=dark] .header .btn-outline-light {
  border-color: #1B1632 !important;
  color: #B9B7C0 !important;
}

[data-topbar=dark] .header #toggle_btn {
  color: #B9B7C0;
}

@media (min-width: 992px) {
  [data-topbar=dark] .mini-sidebar .header-left .dark-logo {
    display: none;
  }

  [data-topbar=dark] .mini-sidebar.expand-menu .dark-logo {
    display: block;
  }
}

[data-topbar=grey] .header {
  background: #EFEFF2;
  border-bottom-color: #EFEFF2;
}

[data-topbar=grey] .header .dark-logo {
  display: none;
}

[data-topbar=grey] .header .logo-normal {
  display: block;
}

[data-topbar=grey] .header .header-left {
  background: #EFEFF2;
  border-color: #B9B7C0;
}

[data-topbar=grey] .header .searchinputs input {
  background: #EFEFF2;
  border-color: rgba(185, 183, 192, 0.5019607843);
  color: #B9B7C0;
}

[data-topbar=grey] .header .searchinputs .search-addon button {
  background: rgba(185, 183, 192, 0.5019607843);
  color: #1B1632;
}

[data-topbar=grey] .header .bg-white {
  background: rgba(185, 183, 192, 0.5019607843) !important;
}

[data-topbar=grey] .header .btn-outline-light {
  border-color: rgba(185, 183, 192, 0.5019607843) !important;
  color: #1B1632 !important;
}

[data-topbar=grey] .header #toggle_btn {
  color: #B9B7C0;
}

[data-sidebar=light] [data-sidebarbg=sidebarbg1] .sidebar {
  background-image: url(../img/theme/bg-01.jpg);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: 50% 50%;
  background-color: transparent;
}

[data-sidebar=light] [data-sidebarbg=sidebarbg1] .sidebar .sidebar-menu {
  background: rgba(255, 255, 255, 0.85);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg1] .sidebar {
  background-image: url(../img/theme/bg-01.jpg);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg1] .sidebar .sidebar-menu {
  background: rgba(0, 0, 0, 0.85);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg1] .sidebar {
  background-image: url(../img/theme/bg-01.jpg);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg1] .sidebar .sidebar-menu {
  background: rgba(80, 110, 228, 0.85);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg1] .sidebar {
  background-image: url(../img/theme/bg-01.jpg);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg1] .sidebar .sidebar-menu {
  background: rgba(7, 57, 109, 0.85);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg1] .sidebar {
  background-image: url(../img/theme/bg-01.jpg);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg1] .sidebar .sidebar-menu {
  background: rgba(57, 67, 95, 0.85);
}

[data-sidebar=light] [data-sidebarbg=sidebarbg2] .sidebar {
  background-image: url(../img/theme/bg-02.jpg);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: 50% 50%;
  background-color: transparent;
}

[data-sidebar=light] [data-sidebarbg=sidebarbg2] .sidebar .sidebar-menu {
  background: rgba(255, 255, 255, 0.85);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg2] .sidebar {
  background-image: url(../img/theme/bg-02.jpg);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg2] .sidebar .sidebar-menu {
  background: rgba(0, 0, 0, 0.85);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg2] .sidebar {
  background-image: url(../img/theme/bg-02.jpg);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg2] .sidebar .sidebar-menu {
  background: rgba(80, 110, 228, 0.85);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg2] .sidebar {
  background-image: url(../img/theme/bg-02.jpg);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg2] .sidebar .sidebar-menu {
  background: rgba(7, 57, 109, 0.85);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg2] .sidebar {
  background-image: url(../img/theme/bg-02.jpg);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg2] .sidebar .sidebar-menu {
  background: rgba(57, 67, 95, 0.85);
}

[data-sidebar=light] [data-sidebarbg=sidebarbg3] .sidebar {
  background-image: url(../img/theme/bg-03.jpg);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: 50% 50%;
  background-color: transparent;
}

[data-sidebar=light] [data-sidebarbg=sidebarbg3] .sidebar .sidebar-menu {
  background: rgba(255, 255, 255, 0.85);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg3] .sidebar {
  background-image: url(../img/theme/bg-03.jpg);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg3] .sidebar .sidebar-menu {
  background: rgba(0, 0, 0, 0.85);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg3] .sidebar {
  background-image: url(../img/theme/bg-03.jpg);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg3] .sidebar .sidebar-menu {
  background: rgba(80, 110, 228, 0.85);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg3] .sidebar {
  background-image: url(../img/theme/bg-03.jpg);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg3] .sidebar .sidebar-menu {
  background: rgba(7, 57, 109, 0.85);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg3] .sidebar {
  background-image: url(../img/theme/bg-03.jpg);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg3] .sidebar .sidebar-menu {
  background: rgba(57, 67, 95, 0.85);
}

[data-sidebar=light] [data-sidebarbg=sidebarbg4] .sidebar {
  background-image: url(../img/theme/bg-04.jpg);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: 50% 50%;
  background-color: transparent;
}

[data-sidebar=light] [data-sidebarbg=sidebarbg4] .sidebar .sidebar-menu {
  background: rgba(255, 255, 255, 0.85);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg4] .sidebar {
  background-image: url(../img/theme/bg-04.jpg);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg4] .sidebar .sidebar-menu {
  background: rgba(0, 0, 0, 0.85);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg4] .sidebar {
  background-image: url(../img/theme/bg-04.jpg);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg4] .sidebar .sidebar-menu {
  background: rgba(80, 110, 228, 0.85);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg4] .sidebar {
  background-image: url(../img/theme/bg-04.jpg);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg4] .sidebar .sidebar-menu {
  background: rgba(7, 57, 109, 0.85);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg4] .sidebar {
  background-image: url(../img/theme/bg-04.jpg);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg4] .sidebar .sidebar-menu {
  background: rgba(57, 67, 95, 0.85);
}

[data-sidebar=light] [data-sidebarbg=sidebarbg5] .sidebar {
  background-image: url(../img/theme/bg-05.jpg);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: 50% 50%;
  background-color: transparent;
}

[data-sidebar=light] [data-sidebarbg=sidebarbg5] .sidebar .sidebar-menu {
  background: rgba(255, 255, 255, 0.85);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg5] .sidebar {
  background-image: url(../img/theme/bg-04.jpg);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg5] .sidebar .sidebar-menu {
  background: rgba(0, 0, 0, 0.85);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg5] .sidebar {
  background-image: url(../img/theme/bg-05.jpg);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg5] .sidebar .sidebar-menu {
  background: rgba(80, 110, 228, 0.85);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg5] .sidebar {
  background-image: url(../img/theme/bg-05.jpg);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg5] .sidebar .sidebar-menu {
  background: rgba(7, 57, 109, 0.85);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg5] .sidebar {
  background-image: url(../img/theme/bg-05.jpg);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg5] .sidebar .sidebar-menu {
  background: rgba(57, 67, 95, 0.85);
}

[data-sidebar=light] [data-sidebarbg=sidebarbg6] .sidebar {
  background-image: url(../img/theme/bg-06.jpg);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: 50% 50%;
  background-color: transparent;
}

[data-sidebar=light] [data-sidebarbg=sidebarbg6] .sidebar .sidebar-menu {
  background: rgba(255, 255, 255, 0.85);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg6] .sidebar {
  background-image: url(../img/theme/bg-06.jpg);
}

[data-sidebar=dark] [data-sidebarbg=sidebarbg6] .sidebar .sidebar-menu {
  background: rgba(0, 0, 0, 0.85);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg6] .sidebar {
  background-image: url(../img/theme/bg-06.jpg);
}

[data-sidebar=primary] [data-sidebarbg=sidebarbg6] .sidebar .sidebar-menu {
  background: rgba(80, 110, 228, 0.85);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg6] .sidebar {
  background-image: url(../img/theme/bg-06.jpg);
}

[data-sidebar=darkblack] [data-sidebarbg=sidebarbg6] .sidebar .sidebar-menu {
  background: rgba(7, 57, 109, 0.85);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg6] .sidebar {
  background-image: url(../img/theme/bg-06.jpg);
}

[data-sidebar=darkblue] [data-sidebarbg=sidebarbg6] .sidebar .sidebar-menu {
  background: rgba(57, 67, 95, 0.85);
}

[data-color=violet] .sidebar .sidebar-menu>ul>li ul li a:hover {
  color: #673AB7;
}

[data-color=violet] .sidebar .sidebar-menu>ul>li ul li a:hover span {
  color: #673AB7;
}

[data-color=violet] .sidebar .sidebar-menu>ul>li ul li a.active {
  color: #673AB7;
}

[data-color=violet] .sidebar .sidebar-menu>ul>li ul li.active a span,
[data-color=violet] .sidebar .sidebar-menu>ul>li ul li.active a i {
  color: #673AB7;
}

[data-color=violet] .sidebar .sidebar-menu>ul li .submenu>a.active {
  color: #673AB7;
}

[data-color=violet] .sidebar .sidebar-menu>ul li .submenu>a.active i,
[data-color=violet] .sidebar .sidebar-menu>ul li .submenu>a.active span {
  color: #673AB7;
}

[data-color=violet] .sidebar .sidebar-menu>ul li .submenu>a.active .menu-arrow::before {
  border-color: #673AB7;
}

[data-color=violet] .btn-primary {
  background-color: #673AB7;
  border: 1px solid #673AB7;
}

[data-color=violet] .btn-primary:hover,
[data-color=violet] .btn-primary:focus,
[data-color=violet] .btn-primary.focus,
[data-color=violet] .btn-primary:active,
[data-color=violet] .btn-primary.active {
  background-color: rgb(87.7423236515, 49.4082987552, 155.8917012448);
  border: 1px solid rgb(87.7423236515, 49.4082987552, 155.8917012448);
}

[data-color=violet] .btn-check:checked+.btn,
[data-color=violet] .btn.active,
[data-color=violet] .btn.show,
[data-color=violet] .btn.show:hover,
[data-color=violet] .btn:first-child:active,
[data-color=violet] :not(.btn-check)+.btn:active {
  background-color: #673AB7;
  border-color: #673AB7;
}

[data-color=violet] .link-primary {
  color: #673AB7 !important;
}

[data-color=violet] .link-primary:hover,
[data-color=violet] .link-primary:focus,
[data-color=violet] .link-primary:active {
  color: rgb(87.7423236515, 49.4082987552, 155.8917012448);
}

[data-color=violet] .text-primary {
  color: #673AB7 !important;
}

[data-color=violet] .badge.badge-primary {
  background: #673AB7;
}

[data-color=violet] .dataTables_paginate .pagination li.active a.page-link {
  background: #673AB7;
  border-color: #673AB7;
}

[data-color=violet] .bg-primary {
  background-color: #673AB7 !important;
  border: 1px solid #673AB7 !important;
}

[data-color=violet] .border-bottom.border-primary {
  border-color: #673AB7 !important;
}

[data-color=violet] .border-primary {
  border-color: #673AB7 !important;
}

[data-color=violet] .nav-tabs.nav-tabs-bottom li a.active,
[data-color=violet] .nav-tabs.nav-tabs-bottom li a:hover {
  border-bottom-color: #673AB7;
  color: #673AB7;
}

[data-color=violet] .badge.badge-soft-primary {
  background: rgba(103, 58, 183, 0.1);
  color: #673AB7;
}

[data-color=violet] a:hover {
  color: #673AB7;
}

[data-color=violet] .btn-outline-primary {
  border: 1px solid #673AB7 !important;
  color: #673AB7 !important;
}

[data-color=violet] .btn-outline-primary:hover,
[data-color=violet] .btn-outline-primary:focus,
[data-color=violet] .btn-outline-primary.focus,
[data-color=violet] .btn-outline-primary:active,
[data-color=violet] .btn-outline-primary.active {
  background-color: #673AB7 !important;
  border: 1px solid #673AB7 !important;
}

[data-color=violet] .list-group a.active {
  background: #ECEFFC;
  color: #673AB7;
}

[data-color=violet] .list-group a:hover {
  background: #ECEFFC;
  color: #673AB7;
}

[data-color=violet] .badge-primary-hover:hover {
  background: #673AB7 !important;
  border-color: #673AB7 !important;
  color: #FFF !important;
}

[data-color=violet] .main-chat-blk .chat .chat-footer form .form-buttons .btn.send-btn {
  background: #673AB7;
}

[data-color=violet] .right-user-side .slime-grp .chat-footer form .send-chat a {
  background: #673AB7;
}

[data-color=violet] .custom-pagination .paginations .page-wrap li a.active,
[data-color=violet] .custom-pagination .paginations .page-wrap li a:hover {
  background: #673AB7;
}

[data-color=violet] .select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
  border-color: #673AB7;
}

[data-color=violet] .select2-container--default .select2-results__option--highlighted[aria-selected] {
  background: #673AB7;
}

[data-color=violet] .nav-tabs.nav-tabs-solid.nav-tabs-rounded-fill li a.active {
  background-color: #673AB7;
  border-color: #673AB7;
}

[data-color=violet] .nav-tabs .nav-link:hover {
  color: #673AB7;
}

[data-color=violet] .form-check-input:checked {
  background-color: #673AB7;
  border-color: #673AB7;
}

[data-color=violet] .profile-uploader.profile-uploader-two .drag-upload-btn .upload-btn span {
  color: #673AB7;
}

[data-color=violet] .sidebar-contact .toggle-theme {
  background-color: #673AB7;
}

[data-color=violet] .primary-hover:hover {
  background: #673AB7 !important;
  color: #FFF;
}

[data-color=pink] .sidebar .sidebar-menu>ul>li ul li a:hover {
  color: #E83E8C;
}

[data-color=pink] .sidebar .sidebar-menu>ul>li ul li a:hover span {
  color: #E83E8C;
}

[data-color=pink] .sidebar .sidebar-menu>ul>li ul li a.active {
  color: #E83E8C;
}

[data-color=pink] .sidebar .sidebar-menu>ul>li ul li.active a span,
[data-color=pink] .sidebar .sidebar-menu>ul>li ul li.active a i {
  color: #E83E8C;
}

[data-color=pink] .sidebar .sidebar-menu>ul li .submenu>a.active {
  color: #E83E8C;
}

[data-color=pink] .sidebar .sidebar-menu>ul li .submenu>a.active i,
[data-color=pink] .sidebar .sidebar-menu>ul li .submenu>a.active span {
  color: #E83E8C;
}

[data-color=pink] .sidebar .sidebar-menu>ul li .submenu>a.active .menu-arrow::before {
  border-color: #E83E8C;
}

[data-color=pink] .btn-primary {
  background-color: #E83E8C;
  border: 1px solid #E83E8C;
}

[data-color=pink] .btn-primary:hover,
[data-color=pink] .btn-primary:focus,
[data-color=pink] .btn-primary.focus,
[data-color=pink] .btn-primary:active,
[data-color=pink] .btn-primary.active {
  background-color: rgb(228.1986111111, 30.1013888889, 120.9930555556);
  border: 1px solid rgb(228.1986111111, 30.1013888889, 120.9930555556);
}

[data-color=pink] .btn-check:checked+.btn,
[data-color=pink] .btn.active,
[data-color=pink] .btn.show,
[data-color=pink] .btn.show:hover,
[data-color=pink] .btn:first-child:active,
[data-color=pink] :not(.btn-check)+.btn:active {
  background-color: #E83E8C;
  border-color: #E83E8C;
}

[data-color=pink] .link-primary {
  color: #E83E8C !important;
}

[data-color=pink] .link-primary:hover,
[data-color=pink] .link-primary:focus,
[data-color=pink] .link-primary:active {
  color: rgb(228.1986111111, 30.1013888889, 120.9930555556);
}

[data-color=pink] .text-primary {
  color: #E83E8C !important;
}

[data-color=pink] .badge.badge-primary {
  background: #E83E8C;
}

[data-color=pink] .dataTables_paginate .pagination li.active a.page-link {
  background: #E83E8C;
  border-color: #E83E8C;
}

[data-color=pink] .bg-primary {
  background-color: #E83E8C !important;
  border: 1px solid #E83E8C !important;
}

[data-color=pink] .border-bottom.border-primary {
  border-color: #E83E8C !important;
}

[data-color=pink] .border-primary {
  border-color: #E83E8C !important;
}

[data-color=pink] .nav-tabs.nav-tabs-bottom li a.active,
[data-color=pink] .nav-tabs.nav-tabs-bottom li a:hover {
  border-bottom-color: #E83E8C;
  color: #E83E8C;
}

[data-color=pink] .badge.badge-soft-primary {
  background: rgba(232, 62, 140, 0.1);
  color: #E83E8C;
}

[data-color=pink] a:hover {
  color: #E83E8C;
}

[data-color=pink] .btn-outline-primary {
  border: 1px solid #E83E8C !important;
  color: #E83E8C !important;
}

[data-color=pink] .btn-outline-primary:hover,
[data-color=pink] .btn-outline-primary:focus,
[data-color=pink] .btn-outline-primary.focus,
[data-color=pink] .btn-outline-primary:active,
[data-color=pink] .btn-outline-primary.active {
  background-color: #E83E8C !important;
  border: 1px solid #E83E8C !important;
}

[data-color=pink] .list-group a.active {
  background: #ECEFFC;
  color: #E83E8C;
}

[data-color=pink] .list-group a:hover {
  background: #ECEFFC;
  color: #E83E8C;
}

[data-color=pink] .badge-primary-hover:hover {
  background: #E83E8C !important;
  border-color: #E83E8C !important;
  color: #FFF !important;
}

[data-color=pink] .main-chat-blk .chat .chat-footer form .form-buttons .btn.send-btn {
  background: #E83E8C;
}

[data-color=pink] .right-user-side .slime-grp .chat-footer form .send-chat a {
  background: #E83E8C;
}

[data-color=pink] .custom-pagination .paginations .page-wrap li a.active,
[data-color=pink] .custom-pagination .paginations .page-wrap li a:hover {
  background: #E83E8C;
}

[data-color=pink] .select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
  border-color: #E83E8C;
}

[data-color=pink] .select2-container--default .select2-results__option--highlighted[aria-selected] {
  background: #E83E8C;
}

[data-color=pink] .nav-tabs.nav-tabs-solid.nav-tabs-rounded-fill li a.active {
  background-color: #E83E8C;
  border-color: #E83E8C;
}

[data-color=pink] .nav-tabs .nav-link:hover {
  color: #E83E8C;
}

[data-color=pink] .form-check-input:checked {
  background-color: #E83E8C;
  border-color: #E83E8C;
}

[data-color=pink] .profile-uploader.profile-uploader-two .drag-upload-btn .upload-btn span {
  color: #E83E8C;
}

[data-color=pink] .sidebar-contact .toggle-theme {
  background-color: #E83E8C;
}

[data-color=pink] .primary-hover:hover {
  background: #E83E8C !important;
  color: #FFF;
}

[data-color=orange] .sidebar .sidebar-menu>ul>li ul li a:hover {
  color: #FD7E14;
}

[data-color=orange] .sidebar .sidebar-menu>ul>li ul li a:hover span {
  color: #FD7E14;
}

[data-color=orange] .sidebar .sidebar-menu>ul>li ul li a.active {
  color: #FD7E14;
}

[data-color=orange] .sidebar .sidebar-menu>ul>li ul li.active a span,
[data-color=orange] .sidebar .sidebar-menu>ul>li ul li.active a i {
  color: #FD7E14;
}

[data-color=orange] .sidebar .sidebar-menu>ul li .submenu>a.active {
  color: #FD7E14;
}

[data-color=orange] .sidebar .sidebar-menu>ul li .submenu>a.active i,
[data-color=orange] .sidebar .sidebar-menu>ul li .submenu>a.active span {
  color: #FD7E14;
}

[data-color=orange] .sidebar .sidebar-menu>ul li .submenu>a.active .menu-arrow::before {
  border-color: #FD7E14;
}

[data-color=orange] .btn-primary {
  background-color: #FD7E14;
  border: 1px solid #FD7E14;
}

[data-color=orange] .btn-primary:hover,
[data-color=orange] .btn-primary:focus,
[data-color=orange] .btn-primary.focus,
[data-color=orange] .btn-primary:active,
[data-color=orange] .btn-primary.active {
  background-color: rgb(235.2974683544, 108.1367088608, 2.0025316456);
  border: 1px solid rgb(235.2974683544, 108.1367088608, 2.0025316456);
}

[data-color=orange] .btn-check:checked+.btn,
[data-color=orange] .btn.active,
[data-color=orange] .btn.show,
[data-color=orange] .btn.show:hover,
[data-color=orange] .btn:first-child:active,
[data-color=orange] :not(.btn-check)+.btn:active {
  background-color: #FD7E14;
  border-color: #FD7E14;
}

[data-color=orange] .link-primary {
  color: #FD7E14 !important;
}

[data-color=orange] .link-primary:hover,
[data-color=orange] .link-primary:focus,
[data-color=orange] .link-primary:active {
  color: rgb(235.2974683544, 108.1367088608, 2.0025316456);
}

[data-color=orange] .text-primary {
  color: #FD7E14 !important;
}

[data-color=orange] .badge.badge-primary {
  background: #FD7E14;
}

[data-color=orange] .dataTables_paginate .pagination li.active a.page-link {
  background: #FD7E14;
  border-color: #FD7E14;
}

[data-color=orange] .bg-primary {
  background-color: #FD7E14 !important;
  border: 1px solid #FD7E14 !important;
}

[data-color=orange] .border-bottom.border-primary {
  border-color: #FD7E14 !important;
}

[data-color=orange] .border-primary {
  border-color: #FD7E14 !important;
}

[data-color=orange] .nav-tabs.nav-tabs-bottom li a.active,
[data-color=orange] .nav-tabs.nav-tabs-bottom li a:hover {
  border-bottom-color: #FD7E14;
  color: #FD7E14;
}

[data-color=orange] .badge.badge-soft-primary {
  background: rgba(253, 126, 20, 0.1);
  color: #FD7E14;
}

[data-color=orange] a:hover {
  color: #FD7E14;
}

[data-color=orange] .btn-outline-primary {
  border: 1px solid #FD7E14 !important;
  color: #FD7E14 !important;
}

[data-color=orange] .btn-outline-primary:hover,
[data-color=orange] .btn-outline-primary:focus,
[data-color=orange] .btn-outline-primary.focus,
[data-color=orange] .btn-outline-primary:active,
[data-color=orange] .btn-outline-primary.active {
  background-color: #FD7E14 !important;
  border: 1px solid #FD7E14 !important;
}

[data-color=orange] .list-group a.active {
  background: #ECEFFC;
  color: #FD7E14;
}

[data-color=orange] .list-group a:hover {
  background: #ECEFFC;
  color: #FD7E14;
}

[data-color=orange] .badge-primary-hover:hover {
  background: #FD7E14 !important;
  border-color: #FD7E14 !important;
  color: #FFF !important;
}

[data-color=orange] .main-chat-blk .chat .chat-footer form .form-buttons .btn.send-btn {
  background: #FD7E14;
}

[data-color=orange] .right-user-side .slime-grp .chat-footer form .send-chat a {
  background: #FD7E14;
}

[data-color=orange] .custom-pagination .paginations .page-wrap li a.active,
[data-color=orange] .custom-pagination .paginations .page-wrap li a:hover {
  background: #FD7E14;
}

[data-color=orange] .select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
  border-color: #FD7E14;
}

[data-color=orange] .select2-container--default .select2-results__option--highlighted[aria-selected] {
  background: #FD7E14;
}

[data-color=orange] .nav-tabs.nav-tabs-solid.nav-tabs-rounded-fill li a.active {
  background-color: #FD7E14;
  border-color: #FD7E14;
}

[data-color=orange] .nav-tabs .nav-link:hover {
  color: #FD7E14;
}

[data-color=orange] .form-check-input:checked {
  background-color: #FD7E14;
  border-color: #FD7E14;
}

[data-color=orange] .profile-uploader.profile-uploader-two .drag-upload-btn .upload-btn span {
  color: #FD7E14;
}

[data-color=orange] .sidebar-contact .toggle-theme {
  background-color: #FD7E14;
}

[data-color=orange] .primary-hover:hover {
  background: #FD7E14 !important;
  color: #FFF;
}

[data-color=green] .sidebar .sidebar-menu>ul>li ul li a:hover {
  color: #2CA87F;
}

[data-color=green] .sidebar .sidebar-menu>ul>li ul li a:hover span {
  color: #2CA87F;
}

[data-color=green] .sidebar .sidebar-menu>ul>li ul li a.active {
  color: #2CA87F;
}

[data-color=green] .sidebar .sidebar-menu>ul>li ul li.active a span,
[data-color=green] .sidebar .sidebar-menu>ul>li ul li.active a i {
  color: #2CA87F;
}

[data-color=green] .sidebar .sidebar-menu>ul li .submenu>a.active {
  color: #2CA87F;
}

[data-color=green] .sidebar .sidebar-menu>ul li .submenu>a.active i,
[data-color=green] .sidebar .sidebar-menu>ul li .submenu>a.active span {
  color: #2CA87F;
}

[data-color=green] .sidebar .sidebar-menu>ul li .submenu>a.active .menu-arrow::before {
  border-color: #2CA87F;
}

[data-color=green] .btn-primary {
  background-color: #2CA87F;
  border: 1px solid #2CA87F;
}

[data-color=green] .btn-primary:hover,
[data-color=green] .btn-primary:focus,
[data-color=green] .btn-primary.focus,
[data-color=green] .btn-primary:active,
[data-color=green] .btn-primary.active {
  background-color: rgb(36.5905660377, 139.7094339623, 105.6136792453);
  border: 1px solid rgb(36.5905660377, 139.7094339623, 105.6136792453);
}

[data-color=green] .btn-check:checked+.btn,
[data-color=green] .btn.active,
[data-color=green] .btn.show,
[data-color=green] .btn.show:hover,
[data-color=green] .btn:first-child:active,
[data-color=green] :not(.btn-check)+.btn:active {
  background-color: #2CA87F;
  border-color: #2CA87F;
}

[data-color=green] .link-primary {
  color: #2CA87F !important;
}

[data-color=green] .link-primary:hover,
[data-color=green] .link-primary:focus,
[data-color=green] .link-primary:active {
  color: rgb(36.5905660377, 139.7094339623, 105.6136792453);
}

[data-color=green] .text-primary {
  color: #2CA87F !important;
}

[data-color=green] .badge.badge-primary {
  background: #2CA87F;
}

[data-color=green] .dataTables_paginate .pagination li.active a.page-link {
  background: #2CA87F;
  border-color: #2CA87F;
}

[data-color=green] .bg-primary {
  background-color: #2CA87F !important;
  border: 1px solid #2CA87F !important;
}

[data-color=green] .border-bottom.border-primary {
  border-color: #2CA87F !important;
}

[data-color=green] .border-primary {
  border-color: #2CA87F !important;
}

[data-color=green] .nav-tabs.nav-tabs-bottom li a.active,
[data-color=green] .nav-tabs.nav-tabs-bottom li a:hover {
  border-bottom-color: #2CA87F;
  color: #2CA87F;
}

[data-color=green] .badge.badge-soft-primary {
  background: rgba(44, 168, 127, 0.1);
  color: #2CA87F;
}

[data-color=green] a:hover {
  color: #2CA87F;
}

[data-color=green] .btn-outline-primary {
  border: 1px solid #2CA87F !important;
  color: #2CA87F !important;
}

[data-color=green] .btn-outline-primary:hover,
[data-color=green] .btn-outline-primary:focus,
[data-color=green] .btn-outline-primary.focus,
[data-color=green] .btn-outline-primary:active,
[data-color=green] .btn-outline-primary.active {
  background-color: #2CA87F !important;
  border: 1px solid #2CA87F !important;
}

[data-color=green] .list-group a.active {
  background: #ECEFFC;
  color: #2CA87F;
}

[data-color=green] .list-group a:hover {
  background: #ECEFFC;
  color: #2CA87F;
}

[data-color=green] .badge-primary-hover:hover {
  background: #2CA87F !important;
  border-color: #2CA87F !important;
  color: #FFF !important;
}

[data-color=green] .main-chat-blk .chat .chat-footer form .form-buttons .btn.send-btn {
  background: #2CA87F;
}

[data-color=green] .right-user-side .slime-grp .chat-footer form .send-chat a {
  background: #2CA87F;
}

[data-color=green] .custom-pagination .paginations .page-wrap li a.active,
[data-color=green] .custom-pagination .paginations .page-wrap li a:hover {
  background: #2CA87F;
}

[data-color=green] .select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
  border-color: #2CA87F;
}

[data-color=green] .select2-container--default .select2-results__option--highlighted[aria-selected] {
  background: #2CA87F;
}

[data-color=green] .nav-tabs.nav-tabs-solid.nav-tabs-rounded-fill li a.active {
  background-color: #2CA87F;
  border-color: #2CA87F;
}

[data-color=green] .nav-tabs .nav-link:hover {
  color: #2CA87F;
}

[data-color=green] .form-check-input:checked {
  background-color: #2CA87F;
  border-color: #2CA87F;
}

[data-color=green] .profile-uploader.profile-uploader-two .drag-upload-btn .upload-btn span {
  color: #2CA87F;
}

[data-color=green] .sidebar-contact .toggle-theme {
  background-color: #2CA87F;
}

[data-color=green] .primary-hover:hover {
  background: #2CA87F !important;
  color: #FFF;
}

[data-color=red] .sidebar .sidebar-menu>ul>li ul li a:hover {
  color: #DC2626;
}

[data-color=red] .sidebar .sidebar-menu>ul>li ul li a:hover span {
  color: #DC2626;
}

[data-color=red] .sidebar .sidebar-menu>ul>li ul li a.active {
  color: #DC2626;
}

[data-color=red] .sidebar .sidebar-menu>ul>li ul li.active a span,
[data-color=red] .sidebar .sidebar-menu>ul>li ul li.active a i {
  color: #DC2626;
}

[data-color=red] .sidebar .sidebar-menu>ul li .submenu>a.active {
  color: #DC2626;
}

[data-color=red] .sidebar .sidebar-menu>ul li .submenu>a.active i,
[data-color=red] .sidebar .sidebar-menu>ul li .submenu>a.active span {
  color: #DC2626;
}

[data-color=red] .sidebar .sidebar-menu>ul li .submenu>a.active .menu-arrow::before {
  border-color: #DC2626;
}

[data-color=red] .btn-primary {
  background-color: #DC2626;
  border: 1px solid #DC2626;
}

[data-color=red] .btn-primary:hover,
[data-color=red] .btn-primary:focus,
[data-color=red] .btn-primary.focus,
[data-color=red] .btn-primary:active,
[data-color=red] .btn-primary.active {
  background-color: rgb(191.425, 30.875, 30.875);
  border: 1px solid rgb(191.425, 30.875, 30.875);
}

[data-color=red] .btn-check:checked+.btn,
[data-color=red] .btn.active,
[data-color=red] .btn.show,
[data-color=red] .btn.show:hover,
[data-color=red] .btn:first-child:active,
[data-color=red] :not(.btn-check)+.btn:active {
  background-color: #DC2626;
  border-color: #DC2626;
}

[data-color=red] .link-primary {
  color: #DC2626 !important;
}

[data-color=red] .link-primary:hover,
[data-color=red] .link-primary:focus,
[data-color=red] .link-primary:active {
  color: rgb(191.425, 30.875, 30.875);
}

[data-color=red] .text-primary {
  color: #DC2626 !important;
}

[data-color=red] .badge.badge-primary {
  background: #DC2626;
}

[data-color=red] .dataTables_paginate .pagination li.active a.page-link {
  background: #DC2626;
  border-color: #DC2626;
}

[data-color=red] .bg-primary {
  background-color: #DC2626 !important;
  border: 1px solid #DC2626 !important;
}

[data-color=red] .border-bottom.border-primary {
  border-color: #DC2626 !important;
}

[data-color=red] .border-primary {
  border-color: #DC2626 !important;
}

[data-color=red] .nav-tabs.nav-tabs-bottom li a.active,
[data-color=red] .nav-tabs.nav-tabs-bottom li a:hover {
  border-bottom-color: #DC2626;
  color: #DC2626;
}

[data-color=red] .badge.badge-soft-primary {
  background: rgba(220, 38, 38, 0.1);
  color: #DC2626;
}

[data-color=red] a:hover {
  color: #DC2626;
}

[data-color=red] .btn-outline-primary {
  border: 1px solid #DC2626 !important;
  color: #DC2626 !important;
}

[data-color=red] .btn-outline-primary:hover,
[data-color=red] .btn-outline-primary:focus,
[data-color=red] .btn-outline-primary.focus,
[data-color=red] .btn-outline-primary:active,
[data-color=red] .btn-outline-primary.active {
  background-color: #DC2626 !important;
  border: 1px solid #DC2626 !important;
}

[data-color=red] .list-group a.active {
  background: #ECEFFC;
  color: #DC2626;
}

[data-color=red] .list-group a:hover {
  background: #ECEFFC;
  color: #DC2626;
}

[data-color=red] .badge-primary-hover:hover {
  background: #DC2626 !important;
  border-color: #DC2626 !important;
  color: #FFF !important;
}

[data-color=red] .main-chat-blk .chat .chat-footer form .form-buttons .btn.send-btn {
  background: #DC2626;
}

[data-color=red] .right-user-side .slime-grp .chat-footer form .send-chat a {
  background: #DC2626;
}

[data-color=red] .custom-pagination .paginations .page-wrap li a.active,
[data-color=red] .custom-pagination .paginations .page-wrap li a:hover {
  background: #DC2626;
}

[data-color=red] .select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
  border-color: #DC2626;
}

[data-color=red] .select2-container--default .select2-results__option--highlighted[aria-selected] {
  background: #DC2626;
}

[data-color=red] .nav-tabs.nav-tabs-solid.nav-tabs-rounded-fill li a.active {
  background-color: #DC2626;
  border-color: #DC2626;
}

[data-color=red] .nav-tabs .nav-link:hover {
  color: #DC2626;
}

[data-color=red] .form-check-input:checked {
  background-color: #DC2626;
  border-color: #DC2626;
}

[data-color=red] .profile-uploader.profile-uploader-two .drag-upload-btn .upload-btn span {
  color: #DC2626;
}

[data-color=red] .sidebar-contact .toggle-theme {
  background-color: #DC2626;
}

[data-color=red] .primary-hover:hover {
  background: #DC2626 !important;
  color: #FFF;
}

.student-slider-rtl.owl-carousel .owl-stage-outer,
.teacher-slider-rtl.owl-carousel .owl-stage-outer {
  height: 100% !important;
}

.student-slider-rtl.owl-carousel .owl-stage-outer .owl-stage,
.teacher-slider-rtl.owl-carousel .owl-stage-outer .owl-stage {
  height: 100%;
}

.student-slider-rtl.owl-carousel .owl-stage-outer .owl-stage .owl-item,
.teacher-slider-rtl.owl-carousel .owl-stage-outer .owl-stage .owl-item {
  height: 100%;
}

.student-slider-rtl.owl-carousel .owl-nav {
  position: absolute;
  left: 50%;
  top: 30%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
}

.student-slider-rtl.owl-carousel .owl-nav button {
  width: 24px;
  height: 24px;
  background: #FFF;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
}

.student-slider-rtl.owl-carousel .owl-nav button.owl-prev {
  margin-left: 5px;
}

.student-slider-rtl.owl-carousel .owl-nav button:hover {
  background: #1f3b60;
  color: #FFF;
}

.teacher-slider-rtl.owl-carousel .owl-nav {
  position: absolute;
  left: 50%;
  top: 30%;
  transform: translateX(-50%);
  display: flex;
  align-items: center;
  justify-content: center;
}

.teacher-slider-rtl.owl-carousel .owl-nav button {
  width: 24px;
  height: 24px;
  background: #FFF;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: #202C4B;
}

.teacher-slider-rtl.owl-carousel .owl-nav button.owl-prev {
  margin-left: 5px;
}

.teacher-slider-rtl.owl-carousel .owl-nav button:hover {
  background: #1f3b60;
  color: #FFF;
}

html .darkmode,
html[data-theme=dark] {
  background: #0F0C1C;
  color: #B9B7C0;
}

html .darkmode ::-webkit-scrollbar-track,
html[data-theme=dark] ::-webkit-scrollbar-track {
  background: #1B1632;
}

html .darkmode ::-webkit-scrollbar-thumb,
html .darkmode ::-webkit-scrollbar-thumb:hover,
html[data-theme=dark] ::-webkit-scrollbar-thumb,
html[data-theme=dark] ::-webkit-scrollbar-thumb:hover {
  background: #5B576B;
}

html .darkmode body,
html[data-theme=dark] body {
  background-color: #0F0C1C;
}

html .darkmode body.mini-sidebar .dark-logo,
html[data-theme=dark] body.mini-sidebar .dark-logo {
  display: none !important;
}

html .darkmode body.mini-sidebar.expand-menu .dark-logo,
html[data-theme=dark] body.mini-sidebar.expand-menu .dark-logo {
  display: block !important;
}

html .darkmode h1,
html .darkmode h2,
html .darkmode h3,
html .darkmode h4,
html .darkmode h5,
html .darkmode h6,
html .darkmode .mui-brand-name,
html .darkmode .mui-su-name,
html[data-theme=dark] h1,
html[data-theme=dark] h2,
html[data-theme=dark] h3,
html[data-theme=dark] h4,
html[data-theme=dark] h5,
html[data-theme=dark] h6,
html[data-theme=dark] .mui-brand-name,
html[data-theme=dark] .mui-su-name {
  color: #EFEFF2 !important;
}

html .darkmode span,
html .darkmode p,
html .darkmode a,
html[data-theme=dark] span,
html[data-theme=dark] p,
html[data-theme=dark] a {
  color: #B9B7C0;
}

html .darkmode a:hover,
html[data-theme=dark] a:hover {
  color: #1f3b60;
}

html .darkmode .bg-outline-info,
html[data-theme=dark] .bg-outline-info {
  background-color: transparent;
  color: #0F65CD;
}

html .darkmode .bg-outline-success,
html[data-theme=dark] .bg-outline-success {
  background-color: transparent;
  color: #1ABE17;
}

html .darkmode .bg-outline-warning,
html[data-theme=dark] .bg-outline-warning {
  background-color: transparent;
  color: #EAB300;
}

html .darkmode .bg-outline-danger,
html[data-theme=dark] .bg-outline-danger {
  background-color: transparent;
  color: #E82646;
}

html .darkmode .nav-tabs li a,
html[data-theme=dark] .nav-tabs li a {
  color: #B9B7C0;
}

html .darkmode span.bg-success,
html .darkmode span.bg-danger,
html .darkmode span.bg-info,
html .darkmode span.bg-primary,
html .darkmode span.bg-warning,
html .darkmode span.bg-secondary,
html .darkmode span.bg-skyblue,
html[data-theme=dark] span.bg-success,
html[data-theme=dark] span.bg-danger,
html[data-theme=dark] span.bg-info,
html[data-theme=dark] span.bg-primary,
html[data-theme=dark] span.bg-warning,
html[data-theme=dark] span.bg-secondary,
html[data-theme=dark] span.bg-skyblue {
  color: #FFF;
}

html .darkmode .accordion-item,
html[data-theme=dark] .accordion-item {
  border-color: #1B1632;
}

html .darkmode .accordion-header,
html .darkmode .accordion-body,
html .darkmode .accordion-button,
html[data-theme=dark] .accordion-header,
html[data-theme=dark] .accordion-body,
html[data-theme=dark] .accordion-button {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .btn.btn-white,
html[data-theme=dark] .btn.btn-white {
  background: #131022 !important;
  border-color: #1B1632;
}

html .darkmode .btn-icon i,
html[data-theme=dark] .btn-icon i {
  color: #B9B7C0;
}

html .darkmode header .btn-outline-light,
html[data-theme=dark] header .btn-outline-light {
  border-color: #1B1632 !important;
  color: #B9B7C0 !important;
}

html .darkmode .btn-outline-light,
html[data-theme=dark] .btn-outline-light {
  border-color: #1B1632 !important;
}

html .darkmode .btn-outline-light.bg-white,
html[data-theme=dark] .btn-outline-light.bg-white {
  background-color: #131022 !important;
  color: #EFEFF2 !important;
  border-color: #1B1632 !important;
}

html .darkmode .btn-outline-light.bg-white i,
html .darkmode .btn-outline-light.bg-white span,
html[data-theme=dark] .btn-outline-light.bg-white i,
html[data-theme=dark] .btn-outline-light.bg-white span {
  color: #EFEFF2 !important;
}

html .darkmode .btn-outline-light.bg-white:hover,
html .darkmode .btn-outline-light.bg-white:focus,
html .darkmode .btn-outline-light.bg-white:active,
html[data-theme=dark] .btn-outline-light.bg-white:hover,
html[data-theme=dark] .btn-outline-light.bg-white:focus,
html[data-theme=dark] .btn-outline-light.bg-white:active {
  background-color: #1B1632 !important;
  color: #ffffff !important;
}

html .darkmode .btn-outline-light.bg-white:hover i,
html .darkmode .btn-outline-light.bg-white:hover span,
html .darkmode .btn-outline-light.bg-white:focus i,
html .darkmode .btn-outline-light.bg-white:focus span,
html .darkmode .btn-outline-light.bg-white:active i,
html .darkmode .btn-outline-light.bg-white:active span,
html[data-theme=dark] .btn-outline-light.bg-white:hover i,
html[data-theme=dark] .btn-outline-light.bg-white:hover span,
html[data-theme=dark] .btn-outline-light.bg-white:focus i,
html[data-theme=dark] .btn-outline-light.bg-white:focus span,
html[data-theme=dark] .btn-outline-light.bg-white:active i,
html[data-theme=dark] .btn-outline-light.bg-white:active span {
  color: #ffffff !important;
}

html .darkmode .dropdown-menu,
html[data-theme=dark] .dropdown-menu {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .dropdown-menu .dropdown-item,
html[data-theme=dark] .dropdown-menu .dropdown-item {
  color: #B9B7C0 !important;
}

html .darkmode .tax-invoice-info,
html .darkmode .invoice-popup-head,
html[data-theme=dark] .tax-invoice-info,
html[data-theme=dark] .invoice-popup-head {
  background: #1B1632;
}

html .darkmode .bg-dark,
html[data-theme=dark] .bg-dark {
  background: #131022 !important;
}

html .darkmode .text-dark,
html[data-theme=dark] .text-dark {
  color: #B9B7C0 !important;
}

html .darkmode .invoice-product-table,
html .darkmode .payment-info,
html .darkmode .invoice-table,
html[data-theme=dark] .invoice-product-table,
html[data-theme=dark] .payment-info,
html[data-theme=dark] .invoice-table {
  border-color: #1B1632 !important;
}

html .darkmode .border,
html .darkmode .border-end,
html .darkmode .border-white,
html .darkmode .border-bottom,
html[data-theme=dark] .border,
html[data-theme=dark] .border-end,
html[data-theme=dark] .border-white,
html[data-theme=dark] .border-bottom {
  border-color: #1B1632 !important;
}

html .darkmode .border-start,
html[data-theme=dark] .border-start {
  border-color: #1B1632 !important;
}

html .darkmode .border-start.border-skyblue,
html[data-theme=dark] .border-start.border-skyblue {
  border-color: #05C3FB !important;
}

html .darkmode .border-start.border-info,
html[data-theme=dark] .border-start.border-info {
  border-color: #0F65CD !important;
}

html .darkmode .border-start.border-danger,
html[data-theme=dark] .border-start.border-danger {
  border-color: #E82646 !important;
}

html .darkmode .custom-table .table-responsive,
html[data-theme=dark] .custom-table .table-responsive {
  border-color: #1B1632;
}

html .darkmode .shadow-sm,
html[data-theme=dark] .shadow-sm {
  box-shadow: 0px 4.4px 12px -1px rgba(44, 44, 44, 0.361) !important;
}

html .darkmode .form-control,
html[data-theme=dark] .form-control {
  background: #131022;
  border-color: #1B1632;
  color: #B9B7C0;
}

html .darkmode .form-control::-webkit-file-upload-button,
html .darkmode .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,
html[data-theme=dark] .form-control::-webkit-file-upload-button,
html[data-theme=dark] .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
  background-color: #1B1632;
  color: #B9B7C0;
}

html .darkmode .form-label,
html[data-theme=dark] .form-label {
  color: #B9B7C0;
}

html .darkmode .nav-tabs.nav-tabs-solid,
html[data-theme=dark] .nav-tabs.nav-tabs-solid {
  background: #131022;
}

html .darkmode .bg-light-500,
html .darkmode .bg-light,
html .darkmode .bg-light-400,
html .darkmode .bg-light-gray,
html .darkmode .bg-light-200,
html[data-theme=dark] .bg-light-500,
html[data-theme=dark] .bg-light,
html[data-theme=dark] .bg-light-400,
html[data-theme=dark] .bg-light-gray,
html[data-theme=dark] .bg-light-200 {
  background: #1B1632 !important;
  border-color: #1B1632 !important;
}

html .darkmode .primary-hover:hover,
html[data-theme=dark] .primary-hover:hover {
  background: #1f3b60 !important;
}

html .darkmode .bg-light-300,
html .darkmode .bg-light-100,
html[data-theme=dark] .bg-light-300,
html[data-theme=dark] .bg-light-100 {
  background: #1B1632 !important;
}

html .darkmode .card-dropdown>a,
html[data-theme=dark] .card-dropdown>a {
  background: #1B1632 !important;
}

html .darkmode .table,
html[data-theme=dark] .table {
  --bs-body-bg: $dark-800;
}

html .darkmode .table thead th,
html[data-theme=dark] .table thead th {
  background: #131022 !important;
  color: #EFEFF2 !important;
  border-color: #1B1632 !important;
}

html .darkmode .table tbody td,
html[data-theme=dark] .table tbody td {
  color: #B9B7C0 !important;
  border-color: #1B1632 !important;
}

html .darkmode .table tbody th,
html[data-theme=dark] .table tbody th {
  border-color: #1B1632 !important;
}

html .darkmode .table tbody td .text-dark a,
html[data-theme=dark] .table tbody td .text-dark a {
  color: #B9B7C0;
}

html .darkmode .tab-style-6,
html[data-theme=dark] .tab-style-6 {
  background: #131022;
}

html .darkmode .main-chat-blk .chat-page-wrapper .left-chat-title,
html[data-theme=dark] .main-chat-blk .chat-page-wrapper .left-chat-title {
  border-color: #1B1632;
}

html .darkmode .main-chat-blk .main-wrapper .content .sidebar-group .sidebar,
html[data-theme=dark] .main-chat-blk .main-wrapper .content .sidebar-group .sidebar {
  background: #0F0C1C;
  border-right-color: #B9B7C0;
}

html .darkmode .main-chat-blk .chat_form,
html[data-theme=dark] .main-chat-blk .chat_form {
  box-shadow: none;
  background: #131022;
  border-color: #1B1632;
  color: #EFEFF2;
}

html .darkmode .main-chat-blk .review-files p,
html[data-theme=dark] .main-chat-blk .review-files p {
  color: #B9B7C0;
}

html .darkmode .main-chat-blk .chat,
html[data-theme=dark] .main-chat-blk .chat {
  background: #0F0C1C;
}

html .darkmode .main-chat-blk .chat .chat-header,
html[data-theme=dark] .main-chat-blk .chat .chat-header {
  background: #0F0C1C;
  border-color: #1B1632;
}

html .darkmode .main-chat-blk .chat .chat-footer,
html[data-theme=dark] .main-chat-blk .chat .chat-footer {
  background: #0F0C1C;
  border-top-color: #1B1632;
}

html .darkmode .main-chat-blk .chat .chat-body .messages .chats .message-content,
html[data-theme=dark] .main-chat-blk .chat .chat-body .messages .chats .message-content {
  background: #1B1632;
  color: #B9B7C0;
}

html .darkmode .main-chat-blk .chat .chat-body .messages .chats .message-content.chat-award-link a,
html[data-theme=dark] .main-chat-blk .chat .chat-body .messages .chats .message-content.chat-award-link a {
  color: #B9B7C0;
}

html .darkmode .main-chat-blk .chat .chat-footer form .smile-foot .action-circle,
html[data-theme=dark] .main-chat-blk .chat .chat-footer form .smile-foot .action-circle {
  background: #1B1632;
  color: #B9B7C0;
}

html .darkmode .main-chat-blk .emoj-group ul li a,
html .darkmode .main-chat-blk .emoj-group-list-foot ul,
html .darkmode .main-chat-blk .emoj-group-list-foot ul li.add-emoj a,
html .darkmode .main-chat-blk .emoj-group-list ul,
html .darkmode .main-chat-blk .emoj-group-list ul li.add-emoj a,
html[data-theme=dark] .main-chat-blk .emoj-group ul li a,
html[data-theme=dark] .main-chat-blk .emoj-group-list-foot ul,
html[data-theme=dark] .main-chat-blk .emoj-group-list-foot ul li.add-emoj a,
html[data-theme=dark] .main-chat-blk .emoj-group-list ul,
html[data-theme=dark] .main-chat-blk .emoj-group-list ul li.add-emoj a {
  background: #1B1632;
}

html .darkmode .twitter-bs-wizard .twitter-bs-wizard-nav .nav-link::after,
html[data-theme=dark] .twitter-bs-wizard .twitter-bs-wizard-nav .nav-link::after {
  background-color: #1B1632;
}

html .darkmode .btn.btn-white,
html[data-theme=dark] .btn.btn-white {
  color: rgba(185, 183, 192, 0.5019607843);
}

html .darkmode .btn.btn-white:hover,
html[data-theme=dark] .btn.btn-white:hover {
  color: #FFF;
  background: #1B1632 !important;
}

html .darkmode .badge.bg-pending,
html[data-theme=dark] .badge.bg-pending {
  color: #FFF !important;
}

html .darkmode .note-frame,
html[data-theme=dark] .note-frame {
  color: rgba(185, 183, 192, 0.5019607843);
}

html .darkmode .offcanvas-header,
html .darkmode .offcanvas-body,
html[data-theme=dark] .offcanvas-header,
html[data-theme=dark] .offcanvas-body {
  background: #131022;
}

html .darkmode .dropdown-menu .class-hover p,
html[data-theme=dark] .dropdown-menu .class-hover p {
  color: #202C4B !important;
}

html .darkmode .bg-success-transparent h6,
html .darkmode .bg-primary-transparent h6,
html[data-theme=dark] .bg-success-transparent h6,
html[data-theme=dark] .bg-primary-transparent h6 {
  color: #202C4B !important;
}

html .darkmode .link-slider .item p,
html[data-theme=dark] .link-slider .item p {
  color: #202C4B !important;
}

html .darkmode .form-check-input,
html[data-theme=dark] .form-check-input {
  background-color: #5B576B;
  border-color: #1B1632;
  /* the unconditional rule above has higher specificity than the
     base .form-check-input:checked rule (attribute selector +
     class beats class + pseudo-class), so a checked switch was
     losing its primary-blue fill and reading as off in dark mode */
}

html .darkmode .form-check-input:checked,
html[data-theme=dark] .form-check-input:checked {
  background-color: #1f3b60;
  border-color: #1f3b60;
}

html .darkmode select,
html .darkmode .form-select,
html .darkmode .form-control,
html[data-theme=dark] select,
html[data-theme=dark] .form-select,
html[data-theme=dark] .form-control {
  background-color: #131022;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

html .darkmode select option,
html .darkmode .form-select option,
html .darkmode .form-control option,
html[data-theme=dark] select option,
html[data-theme=dark] .form-select option,
html[data-theme=dark] .form-control option {
  background-color: #131022 !important;
  color: #EFEFF2 !important;
}

html .darkmode select option:hover,
html .darkmode select option:focus,
html .darkmode select option:active,
html .darkmode select option[selected],
html .darkmode select option:checked,
html .darkmode .form-select option:hover,
html .darkmode .form-select option:focus,
html .darkmode .form-select option:active,
html .darkmode .form-select option[selected],
html .darkmode .form-select option:checked,
html .darkmode .form-control option:hover,
html .darkmode .form-control option:focus,
html .darkmode .form-control option:active,
html .darkmode .form-control option[selected],
html .darkmode .form-control option:checked,
html[data-theme=dark] select option:hover,
html[data-theme=dark] select option:focus,
html[data-theme=dark] select option:active,
html[data-theme=dark] select option[selected],
html[data-theme=dark] select option:checked,
html[data-theme=dark] .form-select option:hover,
html[data-theme=dark] .form-select option:focus,
html[data-theme=dark] .form-select option:active,
html[data-theme=dark] .form-select option[selected],
html[data-theme=dark] .form-select option:checked,
html[data-theme=dark] .form-control option:hover,
html[data-theme=dark] .form-control option:focus,
html[data-theme=dark] .form-control option:active,
html[data-theme=dark] .form-control option[selected],
html[data-theme=dark] .form-control option:checked {
  background-color: #1B1632 !important;
  color: #ffffff !important;
}

html .darkmode option,
html[data-theme=dark] option {
  background-color: #131022 !important;
  color: #EFEFF2 !important;
}

html .darkmode .select2-container--default .select2-selection--single,
html[data-theme=dark] .select2-container--default .select2-selection--single {
  background-color: #131022 !important;
  border-color: #1B1632 !important;
}

html .darkmode .select2-container--default .select2-selection--single .select2-selection__rendered,
html[data-theme=dark] .select2-container--default .select2-selection--single .select2-selection__rendered {
  border-color: transparent !important;
  background-color: transparent !important;
  color: #EFEFF2 !important;
}

html .darkmode .select2-container--default .select2-selection--single .select2-selection__arrow b,
html[data-theme=dark] .select2-container--default .select2-selection--single .select2-selection__arrow b {
  border-color: #B9B7C0 transparent transparent transparent !important;
}

html .darkmode .select2-container--default .select2-selection--multiple,
html[data-theme=dark] .select2-container--default .select2-selection--multiple {
  background-color: #131022 !important;
  border-color: #1B1632 !important;
}

html .darkmode .select2-container--default .select2-selection--multiple .select2-selection__rendered,
html[data-theme=dark] .select2-container--default .select2-selection--multiple .select2-selection__rendered {
  color: #EFEFF2 !important;
}

html .darkmode .select2-container--default .select2-selection--multiple .select2-selection__choice,
html[data-theme=dark] .select2-container--default .select2-selection--multiple .select2-selection__choice {
  background-color: #1f3b60 !important;
  border-color: #1f3b60 !important;
  color: #ffffff !important;
}

html .darkmode .select2-container--default .select2-selection--multiple .select2-selection__choice .select2-selection__choice__remove,
html[data-theme=dark] .select2-container--default .select2-selection--multiple .select2-selection__choice .select2-selection__choice__remove {
  color: #ffffff !important;
}

html .darkmode .select2-container--default .select2-selection--multiple .select2-selection__choice .select2-selection__choice__remove:hover,
html[data-theme=dark] .select2-container--default .select2-selection--multiple .select2-selection__choice .select2-selection__choice__remove:hover {
  background-color: rgba(0, 0, 0, 0.2) !important;
  color: #ffffff !important;
}

html .darkmode .select2-container--default .select2-selection--multiple .select2-search__field,
html[data-theme=dark] .select2-container--default .select2-selection--multiple .select2-search__field {
  color: #EFEFF2 !important;
  background-color: transparent !important;
}

html .darkmode .select2-container--default .select2-results>.select2-results__options,
html[data-theme=dark] .select2-container--default .select2-results>.select2-results__options {
  border-color: #1B1632 !important;
  background-color: #131022 !important;
  color: #EFEFF2 !important;
}

html .darkmode .select2-container--default .select2-results__option,
html[data-theme=dark] .select2-container--default .select2-results__option {
  background-color: #131022 !important;
  color: #EFEFF2 !important;
}

html .darkmode .select2-container--default .select2-results__option[aria-disabled=true],
html[data-theme=dark] .select2-container--default .select2-results__option[aria-disabled=true] {
  color: rgba(91, 87, 107, 0.6980392157) !important;
  background-color: #0F0C1C !important;
}

html .darkmode .select2-container--default .select2-results__option[aria-selected=true],
html[data-theme=dark] .select2-container--default .select2-results__option[aria-selected=true] {
  background-color: #1B1632 !important;
  color: #ffffff !important;
}

html .darkmode .select2-container--default .select2-results__option.select2-results__option--highlighted[aria-selected],
html[data-theme=dark] .select2-container--default .select2-results__option.select2-results__option--highlighted[aria-selected] {
  background-color: #1f3b60 !important;
  color: #ffffff !important;
}

html .darkmode .select2-container--default .select2-search--dropdown,
html[data-theme=dark] .select2-container--default .select2-search--dropdown {
  background-color: #131022 !important;
}

html .darkmode .select2-container--default .select2-search--dropdown .select2-search__field,
html[data-theme=dark] .select2-container--default .select2-search--dropdown .select2-search__field {
  background-color: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

html .darkmode .select2-dropdown,
html[data-theme=dark] .select2-dropdown {
  background-color: #131022 !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4) !important;
}

html .darkmode .bootstrap-tagsinput,
html[data-theme=dark] .bootstrap-tagsinput {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .modal .modal-content,
html[data-theme=dark] .modal .modal-content {
  background: #131022;
  border-color: #1B1632 !important;
}

html .darkmode .modal .modal-content .modal-header,
html[data-theme=dark] .modal .modal-content .modal-header {
  border-color: #1B1632 !important;
}

html .darkmode .modal .modal-content .modal-footer,
html[data-theme=dark] .modal .modal-content .modal-footer {
  border-color: #1B1632 !important;
}

html .darkmode .animate-card .text-default,
html[data-theme=dark] .animate-card .text-default {
  color: #5D6369 !important;
}

html .darkmode .notice-widget:before,
html[data-theme=dark] .notice-widget:before {
  background-color: #1B1632;
}

html .darkmode .custom-alert1,
html[data-theme=dark] .custom-alert1 {
  background: #131022;
}

html .darkmode .card,
html[data-theme=dark] .card {
  background-color: #131022;
  border-color: #1B1632;
  box-shadow: 0px 4.4px 12px -1px rgba(44, 44, 44, 0.361);
}

html .darkmode .card .card-header,
html[data-theme=dark] .card .card-header {
  border-color: #1B1632;
}

html .darkmode .card .card-footer,
html[data-theme=dark] .card .card-footer {
  border-color: #1B1632;
}

html .darkmode .owl-carousel .owl-nav button,
html[data-theme=dark] .owl-carousel .owl-nav button {
  background: #131022 !important;
  color: rgba(185, 183, 192, 0.5019607843) !important;
}

html .darkmode .login-or .span-or,
html[data-theme=dark] .login-or .span-or {
  background: #131022;
}

html .darkmode .header,
html[data-theme=dark] .header {
  background: #0F0C1C;
  border-bottom-color: #1B1632;
}

html .darkmode .header .dark-logo,
html[data-theme=dark] .header .dark-logo {
  display: block;
}

html .darkmode .header .logo-normal,
html[data-theme=dark] .header .logo-normal {
  display: none;
}

html .darkmode .header .header-left,
html[data-theme=dark] .header .header-left {
  background: #0F0C1C;
  border-color: #1B1632;
}

html .darkmode .header .searchinputs input,
html[data-theme=dark] .header .searchinputs input {
  background: #131022;
  border-color: #1B1632;
  color: #B9B7C0;
}

html .darkmode .header .searchinputs .search-addon button,
html[data-theme=dark] .header .searchinputs .search-addon button {
  background: #1B1632;
  color: rgba(185, 183, 192, 0.5019607843);
}

html .darkmode .sidebar,
html[data-theme=dark] .sidebar {
  background: #0F0C1C !important;
  border-color: #1B1632;
}

html .darkmode .sidebar .sidebar-menu,
html[data-theme=dark] .sidebar .sidebar-menu {
  background: #0F0C1C !important;
}

html .darkmode .sidebar .sidebar-menu>ul>li .submenu-hdr::after,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li .submenu-hdr::after {
  background: #1B1632;
}

html .darkmode .sidebar .sidebar-menu>ul>li .submenu>a.subdrop,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li .submenu>a.subdrop {
  background: #1B1632;
}

html .darkmode .sidebar .sidebar-menu>ul>li ul li a,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li a {
  color: #B9B7C0;
}

html .darkmode .sidebar .sidebar-menu>ul>li ul li a.active,
html .darkmode .sidebar .sidebar-menu>ul>li ul li a:hover,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li a.active,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li a:hover {
  color: #1f3b60;
}

html .darkmode .sidebar .sidebar-menu>ul>li ul li a i,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li a i {
  background: #1B1632;
  color: #B9B7C0;
}

html .darkmode .sidebar .sidebar-menu>ul>li ul li a span,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li a span {
  color: #B9B7C0;
}

html .darkmode .sidebar .sidebar-menu>ul>li ul li a:hover span,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li a:hover span {
  color: #1f3b60;
}

html .darkmode .sidebar .sidebar-menu>ul>li ul li.active a,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li.active a {
  background: #1B1632;
}

html .darkmode .sidebar .sidebar-menu>ul>li ul li.active a span,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li.active a span {
  color: #1f3b60;
}

html .darkmode .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a {
  color: #B9B7C0;
}

html .darkmode .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a.active,
html[data-theme=dark] .sidebar .sidebar-menu>ul>li ul li .submenu>ul li a.active {
  color: #1f3b60;
}

html .darkmode .page-wrapper .content,
html[data-theme=dark] .page-wrapper .content {
  background: #0F0C1C;
}

html .darkmode .page-wrapper .list-group-item,
html[data-theme=dark] .page-wrapper .list-group-item {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

html .darkmode .page-wrapper .list-group-item.active,
html[data-theme=dark] .page-wrapper .list-group-item.active {
  background: #1f3b60 !important;
}

html .darkmode .page-wrapper .border,
html[data-theme=dark] .page-wrapper .border {
  border-color: #1B1632 !important;
}

html .darkmode .page-wrapper .border-bottom,
html[data-theme=dark] .page-wrapper .border-bottom {
  border-color: #1B1632 !important;
}

html .darkmode .page-wrapper .border-top,
html[data-theme=dark] .page-wrapper .border-top {
  border-color: #1B1632 !important;
}

html .darkmode .page-wrapper .bg-white,
html[data-theme=dark] .page-wrapper .bg-white {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

html .darkmode .page-wrapper .dropdown-menu,
html[data-theme=dark] .page-wrapper .dropdown-menu {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .page-wrapper .dropdown-menu .dropdown-item,
html[data-theme=dark] .page-wrapper .dropdown-menu .dropdown-item {
  color: #B9B7C0 !important;
}

html .darkmode .page-wrapper .text-dark,
html[data-theme=dark] .page-wrapper .text-dark {
  color: #B9B7C0 !important;
}

html .darkmode.main-chat-blk .main-wrapper .content .sidebar-group .sidebar,
html[data-theme=dark].main-chat-blk .main-wrapper .content .sidebar-group .sidebar {
  background: #131022;
  border-right-color: #1B1632;
}

html .darkmode.main-chat-blk .main-wrapper .content .sidebar-group .sidebar .user-list li a:hover,
html[data-theme=dark].main-chat-blk .main-wrapper .content .sidebar-group .sidebar .user-list li a:hover {
  background: #1B1632;
}

html .darkmode.main-chat-blk .main-wrapper .content .action-circle,
html[data-theme=dark].main-chat-blk .main-wrapper .content .action-circle {
  background: #131022 !important;
}

html .darkmode.main-chat-blk .main-wrapper .chat-page-wrapper .left-chat-title,
html[data-theme=dark].main-chat-blk .main-wrapper .chat-page-wrapper .left-chat-title {
  border-bottom-color: #1B1632;
}

html .darkmode.main-chat-blk .right-sidebar .right-sidebar-wrap,
html[data-theme=dark].main-chat-blk .right-sidebar .right-sidebar-wrap {
  background: #131022;
  border-left-color: #1B1632;
}

html .darkmode.main-chat-blk .chat,
html[data-theme=dark].main-chat-blk .chat {
  background: #131022;
}

html .darkmode.main-chat-blk .chat .chat-header,
html[data-theme=dark].main-chat-blk .chat .chat-header {
  background: #131022;
  border-bottom-color: #1B1632;
}

html .darkmode.main-chat-blk .user-chat-search input[type=text],
html .darkmode.main-chat-blk .chat-search input[type=text],
html[data-theme=dark].main-chat-blk .user-chat-search input[type=text],
html[data-theme=dark].main-chat-blk .chat-search input[type=text] {
  background-color: #131022;
  color: #EFEFF2;
  border-color: #1B1632;
}

html .darkmode.main-chat-blk .form-control-feedback,
html[data-theme=dark].main-chat-blk .form-control-feedback {
  color: rgba(91, 87, 107, 0.6980392157);
}

html .darkmode.main-chat-blk .chat-member-details .member-details ul,
html[data-theme=dark].main-chat-blk .chat-member-details .member-details ul {
  border-bottom-color: #1B1632;
}

html .darkmode.main-chat-blk .chat-member-details .member-details h5,
html .darkmode.main-chat-blk .chat-member-details .member-details h6,
html .darkmode.main-chat-blk .chat-member-details .member-details span,
html[data-theme=dark].main-chat-blk .chat-member-details .member-details h5,
html[data-theme=dark].main-chat-blk .chat-member-details .member-details h6,
html[data-theme=dark].main-chat-blk .chat-member-details .member-details span {
  color: #EFEFF2;
}

html .darkmode.main-chat-blk .chat-member-details .member-details a,
html[data-theme=dark].main-chat-blk .chat-member-details .member-details a {
  background: #1B1632;
  color: rgba(185, 183, 192, 0.5019607843);
}

html .darkmode.main-chat-blk .chat-member-details .member-details a:hover,
html[data-theme=dark].main-chat-blk .chat-member-details .member-details a:hover {
  color: #EFEFF2;
}

html .darkmode.main-chat-blk .about-media-tabs .nav .nav-item,
html[data-theme=dark].main-chat-blk .about-media-tabs .nav .nav-item {
  background: #131022;
  color: #EFEFF2;
}

html .darkmode.main-chat-blk .about-media-tabs .nav .nav-item.active,
html[data-theme=dark].main-chat-blk .about-media-tabs .nav .nav-item.active {
  color: #FFF;
}

html .darkmode.main-chat-blk .media-doc-blk span,
html[data-theme=dark].main-chat-blk .media-doc-blk span {
  background: #1B1632;
}

html .darkmode.main-chat-blk .file-download,
html[data-theme=dark].main-chat-blk .file-download {
  background: #1B1632;
}

html .darkmode.main-chat-blk .file-download .file-type,
html[data-theme=dark].main-chat-blk .file-download .file-type {
  background-color: #131022;
}

html .darkmode.main-chat-blk .file-download .file-details span.file-name,
html[data-theme=dark].main-chat-blk .file-download .file-details span.file-name {
  color: #EFEFF2;
}

html .darkmode.main-chat-blk .stared-group span,
html[data-theme=dark].main-chat-blk .stared-group span {
  background: #1B1632;
}

html .darkmode .part-name.sub-part-name,
html .darkmode .more-icon a,
html .darkmode .meet-call-menu-blk .video-call-action ul li a,
html[data-theme=dark] .part-name.sub-part-name,
html[data-theme=dark] .more-icon a,
html[data-theme=dark] .meet-call-menu-blk .video-call-action ul li a {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .card .card-title,
html[data-theme=dark] .card .card-title {
  color: #EFEFF2;
}

html .darkmode .popover .popover-body,
html[data-theme=dark] .popover .popover-body {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .popover .popover-header,
html[data-theme=dark] .popover .popover-header {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .popover,
html[data-theme=dark] .popover {
  border-color: #1B1632;
}

html .darkmode .swal2-popup,
html .darkmode .toast-header,
html .darkmode .toast-body,
html[data-theme=dark] .swal2-popup,
html[data-theme=dark] .toast-header,
html[data-theme=dark] .toast-body {
  background: #131022;
}

html .darkmode .toast-header .btn-close,
html[data-theme=dark] .toast-header .btn-close {
  color: #EFEFF2;
}

html .darkmode .scroll-demo,
html .darkmode .icons-list li,
html[data-theme=dark] .scroll-demo,
html[data-theme=dark] .icons-list li {
  border-color: #1B1632;
}

html .darkmode .select2-container--default .select2-selection--multiple,
html[data-theme=dark] .select2-container--default .select2-selection--multiple {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .table> :not(caption)>*>*,
html[data-theme=dark] .table> :not(caption)>*>* {
  background: #131022;
}

html .darkmode .breadcrumb .breadcrumb-item.active,
html[data-theme=dark] .breadcrumb .breadcrumb-item.active {
  color: rgba(185, 183, 192, 0.5019607843);
}

html .darkmode .filter-wrapper,
html[data-theme=dark] .filter-wrapper {
  border-color: #1B1632;
}

html .darkmode .list-tab ul,
html[data-theme=dark] .list-tab ul {
  border-color: #1B1632;
}

html .darkmode .meet-call-menu-blk .video-call-action ul li a,
html[data-theme=dark] .meet-call-menu-blk .video-call-action ul li a {
  color: #EFEFF2;
}

html .darkmode .main-chat-blk .user-list li a:hover,
html[data-theme=dark] .main-chat-blk .user-list li a:hover {
  background: #131022;
}

html .darkmode .chat-msg-blk .chats.chats-right .message-content::before,
html[data-theme=dark] .chat-msg-blk .chats.chats-right .message-content::before {
  border-left-color: #131022;
}

html .darkmode .chat-msg-blk .chats .message-content,
html[data-theme=dark] .chat-msg-blk .chats .message-content {
  background: #131022 !important;
}

html .darkmode .chat-msg-blk .chats .message-content::before,
html[data-theme=dark] .chat-msg-blk .chats .message-content::before {
  border-right-color: #131022;
}

html .darkmode .right-user-side .slime-grp .chat-footer,
html[data-theme=dark] .right-user-side .slime-grp .chat-footer {
  background: #131022;
}

html .darkmode .right-user-side .slime-grp .chat-footer form .chat_form,
html[data-theme=dark] .right-user-side .slime-grp .chat-footer form .chat_form {
  background: #131022;
  border-color: #1B1632;
  color: rgba(185, 183, 192, 0.5019607843);
}

html .darkmode .chat_form::placeholder,
html[data-theme=dark] .chat_form::placeholder {
  color: #5B576B !important;
}

html .darkmode .dropdown-item:not(.active):hover,
html .darkmode .dropdown-item:not(.active):focus,
html .darkmode .dropdown-item:not(.active):active,
html .darkmode .dropdown-item.active,
html[data-theme=dark] .dropdown-item:not(.active):hover,
html[data-theme=dark] .dropdown-item:not(.active):focus,
html[data-theme=dark] .dropdown-item:not(.active):active,
html[data-theme=dark] .dropdown-item.active {
  background: rgba(91, 87, 107, 0.6980392157);
}

html .darkmode .card-dropdown .dropdown-menu li a:hover,
html[data-theme=dark] .card-dropdown .dropdown-menu li a:hover {
  background: rgba(91, 87, 107, 0.6980392157);
  color: #EFEFF2;
}

html .darkmode .btn-outline-light,
html[data-theme=dark] .btn-outline-light {
  color: #B9B7C0 !important;
  background: #131022 !important;
}

html .darkmode .bg-white,
html[data-theme=dark] .bg-white {
  background: #131022 !important;
}

html .darkmode .user-list-item,
html[data-theme=dark] .user-list-item {
  background: #1B1632 !important;
}

html .darkmode .record-time span:before,
html[data-theme=dark] .record-time span:before {
  background-color: #131022;
}

html .darkmode .nav-control button,
html .darkmode .plyr--video .plyr__control,
html[data-theme=dark] .nav-control button,
html[data-theme=dark] .plyr--video .plyr__control {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .dataTables_paginate .pagination li a,
html[data-theme=dark] .dataTables_paginate .pagination li a {
  color: rgba(185, 183, 192, 0.5019607843);
}

html .darkmode .bootstrap-datetimepicker-widget table th,
html[data-theme=dark] .bootstrap-datetimepicker-widget table th {
  color: rgba(185, 183, 192, 0.5019607843);
}

html .darkmode .list-tab ul li a,
html[data-theme=dark] .list-tab ul li a {
  color: rgba(185, 183, 192, 0.5019607843);
}

html .darkmode .accordion .accordion-button.collapsed,
html[data-theme=dark] .accordion .accordion-button.collapsed {
  background: #131022 !important;
}

html .darkmode .accordion .accordion-button.collapsed:after,
html[data-theme=dark] .accordion .accordion-button.collapsed:after {
  background: #131022;
}

html .darkmode .accordion .accordion-button,
html[data-theme=dark] .accordion .accordion-button {
  background: #0f0c1c !important;
}

html .darkmode span.icon-addon,
html .darkmode .bookingrange,
html[data-theme=dark] span.icon-addon,
html[data-theme=dark] .bookingrange {
  color: #B9B7C0;
}

html .darkmode .daterangepicker,
html[data-theme=dark] .daterangepicker {
  background: #131022;
  border-color: #1B1632;
}

html .darkmode .daterangepicker:after,
html[data-theme=dark] .daterangepicker:after {
  border-bottom-color: #5B576B;
}

html .darkmode .accordion-button:after,
html[data-theme=dark] .accordion-button:after {
  background: #131022;
}

html .darkmode .language-setup-table,
html[data-theme=dark] .language-setup-table {
  border-color: #1B1632;
}

html .darkmode #calendar .fc-day,
html .darkmode #events .fc-day,
html[data-theme=dark] #calendar .fc-day,
html[data-theme=dark] #events .fc-day {
  background: #1B1632;
  border-color: #322D46;
}

html .darkmode #calendar .fc-daygrid-day-number,
html .darkmode #events .fc-daygrid-day-number,
html[data-theme=dark] #calendar .fc-daygrid-day-number,
html[data-theme=dark] #events .fc-daygrid-day-number {
  color: #B9B7C0;
}

html .darkmode #calendar .fc-scrollgrid,
html .darkmode #events .fc-scrollgrid,
html[data-theme=dark] #calendar .fc-scrollgrid,
html[data-theme=dark] #events .fc-scrollgrid {
  border-color: #322D46;
}

html .darkmode #calendar .fc-col-header-cell-cushion,
html .darkmode #events .fc-col-header-cell-cushion,
html[data-theme=dark] #calendar .fc-col-header-cell-cushion,
html[data-theme=dark] #events .fc-col-header-cell-cushion {
  color: #EFEFF2;
}

html .darkmode #calendar .fc-daygrid-day.fc-day-today,
html .darkmode #events .fc-daygrid-day.fc-day-today,
html[data-theme=dark] #calendar .fc-daygrid-day.fc-day-today,
html[data-theme=dark] #events .fc-daygrid-day.fc-day-today {
  background-color: #131022;
}

html .darkmode #calendar td,
html .darkmode #calendar th,
html .darkmode #events td,
html .darkmode #events th,
html[data-theme=dark] #calendar td,
html[data-theme=dark] #calendar th,
html[data-theme=dark] #events td,
html[data-theme=dark] #events th {
  border-color: #322D46;
}

html .darkmode #global-loader,
html[data-theme=dark] #global-loader {
  background: #0F0C1C;
}

html .darkmode .invoice-logo-dark,
html[data-theme=dark] .invoice-logo-dark {
  display: none;
}

html .darkmode .invoice-logo-white,
html[data-theme=dark] .invoice-logo-white {
  display: block;
}

/* ---------- Dark Mode Overrides ---------- */
[data-theme=dark] .sidebar {
  background: #111827;
  box-shadow: none;
}

[data-theme=dark] .sidebar .sidebar-menu ul li a.active,
[data-theme=dark] .sidebar .sidebar-menu ul li a.subdrop.active {
  background: rgba(255, 255, 255, 0.06) !important;
  color: #f4f6fb !important;
  border-color: rgba(255, 255, 255, 0.1) !important;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.07), 0 2px 6px rgba(0, 0, 0, 0.45) !important;
}

[data-theme=dark] .sidebar .sidebar-menu ul li a.active:hover,
[data-theme=dark] .sidebar .sidebar-menu ul li a.subdrop.active:hover {
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.07), 0 5px 12px rgba(0, 0, 0, 0.55) !important;
}

[data-theme=dark] .mui-brand-card,
[data-theme=dark] .mui-side-footer .mui-side-user {
  background: #141b2d;
  border-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .mui-side-footer,
[data-theme=dark] .lang-head,
[data-theme=dark] .anew-head,
[data-theme=dark] .anew-foot,
[data-theme=dark] .ntf-head,
[data-theme=dark] .ntf-foot,
[data-theme=dark] .msg-head,
[data-theme=dark] .msg-foot,
[data-theme=dark] .apps-head,
[data-theme=dark] .apps-foot {
  border-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .mui-brand-menu {
  box-shadow: 0 20px 46px rgba(0, 0, 0, 0.55);
  background: #141b2d;
  border-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .header .header-left #toggle_btn,
[data-theme=dark] .mui-brand-menu .mui-bi-meta b {
  color: #ffffff;
}

[data-theme=dark] .expand-menu .header-left .logo img {
  display: none;
}

[data-theme=dark] .header,
[data-theme=dark] .header .header-left {
  background: #141b2d !important;
  border-bottom-color: rgba(255, 255, 255, 0.07);
}

[data-theme=dark] .header .header-left {
  background: #111827 !important;
  border-right-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .header .btn-icon,
[data-theme=dark] .header .btn-outline-light.bg-white,
[data-theme=dark] .mui-profile-toggle {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.06) 0%, rgba(255, 255, 255, 0.02) 100%) !important;
  border-color: rgba(255, 255, 255, 0.08) !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.06) !important;
}

[data-theme=dark] .header .mui-count {
  border-color: #141b2d;
}

[data-theme=dark] .header .top-nav-search .searchinputs input {
  background: rgba(255, 255, 255, 0.04);
  border-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .mui-search-kbd .mui-kbd-key {
  background: rgba(255, 255, 255, 0.06);
}

[data-theme=dark] .header .mui-branch .text-dark,
[data-theme=dark] .header .mui-branch .fw-semibold {
  color: #c7cede !important;
}

[data-theme=dark] .dropdown-menu {
  border-color: rgba(255, 255, 255, 0.08);
  box-shadow: 0 0.75rem 2rem rgba(0, 0, 0, 0.5);
}

[data-theme=dark] .anew-menu,
[data-theme=dark] .ntf-panel,
[data-theme=dark] .msg-panel,
[data-theme=dark] .apps-panel,
[data-theme=dark] .lang-menu,
[data-theme=dark] .ay-menu,
[data-theme=dark] .mui-profile-drop {
  box-shadow: 0 22px 50px rgba(0, 0, 0, 0.5);
}

[data-theme=dark] .ntf-tab.active {
  background: #141b2d;
  color: #ffffff !important;
}

[data-theme=dark] .msg-search input {
  color: #c7cede;
}

/* Global Search Popup / Command Palette */

[data-theme=dark] .mui-search-panel {
  background: #141b2d !important;
  border-color: rgba(255, 255, 255, 0.08) !important;
  box-shadow: 0 30px 70px rgba(0, 0, 0, 0.55);
}

[data-theme=dark] .mui-search-top {
  border-bottom-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .mui-search-top>i {
  color: #8a94a6;
}

[data-theme=dark] .mui-search-top input {
  color: #f4f6fb;
}

[data-theme=dark] .mui-search-top input::placeholder {
  color: #6b7590;
}

[data-theme=dark] .mui-search-esc {
  color: #8a94a6;
  background: rgba(255, 255, 255, 0.06);
  border-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .mui-search-sec-hdr {
  color: #6b7590;
}

[data-theme=dark] .mui-search-row:hover,
[data-theme=dark] .mui-search-row.is-active {
  background: rgba(255, 255, 255, 0.05);
}

[data-theme=dark] .msr-ic {
  color: #8a94a6;
  background: rgba(255, 255, 255, 0.06);
}

[data-theme=dark] .msr-txt {
  color: #f4f6fb;
}

[data-theme=dark] .msr-tag {
  color: #8a94a6;
  background: rgba(255, 255, 255, 0.06);
}

[data-theme=dark] .msr-go {
  color: #6b7590;
}

[data-theme=dark] .mui-search-empty {
  color: #8a94a6;
}

[data-theme=dark] .mui-search-empty i {
  color: #6b7590;
}

[data-theme=dark] .mui-search-foot {
  border-top-color: rgba(255, 255, 255, 0.08);
  color: #8a94a6;
}

[data-theme=dark] .mui-search-foot .mui-kbd {
  color: #c7cede;
  background: rgba(255, 255, 255, 0.06);
  border-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .header .dropdown>.btn-outline-light.bg-white:not(.btn-icon):not(.mui-branch),
[data-theme=dark] .ay-head {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.06) 0%, rgba(255, 255, 255, 0.02) 100%) !important;
  border-color: rgba(255, 255, 255, 0.08) !important;
}

/* ---------- RTL Overrides ---------- */
[dir=rtl] .page-wrapper {
  margin-left: 0;
  margin-right: 280px;
}

[dir=rtl] .sidebar {
  left: auto;
  right: 0;
  border-right: 0;
  border-left: 1px solid #E9EDF4;
}

[dir=rtl] .sidebar-menu ul li a .menu-arrow {
  margin-left: 0;
  margin-right: auto;
}

[dir=rtl] .sidebar-menu ul li a.active::before {
  left: auto;
  right: 0;
  border-radius: 3px 0 0 3px;
}

[dir=rtl] .sidebar-menu ul ul li a {
  padding-left: 10px !important;
  padding-right: 38px !important;
}

@media (min-width: 992px) {
  [dir=rtl] body.mini-sidebar .page-wrapper {
    margin-left: 0;
    margin-right: 84px;
  }
}

/* ---------- RTL Overrides ---------- */
[dir=rtl] .header .mui-count {
  right: auto;
  left: -6px;
}

[dir=rtl] .ntf-item.unread::before {
  left: auto;
  right: 0;
  border-radius: 3px 0 0 3px;
}

[dir=rtl] .ntf-badge {
  right: auto;
  left: -3px;
}

[dir=rtl] .msg-av::after {
  right: auto;
  left: 1px;
}

[dir=rtl] .anew-item:hover {
  transform: translateX(-2px);
}

[dir=rtl] .anew-arrow {
  transform: scaleX(-1) translateX(-4px);
}

[dir=rtl] .anew-item:hover .anew-arrow {
  transform: scaleX(-1) translateX(0);
}

[dir=rtl] .ay-arrow {
  transform: scaleX(-1) translateX(-4px);
}

[dir=rtl] .ay-item:hover .ay-arrow {
  transform: scaleX(-1) translateX(0);
}

[dir=rtl] .lang-trigger-flag {
  margin-left: 0;
}

.layout-mode-rtl .header .header-user .user-menu>.d-flex.align-items-center {
  margin-right: auto;
  margin-left: unset;
}

.layout-mode-rtl .header .dropdown>.btn-outline-light.bg-white:not(.btn-icon):not(.mui-branch) .ti-calendar-due {
  margin-left: 8px !important;
  margin-right: unset !important;
}

.layout-mode-rtl .header .searchinputs input {
  padding-right: 45px !important;
  padding-left: 10px !important;
}

.layout-mode-rtl .header .top-nav-search .search-addon {
  position: absolute;
  top: 50%;
  left: 6px;
  right: unset;
}

.layout-mode-rtl .header .top-nav-search .searchinputs::before {
  right: 14px !important;
  left: unset !important;
}

.layout-mode-rtl .header .dropdown>.btn-outline-light.bg-white:not(.btn-icon):not(.mui-branch)::after {
  content: "\ea5f";
  margin-right: 8px;
  margin-left: unset;
}

.layout-mode-rtl .sidebar .sidebar-menu ul li a>i {
  margin-left: 10px;
  margin-right: unset;
}

.layout-mode-rtl .sidebar .sidebar-menu ul li a .menu-arrow {
  margin-left: unset;
  margin-right: auto;
}

[data-theme=dark] .stat-tile {
  border: 1px solid rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .stat-tile.stat-tile-plain {
  background: #0f0c1c;
}

[data-theme=dark] .gauge .gauge-value {
  color: #ffffff;
}

[data-theme=dark] .portal-button-dark {
  background: #0F0C1C;
  border-color: #1B1632;
}

[data-theme=dark] .btn.btn-light {
  background-color: #0f0c1c;
  color: #fff;
  border: 1px solid #242033;
}

[data-theme=dark] .btn.btn-light:hover {
  color: #0F0C1C;
}

[data-theme=dark] .bg-outline-secondary {
  background-color: transparent !important;
}

[data-theme=dark] html .darkmode .todo-accordion .accordion-button.collapsed,
[data-theme=dark] html[data-theme=dark] .todo-accordion .accordion-button.collapsed {
  background: #0f0c1c !important;
}

[data-theme=dark] .bootstrap-tagsinput .tag {
  background: #080809;
  color: #fefefe;
}

[data-theme=dark] .profile-hero {
  background: transparent;
}

[data-theme=dark] .profile-hero::before {
  background: transparent;
}

[data-theme=dark] .profile-hero::after {
  background: transparent;
}

[data-theme=dark] .alert-light {
  background-color: #202C4B;
}

[data-theme=dark] .profile-insight-item {
  background: rgb(19, 16, 34);
}

[data-theme=dark] .bg-transparent-warning {
  background: rgba(254, 248, 234, 0.0509803922);
}

[data-theme=dark] .bg-transparent-info {
  background: rgba(231, 241, 252, 0.0784313725);
}

[data-theme=dark] .bg-transparent-danger {
  background: rgba(253, 233, 237, 0.1019607843);
}

[data-theme=dark] .badge.badge-light {
  background: rgba(233, 237, 244, 0.0784313725);
}

[data-theme=dark] .bg-transparent-pending {
  background: rgba(230, 249, 255, 0.0392156863);
}

[data-theme=dark] .bg-transparent-success {
  background: rgba(232, 249, 232, 0.1215686275);
}

[data-theme=dark] .bg-transparent-light {
  background: rgba(233, 237, 244, 0.0784313725);
}

[data-theme=dark] .add-more-timetable {
  background: rgba(233, 237, 244, 0.1294117647);
}

[data-theme=dark] .timetable-day {
  flex: 1 0 280px;
  min-width: 280px;
}

[data-theme=dark] .rt-card {
  background: #0F0C1C;
}

[data-theme=dark] .rt-card .rt-title {
  margin-bottom: 4px;
  color: #fff;
}

[data-theme=dark] .chip.chip-soft {
  background: var(--chip-bg, rgba(233, 237, 244, 0.1294117647));
}

[data-theme=dark] .input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),
[data-theme=dark] .input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,
[data-theme=dark] .input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,
[data-theme=dark] .input-group:not(.has-validation)> :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating) {
  border-color: #1B1632 !important;
}

[data-theme=dark] .input-group> :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
  border-color: #1B1632 !important;
}

[data-theme=dark] .dropdown-divider {
  border-color: #1B1632 !important;
}

[data-theme=dark] .border-top {
  border-top: 1px solid #1B1632 !important;
}

[data-theme=dark] .ntf-row.is-unread:hover {
  background: #0F0C1C;
}

[data-theme=dark] .ntf-ann-head {
  background: var(--tint-primary) !important;
}

/* ============================================================
     PAYMENT SETTINGS DARK MODE OVERRIDES
     ============================================================ */

[data-theme=dark] .fin-hero-env {
  background: #1B1632 !important;
  color: #ffffff !important;
  border: 1px solid #322D46;
}

[data-theme=dark] .fin-hero-env.is-test {
  background: rgba(255, 159, 67, 0.2) !important;
  color: #ff9f43 !important;
  border-color: rgba(255, 159, 67, 0.35) !important;
}

[data-theme=dark] .fin-badge.is-live {
  background: rgba(40, 199, 111, 0.16) !important;
  border-color: rgba(40, 199, 111, 0.32) !important;
  color: #28c76f !important;
}

[data-theme=dark] .fin-badge.is-test {
  background: rgba(255, 159, 67, 0.16) !important;
  border-color: rgba(255, 159, 67, 0.32) !important;
  color: #ff9f43 !important;
}

[data-theme=dark] .fin-badge.is-review {
  background: rgba(115, 103, 240, 0.16) !important;
  border-color: rgba(115, 103, 240, 0.32) !important;
  color: #7367f0 !important;
}

[data-theme=dark] .fin-badge.is-alert {
  background: rgba(234, 84, 85, 0.16) !important;
  border-color: rgba(234, 84, 85, 0.32) !important;
  color: #ea5455 !important;
}

[data-theme=dark] .fin-badge.is-off {
  background: #131022 !important;
  border-color: #1B1632 !important;
  color: #B9B7C0 !important;
}

[data-theme=dark] .fin-nav-tag.is-set {
  background: rgba(40, 199, 111, 0.16) !important;
  color: #28c76f !important;
}

[data-theme=dark] .fin-nav-tag.is-warn {
  background: rgba(255, 159, 67, 0.16) !important;
  color: #ff9f43 !important;
}

[data-theme=dark] .fin-rule-then {
  background: rgba(40, 199, 111, 0.16) !important;
  color: #28c76f !important;
}

[data-theme=dark] .fin-rule-cond {
  background: rgba(115, 103, 240, 0.16) !important;
  color: #7367f0 !important;
}

[data-theme=dark] .fin-card-ic.is-money {
  background: rgba(40, 199, 111, 0.16) !important;
  color: #28c76f !important;
}

[data-theme=dark] .fin-card-ic.is-warn {
  background: rgba(255, 159, 67, 0.16) !important;
  color: #ff9f43 !important;
}

[data-theme=dark] .fin-card-ic.is-alert {
  background: rgba(234, 84, 85, 0.16) !important;
  color: #ea5455 !important;
}

[data-theme=dark] .fin-note.is-money .fin-note-head i {
  color: #28c76f !important;
}

[data-theme=dark] .fin-note.is-warn .fin-note-head i {
  color: #ff9f43 !important;
}

[data-theme=dark] .fin-note.is-alert .fin-note-head i {
  color: #ea5455 !important;
}

[data-theme=dark] .fin-tab-n {
  background: rgba(255, 255, 255, 0.14) !important;
  color: inherit !important;
}

[data-theme=dark] .fin-delta ins {
  color: #28c76f !important;
}

[data-theme=dark] .fin-prov-key {
  background: #131022 !important;
  border-color: #1B1632 !important;
  color: #B9B7C0 !important;
}

[data-theme=dark] .fin-prov-key code {
  color: #EFEFF2 !important;
}

[data-theme=dark] .fin-rule-n {
  background: #131022 !important;
  border-color: #1B1632 !important;
  color: #B9B7C0 !important;
}

[data-theme=dark] .fin-dep {
  background: #131022 !important;
  border-color: #1B1632 !important;
  color: #B9B7C0 !important;
}

[data-theme=dark] .fin-dep.is-missing {
  background: rgba(234, 84, 85, 0.16) !important;
  border-color: rgba(234, 84, 85, 0.32) !important;
  color: #ea5455 !important;
}

/* --- Form Controls & Inputs --- */

[data-theme=dark] .fin-input,
[data-theme=dark] .fin-select {
  background-color: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .fin-input:focus,
[data-theme=dark] .fin-select:focus {
  border-color: var(--bs-primary) !important;
  box-shadow: 0 0 0 3px rgba(115, 103, 240, 0.25) !important;
}

[data-theme=dark] .fin-input option,
[data-theme=dark] .fin-select option {
  background-color: #0F0C1C !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .fin-money-field {
  border-color: #1B1632 !important;
  background-color: #0F0C1C !important;
}

[data-theme=dark] .fin-money-field .fin-money-sym {
  background-color: #131022 !important;
  border-right-color: #1B1632 !important;
  color: #B9B7C0 !important;
}

[data-theme=dark] .fin-money-field input {
  background-color: transparent !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .fin-money-field input::placeholder {
  color: rgba(91, 87, 107, 0.6980392157) !important;
}

[data-theme=dark] .fin-money-field:focus-within {
  border-color: var(--bs-primary) !important;
  box-shadow: 0 0 0 3px rgba(115, 103, 240, 0.25) !important;
}

/* ============================================================
     WORKFLOW RULES DARK MODE OVERRIDES
     ============================================================ */

[data-theme=dark] .rule-status-badge.is-on {
  background: rgba(40, 199, 111, 0.16) !important;
  color: #28c76f !important;
}

[data-theme=dark] .rule-status-badge.is-draft {
  background: rgba(115, 103, 240, 0.16) !important;
  color: #7367f0 !important;
}

[data-theme=dark] .rule-status-badge.is-warn {
  background: rgba(255, 159, 67, 0.16) !important;
  color: #ff9f43 !important;
}

[data-theme=dark] .rule-status-badge.is-stop {
  background: rgba(234, 84, 85, 0.16) !important;
  color: #ea5455 !important;
}

[data-theme=dark] .rule-status-badge.is-accent {
  background: rgba(115, 103, 240, 0.16) !important;
  color: #7367f0 !important;
}

[data-theme=dark] .rule-status-badge.is-off {
  background: #131022 !important;
  border-color: #1B1632 !important;
  color: #B9B7C0 !important;
}

[data-theme=dark] .clause {
  background: #131022;
}

[data-theme=dark] .clause.is-when {
  background: rgba(115, 103, 240, 0.16) !important;
}

[data-theme=dark] .clause.is-when::before {
  color: #7367f0 !important;
}

[data-theme=dark] .clause.is-if {
  background: rgba(255, 159, 67, 0.16) !important;
}

[data-theme=dark] .clause.is-if::before {
  color: #ff9f43 !important;
}

[data-theme=dark] .clause.is-then {
  background: rgba(40, 199, 111, 0.16) !important;
}

[data-theme=dark] .clause.is-then::before {
  color: #28c76f !important;
}

[data-theme=dark] .clause code {
  background: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .priority.is-high span.is-lit {
  background: #ff9f43 !important;
}

[data-theme=dark] .priority.is-critical span.is-lit {
  background: #ea5455 !important;
}

[data-theme=dark] .actions .rule-action {
  background: rgba(40, 199, 111, 0.16) !important;
  color: #28c76f !important;
}

[data-theme=dark] .builder-icon {
  background: rgba(255, 159, 67, 0.16) !important;
  color: #ff9f43 !important;
}

[data-theme=dark] .key {
  background: #131022 !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .join-pill {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .join-pill button {
  color: #B9B7C0 !important;
}

[data-theme=dark] .join-pill button.is-active {
  background: var(--bs-primary) !important;
  color: #ffffff !important;
}

[data-theme=dark] .variable {
  background: rgba(115, 103, 240, 0.16) !important;
  color: #7367f0 !important;
}

[data-theme=dark] .variable:hover {
  background: #131022 !important;
  border-color: var(--bs-primary) !important;
}

[data-theme=dark] .rule.is-error {
  border-color: rgba(234, 84, 85, 0.4) !important;
}

[data-theme=dark] .rule.is-error::before {
  background: #ea5455 !important;
}

[data-theme=dark] .rule.is-off {
  background: #0F0C1C !important;
}

[data-theme=dark] .rating .rating-rate {
  color: #ffffff !important;
}

/* ============================================================
     UPLOAD BUTTON & PICTURE UPLOADER DARK MODE OVERRIDES
     ============================================================ */

[data-theme=dark] .drag-upload-btn {
  background-color: #131022 !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .drag-upload-btn:hover {
  background-color: #1B1632 !important;
  color: #ffffff !important;
}

[data-theme=dark] .drag-upload-btn input {
  color: #EFEFF2 !important;
}

[data-theme=dark] .profile-uploader .drag-upload-btn,
[data-theme=dark] .upload-pic .drag-upload-btn {
  background-color: #131022 !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .upload-pic .avatar.frames,
[data-theme=dark] .upload-pic .frames,
[data-theme=dark] .avatar.frames,
[data-theme=dark] .frames {
  background-color: #131022 !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .upload-pic .avatar.frames i,
[data-theme=dark] .upload-pic .frames i,
[data-theme=dark] .avatar.frames i,
[data-theme=dark] .frames i {
  color: #EFEFF2 !important;
}

/* ============================================================
     SUMMERNOTE / RICH TEXT EDITOR DARK MODE OVERRIDES
     ============================================================ */

[data-theme=dark] .note-editor.note-frame,
[data-theme=dark] .note-editor.note-airframe,
[data-theme=dark] .note-editor {
  border-color: #1B1632 !important;
  background-color: #0F0C1C !important;
}

[data-theme=dark] .note-editor.note-frame .note-toolbar,
[data-theme=dark] .note-editor.note-airframe .note-toolbar,
[data-theme=dark] .note-editor .note-toolbar {
  background-color: #131022 !important;
  border-bottom-color: #1B1632 !important;
}

[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .note-btn,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .btn,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .note-btn,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .btn,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .note-btn,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .btn,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .note-btn,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .btn,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .note-btn,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .btn,
[data-theme=dark] .note-editor .note-toolbar .btn-group .note-btn,
[data-theme=dark] .note-editor .note-toolbar .btn-group .btn {
  background-color: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .note-btn:hover,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .note-btn:focus,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .note-btn.active,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .note-btn:active,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .btn:hover,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .btn:focus,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .btn.active,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn-group .btn:active,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .note-btn:hover,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .note-btn:focus,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .note-btn.active,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .note-btn:active,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .btn:hover,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .btn:focus,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .btn.active,
[data-theme=dark] .note-editor.note-frame .note-toolbar .btn-group .btn:active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .note-btn:hover,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .note-btn:focus,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .note-btn.active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .note-btn:active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .btn:hover,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .btn:focus,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .btn.active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn-group .btn:active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .note-btn:hover,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .note-btn:focus,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .note-btn.active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .note-btn:active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .btn:hover,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .btn:focus,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .btn.active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .btn-group .btn:active,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .note-btn:hover,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .note-btn:focus,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .note-btn.active,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .note-btn:active,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .btn:hover,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .btn:focus,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .btn.active,
[data-theme=dark] .note-editor .note-toolbar .note-btn-group .btn:active,
[data-theme=dark] .note-editor .note-toolbar .btn-group .note-btn:hover,
[data-theme=dark] .note-editor .note-toolbar .btn-group .note-btn:focus,
[data-theme=dark] .note-editor .note-toolbar .btn-group .note-btn.active,
[data-theme=dark] .note-editor .note-toolbar .btn-group .note-btn:active,
[data-theme=dark] .note-editor .note-toolbar .btn-group .btn:hover,
[data-theme=dark] .note-editor .note-toolbar .btn-group .btn:focus,
[data-theme=dark] .note-editor .note-toolbar .btn-group .btn.active,
[data-theme=dark] .note-editor .note-toolbar .btn-group .btn:active {
  background-color: #1B1632 !important;
  color: #ffffff !important;
  border-color: #322D46 !important;
}

[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn,
[data-theme=dark] .note-editor .note-toolbar .note-btn {
  background-color: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn:hover,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn:focus,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn.active,
[data-theme=dark] .note-editor.note-frame .note-toolbar .note-btn:active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn:hover,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn:focus,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn.active,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-btn:active,
[data-theme=dark] .note-editor .note-toolbar .note-btn:hover,
[data-theme=dark] .note-editor .note-toolbar .note-btn:focus,
[data-theme=dark] .note-editor .note-toolbar .note-btn.active,
[data-theme=dark] .note-editor .note-toolbar .note-btn:active {
  background-color: #1B1632 !important;
  color: #ffffff !important;
  border-color: #322D46 !important;
}

[data-theme=dark] .note-editor.note-frame .note-toolbar .note-color-all .note-color-reset,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-color-all .note-color-reset,
[data-theme=dark] .note-editor .note-toolbar .note-color-all .note-color-reset {
  background-color: #0F0C1C !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .note-editor.note-frame .note-toolbar .note-color-all .note-color-reset:hover,
[data-theme=dark] .note-editor.note-airframe .note-toolbar .note-color-all .note-color-reset:hover,
[data-theme=dark] .note-editor .note-toolbar .note-color-all .note-color-reset:hover {
  background-color: #1B1632 !important;
}

[data-theme=dark] .note-editor.note-frame .note-editing-area,
[data-theme=dark] .note-editor.note-airframe .note-editing-area,
[data-theme=dark] .note-editor .note-editing-area {
  background-color: #0F0C1C !important;
}

[data-theme=dark] .note-editor.note-frame .note-editing-area .note-editable,
[data-theme=dark] .note-editor.note-airframe .note-editing-area .note-editable,
[data-theme=dark] .note-editor .note-editing-area .note-editable {
  background-color: #0F0C1C !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .note-editor.note-frame .note-editing-area .note-editable[contenteditable=true]:focus,
[data-theme=dark] .note-editor.note-airframe .note-editing-area .note-editable[contenteditable=true]:focus,
[data-theme=dark] .note-editor .note-editing-area .note-editable[contenteditable=true]:focus {
  background-color: #0F0C1C !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .note-editor.note-frame .note-statusbar,
[data-theme=dark] .note-editor.note-airframe .note-statusbar,
[data-theme=dark] .note-editor .note-statusbar {
  background-color: #131022 !important;
  border-top-color: #1B1632 !important;
}

[data-theme=dark] .note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar,
[data-theme=dark] .note-editor.note-airframe .note-statusbar .note-resizebar .note-icon-bar,
[data-theme=dark] .note-editor .note-statusbar .note-resizebar .note-icon-bar {
  border-top-color: rgba(91, 87, 107, 0.6980392157) !important;
}

[data-theme=dark] .note-popover,
[data-theme=dark] .note-dropdown-menu,
[data-theme=dark] .dropdown-menu.note-check {
  background-color: #131022 !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .note-popover .dropdown-item,
[data-theme=dark] .note-popover .note-dropdown-item,
[data-theme=dark] .note-dropdown-menu .dropdown-item,
[data-theme=dark] .note-dropdown-menu .note-dropdown-item,
[data-theme=dark] .dropdown-menu.note-check .dropdown-item,
[data-theme=dark] .dropdown-menu.note-check .note-dropdown-item {
  color: #EFEFF2 !important;
}

[data-theme=dark] .note-popover .dropdown-item:hover,
[data-theme=dark] .note-popover .dropdown-item:focus,
[data-theme=dark] .note-popover .note-dropdown-item:hover,
[data-theme=dark] .note-popover .note-dropdown-item:focus,
[data-theme=dark] .note-dropdown-menu .dropdown-item:hover,
[data-theme=dark] .note-dropdown-menu .dropdown-item:focus,
[data-theme=dark] .note-dropdown-menu .note-dropdown-item:hover,
[data-theme=dark] .note-dropdown-menu .note-dropdown-item:focus,
[data-theme=dark] .dropdown-menu.note-check .dropdown-item:hover,
[data-theme=dark] .dropdown-menu.note-check .dropdown-item:focus,
[data-theme=dark] .dropdown-menu.note-check .note-dropdown-item:hover,
[data-theme=dark] .dropdown-menu.note-check .note-dropdown-item:focus {
  background-color: #1B1632 !important;
  color: #ffffff !important;
}

/* ============================================================
     SCHOOL PROFILE DARK MODE OVERRIDES
     ============================================================ */

[data-theme=dark] .identity-panel {
  background: linear-gradient(115deg, rgba(115, 103, 240, 0.15) 0%, #131022 44%), #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .identity-panel::after {
  border-color: rgba(115, 103, 240, 0.15) !important;
}

[data-theme=dark] .identity-crest {
  background: #0F0C1C !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .identity-crest-pip {
  border-color: #0F0C1C !important;
}

[data-theme=dark] .identity-panel-name {
  color: #EFEFF2 !important;
}

[data-theme=dark] .identity-facts {
  border-top-color: #1B1632 !important;
}

[data-theme=dark] .identity-fact b {
  color: #EFEFF2 !important;
}

[data-theme=dark] .section-nav {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .section-nav-heading {
  color: #B9B7C0 !important;
}

[data-theme=dark] .section-nav-link {
  color: #B9B7C0 !important;
}

[data-theme=dark] .section-nav-link:hover {
  background: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .section-nav-link.active {
  background: rgba(115, 103, 240, 0.16) !important;
  color: #7367f0 !important;
}

[data-theme=dark] .section-nav-link.active::before {
  background: #7367f0 !important;
}

[data-theme=dark] .section-nav-foot {
  border-top-color: #1B1632 !important;
}

[data-theme=dark] .section-head-title {
  color: #EFEFF2 !important;
}

[data-theme=dark] .section-head-sub {
  color: #B9B7C0 !important;
}

[data-theme=dark] .option-card {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .option-card-head {
  background: #0F0C1C !important;
  border-bottom-color: #1B1632 !important;
}

[data-theme=dark] .option-card-icon {
  background: #131022 !important;
  border-color: #1B1632 !important;
  color: #7367f0 !important;
}

[data-theme=dark] .option-card-title {
  color: #EFEFF2 !important;
}

[data-theme=dark] .option-row+.option-row {
  border-top-color: #1B1632 !important;
}

[data-theme=dark] .option-row-key {
  color: #B9B7C0 !important;
}

[data-theme=dark] .option-row-value {
  color: #EFEFF2 !important;
}

[data-theme=dark] .option-row-value.is-empty {
  color: rgba(91, 87, 107, 0.6980392157) !important;
}

[data-theme=dark] .option-row-value code {
  background: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .inline-edit {
  background: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #B9B7C0 !important;
}

[data-theme=dark] .inline-edit:hover {
  background: rgba(115, 103, 240, 0.16) !important;
  border-color: #7367f0 !important;
  color: #7367f0 !important;
}

[data-theme=dark] .asset-card,
[data-theme=dark] .color-swatch {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .asset-card-title {
  color: #EFEFF2 !important;
}

[data-theme=dark] .inset-well {
  background: #0F0C1C !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .contact-block {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .contact-block-title {
  color: #EFEFF2 !important;
}

[data-theme=dark] .contact-block-text {
  color: #B9B7C0 !important;
}

[data-theme=dark] .contact-block-icon {
  background: #0F0C1C !important;
  color: #7367f0 !important;
}

[data-theme=dark] .contact-block-icon.is-alert {
  background: rgba(234, 84, 85, 0.16) !important;
  color: #ea5455 !important;
}

[data-theme=dark] .contact-block-icon.is-good {
  background: rgba(40, 199, 111, 0.16) !important;
  color: #28c76f !important;
}

[data-theme=dark] .compliance-card {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .compliance-card.is-expiring {
  border-color: rgba(234, 84, 85, 0.4) !important;
}

[data-theme=dark] .compliance-card.is-pending {
  border-color: rgba(255, 159, 67, 0.4) !important;
}

[data-theme=dark] .compliance-card-title {
  color: #EFEFF2 !important;
}

[data-theme=dark] .compliance-card-foot {
  border-top-color: #1B1632 !important;
}

[data-theme=dark] .reference-code {
  background: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .person-block {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .person-block-name {
  color: #EFEFF2 !important;
}

[data-theme=dark] .person-block-role {
  color: #7367f0 !important;
}

[data-theme=dark] .document-row,
[data-theme=dark] .usage-row {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .document-row-title {
  color: #EFEFF2 !important;
}

[data-theme=dark] .document-row-icon {
  background: #0F0C1C !important;
  color: #7367f0 !important;
}

[data-theme=dark] .document-row-icon.is-pdf {
  background: rgba(234, 84, 85, 0.16) !important;
  color: #ea5455 !important;
}

[data-theme=dark] .document-row-icon.is-doc {
  background: rgba(115, 103, 240, 0.16) !important;
  color: #7367f0 !important;
}

[data-theme=dark] .document-row-icon.is-img {
  background: rgba(40, 199, 111, 0.16) !important;
  color: #28c76f !important;
}

[data-theme=dark] .audit-event {
  border-bottom-color: #1B1632 !important;
}

[data-theme=dark] .audit-event-title {
  color: #EFEFF2 !important;
}

[data-theme=dark] .delta-value {
  background: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .delta-value s {
  color: #B9B7C0 !important;
}

[data-theme=dark] .delta-value b {
  color: #28c76f !important;
}

[data-theme=dark] .flush-panel {
  background: #131022 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .flush-panel-head,
[data-theme=dark] .offcanvas-footer {
  background: #0F0C1C !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .outline-box {
  background: #131022 !important;
  border-color: #1B1632 !important;
}

[data-theme=dark] .outline-box-head {
  border-bottom-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .outline-box-head h6 {
  color: #EFEFF2 !important;
}

[data-theme=dark] .check-row {
  border-bottom-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .check-row.is-warn {
  color: #ff9f43 !important;
}

[data-theme=dark] .inline-drop {
  background: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .settings-modal .modal-content {
  background: #131022 !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .settings-modal .modal-header,
[data-theme=dark] .settings-modal .modal-footer {
  border-color: #1B1632 !important;
}

[data-theme=dark] .meta-badge {
  background: #1B1632 !important;
  border-color: #26213f !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .meta-badge.is-active {
  color: #3ddc84 !important;
  background: rgba(26, 190, 23, 0.14) !important;
  border-color: rgba(26, 190, 23, 0.28) !important;
}

[data-theme=dark] .meta-badge.is-pending {
  color: #ffcf5c !important;
  background: rgba(234, 179, 0, 0.14) !important;
  border-color: rgba(234, 179, 0, 0.28) !important;
}

[data-theme=dark] .meta-badge.is-expiring {
  color: #ff7a90 !important;
  background: rgba(232, 38, 70, 0.16) !important;
  border-color: rgba(232, 38, 70, 0.3) !important;
}

[data-theme=dark] .meta-badge.is-draft {
  color: #6fb3ff !important;
  background: rgba(15, 101, 205, 0.18) !important;
  border-color: rgba(15, 101, 205, 0.32) !important;
}

[data-theme=dark] .state-dot.is-empty {
  background: #2c2749 !important;
}

[data-theme=dark] .table tbody tr,
[data-theme=dark] .table thead tr {
  border-color: #12101e !important;
}

[data-theme=dark] .btn-soft-success {
  background-color: rgba(186, 236, 185, 0.1215686275) !important;
}

[data-theme=dark] .btn-soft-danger {
  background-color: rgba(248, 190, 200, 0.1607843137) !important;
}

[data-theme=dark] .btn-soft-primary {
  background-color: #141b2d !important;
}

/* ============================================================
     FILE UPLOAD COMPONENT DARK MODE OVERRIDES
     ============================================================ */

[data-theme=dark] .custom-file-container label {
  color: #EFEFF2 !important;
}

[data-theme=dark] .custom-file-container .custom-file-container__image-clear {
  color: #ea5455 !important;
}

[data-theme=dark] .custom-file-container .custom-file-container__image-clear:hover {
  color: #ff9f43 !important;
}

[data-theme=dark] .custom-file-container .custom-file-container__custom-file__custom-file-control {
  background-color: #0F0C1C !important;
  border-color: #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .custom-file-container .custom-file-container__custom-file__custom-file-control__button {
  background-color: rgba(115, 103, 240, 0.2) !important;
  color: #7367f0 !important;
  border-left-color: #1B1632 !important;
}

[data-theme=dark] .custom-file-container .custom-file-container__image-preview,
[data-theme=dark] .custom-file-container .custom-file-container__image-multi-preview {
  background-color: #0F0C1C !important;
  border: 1px solid #1B1632 !important;
  color: #EFEFF2 !important;
}

[data-theme=dark] .card-bodyquote p {
  color: #FFF !important;
}

[data-theme=dark] .action-card {
  background-color: #0F0C1C !important;
}

[data-theme=dark] .action-card .action-card-title {
  color: #EFEFF2 !important;
}

[data-theme=dark] .stat-value {
  color: #EFEFF2 !important;
}

[data-theme=dark] .bg-nav-pills .nav-item .nav-link {
  background: #141b2d !important;
}

[data-theme=dark] .bg-nav-pills .nav-item .nav-link.active {
  background: #1f3b60 !important;
}

[data-theme=dark] .offcanvas .btn-close {
  color: #FFF !important;
}

[data-theme=dark] .auth-logo .logo-dark {
  display: none !important;
}

[data-theme=dark] .auth-logo .logo-white {
  display: block !important;
}

[data-theme=dark] .grid-structure .grid-container {
  background-color: #0F0C1C !important;
  border-radius: 6px;
}

[data-theme=dark] .card .card-text {
  color: #FFF !important;
}

[data-theme=dark] .fc .fc-button-primary {
  background-color: #0f0c1c;
  border-color: #0f0c1c;
}

[data-theme=dark] .fc-event-main {
  color: #b4e6ff !important;
}

[data-theme=dark] .mui-profile-head {
  border-bottom: #1B1632 !important;
}

[data-theme=dark] .mui-profile-body hr {
  border-color: #1B1632 !important;
}

[data-theme=dark] .sdt-hero {
  background: linear-gradient(115deg, #090909 0%, var(--bs-body-bg) 46%, var(--bs-body-bg) 100%);
}

[data-theme=dark] .sdt-story {
  background: linear-gradient(165deg, #000000 0%, var(--bs-body-bg) 58%) !important;
}

[data-theme=dark] .tto-rec-rank,
[data-theme=dark] .tto-mark-n {
  background: #282b2d;
}

[data-theme=dark] .tto-hero::before {
  content: "";
  background-image: repeating-linear-gradient(90deg, var(--bs-border-color) 0 1px, rgba(0, 0, 0, 0.9882352941) 1px 84px);
  mask-image: linear-gradient(180deg, #000 0%, #000000 80%);
}

[data-theme=dark] .tto-hero-badge {
  background: var(--bs-primary);
}

[data-theme=dark] .hwk-studio-inner::before {
  content: "";
  background: #1a1d29;
}

[data-theme=dark] .hwk-studio {
  background: linear-gradient(180deg, #000000 0%, var(--bs-body-bg) 34%), var(--bs-body-bg);
}

[data-theme=dark] .hwk-sub-head::before {
  background: #000000;
}

[data-theme=dark] .tch-stage {
  background: radial-gradient(90% 120% at 100% 100%, rgba(2, 168, 181, 0.12) 0%, transparent 58%), linear-gradient(160deg, #000000 0%, var(--bs-body-bg) 44%), var(--bs-body-bg);
}

[data-theme=dark] .fam-hero {
  background: radial-gradient(80% 120% at 0% 100%, rgba(2, 168, 181, 0.12) 0%, transparent 55%), linear-gradient(200deg, #000000 0%, var(--bs-body-bg) 46%), var(--bs-body-bg);
}

[data-theme=dark] .ntf-hero {
  background: radial-gradient(70% 130% at 100% 0%, #000000 0%, transparent 58%), var(--bs-body-bg);
}

[data-theme=dark] .bg-gray {
  background: #141b2d;
}

[data-theme=dark] .bg-transparent-dark {
  background: rgba(255, 0, 18, 0.168627451);
}

[data-theme=dark] .status-toggle.modal-status label {
  background-color: #0d0d0d;
  border: 1px solid #1d1e1f;
}

/******* Vendors ******/
.select2-container {
  min-width: 100% !important;
  z-index: 99;
}

.select2-container .select2-selection--single {
  height: 38px;
}

.select2-container--default .select2-selection--single {
  border: 1px solid var(--Stroke, rgba(145, 158, 171, 0.3));
  border-radius: 5px;
}

.select2-container--default .select2-selection--single .select2-selection__rendered {
  color: #202C4B !important;
  line-height: 38px;
  border-radius: 5px;
  padding-left: 10px;
  font-size: 14px;
  font-weight: 400;
  padding-right: 30px;
}

.select2-container--default .select2-selection--single .select {
  width: 219px;
}

.select2-container--default .select2-selection--single .select2-selection__arrow {
  height: 38px;
  right: 7px;
}

.select2-container--default .select2-selection--single .select2-selection__arrow b {
  position: absolute;
  top: 50%;
  left: 50%;
  border-color: #515B73;
  border-style: solid;
  border-width: 0 1px 1px 0;
  padding: 3px;
  height: 0;
  margin-left: -6px;
  margin-top: -3px;
  width: 0;
  transform: rotate(45deg) translateY(-50%);
  -webkit-transform: rotate(45deg) translateY(-50%);
  -ms-transform: rotate(45deg) translateY(-50%);
}

.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
  border-color: #000;
  border-width: 1px 0 0 1px;
  margin-top: 3px;
  padding: 3px;
}

.select2-container--default .select2-results__option--highlighted[aria-selected] {
  background: #1f3b60;
  color: #FFF;
}

.select2-container--focus .select2-selection--single {
  background: #FFF !important;
  border-color: #E9EDF4;
}

span.select2-container.select2-container--default.select2-container--open {
  z-index: 9999;
  box-shadow: 0px 4.4px 12px -1px rgba(222, 222, 222, 0.36);
}

.select2-container--classic .select2-selection--single,
.select2-container--default .select2-selection--single,
.select2-container--default .select2-selection--single .select2-selection__rendered,
.select2-container--default .select2-selection--single .select2-selection__arrow,
.select2-container--default .select2-selection--multiple,
.select2-container--classic .select2-selection--single .select2-selection__arrow,
.select2-container--classic .select2-selection--single .select2-selection__rendered {
  border-color: #E9EDF4;
  color: #6A7287;
}

.select2-dropdown {
  border-color: #E9EDF4;
}

.select2-container--default .select2-selection--multiple {
  line-height: 27px;
  height: 38px;
  overflow: hidden;
}

.select2-container--classic .select2-selection--multiple .select2-selection__choice,
.select2-container--default .select2-selection--multiple .select2-selection__choice,
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
  background-color: #0F65CD;
  border-color: #0F65CD;
  color: #FFF;
}

.select2-container--default.select2-container--open.select2-container--below .select2-selection--single {
  border-color: #1f3b60;
}

.select2-container--default.select2-container--focus .select2-selection--multiple {
  border-color: #1f3b60;
}

.select2-container--open .ti-filter {
  z-index: 9999 !important;
}

.choices__list--multiple .choices__item {
  padding: 1px 10px;
}

.choices__input {
  background: transparent;
}

table.dataTable {
  margin: 0 !important;
}

table.dataTable>thead .sorting:after,
table.dataTable>thead .sorting_asc:after,
table.dataTable>thead .sorting_desc:after,
table.dataTable>thead .sorting_asc_disabled:after,
table.dataTable>thead .sorting_desc_disabled:after {
  right: 10px !important;
  content: "\f0d7" !important;
  font-family: "Font Awesome 5 Free";
  bottom: 8px !important;
  color: #CDD0D7 !important;
  font-size: 10px !important;
  opacity: 1 !important;
  position: absolute;
  font-weight: 600;
  line-height: 1px !important;
}

table.dataTable>thead .sorting:before,
table.dataTable>thead .sorting_asc:before,
table.dataTable>thead .sorting_desc:before,
table.dataTable>thead .sorting_asc_disabled:before,
table.dataTable>thead .sorting_desc_disabled:before {
  right: 10px !important;
  content: "\f0d8" !important;
  font-family: "Font Awesome 5 Free";
  top: 18px !important;
  color: #CDD0D7 !important;
  font-size: 10px !important;
  opacity: 1 !important;
  position: absolute;
  font-weight: 600;
  line-height: 1px !important;
}

.dataTables_paginate .paging_numbers {
  float: right;
}

.dataTables_info {
  font-size: 15px;
  color: #515B73;
  font-weight: 500;
}

@media (max-width: 767.98px) {
  .dataTables_info {
    font-size: 12px;
  }
}

.custom-select {
  min-width: 80px;
  background: url(../img/icons/dropdown.svg) no-repeat 95% 50%;
}

.dataTables_paginate .pagination {
  justify-content: end;
  -webkit-justify-content: end;
  -ms-flex-pack: end;
}

.dataTables_paginate .pagination li {
  margin: 0 2px;
}

.dataTables_paginate .pagination li a {
  background: transparent;
  border-color: transparent;
  border-radius: 5px !important;
  width: 28px;
  height: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #515B73;
  font-size: 14px;
}

.dataTables_paginate .pagination li a:hover {
  background: #1f3b60;
  color: #FFF;
}

.dataTables_paginate .pagination li.active a.page-link {
  background: #1f3b60;
  border-color: #1f3b60;
  border-radius: 5px;
  width: 28px;
  height: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.dataTables_paginate .pagination li.previous.disabled,
.dataTables_paginate .pagination li.prev {
  width: auto;
  margin: 0 13px 0 0;
}

.dataTables_paginate .pagination li.previous.disabled a,
.dataTables_paginate .pagination li.prev a {
  background-color: transparent;
  border: 0;
  width: auto;
  padding: 0;
}

.dataTables_paginate .pagination li.previous.disabled a i,
.dataTables_paginate .pagination li.prev a i {
  margin-right: 8px;
}

.dataTables_paginate .pagination li.previous.disabled a:hover,
.dataTables_paginate .pagination li.prev a:hover {
  color: #2CA87F;
}

.dataTables_paginate .pagination li.next.disabled,
.dataTables_paginate .pagination li.next {
  width: auto;
  margin: 0 0 0 13px;
}

.dataTables_paginate .pagination li.next.disabled a,
.dataTables_paginate .pagination li.next a {
  background-color: transparent;
  border: 0;
  width: auto;
  padding: 0;
}

.dataTables_paginate .pagination li.next.disabled a i,
.dataTables_paginate .pagination li.next a i {
  margin-left: 8px;
}

.dataTables_paginate .pagination li.next.disabled a:hover,
.dataTables_paginate .pagination li.next a:hover {
  color: #2CA87F;
}

@media (max-width: 767.98px) {
  .dataTables_paginate .pagination {
    justify-content: center;
    -webkit-justify-content: center;
    -ms-flex-pack: center;
  }
}

.dataTables_length {
  margin-bottom: 15px;
}

.dataTables_paginate {
  margin-top: 15px !important;
}

.dataTables_length label {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  color: #515B73;
  font-size: 14px;
}

.dataTables_length label .form-select {
  width: 61px;
  border: 1px solid #E9EDF4;
  border-radius: 6px;
  color: #515B73;
  margin: 0 8px;
  background-position: right 5px center;
  padding-right: 15px;
}

@media (max-width: 767.98px) {
  .datatable-length {
    text-align: center;
  }
}

div.dataTables_wrapper div.dataTables_info {
  padding-top: 15px;
}

table.dataTable thead>tr>th.no-sort.sorting_asc:before,
table.dataTable thead>tr>th.no-sort.sorting_asc::after,
table.dataTable thead>tr>th.no-sort.sorting:before,
table.dataTable thead>tr>th.no-sort.sorting::after {
  display: none;
}

.custom-table .table-responsive {
  border: 1px solid #E9EDF4;
  border-radius: 6px;
}

table.table.dataTable>tbody>tr {
  border-color: #E9EDF4;
}

table.table.dataTable>tbody>tr td {
  color: #515B73;
  border-bottom: 1px solid #E9EDF4;
  padding: 12px 20px;
}

table.table.dataTable>thead>tr {
  border-color: #E9EDF4;
}

table.table.dataTable>thead>tr th {
  color: #202C4B;
  font-size: 14px;
  font-weight: 500;
  padding: 12px 20px;
}

.dataTables_filter {
  margin-bottom: 15px;
}

.dataTables_filter input {
  height: 38px;
  font-size: 14px;
  padding: 0.5rem 0.625rem;
}

#select-all~.checkmarks {
  top: -7px;
}

#select-all2~.checkmarks {
  top: -7px;
}

#select-all3~.checkmarks {
  top: -7px;
}

.custom-datatable-filter [class*=col-md] {
  padding-right: 1rem !important;
  padding-left: 1rem !important;
}

.no-datatable_length .dataTables_length {
  display: none;
}

.no-datatable_length .dataTables_filter {
  display: none;
}

.no-datatable_length .dataTables_info {
  display: none;
}

.no-datatable_length .dataTables_paginate {
  display: none;
}

.datatable-info .dataTables_info {
  display: none !important;
}

.datatable-info .dataTables_info:first-child {
  display: block !important;
}

.datatable-length .dataTables_length {
  display: none !important;
}

.datatable-length .dataTables_length:first-child {
  display: block !important;
}

.datatable-paginate .dataTables_paginate {
  display: none !important;
}

.datatable-paginate .dataTables_paginate:first-child {
  display: block !important;
}

.daterangepicker .ranges li.active {
  background-color: #1f3b60;
}

.daterangepicker td.active {
  background-color: #1f3b60;
}

.daterangepicker td.active:hover {
  background-color: #1f3b60;
}

.daterange-wraper .date-range {
  padding-left: 30px;
  font-size: 14px;
  color: #515B73;
  border: 0;
  min-height: auto;
  height: 36px;
  border: 0;
  box-shadow: 0px 4.4px 20px -1px rgba(19, 16, 34, 0.0509803922);
}

.daterange-wraper .date-range:focus {
  border-left: 0;
}

.daterange-wraper .cal-icon-date {
  position: absolute;
  left: 10px;
  top: 50%;
  transform: translateY(-50%);
}

[data-simplebar] {
  position: relative;
  flex-direction: column;
  flex-wrap: wrap;
  justify-content: flex-start;
  align-content: flex-start;
  align-items: flex-start;
}

.simplebar-wrapper {
  overflow: hidden;
  width: inherit;
  height: inherit;
  max-width: inherit;
  max-height: inherit;
}

.simplebar-mask {
  direction: inherit;
  position: absolute;
  overflow: hidden;
  padding: 0;
  margin: 0;
  left: 0;
  top: 0;
  bottom: 0;
  right: 0;
  width: auto !important;
  height: auto !important;
  z-index: 0;
}

.simplebar-offset {
  direction: inherit !important;
  box-sizing: inherit !important;
  resize: none !important;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  padding: 0;
  margin: 0;
  -webkit-overflow-scrolling: touch;
}

.simplebar-content-wrapper {
  direction: inherit;
  box-sizing: border-box !important;
  position: relative;
  display: block;
  height: 100%;
  /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */
  width: auto;
  overflow: auto;
  /* Scroll on this element otherwise element can't have a padding applied properly */
  max-width: 100%;
  /* Not required for horizontal scroll to trigger */
  max-height: 100%;
  /* Needed for vertical scroll to trigger */
  scrollbar-width: none;
}

.simplebar-content-wrapper::-webkit-scrollbar,
.simplebar-hide-scrollbar::-webkit-scrollbar {
  display: none;
}

.simplebar-content:before,
.simplebar-content:after {
  content: " ";
  display: table;
}

.simplebar-placeholder {
  max-height: 100%;
  max-width: 100%;
  width: 100%;
  pointer-events: none;
}

.simplebar-height-auto-observer-wrapper {
  box-sizing: inherit !important;
  height: 100%;
  width: 100%;
  max-width: 1px;
  position: relative;
  float: left;
  max-height: 1px;
  overflow: hidden;
  z-index: -1;
  padding: 0;
  margin: 0;
  pointer-events: none;
  flex-grow: inherit;
  flex-shrink: 0;
  flex-basis: 0;
}

.simplebar-height-auto-observer {
  box-sizing: inherit;
  display: block;
  opacity: 0;
  position: absolute;
  top: 0;
  left: 0;
  height: 1000%;
  width: 1000%;
  min-height: 1px;
  min-width: 1px;
  overflow: hidden;
  pointer-events: none;
  z-index: -1;
}

.simplebar-track {
  z-index: 1;
  position: absolute;
  right: 0;
  bottom: 0;
  pointer-events: none;
  overflow: hidden;
}

[data-simplebar].simplebar-dragging .simplebar-content {
  pointer-events: none;
  user-select: none;
}

[data-simplebar].simplebar-dragging .simplebar-track {
  pointer-events: all;
}

.simplebar-scrollbar {
  position: absolute;
  right: 2px;
  width: 5px;
  min-height: 10px;
}

.simplebar-scrollbar:before {
  position: absolute;
  content: "";
  background: #a2adb7;
  border-radius: 7px;
  left: 0;
  right: 0;
  opacity: 0;
  transition: opacity 0.2s linear;
}

/* When hovered, remove all transitions from drag handle */
.simplebar-track:hover .simplebar-scrollbar:before {
  opacity: 0.5;
  transition: opacity 0s linear;
}

.simplebar-track.simplebar-vertical {
  top: 0;
  width: 11px;
}

.simplebar-track.simplebar-vertical .simplebar-scrollbar:before {
  top: 2px;
  bottom: 2px;
}

.simplebar-track.simplebar-horizontal {
  left: 0;
  height: 11px;
}

.simplebar-track.simplebar-horizontal .simplebar-scrollbar {
  right: auto;
  left: 0;
  top: 2px;
  height: 7px;
  min-height: 0;
  min-width: 10px;
  width: auto;
}

.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before {
  height: 100%;
  left: 2px;
  right: 2px;
}

/* Rtl support */
[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical {
  right: auto;
  left: 0;
}

.hs-dummy-scrollbar-size {
  direction: rtl;
  position: fixed;
  opacity: 0;
  visibility: hidden;
  height: 500px;
  width: 500px;
  overflow-y: hidden;
  overflow-x: scroll;
}

.simplebar-hide-scrollbar {
  position: fixed;
  left: 0;
  visibility: hidden;
  overflow-y: scroll;
  scrollbar-width: none;
}

.custom-scroll::-webkit-scrollbar {
  -webkit-appearance: none;
}

.custom-scroll::-webkit-scrollbar-thumb {
  background-color: rgba(0, 0, 0, 0.2);
  border-radius: 10px;
  margin-right: 5px;
  border: none;
}

.custom-scroll::-webkit-scrollbar-track {
  border-radius: 10px;
  background-color: transparent;
}

.custom-scroll::-webkit-scrollbar-corner {
  background-color: transparent;
}

[data-simplebar-lg] .simplebar-scrollbar {
  right: 1px;
  width: 10px;
}

[data-simplebar-primary] .simplebar-scrollbar:before {
  background: #1f3b60;
}

.simplebar-height {
  max-height: 250px;
}

.gu-mirror {
  position: fixed !important;
  margin: 0 !important;
  z-index: 9999 !important;
  opacity: 0.8;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
  filter: alpha(opacity=80);
}

.gu-hide {
  display: none !important;
}

.gu-unselectable {
  user-select: none !important;
}

.gu-transit {
  opacity: 0.2;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
  filter: alpha(opacity=20);
}

.dragula-handle {
  position: relative;
  width: 36px;
  height: 36px;
  font-size: 22px;
  text-align: center;
  cursor: move;
}

.dragula-handle:before {
  content: "\f22f";
  font-family: "tabler-icons";
  position: absolute;
}

.handle {
  cursor: move;
}

.swal2-container .swal2-title {
  font-size: 20px;
  font-weight: 500;
  color: #202C4B;
}

.swal2-popup {
  width: 28em;
  padding: 2rem;
  border-radius: 4px;
  background-color: #FFF;
  color: #6A7287;
}

.swal2-popup .swal2-html-container {
  font-size: 16px !important;
  color: #6A7287;
}

.swal2-footer {
  border-top: 1px solid #E9EDF4;
  color: #6A7287;
}

.swal2-icon.swal2-question {
  border-color: #0F65CD;
  color: #0F65CD;
}

.swal2-icon.swal2-success [class^=swal2-success-line] {
  background-color: #1ABE17;
}

.swal2-icon.swal2-success .swal2-success-ring {
  border-color: #1ABE17;
}

.swal2-icon.swal2-warning {
  border-color: #EAB300;
  color: #EAB300;
}

div:where(.swal2-icon) {
  width: 4em;
  height: 4em;
  margin: 0.5rem auto;
}

div:where(.swal2-icon) .swal2-icon-content {
  font-size: 3em;
}

div:where(.swal2-icon).swal2-info {
  border-color: #0F65CD;
  color: #0F65CD;
}

.swal2-styled:focus {
  box-shadow: none;
}

.swal2-loader {
  border-color: #1f3b60 transparent #1f3b60 transparent;
}

.swal2-timer-progress-bar {
  background-color: rgba(26, 190, 23, 0.4);
}

.swal2-progress-steps .swal2-progress-step {
  background: #1f3b60;
}

.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step {
  background: #1f3b60;
}

.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step,
.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line {
  background: rgba(31, 59, 96, 0.3);
}

.swal2-progress-steps .swal2-progress-step-line {
  background: #1f3b60;
}

.swal2-actions.swal2-loading .swal2-styled.swal2-confirm {
  border-left-color: #1f3b60 !important;
  border-right-color: #1f3b60 !important;
}

.swal2-file,
.swal2-input,
.swal2-textarea {
  border: 1px solid #E9EDF4;
}

.swal2-file:focus,
.swal2-input:focus,
.swal2-textarea:focus {
  box-shadow: none;
  border-color: #E9EDF4;
}

.swal2-input {
  height: auto;
  display: block;
  padding: 8px 12px;
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  font-size: 14px;
  font-weight: 400;
  line-height: 1.5;
  color: #6A7287;
  background-color: #FFF;
  background-clip: padding-box;
  border: 1px solid #E9EDF4;
}

.swal2-close {
  font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  font-size: 42px;
  width: 1em;
  height: 1em;
  position: absolute;
  top: 5px;
  right: 5px;
}

.swal2-close:focus {
  box-shadow: none;
}

.swal2-close:hover {
  color: #E82646;
}

.swal2-validation-message {
  background-color: transparent;
}

div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line] {
  width: 1.9375em;
  top: 1.95em;
}

div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip] {
  top: 2.4em;
  width: 1em;
}

.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] {
  top: 1.85em;
  right: 0.5em;
  width: 2.25em;
}

.toast {
  box-shadow: 0px 4px 54px 0px rgba(224, 224, 224, 0.2509803922);
  border-color: #E9EDF4;
  border-radius: 4px;
}

.toast .toast-header {
  border-radius: 4px 4px 0 0;
  padding: 0.5rem 0.75rem;
  color: #6A7287;
}

.toast .toast-body {
  padding: 0.75rem;
}

/******* Migrated from app-new.css (kept last to preserve cascade order) ******/
/* ============================================================
   STATS CARD (dashboard metric cards) — migrated from app-new.css
   ============================================================ */
/* ============================================================
   METRIC CARD
   Dashboard statistic card with 15 domain layouts and 8 accent
   colours. Every layout is driven by component-scoped custom
   properties so a single accent class recolours the whole card:
     --mc / --mc-rgb    accent colour (set by .metric-* accent)
     --s / --t / --m    surface / title / muted text
     --b / --soft       border / soft accent tint
     --stats-positive  / --stats-negative   trend colours
   NOTE: these accents are a bespoke palette independent of the
   theme's $primary/$success, so they are intentionally not mapped
   to the Bootstrap colour tokens.
   ============================================================ */
.stats-card {
  --mc: #3577f1;
  --mc-rgb: 53, 119, 241;
  --s: #fff;
  --t: #0f172a;
  --m: #8f9bb3;
  --b: rgba(17, 24, 39, .08);
  --soft: rgba(var(--mc-rgb), .12);
  --stats-positive: #0ca678;
  --stats-negative: #e7515a;
  position: relative;
  width: 100%;
  background: var(--s);
  border: 1px solid var(--b);
  border-radius: 16px;
  padding: 1.1rem 1.2rem;
  overflow: hidden;
  transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}

.stats-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 0.8rem 1.6rem rgba(17, 24, 39, 0.1);
}

.stats-card .stats-value {
  color: var(--t);
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.01em;
}

.stats-card .stats-label {
  color: var(--m);
  font-size: 0.78rem;
  margin: 0;
}

.stats-card .stats-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* Accent colours — set the card's --mc token */
.stats-card.stats-primary {
  --mc: #3577f1;
  --mc-rgb: 53, 119, 241;
}

.stats-card.stats-success {
  --mc: #0ca678;
  --mc-rgb: 12, 166, 120;
}

.stats-card.stats-info {
  --mc: #3b7ddd;
  --mc-rgb: 59, 125, 221;
}

.stats-card.stats-warning {
  --mc: #f39c12;
  --mc-rgb: 243, 156, 18;
}

.stats-card.stats-danger {
  --mc: #e7515a;
  --mc-rgb: 231, 81, 90;
}

.stats-card.stats-purple {
  --mc: #7c3aed;
  --mc-rgb: 124, 58, 237;
}

.stats-card.stats-teal {
  --mc: #12b3b3;
  --mc-rgb: 18, 179, 179;
}

.stats-card.stats-pink {
  --mc: #e83e8c;
  --mc-rgb: 232, 62, 140;
}

/* ---------- 1. STUDENTS — profile: avatar ring + dashed footer ---------- */
.stats-card-students .stats-head {
  display: flex;
  align-items: center;
  gap: 0.85rem;
}

.stats-card-students .stats-avatar {
  flex: 0 0 52px;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  font-size: 22px;
  color: var(--mc);
  background: var(--soft);
  box-shadow: 0 0 0 3px rgba(var(--mc-rgb), 0.15);
}

.stats-card-students .stats-value {
  font-size: 1.5rem;
}

.stats-card-students .stats-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 0.85rem;
  padding-top: 0.65rem;
  border-top: 1px dashed var(--b);
  font-size: 0.72rem;
}

.stats-card-students .stats-subtitle {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  color: var(--m);
}

.stats-card-students .stats-subtitle i {
  color: var(--mc);
}

.stats-card-students .stats-badge {
  font-weight: 700;
  color: var(--stats-positive);
}

/* ---------- 2. PARENTS — centered,
soft top wash,
floating icon ---------- */
.stats-card-parents {
  text-align: center;
  padding-top: 2.3rem;
}

.stats-card-parents::before {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 44px;
  background: linear-gradient(180deg, var(--soft), transparent);
}

.stats-card-parents .stats-icon {
  position: relative;
  width: 50px;
  height: 50px;
  border-radius: 14px;
  margin: 0 auto 0.5rem;
  font-size: 22px;
  background: var(--s);
  color: var(--mc);
  box-shadow: 0 0.3rem 0.8rem rgba(var(--mc-rgb), 0.25);
}

.stats-card-parents .stats-value {
  font-size: 1.5rem;
}

.stats-card-parents .stats-label {
  margin: 0.1rem 0 0.55rem;
}

.stats-card-parents .stats-link {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  font-size: 0.7rem;
  font-weight: 700;
  color: var(--mc);
  background: var(--soft);
  padding: 0.2rem 0.6rem;
  border-radius: 50rem;
}

/* ---------- 3. TEACHERS — team: overlapping avatars + capacity bar ---------- */
.stats-card-teachers .stats-avatars {
  display: flex;
  align-items: center;
  margin-bottom: 0.7rem;
}

.stats-card-teachers .stats-avatars span {
  width: 30px;
  height: 30px;
  border-radius: 50%;
  margin-left: -8px;
  border: 2px solid var(--s);
  background: var(--soft);
  color: var(--mc);
  font-size: 12px;
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.stats-card-teachers .stats-avatars span:first-child {
  margin-left: 0;
}

.stats-card-teachers .stats-avatars .stats-icon {
  margin-left: auto;
  width: 40px;
  height: 40px;
  border-radius: 12px;
  background: var(--soft);
  color: var(--mc);
  font-size: 20px;
}

.stats-card-teachers .stats-value {
  font-size: 1.5rem;
}

.stats-card-teachers .stats-label {
  margin: 0 0 0.6rem;
}

.stats-card-teachers .stats-bar {
  height: 5px;
  border-radius: 50rem;
  background: var(--soft);
  overflow: hidden;
}

.stats-card-teachers .stats-bar i {
  display: block;
  height: 100%;
  border-radius: 50rem;
  background: var(--mc);
}

/* ---------- 4. HR — big value + bordered side mini-metrics ---------- */
.stats-card-hr {
  display: flex;
  align-items: stretch;
  gap: 1rem;
}

.stats-card-hr .stats-main {
  flex: 1;
  min-width: 0;
}

.stats-card-hr .stats-icon {
  width: 42px;
  height: 42px;
  border-radius: 12px;
  background: var(--soft);
  color: var(--mc);
  font-size: 20px;
  margin-bottom: 0.55rem;
}

.stats-card-hr .stats-value {
  font-size: 1.5rem;
}

.stats-card-hr .stats-aside {
  flex: 0 0 78px;
  border-left: 1px solid var(--b);
  padding-left: 0.85rem;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 0.45rem;
}

.stats-card-hr .stats-aside small {
  font-size: 0.68rem;
  color: var(--m);
  display: block;
}

.stats-card-hr .stats-aside b {
  font-size: 0.95rem;
  color: var(--t);
}

/* ---------- 5. EXAMS — pass-rate ring + score sparkline ---------- */
.stats-card-exams {
  display: flex;
  align-items: center;
  gap: 1rem;
}

.stats-card-exams .stats-ring {
  flex: 0 0 62px;
  width: 62px;
  height: 62px;
  border-radius: 50%;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  background: conic-gradient(var(--mc) calc(var(--p, 70) * 1%), var(--soft) 0);
}

.stats-card-exams .stats-ring::before {
  content: "";
  position: absolute;
  width: 46px;
  height: 46px;
  border-radius: 50%;
  background: var(--s);
}

.stats-card-exams .stats-ring b {
  position: relative;
  z-index: 2;
  font-size: 0.78rem;
  color: var(--mc);
}

.stats-card-exams .stats-value {
  font-size: 20px;
  margin-bottom: 6px;
}

.stats-card-exams .stats-spark {
  display: flex;
  align-items: flex-end;
  gap: 3px;
  height: 20px;
  margin-top: 0.45rem;
}

.stats-card-exams .stats-spark i {
  width: 5px;
  border-radius: 2px 2px 0 0;
  background: var(--soft);
}

.stats-card-exams .stats-spark i:last-child {
  background: var(--mc);
}

/* ---------- 6. ACADEMICS — icon + completion donut top-right ---------- */
.stats-card-academics .stats-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
}

.stats-card-academics .stats-icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: var(--soft);
  color: var(--mc);
  font-size: 20px;
}

.stats-card-academics .stats-ring {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  background: conic-gradient(var(--mc) calc(var(--p, 65) * 1%), var(--soft) 0);
}

.stats-card-academics .stats-ring::before {
  content: "";
  position: absolute;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  background: var(--s);
}

.stats-card-academics .stats-ring b {
  position: relative;
  z-index: 2;
  font-size: 0.6rem;
  color: var(--mc);
}

.stats-card-academics .stats-value {
  font-size: 1.55rem;
  margin-top: 0.8rem;
}

/* ---------- 7. FINANCE — currency + cash-flow bars + comparison ---------- */
.stats-card-finance .stats-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.stats-card-finance .stats-icon {
  width: 42px;
  height: 42px;
  border-radius: 12px;
  background: var(--soft);
  color: var(--mc);
  font-size: 20px;
}

.stats-card-finance .stats-compare {
  font-size: 0.7rem;
  font-weight: 700;
}

.stats-card-finance .stats-compare.up {
  color: var(--stats-positive);
}

.stats-card-finance .stats-compare.down {
  color: var(--stats-negative);
}

.stats-card-finance .stats-value {
  font-size: 1.5rem;
  margin-top: 0.65rem;
  letter-spacing: -0.02em;
}

.stats-card-finance .stats-label {
  margin: 0 0 0.55rem;
}

.stats-card-finance .stats-bars {
  display: flex;
  gap: 5px;
  align-items: flex-end;
  height: 26px;
}

.stats-card-finance .stats-bars i {
  flex: 1;
  border-radius: 3px 3px 0 0;
  background: var(--soft);
}

.stats-card-finance .stats-bars i.hi {
  background: var(--mc);
}

/* ---------- 8. LIBRARY — inventory: stock progress + meta row ---------- */
.stats-card-library .stats-top {
  display: flex;
  align-items: center;
  gap: 0.7rem;
  margin-bottom: 0.7rem;
}

.stats-card-library .stats-icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: var(--soft);
  color: var(--mc);
  font-size: 20px;
}

.stats-card-library .stats-value {
  font-size: 1.4rem;
}

.stats-card-library .stats-progress {
  height: 6px;
  border-radius: 50rem;
  background: var(--soft);
  overflow: hidden;
}

.stats-card-library .stats-progress i {
  display: block;
  height: 100%;
  background: var(--mc);
  border-radius: 50rem;
}

.stats-card-library .stats-meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 0.5rem;
  font-size: 0.7rem;
  color: var(--m);
}

/* ---------- 9. HOSTEL — occupancy segmented bar + legend ---------- */
.stats-card-hostel .stats-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 0.55rem;
}

.stats-card-hostel .stats-icon {
  width: 42px;
  height: 42px;
  border-radius: 12px;
  background: var(--soft);
  color: var(--mc);
  font-size: 20px;
}

.stats-card-hostel .stats-value {
  font-size: 1.5rem;
}

.stats-card-hostel .stats-label {
  margin: 0.45rem 0 0.5rem;
}

.stats-card-hostel .stats-segments {
  display: flex;
  height: 8px;
  border-radius: 50rem;
  overflow: hidden;
  background: var(--soft);
}

.stats-card-hostel .stats-segments i {
  height: 100%;
  background: var(--mc);
}

.stats-card-hostel .stats-legend {
  display: flex;
  gap: 0.9rem;
  margin-top: 0.5rem;
  font-size: 0.68rem;
  color: var(--m);
}

.stats-card-hostel .stats-legend span {
  display: inline-flex;
  align-items: center;
}

.stats-card-hostel .stats-legend span::before {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  margin-right: 0.3rem;
  background: var(--mc);
}

.stats-card-hostel .stats-legend span.mut::before {
  background: rgba(var(--mc-rgb), 0.25);
}

/* ---------- 10. TRANSPORT — live status pulse + progress track ---------- */
.stats-card-transport .stats-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.stats-card-transport .stats-icon {
  width: 42px;
  height: 42px;
  border-radius: 12px;
  background: var(--soft);
  color: var(--mc);
  font-size: 20px;
}

.stats-card-transport .stats-status {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.68rem;
  font-weight: 700;
  color: var(--mc);
}

.stats-card-transport .stats-status .dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--mc);
  animation: mcpulse 1.8s infinite;
}

@keyframes mcpulse {
  0% {
    box-shadow: 0 0 0 0 rgba(var(--mc-rgb), 0.5);
  }

  70% {
    box-shadow: 0 0 0 8px rgba(var(--mc-rgb), 0);
  }

  100% {
    box-shadow: 0 0 0 0 rgba(var(--mc-rgb), 0);
  }
}

.stats-card-transport .stats-value {
  font-size: 1.5rem;
  margin-top: 0.65rem;
}

.stats-card-transport .stats-label {
  margin: 0 0 0.5rem;
}

.stats-card-transport .stats-track {
  height: 5px;
  border-radius: 50rem;
  background: var(--soft);
  overflow: hidden;
}

.stats-card-transport .stats-track i {
  display: block;
  height: 100%;
  background: var(--mc);
  border-radius: 50rem;
}

/* ---------- 11. SUPPORT — priority tag + SLA bar ---------- */
.stats-card-support .stats-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
}

.stats-card-support .stats-icon {
  width: 42px;
  height: 42px;
  border-radius: 12px;
  background: var(--soft);
  color: var(--mc);
  font-size: 20px;
}

.stats-card-support .stats-priority {
  font-size: 0.6rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 0.22rem 0.5rem;
  border-radius: 6px;
  background: var(--soft);
  color: var(--mc);
}

.stats-card-support .stats-value {
  font-size: 1.5rem;
  margin-top: 0.65rem;
}

.stats-card-support .stats-label {
  margin: 0 0 0.5rem;
}

.stats-card-support .stats-sla {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.68rem;
  color: var(--m);
}

.stats-card-support .stats-sla .bar {
  flex: 1;
  height: 5px;
  border-radius: 50rem;
  background: var(--soft);
  overflow: hidden;
}

.stats-card-support .stats-sla .bar i {
  display: block;
  height: 100%;
  background: var(--mc);
}

/* ---------- 12. SETTINGS — minimal system-health,
left rail + status dot ---------- */
.stats-card-settings {
  border-left: 3px solid var(--mc);
}

.stats-card-settings .stats-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.stats-card-settings .stats-icon {
  font-size: 22px;
  color: var(--mc);
}

.stats-card-settings .stats-state {
  display: inline-flex;
  align-items: center;
  gap: 0.32rem;
  font-size: 0.66rem;
  font-weight: 600;
  color: var(--m);
}

.stats-card-settings .stats-state i {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--mc);
}

.stats-card-settings .stats-value {
  font-size: 1.45rem;
  margin-top: 0.8rem;
}

/* ---------- 13. ACTIVITIES — event date block ---------- */
.stats-card-activities {
  display: flex;
  align-items: center;
  gap: 0.9rem;
}

.stats-card-activities .stats-date {
  flex: 0 0 54px;
  height: 60px;
  border-radius: 12px;
  background: var(--soft);
  color: var(--mc);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.stats-card-activities .stats-date b {
  font-size: 1.25rem;
  line-height: 1;
}

.stats-card-activities .stats-date span {
  font-size: 0.58rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-top: 0.1rem;
}

.stats-card-activities .stats-value {
  font-size: 1.4rem;
}

.stats-card-activities .stats-tag {
  display: inline-block;
  margin-top: 0.3rem;
  font-size: 0.66rem;
  font-weight: 600;
  color: var(--mc);
}

/* ---------- 14. MASTERS — flat directory row,
bottom rule + count chip ---------- */
.stats-card-masters {
  border: 0;
  border-bottom: 2px solid var(--soft);
  border-radius: 0;
  background: transparent;
  padding: 0.55rem 0.2rem 0.85rem;
}

.stats-card-masters:hover {
  transform: none;
  box-shadow: none;
  border-bottom-color: var(--mc);
}

.stats-card-masters .stats-top {
  display: flex;
  align-items: center;
  gap: 0.6rem;
}

.stats-card-masters .stats-icon {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  background: var(--soft);
  color: var(--mc);
  font-size: 18px;
}

.stats-card-masters .stats-value {
  font-size: 1.35rem;
}

.stats-card-masters .stats-label {
  font-size: 0.75rem;
}

.stats-card-masters .stats-chip {
  margin-left: auto;
  font-size: 0.66rem;
  font-weight: 700;
  color: var(--mc);
  background: var(--soft);
  padding: 0.15rem 0.5rem;
  border-radius: 50rem;
}

/* ---------- 15. DIRECTORY (users/profile) — avatar w/ presence dot ---------- */
.stats-card-directory {
  display: flex;
  align-items: center;
  gap: 0.85rem;
}

.stats-card-directory .stats-avatar {
  position: relative;
  flex: 0 0 48px;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: var(--soft);
  color: var(--mc);
  font-size: 20px;
}

.stats-card-directory .stats-avatar::after {
  content: "";
  position: absolute;
  right: 1px;
  bottom: 1px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--stats-positive);
  border: 2px solid var(--s);
}

.stats-card-directory .stats-value {
  font-size: 20px;
  margin-bottom: 6px;
}

.stats-card-directory .stats-role {
  display: inline-block;
  margin-top: 0.25rem;
  font-size: 0.66rem;
  font-weight: 600;
  color: var(--mc);
  background: var(--soft);
  padding: 0.15rem 0.5rem;
  border-radius: 50rem;
}

/* ============================================================ DARK MODE ============================================================ */
[data-theme=dark] .stats-card {
  --s: #1a2233;
  --t: #e9edf5;
  --m: #8a94a6;
  --b: rgba(255, 255, 255, .08);
}

[data-theme=dark] .stats-card:hover {
  box-shadow: 0 0.8rem 1.6rem rgba(0, 0, 0, 0.4);
}

/* ============================================================ RTL ============================================================ */
[dir=rtl] .stats-card-settings {
  border-left: 0;
  border-right: 3px solid var(--mc);
}

[dir=rtl] .stats-card-hr .stats-aside {
  border-left: 0;
  border-right: 1px solid var(--b);
  padding-left: 0;
  padding-right: 0.85rem;
}

[dir=rtl] .stats-card-teachers .stats-avatars span {
  margin-left: 0;
  margin-right: -8px;
}

[dir=rtl] .stats-card-teachers .stats-avatars span:first-child {
  margin-right: 0;
}

[dir=rtl] .stats-card-teachers .stats-avatars .stats-icon {
  margin-left: 0;
  margin-right: auto;
}

[dir=rtl] .stats-card-masters .stats-chip {
  margin-left: 0;
  margin-right: auto;
}

/* ============================================================ RESPONSIVE ============================================================ */
@media (max-width: 575.98px) {
  .stats-card {
    padding: 1rem;
  }

  .stats-card .stats-value {
    font-size: 1.35rem;
  }
}

/* ============================================================
   STATUS CARD design system — migrated from app-new.css
   ============================================================ */
/* ============================================================
   STATUS CARD — Design System (v2.0)
   Distinct, premium statistic-card styles per module. Not the
   dashboard widget style. Light + Dark (data-theme="dark").
   Usage:  <div class="status-card status-card-students primary"> … </div>
   Layouts: -students -teachers -fees -exams -library -transport -hostel -hr
   Accents: primary | success | info | warning | danger | secondary | purple | teal
   ============================================================ */
/* ---- Accent tokens ---- */
.status-card.primary {
  --sc-accent: #3577f1;
  --sc-accent-rgb: 53, 119, 241;
}

.status-card.success {
  --sc-accent: #0ca678;
  --sc-accent-rgb: 12, 166, 120;
}

.status-card.info {
  --sc-accent: #3b7ddd;
  --sc-accent-rgb: 59, 125, 221;
}

.status-card.warning {
  --sc-accent: #f39c12;
  --sc-accent-rgb: 243, 156, 18;
}

.status-card.danger {
  --sc-accent: #e7515a;
  --sc-accent-rgb: 231, 81, 90;
}

.status-card.secondary {
  --sc-accent: #6c757d;
  --sc-accent-rgb: 108, 117, 125;
}

.status-card.purple {
  --sc-accent: #7c3aed;
  --sc-accent-rgb: 124, 58, 237;
}

.status-card.teal {
  --sc-accent: #12b3b3;
  --sc-accent-rgb: 18, 179, 179;
}

/* ---- Shared base ---- */
.status-card {
  position: relative;
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 16px;
  padding: 1.15rem 1.25rem;
  width: 100%;
  overflow: hidden;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.status-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 0.75rem 1.5rem rgba(17, 24, 39, 0.1);
}

.status-card .status-card-label {
  color: var(--bs-secondary-color);
  font-size: 0.8125rem;
  margin: 0;
}

.status-card .status-card-value {
  color: var(--bs-body-color);
  font-size: 1.6rem;
  font-weight: 700;
  line-height: 1.1;
  margin: 0.15rem 0 0;
}

.status-card .status-card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
}

.status-card .status-card-trend {
  display: inline-flex;
  align-items: center;
  gap: 0.2rem;
  font-size: 0.6875rem;
  font-weight: 600;
  padding: 0.15rem 0.45rem;
  border-radius: 50rem;
}

.status-card .status-card-trend.up {
  color: #0ca678;
  background: rgba(12, 166, 120, 0.12);
}

.status-card .status-card-trend.down {
  color: #e7515a;
  background: rgba(231, 81, 90, 0.12);
}

.status-card .status-card-trend.flat {
  color: #6c757d;
  background: rgba(108, 117, 125, 0.12);
}

/* ============================================================
   1. STUDENTS — gradient top band + overlapping circular icon
   ============================================================ */
.status-card-students {
  padding-top: 2.6rem;
}

.status-card-students::before {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 52px;
  background: linear-gradient(135deg, var(--bs-primary), rgba(var(--sc-accent-rgb), 0.6));
}

.status-card-students .status-card-icon {
  position: relative;
  z-index: 2;
  width: 54px;
  height: 54px;
  border-radius: 16px;
  background: #fff;
  color: var(--bs-primary);
  box-shadow: 0 0.35rem 0.75rem rgba(var(--sc-accent-rgb), 0.35);
  margin-top: -0.4rem;
  margin-bottom: 0.5rem;
}

.status-card-students .status-card-value {
  font-size: 1.7rem;
}

.status-card-students .status-card-trend {
  margin-top: 0.5rem;
}

/* ============================================================
   2. TEACHERS — split card: colored left rail with icon
   ============================================================ */
.status-card-teachers {
  display: flex;
  align-items: stretch;
  padding: 0;
}

.status-card-teachers .status-card-rail {
  flex: 0 0 66px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 26px;
  color: #fff;
  background: linear-gradient(160deg, var(--bs-primary), rgba(var(--sc-accent-rgb), 0.75));
}

.status-card-teachers .status-card-body {
  padding: 1.1rem 1.2rem;
}

.status-card-teachers .status-card-value {
  font-size: 1.55rem;
}

/* ============================================================
   3. FEES / FINANCE — conic progress ring around the value
   ============================================================ */
.status-card-fees {
  display: flex;
  align-items: center;
  gap: 1rem;
}

.status-card-fees .status-card-ring {
  flex: 0 0 64px;
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background: conic-gradient(var(--bs-primary) calc(var(--sc-pct, 70) * 1%), rgba(var(--sc-accent-rgb), 0.15) 0);
  display: flex;
  align-items: center;
  justify-content: center;
}

.status-card-fees .status-card-ring::before {
  content: "";
  position: absolute;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: var(--bs-body-bg);
}

.status-card-fees .status-card-ring .status-card-icon {
  position: relative;
  z-index: 2;
  color: var(--bs-primary);
  font-size: 20px;
}

.status-card-fees .status-card-value {
  font-size: 1.5rem;
}

/* ============================================================
   4. EXAMS — value + CSS mini bar sparkline
   ============================================================ */
.status-card-exams .status-card-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.status-card-exams .status-card-icon {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: rgba(var(--sc-accent-rgb), 0.12);
  color: var(--bs-primary);
}

.status-card-exams .status-card-spark {
  display: flex;
  align-items: flex-end;
  gap: 4px;
  height: 34px;
  margin-top: 0.75rem;
}

.status-card-exams .status-card-spark span {
  flex: 1;
  border-radius: 3px 3px 0 0;
  background: rgba(var(--sc-accent-rgb), 0.25);
}

.status-card-exams .status-card-spark span:last-child {
  background: var(--bs-primary);
}

/* ============================================================
   5. LIBRARY — minimalist outlined,
top-centered soft icon
   ============================================================ */
.status-card-library {
  text-align: center;
  border: 1.5px solid rgba(var(--sc-accent-rgb), 0.25);
  box-shadow: none;
}

.status-card-library:hover {
  border-color: var(--bs-primary);
}

.status-card-library .status-card-icon {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  background: rgba(var(--sc-accent-rgb), 0.1);
  color: var(--bs-primary);
  margin: 0 auto 0.6rem;
}

.status-card-library .status-card-value {
  font-size: 1.6rem;
}

/* ============================================================
   6. TRANSPORT — diagonal corner accent + icon badge
   ============================================================ */
.status-card-transport::after {
  content: "";
  position: absolute;
  top: -30px;
  right: -30px;
  width: 90px;
  height: 90px;
  border-radius: 20px;
  transform: rotate(45deg);
  background: linear-gradient(135deg, var(--bs-primary), rgba(var(--sc-accent-rgb), 0.5));
  opacity: 0.14;
}

.status-card-transport .status-card-icon {
  width: 46px;
  height: 46px;
  border-radius: 12px;
  background: var(--bs-primary);
  color: #fff;
  margin-bottom: 0.6rem;
  box-shadow: 0 0.35rem 0.75rem rgba(var(--sc-accent-rgb), 0.3);
}

.status-card-transport .status-card-value {
  font-size: 1.6rem;
}

/* ============================================================
   7. HOSTEL — dotted pattern + soft glass panel
   ============================================================ */
.status-card-hostel {
  background-image: radial-gradient(rgba(var(--sc-accent-rgb), 0.14) 1.4px, transparent 1.4px);
  background-size: 14px 14px;
}

.status-card-hostel .status-card-inner {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.status-card-hostel .status-card-icon {
  width: 48px;
  height: 48px;
  border-radius: 14px;
  background: rgba(var(--sc-accent-rgb), 0.15);
  color: var(--bs-primary);
  backdrop-filter: blur(2px);
}

.status-card-hostel .status-card-value {
  font-size: 1.55rem;
}

/* ============================================================
   8. HR / STAFF — inline icon + value,
animated bottom underline
   ============================================================ */
.status-card-hr {
  display: flex;
  align-items: center;
  gap: 0.9rem;
}

.status-card-hr .status-card-icon {
  width: 48px;
  height: 48px;
  border-radius: 12px;
  background: rgba(var(--sc-accent-rgb), 0.12);
  color: var(--bs-primary);
  flex-shrink: 0;
}

.status-card-hr .status-card-value {
  font-size: 1.5rem;
}

.status-card-hr::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  height: 3px;
  width: 0;
  background: var(--bs-primary);
  transition: width 0.3s ease;
}

.status-card-hr:hover::after {
  width: 100%;
}

/* ============================================================
   DARK MODE  (html[data-theme="dark"])
   ============================================================ */
[data-theme=dark] .status-card {
  background: #1a2233;
  color: #e9edf5;
  border-color: rgba(255, 255, 255, 0.08);
}

[data-theme=dark] .status-card .status-card-label {
  color: #8a94a6;
}

[data-theme=dark] .status-card .status-card-value {
  color: #e9edf5;
}

[data-theme=dark] .status-card:hover {
  box-shadow: 0 0.75rem 1.5rem rgba(0, 0, 0, 0.4);
}

[data-theme=dark] .status-card-students .status-card-icon {
  background: #1a2233;
}

[data-theme=dark] .status-card-library {
  border-color: rgba(var(--sc-accent-rgb), 0.35);
}

/* ============================================================
   RTL
   ============================================================ */
[dir=rtl] .status-card-transport::after {
  right: auto;
  left: -30px;
}

[dir=rtl] .status-card-hr::after {
  left: auto;
  right: 0;
}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 575.98px) {
  .status-card {
    padding: 1rem;
  }

  .status-card .status-card-value,
  .status-card-students .status-card-value,
  .status-card-transport .status-card-value,
  .status-card-library .status-card-value {
    font-size: 1.4rem;
  }
}

/* ============================================================
   PAGE-SCOPED STAT-CARD SKINS (body.sc-skin-*) — migrated from app-new.css
   ============================================================ */
/* PAGE-SCOPED SKINS — give each module a distinct identity by
   restyling the shared .stat-card markup. Add one class to <body>.
   Accent color still comes from .stat-primary/.stat-success/etc.
   ============================================================ */
/* base tweak for all skinned pages */
[class*=sc-skin-] .stat-card {
  border-radius: 16px;
}

/* STUDENTS — full-width top gradient accent + circular gradient icon */
body.sc-skin-students .stat-card::before {
  inset: 0 0 auto 0 !important;
  width: 100% !important;
  height: 4px !important;
  border-radius: 16px 16px 0 0 !important;
  opacity: 1 !important;
}

body.sc-skin-students .stat-card::after {
  opacity: 0.05 !important;
}

body.sc-skin-students .stat-card .stat-icon {
  border-radius: 50% !important;
}

body.sc-skin-students .stat-card {
  padding-top: 0.35rem;
}

/* TEACHERS / DASHBOARDS — thick left rail + squared icon */
body.sc-skin-teachers .stat-card::before {
  width: 6px !important;
  border-radius: 16px 0 0 16px !important;
  opacity: 1 !important;
}

body.sc-skin-teachers .stat-card::after {
  display: none !important;
}

body.sc-skin-teachers .stat-card .stat-icon {
  border-radius: 12px !important;
}

body.sc-skin-teachers .stat-card .card-body {
  padding-left: 1.4rem;
}

/* FEES — ring-style icon (bordered),
no side strip */
body.sc-skin-fees .stat-card::before {
  display: none !important;
}

body.sc-skin-fees .stat-card::after {
  opacity: 0.05 !important;
}

body.sc-skin-fees .stat-card .stat-icon {
  background: transparent !important;
  border: 3px solid;
  border-radius: 50% !important;
}

/* EXAMS / ACADEMICS — bottom accent bar + squared icon */
body.sc-skin-exams .stat-card::before {
  inset: auto 0 0 0 !important;
  top: auto !important;
  width: 100% !important;
  height: 4px !important;
  border-radius: 0 0 16px 16px !important;
  opacity: 1 !important;
}

body.sc-skin-exams .stat-card::after {
  display: none !important;
}

body.sc-skin-exams .stat-card .stat-icon {
  border-radius: 12px !important;
}

/* ACADEMICS — dashed outline + top-left accent dot */
body.sc-skin-academics .stat-card {
  border: 1.5px dashed rgba(0, 0, 0, 0.12) !important;
}

body.sc-skin-academics .stat-card::before {
  inset: 14px auto auto 14px !important;
  width: 10px !important;
  height: 10px !important;
  border-radius: 50% !important;
  opacity: 1 !important;
}

body.sc-skin-academics .stat-card::after {
  display: none !important;
}

body.sc-skin-academics .stat-card .stat-icon {
  border-radius: 12px !important;
}

[data-theme=dark] body.sc-skin-academics .stat-card {
  border-color: rgba(255, 255, 255, 0.14) !important;
}

/* TRANSPORT / OPS — diagonal corner accent + solid icon */
body.sc-skin-transport .stat-card::before {
  display: none !important;
}

body.sc-skin-transport .stat-card::after {
  top: -30px !important;
  right: -30px !important;
  left: auto !important;
  width: 90px !important;
  height: 90px !important;
  border-radius: 20px !important;
  transform: rotate(45deg);
  opacity: 0.16 !important;
}

body.sc-skin-transport .stat-card .stat-icon {
  color: #fff !important;
}

body.sc-skin-transport .stat-card.stat-primary .stat-icon {
  background: var(--bs-primary) !important;
}

body.sc-skin-transport .stat-card.stat-success .stat-icon {
  background: var(--bs-success) !important;
}

body.sc-skin-transport .stat-card.stat-info .stat-icon {
  background: var(--bs-info) !important;
}

body.sc-skin-transport .stat-card.stat-warning .stat-icon {
  background: var(--bs-warning) !important;
}

body.sc-skin-transport .stat-card.stat-danger .stat-icon {
  background: var(--bs-danger) !important;
}

body.sc-skin-transport .stat-card.stat-secondary .stat-icon {
  background: var(--bs-secondary) !important;
}

/* HOSTEL / HEALTH — dotted pattern background */
body.sc-skin-hostel .stat-card::before {
  display: none !important;
}

body.sc-skin-hostel .stat-card::after {
  display: none !important;
}

body.sc-skin-hostel .stat-card {
  background-image: radial-gradient(rgba(0, 0, 0, 0.06) 1.4px, transparent 1.4px);
  background-size: 14px 14px;
}

[data-theme=dark] body.sc-skin-hostel .stat-card {
  background-image: radial-gradient(rgba(255, 255, 255, 0.06) 1.4px, transparent 1.4px);
}

body.sc-skin-hostel .stat-card .stat-icon {
  border-radius: 14px !important;
}

/* HR / GOVERNANCE — animated bottom underline on hover */
body.sc-skin-hr .stat-card::before {
  inset: auto 0 0 0 !important;
  top: auto !important;
  width: 0 !important;
  height: 3px !important;
  border-radius: 0 !important;
  opacity: 1 !important;
  transition: width 0.3s ease;
}

body.sc-skin-hr .stat-card:hover::before {
  width: 100% !important;
}

body.sc-skin-hr .stat-card::after {
  display: none !important;
}

body.sc-skin-hr .stat-card .stat-icon {
  border-radius: 12px !important;
}

/* AI — soft glow gradient border + circular icon */
body.sc-skin-ai .stat-card {
  border: 1px solid rgba(53, 119, 241, 0.18) !important;
  box-shadow: 0 0 0 1px rgba(53, 119, 241, 0.04) inset;
}

body.sc-skin-ai .stat-card::before {
  inset: 0 !important;
  width: auto !important;
  height: auto !important;
  border-radius: 16px !important;
  background: linear-gradient(135deg, rgba(124, 58, 237, 0.08), rgba(53, 119, 241, 0.02)) !important;
  opacity: 1 !important;
  z-index: 0;
}

body.sc-skin-ai .stat-card::after {
  display: none !important;
}

body.sc-skin-ai .stat-card .card-body {
  position: relative;
  z-index: 1;
}

body.sc-skin-ai .stat-card .stat-icon {
  border-radius: 50% !important;
}

[data-theme=dark] body.sc-skin-ai .stat-card {
  border-color: rgba(124, 58, 237, 0.3) !important;
}

/*-----------------
	Skeleton loader

	The template's single loading-placeholder system. One shimmer primitive
	(`.skeleton`) plus shape modifiers, wrapped in `.skeleton-loader`, which
	scripts hide with `.hidden` once the live content is ready:

		<div class="skeleton-loader" aria-hidden="true">
			<div class="skeleton skeleton-line"></div>
			<div class="skeleton skeleton-line skeleton-thin"></div>
		</div>

	Shapes are deliberately generic — a page that needs a different track or
	row geometry scopes its own overrides in its page partial rather than
	introducing a second skeleton implementation.
-----------------*/
.skeleton-loader {
  display: block;
}

.skeleton-loader.hidden {
  display: none;
}

.skeleton {
  position: relative;
  overflow: hidden;
  background: #eceef3;
  border-radius: 6px;
}

.skeleton::after {
  content: "";
  position: absolute;
  inset: 0;
  transform: translateX(-100%);
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.65), transparent);
  animation: skeleton-shimmer 1.3s infinite;
}

/* shapes */
.skeleton-line {
  height: 12px;
}

.skeleton-avatar {
  width: 46px;
  height: 46px;
  border-radius: 12px;
}

.skeleton-circle {
  width: 34px;
  height: 34px;
  border-radius: 50%;
}

.skeleton-pill {
  height: 22px;
  width: 74px;
  border-radius: 999px;
}

.skeleton-card {
  height: 78px;
  border-radius: 8px;
}

.skeleton-btn {
  height: 40px;
  width: 110px;
  border-radius: 8px;
}

/* stacked lines inside a media-style row */
.skeleton-stack {
  flex: 1;
  min-width: 0;
}

@keyframes skeleton-shimmer {
  100% {
    transform: translateX(100%);
  }
}

/* dark tone stays scoped to the workspaces that ship a dark surface, so no
   page silently changes tone by adopting the shared primitive */
[data-bs-theme=dark] .students-workspace .skeleton,
[data-bs-theme=dark] .data-workspace .skeleton {
  background: #2a3042;
}

[data-bs-theme=dark] .students-workspace .skeleton::after,
[data-bs-theme=dark] .data-workspace .skeleton::after {
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.08), transparent);
}

/* ============================================================
   Workspace system — the reusable toolbar, record grid, selection,
   details, footer and state primitives shared by every workspace page
   ============================================================ */
/* ===== students-workspace.css ===== */
/* ============================================================
   Students Workspace — Premium enterprise redesign
   Scoped entirely under .students-workspace so it never
   affects the sidebar,
header,
page layout or global palette.
   Inherits the theme's Bootstrap colour tokens (--bs-*) and
   only adds neutral premium surfaces on top.
   ============================================================ */
.students-workspace,
.data-workspace {
  position: relative;
}

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce) {

  .students-workspace *,
  .data-workspace * {
    animation: none !important;
    transition: none !important;
  }
}

/* ============================================================
   TOOLBAR
   ============================================================ */
.page-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  width: 100%;
}

.page-toolbar .search-toolbar {
  position: relative;
  flex: 1 1 260px;
  min-width: 220px;
}

.page-toolbar .search-toolbar input {
  width: 100%;
  height: 40px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-secondary-bg);
  padding: 0 88px 0 38px;
  font-size: 14px;
  transition: box-shadow var(--transition), border-color var(--transition), background var(--transition);
}

.page-toolbar .search-toolbar input:focus {
  outline: none;
  background: var(--bs-body-bg);
  border-color: var(--bs-primary);
  box-shadow: 0 0 0 3px var(--tint-primary);
}

.page-toolbar .search-toolbar .search-toolbar-icon {
  position: absolute;
  left: 12px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--bs-secondary-color);
  font-size: 18px;
  pointer-events: none;
}

.page-toolbar .search-toolbar .search-toolbar-kbd {
  position: absolute;
  right: 5px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 11px;
  color: var(--bs-secondary-color);
  border: 1px solid var(--bs-border-color);
  border-radius: 9px;
  padding: 8px 6px;
  background: var(--bs-body-bg);
  line-height: 1;
}

/* generic pill button used across the toolbar */
.workspace-button {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 40px;
  padding: 0 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color, #1f2937);
  font-size: 13.5px;
  font-weight: 500;
  line-height: 1;
  cursor: pointer;
  transition: all var(--transition);
  white-space: nowrap;
}

.workspace-button i {
  font-size: 17px;
}

.workspace-button:hover {
  background: var(--bs-tertiary-bg);
  border-color: var(--bs-primary);
  color: var(--bs-primary);
  transform: translateY(-1px);
  box-shadow: var(--shadow);
}

.workspace-button.workspace-button-icon {
  padding: 0;
  width: 40px;
  justify-content: center;
}

.workspace-button.workspace-button-icon.dropdown-toggle {
  padding: 0 8px;
  width: auto;
}

.workspace-button.active,
.workspace-button[aria-pressed=true] {
  background: var(--tint-primary);
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

/* density segmented control */
.density-toggle {
  display: inline-flex;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  overflow: hidden;
  background: var(--bs-body-bg);
}

.density-toggle button {
  border: 0;
  background: transparent;
  width: 38px;
  height: 40px;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.density-toggle button i {
  font-size: 17px;
}

.density-toggle button.active {
  background: var(--tint-primary);
  color: var(--bs-primary);
}

/* List / Grid layout toggle (segmented,
like density) */
.view-switcher {
  display: inline-flex;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  overflow: hidden;
  background: var(--bs-body-bg);
}

.view-switcher a {
  width: 38px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--bs-secondary-color);
  text-decoration: none;
  transition: all var(--transition);
}

.view-switcher a i {
  font-size: 17px;
}

.view-switcher a:hover {
  color: var(--bs-primary);
  background: var(--bs-tertiary-bg);
}

.view-switcher a.active {
  background: var(--tint-primary);
  color: var(--bs-primary);
}

/* Quick filter / saved-view pills */
.quick-filters {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 14px;
}

.quick-filter {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 32px;
  padding: 0 12px;
  border-radius: 999px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  font-size: 12.5px;
  font-weight: 500;
  cursor: pointer;
  transition: all var(--transition);
}

.quick-filter .quick-filter-count {
  background: var(--bs-secondary-bg);
  border-radius: 999px;
  padding: 1px 7px;
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-emphasis-color, #1f2937);
}

.quick-filter:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.quick-filter.active {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.quick-filter.active .quick-filter-count {
  background: rgba(255, 255, 255, 0.25);
  color: #fff;
}

/* Filter chips */
.filter-chips {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 12px;
}

.filter-chips:empty {
  display: none;
}

.filter-chip-item {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 28px;
  padding: 0 6px 0 12px;
  border-radius: 999px;
  background: var(--tint-primary);
  color: var(--bs-primary);
  font-size: 12px;
  font-weight: 500;
  animation: workspace-pop 0.18s ease;
}

.filter-chip-item button {
  border: 0;
  background: rgba(0, 0, 0, 0.06);
  color: inherit;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  font-size: 13px;
  line-height: 1;
  transition: background var(--transition);
}

.filter-chip-item button:hover {
  background: rgba(0, 0, 0, 0.16);
}

.filter-chips .filter-chip-clear {
  background: transparent;
  color: var(--bs-secondary-color);
  text-decoration: underline;
  cursor: pointer;
  border: 0;
  font-size: 12px;
}

/* ============================================================
   COMPACT TOOLBAR

   The default controls are 40px tall, which reads heavy above a dense grid.
   `.page-toolbar-compact` on the workspace root trims the toolbar, search field and
   quickbar to the tighter proportions the classes workspace uses, without
   pulling in any of that page's scoped behaviour.
   ============================================================ */
.page-toolbar-compact .page-toolbar {
  gap: 8px;
}

.page-toolbar-compact .page-toolbar .workspace-button {
  height: 34px;
  padding: 0 11px;
  font-size: 12.5px;
  gap: 5px;
}

.page-toolbar-compact .page-toolbar .workspace-button i {
  font-size: 15px;
}

.page-toolbar-compact .page-toolbar .workspace-button.workspace-button-icon {
  width: 34px;
  padding: 0;
}

/* the field grows to fill the row by default; here the controls beside it are
   more useful with that space */
.page-toolbar-compact .page-toolbar .search-toolbar {
  flex: 0 1 250px;
  min-width: 180px;
}

.page-toolbar-compact .page-toolbar .search-toolbar input {
  height: 34px;
  padding: 0 58px 0 32px;
  font-size: 13px;
}

.page-toolbar-compact .page-toolbar .search-toolbar .search-toolbar-icon {
  font-size: 15px;
  left: 11px;
}

.page-toolbar-compact .page-toolbar .search-toolbar .search-toolbar-kbd {
  font-size: 10px;
  padding: 8px 5px;
  right: 4px;
}

.page-toolbar-compact .density-toggle button {
  width: 32px;
  height: 34px;
}

.page-toolbar-compact .density-toggle button i {
  font-size: 16px;
}

/* controls sitting among the quick-filter pills take their height */
.page-toolbar-compact .quick-filters {
  margin-top: 10px;
}

.page-toolbar-compact .quick-filters .workspace-button {
  height: 32px;
  padding: 0 10px;
  font-size: 12.5px;
  gap: 5px;
}

.page-toolbar-compact .quick-filters .workspace-button i {
  font-size: 15px;
}

/* ============================================================
   SUMMARY STRIP
   ============================================================ */
.summary-strip {
  display: grid;
  grid-template-columns: repeat(8, minmax(0, 1fr));
  gap: 10px;
  padding: 16px;
  border-bottom: 1px solid var(--bs-border-color);
}

@media (max-width: 1399.98px) {
  .summary-strip {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
}

@media (max-width: 575.98px) {
  .summary-strip {
    grid-template-columns: repeat(1, 1fr) !important;
  }
}

.summary-card {
  position: relative;
  padding: 12px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  transition: all var(--transition);
  overflow: hidden;
}

.summary-card::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--accent);
  opacity: 0.85;
}

.summary-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
}

.summary-card .summary-card-icon {
  width: 30px;
  height: 30px;
  border-radius: 8px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
  background: var(--accent-soft);
  color: var(--accent);
  margin-bottom: 8px;
}

.summary-card .summary-card-value {
  font-size: 20px;
  font-weight: 700;
  line-height: 1;
  color: var(--bs-heading-color, #111827);
}

.summary-card .summary-card-label {
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin: 4px 0 0;
}

/* accent variants (only surface tints — no global palette change) */
/* Quick statistics mini card with sparkline dots */
.summary-card .summary-card-spark {
  display: flex;
  align-items: flex-end;
  gap: 3px;
  height: 20px;
  margin-top: 6px;
}

.summary-card .summary-card-spark span {
  flex: 1;
  background: var(--accent);
  border-radius: 2px;
  opacity: 0.55;
  animation: workspace-grow 0.6s ease both;
}

/* ============================================================
   BULK ACTION BAR
   ============================================================ */
.selection-toolbar {
  display: none;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  padding: 12px 16px;
  margin: 0;
  background: linear-gradient(90deg, var(--tint-primary), transparent);
  border-bottom: 1px solid var(--bs-border-color);
  animation: workspace-slidedown 0.2s ease;
}

.selection-toolbar.show {
  display: flex;
}

.selection-toolbar .selection-toolbar-count {
  font-weight: 600;
  color: var(--bs-primary);
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.selection-toolbar .selection-toolbar-count .selection-toolbar-badge {
  background: var(--bs-primary);
  color: #fff;
  border-radius: 999px;
  min-width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  padding: 0 6px;
}

.selection-toolbar .selection-toolbar-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

/* ============================================================
   TABLE
   ============================================================ */
.record-grid-wrapper {
  overflow: auto;
  max-height: 68vh;
}

.students-workspace.is-fullscreen,
.data-workspace.is-fullscreen {
  position: fixed;
  inset: 0;
  z-index: 1055;
  /* Soft app background (not stark white) so the area below a short table
     reads as the app in fullscreen rather than a blank white screen. */
  background: var(--bs-secondary-bg);
  padding: 18px;
  overflow: auto;
}

.students-workspace.is-fullscreen .record-grid-wrapper,
.data-workspace.is-fullscreen .record-grid-wrapper,
.data-workspace.is-fullscreen .data-table {
  max-height: calc(100vh - 260px);
  overflow: auto;
}

.data-workspace.is-fullscreen:fullscreen {
  overflow: auto;
}

table.record-grid-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  min-width: 940px;
}

table.record-grid-table thead th {
  position: sticky;
  top: 0;
  z-index: 5;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  padding: 14px 16px;
  border-bottom: 1px solid var(--bs-border-color);
  white-space: nowrap;
  user-select: none;
}

table.record-grid-table thead th.record-sortable {
  cursor: pointer;
  transition: color var(--transition);
}

table.record-grid-table thead th.record-sortable:hover {
  color: var(--bs-primary);
}

table.record-grid-table thead th .record-sort-icon {
  font-size: 14px;
  opacity: 0.5;
  vertical-align: middle;
  transition: transform var(--transition), opacity var(--transition);
}

table.record-grid-table thead th.is-sorted-asc .record-sort-icon {
  opacity: 1;
  color: var(--bs-primary);
}

table.record-grid-table thead th.is-sorted-desc .record-sort-icon {
  opacity: 1;
  color: var(--bs-primary);
  transform: rotate(180deg);
}

/* column pin */
table.record-grid-table th.is-pinned,
table.record-grid-table td.is-pinned {
  position: sticky;
  left: 0;
  z-index: 4;
  background: var(--bs-body-bg);
}

table.record-grid-table thead th.is-pinned {
  z-index: 6;
  background: var(--bs-secondary-bg);
}

/* column resize handle */
table.record-grid-table thead th .record-column-resize {
  position: absolute;
  right: 0;
  top: 0;
  bottom: 0;
  width: 6px;
  cursor: col-resize;
  opacity: 0;
}

table.record-grid-table thead th:hover .record-column-resize {
  opacity: 1;
  background: var(--tint-primary);
}

table.record-grid-table tbody td {
  padding: 16px;
  border-bottom: 1px solid var(--bs-border-color);
  vertical-align: middle;
  font-size: 14px;
  background: var(--bs-body-bg);
  transition: background var(--transition);
}

/* density variants */
.students-workspace[data-density=compact] table.record-grid-table tbody td,
.data-workspace[data-density=compact] table.record-grid-table tbody td {
  padding: 9px 16px;
}

.students-workspace[data-density=compact] table.record-grid-table tbody td .record-avatar,
.data-workspace[data-density=compact] table.record-grid-table tbody td .record-avatar {
  width: 36px;
  height: 36px;
}

.students-workspace[data-density=comfortable] table.record-grid-table tbody td,
.data-workspace[data-density=comfortable] table.record-grid-table tbody td {
  padding: 22px 16px;
}

/* row */
table.record-grid-table tbody tr.record-grid-row {
  transition: transform var(--transition), box-shadow var(--transition);
}

table.record-grid-table tbody tr.record-grid-row:hover td {
  background: var(--bs-tertiary-bg);
}

table.record-grid-table tbody tr.record-grid-row.is-selected td {
  background: var(--tint-primary);
}

/* rounded selection — round the first & last cell of a selected row */
table.record-grid-table tbody tr.record-grid-row.is-selected td:first-child {
  box-shadow: inset 3px 0 0 var(--bs-primary);
}

table.record-grid-table tbody tr.record-grid-row td.is-fading-in {
  animation: workspace-fade 0.35s ease both;
}

/* Professional checkbox */
.record-check {
  appearance: none;
  -webkit-appearance: none;
  width: 18px;
  height: 18px;
  border: 1.8px solid var(--bs-border-color);
  border-radius: 5px;
  background: var(--bs-body-bg);
  cursor: pointer;
  position: relative;
  transition: all var(--transition);
  vertical-align: middle;
}

.record-check:hover {
  border-color: var(--bs-primary);
}

.record-check:checked {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
}

.record-check:checked::after {
  content: "";
  position: absolute;
  left: 5px;
  top: 1.5px;
  width: 5px;
  height: 9px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

.record-check:indeterminate {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
}

.record-check:indeterminate::after {
  content: "";
  position: absolute;
  left: 3px;
  top: 7px;
  width: 10px;
  height: 2px;
  background: #fff;
  border-radius: 2px;
}

.record-check:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px var(--tint-primary);
}

/* Student cell */
.record-identity {
  display: flex;
  align-items: center;
  gap: 12px;
}

.record-avatar {
  position: relative;
  width: 46px;
  height: 46px;
  border-radius: 12px;
  overflow: hidden;
  flex-shrink: 0;
  border: 1px solid var(--bs-border-color);
  box-shadow: var(--shadow);
}

.record-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.record-avatar .record-avatar-presence {
  position: absolute;
  right: -2px;
  bottom: -2px;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  border: 2px solid var(--bs-body-bg);
  background: var(--bs-success);
}

.record-avatar .record-avatar-presence.off {
  background: #9ca3af;
}

.record-identity .record-identity-name {
  font-weight: 600;
  color: var(--bs-heading-color, #111827);
  line-height: 1.2;
  text-decoration: none;
}

.record-identity .record-identity-name:hover {
  color: var(--bs-primary);
}

.record-identity .record-identity-sub {
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin-top: 2px;
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.record-identity .record-identity-sub .record-dot {
  opacity: 0.5;
}

/* micro tag badges under student */
.record-tags {
  display: flex;
  gap: 5px;
  margin-top: 6px;
  flex-wrap: wrap;
}

.record-tag {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 10.5px;
  font-weight: 600;
  padding: 2px 7px;
  border-radius: 999px;
  line-height: 1.4;
}

.record-tag i {
  font-size: 12px;
}

.record-tag.t-scholar {
  background: rgba(217, 119, 6, 0.12);
  color: #b45309;
}

.record-tag.t-transport {
  background: rgba(8, 145, 178, 0.12);
  color: #0e7490;
}

.record-tag.t-hostel {
  background: rgba(123, 97, 255, 0.12);
  color: #6d28d9;
}

/* Status pills */
.record-pill {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  font-weight: 600;
  padding: 5px 11px;
  border-radius: 999px;
  line-height: 1;
  white-space: nowrap;
}

.record-pill .record-pill-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: currentColor;
  box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.04);
  animation: workspace-pulse 2s infinite;
}

.record-pill.s-active {
  background: rgba(22, 163, 74, 0.12);
  color: #15803d;
}

.record-pill.s-inactive {
  background: rgba(107, 114, 128, 0.14);
  color: #4b5563;
}

.record-pill.s-transfer {
  background: rgba(8, 145, 178, 0.12);
  color: #0e7490;
}

.record-pill.s-graduated {
  background: rgba(123, 97, 255, 0.12);
  color: #6d28d9;
}

.record-pill.s-suspended {
  background: rgba(220, 38, 38, 0.12);
  color: #b91c1c;
}

.record-pill.s-leave {
  background: rgba(217, 119, 6, 0.12);
  color: #b45309;
}

.record-pill.s-inactive .record-pill-dot,
.record-pill.s-graduated .record-pill-dot {
  animation: none;
}

/* Action column — circular icon buttons */
.workspace-actions {
  display: flex;
  align-items: center;
  gap: 6px;
  justify-content: flex-end;
}

.workspace-icon-button {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all var(--transition);
  flex-shrink: 0;
  text-decoration: none;
}

.workspace-icon-button i {
  font-size: 16px;
}

.workspace-icon-button:hover {
  color: #fff;
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
}

.workspace-icon-button.danger:hover {
  background: var(--bs-danger);
  border-color: var(--bs-danger);
}

.workspace-icon-button.success:hover {
  background: var(--bs-success);
  border-color: var(--bs-success);
}

/* dropdown menu (reuse bootstrap .dropdown-menu but premium) */
.students-workspace .dropdown-menu,
.data-workspace .dropdown-menu {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  box-shadow: var(--shadow-lift);
  padding: 8px;
}

/* run the entrance only on open, so it replays on every toggle */
.students-workspace .dropdown-menu.show,
.data-workspace .dropdown-menu.show {
  animation: workspace-menu 0.16s ease;
}

.students-workspace .dropdown-menu .dropdown-item,
.data-workspace .dropdown-menu .dropdown-item {
  border-radius: var(--radius-sm);
  padding: 8px 10px;
  font-size: 13.5px;
  display: flex;
  align-items: center;
  gap: 8px;
  transition: background var(--transition);
}

.students-workspace .dropdown-menu .dropdown-item i,
.data-workspace .dropdown-menu .dropdown-item i {
  font-size: 16px;
}

.students-workspace .dropdown-menu .dropdown-item:hover,
.data-workspace .dropdown-menu .dropdown-item:hover {
  background: var(--bs-tertiary-bg);
}

.students-workspace .dropdown-menu .dropdown-item.text-danger:hover,
.data-workspace .dropdown-menu .dropdown-item.text-danger:hover {
  background: rgba(220, 38, 38, 0.1);
}

.students-workspace .dropdown-menu .context-menu-head,
.data-workspace .dropdown-menu .context-menu-head {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-secondary-color);
  padding: 6px 10px 4px;
  font-weight: 600;
}

/* ---- Premium Quick Actions panel ---- */
.students-workspace .dropdown-menu.quick-menu-list,
.data-workspace .dropdown-menu.quick-menu-list {
  width: 312px;
  padding: 0;
  overflow: hidden;
}

.quick-menu-head {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 12px 14px;
  background: linear-gradient(135deg, var(--tint-primary), transparent 90%);
  border-bottom: 1px solid var(--bs-border-color);
}

.quick-menu-head-title {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 13px;
  font-weight: 700;
  color: var(--bs-heading-color, #111827);
  letter-spacing: 0.01em;
}

.quick-menu-head-title i {
  color: var(--bs-primary);
  font-size: 16px;
}

.quick-menu-head-sub {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.workspace-action-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 2px;
  padding: 10px;
}

.workspace-action-grid a.quick-menu {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  padding: 10px 4px;
  border-radius: 12px;
  font-size: 10.5px;
  font-weight: 500;
  color: var(--bs-secondary-color);
  text-align: center;
  line-height: 1.25;
  text-decoration: none;
  transition: transform var(--transition), background var(--transition), color var(--transition);
}

.quick-menu .quick-menu-icon {
  width: 38px;
  height: 38px;
  border-radius: 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 19px;
  transition: transform var(--transition), box-shadow var(--transition);
}

.quick-menu .quick-menu-icon i {
  font-size: 19px;
}

.workspace-action-grid a.quick-menu:hover {
  background: var(--bs-tertiary-bg);
  color: var(--bs-heading-color, #111827);
}

.workspace-action-grid a.quick-menu:hover .quick-menu-icon {
  transform: translateY(-2px) scale(1.04);
  box-shadow: 0 6px 14px -4px rgba(17, 24, 39, 0.28);
}

.workspace-action-grid a.quick-menu:active .quick-menu-icon {
  transform: translateY(0) scale(0.96);
}

.workspace-action-grid a.quick-menu:focus-visible {
  outline: none;
  background: var(--bs-tertiary-bg);
  box-shadow: 0 0 0 2px var(--bs-primary) inset;
}

/* icon tile colour tokens (soft tint bg + saturated icon) */
.quick-menu-icon.c-primary {
  background: rgba(31, 59, 96, 0.12);
  color: var(--bs-primary);
}

.quick-menu-icon.c-blue {
  background: rgba(37, 99, 235, 0.12);
  color: #2563eb;
}

.quick-menu-icon.c-green {
  background: rgba(22, 163, 74, 0.12);
  color: var(--bs-success);
}

.quick-menu-icon.c-purple {
  background: rgba(123, 97, 255, 0.12);
  color: var(--accent-purple);
}

.quick-menu-icon.c-indigo {
  background: rgba(79, 70, 229, 0.12);
  color: #4f46e5;
}

.quick-menu-icon.c-teal {
  background: rgba(13, 148, 136, 0.12);
  color: var(--accent-teal);
}

.quick-menu-icon.c-amber {
  background: rgba(217, 119, 6, 0.12);
  color: var(--bs-warning);
}

.quick-menu-icon.c-cyan {
  background: rgba(8, 145, 178, 0.12);
  color: var(--bs-info);
}

.quick-menu-icon.c-violet {
  background: rgba(139, 92, 246, 0.12);
  color: #8b5cf6;
}

.quick-menu-icon.c-red {
  background: rgba(220, 38, 38, 0.12);
  color: var(--bs-danger);
}

.quick-menu-icon.c-slate {
  background: rgba(71, 85, 105, 0.12);
  color: #475569;
}

/* ============================================================
   ROW EXPANSION
   ============================================================ */
tr.details-panel-row>td {
  padding: 0 !important;
  background: var(--bs-secondary-bg) !important;
  border-bottom: 1px solid var(--bs-border-color);
}

.details-panel-inner {
  display: none;
  padding: 18px 20px;
  animation: workspace-fade 0.3s ease;
}

tr.details-panel-row.open .details-panel-inner {
  display: block;
}

.details-panel {
  display: grid;
  grid-template-columns: 180px repeat(auto-fit, minmax(150px, 1fr));
  gap: 18px;
  align-items: start;
}

.details-panel-photo {
  border-radius: var(--radius);
  overflow: hidden;
  border: 1px solid var(--bs-border-color);
  box-shadow: var(--shadow);
}

.details-panel-photo img {
  width: 100%;
  display: block;
}

.details-panel-block h6 {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--bs-secondary-color);
  margin: 0 0 4px;
}

.details-panel-block p {
  margin: 0 0 12px;
  font-size: 13.5px;
  font-weight: 500;
  color: var(--bs-heading-color, #111827);
}

.record-progress {
  height: 6px;
  border-radius: 999px;
  background: var(--bs-border-color);
  overflow: hidden;
  margin: 6px 0 12px;
}

.record-progress span {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--bs-primary);
}

.details-toggle {
  width: 26px;
  height: 26px;
  border-radius: 7px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all var(--transition);
}

.details-toggle:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.details-toggle i {
  transition: transform var(--transition);
}

tr.record-grid-row.expanded .details-toggle {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

tr.record-grid-row.expanded .details-toggle i {
  transform: rotate(90deg);
}

/* ============================================================
   EMPTY STATE
   ============================================================ */
.workspace-empty-state {
  display: none;
  text-align: center;
  padding: 60px 20px;
}

.workspace-empty-state.show {
  display: block;
}

.workspace-empty-state .workspace-empty-art {
  width: 132px;
  height: 132px;
  margin: 0 auto 18px;
  border-radius: 50%;
  background: radial-gradient(circle at 30% 30%, var(--tint-primary), transparent 70%);
  display: flex;
  align-items: center;
  justify-content: center;
}

.workspace-empty-state .workspace-empty-art i {
  font-size: 60px;
  color: var(--bs-primary);
}

.workspace-empty-state h5 {
  font-weight: 700;
  margin-bottom: 6px;
}

.workspace-empty-state p {
  color: var(--bs-secondary-color);
  max-width: 380px;
  margin: 0 auto 18px;
}

/* ============================================================
   SKELETON LOADING

   The primitive and its shapes live in components/_ui-skeleton.scss —
   only the workspace's own row/summary geometry stays here.
   ============================================================ */
.is-loaded .live-content {
  display: block;
}

.skeleton-summary {
  display: grid;
  grid-template-columns: repeat(8, 1fr);
  gap: 10px;
  padding: 16px;
  border-bottom: 1px solid var(--bs-border-color);
}

.skeleton-toolbar {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  align-items: center;
  padding-bottom: 4px;
}

.skeleton-row {
  display: grid;
  grid-template-columns: 24px 46px 1.4fr 0.7fr 0.9fr 1.4fr;
  gap: 16px;
  align-items: center;
  padding: 18px 16px;
  border-bottom: 1px solid var(--bs-border-color);
}

.skeleton-row .skeleton-actions {
  display: flex;
  gap: 6px;
  justify-content: flex-end;
}

/* ============================================================
   CONTEXT MENU
   ============================================================ */
.context-menu {
  position: fixed;
  z-index: 2000;
  min-width: 190px;
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  box-shadow: var(--shadow-lift);
  padding: 6px;
  display: none;
  animation: workspace-menu 0.14s ease;
}

.context-menu.show {
  display: block;
}

.context-menu a {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border-radius: var(--radius-sm);
  font-size: 13.5px;
  color: var(--bs-body-color, #374151);
  text-decoration: none;
  transition: background var(--transition);
}

.context-menu a i {
  font-size: 16px;
}

.context-menu a:hover {
  background: var(--bs-tertiary-bg);
}

.context-menu a.text-danger:hover {
  background: rgba(220, 38, 38, 0.1);
}

.context-menu .context-menu-divider {
  height: 1px;
  background: var(--bs-border-color);
  margin: 5px 4px;
}

/* ============================================================
   MOBILE CARDS
   ============================================================ */
.record-cards {
  display: none;
}

@media (max-width: 991.98px) {
  .summary-strip {
    grid-template-columns: repeat(4, 1fr);
  }

  .skeleton-summary {
    grid-template-columns: repeat(4, 1fr);
  }
}

@media (max-width: 767.98px) {
  .summary-strip {
    grid-template-columns: repeat(2, 1fr);
  }

  .skeleton-summary {
    grid-template-columns: repeat(2, 1fr);
  }

  .record-grid-wrapper {
    display: none;
  }

  .record-cards {
    display: block;
    padding: 14px;
  }

  .record-card {
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    padding: 14px;
    margin-bottom: 12px;
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    transition: all var(--transition);
  }

  .record-card:hover {
    transform: translateY(-2px);
    box-shadow: var(--shadow-lift);
  }

  .record-card.is-selected {
    border-color: var(--bs-primary);
    background: var(--tint-primary);
  }

  .record-card-head {
    display: flex;
    align-items: center;
    gap: 12px;
  }

  .record-card-body {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
    margin-top: 12px;
  }

  .record-card-body .record-meta-key {
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .record-card-body .record-meta-value {
    font-size: 13px;
    font-weight: 500;
  }

  .record-card-actions {
    display: flex;
    gap: 8px;
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
    position: sticky;
    bottom: 0;
  }
}

/* ============================================================
   ANIMATIONS
   ============================================================ */
@keyframes workspace-fade {
  from {
    opacity: 0;
    transform: translateY(4px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

@keyframes workspace-pop {
  from {
    opacity: 0;
    transform: scale(0.85);
  }

  to {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes workspace-slidedown {
  from {
    opacity: 0;
    transform: translateY(-8px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

/* workspace-menu drives Popper-positioned dropdowns, so it animates the independent
`translate` and `scale` properties. A keyframe touching `transform` would
outrank Popper's inline `transform: translate3d(…)` while it runs and throw
the menu to the wrong corner until the animation ended. */
@keyframes workspace-menu {
  from {
    opacity: 0;
    translate: 0 -6px;
    scale: 0.98;
  }

  to {
    opacity: 1;
    translate: 0 0;
    scale: 1;
  }
}

@keyframes workspace-pulse {

  0%,
  100% {
    box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.04);
  }

  50% {
    box-shadow: 0 0 0 5px rgba(0, 0, 0, 0.02);
  }
}

@keyframes workspace-grow {
  from {
    height: 0;
  }
}

/* ============================================================
   DARK MODE  (theme toggles [data-bs-theme="dark"])
   ============================================================ */
[data-bs-theme=dark] .record-avatar .record-avatar-presence,
[data-bs-theme=dark] .record-check:checked::after {
  border-color: var(--bs-body-bg);
}

/* ============================================================
   PAGINATION FOOTER
   ============================================================ */
.workspace-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
  padding: 14px 16px;
  border-top: 1px solid var(--bs-border-color);
}

.workspace-footer-info {
  font-size: 13px;
  color: var(--bs-secondary-color);
}

.workspace-footer-info span {
  color: var(--bs-heading-color, #111827);
  font-weight: 600;
}

.workspace-footer-size {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--bs-secondary-color);
  margin-left: auto;
}

@media (max-width: 575.98px) {
  .workspace-footer-size {
    margin-left: unset;
  }
}

.workspace-footer-size .form-select {
  width: auto;
}

.workspace-pagination {
  display: flex;
  align-items: center;
  gap: 4px;
}

.workspace-page-button {
  min-width: 34px;
  height: 34px;
  padding: 0 8px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  border-radius: var(--radius-sm);
  color: var(--bs-body-color, #374151);
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  transition: all var(--transition);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.workspace-page-numbers {
  display: inline-flex;
  gap: 4px;
}

.workspace-page-button:hover:not(:disabled) {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.workspace-page-button.active {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.workspace-page-button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* ============================================================
   INFO MODAL / DROPZONE / ID CARD / CONFIRM
   ============================================================ */
.record-info-key {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--bs-secondary-color);
  margin-bottom: 3px;
}

.record-info-value {
  font-size: 14px;
  font-weight: 500;
  color: var(--bs-heading-color, #111827);
}

.upload-dropzone {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  padding: 30px 16px;
  border: 2px dashed var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-secondary-bg);
  cursor: pointer;
  text-align: center;
  transition: all var(--transition);
  margin-bottom: 0;
}

.upload-dropzone:hover,
.upload-dropzone.dragover {
  border-color: var(--bs-primary);
  background: var(--tint-primary);
}

.upload-dropzone i {
  font-size: 34px;
  color: var(--bs-primary);
}

.upload-dropzone-title {
  font-weight: 600;
}

.upload-dropzone-hint {
  font-size: 12px;
  color: var(--bs-secondary-color);
}

/* confirm icon */
.confirm-icon {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 30px;
  background: rgba(220, 38, 38, 0.12);
  color: var(--bs-danger);
}

.confirm-icon.warning {
  background: rgba(217, 119, 6, 0.12);
  color: var(--bs-warning);
}

.confirm-icon.primary {
  background: var(--tint-primary);
  color: var(--bs-primary);
}

/* ============================================================
   REALISTIC SCHOOL ID CARD
   ============================================================ */
.id-card-preview {
  --id-accent: var(--bs-primary);
  position: relative;
  width: 320px;
  margin: 6px auto;
  background: #fff;
  border-radius: 18px;
  overflow: hidden;
  font-family: inherit;
  box-shadow: 0 2px 0 #d5dae2, 0 4px 10px rgba(15, 23, 42, 0.08);
  border: 1px solid #e8eaed;
}

/* lanyard hole */
.id-card-hole {
  position: absolute;
  top: 12px;
  left: 50%;
  transform: translateX(-50%);
  width: 46px;
  height: 9px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.55);
  box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.12);
  z-index: 3;
}

/* header band with brand + wave */
.id-card-head {
  position: relative;
  padding: 30px 18px 46px;
  background: radial-gradient(120% 120% at 15% 0%, rgba(255, 255, 255, 0.22), transparent 55%), linear-gradient(135deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.22)), var(--id-accent);
  color: #fff;
  text-align: center;
  overflow: hidden;
}

.id-card-head::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image: repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 0 10px, transparent 10px 20px);
  opacity: 0.6;
}

.id-card-brand {
  position: relative;
  z-index: 2;
  display: inline-flex;
  align-items: center;
  gap: 10px;
}

.id-card-logo {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  background: rgba(255, 255, 255, 0.18);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  backdrop-filter: blur(2px);
}

.id-card-logo img {
  height: 22px;
  width: auto;
}

.id-card-logo i {
  font-size: 20px;
  color: #fff;
}

.id-card-brand-text {
  text-align: left;
  line-height: 1.1;
}

.id-card-brand-text h6 {
  margin: 0;
  font-size: 14px;
  font-weight: 800;
  letter-spacing: 0.04em;
}

.id-card-brand-text span {
  font-size: 9.5px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  opacity: 0.85;
}

/* white wave separating header from body */
.id-card-wave {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -1px;
  height: 34px;
  background: #fff;
  border-radius: 50% 50% 0 0/100% 100% 0 0;
  z-index: 1;
}

/* photo */
.id-card-photo-wrap {
  position: relative;
  z-index: 2;
  width: 92px;
  height: 92px;
  margin: -40px auto 0;
  border-radius: 16px;
  padding: 4px;
  background: #fff;
  box-shadow: 0 8px 18px -6px rgba(17, 24, 39, 0.3);
}

.id-card-photo {
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 12px;
}

.id-card-identity {
  text-align: center;
  margin-top: 10px;
}

.id-card-identity h5 {
  margin: 0;
  font-size: 17px;
  font-weight: 700;
  color: #111827;
}

/* info rows */
.id-card-info {
  margin: 14px 18px 0;
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  overflow: hidden;
}

.id-card-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  padding: 8px 12px;
  font-size: 12px;
}

.id-card-row:nth-child(odd) {
  background: var(--bs-secondary-bg);
}

.id-card-key {
  color: var(--bs-secondary-color);
  font-weight: 500;
}

.id-card-value {
  color: #111827;
  font-weight: 600;
  text-align: right;
}

/* barcode */
.id-card-barcode {
  margin: 14px 18px 0;
  text-align: center;
}

.id-card-bars {
  height: 40px;
  border-radius: 4px;
  background-image: repeating-linear-gradient(90deg, #1f2937 0 2px, #fff 2px 4px, #1f2937 4px 7px, #fff 7px 9px, #1f2937 9px 10px, #fff 10px 13px, #1f2937 13px 16px, #fff 16px 17px);
  background-size: 17px 100%;
}

.id-card-barcode span {
  display: block;
  margin-top: 4px;
  font-size: 11px;
  letter-spacing: 0.28em;
  color: #374151;
  font-weight: 600;
}

/* signature + QR */
.id-card-signrow {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px;
  margin: 14px 18px 0;
}

.id-card-qr {
  width: 46px;
  height: 46px;
  border-radius: 8px;
  border: 1px solid var(--bs-border-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.id-card-qr i {
  font-size: 38px;
  color: #111827;
}

.id-card-sign {
  text-align: center;
  flex: 1;
}

.id-card-sign-line {
  display: block;
  height: 22px;
  border-bottom: 1.5px solid #9ca3af;
}

.id-card-sign small {
  font-size: 10px;
  color: var(--bs-secondary-color);
}

/* footer strip */
.id-card-foot {
  margin-top: 14px;
  padding: 10px 16px;
  background: linear-gradient(135deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.22)), var(--id-accent);
  font-size: 10.5px;
  text-align: center;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
}

.id-card-foot i {
  font-size: 13px;
}

[data-bs-theme=dark] .id-card-preview {
  background: #fff;
}

[data-bs-theme=dark] .id-card-identity h5,
[data-bs-theme=dark] .id-card-value {
  color: #111827;
}

/* toast tidy */
#sw_toasts .workspace-toast {
  border: 1px solid var(--bs-border-color);
  box-shadow: var(--shadow-lift);
}

/*-----------------
	Board column

		A titled column for board / kanban layouts: tinted well, heading with a
		status dot and a count chip.

	Promoted from pages/_parent-portal.scss — a reusable pattern, not page style.
-----------------*/
.portal-column {
  background: var(--bs-secondary-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  padding: 10px;
}

.portal-column-head {
  gap: 7px;
  margin-bottom: 10px;
  padding: 0 2px;
}

.portal-column-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--accent);
}

.portal-column-head b {
  font-size: 12px;
  color: var(--bs-emphasis-color);
}

.portal-column-count {
  margin-left: auto;
  font-size: 10.5px;
  font-weight: 700;
  color: var(--bs-secondary-color);
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 6px;
  padding: 1px 6px;
}

/* ============================================================
   STUDENT PROMOTION workspace — migrated from app-new.css
   ============================================================ */
/* ===== promotion-workspace.css ===== */
/* ============================================================
   Student Promotion Workspace — premium,
scoped (.student-promotion)
   Self-contained. Does not modify global card/sidebar/header.
   ============================================================ */
.student-promotion {
  color: var(--bs-body-color, #374151);
}

.student-promotion .promotion-tone-primary {
  --accent: var(--bs-primary);
  --accent-soft: var(--tint-primary);
}

.student-promotion .promotion-tone-success {
  --accent: var(--bs-success);
  --accent-soft: var(--tint-success);
}

.student-promotion .promotion-tone-warning {
  --accent: var(--bs-warning);
  --accent-soft: var(--tint-warning);
}

.student-promotion .promotion-tone-danger {
  --accent: var(--bs-danger);
  --accent-soft: var(--tint-danger);
}

.student-promotion .promotion-tone-info {
  --accent: var(--bs-info);
  --accent-soft: var(--tint-info);
}

.student-promotion .promotion-tone-purple {
  --accent: var(--accent-purple);
  --accent-soft: var(--tint-purple);
}

/* panels match the template card language without touching global .card */
.panel-block {
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
}

.panel-block+.panel-block {
  margin-top: 16px;
}

.panel-block-body {
  padding: 18px;
}

.heading-row {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 13px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  margin: 0 0 14px;
}

.heading-row i {
  font-size: 17px;
  color: var(--bs-primary);
}

.sub-label {
  font-size: 11.5px;
  font-weight: 500;
  color: var(--bs-secondary-color);
}

.tile-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
}

/* buttons */
.promotion-button {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 38px;
  padding: 0 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  color: var(--bs-body-color, #1f2937);
  font-size: 13px;
  font-weight: 500;
  line-height: 1;
  cursor: pointer;
  transition: all var(--transition);
  white-space: nowrap;
  text-decoration: none;
}

.promotion-button i {
  font-size: 16px;
}

.promotion-button:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
  background: var(--tint-primary);
  transform: translateY(-1px);
}

.promotion-button-sm {
  height: 32px;
  padding: 0 11px;
  font-size: 12px;
}

.promotion-button-primary {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.promotion-button-primary:hover {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
  filter: brightness(1.07);
}

.promotion-icon-button {
  width: 38px;
  padding: 0;
  justify-content: center;
}

.promotion-button:disabled,
.promotion-button.disabled {
  opacity: 0.5;
  pointer-events: none;
}

/* pills */
.pill-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  font-weight: 600;
  line-height: 1;
  padding: 5px 10px;
  border-radius: 999px;
  white-space: nowrap;
}

.pill-tag i {
  font-size: 12px;
}

.pill-tag.eligible {
  color: var(--bs-success);
  background: var(--tint-success);
}

.pill-tag.review {
  color: var(--bs-warning);
  background: var(--tint-warning);
}

.pill-tag.fee {
  color: #b45309;
  background: var(--tint-warning);
}

.pill-tag.lowatt {
  color: var(--bs-danger);
  background: var(--tint-danger);
}

.pill-tag.risk {
  color: #be123c;
  background: rgba(190, 18, 60, 0.12);
}

.pill-tag.graduated {
  color: var(--accent-purple);
  background: var(--tint-purple);
}

.pill-tag.detained {
  color: #475569;
  background: rgba(71, 85, 105, 0.14);
}

.pill-tag.transfer {
  color: var(--bs-info);
  background: var(--tint-info);
}

/* ---------- KPI SUMMARY ---------- */
.kpi-tiles {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
}

.kpi-tile {
  position: relative;
  overflow: hidden;
  padding: 15px 16px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  transition: transform var(--transition), box-shadow var(--transition);
}

.kpi-tile:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
}

.kpi-tile::after {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--accent, var(--bs-primary));
  opacity: 0.9;
}

.kpi-tile-top {
  display: flex;
  align-items: center;
  gap: 10px;
}

.kpi-tile-icon {
  width: 40px;
  height: 40px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  color: #fff;
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.28), rgba(255, 255, 255, 0)), var(--accent, var(--bs-primary));
  box-shadow: 0 8px 16px -8px var(--accent-soft);
  flex-shrink: 0;
}

.kpi-tile-label {
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--bs-secondary-color);
}

.kpi-tile-value {
  font-size: 23px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  line-height: 1.05;
  margin-top: 1px;
}

.kpi-tile-value small {
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-secondary-color);
}

.kpi-tile-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-top: 12px;
}

.kpi-tile-delta {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 11px;
  font-weight: 700;
  padding: 2px 7px;
  border-radius: 999px;
}

.kpi-tile-delta.up {
  color: var(--bs-success);
  background: var(--tint-success);
}

.kpi-tile-delta.down {
  color: var(--bs-danger);
  background: var(--tint-danger);
}

.kpi-tile-delta.flat {
  color: var(--bs-secondary-color);
  background: var(--bs-secondary-bg);
}

.kpi-tile-bar {
  height: 6px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
  margin-top: 12px;
}

.kpi-tile-bar>span {
  display: block;
  height: 100%;
  width: 0;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--accent, var(--bs-primary)), rgba(255, 255, 255, 0.35));
  background-color: var(--accent, var(--bs-primary));
  transition: width 1s cubic-bezier(0.22, 1, 0.36, 1);
}

.spark-graph {
  display: block;
  width: 100%;
  height: 30px;
}

.spark-graph .ln {
  fill: none;
  stroke: var(--accent, var(--bs-primary));
  stroke-width: 2.4;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.spark-graph .ar {
  fill: var(--accent-soft);
  opacity: 0.7;
}

/* ---------- WIZARD ---------- */
.wizard {
  padding: 16px 18px;
}

.wizard-steps {
  display: flex;
  align-items: flex-start;
  gap: 0;
}

.wizard-step {
  position: relative;
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 8px;
  cursor: pointer;
}

.wizard-step::before,
.wizard-step::after {
  content: "";
  position: absolute;
  top: 19px;
  height: 3px;
  background: var(--bs-border-color);
  z-index: 0;
}

.wizard-step::before {
  left: 0;
  right: 50%;
}

.wizard-step::after {
  left: 50%;
  right: 0;
}

.wizard-step:first-child::before,
.wizard-step:last-child::after {
  display: none;
}

.wizard-step-dot {
  position: relative;
  z-index: 1;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  font-weight: 700;
  background: var(--bs-body-bg);
  border: 2px solid var(--bs-border-color);
  color: var(--bs-secondary-color);
  transition: all var(--transition);
}

.wizard-step-text b {
  display: block;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.wizard-step-text span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.wizard-step.done .wizard-step-dot {
  background: var(--bs-success);
  border-color: var(--bs-success);
  color: #fff;
}

.wizard-step.done::before,
.wizard-step.done::after {
  background: var(--bs-success);
}

.wizard-step.active .wizard-step-dot {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
  box-shadow: 0 0 0 5px var(--tint-primary);
  transform: scale(1.06);
}

.wizard-step.active::before {
  background: var(--bs-success);
}

.wizard-step:not(.done):not(.active) {
  cursor: not-allowed;
}

.wizard-step-wrap {
  position: relative;
}

.wizard-step-panel {
  display: none;
  animation: pw-slide 0.4s ease;
}

.wizard-step-panel.active {
  display: block;
}

@keyframes pw-slide {
  from {
    opacity: 0;
    transform: translateY(10px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

.wizard-navbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-top: 16px;
  padding-top: 16px;
  border-top: 1px solid var(--bs-border-color);
}

/* select field */
.form-field label {
  display: block;
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 6px;
}

.form-field label .req {
  color: var(--bs-danger);
}

.select-input,
.text-input {
  width: 100%;
  height: 42px;
  padding: 0 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color);
  font-size: 13px;
  transition: all var(--transition);
}

.select-input:focus,
.text-input:focus {
  outline: none;
  border-color: var(--bs-primary);
  box-shadow: 0 0 0 3px var(--tint-primary);
}

.year-cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}

.year-card {
  position: relative;
  padding: 16px;
  border: 1.5px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  cursor: pointer;
  transition: all var(--transition);
}

.year-card:hover {
  border-color: var(--bs-primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.year-card.sel {
  border-color: var(--bs-primary);
  background: var(--tint-primary);
}

.year-card.sel::after {
  content: "✓";
  position: absolute;
  top: 12px;
  right: 12px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--bs-primary);
  color: #fff;
  font-size: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.year-card b {
  display: block;
  font-size: 16px;
  color: var(--bs-emphasis-color);
}

.year-card span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.year-card.cur b::after {
  content: "Current";
  margin-left: 8px;
  font-size: 9px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--bs-success);
  background: var(--tint-success);
  padding: 2px 7px;
  border-radius: 999px;
  vertical-align: middle;
}

/* class-map (from -> to) */
.map-block {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 14px;
}

.map-card {
  padding: 16px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-secondary-bg);
}

.map-card .lbl {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--bs-secondary-color);
}

.map-card.to {
  background: var(--tint-primary);
  border-color: var(--tint-primary);
}

.map-example {
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: var(--bs-primary);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  box-shadow: 0 8px 18px -6px var(--tint-primary);
}

@media (max-width: 767px) {
  .map-block {
    grid-template-columns: 1fr;
  }

  .map-example {
    margin: 0 auto;
    transform: rotate(90deg);
  }
}

/* ---------- CLASS OVERVIEW ---------- */
.overview-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 12px;
}

.overview-block {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.overview-block:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.overview-block .ic {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  background: var(--accent-soft, var(--tint-primary));
  color: var(--accent, var(--bs-primary));
  flex-shrink: 0;
}

.overview-block .tx b {
  display: block;
  font-size: 14px;
  color: var(--bs-emphasis-color);
  line-height: 1.15;
}

.overview-block .tx span {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.readiness {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 16px;
  border-radius: var(--radius);
  background: linear-gradient(120deg, var(--tint-primary), transparent);
  border: 1px solid var(--bs-border-color);
}

.ring-graph {
  --v: 0;
  width: 74px;
  height: 74px;
  border-radius: 50%;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  background: conic-gradient(var(--bs-success) calc(var(--v) * 1%), var(--bs-secondary-bg) 0);
  transition: --v 1s ease;
}

.ring-hole {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: var(--bs-body-bg);
  display: grid;
  place-items: center;
  font-size: 17px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.readiness-text b {
  font-size: 14px;
  color: var(--bs-emphasis-color);
}

.readiness-text p {
  margin: 2px 0 0;
  font-size: 12px;
  color: var(--bs-secondary-color);
}

/* ---------- FILTERS ---------- */
.filter-bar-promotion {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 10px;
}

.filter-bar-promotion .form-field label {
  font-size: 11px;
  margin-bottom: 4px;
}

.filter-bar-promotion .select-input {
  height: 38px;
  font-size: 12.5px;
}

/* ---------- STUDENTS TABLE ---------- */
.table-wrap {
  overflow-x: auto;
}

.promotion-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  min-width: 1080px;
}

.promotion-table thead th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--bs-secondary-bg);
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--bs-secondary-color);
  text-align: left;
  padding: 11px 12px;
  white-space: nowrap;
  border-bottom: 1px solid var(--bs-border-color);
}

.promotion-table tbody td {
  padding: 12px;
  border-bottom: 1px solid var(--bs-border-color);
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  vertical-align: middle;
}

.promotion-table tbody tr {
  transition: background var(--transition);
}

.promotion-table tbody tr:hover {
  background: var(--bs-secondary-bg);
}

.promotion-table tbody tr.sel {
  background: var(--tint-primary);
}

.student-cell {
  display: flex;
  align-items: center;
  gap: 10px;
}

.student-cell img {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  object-fit: cover;
  flex-shrink: 0;
}

.student-cell b {
  display: block;
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.student-cell span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.metric-row {
  display: inline-flex;
  flex-direction: column;
  gap: 4px;
  min-width: 66px;
}

.metric-row .mv {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.meter-bar-promotion {
  height: 5px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
}

.meter-bar-promotion>span {
  display: block;
  height: 100%;
  border-radius: 999px;
}

.meter-bar-promotion.g>span {
  background: var(--bs-success);
}

.meter-bar-promotion.w>span {
  background: var(--bs-warning);
}

.meter-bar-promotion.d>span {
  background: var(--bs-danger);
}

.check-box {
  width: 18px;
  height: 18px;
  border-radius: 5px;
  border: 2px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
  position: relative;
  transition: all var(--transition);
  flex-shrink: 0;
}

.check-box:checked {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
}

.check-box:checked::after {
  content: "✓";
  position: absolute;
  inset: 0;
  color: #fff;
  font-size: 12px;
  display: grid;
  place-items: center;
}

.table-select {
  height: 34px;
  padding: 0 8px;
  border: 1px solid var(--bs-border-color);
  border-radius: 8px;
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color);
  font-size: 12px;
  max-width: 150px;
}

.remark-note {
  width: 130px;
  height: 34px;
  padding: 0 8px;
  border: 1px solid var(--bs-border-color);
  border-radius: 8px;
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color);
  font-size: 12px;
}

.icon-button-promotion {
  width: 30px;
  height: 30px;
  border-radius: 8px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  cursor: pointer;
  transition: all var(--transition);
}

.icon-button-promotion:hover {
  color: var(--bs-primary);
  border-color: var(--bs-primary);
  background: var(--tint-primary);
}

/* mobile card view */
.promotion-cards {
  display: none;
  flex-direction: column;
  gap: 12px;
}

.promotion-card {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  padding: 14px;
  background: var(--bs-body-bg);
}

.promotion-card-top {
  display: flex;
  align-items: center;
  gap: 10px;
}

.promotion-card-top .check-box {
  margin-left: auto;
}

.promotion-card-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 8px 12px;
  margin: 12px 0;
}

.promotion-card-grid .k {
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--bs-secondary-color);
}

.promotion-card-grid .v {
  font-size: 12.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

/* ---------- AI INSIGHTS ---------- */
.promotion-ai {
  background: linear-gradient(135deg, var(--tint-purple), var(--tint-primary)), var(--bs-body-bg);
}

.promotion-ai .heading-row i {
  color: var(--accent-purple);
}

.promotion-ai-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--accent-purple);
  background: var(--tint-purple);
  padding: 3px 9px;
  border-radius: 999px;
}

.promotion-ai-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}

.promotion-ai-card {
  display: flex;
  gap: 11px;
  padding: 13px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
}

.promotion-ai-card .ic {
  width: 36px;
  height: 36px;
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
  background: var(--accent-soft, var(--tint-primary));
  color: var(--accent, var(--bs-primary));
  flex-shrink: 0;
}

.promotion-ai-card .tx b {
  display: block;
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.promotion-ai-card .tx p {
  margin: 3px 0 0;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  line-height: 1.5;
}

.promotion-ai-actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.promotion-ai-action {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border: 1px dashed var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.promotion-ai-action i {
  font-size: 16px;
  color: var(--accent-purple);
}

.promotion-ai-action .promotion-button {
  margin-left: auto;
}

/* ---------- ANALYTICS ---------- */
.analysis-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}

.analysis-block {
  padding: 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
}

.analysis-block h6 {
  font-size: 12px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  margin: 0 0 12px;
  display: flex;
  align-items: center;
  gap: 6px;
}

.donut-graph {
  position: relative;
  width: 120px;
  height: 120px;
  margin: 0 auto;
}

.donut-graph svg {
  transform: rotate(-90deg);
  width: 100%;
  height: 100%;
}

.donut-graph circle {
  fill: none;
  stroke-width: 14;
}

.donut-graph .c {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  text-align: center;
}

.donut-graph .c b {
  font-size: 22px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.donut-graph .c span {
  font-size: 10px;
  color: var(--bs-secondary-color);
}

.legend-row {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 12px;
}

.legend-row div {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.legend-row .k {
  width: 9px;
  height: 9px;
  border-radius: 3px;
}

.legend-row b {
  margin-left: auto;
  color: var(--bs-emphasis-color);
}

.bar-list {
  display: flex;
  align-items: flex-end;
  gap: 10px;
  height: 130px;
  padding-top: 8px;
}

.bar-list .b {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  height: 100%;
}

.bar-list .col {
  width: 100%;
  max-width: 34px;
  border-radius: 7px 7px 0 0;
  background: linear-gradient(180deg, var(--bs-primary), var(--tint-primary));
  height: 0;
  transition: height 1s cubic-bezier(0.22, 1, 0.36, 1);
}

.bar-list .b.alt .col {
  background: linear-gradient(180deg, var(--bs-success), var(--tint-success));
}

.bar-list .cap {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.bar-list .val {
  font-size: 10.5px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.distribution {
  display: flex;
  flex-direction: column;
  gap: 11px;
}

.distribution-row .top {
  display: flex;
  justify-content: space-between;
  font-size: 12px;
  margin-bottom: 5px;
  color: var(--bs-emphasis-color);
}

.distribution-row .tr {
  height: 8px;
  border-radius: 999px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
}

.distribution-row .tr>span {
  display: block;
  height: 100%;
  width: 0;
  border-radius: 999px;
  transition: width 1s cubic-bezier(0.22, 1, 0.36, 1);
}

/* ---------- BULK STICKY BAR ---------- */
.bulk-bar-promotion {
  position: sticky;
  bottom: 16px;
  z-index: 20;
  display: none;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  margin-top: 16px;
  padding: 12px 16px;
  border-radius: var(--radius);
  background: var(--bs-emphasis-color);
  color: #fff;
  box-shadow: 0 18px 40px -14px rgba(15, 23, 42, 0.6);
}

[data-bs-theme=dark] .bulk-bar-promotion,
[data-theme=dark] .bulk-bar-promotion {
  background: #0b0e17;
  border: 1px solid var(--bs-border-color);
}

.bulk-bar-promotion.show {
  display: flex;
  animation: pw-slide 0.3s ease;
}

.bulk-bar-count-promotion {
  font-size: 13px;
  font-weight: 700;
}

.bulk-bar-count-promotion b {
  display: inline-grid;
  place-items: center;
  min-width: 24px;
  height: 24px;
  padding: 0 6px;
  border-radius: 999px;
  background: var(--bs-primary);
  color: #fff;
  margin-right: 7px;
}

.bulk-bar-promotion .bulk-bar-actions-promotion {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-left: auto;
}

.block-button {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 34px;
  padding: 0 12px;
  border-radius: 9px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  background: rgba(255, 255, 255, 0.08);
  color: #fff;
  font-size: 12.5px;
  font-weight: 500;
  cursor: pointer;
  transition: all var(--transition);
  white-space: nowrap;
}

.block-button:hover {
  background: rgba(255, 255, 255, 0.2);
}

.block-button i {
  font-size: 15px;
}

.block-button.go {
  background: var(--bs-success);
  border-color: var(--bs-success);
}

.block-button.stop {
  background: var(--bs-danger);
  border-color: var(--bs-danger);
}

.bulk-bar-promotion .x {
  margin-left: 2px;
  color: rgba(255, 255, 255, 0.7);
  cursor: pointer;
  font-size: 18px;
  display: inline-flex;
}

/* ---------- RECENT PROMOTIONS TIMELINE ---------- */
.promotion-timeline {
  position: relative;
  padding-left: 8px;
}

.promotion-timeline-list {
  display: flex;
  gap: 14px;
  padding: 12px 0;
  position: relative;
}

@media (max-width: 575.98px) {
  .promotion-timeline-list {
    flex-direction: column;
    align-items: start !important;
  }
}

.promotion-timeline-list:not(:last-child)::before {
  content: "";
  position: absolute;
  left: 18px;
  top: 44px;
  bottom: -12px;
  width: 2px;
  background: var(--bs-border-color);
}

.promotion-timeline-icon {
  width: 38px;
  height: 38px;
  border-radius: 11px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
  background: var(--accent-soft, var(--tint-success));
  color: var(--accent, var(--bs-success));
  flex-shrink: 0;
  z-index: 1;
}

.promotion-timeline-body {
  flex: 1;
  min-width: 0;
}

.promotion-timeline-top {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.promotion-timeline-top b {
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.promotion-timeline-route {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-primary);
  background: var(--tint-primary);
  padding: 2px 8px;
  border-radius: 999px;
}

.promotion-timeline-meta {
  margin-top: 4px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.promotion-timeline-meta img {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  object-fit: cover;
}

.promotion-timeline-meta i {
  font-size: 6px;
  opacity: 0.6;
}

.promotion-timeline-date {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  flex-shrink: 0;
  white-space: nowrap;
}

/* ---------- QUICK ACTIONS ---------- */
.quick-panel {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 12px;
}

.quick-actions-promotion {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 16px 10px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  text-align: center;
  text-decoration: none;
  cursor: pointer;
  transition: all var(--transition);
}

.quick-actions-promotion:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
  border-color: var(--accent, var(--bs-primary));
}

.quick-actions-promotion .ic {
  width: 44px;
  height: 44px;
  border-radius: 13px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  background: var(--accent-soft, var(--tint-primary));
  color: var(--accent, var(--bs-primary));
  transition: transform var(--transition);
}

.quick-actions-promotion:hover .ic {
  transform: scale(1.08);
}

.quick-actions-promotion span {
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

/* ---------- CONFIRM MODAL ---------- */
.confirm-hero {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 18px 20px;
  color: #fff;
  background: linear-gradient(135deg, var(--bs-primary), var(--accent-purple));
}

.confirm-hero .ic {
  width: 48px;
  height: 48px;
  border-radius: 14px;
  display: grid;
  place-items: center;
  font-size: 26px;
  background: rgba(255, 255, 255, 0.18);
}

.confirm-hero h4 {
  margin: 0;
  color: #fff;
  font-size: 18px;
}

.confirm-hero span {
  font-size: 12.5px;
  opacity: 0.88;
}

.confirm-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

.confirm-stat {
  text-align: center;
  padding: 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
}

.confirm-stat b {
  display: block;
  font-size: 22px;
  font-weight: 800;
  color: var(--accent, var(--bs-emphasis-color));
}

.confirm-stat span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.check-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.column-label {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  padding: 8px 10px;
  border-radius: 9px;
  background: var(--bs-secondary-bg);
}

.column-label i {
  font-size: 17px;
  color: var(--bs-success);
}

/* ---------- TOASTS ---------- */
#pwToasts {
  position: fixed;
  top: 76px;
  right: 20px;
  z-index: 3000;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

#pwToasts .toast {
  min-width: 260px;
}

/* ---------- SKELETON ---------- */
/* shared primitive, page tone and geometry */
.student-promotion .skeleton-loader {
  display: none;
}

.student-promotion.loading .skeleton-loader {
  display: block;
}

.student-promotion.loading .live-flag-promotion {
  display: none;
}

.student-promotion .skeleton {
  background: var(--bs-secondary-bg);
  border-radius: 8px;
}

.student-promotion .skeleton::after {
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.6), transparent);
  animation-duration: 1.5s;
}

.student-promotion .skeleton-kpis {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
  margin-bottom: 16px;
}

.student-promotion .skeleton-card {
  height: 118px;
  border-radius: var(--radius);
}

.student-promotion .skeleton-row {
  height: 56px;
  border-radius: 10px;
  margin-bottom: 10px;
}

.student-promotion .skeleton-block {
  height: 200px;
  border-radius: var(--radius);
  margin-bottom: 16px;
}

[data-bs-theme=dark] .student-promotion .skeleton::after,
[data-theme=dark] .student-promotion .skeleton::after {
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.06), transparent);
}

/* ---------- RESPONSIVE ---------- */
@media (max-width: 1199px) {
  .kpi-tiles {
    grid-template-columns: repeat(2, 1fr);
  }

  .skeleton-kpis {
    grid-template-columns: repeat(2, 1fr);
  }

  .overview-grid {
    grid-template-columns: repeat(3, 1fr);
  }

  .promotion-ai-grid,
  .analysis-grid {
    grid-template-columns: 1fr;
  }

  .quick-panel {
    grid-template-columns: repeat(3, 1fr);
  }

  .filter-bar-promotion {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (max-width: 767px) {
  .table-wrap {
    display: none;
  }

  .promotion-cards {
    display: flex;
  }

  .overview-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .year-cards {
    grid-template-columns: 1fr;
  }

  .filter-bar-promotion {
    grid-template-columns: repeat(2, 1fr);
  }

  .quick-panel {
    grid-template-columns: repeat(2, 1fr);
  }

  .wizard-step-text span {
    display: none;
  }

  .confirm-stats {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 575px) {

  .kpi-tiles,
  .skeleton-kpis {
    grid-template-columns: 1fr;
  }

  .filter-bar-promotion {
    grid-template-columns: 1fr;
  }
}

/* ---------- Recent Promotions (enhanced) ---------- */
.chip-set {
  display: inline-flex;
  gap: 3px;
  background: var(--bs-secondary-bg);
  padding: 3px;
  border-radius: 999px;
}

@media (max-width: 575.98px) {
  .chip-set {
    flex-wrap: wrap;
  }
}

.chip-item {
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  padding: 5px 13px;
  border-radius: 999px;
  cursor: pointer;
  transition: all var(--transition);
  white-space: nowrap;
}

.chip-item:hover {
  color: var(--bs-emphasis-color);
}

.chip-item.active {
  background: var(--bs-body-bg);
  color: var(--bs-primary);
  box-shadow: var(--shadow);
}

.report-summary {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
}

.report-sum {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 13px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-secondary-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.report-sum:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.report-sum .ic {
  width: 40px;
  height: 40px;
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  background: var(--accent-soft, var(--tint-primary));
  color: var(--accent, var(--bs-primary));
  flex-shrink: 0;
}

.report-sum .tx b {
  display: block;
  font-size: 20px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
}

.report-sum .tx span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.report-list .promotion-timeline-list {
  align-items: center;
  gap: 13px;
  padding: 12px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  margin-bottom: 10px;
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}

.report-list .promotion-timeline-list::before {
  display: none;
}

.report-list .promotion-timeline-list:last-child {
  margin-bottom: 0;
}

.report-list .promotion-timeline-list:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
  border-color: var(--accent, var(--bs-primary));
}

.report-list .promotion-timeline-meta {
  margin-top: 6px;
}

.avatar-row-stack {
  display: inline-flex;
  align-items: center;
}

.avatar-row-stack img {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid var(--bs-body-bg);
  margin-left: -7px;
}

.avatar-row-stack img:first-child {
  margin-left: 0;
}

.avatar-row-stack em {
  font-style: normal;
  font-size: 11px;
  font-weight: 700;
  color: var(--bs-secondary-color);
  margin-left: 7px;
}

.promotion-timeline-right {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 3px;
  flex-shrink: 0;
  text-align: right;
}

.promotion-timeline-num {
  font-size: 18px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  line-height: 1;
}

@media (max-width: 991px) {
  .report-summary {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 575px) {
  .report-summary {
    grid-template-columns: 1fr;
  }

  .report-list .avatar-row-stack {
    display: none;
  }

  .promotion-timeline-num {
    display: none;
  }
}

/* ============================================================
   FEE COLLECTION workspace — migrated from app-new.css
   ============================================================ */
/* ============================================================
   FEES MASTER — Finance Command Center (.fee-collection)
   2026 SaaS finance workspace. Scoped & self-contained.
   Does not touch sidebar,
header,
global card or layout grid.
   ============================================================ */
.fee-collection {
  --avatar-accent: var(--bs-primary);
  --avatar-accent-soft: var(--tint-primary);
  color: var(--bs-body-color);
  font-feature-settings: "tnum" 1;
}

/* ---------- primitives ---------- */
.sub-text {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.eyebrow-text {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--bs-tertiary-color);
}

.eyebrow-text i {
  font-size: 13px;
  color: var(--bs-primary);
}

.section-bar {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin: 26px 2px 14px;
}

.section-bar-title {
  font-size: 18px;
  font-weight: 750;
  letter-spacing: -0.02em;
  color: var(--bs-emphasis-color);
  margin: 3px 0 0;
}

.toolbar-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 8px 13px;
  font-size: 12.5px;
  font-weight: 600;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color);
  cursor: pointer;
  white-space: nowrap;
  transition: all var(--transition);
  text-decoration: none;
}

.toolbar-button:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.toolbar-button i {
  font-size: 15px;
}

.toolbar-button-sm {
  padding: 6px 11px;
  font-size: 12px;
}

.toolbar-button-xs {
  padding: 5px 9px;
  font-size: 11.5px;
}

.toolbar-button-primary {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.toolbar-button-primary:hover {
  color: #fff;
  filter: brightness(1.06);
}

.toolbar-button.danger {
  color: var(--bs-danger);
  border-color: var(--bs-danger);
}

.toolbar-button.danger:hover {
  background: var(--bs-danger);
  color: #fff;
}

.toolbar-icon-button {
  width: 30px;
  height: 30px;
  flex-shrink: 0;
  border-radius: 8px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  cursor: pointer;
  transition: all var(--transition);
}

.toolbar-icon-button:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.toolbar-icon-button.ok:hover {
  border-color: var(--bs-success);
  color: var(--bs-success);
}

.toolbar-icon-button.no:hover {
  border-color: var(--bs-danger);
  color: var(--bs-danger);
}

.status-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 700;
  line-height: 1.4;
  white-space: nowrap;
}

.status-chip i {
  font-size: 12px;
}

.status-chip.ok {
  color: var(--bs-success);
  background: var(--tint-success);
}

.status-chip.warn {
  color: var(--bs-warning);
  background: var(--tint-warning);
}

.status-chip.bad {
  color: var(--bs-danger);
  background: var(--tint-danger);
}

.status-chip.info {
  color: var(--bs-info);
  background: var(--tint-info);
}

.status-chip.ai {
  color: var(--accent-purple);
  background: var(--tint-purple);
}

.status-chip.soft {
  color: var(--bs-secondary-color);
  background: var(--bs-tertiary-bg);
}

.status-chip.draft {
  color: var(--bs-tertiary-color);
  background: var(--bs-tertiary-bg);
  border: 1px dashed var(--bs-border-color);
}

.status-chip.live {
  color: var(--bs-danger);
  background: var(--tint-danger);
}

.meta-tag {
  display: inline-flex;
  align-items: center;
  padding: 3px 9px;
  border-radius: 7px;
  font-size: 11px;
  font-weight: 600;
  color: var(--accent);
  background: var(--accent-soft);
}

.choice-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
}

.choice-chip i {
  font-size: 13px;
  color: var(--bs-primary);
}

.choice-chip.warn {
  color: var(--bs-warning);
  border-color: var(--tint-warning);
}

.choice-chip.warn i {
  color: var(--bs-warning);
}

.meter-bar {
  height: 8px;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
  overflow: hidden;
}

.meter-bar>span {
  display: block;
  height: 100%;
  width: 0;
  border-radius: 999px;
  background: var(--accent);
  transition: width 1.1s cubic-bezier(0.22, 1, 0.36, 1);
}

.note-line {
  display: flex;
  gap: 9px;
  padding: 10px 12px;
  border-radius: var(--radius-xs);
  font-size: 11.5px;
  line-height: 1.55;
  background: var(--accent-soft);
}

.note-line i {
  font-size: 16px;
  color: var(--accent);
  flex-shrink: 0;
  margin-top: 1px;
}

.note-line b {
  color: var(--bs-emphasis-color);
}

.live-flag-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--bs-success);
  box-shadow: 0 0 0 0 var(--tint-success);
  animation: fcc-pulse 1.6s infinite;
  flex-shrink: 0;
}

@keyframes fcc-pulse {
  0% {
    box-shadow: 0 0 0 0 var(--tint-success);
  }

  100% {
    box-shadow: 0 0 0 7px var(--tint-success);
  }
}

/* ---------- COMMAND HERO ---------- */
/* .command-bar-side is `display:contents` so its two children (upload-block,
   quick-actions) place directly into this grid — letting the quick-actions
   row genuinely receive the leftover 1fr height and grow into it. A nested
   flex/grid column relying on percentage-height-of-stretched-item doesn't
   reliably pick up that height in practice, so the side column is flattened
   into the outer grid instead of trying to fill itself from the inside. */
.command-bar {
  display: grid;
  grid-template-columns: 1.45fr 1fr;
  grid-template-rows: auto 1fr;
  gap: 16px;
}

.command-bar-main {
  grid-column: 1;
  grid-row: 1/3;
  position: relative;
  overflow: hidden;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  padding: 20px;
  background: radial-gradient(120% 150% at 100% 0, var(--tint-primary), transparent 48%), linear-gradient(180deg, var(--bs-body-bg), var(--bs-secondary-bg));
}

.command-bar-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
}

.command-bar-title {
  font-size: 24px;
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--bs-emphasis-color);
  margin: 4px 0 8px;
}

.command-bar-meta {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}

.command-bar-today {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 14px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.command-bar-today b {
  display: block;
  font-size: 20px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--bs-emphasis-color);
  line-height: 1.05;
}

.command-bar-today span {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.summary-rail {
  margin-top: 18px;
  padding-top: 16px;
  border-top: 1px solid var(--bs-border-color);
}

.summary-rail-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 8px;
}

.summary-rail-top span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.summary-rail-top b {
  font-size: 17px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--bs-emphasis-color);
}

.summary-rail-bar {
  position: relative;
  display: flex;
  gap: 2px;
  height: 12px;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
  overflow: visible;
}

.summary-rail-bar .seg {
  width: 0;
  transition: width 1.1s cubic-bezier(0.22, 1, 0.36, 1);
}

.summary-rail-bar .seg:first-of-type {
  border-radius: 999px 0 0 999px;
}

.summary-rail-bar .seg.a {
  background: var(--bs-success);
}

.summary-rail-bar .seg.b {
  background: var(--bs-warning);
}

.summary-rail-bar .seg.c {
  background: var(--bs-danger);
}

.summary-rail-bar .mk {
  position: absolute;
  top: -4px;
  left: 0;
  width: 2px;
  height: 20px;
  border-radius: 2px;
  background: var(--bs-emphasis-color);
  opacity: 0.5;
  transition: left 0.9s cubic-bezier(0.22, 1, 0.36, 1);
}

.summary-rail-keys {
  display: flex;
  flex-wrap: wrap;
  gap: 5px 14px;
  margin-top: 10px;
}

.summary-rail-keys>span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.summary-rail-keys>span>i {
  width: 8px;
  height: 8px;
  border-radius: 3px;
}

.summary-rail-keys .a>i {
  background: var(--bs-success);
}

.summary-rail-keys .b>i {
  background: var(--bs-warning);
}

.summary-rail-keys .c>i {
  background: var(--bs-danger);
}

.summary-rail-keys .d>i {
  background: var(--bs-tertiary-bg);
  border: 1px solid var(--bs-border-color);
}

.ai-panel {
  display: flex;
  gap: 12px;
  margin-top: 16px;
  padding: 14px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--bs-border-color);
  background: linear-gradient(120deg, var(--tint-purple), transparent 62%), var(--bs-body-bg);
}

.ai-panel-orb {
  width: 34px;
  height: 34px;
  flex-shrink: 0;
  border-radius: 11px;
  display: grid;
  place-items: center;
  font-size: 18px;
  color: #fff;
  background: linear-gradient(135deg, var(--accent-purple), var(--bs-primary));
}

.ai-panel-body {
  min-width: 0;
  flex: 1;
}

.ai-panel-top {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 5px;
}

.ai-panel-top b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.ai-panel p {
  margin: 0;
  font-size: 12.5px;
  line-height: 1.65;
}

.ai-panel p mark {
  background: none;
  padding: 0;
  color: var(--bs-emphasis-color);
  font-weight: 700;
}

.ai-panel-actions {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 10px;
}

.command-bar-side {
  display: contents;
}

.upload-block {
  grid-column: 2;
  grid-row: 1;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 14px;
}

.upload-block-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 10px;
}

.upload-block-head b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.upload-block-head span {
  font-size: 10.5px;
  color: var(--bs-tertiary-color);
}

.upload-block-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 0;
  border-bottom: 1px solid var(--bs-border-color);
}

.upload-block-row:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.upload-block-row .d {
  width: 38px;
  flex-shrink: 0;
  text-align: center;
  border-radius: 9px;
  padding: 4px 0;
  color: var(--accent);
  background: var(--accent-soft);
}

.upload-block-row .d b {
  display: block;
  font-size: 14px;
  font-weight: 800;
  line-height: 1;
}

.upload-block-row .d span {
  font-size: 9px;
  text-transform: uppercase;
}

.upload-block-row .t {
  flex: 1;
  min-width: 0;
}

.upload-block-row .t b {
  display: block;
  font-size: 12px;
  color: var(--bs-emphasis-color);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.upload-block-row .t span {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.upload-block-row .v {
  font-size: 13px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  flex-shrink: 0;
}

.quick-actions {
  grid-column: 2;
  grid-row: 2;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 14px;
}

.quick-action-head {
  margin-bottom: 10px;
}

.quick-action-head b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.quick-action-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  margin: auto 0;
}

.quick-action-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  padding: 12px 6px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  cursor: pointer;
  transition: all var(--transition);
  text-align: center;
}

.quick-action-item:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
  border-color: var(--accent);
}

.quick-action-item .ic {
  width: 32px;
  height: 32px;
  border-radius: 10px;
  display: grid;
  place-items: center;
  font-size: 17px;
  color: var(--accent);
  background: var(--accent-soft);
}

.quick-action-item b {
  font-size: 10.5px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
  line-height: 1.25;
}

/* ---------- SMART FILTERS ---------- */
.filter-bar {
  margin-top: 16px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 12px 14px;
}

.view-toggle-group {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  padding-bottom: 11px;
  border-bottom: 1px solid var(--bs-border-color);
}

.view-toggle {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 11px;
  border-radius: 999px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
}

.view-toggle i {
  font-size: 14px;
}

.view-toggle span {
  padding: 1px 6px;
  border-radius: 999px;
  font-size: 10px;
  font-weight: 700;
  background: var(--bs-tertiary-bg);
  color: var(--bs-tertiary-color);
}

.view-toggle:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.view-toggle.on {
  background: var(--bs-primary);
  border-color: transparent;
  color: #fff;
}

.view-toggle.on span {
  background: rgba(255, 255, 255, 0.18);
  color: #fff;
}

.view-toggle.add {
  border-style: dashed;
}

.filter-row {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  padding: 12px 0;
}

.search-field {
  position: relative;
  flex: 1;
  min-width: 240px;
  display: flex;
  align-items: center;
}

.search-field>i {
  position: absolute;
  left: 11px;
  font-size: 16px;
  color: var(--bs-tertiary-color);
}

.search-field input {
  width: 100%;
  padding: 9px 40px 9px 34px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-tertiary-bg);
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.search-field input:focus {
  outline: none;
  border-color: var(--bs-primary);
  background: var(--bs-body-bg);
}

.search-field kbd {
  position: absolute;
  right: 10px;
  padding: 1px 6px;
  border-radius: 5px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  font-size: 10px;
  color: var(--bs-tertiary-color);
}

.select-group {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

.select-field {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.select-field>span {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-tertiary-color);
}

.select-field select {
  border: 0;
  background: none;
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  cursor: pointer;
  padding-right: 2px;
}

.select-field select:focus {
  outline: none;
}

.select-field.sm {
  padding: 4px 8px;
}

.chip-row {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  padding-top: 11px;
  border-top: 1px solid var(--bs-border-color);
}

.filter-tag {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 9px;
  border-radius: 7px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-tertiary-bg);
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  cursor: pointer;
  transition: all var(--transition);
}

.filter-tag i {
  font-size: 13px;
  color: var(--bs-tertiary-color);
}

.filter-tag:hover {
  border-color: var(--bs-danger);
  color: var(--bs-danger);
}

.filter-tag:hover i {
  color: var(--bs-danger);
}

.clear-button {
  border: 0;
  background: none;
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-primary);
  cursor: pointer;
  padding: 4px 6px;
}

/* ---------- FEE STRUCTURE CARDS ---------- */
.card-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
}

.fee-record {
  position: relative;
  overflow: hidden;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 16px;
  transition: transform var(--transition), box-shadow var(--transition);
}

.fee-record::before {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 3px;
  background: var(--accent);
}

.fee-record:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
}

.fee-record-top {
  display: flex;
  align-items: flex-start;
  gap: 11px;
}

.fee-record-id {
  flex: 1;
  min-width: 0;
}

.fee-record-id b {
  display: block;
  font-size: 14px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.25;
}

.fee-record-id span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.fee-record-amount {
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
  margin: 14px 0 12px;
}

.fee-record-amount b {
  font-size: 24px;
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--bs-emphasis-color);
}

.fee-record-amount>span:not(.status-chip) {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.fee-record-meta {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 9px 14px;
  margin: 0 0 13px;
  padding: 12px 0;
  border-top: 1px solid var(--bs-border-color);
  border-bottom: 1px solid var(--bs-border-color);
}

.fee-record-meta dt {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-tertiary-color);
  font-weight: 650;
}

.fee-record-meta dd {
  margin: 2px 0 0;
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

.fee-record-progress-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 6px;
}

.fee-record-progress-top span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.fee-record-progress-top b {
  font-size: 13px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.fee-record-progress-foot {
  display: flex;
  justify-content: space-between;
  margin-top: 6px;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.fee-record-actions {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 14px;
  padding-top: 13px;
  border-top: 1px solid var(--bs-border-color);
  opacity: 0.55;
  transition: opacity var(--transition);
}

.fee-record:hover .fee-record-actions,
.fee-record:focus-within .fee-record-actions {
  opacity: 1;
}

/* ---------- ANALYTICS ---------- */
.segmented-control {
  display: inline-flex;
  padding: 3px;
  border-radius: 999px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-tertiary-bg);
}

.segmented-control button {
  border: 0;
  background: none;
  padding: 4px 13px;
  border-radius: 999px;
  font-size: 11.5px;
  font-weight: 700;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
}

.segmented-control button.on {
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color);
  box-shadow: var(--shadow);
}

.analytics-grid {
  display: grid;
  grid-template-columns: 1.6fr 1fr;
  grid-template-areas: "chart figures" "inst figures";
  gap: 16px;
}

.chart-block {
  grid-area: chart;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 16px;
}

.chart-block-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  margin-bottom: 6px;
}

.chart-block-head b {
  display: block;
  font-size: 22px;
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--bs-emphasis-color);
}

.chart-block-head b small {
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-secondary-color);
}

.chart-legend-row {
  display: flex;
  gap: 12px;
}

.chart-legend-row span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.chart-legend-row i {
  width: 14px;
  height: 3px;
  border-radius: 2px;
}

.chart-legend-row .a i {
  background: var(--bs-primary);
}

.chart-legend-row .b i {
  background: var(--bs-border-color);
}

.chart-area {
  display: block;
  width: 100%;
  height: 190px;
}

.chart-area .grid path {
  stroke: var(--bs-border-color);
  stroke-width: 1;
  fill: none;
}

.chart-area .exp {
  fill: none;
  stroke: var(--bs-border-color);
  stroke-width: 2;
  stroke-dasharray: 5 5;
}

.chart-area .fill {
  fill: url(#fccFill);
}

.chart-area .ln {
  fill: none;
  stroke: var(--bs-primary);
  stroke-width: 2.6;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.chart-area .dots circle {
  fill: var(--bs-body-bg);
  stroke: var(--bs-primary);
  stroke-width: 2.4;
}

.chart-area .dots circle.last {
  fill: var(--bs-primary);
}

.chart-axis {
  display: flex;
  justify-content: space-between;
  margin-top: 6px;
}

.chart-axis span {
  font-size: 10px;
  color: var(--bs-tertiary-color);
}

.figure-grid {
  grid-area: figures;
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: repeat(3, 1fr);
  gap: 10px;
  height: 100%;
}

.figure-tile {
  display: flex;
  flex-direction: column;
  height: 100%;
  padding: 12px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--bs-border-color);
  border-left: 3px solid var(--accent);
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.figure-tile:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
}

.figure-tile .k {
  display: block;
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-tertiary-color);
  font-weight: 650;
}

.figure-tile b {
  display: block;
  font-size: 18px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--bs-emphasis-color);
  margin-top: 2px;
}

.figure-tile .d {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 10px;
  font-weight: 650;
  margin-top: 2px;
}

.figure-tile .d i {
  font-size: 12px;
}

.figure-tile .d.up {
  color: var(--bs-success);
}

.figure-tile .d.down {
  color: var(--bs-danger);
}

.figure-tile .d.flat {
  color: var(--bs-secondary-color);
}

.chart-spark {
  display: block;
  width: 100%;
  height: 26px;
  margin-top: auto;
  padding-top: 6px;
}

.chart-spark .ln {
  fill: none;
  stroke: var(--accent);
  stroke-width: 2;
  stroke-linecap: round;
}

.chart-spark .ln.dash {
  stroke-dasharray: 4 4;
}

.instalment-row {
  grid-area: inst;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 16px;
}

.instalment-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  margin-bottom: 12px;
}

.instalment-head b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.step-list {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.step-list li {
  position: relative;
  padding: 12px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.step-list li .n {
  display: grid;
  place-items: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  font-size: 11px;
  font-weight: 800;
  color: var(--bs-tertiary-color);
  background: var(--bs-tertiary-bg);
  margin-bottom: 8px;
}

.step-list li b {
  display: block;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.step-list li>span:not(.n):not(.status-chip) {
  display: block;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
  margin: 2px 0 7px;
}

.step-list li.done .n {
  background: var(--bs-success);
  color: #fff;
}

.step-list li.now {
  border-color: var(--bs-primary);
  background: var(--tint-primary);
}

.step-list li.now .n {
  background: var(--bs-primary);
  color: #fff;
}

/* ---------- AI INSIGHTS ---------- */
.insight-list {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
}

.insight-row {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 15px;
  transition: transform var(--transition), box-shadow var(--transition);
}

.insight-row:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
}

.insight-row header {
  display: flex;
  align-items: center;
  gap: 9px;
  margin-bottom: 10px;
}

.insight-row header .ic {
  width: 30px;
  height: 30px;
  flex-shrink: 0;
  border-radius: 9px;
  display: grid;
  place-items: center;
  font-size: 16px;
  color: var(--accent);
  background: var(--accent-soft);
}

.insight-row header b {
  flex: 1;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.insight-row p {
  margin: 0 0 11px;
  font-size: 12px;
  line-height: 1.6;
  color: var(--bs-body-color);
}

.insight-row p b {
  color: var(--bs-emphasis-color);
}

.confidence-meter {
  display: flex;
  align-items: center;
  gap: 9px;
  margin-bottom: 11px;
}

.confidence-bar {
  flex: 1;
  height: 6px;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
  overflow: hidden;
}

.confidence-bar>span {
  display: block;
  height: 100%;
  width: 0;
  border-radius: 999px;
  background: var(--accent);
  transition: width 1.1s cubic-bezier(0.22, 1, 0.36, 1);
}

.confidence-meter>b {
  font-size: 11.5px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.insight-row footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding-top: 11px;
  border-top: 1px solid var(--bs-border-color);
}

/* ---------- DATA GRID ---------- */
.record-grid-tools {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  align-items: center;
}

.inline-search {
  position: relative;
  display: flex;
  align-items: center;
}

.inline-search i {
  position: absolute;
  left: 10px;
  font-size: 15px;
  color: var(--bs-tertiary-color);
}

.inline-search input {
  padding: 6px 11px 6px 31px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  font-size: 12px;
  color: var(--bs-emphasis-color);
  min-width: 190px;
}

.inline-search input:focus {
  outline: none;
  border-color: var(--bs-primary);
}

.record-grid-wrap {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  overflow: hidden;
}

.record-grid-scroll {
  overflow-x: auto;
  max-height: 620px;
  overflow-y: auto;
}

.record-grid {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  min-width: 1180px;
}

.record-grid thead th {
  position: sticky;
  top: 0;
  z-index: 3;
  background: var(--bs-tertiary-bg);
  border-bottom: 1px solid var(--bs-border-color);
  padding: 11px 12px;
  text-align: left;
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-tertiary-color);
  white-space: nowrap;
}

.record-grid thead th.num,
.record-grid td.num {
  text-align: right;
}

.record-grid thead th.pin {
  position: sticky;
  z-index: 4;
}

.record-grid thead th.col-check,
.record-grid td.col-check {
  left: 0;
  width: 44px;
}

.record-grid thead th.col-name,
.record-grid td.col-name {
  left: 44px;
  min-width: 250px;
}

.record-grid thead th.pin-end,
.record-grid td.pin-end {
  right: 0;
  z-index: 4;
}

.record-grid td.pin,
.record-grid td.pin-end {
  position: sticky;
  background: var(--bs-body-bg);
  z-index: 2;
}

.record-grid td.col-name {
  box-shadow: 1px 0 0 var(--bs-border-color);
}

.record-grid td.pin-end {
  box-shadow: -1px 0 0 var(--bs-border-color);
}

.column-sort {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  border: 0;
  background: none;
  padding: 0;
  font: inherit;
  color: inherit;
  text-transform: inherit;
  letter-spacing: inherit;
  cursor: pointer;
}

.column-sort i {
  font-size: 13px;
  opacity: 0.55;
}

.column-sort:hover {
  color: var(--bs-primary);
}

.column-sort.asc i,
.column-sort.desc i {
  opacity: 1;
  color: var(--bs-primary);
}

.column-resize {
  position: absolute;
  top: 0;
  right: 0;
  width: 5px;
  height: 100%;
  cursor: col-resize;
}

.column-resize:hover {
  background: var(--bs-primary);
  opacity: 0.35;
}

.record-grid thead th {
  position: sticky;
}

.record-grid tbody td {
  padding: 12px;
  border-bottom: 1px solid var(--bs-border-color);
  font-size: 12.5px;
  vertical-align: middle;
}

.record-row {
  transition: background var(--transition);
}

.record-row:hover td {
  background: var(--bs-tertiary-bg);
}

.record-row.sel td {
  background: var(--tint-primary);
}

.record-grid.dense tbody td {
  padding: 7px 12px;
}

.row-check {
  display: inline-flex;
  cursor: pointer;
}

.row-check input {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.row-check span {
  width: 17px;
  height: 17px;
  border-radius: 5px;
  border: 1.5px solid var(--bs-border-color);
  display: grid;
  place-items: center;
  transition: all var(--transition);
}

.row-check input:checked+span {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
}

.row-check input:checked+span::after {
  content: "";
  width: 4px;
  height: 8px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg) translateY(-1px);
}

.row-check input:focus-visible+span {
  outline: 2px solid var(--bs-primary);
  outline-offset: 2px;
}

.row-expander {
  width: 22px;
  height: 22px;
  border-radius: 6px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  color: var(--bs-secondary-color);
  display: inline-grid;
  place-items: center;
  font-size: 14px;
  cursor: pointer;
  transition: all var(--transition);
  vertical-align: middle;
  margin-right: 8px;
}

.row-expander:hover {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.row-expander i {
  transition: transform var(--transition);
}

.row-expander[aria-expanded=true] {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
  color: #fff;
}

.row-expander[aria-expanded=true] i {
  transform: rotate(90deg);
}

.legend-dot {
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--accent);
  margin-right: 8px;
  vertical-align: middle;
}

.record-cell-main {
  display: inline-flex;
  flex-direction: column;
  vertical-align: middle;
}

.record-cell-main b {
  font-size: 12.5px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
}

.record-cell-main span {
  font-size: 10.5px;
  color: var(--bs-tertiary-color);
}

.class-list {
  display: inline-flex;
  flex-direction: column;
}

.class-list em {
  font-style: normal;
  font-size: 10px;
  color: var(--bs-tertiary-color);
}

.due-value {
  display: inline-flex;
  flex-direction: column;
}

.due-value em {
  font-style: normal;
  font-size: 10px;
  color: var(--bs-tertiary-color);
}

.record-grid td.num b.pos {
  color: var(--bs-success);
}

.record-grid td.num b.neg {
  color: var(--bs-danger);
}

.record-row-actions {
  display: flex;
  gap: 5px;
  opacity: 0.5;
  transition: opacity var(--transition);
}

.record-row:hover .record-row-actions,
.record-row:focus-within .record-row-actions {
  opacity: 1;
}

/* row expansion */
.detail-drawer-row>td {
  padding: 0 !important;
  background: var(--bs-secondary-bg);
  border-bottom: 1px solid var(--bs-border-color);
}

.detail-drawer {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
  padding: 18px;
}

.detail-drawer-heading {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-tertiary-color);
  margin: 0 0 9px;
}

.detail-drawer-heading.mt {
  margin-top: 16px;
}

.detail-drawer-heading i {
  font-size: 14px;
  color: var(--bs-primary);
}

.detail-drawer-instalments {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 7px;
}

.detail-drawer-instalments li {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.detail-drawer-instalments li>span:first-child {
  width: 24px;
  height: 24px;
  flex-shrink: 0;
  border-radius: 7px;
  display: grid;
  place-items: center;
  font-size: 10.5px;
  font-weight: 800;
  color: var(--bs-tertiary-color);
  background: var(--bs-tertiary-bg);
}

.detail-drawer-instalments li.done>span:first-child {
  background: var(--bs-success);
  color: #fff;
}

.detail-drawer-instalments li.now>span:first-child {
  background: var(--bs-primary);
  color: #fff;
}

.detail-drawer-instalments li div {
  flex: 1;
  min-width: 0;
}

.detail-drawer-instalments li b {
  display: block;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.detail-drawer-instalments li em {
  font-style: normal;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.detail-drawer-rules {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.detail-drawer-rules li {
  display: flex;
  gap: 6px;
  font-size: 11.5px;
  line-height: 1.5;
  color: var(--bs-body-color);
}

.detail-drawer-rules li i {
  font-size: 14px;
  color: var(--bs-tertiary-color);
  flex-shrink: 0;
}

.detail-drawer-rules b {
  color: var(--bs-emphasis-color);
}

.detail-drawer-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
}

.detail-drawer-timeline {
  display: flex;
  flex-direction: column;
  gap: 7px;
}

.detail-drawer-timeline .it {
  padding: 8px 10px;
  border-radius: var(--radius-xs);
  border-left: 3px solid var(--accent);
  background: var(--accent-soft);
}

.detail-drawer-timeline .it b {
  display: block;
  font-size: 12px;
  color: var(--bs-emphasis-color);
}

.detail-drawer-timeline .it em {
  font-style: normal;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.detail-drawer-payments {
  display: flex;
  flex-direction: column;
  gap: 7px;
}

.detail-drawer-payments>div {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 7px 9px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.detail-drawer-payments img {
  width: 28px;
  height: 28px;
  border-radius: 8px;
  object-fit: cover;
  flex-shrink: 0;
}

.detail-drawer-payments span {
  flex: 1;
  min-width: 0;
}

.detail-drawer-payments b {
  display: block;
  font-size: 12px;
  color: var(--bs-emphasis-color);
}

.detail-drawer-payments em {
  font-style: normal;
  font-size: 10px;
  color: var(--bs-secondary-color);
}

.detail-drawer-payments .v {
  font-size: 12.5px;
  font-weight: 800;
  color: var(--bs-success);
  flex-shrink: 0;
}

.detail-drawer-foot {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 12px;
}

.pager-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  padding: 12px 14px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.pager-pages {
  display: flex;
  align-items: center;
  gap: 4px;
}

.pager-page {
  min-width: 30px;
  height: 30px;
  padding: 0 8px;
  border-radius: 8px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  font-size: 12px;
  font-weight: 650;
  color: var(--bs-secondary-color);
  cursor: pointer;
  transition: all var(--transition);
}

.pager-page:hover:not(:disabled) {
  border-color: var(--bs-primary);
  color: var(--bs-primary);
}

.pager-page.on {
  background: var(--bs-primary);
  border-color: transparent;
  color: #fff;
}

.pager-page:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

.pager-gap {
  color: var(--bs-tertiary-color);
  padding: 0 4px;
}

/* ---------- FEEDS ---------- */
/* .side-panel is `display:contents` so its head + body (whichever of
   .timeline-rows / .action-group / .notification-row it holds) place
   directly into this grid as rows 1/2 of their column. A card that's just
   `display:flex;flex-direction:column` inside a stretched grid item can't
   reliably grow a `flex:1` child to fill the tall column (same issue fixed
   on .command-bar-side above), so the "one card" look is built from two
   grid-placed halves with matching radii/borders instead. */
.feed-list {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: auto 1fr;
  gap: 16px;
}

.side-panel {
  display: contents;
}

.side-panel-head {
  grid-row: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 15px 15px 13px;
  border: 1px solid var(--bs-border-color);
  border-bottom: 0;
  border-radius: var(--radius) var(--radius) 0 0;
  background: var(--bs-body-bg);
}

.side-panel-head b {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.side-panel-head b i {
  font-size: 16px;
  color: var(--bs-primary);
}

.timeline-rows,
.action-group,
.notification-row {
  grid-row: 2;
  padding: 0 15px 15px;
  border: 1px solid var(--bs-border-color);
  border-top: 0;
  border-radius: 0 0 var(--radius) var(--radius);
  background: var(--bs-body-bg);
}

.timeline-rows {
  display: flex;
  flex-direction: column;
}

.timeline-row-item {
  display: grid;
  grid-template-columns: 42px 14px 1fr;
  align-items: start;
  gap: 6px;
  padding-bottom: 15px;
  position: relative;
}

.timeline-row-item:last-child {
  padding-bottom: 0;
}

.timeline-row-item .tm {
  font-size: 10.5px;
  font-weight: 650;
  color: var(--bs-secondary-color);
  padding-top: 1px;
  text-align: right;
}

.timeline-row-item .pt {
  position: relative;
  width: 14px;
}

.timeline-row-item .pt::before {
  content: "";
  position: absolute;
  left: 3px;
  top: 4px;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--bs-body-bg);
  border: 2px solid var(--accent);
  z-index: 1;
}

.timeline-row-item:not(:last-child) .pt::after {
  content: "";
  position: absolute;
  left: 6.5px;
  top: 15px;
  bottom: -15px;
  width: 2px;
  background: var(--bs-border-color);
}

.timeline-row-item .bd b {
  display: block;
  font-size: 12px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
  line-height: 1.35;
}

.timeline-row-item .bd p {
  margin: 2px 0 0;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.action-group {
  display: flex;
  flex-direction: column;
  gap: 9px;
}

.action-link {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 10px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  transition: all var(--transition);
}

.action-link:hover {
  border-color: var(--bs-primary);
}

.action-link img {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  object-fit: cover;
  flex-shrink: 0;
}

.action-link .bd {
  flex: 1;
  min-width: 0;
  font-size: 11.5px;
  line-height: 1.45;
  color: var(--bs-body-color);
}

.action-link .bd b {
  color: var(--bs-emphasis-color);
  font-weight: 650;
}

.action-link .bd em {
  display: block;
  font-style: normal;
  font-size: 10px;
  color: var(--bs-tertiary-color);
  margin-top: 2px;
}

.notification-row {
  display: flex;
  flex-direction: column;
  gap: 13px;
}

.notification-group .lbl {
  display: block;
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--bs-tertiary-color);
  margin-bottom: 7px;
}

.note-tag {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 10px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  border-left: 3px solid var(--accent);
  background: var(--bs-body-bg);
  margin-bottom: 7px;
  transition: transform var(--transition);
}

.note-tag:last-child {
  margin-bottom: 0;
}

.note-tag:hover {
  transform: translateX(2px);
}

.note-tag .ic {
  width: 28px;
  height: 28px;
  flex-shrink: 0;
  border-radius: 8px;
  display: grid;
  place-items: center;
  font-size: 15px;
  color: var(--accent);
  background: var(--accent-soft);
}

.note-tag .bd {
  flex: 1;
  min-width: 0;
}

.note-tag .bd b {
  display: block;
  font-size: 11.5px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
}

.note-tag .bd p {
  margin: 1px 0 0;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

/* ---------- STICKY BULK TOOLBAR ---------- */
.bulk-bar {
  position: sticky;
  bottom: 16px;
  z-index: 20;
  margin-top: 16px;
  display: flex;
  justify-content: center;
  pointer-events: none;
}

.bulk-bar-inner {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
  padding: 10px 14px;
  border-radius: 999px;
  background: var(--bs-emphasis-color);
  color: #fff;
  box-shadow: 0 18px 40px -12px rgba(16, 24, 40, 0.55);
  pointer-events: auto;
  animation: fcc-rise 0.28s cubic-bezier(0.22, 1, 0.36, 1);
}

@keyframes fcc-rise {
  from {
    opacity: 0;
    transform: translateY(14px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

.bulk-bar-count {
  font-size: 12px;
  font-weight: 600;
  opacity: 0.85;
  white-space: nowrap;
}

.bulk-bar-count b {
  font-size: 14px;
  font-weight: 800;
  opacity: 1;
}

.bulk-bar-actions {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}

.bulk-bar .toolbar-button {
  background: rgba(255, 255, 255, 0.1);
  border-color: rgba(255, 255, 255, 0.16);
  color: #fff;
}

.bulk-bar .toolbar-button:hover {
  background: rgba(255, 255, 255, 0.2);
  color: #fff;
  border-color: rgba(255, 255, 255, 0.3);
}

.bulk-bar .toolbar-button.danger {
  color: #ffb4c4;
  border-color: rgba(255, 180, 196, 0.35);
}

.bulk-bar .toolbar-button.danger:hover {
  background: var(--bs-danger);
  color: #fff;
}

.bulk-bar-close {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: 0;
  background: rgba(255, 255, 255, 0.12);
  color: #fff;
  cursor: pointer;
  display: grid;
  place-items: center;
  font-size: 15px;
}

.bulk-bar-close:hover {
  background: rgba(255, 255, 255, 0.24);
}

/* ---------- MODAL BITS ---------- */
.mini-stat {
  padding: 10px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  border-left: 3px solid var(--accent);
  background: var(--bs-body-bg);
  text-align: center;
}

.mini-stat b {
  display: block;
  font-size: 17px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.mini-stat span {
  font-size: 10px;
  color: var(--bs-secondary-color);
}

.picker-field {
  display: flex;
  flex-direction: column;
  gap: 7px;
}

.picker-field label {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 11px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  cursor: pointer;
}

.picker-field label:hover {
  border-color: var(--bs-primary);
}

.picker-field span {
  flex: 1;
  min-width: 0;
}

.picker-field b {
  display: block;
  font-size: 12px;
  color: var(--bs-emphasis-color);
}

.picker-field em {
  font-style: normal;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.picker-field .v {
  font-size: 13px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
}

.approval-list {
  display: flex;
  flex-direction: column;
  gap: 9px;
}

.approval-row {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 10px 11px;
  border-radius: var(--radius-xs);
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
}

.approval-row img {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  object-fit: cover;
  flex-shrink: 0;
}

.approval-row .bd {
  flex: 1;
  min-width: 0;
}

.approval-row .bd b {
  display: block;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.approval-row .bd em {
  font-style: normal;
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.approval-row .ac {
  display: flex;
  gap: 6px;
  flex-shrink: 0;
}

.inline-dropdown {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  padding: 26px 16px;
  border-radius: var(--radius-sm);
  border: 2px dashed var(--bs-border-color);
  background: var(--bs-tertiary-bg);
  text-align: center;
  transition: all var(--transition);
}

.inline-dropdown:hover {
  border-color: var(--bs-primary);
  background: var(--tint-primary);
}

.inline-dropdown i {
  font-size: 30px;
  color: var(--bs-primary);
}

.inline-dropdown b {
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

.inline-dropdown span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.inline-dropdown input {
  position: absolute;
  inset: 0;
  opacity: 0;
  cursor: pointer;
}

.toast-stack {
  position: fixed;
  right: 20px;
  bottom: 20px;
  z-index: 1090;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

/* ---------- SKELETON ---------- */
.fee-collection.loading .live-flag {
  display: none;
}

.fee-collection:not(.loading) .skeleton-loader {
  display: none;
}

/* this page sweeps the fill itself, so the shared wipe layer stands down */
.fee-collection .skeleton {
  border-radius: var(--radius);
  background: linear-gradient(90deg, var(--bs-tertiary-bg) 25%, var(--bs-border-color) 37%, var(--bs-tertiary-bg) 63%);
  background-size: 400% 100%;
  animation: fcc-shimmer 1.4s ease infinite;
}

.fee-collection .skeleton::after {
  content: none;
}

.fee-collection .skeleton-hero {
  height: 260px;
  margin-bottom: 16px;
}

.fee-collection .skeleton-filters {
  height: 120px;
  margin-bottom: 24px;
}

.fee-collection .skeleton-cards {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
  margin-bottom: 24px;
}

.fee-collection .skeleton-card {
  height: 230px;
}

.fee-collection .skeleton-grid {
  height: 320px;
  margin-bottom: 24px;
}

.fee-collection .skeleton-split {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

.fee-collection .skeleton-tline {
  height: 220px;
}

@keyframes fcc-shimmer {
  0% {
    background-position: 100% 50%;
  }

  100% {
    background-position: 0 50%;
  }
}

/* ---------- A11Y ---------- */
.fee-collection :focus-visible {
  outline: 2px solid var(--bs-primary);
  outline-offset: 2px;
  border-radius: 8px;
}

/* ---------- RESPONSIVE ---------- */
@media (max-width: 1399px) {
  .command-bar {
    grid-template-columns: 1fr;
    grid-template-rows: none;
  }

  .command-bar-main,
  .upload-block,
  .quick-actions {
    grid-column: auto;
    grid-row: auto;
  }

  .quick-action-grid {
    margin: 0;
  }

  .analytics-grid {
    grid-template-columns: 1fr;
    grid-template-areas: "chart" "figures" "inst";
  }

  .figure-grid {
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(2, 1fr);
    height: auto;
  }

  .insight-list {
    grid-template-columns: repeat(2, 1fr);
  }

  .feed-list {
    grid-template-columns: 1fr;
    grid-template-rows: none;
    gap: 0;
  }

  .side-panel-head,
  .timeline-rows,
  .action-group,
  .notification-row {
    grid-row: auto;
  }

  .timeline-rows,
  .action-group,
  .notification-row {
    margin-bottom: 16px;
  }
}

@media (max-width: 991px) {
  .card-grid {
    grid-template-columns: 1fr;
  }

  .detail-drawer {
    grid-template-columns: 1fr;
    gap: 16px;
  }

  .step-list {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 767px) {
  .insight-list {
    grid-template-columns: 1fr;
  }

  .figure-grid {
    grid-template-columns: 1fr 1fr;
    grid-template-rows: repeat(3, 1fr);
  }

  .quick-action-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .skeleton-cards,
  .skeleton-split {
    grid-template-columns: 1fr;
  }

  .bulk-bar-inner {
    border-radius: var(--radius);
    width: 100%;
  }

  /* fee rows become cards */
  .record-grid-scroll {
    max-height: none;
    overflow: visible;
  }

  .record-grid {
    min-width: 0;
  }

  .record-grid thead {
    display: none;
  }

  .record-grid,
  .record-grid tbody,
  .record-grid tr,
  .record-grid td {
    display: block;
    width: auto;
  }

  .record-row {
    position: relative;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    margin: 12px;
    padding: 6px 0 46px;
  }

  .record-grid tbody td {
    border-bottom: 0;
    padding: 6px 14px;
    text-align: left !important;
  }

  .record-grid td.pin,
  .record-grid td.pin-end {
    position: static;
    box-shadow: none;
  }

  .record-grid td.col-check {
    position: absolute !important;
    top: 12px;
    right: 12px;
    padding: 0;
    width: auto;
  }

  .record-grid td.col-name {
    padding-top: 12px;
  }

  .record-grid tbody td:not(.col-name):not(.col-check):not(.col-act)::before {
    content: attr(data-lbl);
    display: block;
    font-size: 9.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: var(--bs-tertiary-color);
    margin-bottom: 1px;
  }

  .record-grid td.col-act {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    padding: 8px 14px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
    border-radius: 0 0 var(--radius-sm) var(--radius-sm);
  }

  .record-row-actions {
    opacity: 1;
    justify-content: flex-end;
  }

  .detail-drawer-row>td {
    margin: 0 12px 12px;
  }
}

@media (max-width: 575px) {
  .figure-grid {
    grid-template-columns: 1fr;
    grid-template-rows: repeat(6, 1fr);
  }

  .command-bar-title {
    font-size: 20px;
  }
}

/* ============================================================
   PARENT PORTAL dashboard — migrated from app-new.css
   ============================================================ */
/* ===== parent-portal.css ===== */
/* ============================================================
   PARENT PORTAL — 2026 SaaS executive experience (.parent-portal)
   Inspired by Linear / Stripe / Notion / Vercel.
   Scoped & self-contained. Does not touch sidebar/header/global card.
   ============================================================ */
.parent-portal {
  color: var(--bs-body-color);
  font-feature-settings: "tnum" 1, "ss01" 1;
}

/* ...but a section that merely opens a row's column is NOT the top of the page —
   without this it collapses to 4px and the row collides with the block above
   (e.g. Assignment Board → Fee Timeline). Restore the normal rhythm. */
.parent-portal .row>[class*=col-]>.portal-section:first-child {
  margin-top: 26px;
}

.parent-live-flag {
  gap: 5px;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--bs-danger);
}

.parent-live-flag::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--bs-danger);
  box-shadow: 0 0 0 0 rgba(225, 29, 72, 0.5);
  animation: px-pulse 1.4s infinite;
}

@keyframes px-pulse {
  0% {
    box-shadow: 0 0 0 0 rgba(225, 29, 72, 0.5);
  }

  100% {
    box-shadow: 0 0 0 6px rgba(225, 29, 72, 0);
  }
}

/* ---------- COMMAND HERO ---------- */
.portal-command-bar {
  display: grid;
  grid-template-columns: 1.25fr 1fr;
  gap: 16px;
}

.portal-command-bar-left {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: radial-gradient(120% 140% at 100% 0, rgba(31, 59, 96, 0.06), transparent 46%), linear-gradient(180deg, var(--bs-body-bg), var(--bs-secondary-bg));
  padding: 20px;
}

.parent-identity {
  gap: 14px;
}

.parent-identity-avatar {
  position: relative;
  width: 58px;
  height: 58px;
}

.parent-identity-avatar img {
  width: 100%;
  height: 100%;
  border-radius: 16px;
  object-fit: cover;
}

.parent-identity-verified {
  position: absolute;
  right: -4px;
  bottom: -4px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--bs-primary);
  color: #fff;
  display: grid;
  place-items: center;
  font-size: 11px;
  border: 2px solid var(--bs-body-bg);
}

.parent-identity-head {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.parent-identity-name {
  font-size: 20px;
  font-weight: 750;
  letter-spacing: -0.02em;
  color: var(--bs-emphasis-color);
  line-height: 1.1;
}

.parent-identity-meta {
  gap: 6px;
  margin-top: 5px;
}

/* active-child context strip (bridges the header switcher to the hero) */
.child-context {
  gap: 14px;
  margin-top: 16px;
  padding: 12px 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-tertiary-bg);
}

.child-context-name {
  gap: 10px;
  min-width: 0;
}

.child-context-avatar {
  position: relative;
}

.child-context-avatar img {
  width: 38px;
  height: 38px;
  border-radius: 11px;
  object-fit: cover;
  box-shadow: 0 0 0 2px var(--bs-body-bg), 0 0 0 3px var(--bs-primary);
}

.child-context-status-dot {
  position: absolute;
  right: -2px;
  bottom: -2px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--bs-success);
  border: 2px solid var(--bs-tertiary-bg);
}

.child-context-id {
  min-width: 0;
}

.child-context-title {
  font-size: 12px;
  color: var(--bs-secondary-color);
  line-height: 1.25;
}

.child-context-title b {
  font-size: 14px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.child-context-subtitle {
  font-size: 11px;
  color: var(--bs-tertiary-color);
}

.child-context-facts {
  gap: 8px;
}

.child-context-fact {
  display: inline-flex;
  gap: 8px;
  padding: 6px 11px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-xs);
  background: var(--bs-body-bg);
}

.child-context-fact>i {
  font-size: 16px;
  color: var(--bs-primary);
}

.child-context-fact>span {
  display: flex;
  flex-direction: column;
  line-height: 1.2;
}

.child-context-fact-value {
  font-size: 12px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
  white-space: nowrap;
}

.child-context-fact-label {
  font-size: 10px;
  color: var(--bs-tertiary-color);
}

@media (max-width: 991.98px) {
  .child-context-facts {
    width: 100%;
  }

  .child-context-fact {
    flex: 1;
  }
}

/* child switcher cards */
.switch-control {
  flex: 1;
  min-width: 150px;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  cursor: pointer;
  transition: all var(--transition);
  text-align: left;
}

.switch-control:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
}

.switch-control img {
  width: 40px;
  height: 40px;
  border-radius: 11px;
  object-fit: cover;
}

.switch-control-name {
  font-size: 13px;
  font-weight: 650;
  color: var(--bs-emphasis-color);
  line-height: 1.15;
  padding-right: 4px;
}

.switch-control-class {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.switch-control.active {
  border-color: transparent;
  background: linear-gradient(135deg, var(--bs-emphasis-color), #2b2f3a);
  color: #fff;
}

.switch-control.active .switch-control-name {
  color: #fff;
}

.switch-control.active .switch-control-class {
  color: rgba(255, 255, 255, 0.65);
}

.switch-control.active img {
  box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.4);
}

/* --- Compact child switcher in the page-header / breadcrumb bar --- */
.child-switcher {
  display: flex;
  align-items: center;
  gap: 10px;
}

@media (max-width: 575.98px) {
  .child-switcher {
    flex-wrap: wrap;
  }
}

.child-switcher-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
  white-space: nowrap;
}

.child-switcher-label i {
  font-size: 15px;
  color: var(--bs-tertiary-color);
}

.child-switcher-option {
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 4px;
  border: 1px solid var(--bs-border-color);
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
}

.switch-control-sm {
  flex: 0 0 auto;
  min-width: 0;
  gap: 8px;
  padding: 4px 12px 4px 4px;
  border: 1px solid transparent;
  border-radius: 999px;
  background: transparent;
}

.switch-control-sm:hover {
  transform: none;
  box-shadow: none;
  background: var(--bs-body-bg);
}

.switch-control-sm img {
  width: 30px;
  height: 30px;
  border-radius: 999px;
}

.switch-control-sm .switch-control-name {
  font-size: 12.5px;
  display: block;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  width: 95%;
}

.switch-control-sm .switch-control-class {
  font-size: 10.5px;
}

.switch-control-check {
  margin-left: -24px;
  font-size: 15px;
  color: var(--bs-tertiary-color);
  opacity: 0;
  transition: opacity var(--transition);
}

.switch-control-sm.active {
  background: var(--bs-body-bg);
  border-color: var(--bs-border-color);
  box-shadow: var(--shadow);
}

.switch-control-sm.active .switch-control-name {
  color: var(--bs-emphasis-color);
  display: block;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  width: 95%;
}

.switch-control-sm.active .switch-control-class {
  color: var(--bs-secondary-color);
}

.switch-control-sm.active img {
  box-shadow: 0 0 0 2px var(--bs-primary);
}

.switch-control-sm.active .switch-control-check {
  opacity: 1;
  color: var(--bs-primary);
}

@media (max-width: 575.98px) {
  .child-switcher {
    width: 100%;
  }

  .child-switcher-option {
    width: 100%;
    gap: 12px !important;
  }

  .switch-control-sm {
    flex: 1;
    justify-content: center;
  }

  .switch-control-sm .switch-control-class {
    display: none;
  }
}

/* right: today at a glance + AI summary */
.glance-strip {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.portal-status {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
}

.parent-portal-stat {
  padding: 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.parent-portal-stat:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow);
}

.parent-portal-stat-label {
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-tertiary-color);
  font-weight: 650;
}

.parent-portal-stat-value {
  font-size: 16px;
  font-weight: 750;
  color: var(--bs-emphasis-color);
  letter-spacing: -0.02em;
  margin-top: 1px;
}

.parent-portal-stat-value small {
  font-size: 11px;
  font-weight: 600;
  color: var(--bs-secondary-color);
}

.parent-insight-panel {
  padding: 15px 16px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: linear-gradient(135deg, rgba(124, 58, 237, 0.06), rgba(31, 59, 96, 0.03)), var(--bs-body-bg);
}

.insight-panel-top {
  gap: 8px;
  margin-bottom: 8px;
}

.insight-panel-top b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.parent-insight-panel p {
  margin: 0;
  font-size: 12.5px;
  line-height: 1.65;
  color: var(--bs-body-color);
}

.parent-insight-panel p mark {
  background: none;
  color: var(--bs-emphasis-color);
  font-weight: 650;
  padding: 0;
}

/* hero quick actions bar */
.quick-bar {
  gap: 8px;
  margin-top: 16px;
  padding-top: 14px;
  border-top: 1px solid var(--bs-border-color);
}

/* ---------- MY CHILDREN (horizontal premium cards) ---------- */
.child-cards {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
}

@media (max-width: 1199.98px) {
  .child-cards {
    grid-template-columns: repeat(1, 1fr);
  }
}

@media (max-width: 991.98px) {
  .child-cards {
    grid-template-columns: repeat(2, 1fr);
  }
}

.child-card {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.child-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lift);
}

.child-card-top {
  gap: 14px;
  padding: 16px;
  border-bottom: 1px solid var(--bs-border-color);
  background: linear-gradient(180deg, var(--bs-secondary-bg), var(--bs-body-bg));
}

@media (max-width: 991.98px) {
  .child-card-top {
    flex-wrap: wrap;
  }
}

.progress-ring-mini {
  --v: 0;
  width: 62px;
  height: 62px;
  border-radius: 50%;
  padding: 3px;
  background: conic-gradient(var(--accent) calc(var(--v) * 1%), var(--bs-tertiary-bg) 0);
  position: relative;
}

.progress-ring-mini img {
  width: 100%;
  height: 100%;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid var(--bs-body-bg);
}

.progress-ring-value {
  position: absolute;
  bottom: -6px;
  left: 50%;
  transform: translateX(-50%);
  font-size: 9.5px;
  font-weight: 800;
  color: var(--accent);
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  padding: 1px 6px;
  border-radius: 999px;
}

.child-card-id b {
  font-size: 15px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  display: block;
  letter-spacing: -0.01em;
}

.child-card-id span {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.child-card-tags {
  display: flex;
  gap: 5px;
  margin-top: 6px;
  flex-wrap: wrap;
}

.child-card-metrics {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1px;
  background: var(--bs-border-color);
}

.child-card-metric {
  background: var(--bs-body-bg);
  padding: 11px 10px;
}

.child-card-metric-label {
  font-size: 9.5px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--bs-tertiary-color);
  font-weight: 650;
}

.child-card-metric-value {
  font-size: 15px;
  font-weight: 750;
  color: var(--bs-emphasis-color);
  letter-spacing: -0.02em;
  margin-top: 2px;
}

.child-card-metric-value small {
  font-size: 10px;
  color: var(--bs-secondary-color);
}

.child-card-foot {
  gap: 8px;
  padding: 12px 16px;
}

/* ---------- ACADEMIC HEALTH (expandable subject cards) ---------- */
.parent-subject-list {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 12px;
}

.subject-block {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  cursor: pointer;
  transition: box-shadow var(--transition), transform var(--transition);
}

.subject-block:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
  border-color: var(--accent);
}

.subject-head {
  padding: 13px;
}

.subject-head>.avatar {
  margin-bottom: 10px;
}

.subject-name {
  font-size: 13px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.subject-row {
  margin-top: 6px;
}

.grade-mark {
  font-size: 20px;
  font-weight: 800;
  color: var(--accent);
  letter-spacing: -0.03em;
}

.sparkline-chart {
  width: 54px;
  height: 22px;
}

.sparkline-line {
  fill: none;
  stroke: var(--accent);
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.trend-figure {
  font-size: 10.5px;
  font-weight: 700;
  color: var(--accent);
  gap: 2px;
}

.subject-more {
  max-height: 0;
  transition: max-height 0.3s ease;
  border-top: 1px solid transparent;
}

.subject-block.expanded .subject-more {
  max-height: 320px;
  border-top-color: var(--bs-border-color);
}

.subject-more-inner {
  padding: 12px 13px;
  gap: 9px;
}

.subject-metric {
  display: flex;
  align-items: center;
  font-size: 11.5px;
}

.subject-metric-label {
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.subject-metric-label i {
  font-size: 13px;
}

.subject-metric-value {
  font-weight: 650;
  color: var(--bs-emphasis-color);
}

.feedback-note {
  font-size: 11.5px;
  line-height: 1.5;
  color: var(--bs-body-color);
  background: var(--bs-tertiary-bg);
  border-radius: 8px;
  padding: 8px 10px;
}

.feedback-note b {
  color: var(--bs-emphasis-color);
}

/* the AI note takes the card's accent instead of the neutral surface */
.feedback-note-accent {
  color: var(--accent);
  background: var(--accent-soft);
}

.feedback-note-accent b {
  color: var(--accent);
}

.subject-toggle {
  gap: 4px;
  font-size: 10.5px;
  font-weight: 650;
  color: var(--bs-tertiary-color);
  padding: 8px;
  border-top: 1px solid var(--bs-border-color);
}

.subject-toggle i {
  transition: transform var(--transition);
}

.subject-block.expanded .subject-toggle i {
  transform: rotate(180deg);
}

/* ---------- INSIGHT CARDS ---------- */
.parent-insight-list {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}

.parent-insight-row {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  padding: 14px;
  transition: transform var(--transition), box-shadow var(--transition);
}

.parent-insight-row:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
}

.insight-row-top {
  gap: 9px;
  margin-bottom: 10px;
}

.insight-row-top b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  flex: 1;
}

.confidence-gauge {
  gap: 8px;
  margin-bottom: 8px;
}

.confidence-gauge-bar {
  flex: 1;
  height: 5px;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
}

.confidence-gauge-bar>span {
  display: block;
  height: 100%;
  width: 0;
  border-radius: 999px;
  background: var(--accent);
  transition: width 1s cubic-bezier(0.22, 1, 0.36, 1);
}

.confidence-gauge b {
  font-size: 11.5px;
  color: var(--bs-emphasis-color);
  font-variant-numeric: tabular-nums;
}

.parent-insight-row p {
  margin: 0 0 8px;
  font-size: 11.5px;
  line-height: 1.55;
  color: var(--bs-secondary-color);
}

.parent-insight-row p b {
  color: var(--bs-emphasis-color);
}

/* .insight-row-foot — now entirely Bootstrap utilities in the markup */
/* ---------- COMMUNICATION HUB (mail/slack) ---------- */
/* .mail-list — now entirely Bootstrap utilities in the markup */
.mail-row {
  gap: 12px;
  padding: 11px 4px;
  border-bottom: 1px solid var(--bs-border-color);
  cursor: pointer;
  transition: background var(--transition);
  border-radius: 8px;
}

.mail-row:hover {
  background: var(--bs-tertiary-bg);
}

.mail-row:last-child {
  border-bottom: 0;
}

.mail-avatar {
  width: 38px;
  height: 38px;
}

.mail-avatar img {
  width: 100%;
  height: 100%;
  border-radius: 11px;
  object-fit: cover;
}

.mail-row-main {
  flex: 1;
  min-width: 0;
}

.mail-row-top {
  gap: 7px;
}

.mail-row-top b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.mail-preview {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  text-overflow: ellipsis;
}

.mail-attachment {
  font-size: 13px;
  color: var(--bs-tertiary-color);
}

/* .mail-row-end — now entirely Bootstrap utilities in the markup */
.mail-time {
  font-size: 10.5px;
  color: var(--bs-tertiary-color);
}

/* ---------- SCHOOL BUS ---------- */
.bus-route-map {
  height: 66px;
  margin: 4px 0 14px;
}

.bus-route-line {
  left: 8px;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  height: 3px;
  border-radius: 3px;
  background: var(--bs-tertiary-bg);
}

.bus-route-fill {
  left: 0;
  top: 0;
  bottom: 0;
  border-radius: 3px;
  background: linear-gradient(90deg, var(--bs-primary), var(--bs-info));
}

.bus-route-stop {
  position: absolute;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--bs-body-bg);
  border: 2px solid var(--bs-border-color);
}

.bus-route-stop.completed {
  background: var(--bs-primary);
  border-color: var(--bs-primary);
}

.bus-route-stop em {
  position: absolute;
  top: 15px;
  left: 50%;
  transform: translateX(-50%);
  font-size: 9px;
  color: var(--bs-tertiary-color);
  font-style: normal;
  white-space: nowrap;
}

.bus-route-icon {
  top: 50%;
  transform: translate(-50%, -50%);
  width: 28px;
  height: 28px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 15px;
  color: #fff;
  background: var(--bs-primary);
  box-shadow: 0 4px 10px -2px rgba(31, 59, 96, 0.6);
  z-index: 2;
  animation: px-bus 5s ease-in-out infinite;
}

@keyframes px-bus {

  0%,
  100% {
    left: 12%;
  }

  50% {
    left: 62%;
  }
}

.bus-route-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 8px;
}

.bus-route-cell {
  display: flex;
  gap: 8px;
  padding: 9px 10px;
  border: 1px solid var(--bs-border-color);
  border-radius: 10px;
}

.bus-route-cell b {
  font-size: 12px;
  color: var(--bs-emphasis-color);
  display: block;
}

.bus-route-cell span {
  font-size: 10px;
  color: var(--bs-secondary-color);
}

/* ---------- HOMEWORK KANBAN ---------- */
.task-board {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
}

.task-card {
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 10px;
  padding: 11px;
  margin-bottom: 8px;
  cursor: grab;
  transition: transform var(--transition), box-shadow var(--transition);
}

.task-card:last-child {
  margin-bottom: 0;
}

.task-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lift);
}

.task-card b {
  display: block;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  margin: 7px 0 3px;
}

.task-card-meta {
  display: flex;
  align-items: center;
  margin-top: 8px;
}

.task-card-meta span {
  font-size: 10.5px;
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.task-card-meta span i {
  font-size: 12px;
}

.task-card-grade {
  font-size: 11px;
  font-weight: 800;
  color: var(--accent);
}

/* ---------- FINANCE payment timeline ---------- */
.payment-row {
  padding-left: 8px;
}

.payment-line {
  display: grid;
  grid-template-columns: 34px 1fr auto;
  gap: 12px;
  padding: 12px 0;
  border-bottom: 1px solid var(--bs-border-color);
}

.payment-line:last-child {
  border-bottom: 0;
}

/* the standalone line in the pay dialog is boxed rather than a list row */
.payment-line-boxed {
  border: 1px solid var(--bs-border-color);
  border-radius: 12px;
  padding: 12px 14px;
  margin-bottom: 14px;
}

.payment-line-info b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  display: block;
}

.payment-line-info span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.payment-line-amount {
  text-align: right;
}

.payment-line-amount b {
  font-size: 13.5px;
  color: var(--bs-emphasis-color);
  font-variant-numeric: tabular-nums;
}

.payment-line-amount .badge-tag {
  margin-top: 3px;
}

.finance-head {
  gap: 14px;
  padding: 14px;
  border-radius: var(--radius-sm);
  background: linear-gradient(120deg, var(--tint-primary), transparent), var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  margin-bottom: 14px;
}

.finance-figure {
  font-size: 26px;
  font-weight: 800;
  color: var(--bs-emphasis-color);
  letter-spacing: -0.03em;
  font-variant-numeric: tabular-nums;
}

.finance-segment {
  height: 8px;
  border-radius: 999px;
  margin-top: 8px;
  gap: 2px;
}

.finance-segment span {
  height: 100%;
  border-radius: 3px;
}

/* ---------- EXAM HUB ---------- */
.exam-hero {
  gap: 16px;
  padding: 16px;
  border-radius: var(--radius-sm);
  color: #fff;
  background: linear-gradient(130deg, #1e2130, #2c3040);
  position: relative;
  margin-bottom: 14px;
}

@media (max-width: 575.98px) {
  .exam-hero {
    flex-wrap: wrap;
  }
}

.exam-hero::after {
  content: "";
  position: absolute;
  right: -40px;
  top: -40px;
  width: 160px;
  height: 160px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(124, 58, 237, 0.4), transparent 70%);
}

.portal-count {
  z-index: 1;
  display: flex;
  gap: 8px;
}

.portal-count div {
  text-align: center;
  min-width: 46px;
}

.portal-count b {
  font-size: 24px;
  font-weight: 800;
  display: block;
  letter-spacing: -0.03em;
  font-variant-numeric: tabular-nums;
}

.portal-count span {
  font-size: 9.5px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  opacity: 0.7;
}

.exam-hero-body {
  position: relative;
  z-index: 1;
}

.exam-hero-body b {
  font-size: 14px;
}

.exam-hero-body p {
  margin: 2px 0 0;
  font-size: 11.5px;
  opacity: 0.8;
}

.parent-readiness {
  gap: 9px;
}

.readiness-row {
  display: grid;
  grid-template-columns: 88px 1fr auto;
  gap: 10px;
}

.readiness-subject {
  font-size: 12px;
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

.progress-pips {
  gap: 3px;
}

.progress-pip {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--bs-tertiary-bg);
}

.progress-pip-filled {
  background: var(--accent);
}

.readiness-percent {
  font-size: 11px;
  font-weight: 700;
  color: var(--bs-secondary-color);
  text-align: right;
}

/* ---------- ACHIEVEMENTS gallery ---------- */
.achievement-badges {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 12px;
}

@media (max-width: 575.98px) {
  .achievement-badges {
    grid-template-columns: repeat(2, 1fr) !important;
  }
}

.achievement-badge {
  padding: 16px 8px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  transition: transform var(--transition), box-shadow var(--transition);
}

.achievement-badge:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-lift);
}

.achievement-badge b {
  font-size: 11.5px;
  color: var(--bs-emphasis-color);
  display: block;
}

.achievement-badge span {
  font-size: 10px;
  color: var(--bs-secondary-color);
}

.achievement-reveal {
  inset: 0;
  background: var(--accent);
  color: #fff;
  gap: 4px;
  padding: 10px;
  opacity: 0;
  transform: translateY(8px);
  transition: all var(--transition);
}

.achievement-badge:hover .achievement-reveal {
  opacity: 1;
  transform: none;
}

.achievement-reveal b {
  color: #fff;
  font-size: 12px;
}

.achievement-reveal span {
  color: rgba(255, 255, 255, 0.85);
  font-size: 10.5px;
  line-height: 1.4;
}

@media (max-width: 1400px) {
  .achievement-badges {
    grid-template-columns: repeat(3, 1fr);
  }
}

/* ---------- CALENDAR agenda ---------- */
.agenda-group {
  margin-bottom: 14px;
}

.agenda-group:last-child {
  margin-bottom: 0;
}

.agenda-label {
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--bs-tertiary-color);
  margin-bottom: 8px;
}

.agenda-item {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px;
  border-radius: 10px;
  transition: background var(--transition);
}

.agenda-item:hover {
  background: var(--bs-tertiary-bg);
}

.agenda-item-time {
  width: 52px;
  flex-shrink: 0;
  font-size: 11px;
  font-weight: 650;
  color: var(--bs-secondary-color);
}

.agenda-item-bar {
  width: 3px;
  align-self: stretch;
  border-radius: 3px;
  background: var(--accent);
}

.agenda-item-body b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  display: block;
}

.agenda-item-body span {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

/* ---------- NOTIFICATIONS ---------- */
.parent-notification-group {
  margin-bottom: 12px;
}

.parent-notification-group:last-child {
  margin-bottom: 0;
}

.notification-label {
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--bs-tertiary-color);
  margin-bottom: 8px;
}

.parent-notification-row {
  display: flex;
  align-items: flex-start;
  gap: 11px;
  padding: 10px;
  border-radius: 10px;
  transition: background var(--transition);
}

.parent-notification-row:hover {
  background: var(--bs-tertiary-bg);
}

.notification-body {
  flex: 1;
  min-width: 0;
}

.notification-body b {
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.notification-body p {
  margin: 1px 0 0;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.notification-time {
  font-size: 10px;
  color: var(--bs-tertiary-color);
  flex-shrink: 0;
}

/* ---------- TOASTS ---------- */
#pxToasts {
  position: fixed;
  top: 76px;
  right: 20px;
  z-index: 3000;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

#pxToasts .toast {
  min-width: 250px;
}

/* ---------- SKELETON — shared primitive, page tone and geometry ---------- */
.parent-portal .skeleton-loader {
  display: none;
}

.parent-portal.loading .skeleton-loader {
  display: block;
}

.parent-portal.loading .live-flag-wrap {
  display: none;
}

.parent-portal .skeleton {
  background: var(--bs-tertiary-bg);
  border-radius: 12px;
}

.parent-portal .skeleton::after {
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.55), transparent);
  animation-duration: 1.5s;
}

.parent-portal .skeleton-cmd {
  height: 210px;
  margin-bottom: 24px;
}

.parent-portal .skeleton-kids {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  margin-bottom: 24px;
}

.parent-portal .skeleton-kid {
  height: 190px;
}

.parent-portal .skeleton-strip {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 12px;
}

.parent-portal .skeleton-cell {
  height: 150px;
}

[data-bs-theme=dark] .parent-portal .skeleton::after,
[data-theme=dark] .parent-portal .skeleton::after {
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.05), transparent);
}

/* accessibility */
.parent-portal :focus-visible {
  outline: 2px solid var(--bs-primary);
  outline-offset: 2px;
  border-radius: 8px;
}

/* ---------- LAYOUT RHYTHM · equal-height columns, no ragged bottoms ----------
   Bootstrap stretches the columns but not the boxes inside them, so a shorter
   panel used to leave dead space under it. Make each column a flex column and
   let its panel + inner list fill the remaining height. */
.parent-portal .row>[class*=col-] {
  display: flex;
  flex-direction: column;
}

.parent-portal .row>[class*=col-]>.card,
.parent-portal .row>[class*=col-]>.parent-insight-list,
.parent-portal .row>[class*=col-]>.task-board {
  flex: 1 1 auto;
}

/* insight / kanban cards share a row height instead of ragged tops */
.parent-insight-list,
.task-board {
  grid-auto-rows: 1fr;
}

/* lists inside a stretched panel distribute their rows evenly */
.card-flush>.card-body>.portal-timeline-track,
.card-flush>.card-body>.mail-list {
  height: 100%;
}

.card-flush>.card-body>.portal-timeline-track {
  display: flex;
  flex-direction: column;
}

.card-flush>.card-body>.portal-timeline-track>.portal-timeline {
  flex: 1 1 auto;
}

.card-flush>.card-body>.mail-list>.mail-row {
  flex: 1 1 auto;
}

/* hero: keep the right glance column flush with the taller left panel */
.glance-strip>.parent-insight-panel {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
}

.glance-strip>.parent-insight-panel>p {
  margin-top: auto;
}

/* agenda + notification lists share a height so both panels end level */
.card-flush>.card-body>.agenda-group:last-child,
.card-flush>.card-body>.parent-notification-group:last-child {
  margin-bottom: 0;
}

@media (max-width: 1199px) {
  .portal-command-bar {
    grid-template-columns: 1fr;
  }

  .parent-subject-list {
    grid-template-columns: repeat(3, 1fr);
  }

  .parent-insight-list {
    grid-template-columns: repeat(2, 1fr);
  }

  .task-board {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 767px) {
  .child-cards {
    grid-template-columns: 1fr;
  }

  .parent-subject-list {
    grid-template-columns: repeat(2, 1fr);
  }

  .parent-insight-list {
    grid-template-columns: 1fr;
  }

  .task-board {
    grid-template-columns: 1fr;
  }

  .portal-status {
    grid-template-columns: repeat(3, 1fr);
  }

  .achievement-badges {
    grid-template-columns: repeat(3, 1fr);
  }

  .skeleton-kids {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 480px) {
  .parent-subject-list {
    grid-template-columns: 1fr 1fr;
  }

  .portal-status {
    grid-template-columns: repeat(2, 1fr);
  }

  .child-card-metrics {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ============================================================
   Membership Transactions — Billing & Transaction Management
   Page-scoped styles for membership-transactions.html (.mt-* / .pay-badge).
   Relocated here from _parent-portal.scss (migration artifact).
   ============================================================ */
:root {
  --mt-line: #e9edf5;
  --mt-soft: #f6f7fb;
  --mt-ink: #1b2559;
  --mt-mut: var(--bs-secondary-color);
}

[data-bs-theme=dark] {
  --mt-line: rgba(255, 255, 255, .09);
  --mt-soft: rgba(255, 255, 255, .04);
  --mt-ink: #e6e9f5;
  --mt-mut: #9aa3b8;
}

/* ---------- Financial insights strip (KPI mini widgets) ---------- */
.mt-kpis {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
}

.mt-kpi {
  position: relative;
  background: var(--bs-card-bg, var(--bs-body-bg));
  border: 1px solid var(--mt-line);
  border-radius: 14px;
  padding: 14px 16px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  overflow: hidden;
  transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
}

.mt-kpi:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 26px rgba(30, 41, 89, 0.09);
  border-color: transparent;
}

.mt-kpi-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

.mt-kpi-lbl {
  font-size: 12px;
  font-weight: 600;
  color: var(--mt-mut);
  letter-spacing: 0.01em;
}

.mt-kpi-ic {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  display: grid;
  place-items: center;
  font-size: 16px;
  flex: none;
}

.mt-kpi-val {
  font-size: 20px;
  font-weight: 700;
  line-height: 1.1;
  color: var(--mt-ink);
  margin: 0;
}

.mt-kpi-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-size: 11.5px;
  font-weight: 600;
}

.mt-trend {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}

.mt-trend.up {
  color: #16b364;
}

.mt-trend.down {
  color: #f04438;
}

.mt-trend.flat {
  color: var(--mt-mut);
}

.mt-spark {
  display: flex;
  align-items: flex-end;
  gap: 3px;
  height: 26px;
}

.mt-spark i {
  width: 5px;
  border-radius: 3px;
  background: currentColor;
  opacity: 0.28;
  display: block;
}

.mt-spark i.hi {
  opacity: 0.9;
}

.mt-kpi-bar {
  height: 6px;
  border-radius: 6px;
  background: var(--mt-soft);
  overflow: hidden;
}

.mt-kpi-bar>span {
  display: block;
  height: 100%;
  border-radius: 6px;
  background: currentColor;
}

.mt-i-primary {
  color: var(--bs-primary);
}

.mt-i-success {
  color: #16b364;
}

.mt-i-amber {
  color: #f79009;
}

.mt-i-rose {
  color: #f04438;
}

.mt-i-purple {
  color: #7a5af8;
}

.mt-i-cyan {
  color: #06aed4;
}

.mt-i-slate {
  color: #64748b;
}

.mt-kpi-ic.mt-i-primary {
  background: rgba(31, 59, 96, 0.12);
}

.mt-kpi-ic.mt-i-success {
  background: rgba(22, 179, 100, 0.12);
}

.mt-kpi-ic.mt-i-amber {
  background: rgba(247, 144, 9, 0.12);
}

.mt-kpi-ic.mt-i-rose {
  background: rgba(240, 68, 56, 0.12);
}

.mt-kpi-ic.mt-i-purple {
  background: rgba(122, 90, 248, 0.12);
}

.mt-kpi-ic.mt-i-cyan {
  background: rgba(6, 174, 212, 0.12);
}

.mt-kpi-ic.mt-i-slate {
  background: rgba(100, 116, 139, 0.12);
}

.mt-spark-h {
  height: 6px;
}

/* keep sparkline heights via classes below */
/* sparkline bar heights (avoids inline styles) */
.sh-30 {
  height: 30%;
}

.sh-40 {
  height: 40%;
}

.sh-45 {
  height: 45%;
}

.sh-50 {
  height: 50%;
}

.sh-55 {
  height: 55%;
}

.sh-58 {
  height: 58%;
}

.sh-60 {
  height: 60%;
}

.sh-62 {
  height: 62%;
}

.sh-65 {
  height: 65%;
}

.sh-68 {
  height: 68%;
}

.sh-70 {
  height: 70%;
}

.sh-72 {
  height: 72%;
}

.sh-75 {
  height: 75%;
}

.sh-78 {
  height: 78%;
}

.sh-80 {
  height: 80%;
}

.sh-85 {
  height: 85%;
}

.sh-90 {
  height: 90%;
}

.sh-100 {
  height: 100%;
}

/* ---------- Subscriber cell ---------- */
.mt-sub {
  display: flex;
  align-items: center;
  gap: 10px;
}

.mt-sub-av {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  object-fit: cover;
  flex: none;
  border: 1px solid var(--mt-line);
}

.mt-sub-name {
  font-weight: 600;
  color: var(--mt-ink);
  display: block;
}

.mt-sub-name:hover {
  color: var(--bs-primary);
}

.mt-sub-meta {
  font-size: 11.5px;
  color: var(--mt-mut);
  display: block;
  line-height: 1.5;
}

/* ---------- Payment method badges ---------- */
.pay-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 10px;
  border-radius: 8px;
  font-size: 12px;
  font-weight: 600;
  background: var(--mt-soft);
  color: var(--mt-ink);
  border: 1px solid var(--mt-line);
  white-space: nowrap;
}

.pay-badge i {
  font-size: 14px;
}

.pay-badge.pm-card {
  color: var(--bs-primary);
}

.pay-badge.pm-debit {
  color: #06aed4;
}

.pay-badge.pm-bank {
  color: #64748b;
}

.pay-badge.pm-upi {
  color: #7a5af8;
}

.pay-badge.pm-paypal {
  color: #1546a0;
}

.pay-badge.pm-stripe {
  color: #635bff;
}

.pay-badge.pm-razorpay {
  color: #0c6dfd;
}

.pay-badge.pm-cash {
  color: #16b364;
}

.pay-badge.pm-wallet {
  color: #f79009;
}

.mt-amt {
  font-weight: 700;
  color: var(--mt-ink);
}

.mt-tax,
.mt-disc {
  color: var(--mt-mut);
  font-size: 12.5px;
}

.mt-disc.has {
  color: #16b364;
  font-weight: 600;
}

/* ---------- Slide-over (offcanvas) transaction details ---------- */
.mt-drawer {
  width: 460px;
  max-width: 92vw;
}

.mt-dh {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 18px 20px;
  border-bottom: 1px solid var(--mt-line);
}

.mt-dh-ic {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  display: grid;
  place-items: center;
  font-size: 22px;
  background: rgba(31, 59, 96, 0.12);
  color: var(--bs-primary);
  flex: none;
}

.mt-dh h5 {
  margin: 0;
  font-size: 16px;
}

.mt-dh .mt-dh-sub {
  font-size: 12.5px;
  color: var(--mt-mut);
}

.mt-sec {
  padding: 16px 20px;
  border-bottom: 1px solid var(--mt-line);
}

.mt-sec-title {
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 700;
  color: var(--mt-mut);
  margin-bottom: 12px;
  display: flex;
  align-items: center;
  gap: 6px;
}

.mt-dl {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px 14px;
}

.mt-dl .k {
  font-size: 11.5px;
  color: var(--mt-mut);
  display: block;
}

.mt-dl .v {
  font-size: 13px;
  font-weight: 600;
  color: var(--mt-ink);
}

.mt-dl .span-2 {
  grid-column: 1/-1;
}

.mt-invoice {
  background: var(--mt-soft);
  border: 1px solid var(--mt-line);
  border-radius: 12px;
  padding: 14px 16px;
}

.mt-invoice .r {
  display: flex;
  justify-content: space-between;
  padding: 4px 0;
  font-size: 13px;
}

.mt-invoice .r.total {
  border-top: 1px dashed var(--mt-line);
  margin-top: 6px;
  padding-top: 10px;
  font-weight: 700;
  font-size: 15px;
}

/* ---------- Vertical timeline ---------- */
.mt-tl {
  position: relative;
  padding-left: 26px;
}

.mt-tl::before {
  content: "";
  position: absolute;
  left: 9px;
  top: 4px;
  bottom: 4px;
  width: 2px;
  background: var(--mt-line);
}

.mt-tl-item {
  position: relative;
  padding-bottom: 16px;
}

.mt-tl-item:last-child {
  padding-bottom: 0;
}

.mt-tl-dot {
  position: absolute;
  left: -26px;
  top: 1px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-size: 11px;
  color: var(--bs-body-bg);
  background: #16b364;
  box-shadow: 0 0 0 3px rgba(22, 179, 100, 0.15);
}

.mt-tl-dot.pending {
  background: var(--mt-mut);
  box-shadow: 0 0 0 3px rgba(107, 114, 128, 0.15);
}

.mt-tl-t {
  font-weight: 600;
  font-size: 13px;
  color: var(--mt-ink);
}

.mt-tl-m {
  font-size: 11.5px;
  color: var(--mt-mut);
}

/* ---------- Right sidebar / analytics lists ---------- */
.mt-side-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px solid var(--mt-line);
}

.mt-side-item:last-child {
  border-bottom: 0;
}

.mt-side-ic {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  flex: none;
  display: grid;
  place-items: center;
  font-size: 16px;
  background: var(--mt-soft);
}

.mt-side-body {
  flex: 1 1 auto;
  min-width: 0;
}

.mt-side-t {
  font-weight: 600;
  font-size: 13px;
  color: var(--mt-ink);
  display: block;
}

.mt-side-t:hover {
  color: var(--bs-primary);
}

.mt-side-s {
  font-size: 11.5px;
  color: var(--mt-mut);
}

.mt-side-amt {
  font-weight: 700;
  font-size: 13px;
  color: var(--mt-ink);
  white-space: nowrap;
}

/* ---------- Analytics rows (revenue by plan / method distribution) ---------- */
.mt-ana-row {
  margin-bottom: 14px;
}

.mt-ana-row:last-child {
  margin-bottom: 0;
}

.mt-ana-top {
  display: flex;
  justify-content: space-between;
  font-size: 12.5px;
  margin-bottom: 5px;
}

.mt-ana-top .l {
  font-weight: 600;
  color: var(--mt-ink);
}

.mt-ana-top .r {
  color: var(--mt-mut);
  font-weight: 600;
}

.mt-ana-bar {
  height: 8px;
  border-radius: 6px;
  background: var(--mt-soft);
  overflow: hidden;
}

.mt-ana-bar>span {
  display: block;
  height: 100%;
  border-radius: 6px;
}

.mt-w-40 {
  width: 40%;
}

.mt-w-55 {
  width: 55%;
}

.mt-w-62 {
  width: 62%;
}

.mt-w-70 {
  width: 70%;
}

.mt-w-78 {
  width: 78%;
}

.mt-w-85 {
  width: 85%;
}

.mt-w-92 {
  width: 92%;
}

.mt-bg-primary {
  background: var(--bs-primary);
}

.mt-bg-success {
  background: #16b364;
}

.mt-bg-amber {
  background: #f79009;
}

.mt-bg-purple {
  background: #7a5af8;
}

.mt-bg-rose {
  background: #f04438;
}

.mt-bg-cyan {
  background: #06aed4;
}

@media (max-width: 1199px) {
  .mt-kpis {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 575px) {
  .mt-kpis {
    grid-template-columns: 1fr;
  }
}

/* Shared bulk-action bar (.bulk-selection) borrows --cls-* vars defined on the
   classes workspace; provide them on the transactions workspace so its
   floating pill keeps the dark background and readable text. */
.data-workspace.mt {
  --cls-border: var(--bs-border-color, #e9edf4);
  --cls-heading: var(--bs-heading-color, #202c4b);
  --cls-inset: var(--bs-tertiary-bg, #f5f6f9);
  --cls-primary: var(--bs-primary, var(--bs-primary));
}

/* ============================================================
   Academic Calendar — Premium Academic Planning Workspace
   Adds the month/mini calendar grids, soft event pills, agenda
   items and empty state on top of Bootstrap + the shared card
   and sw-* toolbar chrome (reused from components/workspace).
   Reuses the existing bg-*-transparent colour system for every
   event colour — never touches the palette, sidebar, header or
   page shell. Dark mode rides on Bootstrap CSS variables.
   ============================================================ */
.calendar-page {
  --calendar-cell: 118px;
}

@media (prefers-reduced-motion: reduce) {
  .calendar-page * {
    transition: none !important;
    animation: none !important;
  }
}

/* Advanced filter dropdown in the toolbar */
.calendar-filter-menu {
  min-width: 340px;
  max-width: 92vw;
}

/* View switch (Month/Week/Day/Agenda pills) — wrap instead of
   overflowing the toolbar row on narrow viewports */
@media (max-width: 575.98px) {
  .page-toolbar .nav.flex-nowrap {
    flex-wrap: wrap;
  }
}

/* Panel column: keep sidebar cards tidy */
.calendar-rail .card {
  border-radius: var(--radius-sm);
}

/* ============================================================
   MONTH GRID
   ============================================================ */
.calendar-board {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  overflow: hidden;
  background: var(--bs-border-color);
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
  gap: 1px;
}

.calendar-dow {
  background: var(--bs-tertiary-bg, #f7f8fc);
  text-align: center;
  padding: 0.6rem 0.25rem;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
}

.calendar-cell {
  background: var(--bs-card-bg, #fff);
  min-height: var(--calendar-cell);
  padding: 8px 8px 6px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  transition: background var(--transition);
  position: relative;
}

.calendar-cell:hover {
  background: var(--bs-tertiary-bg, #f8f9fc);
}

.calendar-cell.is-out {
  background: var(--bs-tertiary-bg, #f4f6fa);
}

.calendar-cell.is-out .calendar-num {
  color: var(--bs-secondary-color);
  opacity: 0.6;
}

.calendar-num {
  align-self: flex-end;
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--bs-heading-color, #1f2937);
  width: 24px;
  height: 24px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  line-height: 1;
}

.calendar-cell.is-today {
  background: rgba(var(--bs-primary-rgb), 0.06);
}

.calendar-cell.is-today .calendar-num {
  background: var(--bs-primary);
  color: #fff;
}

/* ---- Event pill (colour comes from reused bg-*-transparent utility) ---- */
.calendar-entry {
  display: flex;
  align-items: center;
  gap: 6px;
  border-radius: 7px;
  padding: 3px 8px;
  font-size: 0.72rem;
  font-weight: 600;
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  transition: transform var(--transition), box-shadow var(--transition), filter var(--transition);
}

.calendar-entry i {
  flex-shrink: 0;
  font-size: 0.82rem;
}

.calendar-entry span {
  overflow: hidden;
  text-overflow: ellipsis;
}

.calendar-entry:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 10px -3px rgba(19, 16, 34, 0.18);
  filter: brightness(0.98);
}

/* solid (multi-day / all-day) variant keeps white text supplied by bg-* utility */
.calendar-entry.is-solid {
  box-shadow: inset 3px 0 0 rgba(0, 0, 0, 0.12);
}

.calendar-entry.is-span-start {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}

.calendar-entry.is-span-mid {
  border-radius: 0;
}

.calendar-entry.is-span-end {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}

/* ============================================================
   MINI CALENDAR
   ============================================================ */
.calendar-mini {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 2px;
  text-align: center;
}

.calendar-mini-dow {
  font-size: 0.64rem;
  font-weight: 700;
  color: var(--bs-secondary-color);
  padding-bottom: 4px;
}

.calendar-mini-day {
  font-size: 0.76rem;
  aspect-ratio: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  color: var(--bs-heading-color, #1f2937);
  cursor: pointer;
  transition: background var(--transition), color var(--transition);
  position: relative;
}

.calendar-mini-day:hover {
  background: var(--bs-tertiary-bg, #eef1f8);
}

.calendar-mini-day.is-out {
  color: var(--bs-secondary-color);
  opacity: 0.55;
}

.calendar-mini-day.is-today {
  background: var(--bs-primary);
  color: #fff;
  font-weight: 700;
}

.calendar-mini-day.has-dot::after {
  content: "";
  position: absolute;
  bottom: 3px;
  left: 50%;
  transform: translateX(-50%);
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: currentColor;
  opacity: 0.7;
}

/* ============================================================
   CATEGORY LIST
   ============================================================ */
.calendar-category {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 8px;
  border-radius: 9px;
  transition: background var(--transition);
}

.calendar-category:hover {
  background: var(--bs-tertiary-bg, #f6f8fc);
}

.calendar-category .form-check-input {
  margin-top: 0;
  cursor: pointer;
}

.calendar-category-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex-shrink: 0;
}

/* ============================================================
   AGENDA ITEMS (calendar Agenda view)
   ============================================================ */
.calendar-item {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  padding: 10px;
  border-radius: 10px;
  border: 1px solid transparent;
  transition: border-color var(--transition), background var(--transition), transform var(--transition);
}

.calendar-item:hover {
  border-color: var(--bs-border-color);
  background: var(--bs-tertiary-bg, #f8f9fc);
  transform: translateX(2px);
}

.calendar-item-icon {
  width: 38px;
  height: 38px;
  border-radius: 10px;
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
}

.calendar-item-day {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
  margin: 14px 0 6px;
}

.calendar-item-day:first-child {
  margin-top: 0;
}

/* ============================================================
   EMPTY STATE
   ============================================================ */
.calendar-empty {
  text-align: center;
  padding: 42px 16px;
}

.calendar-empty-art {
  width: 116px;
  height: 116px;
  margin: 0 auto 18px;
  border-radius: 28px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 52px;
  color: var(--bs-primary);
  background: rgba(var(--bs-primary-rgb), 0.1);
}

/* ============================================================
   WEEK / DAY GRID
   ============================================================ */
.calendar-week {
  overflow-x: auto;
}

.calendar-week table {
  min-width: 720px;
}

.calendar-week .calendar-time {
  width: 68px;
  font-size: 0.72rem;
  color: var(--bs-secondary-color);
  white-space: nowrap;
}

.ev-calendar-sec {
  position: sticky;
  top: 80px;
}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 991.98px) {
  .calendar-page {
    --calendar-cell: 92px;
  }
}

@media (max-width: 575.98px) {
  .calendar-page {
    --calendar-cell: 76px;
  }

  .calendar-cell {
    padding: 5px 5px 4px;
  }

  .calendar-entry span {
    display: none;
  }

  .calendar-entry {
    justify-content: center;
    padding: 4px;
  }
}

/*-----------------
    AI Insights — reusable enterprise AI component library

    A shared vocabulary for every AI surface in the product, not styles for a
    single page. Class prefix `aix-` (AI eXperience) so nothing collides with
    the existing `.ai-*` accent helpers.

    Everything inherits the template's own tokens: radius and shadow values
    match `.data-workspace`, colours come from `utils/_variables.scss`, and the
    Bootstrap custom properties are used where they exist. Nothing here changes
    the sidebar, header, layout or global palette.

    Colour discipline, applied consistently across every component:
      danger / warning / info   severity only
      success                   positive outcome only
      primary                   AI identity, actions, links
      neutral surfaces          everything decorative

    Contents
      1.  Tokens
      2.  Utilities — value carriers, gradients, glow, floating decoration
      3.  Status indicators + AI badges
      4.  Confidence + progress indicators
      5.  Hero workspace
      6.  Explainable AI panel + signal chain
      7.  Insight cards
      8.  Recommendation cards
      9.  Student intelligence (profile) cards
      10. Workflow cards
      11. Activity timeline
      12. Action center
      13. Resource cards
      14. Copilot workspace
      15. Premium accordion / offcanvas / modal
      16. Empty states
-----------------*/
/* ============================================================
   1. TOKENS
   Declared on :root so any AI page can use the components
   without wrapping itself in a scope class.
   ============================================================ */
:root {
  --aix-glow: 0 0 0 1px rgba(31, 59, 96, .12), 0 12px 32px rgba(31, 59, 96, .16);
}

@media (prefers-reduced-motion: reduce) {

  [class*=aix-],
  [class*=aix-]::before,
  [class*=aix-]::after {
    animation: none !important;
    transition: none !important;
  }
}

/* ============================================================
   2. UTILITIES
   ============================================================ */
/* Value carriers — keep percentages out of inline styles.
   `.aix-p-65` on any component sets its `--p` to 65. Every whole percent is
   generated so a component never has to round its real value to fit the scale. */
.aix-p-0 {
  --p: 0;
}

.aix-p-1 {
  --p: 1;
}

.aix-p-2 {
  --p: 2;
}

.aix-p-3 {
  --p: 3;
}

.aix-p-4 {
  --p: 4;
}

.aix-p-5 {
  --p: 5;
}

.aix-p-6 {
  --p: 6;
}

.aix-p-7 {
  --p: 7;
}

.aix-p-8 {
  --p: 8;
}

.aix-p-9 {
  --p: 9;
}

.aix-p-10 {
  --p: 10;
}

.aix-p-11 {
  --p: 11;
}

.aix-p-12 {
  --p: 12;
}

.aix-p-13 {
  --p: 13;
}

.aix-p-14 {
  --p: 14;
}

.aix-p-15 {
  --p: 15;
}

.aix-p-16 {
  --p: 16;
}

.aix-p-17 {
  --p: 17;
}

.aix-p-18 {
  --p: 18;
}

.aix-p-19 {
  --p: 19;
}

.aix-p-20 {
  --p: 20;
}

.aix-p-21 {
  --p: 21;
}

.aix-p-22 {
  --p: 22;
}

.aix-p-23 {
  --p: 23;
}

.aix-p-24 {
  --p: 24;
}

.aix-p-25 {
  --p: 25;
}

.aix-p-26 {
  --p: 26;
}

.aix-p-27 {
  --p: 27;
}

.aix-p-28 {
  --p: 28;
}

.aix-p-29 {
  --p: 29;
}

.aix-p-30 {
  --p: 30;
}

.aix-p-31 {
  --p: 31;
}

.aix-p-32 {
  --p: 32;
}

.aix-p-33 {
  --p: 33;
}

.aix-p-34 {
  --p: 34;
}

.aix-p-35 {
  --p: 35;
}

.aix-p-36 {
  --p: 36;
}

.aix-p-37 {
  --p: 37;
}

.aix-p-38 {
  --p: 38;
}

.aix-p-39 {
  --p: 39;
}

.aix-p-40 {
  --p: 40;
}

.aix-p-41 {
  --p: 41;
}

.aix-p-42 {
  --p: 42;
}

.aix-p-43 {
  --p: 43;
}

.aix-p-44 {
  --p: 44;
}

.aix-p-45 {
  --p: 45;
}

.aix-p-46 {
  --p: 46;
}

.aix-p-47 {
  --p: 47;
}

.aix-p-48 {
  --p: 48;
}

.aix-p-49 {
  --p: 49;
}

.aix-p-50 {
  --p: 50;
}

.aix-p-51 {
  --p: 51;
}

.aix-p-52 {
  --p: 52;
}

.aix-p-53 {
  --p: 53;
}

.aix-p-54 {
  --p: 54;
}

.aix-p-55 {
  --p: 55;
}

.aix-p-56 {
  --p: 56;
}

.aix-p-57 {
  --p: 57;
}

.aix-p-58 {
  --p: 58;
}

.aix-p-59 {
  --p: 59;
}

.aix-p-60 {
  --p: 60;
}

.aix-p-61 {
  --p: 61;
}

.aix-p-62 {
  --p: 62;
}

.aix-p-63 {
  --p: 63;
}

.aix-p-64 {
  --p: 64;
}

.aix-p-65 {
  --p: 65;
}

.aix-p-66 {
  --p: 66;
}

.aix-p-67 {
  --p: 67;
}

.aix-p-68 {
  --p: 68;
}

.aix-p-69 {
  --p: 69;
}

.aix-p-70 {
  --p: 70;
}

.aix-p-71 {
  --p: 71;
}

.aix-p-72 {
  --p: 72;
}

.aix-p-73 {
  --p: 73;
}

.aix-p-74 {
  --p: 74;
}

.aix-p-75 {
  --p: 75;
}

.aix-p-76 {
  --p: 76;
}

.aix-p-77 {
  --p: 77;
}

.aix-p-78 {
  --p: 78;
}

.aix-p-79 {
  --p: 79;
}

.aix-p-80 {
  --p: 80;
}

.aix-p-81 {
  --p: 81;
}

.aix-p-82 {
  --p: 82;
}

.aix-p-83 {
  --p: 83;
}

.aix-p-84 {
  --p: 84;
}

.aix-p-85 {
  --p: 85;
}

.aix-p-86 {
  --p: 86;
}

.aix-p-87 {
  --p: 87;
}

.aix-p-88 {
  --p: 88;
}

.aix-p-89 {
  --p: 89;
}

.aix-p-90 {
  --p: 90;
}

.aix-p-91 {
  --p: 91;
}

.aix-p-92 {
  --p: 92;
}

.aix-p-93 {
  --p: 93;
}

.aix-p-94 {
  --p: 94;
}

.aix-p-95 {
  --p: 95;
}

.aix-p-96 {
  --p: 96;
}

.aix-p-97 {
  --p: 97;
}

.aix-p-98 {
  --p: 98;
}

.aix-p-99 {
  --p: 99;
}

.aix-p-100 {
  --p: 100;
}

/* Bar heights for the compact signal bars */
.aix-v-10 {
  --v: 10;
}

.aix-v-20 {
  --v: 20;
}

.aix-v-30 {
  --v: 30;
}

.aix-v-40 {
  --v: 40;
}

.aix-v-50 {
  --v: 50;
}

.aix-v-60 {
  --v: 60;
}

.aix-v-70 {
  --v: 70;
}

.aix-v-80 {
  --v: 80;
}

.aix-v-90 {
  --v: 90;
}

.aix-v-100 {
  --v: 100;
}

.aix-grad {
  background: radial-gradient(120% 150% at 100% 0%, var(--tint-primary) 0%, rgba(255, 255, 255, 0) 55%), var(--bs-body-bg);
}

.aix-grad-soft {
  background: linear-gradient(180deg, var(--tint-primary) 0%, var(--bs-body-bg) 100%);
}

.aix-glow {
  box-shadow: var(--aix-glow);
}

/* Floating decorative orbs — purely ornamental, never announced */
.aix-orb {
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
  filter: blur(0.5px);
  opacity: 0.5;
}

.aix-orb.aix-orb-1 {
  width: 220px;
  height: 220px;
  top: -80px;
  right: -60px;
  background: radial-gradient(circle at 30% 30%, rgba(31, 59, 96, 0.22), rgba(31, 59, 96, 0) 70%);
}

.aix-orb.aix-orb-2 {
  width: 160px;
  height: 160px;
  bottom: -70px;
  left: 32%;
  background: radial-gradient(circle at 40% 40%, rgba(14, 118, 189, 0.22), rgba(14, 118, 189, 0) 70%);
}

.aix-orb.aix-orb-3 {
  width: 120px;
  height: 120px;
  top: 18%;
  left: -40px;
  background: radial-gradient(circle at 50% 50%, rgba(74, 0, 229, 0.14), rgba(74, 0, 229, 0) 70%);
}

/* Section heading used between workspaces */
.aix-sec {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 16px;
  margin-bottom: 20px;
}

.aix-sec-ic {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--bs-secondary-bg);
  color: var(--bs-emphasis-color);
  font-size: 20px;
}

.aix-eyebrow {
  display: block;
  margin: 0 0 2px;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--bs-primary);
}

.aix-label {
  display: block;
  margin: 0;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
}

/* ============================================================
   3. STATUS INDICATORS + AI BADGES
   ============================================================ */
.aix-status {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 5px 12px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 500;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
}

.aix-dot {
  position: relative;
  display: inline-block;
  width: 8px;
  height: 8px;
  flex-shrink: 0;
  border-radius: 50%;
  background: currentColor;
}

.aix-dot.aix-dot-live::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: inherit;
  animation: aix-pulse 1.8s ease-out infinite;
}

@keyframes aix-pulse {
  from {
    opacity: 0.6;
    scale: 1;
  }

  to {
    opacity: 0;
    scale: 2.8;
  }
}

.aix-badge,
.aix-sev {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 500;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  white-space: nowrap;
}

.aix-badge.is-ai,
.is-ai.aix-sev {
  background: var(--tint-primary);
  color: var(--bs-primary);
}

.aix-badge.is-critical,
.is-critical.aix-sev {
  background: #FDE9ED;
  color: #E82646;
}

.aix-badge.is-high,
.is-high.aix-sev {
  background: #FEF8EA;
  color: rgb(162.6, 124.3820512821, 0);
}

.aix-badge.is-medium,
.is-medium.aix-sev {
  background: #E7F1FC;
  color: #0F65CD;
}

.aix-badge.is-positive,
.is-positive.aix-sev {
  background: #E8F9E8;
  color: #1ABE17;
}

/* severity pill with a leading dot */
.aix-sev::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
  flex-shrink: 0;
}

/* ============================================================
   4. CONFIDENCE + PROGRESS INDICATORS
   ============================================================ */
.aix-conf {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-width: 116px;
}

.aix-conf-track {
  position: relative;
  flex: 1 1 auto;
  height: 5px;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
  overflow: hidden;
}

.aix-conf-fill {
  position: absolute;
  inset: 0 auto 0 0;
  width: calc(var(--p, 0) * 1%);
  border-radius: inherit;
  background: linear-gradient(90deg, var(--bs-primary), #0e76bd);
}

.aix-conf-val {
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  font-variant-numeric: tabular-nums;
}

/* circular confidence badge */
.aix-conf-ring {
  position: relative;
  display: grid;
  place-items: center;
  width: 56px;
  height: 56px;
  flex-shrink: 0;
  border-radius: 50%;
  background: conic-gradient(var(--bs-primary) calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) 0);
}

.aix-conf-ring::before {
  content: "";
  position: absolute;
  inset: 5px;
  border-radius: 50%;
  background: var(--bs-body-bg);
}

.aix-conf-ring.aix-conf-ring-lg {
  width: 92px;
  height: 92px;
}

.aix-conf-ring.aix-conf-ring-lg::before {
  inset: 8px;
}

.aix-conf-ring-in {
  position: relative;
  font-size: 13px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  font-variant-numeric: tabular-nums;
}

.aix-prog {
  position: relative;
  height: 6px;
  border-radius: 999px;
  background: var(--bs-tertiary-bg);
  overflow: hidden;
}

.aix-prog-fill {
  position: absolute;
  inset: 0 auto 0 0;
  width: calc(var(--p, 0) * 1%);
  border-radius: inherit;
  background: var(--bs-primary);
  transition: width var(--transition);
}

.aix-prog-fill.is-critical {
  background: #E82646;
}

.aix-prog-fill.is-high {
  background: #EAB300;
}

.aix-prog-fill.is-medium {
  background: #0F65CD;
}

.aix-prog-fill.is-positive {
  background: #1ABE17;
}

/* ============================================================
   5. HERO WORKSPACE
   ============================================================ */
.aix-hero {
  position: relative;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: radial-gradient(90% 120% at 88% 0%, rgba(31, 59, 96, 0.1) 0%, rgba(255, 255, 255, 0) 60%), radial-gradient(70% 90% at 0% 100%, rgba(14, 118, 189, 0.1) 0%, rgba(255, 255, 255, 0) 60%), var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
}

.aix-hero-body {
  position: relative;
  padding: 24px;
}

@media (min-width: 1400px) {
  .aix-hero-body {
    padding: 28px 32px;
  }
}

@media (max-width: 575.98px) {
  .aix-hero-body {
    padding: 20px;
  }
}

.aix-hero-title {
  margin: 0 0 8px;
  font-size: 28px;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.02em;
  color: var(--bs-emphasis-color);
}

@media (max-width: 991.98px) {
  .aix-hero-title {
    font-size: 23px;
  }
}

/* stat rail — figures, not KPI cards: no boxes, no icons, hairline dividers */
.aix-hero-rail {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 18px;
  padding-top: 18px;
  margin-top: 18px;
  border-top: 1px solid var(--bs-border-color);
}

@media (max-width: 767.98px) {
  .aix-hero-rail {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 20px;
  }
}

.aix-hero-stat {
  min-width: 0;
}

.aix-hero-stat+.aix-hero-stat {
  padding-left: 18px;
  border-left: 1px solid var(--bs-border-color);
}

@media (max-width: 767.98px) {
  .aix-hero-stat+.aix-hero-stat {
    padding-left: 0;
    border-left: 0;
  }
}

.aix-hero-val {
  display: flex;
  align-items: baseline;
  gap: 5px;
  margin: 2px 0 0;
  font-size: 21px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--bs-emphasis-color);
}

.aix-hero-val small {
  font-size: 12px;
  font-weight: 400;
  color: var(--bs-secondary-color);
}

/* illustration column */
.aix-hero-art {
  position: relative;
  display: grid;
  place-items: center;
  min-height: 196px;
  height: 100%;
  border-radius: var(--radius);
  background: linear-gradient(160deg, var(--tint-primary) 0%, var(--bs-body-bg) 70%);
  border: 1px solid var(--bs-border-color);
  overflow: hidden;
}

.aix-hero-art-core {
  position: relative;
  display: grid;
  place-items: center;
  width: 78px;
  height: 78px;
  border-radius: 50%;
  background: var(--bs-body-bg);
  box-shadow: var(--aix-glow);
  color: var(--bs-primary);
  font-size: 32px;
  z-index: 1;
}

/* concentric scanning rings behind the core */
.aix-hero-art-ring {
  position: absolute;
  border: 1px solid rgba(31, 59, 96, 0.18);
  border-radius: 50%;
}

.aix-hero-art-ring.r1 {
  width: 124px;
  height: 124px;
}

.aix-hero-art-ring.r2 {
  width: 170px;
  height: 170px;
  border-style: dashed;
  animation: aix-spin 34s linear infinite;
}

.aix-hero-art-ring.r3 {
  width: 218px;
  height: 218px;
  border-color: rgba(31, 59, 96, 0.1);
}

@keyframes aix-spin {
  to {
    rotate: 360deg;
  }
}

/* small chips that sit on the rings */
.aix-hero-chip {
  position: absolute;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border-radius: 999px;
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  box-shadow: var(--shadow);
  font-size: 11px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
  white-space: nowrap;
  z-index: 2;
}

.aix-hero-chip.c1 {
  top: 9%;
  left: 3%;
}

.aix-hero-chip.c2 {
  bottom: 11%;
  right: 3%;
}

.aix-hero-chip.c3 {
  top: 11%;
  right: 5%;
}

/* ---- workflow stepper: the page's own table of contents ---- */
.aix-wf {
  padding: 16px 24px 20px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
}

@media (max-width: 575.98px) {
  .aix-wf {
    padding: 16px 20px;
  }
}

.aix-wf-title {
  margin-bottom: 12px;
}

.aix-wf-rail {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 8px;
}

@media (max-width: 1199.98px) {
  .aix-wf-rail {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

@media (max-width: 575.98px) {
  .aix-wf-rail {
    grid-template-columns: minmax(0, 1fr);
  }
}

.aix-wf-step {
  position: relative;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  transition: border-color var(--transition), box-shadow var(--transition);
  /* connector between stages */

  .aix-wf-step:not(:last-child)::after {
    content: "";
    position: absolute;
    top: 50%;
    right: -8px;
    width: 8px;
    height: 8px;
    border-top: 1.5px solid var(--bs-border-color);
    border-right: 1.5px solid var(--bs-border-color);
    rotate: 45deg;
    translate: 0 -50%;
  }

  @media (max-width: 1199.98px) {
    .aix-wf-step:not(:last-child)::after {
      display: none;
    }
  }

  .aix-wf-step:hover,
  .aix-wf-step:focus-visible {
    border-color: var(--bs-primary);
    box-shadow: var(--shadow);
  }

  .aix-wf-step:hover .aix-wf-ic,
  .aix-wf-step:focus-visible .aix-wf-ic {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .aix-wf-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    color: var(--bs-emphasis-color);
    font-size: 16px;
    transition: background var(--transition), color var(--transition);
  }

  .aix-wf-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
  }

  .aix-wf-step-n {
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-primary);
  }

  .aix-wf-lbl {
    font-size: 13px;
    font-weight: 600;
    line-height: 1.3;
    color: var(--bs-emphasis-color);
  }

  .aix-wf-sub {
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   6. EXPLAINABLE AI PANEL + SIGNAL CHAIN
   ============================================================ */
  .aix-explain {
    position: relative;
    height: 100%;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    overflow: hidden;
    transition: box-shadow var(--transition), border-color var(--transition);
  }

  .aix-explain:hover {
    border-color: rgba(31, 59, 96, 0.35);
    box-shadow: var(--shadow-lift);
  }

  /* severity reads from the top edge, so the card is scannable before it is read */
  .aix-explain-accent::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 3px;
    z-index: 1;
    background: var(--bs-tertiary-bg);
  }

  .aix-explain-accent.is-critical::before {
    background: #E82646;
  }

  .aix-explain-accent.is-high::before {
    background: #EAB300;
  }

  .aix-explain-accent.is-medium::before {
    background: #0F65CD;
  }

  .aix-explain-head {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 16px 18px;
    background: linear-gradient(180deg, var(--tint-primary) 0%, var(--bs-body-bg) 100%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .aix-explain-body {
    padding: 18px;
  }

  .aix-explain-obs {
    margin: 0 0 6px;
    font-size: 16px;
    font-weight: 600;
    line-height: 1.4;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
  }

  /* the reasoning block — quoted, so it reads as generated text */
  .aix-why {
    position: relative;
    padding: 12px 14px 12px 16px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .aix-why::before {
    content: "";
    position: absolute;
    inset: 10px auto 10px 0;
    width: 3px;
    border-radius: 999px;
    background: var(--bs-primary);
    opacity: 0.5;
  }

  /* ---- supporting signals as a dense grid, not a stacked chain ----
   Four signals in two rows instead of four, which is most of the height
   the explanation card used to spend. */
  .aix-sig-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
  }

  .aix-sig {
    display: flex;
    align-items: center;
    gap: 9px;
    min-width: 0;
    padding: 9px 10px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    transition: border-color var(--transition), background var(--transition);
  }

  .aix-sig:hover {
    background: var(--bs-secondary-bg);
    border-color: rgba(31, 59, 96, 0.28);
  }

  .aix-sig-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    color: var(--bs-secondary-color);
    font-size: 13px;
  }

  .aix-sig-ic.is-critical {
    background: #FDE9ED;
    color: #E82646;
  }

  .aix-sig-ic.is-high {
    background: #FEF8EA;
    color: rgb(162.6, 124.3820512821, 0);
  }

  .aix-sig-ic.is-medium {
    background: #E7F1FC;
    color: #0F65CD;
  }

  .aix-sig-ic.is-positive {
    background: #E8F9E8;
    color: #1ABE17;
  }

  .aix-sig-txt {
    min-width: 0;
  }

  .aix-sig-lbl {
    display: block;
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .aix-sig-val {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1.35;
    color: var(--bs-emphasis-color);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* the suggested action, inline rather than as its own labelled block */
  .aix-act-line {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    padding: 11px 12px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    font-size: 13px;
    line-height: 1.55;
    color: var(--bs-emphasis-color);
  }

  /* small confidence ring that sits in the card head */
  .aix-conf-ring-sm {
    width: 44px;
    height: 44px;
  }

  .aix-conf-ring-sm::before {
    inset: 4px;
  }

  .aix-conf-ring-sm .aix-conf-ring-in {
    font-size: 11px;
  }

  /* supporting signals as a vertical chain with connectors */
  .aix-chain {
    display: flex;
    flex-direction: column;
    gap: 0;
  }

  .aix-chain-step {
    position: relative;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 9px 0;
  }

  .aix-chain-step:not(:last-child)::after {
    content: "";
    position: absolute;
    top: 34px;
    left: 13px;
    bottom: -4px;
    width: 1px;
    background: var(--bs-border-color);
  }

  .aix-chain-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    color: var(--bs-secondary-color);
    font-size: 14px;
    z-index: 1;
  }

  .aix-chain-ic.is-critical {
    background: #FDE9ED;
    color: #E82646;
  }

  .aix-chain-ic.is-high {
    background: #FEF8EA;
    color: rgb(162.6, 124.3820512821, 0);
  }

  .aix-chain-ic.is-medium {
    background: #E7F1FC;
    color: #0F65CD;
  }

  .aix-chain-txt {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .aix-chain-val {
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
  }

  /* outcome strip at the foot of an explanation */
  .aix-outcome {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 20px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
  }

  /* ============================================================
   7. INSIGHT CARDS
   ============================================================ */
  .aix-insight {
    position: relative;
    height: 100%;
    padding: 20px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    transition: transform var(--transition), box-shadow var(--transition);
  }

  .aix-insight:hover {
    transform: translateY(-2px);
    box-shadow: var(--shadow-lift);
  }

  .aix-insight-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 14px;
  }

  .aix-insight-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    color: var(--bs-emphasis-color);
    font-size: 18px;
  }

  .aix-insight-txt {
    margin: 0;
    font-size: 14px;
    line-height: 1.65;
    color: var(--bs-emphasis-color);
  }

  .aix-insight-txt b {
    font-weight: 600;
  }

  .aix-insight-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: 16px;
    padding-top: 14px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   8. RECOMMENDATION CARDS
   ============================================================ */
  .aix-rec {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    overflow: hidden;
    transition: transform var(--transition), box-shadow var(--transition);
  }

  .aix-rec::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 3px;
    background: var(--bs-primary);
    opacity: 0;
    transition: opacity var(--transition);
  }

  .aix-rec:hover {
    transform: translateY(-2px);
    box-shadow: var(--shadow-lift);
  }

  .aix-rec:hover::before {
    opacity: 1;
  }

  .aix-rec-head {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 16px 16px 0;
  }

  .aix-rec-body {
    flex: 1 1 auto;
    padding: 12px 16px 16px;
  }

  .aix-rec-title {
    margin: 0 0 4px;
    font-size: 15px;
    font-weight: 600;
    line-height: 1.35;
    color: var(--bs-emphasis-color);
  }

  /* Impact and timeline sit on one line with a hairline between them.
   This replaces a three-cell bordered grid that cost ~110px in a card
   only 300px wide. */
  .aix-rec-stats {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 12px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    overflow: hidden;
  }

  .aix-rec-stat {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    padding: 9px 11px;
    background: var(--bs-body-bg);
  }

  .aix-rec-stat+.aix-rec-stat {
    border-left: 1px solid var(--bs-border-color);
  }

  .aix-rec-stat i {
    flex-shrink: 0;
    font-size: 15px;
    color: var(--bs-secondary-color);
  }

  .aix-rec-stat-txt {
    min-width: 0;
  }

  .aix-rec-stat-lbl {
    display: block;
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
    white-space: nowrap;
  }

  .aix-rec-stat-val {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    line-height: 1.35;
    color: var(--bs-emphasis-color);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .aix-rec-foot {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
  }

  /* ============================================================
   9. STUDENT INTELLIGENCE (PROFILE) CARDS
   ============================================================ */
  .aix-profile {
    position: relative;
    display: grid;
    grid-template-columns: 268px minmax(0, 1fr) 232px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    overflow: hidden;
    transition: box-shadow var(--transition), border-color var(--transition);
  }

  .aix-profile:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  @media (max-width: 1399.98px) {
    .aix-profile {
      grid-template-columns: 248px minmax(0, 1fr);
    }
  }

  @media (max-width: 767.98px) {
    .aix-profile {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  .aix-profile-media {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 20px;
    background: linear-gradient(180deg, var(--tint-primary) 0%, var(--bs-body-bg) 100%);
    border-right: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .aix-profile-media {
      border-right: 0;
      border-bottom: 1px solid var(--bs-border-color);
    }
  }

  .aix-profile-main {
    padding: 20px;
    min-width: 0;
  }

  .aix-profile-side {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 20px;
    background: var(--bs-secondary-bg);
    border-left: 1px solid var(--bs-border-color);
  }

  @media (max-width: 1399.98px) {
    .aix-profile-side {
      grid-column: 1/-1;
      flex-direction: row;
      flex-wrap: wrap;
      border-left: 0;
      border-top: 1px solid var(--bs-border-color);
    }
  }

  .aix-profile-name {
    margin: 0;
    font-size: 17px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
  }

  /* the risk score readout */
  .aix-score {
    display: flex;
    align-items: baseline;
    gap: 4px;
    font-size: 30px;
    font-weight: 700;
    line-height: 1;
    color: var(--bs-emphasis-color);
  }

  .aix-score small {
    font-size: 12px;
    font-weight: 400;
    color: var(--bs-secondary-color);
  }

  /* compact horizontal risk timeline built from bars */
  .aix-mini {
    display: flex;
    align-items: flex-end;
    gap: 3px;
    height: 34px;
  }

  .aix-mini i {
    flex: 1 1 auto;
    min-width: 4px;
    height: calc(var(--v, 30) * 1%);
    border-radius: 2px;
    background: var(--bs-tertiary-bg);
  }

  .aix-mini i.is-critical {
    background: #E82646;
  }

  .aix-mini i.is-high {
    background: #EAB300;
  }

  .aix-mini i.is-medium {
    background: #0F65CD;
  }

  .aix-mini i.is-positive {
    background: #1ABE17;
  }

  /* a labelled fact row used inside profile and side panels */
  .aix-fact {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 8px 0;
  }

  .aix-fact+.aix-fact {
    border-top: 1px solid var(--bs-border-color);
  }

  /* ---- case status strip ----
   The lifecycle facts of a case (age, stage, next review). Deliberately not
   built from .aix-fact: three space-between rows sitting side by side read as
   a second copy of the owners row above and leave a ragged gap between each
   label and its value. This is one enclosed bar with hairline dividers, so it
   reads as case metadata rather than as more content. */
  .aix-caseline {
    display: flex;
    flex-wrap: wrap;
    align-items: stretch;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    overflow: hidden;
  }

  .aix-caseline-item {
    display: flex;
    align-items: center;
    gap: 10px;
    flex: 1 1 0;
    min-width: 148px;
    padding: 10px 14px;
  }

  .aix-caseline-item+.aix-caseline-item {
    border-left: 1px solid var(--bs-border-color);
  }

  .aix-caseline-item i {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 15px;
  }

  .aix-caseline-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
    line-height: 1.35;
  }

  .aix-caseline-txt span:first-child {
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .aix-caseline-txt span:last-child {
    font-size: 13px;
    font-weight: 500;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .aix-caseline-item+.aix-caseline-item {
      border-left: 0;
      border-top: 1px solid var(--bs-border-color);
    }
  }

  .aix-person {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
  }

  /* ---- secondary actions inside the profile action rail ----
   The rail is a fixed column while the middle drives the height, so it
   almost always has room left over. These fill it with the actions that
   belong to the case rather than with padding. */
  .aix-quick-grid {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    /* the tooltip wrapper each button sits in */
  }

  .aix-quick-grid>span {
    display: inline-flex;
  }

  .aix-quick-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    flex-shrink: 0;
    border: 1px solid var(--bs-border-color);
    border-radius: 50%;
    background: var(--bs-body-bg);
    color: var(--bs-emphasis-color);
    font-size: 17px;
    transition: border-color var(--transition), background var(--transition), color var(--transition);
  }

  .aix-quick-btn:hover,
  .aix-quick-btn:focus-visible {
    border-color: rgba(31, 59, 96, 0.35);
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  /* case status, pinned to the foot of the rail */
  .aix-side-foot {
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 1399.98px) {
    .aix-side-foot {
      flex: 1 1 100%;
      margin-top: 0;
    }
  }

  /* ============================================================
   10. WORKFLOW CARDS
   ============================================================ */
  .aix-flow {
    position: relative;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    overflow: hidden;
  }

  .aix-flow-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 14px;
    padding: 18px 20px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .aix-flow-body {
    padding: 20px;
  }

  /* horizontal stage rail with connectors */
  .aix-steps {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 8px;
  }

  @media (max-width: 1199.98px) {
    .aix-steps {
      grid-template-columns: repeat(4, minmax(0, 1fr));
    }
  }

  @media (max-width: 575.98px) {
    .aix-steps {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .aix-step {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    padding: 14px 10px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    text-align: center;
    transition: background var(--transition);
  }

  .aix-step:hover {
    background: var(--bs-tertiary-bg);
  }

  /* connector */

  .aix-step:not(:last-child)::after {
    content: "";
    position: absolute;
    top: 31px;
    right: -8px;
    width: 8px;
    height: 1px;
    background: var(--bs-border-color);
  }

  @media (max-width: 1199.98px) {
    .aix-step:not(:last-child)::after {
      display: none;
    }
  }

  .aix-step.is-done {
    background: #E8F9E8;
  }

  .aix-step.is-active {
    background: var(--tint-primary);
    box-shadow: inset 0 0 0 1px rgba(31, 59, 96, 0.28);
  }

  .aix-step-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    color: var(--bs-secondary-color);
    font-size: 16px;
  }

  .is-done .aix-step-ic {
    color: #1ABE17;
  }

  .is-active .aix-step-ic {
    color: var(--bs-primary);
  }

  .aix-step-lbl {
    margin: 0;
    font-size: 12px;
    font-weight: 500;
    line-height: 1.35;
    color: var(--bs-emphasis-color);
  }

  .aix-step-sub {
    margin: 0;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   11. ACTIVITY TIMELINE
   ============================================================ */
  .aix-tl {
    position: relative;
    margin: 0;
    padding: 0;
    list-style: none;
  }

  .aix-tl-item {
    position: relative;
    display: grid;
    grid-template-columns: 36px minmax(0, 1fr);
    gap: 14px;
    padding-bottom: 22px;
  }

  .aix-tl-item:last-child {
    padding-bottom: 0;
  }

  /* the rail */

  .aix-tl-item:not(:last-child)::before {
    content: "";
    position: absolute;
    top: 38px;
    left: 17px;
    bottom: 0;
    width: 1px;
    background: var(--bs-border-color);
  }

  .aix-tl-dot {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    color: var(--bs-secondary-color);
    font-size: 16px;
    z-index: 1;
  }

  .aix-tl-dot.is-done {
    background: #E8F9E8;
    color: #1ABE17;
  }

  .aix-tl-dot.is-active {
    background: var(--tint-primary);
    color: var(--bs-primary);
    box-shadow: 0 0 0 4px rgba(31, 59, 96, 0.1);
  }

  .aix-tl-title {
    margin: 0 0 2px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   12. ACTION CENTER
   ============================================================ */
  .aix-action {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    padding: 14px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    transition: background var(--transition), border-color var(--transition);
  }

  .aix-action:hover {
    background: var(--bs-tertiary-bg);
    border-color: rgba(31, 59, 96, 0.28);
  }

  .aix-action+.aix-action {
    margin-top: 12px;
  }

  .aix-action-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   13. RESOURCE CARDS
   ============================================================ */
  .aix-res {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    height: 100%;
    padding: 18px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    cursor: pointer;
    transition: transform var(--transition), box-shadow var(--transition);
  }

  .aix-res:hover {
    transform: translateY(-2px);
    box-shadow: var(--shadow-lift);
  }

  .aix-res:hover .aix-res-go {
    color: var(--bs-primary);
    translate: 2px 0;
  }

  .aix-res-go {
    color: var(--bs-secondary-color);
    transition: color var(--transition), translate var(--transition);
  }

  /* ============================================================
   14. COPILOT WORKSPACE
   ============================================================ */
  .aix-copilot {
    position: relative;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: radial-gradient(80% 120% at 100% 0%, rgba(31, 59, 96, 0.1) 0%, rgba(255, 255, 255, 0) 60%), var(--bs-body-bg);
    box-shadow: var(--shadow);
    overflow: hidden;
  }

  .aix-copilot-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 16px;
    padding: 22px 24px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .aix-copilot-body {
    padding: 24px;
  }

  .aix-act {
    display: flex;
    flex-direction: column;
    gap: 10px;
    height: 100%;
    padding: 16px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    text-align: left;
    transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
  }

  .aix-act:hover {
    transform: translateY(-2px);
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  .aix-act-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 17px;
  }

  /* ============================================================
   15. PREMIUM ACCORDION / OFFCANVAS / MODAL
   ============================================================ */
  .aix-acc {
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    overflow: hidden;
  }

  .aix-acc .accordion-item {
    border: 0;
    border-bottom: 1px solid var(--bs-border-color);
    background: transparent;
  }

  .aix-acc .accordion-item:last-child {
    border-bottom: 0;
  }

  .aix-acc .accordion-button {
    padding: 14px 16px;
    font-size: 14px;
    font-weight: 500;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    box-shadow: none;
  }

  .aix-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .aix-acc .accordion-button:focus {
    box-shadow: none;
  }

  .aix-acc .accordion-body {
    padding: 16px;
    font-size: 13px;
    line-height: 1.7;
    color: var(--bs-secondary-color);
    background: var(--bs-body-bg);
  }

  .aix-canvas .offcanvas-header {
    padding: 20px;
    background: linear-gradient(180deg, var(--tint-primary) 0%, var(--bs-body-bg) 100%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .aix-canvas .offcanvas-body {
    padding: 20px;
  }

  .aix-canvas .offcanvas-footer {
    padding: 16px 20px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
  }

  .aix-modal .modal-content {
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    overflow: hidden;
  }

  .aix-modal .modal-header {
    padding: 20px;
    background: linear-gradient(180deg, var(--tint-primary) 0%, var(--bs-body-bg) 100%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .aix-modal .modal-body {
    padding: 20px;
  }

  .aix-modal .modal-footer {
    padding: 16px 20px;
    background: var(--bs-secondary-bg);
  }

  /* ============================================================
   16. CASE QUEUE + CASE WORKSPACE
   The scalable pattern: the page lists cases, the workspace holds the
   detail. One offcanvas serves every case, so the page length is the same
   whether the engine flags 10 students or 500.
   ============================================================ */
  /* ---- the workspace shell ---- */
  /* The case workspace needs most of the viewport. The theme already sets
   `.offcanvas.offcanvas-end { width: auto !important }`, which is two classes
   and !important, so a single-class rule cannot win however it is written.
   Matching all three classes outranks it without editing the shared partial. */
  .offcanvas.offcanvas-end.aix-canvas-xl {
    width: 88% !important;
    max-width: 1440px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.aix-canvas-xl {
      width: 100% !important;
    }
  }

  /* record highlights panel, the Salesforce-style header */
  .aix-record {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 16px;
    padding: 18px 24px;
    background: linear-gradient(180deg, var(--tint-primary) 0%, var(--bs-body-bg) 100%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .aix-record-stats {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    overflow: hidden;
  }

  @media (max-width: 767.98px) {
    .aix-record-stats {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .aix-record-stat {
    padding: 9px 14px;
    min-width: 0;
  }

  .aix-record-stat+.aix-record-stat {
    border-left: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .aix-record-stat:nth-child(3) {
      border-left: 0;
    }
  }

  /* ---- horizontal stepper ---- */
  .aix-stepper {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 8px;
    padding: 14px 24px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
    list-style: none;
    margin: 0;
  }

  @media (max-width: 991.98px) {
    .aix-stepper {
      grid-template-columns: repeat(3, minmax(0, 1fr));
    }
  }

  @media (max-width: 575.98px) {
    .aix-stepper {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .aix-stepper-btn {
    position: relative;
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    text-align: left;
    transition: border-color var(--transition), background var(--transition), box-shadow var(--transition);
    /* connector between steps */
  }

  .aix-stepper-btn::after {
    content: "";
    position: absolute;
    top: 50%;
    right: -8px;
    width: 8px;
    height: 8px;
    border-top: 1.5px solid var(--bs-border-color);
    border-right: 1.5px solid var(--bs-border-color);
    rotate: 45deg;
    translate: 0 -50%;
  }

  @media (max-width: 991.98px) {
    .aix-stepper-btn::after {
      display: none;
    }
  }

  .aix-stepper-btn:hover {
    border-color: rgba(31, 59, 96, 0.35);
  }

  .aix-stepper-btn.active {
    border-color: var(--bs-primary);
    background: var(--bs-body-bg);
    box-shadow: inset 0 0 0 1px var(--bs-primary);
  }

  .aix-stepper-btn.active .aix-stepper-ic {
    background: var(--bs-primary);
    color: #fff;
  }

  .aix-stepper-btn.active .aix-stepper-lbl {
    color: var(--bs-primary);
  }

  .nav-item:last-child .aix-stepper-btn::after {
    display: none;
  }

  .aix-stepper-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    color: var(--bs-secondary-color);
    font-size: 14px;
    font-weight: 600;
    transition: background var(--transition), color var(--transition);
  }

  .aix-stepper-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
  }

  .aix-stepper-n {
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .aix-stepper-lbl {
    font-size: 13px;
    font-weight: 600;
    line-height: 1.3;
    color: var(--bs-emphasis-color);
    transition: color var(--transition);
  }

  /* ---- panes ---- */
  .aix-pane-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  /* a plain bordered block used throughout the panes */
  .aix-block {
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    overflow: hidden;
    height: 100%;
  }

  .aix-block-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
  }

  .aix-block-body {
    padding: 16px;
  }

  /* ============================================================
   17. EMPTY STATES
   ============================================================ */
  .aix-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    padding: 36px 24px;
    border: 1px dashed var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
  }

  .aix-empty-art {
    position: relative;
    display: grid;
    place-items: center;
    width: 64px;
    height: 64px;
    margin-bottom: 14px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 26px;
  }

  .aix-empty-art::after {
    content: "";
    position: absolute;
    inset: -8px;
    border: 1px dashed var(--bs-border-color);
    border-radius: 50%;
  }

  .aix-empty-title {
    margin: 0 0 4px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   17. ATTENDANCE INTELLIGENCE  —  prefix `atn-`

   A second component family in the same library, sharing the tokens above
   but with a deliberately different visual language from the `aix-` family:

     aix-  enclosed cards, hairline dividers, chevron steppers, left rails
     atn-  banded surfaces, a vertical signal spine, square heat cells,
           numbered rail steps and arc gauges

   Nothing here overrides an `aix-` rule, so the two can coexist on a page
   without either winning by accident.
   ============================================================ */
  @media (prefers-reduced-motion: reduce) {

    [class*=atn-],
    [class*=atn-]::before,
    [class*=atn-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- section framing ---------------------------------------------------
   Sections announce themselves with a rule and a number rather than with
   an icon tile, so the page reads as a document of findings. */
  .atn-sec {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 16px;
    padding-bottom: 14px;
    margin-bottom: 24px;
    border-bottom: 2px solid var(--bs-emphasis-color);
  }

  .atn-sec-n {
    display: block;
    margin-bottom: 6px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--bs-primary);
  }

  .atn-sec-title {
    margin: 0;
    font-size: 20px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .atn-sec-sub {
    margin: 4px 0 0;
    font-size: 13px;
    color: var(--bs-secondary-color);
    max-width: 620px;
  }

  /* small caps label, used inside every atn component */
  .atn-lbl {
    display: block;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* ---- confidence chip ---------------------------------------------------
   Reads as a measurement, not a badge: monospaced-feel figure with a rule
   under it that fills to the value carried by `.aix-p-*`. */
  .atn-conf {
    display: inline-flex;
    flex-direction: column;
    gap: 4px;
    min-width: 62px;
  }

  .atn-conf b {
    font-size: 14px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
    line-height: 1;
  }

  .atn-conf::after {
    content: "";
    display: block;
    height: 3px;
    border-radius: 2px;
    background: linear-gradient(90deg, var(--bs-primary) 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  /* ---- severity / status pills ------------------------------------------- */
  .atn-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    border: 1px solid transparent;
    white-space: nowrap;
  }

  .atn-pill i {
    font-size: 13px;
  }

  .atn-pill.is-critical {
    color: #E82646;
    background: #FDE9ED;
    border-color: #FAD4DA;
  }

  .atn-pill.is-high {
    color: #EAB300;
    background: #FEF8EA;
    border-color: #FDF1D6;
  }

  .atn-pill.is-watch {
    color: #0F65CD;
    background: #E7F1FC;
    border-color: #CFE2FA;
  }

  .atn-pill.is-good {
    color: #1ABE17;
    background: #E8F9E8;
    border-color: #D1F2D1;
  }

  .atn-pill.is-ai {
    color: var(--bs-primary);
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.22);
  }

  /* live status dot */
  .atn-live {
    position: relative;
    display: inline-block;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: #1ABE17;
  }

  .atn-live::after {
    content: "";
    position: absolute;
    inset: -4px;
    border-radius: 50%;
    border: 1px solid #1ABE17;
    opacity: 0;
    animation: atn-ping 2.4s ease-out infinite;
  }

  @keyframes atn-ping {
    0% {
      transform: scale(0.6);
      opacity: 0.9;
    }

    100% {
      transform: scale(1.5);
      opacity: 0;
    }
  }

  /* ============================================================
   HERO — split workspace: gauge on the left, live feed on the right
   ============================================================ */
  .atn-hero {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius);
    background: radial-gradient(120% 140% at 0% 0%, rgba(31, 59, 96, 0.1) 0%, rgba(31, 59, 96, 0) 55%), radial-gradient(100% 120% at 100% 0%, rgba(2, 168, 181, 0.1) 0%, rgba(2, 168, 181, 0) 50%), var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* a faint grid so the surface reads as an instrument panel */
  .atn-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: linear-gradient(var(--bs-border-color) 1px, transparent 1px), linear-gradient(90deg, var(--bs-border-color) 1px, transparent 1px);
    background-size: 46px 46px;
    opacity: 0.35;
    mask-image: radial-gradient(120% 100% at 50% 0%, #000 0%, transparent 75%);
    pointer-events: none;
  }

  .atn-hero-inner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 336px;
    gap: 32px;
    padding: 26px 28px;
  }

  @media (max-width: 1199.98px) {
    .atn-hero-inner {
      grid-template-columns: minmax(0, 1fr);
      gap: 24px;
    }
  }

  @media (max-width: 575.98px) {
    .atn-hero-inner {
      padding: 20px;
    }
  }

  .atn-hero-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 5px 12px 5px 8px;
    border-radius: 999px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .atn-hero-title {
    margin: 14px 0 8px;
    font-size: 30px;
    line-height: 1.22;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .atn-hero-title em {
    font-style: normal;
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  @media (max-width: 767.98px) {
    .atn-hero-title {
      font-size: 24px;
    }
  }

  /* health meter — one continuous band, not four stat boxes */
  .atn-meter {
    margin-top: 20px;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .atn-meter-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 12px;
  }

  .atn-meter-head b {
    font-size: 24px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .atn-meter-head b small {
    font-size: 13px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  .atn-meter-band {
    display: flex;
    gap: 3px;
    height: 26px;
  }

  .atn-meter-band span {
    flex: 1 1 0;
    border-radius: 3px;
    background: var(--bs-tertiary-bg);
    transition: var(--transition);
  }

  .atn-meter-band span.is-on {
    background: linear-gradient(180deg, var(--bs-primary), rgba(31, 59, 96, 0.72));
  }

  .atn-meter-band span.is-warn {
    background: #EAB300;
  }

  .atn-meter-band span.is-bad {
    background: #E82646;
  }

  .atn-meter-scale {
    display: flex;
    justify-content: space-between;
    margin-top: 8px;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  /* hero figures sit on a single inline row, divided by dots not boxes */
  .atn-hero-facts {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px 20px;
    margin-top: 18px;
    font-size: 13px;
    color: var(--bs-secondary-color);
  }

  .atn-hero-facts span b {
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ---- right column: gauge + live feed ---- */
  .atn-hero-panel {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--aix-glow);
  }

  .atn-gauge {
    position: relative;
    width: 168px;
    height: 92px;
    margin: 4px auto 0;
    overflow: hidden;
  }

  /* The dial is a conic sweep starting at 9 o'clock, so a half turn (180deg)
   is a full reading and `--p` maps to degrees at 1.8 per percent. The hole is
   cut with a radial mask rather than an overlaid disc, so the hero's tinted
   background shows through the middle. */
  .atn-gauge::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    width: 168px;
    height: 168px;
    border-radius: 50%;
    background: conic-gradient(from 270deg, var(--bs-primary) 0deg calc(var(--p, 0) * 1.8deg), var(--bs-tertiary-bg) calc(var(--p, 0) * 1.8deg) 180deg, transparent 180deg 360deg);
    -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 14px), #000 calc(100% - 14px));
    mask: radial-gradient(farthest-side, transparent calc(100% - 14px), #000 calc(100% - 14px));
  }

  .atn-gauge-val {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 2px;
    text-align: center;
    font-size: 26px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
    line-height: 1;
  }

  .atn-gauge-val small {
    display: block;
    margin-top: 4px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* live prediction feed — ticker rows, each with a leading time */
  .atn-feed {
    display: flex;
    flex-direction: column;
    border-top: 1px solid var(--bs-border-color);
  }

  .atn-feed-row {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 12px;
  }

  .atn-feed-row+.atn-feed-row {
    border-top: 1px dashed var(--bs-border-color);
  }

  .atn-feed-row time {
    flex-shrink: 0;
    width: 42px;
    font-variant-numeric: tabular-nums;
    color: var(--bs-secondary-color);
  }

  .atn-feed-row p {
    margin: 0;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   CASE CARDS — compact 3-up grid with a delta band and heat strip
   ============================================================ */
  .atn-case {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .atn-case:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  /* the delta band is the card's identity: current -> predicted, in colour */
  .atn-case-band {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 16px;
    color: #fff;
    background: linear-gradient(90deg, #202C4B, rgba(32, 44, 75, 0.82));
  }

  .atn-case-band.is-critical {
    background: linear-gradient(90deg, #E82646, rgba(232, 38, 70, 0.8));
  }

  .atn-case-band.is-high {
    background: linear-gradient(90deg, #EAB300, rgba(234, 179, 0, 0.8));
  }

  .atn-case-band.is-watch {
    background: linear-gradient(90deg, #0F65CD, rgba(15, 101, 205, 0.8));
  }

  .atn-case-delta {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 18px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    line-height: 1;
  }

  .atn-case-delta i {
    font-size: 16px;
    opacity: 0.85;
  }

  .atn-case-delta small {
    font-size: 11px;
    font-weight: 500;
    opacity: 0.85;
  }

  .atn-case-body {
    display: flex;
    flex-direction: column;
    gap: 14px;
    flex: 1 1 auto;
    padding: 16px;
  }

  .atn-case-name {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* 12-week heat strip — square cells, four intensities */
  .atn-heat {
    display: flex;
    gap: 3px;
  }

  .atn-heat i {
    flex: 1 1 0;
    height: 18px;
    border-radius: 3px;
    background: var(--bs-tertiary-bg);
  }

  .atn-heat i.h1 {
    background: rgba(31, 59, 96, 0.22);
  }

  .atn-heat i.h2 {
    background: rgba(31, 59, 96, 0.45);
  }

  .atn-heat i.h3 {
    background: rgba(31, 59, 96, 0.7);
  }

  .atn-heat i.h4 {
    background: var(--bs-primary);
  }

  .atn-heat i.m1 {
    background: #FDE9ED;
  }

  .atn-heat i.m2 {
    background: #F8BEC8;
  }

  .atn-heat i.m3 {
    background: #E82646;
  }

  .atn-case-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
    padding: 12px 0;
    border-top: 1px solid var(--bs-border-color);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .atn-case-foot {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* round icon-only secondary actions */
  .atn-ico-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 16px;
    transition: var(--transition);
  }

  .atn-ico-btn:hover {
    color: var(--bs-primary);
    border-color: var(--bs-primary);
    background: var(--tint-primary);
  }

  /* ============================================================
   SIGNAL SPINE — the explainable-AI cascade
   A vertical chain of nodes joined by a drawn line, so the causal
   order the AI followed is the layout itself.
   ============================================================ */
  .atn-spine {
    position: relative;
    padding-left: 34px;
  }

  .atn-spine::before {
    content: "";
    position: absolute;
    left: 13px;
    top: 10px;
    bottom: 10px;
    width: 2px;
    background: linear-gradient(180deg, var(--bs-primary), rgba(31, 59, 96, 0.12));
  }

  .atn-node {
    position: relative;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .atn-node+.atn-node {
    margin-top: 14px;
  }

  .atn-node:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow);
  }

  /* the marker sits on the spine */

  .atn-node::before {
    content: "";
    position: absolute;
    left: -27px;
    top: 20px;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 3px solid var(--bs-primary);
  }

  .atn-node.is-critical::before {
    border-color: #E82646;
  }

  .atn-node.is-high::before {
    border-color: #EAB300;
  }

  .atn-node.is-watch::before {
    border-color: #0F65CD;
  }

  .atn-node-obs {
    margin: 0 0 6px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .atn-node-why {
    margin: 0 0 12px;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* supporting signals read as inline evidence tags */
  .atn-sigs {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
  }

  .atn-sigs span {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 10px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 12px;
    color: var(--bs-emphasis-color);
  }

  .atn-sigs span i {
    font-size: 13px;
    color: var(--bs-secondary-color);
  }

  .atn-node-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px dashed var(--bs-border-color);
  }

  /* expected improvement figure */
  .atn-gain {
    display: inline-flex;
    align-items: baseline;
    gap: 4px;
    font-size: 15px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: #1ABE17;
  }

  .atn-gain small {
    font-size: 11px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   RECOMMENDATIONS — priority-ranked rows with a leading rank number
   ============================================================ */
  .atn-rec {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    height: 100%;
    padding: 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .atn-rec:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  .atn-rec-rank {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 14px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .atn-rec-title {
    margin: 0 0 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .atn-rec-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 16px;
    margin-top: 10px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  .atn-rec-meta b {
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   RECOVERY RAIL — 7 numbered stations on a drawn track
   ============================================================ */
  .atn-rail {
    position: relative;
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 8px;
  }

  @media (max-width: 1199.98px) {
    .atn-rail {
      grid-template-columns: repeat(4, minmax(0, 1fr));
      row-gap: 22px;
    }
  }

  @media (max-width: 575.98px) {
    .atn-rail {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .atn-station {
    position: relative;
    text-align: center;
    padding-top: 42px;
    /* the track segment */
  }

  .atn-station::before {
    content: "";
    position: absolute;
    left: 50%;
    right: -50%;
    top: 16px;
    height: 2px;
    background: var(--bs-tertiary-bg);
  }

  .atn-station:last-child::before {
    display: none;
  }

  .atn-station.is-done::before {
    background: #1ABE17;
  }

  /* the station marker */

  .atn-station::after {
    content: attr(data-n);
    position: absolute;
    left: 50%;
    top: 0;
    transform: translateX(-50%);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-tertiary-bg);
    color: var(--bs-secondary-color);
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .atn-station.is-done::after {
    background: #1ABE17;
    border-color: #1ABE17;
    color: #fff;
  }

  .atn-station.is-now::after {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  @media (max-width: 1199.98px) {
    .atn-station::before {
      display: none;
    }
  }

  .atn-station-lbl {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .atn-station-sub {
    display: block;
    margin-top: 2px;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   COPILOT LAUNCHER — six large action tiles
   ============================================================ */
  .atn-launch {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 10px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .atn-launch::after {
    content: "";
    position: absolute;
    right: -32px;
    top: -32px;
    width: 96px;
    height: 96px;
    border-radius: 50%;
    background: var(--tint-primary);
    opacity: 0;
    transition: var(--transition);
  }

  .atn-launch:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  .atn-launch:hover::after {
    opacity: 1;
  }

  .atn-launch:hover .atn-launch-ic {
    color: #fff;
    background: var(--bs-primary);
    border-color: var(--bs-primary);
  }

  .atn-launch-ic {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    border: 1px solid transparent;
    color: var(--bs-primary);
    font-size: 20px;
    transition: var(--transition);
  }

  .atn-launch-title {
    position: relative;
    z-index: 1;
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   INTELLIGENCE NOTES — findings written as quoted AI statements
   ============================================================ */
  .atn-note {
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-left: 3px solid var(--bs-primary);
    transition: var(--transition);
  }

  .atn-note:hover {
    box-shadow: var(--shadow-lift);
  }

  .atn-note.is-good {
    border-left-color: #1ABE17;
  }

  .atn-note.is-warn {
    border-left-color: #EAB300;
  }

  .atn-note.is-bad {
    border-left-color: #E82646;
  }

  .atn-note-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 10px;
  }

  .atn-note-fig {
    display: block;
    margin-bottom: 6px;
    font-size: 26px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    line-height: 1;
    color: var(--bs-emphasis-color);
  }

  .atn-note-txt {
    margin: 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   SUCCESS CARDS — celebratory, tinted, avatar-led
   ============================================================ */
  .atn-win {
    position: relative;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: linear-gradient(160deg, #E8F9E8 0%, var(--bs-body-bg) 62%);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .atn-win-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    margin-bottom: 12px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: #1ABE17;
    font-size: 18px;
  }

  .atn-win-fig {
    display: block;
    font-size: 24px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    line-height: 1;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   AUDIT TIMELINE — alternating, centred on a rule
   ============================================================ */
  .atn-tl {
    position: relative;
    padding: 4px 0;
  }

  .atn-tl::before {
    content: "";
    position: absolute;
    left: 50%;
    top: 0;
    bottom: 0;
    width: 2px;
    margin-left: -1px;
    background: var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .atn-tl::before {
      left: 11px;
      margin-left: 0;
    }
  }

  .atn-tl-item {
    position: relative;
    width: 50%;
    padding-right: 40px;
    margin-bottom: 20px;
  }

  .atn-tl-item:nth-child(even) {
    margin-left: 50%;
    padding-right: 0;
    padding-left: 40px;
    text-align: left;
  }

  .atn-tl-item:nth-child(odd) {
    text-align: right;
  }

  /* the knot on the centre rule */

  .atn-tl-item::before {
    content: "";
    position: absolute;
    top: 16px;
    width: 13px;
    height: 13px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 3px solid var(--bs-primary);
    z-index: 1;
  }

  .atn-tl-item:nth-child(odd)::before {
    right: -6px;
  }

  .atn-tl-item:nth-child(even)::before {
    left: -7px;
  }

  .atn-tl-item.is-good::before {
    border-color: #1ABE17;
  }

  .atn-tl-item.is-warn::before {
    border-color: #EAB300;
  }

  .atn-tl-item.is-bad::before {
    border-color: #E82646;
  }

  @media (max-width: 767.98px) {
    .atn-tl-item {
      width: 100%;
      margin-left: 0 !important;
      padding-left: 40px !important;
      padding-right: 0 !important;
      text-align: left !important;
    }

    .atn-tl-item::before {
      left: 5px !important;
      right: auto !important;
    }
  }

  .atn-tl-card {
    display: inline-block;
    text-align: left;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .atn-tl-card:hover {
    box-shadow: var(--shadow);
  }

  .atn-tl-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   RESOURCE TILES — link rows with a trailing arrow
   ============================================================ */
  .atn-res {
    display: flex;
    align-items: center;
    gap: 14px;
    height: 100%;
    padding: 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .atn-res:hover {
    border-color: rgba(31, 59, 96, 0.3);
    background: var(--bs-secondary-bg);
  }

  .atn-res:hover .atn-res-go {
    transform: translateX(3px);
    color: var(--bs-primary);
  }

  .atn-res-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .atn-res-go {
    flex-shrink: 0;
    color: var(--bs-secondary-color);
    font-size: 17px;
    transition: var(--transition);
  }

  /* ============================================================
   WORKSPACE OFFCANVAS — numbered stepper with a progress rule
   ============================================================ */
  .offcanvas.offcanvas-end.atn-ws {
    width: 88% !important;
    max-width: 1400px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.atn-ws {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.atn-ws .offcanvas-body {
    padding: 22px;
  }

  .atn-ws-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 18px;
    padding: 20px 22px;
    background: linear-gradient(180deg, var(--tint-primary) 0%, var(--bs-body-bg) 100%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .atn-ws-figs {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 28px;
  }

  /* the stepper: numbers on a rule, panes below */
  .atn-steps {
    position: relative;
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 6px;
    padding: 18px 22px 20px;
    border-bottom: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
    list-style: none;
    margin: 0;
  }

  @media (max-width: 767.98px) {
    .atn-steps {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      row-gap: 14px;
    }
  }

  .atn-step {
    position: relative;
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 8px 10px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    text-align: left;
    transition: var(--transition);
  }

  .atn-step:hover {
    background: var(--bs-body-bg);
  }

  /* connector between numbers */

  .atn-step::after {
    content: "";
    position: absolute;
    left: calc(100% + 3px);
    top: 50%;
    width: 6px;
    height: 2px;
    background: var(--bs-border-color);
  }

  .atn-step.is-last::after {
    display: none;
  }

  @media (max-width: 767.98px) {
    .atn-step::after {
      display: none;
    }
  }

  .atn-step-n {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    transition: var(--transition);
  }

  .atn-step-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
    line-height: 1.3;
  }

  .atn-step-txt span:first-child {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .atn-step-txt span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .atn-step.active {
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
  }

  .atn-step.active .atn-step-n {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  /* panels inside the workspace */
  .atn-panel {
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .atn-panel-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 13px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .atn-panel-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .atn-panel-body {
    padding: 16px;
  }

  /* a plain labelled figure used across the panels */
  .atn-fig {
    display: flex;
    flex-direction: column;
    gap: 2px;
    line-height: 1.3;
  }

  .atn-fig span:first-child {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .atn-fig span:last-child {
    font-size: 14px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  /* attendance history — weekly columns, pure CSS */
  .atn-cols {
    display: flex;
    align-items: flex-end;
    gap: 6px;
    height: 108px;
  }

  .atn-cols i {
    flex: 1 1 0;
    border-radius: 4px 4px 0 0;
    background: linear-gradient(180deg, var(--bs-primary), rgba(31, 59, 96, 0.45));
    height: calc(var(--p, 0) * 1%);
    min-height: 4px;
  }

  .atn-cols i.is-low {
    background: linear-gradient(180deg, #E82646, #F8BEC8);
  }

  /* checklist of completed actions */
  .atn-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .atn-check+.atn-check {
    border-top: 1px dashed var(--bs-border-color);
  }

  .atn-check i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 16px;
    color: #1ABE17;
  }

  .atn-check.is-pending i {
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   PREMIUM ALERT + EMPTY STATE
   ============================================================ */
  .atn-alert {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: linear-gradient(90deg, var(--tint-primary), var(--bs-body-bg) 70%);
    border: 1px solid var(--bs-border-color);
    border-left: 3px solid var(--bs-primary);
  }

  .atn-alert-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .atn-empty {
    padding: 40px 24px;
    text-align: center;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--bs-border-color);
  }

  .atn-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    margin-bottom: 14px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 24px;
  }

  /* ============================================================
   18. STUDENT DIGITAL TWIN  —  prefix `sdt-`

   The third family in this library. Where the others are instruments,
   this one is a dossier: a document about one person.

     aix-  enclosed cards, hairline dividers, chevron steppers
     atn-  banded surfaces, a vertical spine, stations, arc gauges
     sdt-  a portrait medallion, outlined chapter numerals, a date
           gutter, qualitative dot scales and tinted borderless panels

   Nothing here overrides an `aix-` or `atn-` rule.
   ============================================================ */
  @media (prefers-reduced-motion: reduce) {

    [class*=sdt-],
    [class*=sdt-]::before,
    [class*=sdt-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- chapter headings --------------------------------------------------
   A large outlined numeral rather than a rule or an icon tile, so the page
   reads as a bound document with chapters. */
  .sdt-chapter {
    display: flex;
    align-items: center;
    gap: 18px;
    margin-bottom: 26px;
  }

  .sdt-chapter-n {
    flex-shrink: 0;
    font-size: 46px;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -0.03em;
    color: transparent;
    -webkit-text-stroke: 1.5px var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .sdt-chapter-n {
      font-size: 34px;
    }
  }

  .sdt-chapter-title {
    margin: 0;
    font-size: 21px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
  }

  .sdt-chapter-sub {
    margin: 3px 0 0;
    font-size: 13px;
    color: var(--bs-secondary-color);
    max-width: 680px;
  }

  /* ---- shared small pieces ---------------------------------------------- */
  .sdt-lbl {
    display: block;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .sdt-tag {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 11px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 600;
    background: var(--bs-secondary-bg);
    color: var(--bs-emphasis-color);
    border: 1px solid var(--bs-border-color);
  }

  .sdt-tag i {
    font-size: 13px;
  }

  .sdt-tag.is-ai {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.2);
    color: var(--bs-primary);
  }

  .sdt-tag.is-up {
    background: #E8F9E8;
    border-color: #D1F2D1;
    color: #1ABE17;
  }

  .sdt-tag.is-flat {
    background: #E7F1FC;
    border-color: #CFE2FA;
    color: #0F65CD;
  }

  .sdt-tag.is-down {
    background: #FEF8EA;
    border-color: #FDF1D6;
    color: #EAB300;
  }

  .sdt-tag.is-alert {
    background: #FDE9ED;
    border-color: #FAD4DA;
    color: #E82646;
  }

  /* qualitative scale — five dots, no numbers */
  .sdt-dots {
    display: inline-flex;
    gap: 4px;
  }

  .sdt-dots i {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--bs-tertiary-bg);
  }

  .sdt-dots i.on {
    background: var(--bs-primary);
  }

  .sdt-dots.is-up i.on {
    background: #1ABE17;
  }

  .sdt-dots.is-down i.on {
    background: #EAB300;
  }

  /* ============================================================
   HERO — a dossier: portrait medallion, identity, vertical score column
   ============================================================ */
  .sdt-hero {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius);
    background: linear-gradient(115deg, #F2F5FF 0%, var(--bs-body-bg) 46%, var(--bs-body-bg) 100%);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* a soft diagonal wash across the right side, no image needed */
  .sdt-hero::after {
    content: "";
    position: absolute;
    right: -120px;
    top: -140px;
    width: 420px;
    height: 420px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(2, 168, 181, 0.12) 0%, rgba(2, 168, 181, 0) 68%);
    pointer-events: none;
  }

  .sdt-hero-inner {
    position: relative;
    display: grid;
    grid-template-columns: 186px minmax(0, 1fr) 172px;
    gap: 30px;
    padding: 28px;
  }

  @media (max-width: 1199.98px) {
    .sdt-hero-inner {
      grid-template-columns: 152px minmax(0, 1fr);
    }
  }

  @media (max-width: 767.98px) {
    .sdt-hero-inner {
      grid-template-columns: minmax(0, 1fr);
      gap: 24px;
      padding: 22px;
    }
  }

  /* portrait medallion with an orbiting trait ring */
  .sdt-medallion {
    position: relative;
    width: 152px;
    height: 152px;
    margin: 0 auto;
  }

  .sdt-medallion img {
    position: absolute;
    inset: 16px;
    width: calc(100% - 32px);
    height: calc(100% - 32px);
    border-radius: 50%;
    object-fit: cover;
    border: 3px solid var(--bs-body-bg);
    box-shadow: var(--shadow-lift);
  }

  /* the ring */

  .sdt-medallion::before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 50%;
    background: conic-gradient(from 200deg, var(--bs-primary) 0deg calc(var(--p, 0) * 3.6deg), var(--bs-tertiary-bg) calc(var(--p, 0) * 3.6deg) 360deg);
    -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 5px), #000 calc(100% - 5px));
    mask: radial-gradient(farthest-side, transparent calc(100% - 5px), #000 calc(100% - 5px));
  }

  @media (max-width: 1199.98px) {
    .sdt-medallion {
      width: 132px;
      height: 132px;
    }
  }

  .sdt-medallion-badge {
    position: absolute;
    left: 50%;
    bottom: -10px;
    transform: translateX(-50%);
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 11px;
    border-radius: 999px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    font-size: 11px;
    font-weight: 600;
    white-space: nowrap;
    color: var(--bs-primary);
  }

  .sdt-hero-name {
    margin: 0 0 4px;
    font-size: 30px;
    font-weight: 600;
    letter-spacing: -0.02em;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 767.98px) {
    .sdt-hero-name {
      font-size: 24px;
    }
  }

  .sdt-hero-lede {
    margin: 14px 0 0;
    font-size: 14px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  .sdt-hero-lede b {
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the facts sit as a definition strip, no boxes */
  .sdt-hero-strip {
    display: flex;
    flex-wrap: wrap;
    gap: 18px 30px;
    margin-top: 18px;
    padding-top: 16px;
    border-top: 1px solid var(--bs-border-color);
  }

  .sdt-hero-fact {
    display: flex;
    flex-direction: column;
    gap: 3px;
    line-height: 1.3;
  }

  .sdt-hero-fact span:last-child {
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* vertical intelligence score column */
  .sdt-score {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
    padding: 18px 14px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--aix-glow);
  }

  @media (max-width: 1199.98px) {
    .sdt-score {
      grid-column: 1/-1;
      flex-direction: row;
      align-items: center;
      justify-content: space-between;
    }
  }

  .sdt-score-val {
    font-size: 34px;
    font-weight: 700;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .sdt-score-val small {
    font-size: 13px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  /* stacked segments, filled from the bottom */
  .sdt-score-col {
    display: flex;
    flex-direction: column-reverse;
    gap: 4px;
    width: 34px;
    height: 132px;
  }

  .sdt-score-col i {
    flex: 1 1 0;
    border-radius: 3px;
    background: var(--bs-tertiary-bg);
  }

  .sdt-score-col i.on {
    background: linear-gradient(90deg, var(--bs-primary), rgba(31, 59, 96, 0.6));
  }

  @media (max-width: 1199.98px) {
    .sdt-score-col {
      flex-direction: row;
      width: auto;
      flex: 1 1 auto;
      height: 26px;
      margin: 0 18px;
    }
  }

  /* ============================================================
   DIGITAL TWIN — trait tiles with a strand of dots
   ============================================================ */
  .sdt-dna {
    position: relative;
    display: flex;
    gap: 14px;
    height: 100%;
    padding: 16px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .sdt-dna:hover {
    background: var(--bs-body-bg);
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  /* the strand: a vertical run of dots down the left edge */
  .sdt-strand {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
    padding-top: 4px;
  }

  .sdt-strand i {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--bs-tertiary-bg);
  }

  .sdt-strand i.on {
    background: var(--bs-primary);
  }

  .sdt-strand.is-up i.on {
    background: #1ABE17;
  }

  .sdt-strand.is-down i.on {
    background: #EAB300;
  }

  .sdt-strand.is-alert i.on {
    background: #E82646;
  }

  .sdt-dna-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sdt-dna-val {
    display: block;
    margin-bottom: 7px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-primary);
  }

  .sdt-dna-txt {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   LENS — explainable AI as a two-column reading panel
   ============================================================ */
  .sdt-lens {
    display: grid;
    grid-template-columns: 232px minmax(0, 1fr);
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .sdt-lens:hover {
    box-shadow: var(--shadow-lift);
  }

  @media (max-width: 767.98px) {
    .sdt-lens {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  /* left face carries the observation and its direction */
  .sdt-lens-face {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 10px;
    padding: 20px;
    background: var(--bs-secondary-bg);
    border-right: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .sdt-lens-face {
      border-right: 0;
      border-bottom: 1px solid var(--bs-border-color);
    }
  }

  .sdt-lens-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 21px;
    color: var(--bs-primary);
  }

  .sdt-lens-ic.is-up {
    color: #1ABE17;
  }

  .sdt-lens-ic.is-down {
    color: #EAB300;
  }

  .sdt-lens-ic.is-alert {
    color: #E82646;
  }

  .sdt-lens-obs {
    margin: 0;
    font-size: 16px;
    font-weight: 600;
    line-height: 1.35;
    color: var(--bs-emphasis-color);
  }

  .sdt-lens-body {
    padding: 20px;
  }

  .sdt-lens-why {
    margin: 0 0 14px;
    font-size: 13.5px;
    line-height: 1.68;
    color: var(--bs-secondary-color);
  }

  /* evidence reads as a short cited list */
  .sdt-ev {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    padding: 7px 0;
    font-size: 12.5px;
    color: var(--bs-emphasis-color);
  }

  .sdt-ev+.sdt-ev {
    border-top: 1px dashed var(--bs-border-color);
  }

  .sdt-ev i {
    flex-shrink: 0;
    margin-top: 2px;
    font-size: 14px;
    color: var(--bs-secondary-color);
  }

  .sdt-lens-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 14px;
    margin-top: 16px;
    padding-top: 14px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   JOURNEY — a wide date gutter with the line between
   ============================================================ */
  .sdt-journey {
    position: relative;
  }

  .sdt-leg {
    position: relative;
    display: grid;
    grid-template-columns: 116px 34px minmax(0, 1fr);
    gap: 0;
  }

  @media (max-width: 575.98px) {
    .sdt-leg {
      grid-template-columns: 0 30px minmax(0, 1fr);
    }
  }

  .sdt-leg-date {
    padding: 16px 16px 16px 0;
    text-align: right;
    line-height: 1.35;
  }

  .sdt-leg-date span:first-child {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sdt-leg-date span:last-child {
    display: block;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  @media (max-width: 575.98px) {
    .sdt-leg-date {
      display: none;
    }
  }

  /* the rule and its knot live in the middle column */
  .sdt-leg-rule {
    position: relative;
  }

  .sdt-leg-rule::before {
    content: "";
    position: absolute;
    left: 50%;
    top: 0;
    bottom: 0;
    width: 2px;
    margin-left: -1px;
    background: var(--bs-border-color);
  }

  .sdt-leg-rule::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 22px;
    transform: translateX(-50%);
    width: 13px;
    height: 13px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 3px solid var(--bs-primary);
  }

  .sdt-leg:first-child .sdt-leg-rule::before {
    top: 22px;
  }

  .sdt-leg:last-child .sdt-leg-rule::before {
    bottom: calc(100% - 22px);
  }

  .sdt-leg.is-good .sdt-leg-rule::after {
    border-color: #1ABE17;
  }

  .sdt-leg.is-warn .sdt-leg-rule::after {
    border-color: #EAB300;
  }

  .sdt-leg.is-alert .sdt-leg-rule::after {
    border-color: #E82646;
  }

  .sdt-leg.is-now .sdt-leg-rule::after {
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  .sdt-leg-card {
    margin: 8px 0 8px 16px;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .sdt-leg-card:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .sdt-leg-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   LEARNING INTELLIGENCE — words, not figures
   ============================================================ */
  .sdt-learn {
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .sdt-learn:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .sdt-learn-head {
    display: flex;
    align-items: center;
    gap: 11px;
    margin-bottom: 12px;
  }

  .sdt-learn-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 17px;
  }

  .sdt-learn-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sdt-learn-verdict {
    display: block;
    margin-bottom: 8px;
    font-size: 18px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
  }

  .sdt-learn-txt {
    margin: 0 0 14px;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   RECOMMENDATIONS — a ribbon down the left edge
   ============================================================ */
  .sdt-rec {
    position: relative;
    height: 100%;
    padding: 18px 18px 18px 24px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .sdt-rec::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 5px;
    background: var(--bs-primary);
  }

  .sdt-rec.is-critical::before {
    background: #E82646;
  }

  .sdt-rec.is-high::before {
    background: #EAB300;
  }

  .sdt-rec.is-normal::before {
    background: #0F65CD;
  }

  .sdt-rec:hover {
    box-shadow: var(--shadow-lift);
  }

  .sdt-rec-title {
    margin: 0 0 5px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sdt-rec-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px;
    margin: 14px 0;
    padding: 12px 0;
    border-top: 1px solid var(--bs-border-color);
    border-bottom: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .sdt-rec-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .sdt-cell {
    display: flex;
    flex-direction: column;
    gap: 3px;
    line-height: 1.3;
  }

  .sdt-cell span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   GROWTH STORY — quoted narrative cards
   ============================================================ */
  .sdt-story {
    position: relative;
    height: 100%;
    padding: 20px 20px 20px 22px;
    border-radius: var(--radius);
    background: linear-gradient(165deg, var(--tint-primary) 0%, var(--bs-body-bg) 58%);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    /* an opening quotation mark set in the corner */
  }

  .sdt-story::before {
    content: "“";
    position: absolute;
    right: 12px;
    top: -14px;
    font-size: 88px;
    line-height: 1;
    font-weight: 700;
    color: var(--bs-border-color);
    pointer-events: none;
  }

  .sdt-story.is-good {
    background: linear-gradient(165deg, #E8F9E8 0%, var(--bs-body-bg) 58%);
  }

  .sdt-story.is-warn {
    background: linear-gradient(165deg, #FEF8EA 0%, var(--bs-body-bg) 58%);
  }

  .sdt-story-title {
    position: relative;
    margin: 0 0 10px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sdt-story-txt {
    position: relative;
    margin: 0;
    font-size: 13px;
    line-height: 1.68;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   COPILOT — launcher rows with a trailing arrow
   ============================================================ */
  .sdt-do {
    display: flex;
    align-items: center;
    gap: 14px;
    height: 100%;
    padding: 15px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .sdt-do:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--aix-glow);
  }

  .sdt-do:hover .sdt-do-ic {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  .sdt-do:hover .sdt-do-go {
    transform: translateX(3px);
    color: var(--bs-primary);
  }

  .sdt-do-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    border: 1px solid transparent;
    color: var(--bs-primary);
    font-size: 19px;
    transition: var(--transition);
  }

  .sdt-do-go {
    flex-shrink: 0;
    font-size: 17px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  /* ============================================================
   FEED — a time gutter down the left
   ============================================================ */
  .sdt-feed {
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .sdt-feed-row {
    display: grid;
    grid-template-columns: 96px 40px minmax(0, 1fr);
    align-items: center;
    transition: var(--transition);
  }

  .sdt-feed-row+.sdt-feed-row {
    border-top: 1px solid var(--bs-border-color);
  }

  .sdt-feed-row:hover {
    background: var(--bs-secondary-bg);
  }

  @media (max-width: 575.98px) {
    .sdt-feed-row {
      grid-template-columns: 64px 36px minmax(0, 1fr);
    }
  }

  .sdt-feed-when {
    padding: 14px 12px;
    text-align: right;
    font-size: 11.5px;
    line-height: 1.35;
    color: var(--bs-secondary-color);
    border-right: 1px solid var(--bs-border-color);
  }

  .sdt-feed-when b {
    display: block;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sdt-feed-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    margin: 0 auto;
    border-radius: 50%;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 14px;
  }

  .sdt-feed-ic.is-good {
    background: #E8F9E8;
    color: #1ABE17;
  }

  .sdt-feed-ic.is-warn {
    background: #FEF8EA;
    color: #EAB300;
  }

  .sdt-feed-txt {
    padding: 13px 16px;
  }

  .sdt-feed-txt p {
    margin: 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .sdt-feed-txt small {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   OPPORTUNITIES — poster tiles with a tinted cap
   ============================================================ */
  .sdt-opp {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .sdt-opp:hover {
    transform: translateY(-3px);
    box-shadow: var(--shadow-lift);
  }

  .sdt-opp-cap {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    height: 74px;
    background: linear-gradient(135deg, var(--bs-primary), rgba(31, 59, 96, 0.62));
    color: #fff;
    font-size: 28px;
    /* a faint ring behind the glyph */
  }

  .sdt-opp-cap::before {
    content: "";
    position: absolute;
    width: 68px;
    height: 68px;
    border-radius: 50%;
    border: 1px solid rgba(255, 255, 255, 0.25);
  }

  .sdt-opp-cap.is-teal {
    background: linear-gradient(135deg, #02a8b5, rgba(2, 168, 181, 0.62));
  }

  .sdt-opp-cap.is-amber {
    background: linear-gradient(135deg, #EAB300, rgba(234, 179, 0, 0.62));
  }

  .sdt-opp-cap.is-green {
    background: linear-gradient(135deg, #1ABE17, rgba(26, 190, 23, 0.62));
  }

  .sdt-opp-body {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
    padding: 16px;
  }

  .sdt-opp-title {
    margin: 0 0 5px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   WORKSPACE OFFCANVAS — ribbon stepper with an underline indicator
   ============================================================ */
  .offcanvas.offcanvas-end.sdt-ws {
    width: 85% !important;
    max-width: 1380px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.sdt-ws {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.sdt-ws .offcanvas-body {
    padding: 22px;
  }

  .sdt-ws-head {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding: 20px 22px;
    background: linear-gradient(115deg, #F2F5FF 0%, var(--bs-body-bg) 60%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .sdt-ribbon {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    list-style: none;
    margin: 0;
    padding: 0 22px;
    background: var(--bs-body-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .sdt-ribbon {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .sdt-rib {
    position: relative;
    display: block;
    width: 100%;
    padding: 14px 10px;
    border: 0;
    background: transparent;
    text-align: left;
    transition: var(--transition);
    /* the underline indicator */
  }

  .sdt-rib::after {
    content: "";
    position: absolute;
    left: 10px;
    right: 10px;
    bottom: -1px;
    height: 2px;
    background: transparent;
    transition: var(--transition);
  }

  .sdt-rib span:first-child {
    display: block;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .sdt-rib span:last-child {
    display: block;
    margin-top: 2px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-secondary-color);
  }

  .sdt-rib:hover span:last-child {
    color: var(--bs-emphasis-color);
  }

  .sdt-rib.active::after {
    background: var(--bs-primary);
  }

  .sdt-rib.active span:first-child {
    color: var(--bs-primary);
  }

  .sdt-rib.active span:last-child {
    color: var(--bs-emphasis-color);
  }

  /* panels inside the workspace */
  .sdt-box {
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .sdt-box-title {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin: 0 0 14px;
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* a labelled line used throughout the workspace */
  .sdt-line {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .sdt-line+.sdt-line {
    border-top: 1px dashed var(--bs-border-color);
  }

  .sdt-line b {
    font-weight: 600;
  }

  /* thin labelled meter */
  .sdt-meter {
    display: block;
    height: 6px;
    border-radius: 3px;
    background: linear-gradient(90deg, var(--bs-primary) 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  .sdt-meter.is-good {
    background: linear-gradient(90deg, #1ABE17 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  /* ============================================================
   PREMIUM ACCORDION + EMPTY STATE
   ============================================================ */
  .sdt-acc .accordion-item {
    margin-bottom: 12px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius) !important;
    overflow: hidden;
    background: var(--bs-body-bg);
  }

  .sdt-acc .accordion-button {
    padding: 15px 18px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    box-shadow: none;
  }

  .sdt-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .sdt-acc .accordion-button:focus {
    box-shadow: none;
  }

  .sdt-acc .accordion-body {
    padding: 16px 18px;
    font-size: 13px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  .sdt-empty {
    padding: 44px 24px;
    text-align: center;
    border-radius: var(--radius);
    background: radial-gradient(80% 100% at 50% 0%, var(--tint-primary) 0%, transparent 70%), var(--bs-body-bg);
    border: 1px dashed var(--bs-border-color);
  }

  .sdt-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 58px;
    height: 58px;
    margin-bottom: 14px;
    border-radius: 18px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    color: var(--bs-primary);
    font-size: 25px;
  }

  /* ============================================================
   19. TIMETABLE OPTIMIZATION  —  prefix `tto-`

   The fourth family. Its subject is a grid of time, so its language is
   built from slots, tracks and segments rather than from cards about people.

     aix-  enclosed cards, hairline dividers, chevron steppers
     atn-  banded surfaces, a vertical spine, stations, arc gauges
     sdt-  portrait medallion, chapter numerals, date gutter, dot scales
     tto-  slot grids, bracketed section marks, before/after bars,
           collision headers, a horizontal track and segmented steppers

   Nothing here overrides a rule from the families above.
   ============================================================ */
  @media (prefers-reduced-motion: reduce) {

    [class*=tto-],
    [class*=tto-]::before,
    [class*=tto-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- section marks ----------------------------------------------------
   A bracketed number set inline with the title and a rule running to the
   right edge, so sections read like console headings. */
  .tto-mark {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-bottom: 24px;
  }

  @media (max-width: 767.98px) {
    .tto-mark {
      flex-wrap: wrap;
    }
  }

  .tto-mark-n {
    flex-shrink: 0;
    padding: 5px 11px;
    border-radius: 6px;
    background: var(--bs-emphasis-color);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.14em;
    font-variant-numeric: tabular-nums;
  }

  .tto-mark-title {
    margin: 0;
    font-size: 20px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
    white-space: nowrap;
  }

  .tto-mark-rule {
    flex: 1 1 auto;
    height: 1px;
    background: var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .tto-mark-rule {
      display: none;
    }
  }

  .tto-mark-sub {
    margin: -16px 0 24px;
    font-size: 13px;
    color: var(--bs-secondary-color);
    max-width: 700px;
  }

  /* ---- shared pieces ----------------------------------------------------- */
  .tto-lbl {
    display: block;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .tto-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 10px;
    border-radius: 5px;
    font-size: 11px;
    font-weight: 600;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-emphasis-color);
    white-space: nowrap;
  }

  .tto-chip i {
    font-size: 13px;
  }

  .tto-chip.is-ai {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.2);
    color: var(--bs-primary);
  }

  .tto-chip.is-crit {
    background: #FDE9ED;
    border-color: #FAD4DA;
    color: #E82646;
  }

  .tto-chip.is-warn {
    background: #FEF8EA;
    border-color: #FDF1D6;
    color: #EAB300;
  }

  .tto-chip.is-info {
    background: #E7F1FC;
    border-color: #CFE2FA;
    color: #0F65CD;
  }

  .tto-chip.is-ok {
    background: #E8F9E8;
    border-color: #D1F2D1;
    color: #1ABE17;
  }

  /* confidence readout: figure with a filled rule beneath */
  .tto-conf {
    display: inline-flex;
    flex-direction: column;
    gap: 4px;
    min-width: 58px;
  }

  .tto-conf b {
    font-size: 14px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
    line-height: 1;
  }

  .tto-conf::after {
    content: "";
    height: 3px;
    border-radius: 2px;
    background: linear-gradient(90deg, var(--bs-primary) 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  /* ============================================================
   HERO — copy on the left, a live slot grid on the right
   ============================================================ */
  .tto-hero {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius);
    background: linear-gradient(135deg, var(--bs-body-bg) 0%, var(--bs-body-bg) 52%, #F2F5FF 100%);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* a faint ruled backdrop, like a period grid seen through paper */
  .tto-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: repeating-linear-gradient(90deg, var(--bs-border-color) 0 1px, transparent 1px 84px);
    opacity: 0.5;
    mask-image: linear-gradient(180deg, #000 0%, transparent 80%);
    pointer-events: none;
  }

  .tto-hero-inner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 380px;
    gap: 34px;
    padding: 28px;
  }

  @media (max-width: 1299.98px) {
    .tto-hero-inner {
      grid-template-columns: minmax(0, 1fr);
      gap: 26px;
    }
  }

  @media (max-width: 575.98px) {
    .tto-hero-inner {
      padding: 22px;
    }
  }

  .tto-hero-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 5px 12px;
    border-radius: 6px;
    background: var(--bs-emphasis-color);
    color: #fff;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

  .tto-hero-title {
    margin: 14px 0 10px;
    font-size: 30px;
    line-height: 1.22;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .tto-hero-title em {
    font-style: normal;
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  @media (max-width: 767.98px) {
    .tto-hero-title {
      font-size: 24px;
    }
  }

  /* status readouts on one ruled line, no boxes */
  .tto-hero-read {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 16px;
    margin-top: 20px;
    padding: 16px 0;
    border-top: 1px solid var(--bs-border-color);
    border-bottom: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .tto-hero-read {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .tto-read {
    display: flex;
    flex-direction: column;
    gap: 4px;
    line-height: 1.25;
  }

  .tto-read b {
    font-size: 19px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .tto-read b small {
    font-size: 12px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  /* ---- the illustration: a slot grid with conflicts lit up ---- */
  .tto-grid-art {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--aix-glow);
  }

  .tto-slots {
    display: grid;
    grid-template-columns: repeat(8, minmax(0, 1fr));
    gap: 5px;
  }

  .tto-slots i {
    aspect-ratio: 1;
    border-radius: 4px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  .tto-slots i.f {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.22);
  }

  .tto-slots i.g {
    background: rgba(31, 59, 96, 0.55);
    border-color: transparent;
  }

  .tto-slots i.x {
    background: #E82646;
    border-color: transparent;
    animation: tto-flash 2.6s ease-in-out infinite;
  }

  .tto-slots i.w {
    background: #EAB300;
    border-color: transparent;
  }

  .tto-slots i.o {
    background: #1ABE17;
    border-color: transparent;
  }

  @keyframes tto-flash {

    0%,
    100% {
      opacity: 1;
    }

    50% {
      opacity: 0.45;
    }
  }

  .tto-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 14px;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .tto-legend span {
    display: inline-flex;
    align-items: center;
    gap: 5px;
  }

  .tto-legend i {
    width: 9px;
    height: 9px;
    border-radius: 2px;
    background: var(--bs-tertiary-bg);
  }

  .tto-legend i.f {
    background: var(--tint-primary);
  }

  .tto-legend i.g {
    background: rgba(31, 59, 96, 0.55);
  }

  .tto-legend i.x {
    background: #E82646;
  }

  .tto-legend i.o {
    background: #1ABE17;
  }

  /* ============================================================
   OPTIMIZATION CARDS — a before/after pair of bars
   ============================================================ */
  .tto-opt {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .tto-opt:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .tto-opt-title {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* two stacked bars, current then optimized, on a shared scale */
  .tto-ba {
    display: flex;
    flex-direction: column;
    gap: 9px;
    margin: 14px 0;
    padding: 14px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
  }

  .tto-ba-row {
    display: grid;
    grid-template-columns: 68px minmax(0, 1fr) 44px;
    align-items: center;
    gap: 10px;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .tto-ba-row b {
    text-align: right;
    font-size: 12px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .tto-bar {
    height: 8px;
    border-radius: 4px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  .tto-bar::before {
    content: "";
    display: block;
    height: 100%;
    width: calc(var(--p, 0) * 1%);
    border-radius: 4px;
    background: #D1D6DE;
  }

  .tto-bar.is-after::before {
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
  }

  .tto-opt-foot {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 12px;
    margin-top: auto;
    padding-top: 14px;
    border-top: 1px solid var(--bs-border-color);
  }

  .tto-gain {
    display: inline-flex;
    align-items: baseline;
    gap: 4px;
    font-size: 19px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: #1ABE17;
  }

  .tto-gain small {
    font-size: 11px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   EXPLAINABLE AI — a premium accordion
   ============================================================ */
  .tto-acc .accordion-item {
    margin-bottom: 12px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius) !important;
    overflow: hidden;
    transition: var(--transition);
  }

  .tto-acc .accordion-item:has(.accordion-button:not(.collapsed)) {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  .tto-acc .accordion-button {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 16px 18px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    box-shadow: none;
  }

  .tto-acc .accordion-button:not(.collapsed) {
    background: var(--bs-secondary-bg);
    color: var(--bs-emphasis-color);
  }

  .tto-acc .accordion-button:focus {
    box-shadow: none;
  }

  .tto-acc .accordion-button::after {
    margin-left: 0;
    flex-shrink: 0;
  }

  .tto-acc .accordion-body {
    padding: 18px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* the severity square that leads each accordion row */
  .tto-acc-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .tto-acc-ic.is-crit {
    background: #FDE9ED;
    color: #E82646;
  }

  .tto-acc-ic.is-warn {
    background: #FEF8EA;
    color: #EAB300;
  }

  .tto-acc-ic.is-info {
    background: #E7F1FC;
    color: #0F65CD;
  }

  /* evidence lines inside the accordion body */
  .tto-ev {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    padding: 8px 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .tto-ev+.tto-ev {
    border-top: 1px dashed var(--bs-border-color);
  }

  .tto-ev i {
    flex-shrink: 0;
    margin-top: 2px;
    font-size: 15px;
    color: var(--bs-secondary-color);
  }

  /* a boxed conclusion inside the body */
  .tto-fix {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 14px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    border: 1px solid rgba(31, 59, 96, 0.18);
  }

  .tto-fix i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 18px;
    color: var(--bs-primary);
  }

  /* ============================================================
   CONFLICT CARDS — a collision header, two sides meeting
   ============================================================ */
  .tto-clash {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .tto-clash:hover {
    box-shadow: var(--shadow-lift);
  }

  .tto-clash-head {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 40px minmax(0, 1fr);
    align-items: center;
    gap: 8px;
    padding: 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .tto-side {
    min-width: 0;
    padding: 10px 12px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    text-align: center;
  }

  .tto-side span:first-child {
    display: block;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .tto-side span:last-child {
    display: block;
    margin-top: 2px;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  /* the collision glyph between the two sides */
  .tto-vs {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    margin: 0 auto;
    border-radius: 50%;
    background: #FDE9ED;
    border: 1px solid #FAD4DA;
    color: #E82646;
    font-size: 17px;
  }

  .tto-vs.is-warn {
    background: #FEF8EA;
    border-color: #FDF1D6;
    color: #EAB300;
  }

  .tto-clash-body {
    display: flex;
    flex-direction: column;
    gap: 12px;
    flex: 1 1 auto;
    padding: 16px;
  }

  .tto-clash-foot {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   OPPORTUNITY ROWS — a figure on the right, a slim gauge under
   ============================================================ */
  .tto-opp {
    display: flex;
    align-items: center;
    gap: 14px;
    height: 100%;
    padding: 15px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .tto-opp:hover {
    border-color: rgba(31, 59, 96, 0.28);
    background: var(--bs-secondary-bg);
  }

  .tto-opp-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .tto-opp-fig {
    flex-shrink: 0;
    text-align: right;
  }

  .tto-opp-fig b {
    display: block;
    font-size: 17px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    line-height: 1;
    color: #1ABE17;
  }

  .tto-opp-fig span {
    display: block;
    margin-top: 3px;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   SCHEDULE INTELLIGENCE — one feature panel, then compact rows
   ============================================================ */
  .tto-feature {
    position: relative;
    height: 100%;
    padding: 24px;
    border-radius: var(--radius);
    background: radial-gradient(120% 100% at 100% 0%, rgba(2, 168, 181, 0.14) 0%, transparent 60%), linear-gradient(160deg, var(--bs-primary) 0%, #202C4B 100%);
    color: #fff;
    overflow: hidden;
  }

  .tto-feature::after {
    content: "";
    position: absolute;
    right: -60px;
    bottom: -60px;
    width: 200px;
    height: 200px;
    border-radius: 50%;
    border: 1px solid rgba(255, 255, 255, 0.16);
  }

  .tto-feature-fig {
    display: block;
    margin: 14px 0 8px;
    font-size: 40px;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -0.02em;
    font-variant-numeric: tabular-nums;
  }

  .tto-note {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    height: 100%;
    padding: 15px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .tto-note:hover {
    box-shadow: var(--shadow);
  }

  .tto-note i {
    flex-shrink: 0;
    margin-top: 2px;
    font-size: 17px;
    color: var(--bs-primary);
  }

  .tto-note-title {
    margin: 0 0 3px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   COPILOT — action bars with a trailing shortcut chip
   ============================================================ */
  .tto-do {
    display: flex;
    align-items: center;
    gap: 14px;
    width: 100%;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .tto-do+.tto-do {
    margin-top: 10px;
  }

  .tto-do:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--aix-glow);
  }

  .tto-do:hover .tto-do-ic {
    background: var(--bs-primary);
    color: #fff;
  }

  .tto-do-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 18px;
    transition: var(--transition);
  }

  /* keyboard-style shortcut mark */
  .tto-key {
    flex-shrink: 0;
    padding: 3px 8px;
    border-radius: 5px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    border-bottom-width: 2px;
    font-size: 11px;
    font-weight: 600;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   HORIZONTAL TIMELINE — a track running left to right
   ============================================================ */
  .tto-track {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 10px;
  }

  @media (max-width: 1199.98px) {
    .tto-track {
      grid-template-columns: repeat(4, minmax(0, 1fr));
    }
  }

  @media (max-width: 767.98px) {
    .tto-track {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  @media (max-width: 480px) {
    .tto-track {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  .tto-stop {
    position: relative;
    padding-top: 40px;
    /* the rail segment reaching to the next stop */
  }

  .tto-stop::before {
    content: "";
    position: absolute;
    left: calc(50% + 16px);
    right: calc(-50% + 16px);
    top: 15px;
    height: 2px;
    background: var(--bs-tertiary-bg);
  }

  .tto-stop:last-child::before {
    display: none;
  }

  .tto-stop.is-done::before {
    background: #1ABE17;
  }

  /* the node */

  .tto-stop::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 0;
    transform: translateX(-50%);
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-tertiary-bg);
  }

  .tto-stop.is-done::after {
    background: #1ABE17;
    border-color: #1ABE17;
  }

  .tto-stop.is-now::after {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  @media (max-width: 1199.98px) {
    .tto-stop::before {
      display: none;
    }
  }

  /* the glyph sits inside the node */
  .tto-stop-ic {
    position: absolute;
    left: 50%;
    top: 0;
    transform: translateX(-50%);
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    font-size: 15px;
    color: var(--bs-secondary-color);
  }

  .tto-stop.is-done .tto-stop-ic {
    color: #fff;
  }

  .tto-stop.is-now .tto-stop-ic {
    color: var(--bs-primary);
  }

  .tto-stop-card {
    padding: 13px 14px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .tto-stop-card:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .tto-stop-title {
    margin: 0 0 3px;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   RESOURCE ROWS — a segmented availability strip
   ============================================================ */
  .tto-res {
    display: grid;
    grid-template-columns: 210px minmax(0, 1fr) 116px;
    align-items: center;
    gap: 18px;
    padding: 14px 16px;
    transition: var(--transition);
  }

  .tto-res+.tto-res {
    border-top: 1px solid var(--bs-border-color);
  }

  .tto-res:hover {
    background: var(--bs-secondary-bg);
  }

  @media (max-width: 991.98px) {
    .tto-res {
      grid-template-columns: minmax(0, 1fr);
      gap: 10px;
    }
  }

  .tto-res-name {
    display: flex;
    align-items: center;
    gap: 11px;
  }

  .tto-res-name i {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 16px;
  }

  /* eight periods across, coloured by load */
  .tto-strip {
    display: flex;
    gap: 3px;
  }

  .tto-strip i {
    flex: 1 1 0;
    height: 22px;
    border-radius: 3px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  .tto-strip i.l1 {
    background: var(--tint-primary);
    border-color: transparent;
  }

  .tto-strip i.l2 {
    background: rgba(31, 59, 96, 0.45);
    border-color: transparent;
  }

  .tto-strip i.l3 {
    background: var(--bs-primary);
    border-color: transparent;
  }

  .tto-strip i.ov {
    background: #E82646;
    border-color: transparent;
  }

  .tto-strip i.fr {
    background: #E8F9E8;
    border-color: #D1F2D1;
  }

  /* ============================================================
   RECOMMENDATIONS — rank chip, body, apply footer
   ============================================================ */
  .tto-rec {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .tto-rec:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .tto-rec-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .tto-rec-rank {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 6px;
    background: var(--bs-emphasis-color);
    color: #fff;
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .tto-rec-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .tto-rec-body {
    flex: 1 1 auto;
    padding: 16px;
  }

  .tto-rec-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px dashed var(--bs-border-color);
  }

  .tto-cell {
    display: flex;
    flex-direction: column;
    gap: 3px;
    line-height: 1.3;
  }

  .tto-cell span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   WORKSPACE OFFCANVAS — a segmented stepper that reads as progress
   ============================================================ */
  .offcanvas.offcanvas-end.tto-ws {
    width: 90% !important;
    max-width: 1460px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.tto-ws {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.tto-ws .offcanvas-body {
    padding: 22px;
  }

  .tto-ws-head {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding: 20px 22px;
    background: linear-gradient(135deg, var(--bs-body-bg) 0%, #F2F5FF 100%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .tto-ws-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    flex-shrink: 0;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    color: var(--bs-primary);
    font-size: 24px;
  }

  /* the stepper is one continuous bar cut into five segments */
  .tto-seg {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 4px;
    list-style: none;
    margin: 0;
    padding: 16px 22px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .tto-seg {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .tto-segbtn {
    position: relative;
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 10px 14px;
    border: 1px solid transparent;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    text-align: left;
    transition: var(--transition);
    /* the fill rule along the bottom edge */
  }

  .tto-segbtn::after {
    content: "";
    position: absolute;
    left: 14px;
    right: 14px;
    bottom: 6px;
    height: 2px;
    border-radius: 1px;
    background: var(--bs-tertiary-bg);
    transition: var(--transition);
  }

  .tto-segbtn:hover {
    border-color: var(--bs-border-color);
  }

  .tto-segbtn.active {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow);
  }

  .tto-segbtn.active::after {
    background: var(--bs-primary);
  }

  .tto-segbtn.active .tto-segbtn-n {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  .tto-segbtn-n {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 6px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    transition: var(--transition);
  }

  .tto-segbtn-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
    padding-bottom: 6px;
    line-height: 1.25;
  }

  .tto-segbtn-txt span:first-child {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .tto-segbtn-txt span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* panels inside the workspace */
  .tto-panel {
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .tto-panel-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 13px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .tto-panel-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .tto-panel-body {
    padding: 16px;
  }

  .tto-line {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .tto-line+.tto-line {
    border-top: 1px dashed var(--bs-border-color);
  }

  .tto-line b {
    font-weight: 600;
  }

  /* ============================================================
   EMPTY STATE
   ============================================================ */
  .tto-empty {
    padding: 42px 24px;
    text-align: center;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px dashed var(--bs-border-color);
  }

  .tto-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    margin-bottom: 14px;
    border-radius: var(--radius);
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 25px;
  }

  /* ============================================================
   20. HOMEWORK EVALUATION  —  prefix `hwk-`

   The fifth family. Its subject is marked work, so its language is drawn
   from the physical review studio: ruled paper, margin bars, grade seals,
   rubric strips and hanging annotation markers.

     aix-  enclosed cards, hairline dividers, chevron steppers
     atn-  banded surfaces, a vertical spine, stations, arc gauges
     sdt-  portrait medallion, chapter numerals, date gutter, dot scales
     tto-  slot grids, bracketed marks, before/after bars, a horizontal track
     hwk-  paper sheets, margin rules, grade seals, rubric strips,
           highlighted headings and hanging annotation markers

   Nothing here overrides a rule from the families above.
   ============================================================ */
  @media (prefers-reduced-motion: reduce) {

    [class*=hwk-],
    [class*=hwk-]::before,
    [class*=hwk-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- section headings -------------------------------------------------
   A kicker above and a marker highlight sitting behind the last line of
   the title, the way a reviewer would underline a heading. */
  .hwk-head {
    margin-bottom: 26px;
  }

  .hwk-kicker {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    margin-bottom: 8px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--bs-primary);
  }

  .hwk-kicker::before {
    content: "";
    width: 22px;
    height: 2px;
    background: var(--bs-primary);
  }

  .hwk-title {
    position: relative;
    display: inline;
    margin: 0;
    font-size: 21px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
    background-image: linear-gradient(180deg, transparent 62%, var(--tint-primary) 62%);
    background-repeat: no-repeat;
    box-decoration-break: clone;
    -webkit-box-decoration-break: clone;
  }

  .hwk-sub {
    margin: 10px 0 0;
    font-size: 13px;
    color: var(--bs-secondary-color);
    max-width: 700px;
  }

  /* ---- shared pieces ----------------------------------------------------- */
  .hwk-lbl {
    display: block;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* geometry, typography and surface come from the shared badge component */

  .hwk-tag i {
    font-size: 13px;
  }

  .hwk-tag.is-ai {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.2);
    color: var(--bs-primary);
  }

  .hwk-tag.is-strong {
    background: #E8F9E8;
    border-color: #D1F2D1;
    color: #1ABE17;
  }

  .hwk-tag.is-weak {
    background: #FDE9ED;
    border-color: #FAD4DA;
    color: #E82646;
  }

  .hwk-tag.is-mid {
    background: #FEF8EA;
    border-color: #FDF1D6;
    color: #EAB300;
  }

  .hwk-tag.is-note {
    background: #E7F1FC;
    border-color: #CFE2FA;
    color: #0F65CD;
  }

  /* the grade seal — a stamped circle */
  .hwk-seal {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 54px;
    height: 54px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-primary);
    color: var(--bs-primary);
    line-height: 1;
  }

  .hwk-seal b {
    font-size: 18px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .hwk-seal span {
    margin-top: 2px;
    font-size: 8px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    opacity: 0.7;
  }

  .hwk-seal.is-strong {
    border-color: #1ABE17;
    color: #1ABE17;
  }

  .hwk-seal.is-mid {
    border-color: #EAB300;
    color: #EAB300;
  }

  .hwk-seal.is-weak {
    border-color: #E82646;
    color: #E82646;
  }

  /* rubric strip — five criteria, filled by quality */
  .hwk-rubric {
    display: flex;
    gap: 4px;
  }

  .hwk-rubric i {
    flex: 1 1 0;
    height: 5px;
    border-radius: 3px;
    background: var(--bs-tertiary-bg);
  }

  .hwk-rubric i.on {
    background: var(--bs-primary);
  }

  .hwk-rubric i.mid {
    background: #EAB300;
  }

  .hwk-rubric i.low {
    background: #E82646;
  }

  /* confidence readout */
  .hwk-conf {
    display: inline-flex;
    flex-direction: column;
    gap: 4px;
    min-width: 56px;
  }

  .hwk-conf b {
    font-size: 14px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
    line-height: 1;
  }

  .hwk-conf::after {
    content: "";
    height: 3px;
    border-radius: 2px;
    background: linear-gradient(90deg, var(--bs-primary) 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  /* ============================================================
   HERO — a review desk: ruled sheet on the left, paper stack on the right
   ============================================================ */
  .hwk-studio {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius);
    background: linear-gradient(180deg, #F2F5FF 0%, var(--bs-body-bg) 34%), var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* ruled lines, faint, like the page underneath */
  .hwk-studio::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: repeating-linear-gradient(180deg, transparent 0 33px, var(--bs-border-color) 33px 34px);
    opacity: 0.45;
    mask-image: linear-gradient(90deg, transparent 0%, #000 40%);
    pointer-events: none;
  }

  .hwk-studio-inner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 330px;
    gap: 34px;
    padding: 28px 28px 28px 34px;
    /* the margin rule down the left edge */
  }

  .hwk-studio-inner::before {
    content: "";
    position: absolute;
    left: 16px;
    top: 20px;
    bottom: 20px;
    width: 2px;
    border-radius: 1px;
    background: #F8BEC8;
  }

  @media (max-width: 1299.98px) {
    .hwk-studio-inner {
      grid-template-columns: minmax(0, 1fr);
      gap: 26px;
    }
  }

  @media (max-width: 575.98px) {
    .hwk-studio-inner {
      padding: 22px 20px 22px 28px;
    }
  }

  .hwk-studio-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 5px 12px;
    border-radius: 999px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .hwk-studio-title {
    margin: 14px 0 10px;
    font-size: 30px;
    line-height: 1.22;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .hwk-studio-title em {
    font-style: normal;
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  @media (max-width: 767.98px) {
    .hwk-studio-title {
      font-size: 24px;
    }
  }

  /* the status line reads as a marking record, divided by upright rules */
  .hwk-record {
    display: flex;
    flex-wrap: wrap;
    margin-top: 20px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    overflow: hidden;
  }

  .hwk-record-cell {
    flex: 1 1 130px;
    padding: 13px 16px;
    line-height: 1.3;
  }

  .hwk-record-cell+.hwk-record-cell {
    border-left: 1px solid var(--bs-border-color);
  }

  .hwk-record-cell b {
    display: block;
    margin-top: 3px;
    font-size: 19px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .hwk-record-cell b small {
    font-size: 12px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  @media (max-width: 575.98px) {
    .hwk-record-cell {
      flex-basis: 50%;
    }

    .hwk-record-cell:nth-child(odd) {
      border-left: 0;
    }

    .hwk-record-cell:nth-child(n+3) {
      border-top: 1px solid var(--bs-border-color);
    }
  }

  /* ---- illustration: a stack of marked sheets ---- */
  .hwk-stack {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 20px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--aix-glow);
  }

  .hwk-sheets {
    position: relative;
    height: 148px;
  }

  /* three offset sheets, the front one carrying the seal */
  .hwk-sheet {
    position: absolute;
    inset: 0;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .hwk-sheet.s1 {
    transform: rotate(-5deg) translateY(6px);
    opacity: 0.55;
  }

  .hwk-sheet.s2 {
    transform: rotate(3deg) translateY(3px);
    opacity: 0.8;
  }

  .hwk-sheet.s3 {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 8px;
    padding: 18px;
  }

  /* skeleton lines standing in for written work */
  .hwk-ruled {
    display: block;
    height: 6px;
    border-radius: 3px;
    background: var(--bs-tertiary-bg);
    width: calc(var(--p, 100) * 1%);
  }

  .hwk-ruled.is-mark {
    background: var(--tint-primary);
  }

  .hwk-sheet-seal {
    position: absolute;
    right: -10px;
    top: -12px;
    transform: rotate(-12deg);
    box-shadow: var(--shadow);
  }

  /* ============================================================
   SUBMISSION CARDS — a paper head, a rubric strip, an action foot
   ============================================================ */
  .hwk-sub {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .hwk-sub:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  /* the head is the sheet: ruled, with the seal stamped at the right */
  .hwk-sub-head {
    position: relative;
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 16px;
    background: repeating-linear-gradient(180deg, transparent 0 21px, var(--bs-border-color) 21px 22px), var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
    /* margin rule */
  }

  .hwk-sub-head::before {
    content: "";
    position: absolute;
    left: 8px;
    top: 10px;
    bottom: 10px;
    width: 2px;
    border-radius: 1px;
    background: #F8BEC8;
  }

  .hwk-sub-title {
    margin: 0 0 2px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .hwk-sub-body {
    display: flex;
    flex-direction: column;
    gap: 13px;
    flex: 1 1 auto;
    padding: 16px;
  }

  .hwk-sub-meta {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
    padding: 12px 0;
    border-top: 1px solid var(--bs-border-color);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .hwk-cell {
    display: flex;
    flex-direction: column;
    gap: 3px;
    line-height: 1.3;
    min-width: 0;
  }

  .hwk-cell span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .hwk-sub-foot {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 16px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  .hwk-ico {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 16px;
    transition: var(--transition);
  }

  .hwk-ico:hover {
    color: var(--bs-primary);
    border-color: var(--bs-primary);
    background: var(--tint-primary);
  }

  /* ============================================================
   ANNOTATION CARDS — explainable AI as a marked-up page
   A hanging marker in the margin, then three reading columns.
   ============================================================ */
  .hwk-note {
    position: relative;
    padding: 20px 20px 20px 26px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .hwk-note+.hwk-note {
    margin-top: 16px;
  }

  /* the coloured margin bar */

  .hwk-note::before {
    content: "";
    position: absolute;
    left: 10px;
    top: 20px;
    bottom: 20px;
    width: 3px;
    border-radius: 2px;
    background: var(--bs-primary);
  }

  .hwk-note.is-strong::before {
    background: #1ABE17;
  }

  .hwk-note.is-mid::before {
    background: #EAB300;
  }

  .hwk-note.is-weak::before {
    background: #E82646;
  }

  .hwk-note:hover {
    box-shadow: var(--shadow-lift);
  }

  .hwk-note-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    padding-bottom: 14px;
    margin-bottom: 16px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .hwk-note-obs {
    margin: 0;
    font-size: 16px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* three reading columns inside the note */
  .hwk-cols {
    display: grid;
    grid-template-columns: 1.25fr 1fr 1fr;
    gap: 24px;
  }

  @media (max-width: 991.98px) {
    .hwk-cols {
      grid-template-columns: minmax(0, 1fr);
      gap: 18px;
    }
  }

  @media (min-width: 992px) {
    .hwk-col-rule {
      padding-left: 24px;
      border-left: 1px dashed var(--bs-border-color);
    }
  }

  .hwk-ev {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    padding: 7px 0;
    font-size: 12.5px;
    color: var(--bs-emphasis-color);
  }

  .hwk-ev+.hwk-ev {
    border-top: 1px dashed var(--bs-border-color);
  }

  .hwk-ev i {
    flex-shrink: 0;
    margin-top: 2px;
    font-size: 14px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   LEARNING GAP — a four-rung priority ladder
   ============================================================ */
  .hwk-gap {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .hwk-gap:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .hwk-gap-title {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the ladder: four rungs, filled to the priority level */
  .hwk-ladder {
    display: flex;
    align-items: flex-end;
    gap: 4px;
    height: 26px;
  }

  .hwk-ladder i {
    flex: 1 1 0;
    border-radius: 2px 2px 0 0;
    background: var(--bs-tertiary-bg);
  }

  .hwk-ladder i:nth-child(1) {
    height: 40%;
  }

  .hwk-ladder i:nth-child(2) {
    height: 60%;
  }

  .hwk-ladder i:nth-child(3) {
    height: 80%;
  }

  .hwk-ladder i:nth-child(4) {
    height: 100%;
  }

  .hwk-ladder i.on {
    background: var(--bs-primary);
  }

  .hwk-ladder i.on.is-mid {
    background: #EAB300;
  }

  .hwk-ladder i.on.is-weak {
    background: #E82646;
  }

  /* ============================================================
   FEEDBACK TILES — a priority ribbon across the top
   ============================================================ */
  .hwk-fb {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .hwk-fb:hover {
    box-shadow: var(--shadow-lift);
  }

  .hwk-fb-ribbon {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 8px 14px;
    background: var(--bs-primary);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  .hwk-fb-ribbon.is-weak {
    background: #E82646;
  }

  .hwk-fb-ribbon.is-mid {
    background: #EAB300;
  }

  .hwk-fb-ribbon.is-note {
    background: #0F65CD;
  }

  .hwk-fb-body {
    display: flex;
    flex-direction: column;
    gap: 10px;
    flex: 1 1 auto;
    padding: 16px;
  }

  .hwk-fb-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 19px;
  }

  /* ============================================================
   QUALITY TILES — a letter grade beside a written verdict
   ============================================================ */
  .hwk-q {
    display: flex;
    gap: 14px;
    height: 100%;
    padding: 16px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .hwk-q:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .hwk-q-grade {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 17px;
    font-weight: 700;
  }

  .hwk-q-grade.is-strong {
    color: #1ABE17;
  }

  .hwk-q-grade.is-mid {
    color: #EAB300;
  }

  .hwk-q-grade.is-weak {
    color: #E82646;
  }

  .hwk-q-title {
    margin: 0 0 3px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   COPILOT — draft tiles showing a skeleton of the document
   ============================================================ */
  .hwk-draft {
    display: flex;
    flex-direction: column;
    gap: 12px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .hwk-draft:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--aix-glow);
  }

  .hwk-draft:hover .hwk-draft-ic {
    background: var(--bs-primary);
    color: #fff;
  }

  .hwk-draft:hover .hwk-ruled.is-mark {
    background: rgba(31, 59, 96, 0.32);
  }

  .hwk-draft-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 18px;
    transition: var(--transition);
  }

  .hwk-draft-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the preview skeleton at the foot of each draft tile */
  .hwk-preview {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-top: auto;
    padding-top: 14px;
    border-top: 1px dashed var(--bs-border-color);
  }

  /* ============================================================
   EVALUATION TIMELINE — dashed connector, step number in the corner
   ============================================================ */
  .hwk-flow {
    position: relative;
    padding-left: 26px;
  }

  .hwk-flow::before {
    content: "";
    position: absolute;
    left: 0;
    top: 12px;
    bottom: 12px;
    border-left: 2px dashed var(--bs-border-color);
  }

  .hwk-step {
    position: relative;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .hwk-step+.hwk-step {
    margin-top: 14px;
  }

  .hwk-step:hover {
    box-shadow: var(--shadow);
  }

  /* the numbered knot sitting on the dashed line */

  .hwk-step::before {
    content: attr(data-n);
    position: absolute;
    left: -26px;
    top: 18px;
    transform: translateX(-50%);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-tertiary-bg);
    color: var(--bs-secondary-color);
    font-size: 10px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .hwk-step.is-done::before {
    background: #1ABE17;
    border-color: #1ABE17;
    color: #fff;
  }

  .hwk-step.is-now::before {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  .hwk-step-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   OPPORTUNITY SHELF — dashed tiles, things you add to a plan
   ============================================================ */
  .hwk-shelf {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px dashed var(--bs-border-color);
    transition: var(--transition);
  }

  .hwk-shelf:hover {
    border-style: solid;
    border-color: rgba(31, 59, 96, 0.35);
    background: var(--tint-primary);
  }

  .hwk-shelf:hover .hwk-shelf-add {
    color: var(--bs-primary);
  }

  .hwk-shelf-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .hwk-shelf-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .hwk-shelf-add {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    margin-top: auto;
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  /* ============================================================
   INSIGHT LIST — hanging numbers, no boxes, typographic
   ============================================================ */
  .hwk-insight {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    padding: 16px 0;
    border-top: 1px solid var(--bs-border-color);
  }

  .hwk-insight:last-child {
    border-bottom: 1px solid var(--bs-border-color);
  }

  .hwk-insight-n {
    flex-shrink: 0;
    width: 30px;
    font-size: 15px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    line-height: 1.4;
    color: transparent;
    -webkit-text-stroke: 1px var(--bs-primary);
  }

  .hwk-insight-title {
    margin: 0 0 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   WORKSPACE OFFCANVAS — circular stepper, labels below, dashed links
   ============================================================ */
  .offcanvas.offcanvas-end.hwk-ws {
    width: 88% !important;
    max-width: 1420px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.hwk-ws {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.hwk-ws .offcanvas-body {
    padding: 22px;
  }

  .hwk-ws-head {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding: 20px 22px;
    background: linear-gradient(180deg, #F2F5FF 0%, var(--bs-body-bg) 100%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .hwk-dots {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    list-style: none;
    margin: 0;
    padding: 20px 22px 18px;
    background: var(--bs-body-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .hwk-dots {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      row-gap: 16px;
    }
  }

  .hwk-dot {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    width: 100%;
    padding: 0 6px;
    border: 0;
    background: transparent;
    transition: var(--transition);
    /* dashed link to the next dot */
  }

  .hwk-dot::before {
    content: "";
    position: absolute;
    left: calc(50% + 20px);
    right: calc(-50% + 20px);
    top: 17px;
    border-top: 2px dashed var(--bs-border-color);
  }

  .hwk-dot.is-last::before {
    display: none;
  }

  @media (max-width: 767.98px) {
    .hwk-dot::before {
      display: none;
    }
  }

  .hwk-dot-n {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    transition: var(--transition);
  }

  .hwk-dot-txt {
    display: flex;
    flex-direction: column;
    align-items: center;
    line-height: 1.3;
  }

  .hwk-dot-txt span:first-child {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .hwk-dot-txt span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-secondary-color);
  }

  .hwk-dot:hover .hwk-dot-n {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
  }

  .hwk-dot.active .hwk-dot-n {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  .hwk-dot.active .hwk-dot-txt span:first-child {
    color: var(--bs-primary);
  }

  .hwk-dot.active .hwk-dot-txt span:last-child {
    color: var(--bs-emphasis-color);
  }

  /* panels inside the workspace */
  .hwk-panel {
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .hwk-panel-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 13px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .hwk-panel-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .hwk-panel-body {
    padding: 16px;
  }

  .hwk-line {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .hwk-line+.hwk-line {
    border-top: 1px dashed var(--bs-border-color);
  }

  .hwk-line b {
    font-weight: 600;
  }

  /* a quoted feedback block, as the teacher would write it */
  .hwk-quote {
    padding: 14px 16px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border-left: 3px solid var(--bs-primary);
    font-size: 13px;
    line-height: 1.68;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   PREMIUM ACCORDION + EMPTY STATE
   ============================================================ */
  .hwk-acc .accordion-item {
    margin-bottom: 10px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius) !important;
    overflow: hidden;
  }

  .hwk-acc .accordion-button {
    padding: 14px 16px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    box-shadow: none;
  }

  .hwk-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .hwk-acc .accordion-button:focus {
    box-shadow: none;
  }

  .hwk-acc .accordion-body {
    padding: 15px 16px;
    font-size: 13px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
    border-top: 1px solid var(--bs-border-color);
  }

  .hwk-empty {
    padding: 40px 24px;
    text-align: center;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px dashed var(--bs-border-color);
  }

  .hwk-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    margin-bottom: 14px;
    border-radius: 50%;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 25px;
  }

  /* ============================================================
   21. TEACHING INTELLIGENCE  —  prefix `tch-`

   The sixth family. Its subject is a practitioner's craft, so its language
   is drawn from appraisal and credentialing: facet bars, definition rows,
   an engagement waveform, credential badges and folded-corner notes.

     aix-  enclosed cards, hairline dividers, chevron steppers
     atn-  banded surfaces, a vertical spine, stations, arc gauges
     sdt-  portrait medallion, chapter numerals, date gutter, dot scales
     tto-  slot grids, bracketed marks, before/after bars, a horizontal track
     hwk-  paper sheets, margin rules, grade seals, rubric strips
     tch-  tinted heading bands, facet bars, definition rows, a waveform,
           credential badges, folded corners and an arrow breadcrumb

   Nothing here overrides a rule from the families above.
   ============================================================ */
  @media (prefers-reduced-motion: reduce) {

    [class*=tch-],
    [class*=tch-]::before,
    [class*=tch-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- section heading: a tinted band, not a rule or a numeral --------- */
  .tch-band {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 16px 20px;
    margin-bottom: 24px;
    border-radius: var(--radius);
    background: linear-gradient(90deg, var(--tint-primary) 0%, var(--bs-secondary-bg) 60%, var(--bs-body-bg) 100%);
    border: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .tch-band {
      flex-wrap: wrap;
    }
  }

  .tch-band-n {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    color: var(--bs-primary);
    font-size: 14px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .tch-band-title {
    margin: 0;
    font-size: 19px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
  }

  .tch-band-sub {
    margin: 2px 0 0;
    font-size: 13px;
    color: var(--bs-secondary-color);
  }

  /* ---- shared pieces ---------------------------------------------------- */
  .tch-lbl {
    display: block;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .tch-pill {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 10px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 600;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-emphasis-color);
    white-space: nowrap;
  }

  .tch-pill i {
    font-size: 13px;
  }

  .tch-pill.is-ai {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.2);
    color: var(--bs-primary);
  }

  .tch-pill.is-high {
    background: #E8F9E8;
    border-color: #D1F2D1;
    color: #1ABE17;
  }

  .tch-pill.is-mid {
    background: #FEF8EA;
    border-color: #FDF1D6;
    color: #EAB300;
  }

  .tch-pill.is-low {
    background: #FDE9ED;
    border-color: #FAD4DA;
    color: #E82646;
  }

  .tch-pill.is-note {
    background: #E7F1FC;
    border-color: #CFE2FA;
    color: #0F65CD;
  }

  /* ---- facet bars: the family's signature readout ----------------------
   A label, a slim track and a figure on one line. Several stacked read as
   a profile of a practitioner rather than as a chart. */
  .tch-facet {
    display: grid;
    grid-template-columns: 104px minmax(0, 1fr) 38px;
    align-items: center;
    gap: 10px;
    padding: 6px 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .tch-facet b {
    text-align: right;
    font-size: 12px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .tch-facet-bar {
    height: 6px;
    border-radius: 3px;
    background: linear-gradient(90deg, var(--bs-primary) 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  .tch-facet-bar.is-high {
    background: linear-gradient(90deg, #1ABE17 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  .tch-facet-bar.is-mid {
    background: linear-gradient(90deg, #EAB300 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  .tch-facet-bar.is-low {
    background: linear-gradient(90deg, #E82646 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  /* ============================================================
   HERO — copy on the left, an engagement waveform on the right
   ============================================================ */
  .tch-stage {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius);
    background: radial-gradient(90% 120% at 100% 100%, rgba(2, 168, 181, 0.12) 0%, transparent 58%), linear-gradient(160deg, #F2F5FF 0%, var(--bs-body-bg) 44%), var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .tch-stage-inner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 372px;
    gap: 34px;
    padding: 28px;
  }

  @media (max-width: 1299.98px) {
    .tch-stage-inner {
      grid-template-columns: minmax(0, 1fr);
      gap: 26px;
    }
  }

  @media (max-width: 575.98px) {
    .tch-stage-inner {
      padding: 22px;
    }
  }

  .tch-stage-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 5px 12px 5px 6px;
    border-radius: 999px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .tch-stage-badge i {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--bs-primary);
    color: #fff;
    font-size: 13px;
  }

  .tch-stage-title {
    margin: 14px 0 10px;
    font-size: 30px;
    line-height: 1.22;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .tch-stage-title em {
    font-style: normal;
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  @media (max-width: 767.98px) {
    .tch-stage-title {
      font-size: 24px;
    }
  }

  /* status readouts as a wrapped definition strip */
  .tch-stage-strip {
    display: flex;
    flex-wrap: wrap;
    gap: 18px 32px;
    margin-top: 20px;
    padding-top: 18px;
    border-top: 1px solid var(--bs-border-color);
  }

  .tch-stat {
    display: flex;
    flex-direction: column;
    gap: 4px;
    line-height: 1.25;
  }

  .tch-stat b {
    font-size: 19px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .tch-stat b small {
    font-size: 12px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  /* ---- the illustration: an engagement waveform ---- */
  .tch-panel {
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 20px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--aix-glow);
  }

  .tch-wave {
    display: flex;
    align-items: center;
    gap: 3px;
    height: 96px;
  }

  .tch-wave i {
    flex: 1 1 0;
    min-height: 4px;
    height: calc(var(--p, 10) * 1%);
    border-radius: 2px;
    background: linear-gradient(180deg, var(--bs-primary), rgba(31, 59, 96, 0.38));
  }

  .tch-wave i.is-peak {
    background: linear-gradient(180deg, #02a8b5, rgba(2, 168, 181, 0.4));
  }

  .tch-wave i.is-dip {
    background: linear-gradient(180deg, #EAB300, rgba(234, 179, 0, 0.4));
  }

  .tch-wave-axis {
    display: flex;
    justify-content: space-between;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   TEACHER CARDS — a tinted corner, a portrait, then facet bars
   ============================================================ */
  .tch-card {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .tch-card:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  /* the diagonal tinted corner behind the portrait */

  .tch-card::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 96px;
    background: linear-gradient(120deg, var(--tint-primary) 0%, var(--bs-secondary-bg) 70%, transparent 100%);
  }

  .tch-card-head {
    position: relative;
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 18px 18px 14px;
  }

  .tch-card-name {
    margin: 0 0 2px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the score reads as a mark out of 100, set beside the portrait */
  .tch-card-score {
    margin-left: auto;
    text-align: right;
    line-height: 1;
  }

  .tch-card-score b {
    font-size: 23px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .tch-card-score b small {
    font-size: 12px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  .tch-card-body {
    display: flex;
    flex-direction: column;
    gap: 14px;
    flex: 1 1 auto;
    padding: 0 18px 16px;
  }

  .tch-card-foot {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 18px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  .tch-ico {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 16px;
    transition: var(--transition);
  }

  .tch-ico:hover {
    color: var(--bs-primary);
    border-color: var(--bs-primary);
    background: var(--tint-primary);
  }

  /* ============================================================
   DEFINITION ROWS — explainable AI read as an appraisal record
   ============================================================ */
  .tch-record {
    position: relative;
    padding: 20px 22px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-left: 4px solid var(--bs-primary);
    transition: var(--transition);
  }

  .tch-record+.tch-record {
    margin-top: 16px;
  }

  .tch-record.is-high {
    border-left-color: #1ABE17;
  }

  .tch-record.is-mid {
    border-left-color: #EAB300;
  }

  .tch-record.is-low {
    border-left-color: #E82646;
  }

  .tch-record:hover {
    box-shadow: var(--shadow-lift);
  }

  .tch-record-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    padding-bottom: 14px;
    margin-bottom: 4px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .tch-record-obs {
    margin: 0;
    font-size: 16px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* label on the left, value on the right, ruled between */
  .tch-dl {
    display: grid;
    grid-template-columns: 172px minmax(0, 1fr);
    gap: 0 24px;
  }

  @media (max-width: 767.98px) {
    .tch-dl {
      grid-template-columns: minmax(0, 1fr);
      gap: 0;
    }
  }

  .tch-dt {
    padding: 13px 0 13px;
    border-bottom: 1px dashed var(--bs-border-color);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  @media (max-width: 767.98px) {
    .tch-dt {
      padding-bottom: 0;
      border-bottom: 0;
    }
  }

  .tch-dd {
    margin: 0;
    padding: 13px 0;
    border-bottom: 1px dashed var(--bs-border-color);
    font-size: 13px;
    line-height: 1.65;
    color: var(--bs-emphasis-color);
  }

  .tch-dd:last-child {
    border-bottom: 0;
  }

  @media (max-width: 767.98px) {
    .tch-dd {
      padding-top: 4px;
    }
  }

  .tch-ev {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 3px 0;
    font-size: 12.5px;
    color: var(--bs-secondary-color);
  }

  .tch-ev i {
    flex-shrink: 0;
    margin-top: 2px;
    font-size: 14px;
    color: var(--bs-primary);
  }

  /* ============================================================
   FACET CARDS — a ringed badge above a written finding
   ============================================================ */
  .tch-facet-card {
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .tch-facet-card:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .tch-ring {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    margin-bottom: 12px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    color: var(--bs-primary);
    font-size: 21px;
    /* the ring itself is a conic sweep set by --p */
  }

  .tch-ring::before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 50%;
    background: conic-gradient(var(--bs-primary) 0deg calc(var(--p, 0) * 3.6deg), var(--bs-tertiary-bg) calc(var(--p, 0) * 3.6deg) 360deg);
    -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px));
    mask: radial-gradient(farthest-side, transparent calc(100% - 3px), #000 calc(100% - 3px));
  }

  .tch-ring.is-high {
    color: #1ABE17;
  }

  .tch-ring.is-high::before {
    background: conic-gradient(#1ABE17 0deg calc(var(--p, 0) * 3.6deg), var(--bs-tertiary-bg) calc(var(--p, 0) * 3.6deg) 360deg);
  }

  .tch-ring.is-mid {
    color: #EAB300;
  }

  .tch-ring.is-mid::before {
    background: conic-gradient(#EAB300 0deg calc(var(--p, 0) * 3.6deg), var(--bs-tertiary-bg) calc(var(--p, 0) * 3.6deg) 360deg);
  }

  .tch-ring.is-low {
    color: #E82646;
  }

  .tch-ring.is-low::before {
    background: conic-gradient(#E82646 0deg calc(var(--p, 0) * 3.6deg), var(--bs-tertiary-bg) calc(var(--p, 0) * 3.6deg) 360deg);
  }

  .tch-facet-title {
    margin: 0 0 10px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .tch-mini {
    margin-bottom: 10px;
  }

  .tch-mini span:first-child {
    display: block;
    margin-bottom: 2px;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .tch-mini span:last-child {
    display: block;
    font-size: 12.5px;
    line-height: 1.55;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   COACHING CARDS — a dashed schedule strip along the foot
   ============================================================ */
  .tch-coach {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .tch-coach:hover {
    box-shadow: var(--shadow-lift);
  }

  .tch-coach-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    margin-bottom: 12px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .tch-coach-ic.is-low {
    background: #FDE9ED;
    color: #E82646;
  }

  .tch-coach-ic.is-mid {
    background: #FEF8EA;
    color: #EAB300;
  }

  .tch-coach-ic.is-note {
    background: #E7F1FC;
    color: #0F65CD;
  }

  .tch-coach-title {
    margin: 0 0 6px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .tch-coach-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: auto;
    padding-top: 14px;
    border-top: 1px dashed var(--bs-border-color);
  }

  /* ============================================================
   CLASSROOM TILES — icon set into the top-right corner
   ============================================================ */
  .tch-tile {
    position: relative;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    overflow: hidden;
    transition: var(--transition);
  }

  .tch-tile:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .tch-tile-ic {
    position: absolute;
    right: 14px;
    top: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 16px;
  }

  .tch-tile-title {
    margin: 0 0 8px;
    padding-right: 44px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   COPILOT — numbered wide bars
   ============================================================ */
  .tch-do {
    display: flex;
    align-items: center;
    gap: 14px;
    width: 100%;
    padding: 15px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .tch-do:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--aix-glow);
  }

  .tch-do:hover .tch-do-n {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  .tch-do:hover .tch-do-go {
    transform: translateX(3px);
    color: var(--bs-primary);
  }

  .tch-do-n {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    transition: var(--transition);
  }

  .tch-do-go {
    flex-shrink: 0;
    font-size: 17px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  /* ============================================================
   JOURNEY — a numeral gutter, no connecting line
   ============================================================ */
  .tch-path {
    display: flex;
    flex-direction: column;
    gap: 12px;
  }

  .tch-leg {
    display: grid;
    grid-template-columns: 62px minmax(0, 1fr);
    align-items: stretch;
    gap: 16px;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .tch-leg:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .tch-leg.is-now {
    background: var(--bs-body-bg);
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow);
  }

  @media (max-width: 575.98px) {
    .tch-leg {
      grid-template-columns: minmax(0, 1fr);
      gap: 8px;
    }
  }

  /* the big outlined numeral in the gutter */
  .tch-leg-n {
    display: flex;
    align-items: flex-start;
    justify-content: center;
    font-size: 32px;
    font-weight: 700;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    color: transparent;
    -webkit-text-stroke: 1.5px var(--bs-border-color);
  }

  .tch-leg.is-done .tch-leg-n {
    -webkit-text-stroke-color: #1ABE17;
  }

  .tch-leg.is-now .tch-leg-n {
    -webkit-text-stroke-color: var(--bs-primary);
  }

  @media (max-width: 575.98px) {
    .tch-leg-n {
      justify-content: flex-start;
      font-size: 24px;
    }
  }

  .tch-leg-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   CREDENTIAL BADGES — professional growth
   ============================================================ */
  .tch-badge {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    height: 100%;
    padding: 20px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .tch-badge:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  /* a ringed medal with a small tick set at the foot */
  .tch-medal {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    margin-bottom: 14px;
    border-radius: 50%;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 24px;
  }

  .tch-medal::after {
    content: "";
    position: absolute;
    inset: -5px;
    border-radius: 50%;
    border: 1px dashed var(--bs-border-color);
  }

  .tch-medal.is-high {
    background: #E8F9E8;
    color: #1ABE17;
  }

  .tch-medal.is-mid {
    background: #FEF8EA;
    color: #EAB300;
  }

  .tch-medal.is-note {
    background: #E7F1FC;
    color: #0F65CD;
  }

  .tch-badge-fig {
    display: block;
    font-size: 22px;
    font-weight: 700;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .tch-badge-title {
    margin: 8px 0 4px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   INSIGHT NOTES — a folded top-right corner
   ============================================================ */
  .tch-note {
    position: relative;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .tch-note:hover {
    box-shadow: var(--shadow-lift);
  }

  /* the fold */

  .tch-note::before {
    content: "";
    position: absolute;
    right: 0;
    top: 0;
    border-width: 0 22px 22px 0;
    border-style: solid;
    border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color) var(--bs-border-color);
    border-top-right-radius: var(--radius);
  }

  .tch-note-title {
    margin: 0 0 6px;
    padding-right: 26px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   WORKSPACE OFFCANVAS — an arrow breadcrumb stepper
   ============================================================ */
  .offcanvas.offcanvas-end.tch-ws {
    width: 88% !important;
    max-width: 1440px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.tch-ws {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.tch-ws .offcanvas-body {
    padding: 22px;
  }

  .tch-ws-head {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding: 20px 22px;
    background: linear-gradient(160deg, #F2F5FF 0%, var(--bs-body-bg) 60%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .tch-crumbs {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 2px;
    list-style: none;
    margin: 0;
    padding: 0;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .tch-crumbs {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 1px;
    }
  }

  /* each step is notched into the next, like a process breadcrumb */
  .tch-crumb {
    position: relative;
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 14px 18px 14px 26px;
    border: 0;
    background: var(--bs-body-bg);
    text-align: left;
    clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 50%, calc(100% - 12px) 100%, 0 100%, 12px 50%);
    transition: var(--transition);
  }

  .tch-crumb:first-child {
    clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 50%, calc(100% - 12px) 100%, 0 100%);
    padding-left: 18px;
  }

  .tch-crumb:last-child {
    clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%, 12px 50%);
  }

  .tch-crumb:hover {
    background: var(--bs-tertiary-bg);
  }

  .tch-crumb.active {
    background: var(--bs-primary);
  }

  .tch-crumb.active .tch-crumb-n {
    background: rgba(255, 255, 255, 0.22);
    color: #fff;
  }

  .tch-crumb.active .tch-crumb-txt span:first-child {
    color: rgba(255, 255, 255, 0.78);
  }

  .tch-crumb.active .tch-crumb-txt span:last-child {
    color: #fff;
  }

  @media (max-width: 767.98px) {
    .tch-crumb {
      clip-path: none !important;
      padding: 12px 14px !important;
    }
  }

  .tch-crumb-n {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    color: var(--bs-secondary-color);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    transition: var(--transition);
  }

  .tch-crumb-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
    line-height: 1.25;
  }

  .tch-crumb-txt span:first-child {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .tch-crumb-txt span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  /* panels inside the workspace */
  .tch-box {
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .tch-box-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 13px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .tch-box-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .tch-box-body {
    padding: 16px;
  }

  .tch-line {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .tch-line+.tch-line {
    border-top: 1px dashed var(--bs-border-color);
  }

  .tch-line b {
    font-weight: 600;
  }

  /* a quoted observation, as a reviewer would write it */
  .tch-quote {
    padding: 14px 16px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border-left: 3px solid var(--bs-primary);
    font-size: 13px;
    line-height: 1.68;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   PREMIUM ACCORDION + EMPTY STATE
   ============================================================ */
  .tch-acc .accordion-item {
    margin-bottom: 10px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius) !important;
    overflow: hidden;
  }

  .tch-acc .accordion-button {
    padding: 14px 16px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    box-shadow: none;
  }

  .tch-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .tch-acc .accordion-button:focus {
    box-shadow: none;
  }

  .tch-acc .accordion-body {
    padding: 15px 16px;
    font-size: 13px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
    border-top: 1px solid var(--bs-border-color);
  }

  .tch-empty {
    padding: 40px 24px;
    text-align: center;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  .tch-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    margin-bottom: 14px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    color: var(--bs-primary);
    font-size: 25px;
  }

  /* ============================================================
   22. FAMILY ENGAGEMENT  —  prefix `fam-`

   The seventh family. Its subject is a relationship between two parties,
   so its language is drawn from correspondence: paired avatars joined by a
   connector, message threads, composed letters and drop capitals.

     aix-  enclosed cards, hairline dividers, chevron steppers
     atn-  banded surfaces, a vertical spine, stations, arc gauges
     sdt-  portrait medallion, chapter numerals, date gutter, dot scales
     tto-  slot grids, bracketed marks, before/after bars, a horizontal track
     hwk-  paper sheets, margin rules, grade seals, rubric strips
     tch-  tinted bands, facet bars, definition rows, medals, folded corners
     fam-  paired avatars, message threads, drop capitals, calendar chips
           and a single continuous progress stepper

   Nothing here overrides a rule from the families above.
   ============================================================ */
  @media (prefers-reduced-motion: reduce) {

    [class*=fam-],
    [class*=fam-]::before,
    [class*=fam-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- section heading: a thick rounded accent at the left -------------- */
  .fam-hd {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    margin-bottom: 24px;
  }

  .fam-hd::before {
    content: "";
    flex-shrink: 0;
    width: 5px;
    align-self: stretch;
    min-height: 46px;
    border-radius: 3px;
    background: linear-gradient(180deg, var(--bs-primary), #02a8b5);
  }

  .fam-hd-title {
    margin: 0;
    font-size: 20px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
  }

  .fam-hd-sub {
    margin: 5px 0 0;
    font-size: 13px;
    color: var(--bs-secondary-color);
    max-width: 700px;
  }

  /* ---- shared pieces ---------------------------------------------------- */
  .fam-lbl {
    display: block;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .fam-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 11px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 600;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-emphasis-color);
    white-space: nowrap;
  }

  .fam-chip i {
    font-size: 13px;
  }

  .fam-chip.is-ai {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.2);
    color: var(--bs-primary);
  }

  .fam-chip.is-warm {
    background: #E8F9E8;
    border-color: #D1F2D1;
    color: #1ABE17;
  }

  .fam-chip.is-cool {
    background: #E7F1FC;
    border-color: #CFE2FA;
    color: #0F65CD;
  }

  .fam-chip.is-fading {
    background: #FEF8EA;
    border-color: #FDF1D6;
    color: #EAB300;
  }

  .fam-chip.is-cold {
    background: #FDE9ED;
    border-color: #FAD4DA;
    color: #E82646;
  }

  html[data-theme=dark] .fam-chip.is-warm {
    background: rgba(26, 190, 23, 0.16);
    border-color: rgba(26, 190, 23, 0.32);
    color: color-mix(in srgb, #1ABE17 60%, white);
  }

  html[data-theme=dark] .fam-chip.is-cool {
    background: rgba(15, 101, 205, 0.16);
    border-color: rgba(15, 101, 205, 0.32);
    color: color-mix(in srgb, #0F65CD 60%, white);
  }

  html[data-theme=dark] .fam-chip.is-fading {
    background: rgba(234, 179, 0, 0.16);
    border-color: rgba(234, 179, 0, 0.32);
    color: color-mix(in srgb, #EAB300 60%, white);
  }

  html[data-theme=dark] .fam-chip.is-cold {
    background: rgba(232, 38, 70, 0.16);
    border-color: rgba(232, 38, 70, 0.32);
    color: color-mix(in srgb, #E82646 60%, white);
  }

  /* engagement level: five linked rings, filled to level */
  .fam-level {
    display: inline-flex;
    align-items: center;
    gap: 3px;
  }

  .fam-level i {
    width: 9px;
    height: 9px;
    border-radius: 50%;
    border: 1.5px solid var(--bs-tertiary-bg);
  }

  .fam-level i.on {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
  }

  .fam-level.is-warm i.on {
    background: #1ABE17;
    border-color: #1ABE17;
  }

  .fam-level.is-fading i.on {
    background: #EAB300;
    border-color: #EAB300;
  }

  .fam-level.is-cold i.on {
    background: #E82646;
    border-color: #E82646;
  }

  /* ============================================================
   HERO — copy on the left, a conversation thread on the right
   ============================================================ */
  .fam-hero {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius);
    background: radial-gradient(80% 120% at 0% 100%, rgba(2, 168, 181, 0.12) 0%, transparent 55%), linear-gradient(200deg, #F2F5FF 0%, var(--bs-body-bg) 46%), var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .fam-hero-inner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 372px;
    gap: 34px;
    padding: 28px;
  }

  @media (max-width: 1299.98px) {
    .fam-hero-inner {
      grid-template-columns: minmax(0, 1fr);
      gap: 26px;
    }
  }

  @media (max-width: 575.98px) {
    .fam-hero-inner {
      padding: 22px;
    }
  }

  .fam-hero-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 5px 13px;
    border-radius: 999px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .fam-hero-title {
    margin: 14px 0 10px;
    font-size: 30px;
    line-height: 1.22;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .fam-hero-title em {
    font-style: normal;
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  @media (max-width: 767.98px) {
    .fam-hero-title {
      font-size: 24px;
    }
  }

  /* readouts on a soft rounded strip rather than in boxes */
  .fam-hero-strip {
    display: flex;
    flex-wrap: wrap;
    gap: 14px 30px;
    margin-top: 20px;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .fam-stat {
    display: flex;
    flex-direction: column;
    gap: 3px;
    line-height: 1.25;
  }

  .fam-stat b {
    font-size: 18px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .fam-stat b small {
    font-size: 12px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  /* ---- the illustration: a conversation thread ---- */
  .fam-thread-panel {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 20px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--aix-glow);
  }

  .fam-bubbles {
    display: flex;
    flex-direction: column;
    gap: 10px;
  }

  .fam-bubble {
    position: relative;
    max-width: 86%;
    padding: 11px 14px;
    border-radius: 14px 14px 14px 4px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 12.5px;
    line-height: 1.55;
    color: var(--bs-emphasis-color);
  }

  .fam-bubble small {
    display: block;
    margin-top: 4px;
    font-size: 10.5px;
    color: var(--bs-secondary-color);
  }

  /* the school's side sits right, tinted */

  .fam-bubble.is-school {
    align-self: flex-end;
    border-radius: 14px 14px 4px 14px;
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.18);
  }

  .fam-bubble.is-ai {
    align-self: stretch;
    max-width: 100%;
    border-style: dashed;
    background: var(--bs-body-bg);
    border-radius: var(--radius);
  }

  /* ============================================================
   FAMILY CARDS — two avatars joined by a connector
   ============================================================ */
  .fam-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .fam-card:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .fam-card-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 18px;
    background: linear-gradient(180deg, var(--bs-secondary-bg), var(--bs-body-bg));
    border-bottom: 1px solid var(--bs-border-color);
  }

  /* the pair: parent and student, linked by a small drawn tie */
  .fam-pair {
    position: relative;
    display: inline-flex;
    align-items: center;
    flex-shrink: 0;
    padding-right: 6px;
  }

  .fam-pair .avatar+.avatar {
    margin-left: -12px;
  }

  /* the tie sits under the join */

  .fam-pair::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: -5px;
    transform: translateX(-50%);
    width: 22px;
    height: 3px;
    border-radius: 2px;
    background: var(--bs-primary);
  }

  .fam-card-name {
    margin: 0 0 2px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fam-card-body {
    display: flex;
    flex-direction: column;
    gap: 13px;
    flex: 1 1 auto;
    padding: 16px 18px;
  }

  .fam-facts {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
    padding: 12px 0;
    border-top: 1px solid var(--bs-border-color);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .fam-cell {
    display: flex;
    flex-direction: column;
    gap: 3px;
    min-width: 0;
    line-height: 1.3;
  }

  .fam-cell span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fam-card-foot {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 18px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  .fam-ico {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 16px;
    transition: var(--transition);
  }

  .fam-ico:hover {
    color: var(--bs-primary);
    border-color: var(--bs-primary);
    background: var(--tint-primary);
  }

  /* ============================================================
   EXPLAINABLE AI — written as a thread of exchanges
   ============================================================ */
  .fam-note {
    padding: 20px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .fam-note:hover {
    box-shadow: var(--shadow-lift);
  }

  .fam-note-head {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding-bottom: 14px;
    margin-bottom: 16px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .fam-note-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 12px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .fam-note-ic.is-warm {
    background: #E8F9E8;
    color: #1ABE17;
  }

  .fam-note-ic.is-fading {
    background: #FEF8EA;
    color: #EAB300;
  }

  .fam-note-ic.is-cold {
    background: #FDE9ED;
    color: #E82646;
  }

  .fam-note-obs {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* each part of the explanation is an indented exchange */
  .fam-turn {
    position: relative;
    padding: 0 0 14px 22px;
  }

  .fam-turn:last-child {
    padding-bottom: 0;
  }

  /* the connecting rail */

  .fam-turn::before {
    content: "";
    position: absolute;
    left: 4px;
    top: 14px;
    bottom: 0;
    width: 1px;
    background: var(--bs-border-color);
  }

  .fam-turn:last-child::before {
    display: none;
  }

  /* the marker */

  .fam-turn::after {
    content: "";
    position: absolute;
    left: 0;
    top: 6px;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-primary);
  }

  .fam-turn-lbl {
    display: block;
    margin-bottom: 4px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .fam-ev {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 4px 0;
    font-size: 12.5px;
    color: var(--bs-secondary-color);
  }

  .fam-ev i {
    flex-shrink: 0;
    margin-top: 3px;
    font-size: 6px;
    color: var(--bs-primary);
  }

  /* ============================================================
   ENGAGEMENT CARDS — a two-tone split
   ============================================================ */
  .fam-eng {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .fam-eng:hover {
    box-shadow: var(--shadow-lift);
  }

  .fam-eng-top {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 18px;
    background: var(--tint-primary);
  }

  .fam-eng-top.is-warm {
    background: #E8F9E8;
  }

  .fam-eng-top.is-fading {
    background: #FEF8EA;
  }

  .fam-eng-top.is-cold {
    background: #FDE9ED;
  }

  .fam-eng-top.is-cool {
    background: #E7F1FC;
  }

  .fam-eng-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .fam-eng-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fam-eng-body {
    flex: 1 1 auto;
    padding: 16px 18px;
  }

  .fam-kv {
    margin-bottom: 12px;
  }

  .fam-kv span:first-child {
    display: block;
    margin-bottom: 2px;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .fam-kv span:last-child {
    display: block;
    font-size: 12.5px;
    line-height: 1.55;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   RECOMMENDATION CARDS — a send strip along the bottom edge
   ============================================================ */
  .fam-rec {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .fam-rec:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  .fam-rec-body {
    display: flex;
    flex-direction: column;
    gap: 10px;
    flex: 1 1 auto;
    padding: 18px;
  }

  .fam-rec-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fam-rec-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 10px;
    margin-top: auto;
    padding-top: 14px;
    border-top: 1px dashed var(--bs-border-color);
  }

  /* the strip is the action: full bleed, coloured by priority */
  .fam-send {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    padding: 12px;
    background: var(--bs-primary);
    color: #fff;
    font-size: 13px;
    font-weight: 600;
    transition: var(--transition);
  }

  .fam-send.is-cold {
    background: #E82646;
  }

  .fam-send.is-fading {
    background: #EAB300;
  }

  .fam-send.is-cool {
    background: #0F65CD;
  }

  .fam-send:hover {
    filter: brightness(0.94);
    color: #fff;
  }

  /* ============================================================
   STORY CARDS — a drop capital opens each narrative
   ============================================================ */
  .fam-story {
    position: relative;
    height: 100%;
    padding: 20px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    /* a second hairline inset, like a bound page */
    box-shadow: inset 0 0 0 4px var(--bs-body-bg), inset 0 0 0 5px var(--bs-border-color);
    transition: var(--transition);
  }

  .fam-story:hover {
    box-shadow: inset 0 0 0 4px var(--bs-body-bg), inset 0 0 0 5px rgba(31, 59, 96, 0.28), var(--shadow-lift);
  }

  .fam-story-title {
    margin: 0 0 10px;
    font-size: 14px;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--bs-emphasis-color);
  }

  .fam-story-txt {
    margin: 0;
    font-size: 13px;
    line-height: 1.7;
    color: var(--bs-secondary-color);
    /* the drop capital */
  }

  .fam-story-txt::first-letter {
    float: left;
    margin: 4px 8px 0 0;
    font-size: 34px;
    line-height: 0.8;
    font-weight: 700;
    color: var(--bs-primary);
  }

  /* ============================================================
   COPILOT — composer tiles with an addressee line
   ============================================================ */
  .fam-compose {
    display: flex;
    flex-direction: column;
    gap: 12px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .fam-compose:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--aix-glow);
  }

  .fam-compose:hover .fam-compose-ic {
    background: var(--bs-primary);
    color: #fff;
  }

  .fam-compose-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 12px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 18px;
    transition: var(--transition);
  }

  .fam-compose-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the addressee line, like the head of a letter */
  .fam-to {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px dashed var(--bs-border-color);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .fam-to b {
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   PARTNERSHIP TIMELINE — faces on the line
   ============================================================ */
  .fam-line {
    position: relative;
    padding-left: 54px;
  }

  .fam-line::before {
    content: "";
    position: absolute;
    left: 19px;
    top: 16px;
    bottom: 16px;
    width: 2px;
    background: linear-gradient(180deg, var(--bs-primary), rgba(31, 59, 96, 0.14));
  }

  .fam-mark {
    position: relative;
    padding: 15px 18px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .fam-mark+.fam-mark {
    margin-top: 14px;
  }

  .fam-mark:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* the node is an avatar, sat on the line */

  .fam-mark .fam-mark-face {
    position: absolute;
    left: -54px;
    top: 14px;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    border: 2px solid var(--bs-body-bg);
    box-shadow: var(--shadow);
    object-fit: cover;
  }

  .fam-mark .fam-mark-ic {
    position: absolute;
    left: -54px;
    top: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 17px;
  }

  .fam-mark.is-now .fam-mark-ic {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  .fam-mark-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   OPPORTUNITY CARDS — a calendar chip at the left
   ============================================================ */
  .fam-opp {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    height: 100%;
    padding: 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .fam-opp:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .fam-opp:hover .fam-date {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  /* a torn-off calendar leaf */
  .fam-date {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 50px;
    height: 54px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-emphasis-color);
    line-height: 1;
    transition: var(--transition);
  }

  .fam-date b {
    font-size: 19px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .fam-date span {
    margin-top: 3px;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    opacity: 0.75;
  }

  .fam-opp-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   INSIGHT ROWS — a soft tinted band with a leading glyph
   ============================================================ */
  .fam-ins {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    height: 100%;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .fam-ins:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .fam-ins-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 12px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .fam-ins-title {
    margin: 0 0 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   WORKSPACE OFFCANVAS — one continuous progress rule
   ============================================================ */
  .offcanvas.offcanvas-end.fam-ws {
    width: 88% !important;
    max-width: 1420px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.fam-ws {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.fam-ws .offcanvas-body {
    padding: 22px;
  }

  .fam-ws-head {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding: 20px 22px;
    background: linear-gradient(200deg, #F2F5FF 0%, var(--bs-body-bg) 58%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  /* the stepper: five labels above one rule that fills to the active stage */
  .fam-steps {
    position: relative;
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 0;
    list-style: none;
    margin: 0;
    padding: 18px 22px 0;
    background: var(--bs-body-bg);
    border-bottom: 1px solid var(--bs-border-color);
    /* the continuous track sits under every step */
  }

  .fam-steps::after {
    content: "";
    position: absolute;
    left: 22px;
    right: 22px;
    bottom: 0;
    height: 3px;
    border-radius: 2px;
    background: var(--bs-tertiary-bg);
  }

  @media (max-width: 767.98px) {
    .fam-steps {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .fam-steps::after {
      display: none;
    }
  }

  .fam-step {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 10px 12px 16px;
    border: 0;
    background: transparent;
    text-align: left;
    transition: var(--transition);
    /* the filled portion of the rule, per step */
  }

  .fam-step::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: 3px;
    border-radius: 2px;
    background: transparent;
    transition: var(--transition);
  }

  .fam-step:hover .fam-step-n {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
  }

  .fam-step.active::after {
    background: var(--bs-primary);
  }

  .fam-step.active .fam-step-n {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  .fam-step.active .fam-step-txt span:last-child {
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 767.98px) {
    .fam-step {
      padding-bottom: 10px;
    }

    .fam-step::after {
      display: none;
    }
  }

  .fam-step-n {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 10px;
    background: var(--bs-body-bg);
    border: 1.5px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    transition: var(--transition);
  }

  .fam-step-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
    line-height: 1.25;
  }

  .fam-step-txt span:first-child {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .fam-step-txt span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  /* panels inside the workspace */
  .fam-box {
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .fam-box-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 13px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .fam-box-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fam-box-body {
    padding: 16px;
  }

  .fam-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .fam-row+.fam-row {
    border-top: 1px dashed var(--bs-border-color);
  }

  .fam-row b {
    font-weight: 600;
  }

  /* ============================================================
   PREMIUM ACCORDION + EMPTY STATE
   ============================================================ */
  .fam-acc .accordion-item {
    margin-bottom: 10px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius) !important;
    overflow: hidden;
  }

  .fam-acc .accordion-button {
    padding: 14px 16px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    box-shadow: none;
  }

  .fam-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .fam-acc .accordion-button:focus {
    box-shadow: none;
  }

  .fam-acc .accordion-body {
    padding: 15px 16px;
    font-size: 13px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
    border-top: 1px solid var(--bs-border-color);
  }

  .fam-empty {
    padding: 40px 24px;
    text-align: center;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  .fam-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    margin-bottom: 14px;
    border-radius: 18px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    color: var(--bs-primary);
    font-size: 25px;
  }

  /* ============================================================
   23. REVENUE INTELLIGENCE  —  prefix `rev-`

   The eighth family. Its subject is money and likelihood, so its language
   comes from the ledger: dotted leaders running to an amount, tabular
   figures, segmented probability blocks and a forecast cone.

     aix-  enclosed cards, hairline dividers, chevron steppers
     atn-  banded surfaces, a vertical spine, stations, arc gauges
     sdt-  portrait medallion, chapter numerals, date gutter, dot scales
     tto-  slot grids, bracketed marks, before/after bars, a horizontal track
     hwk-  paper sheets, margin rules, grade seals, rubric strips
     tch-  tinted bands, facet bars, definition rows, medals, folded corners
     fam-  paired avatars, message threads, drop capitals, calendar chips
     rev-  dotted leaders, tabular amounts, probability blocks, impact rails
           and a forecast cone

   Nothing here overrides a rule from the families above.
   ============================================================ */
  @media (prefers-reduced-motion: reduce) {

    [class*=rev-],
    [class*=rev-]::before,
    [class*=rev-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- section heading: title, dotted leader, figure --------------------
   Reads like a line in a statement rather than like a page heading. */
  .rev-hd {
    margin-bottom: 24px;
  }

  .rev-hd-line {
    display: flex;
    align-items: baseline;
    gap: 12px;
  }

  .rev-hd-title {
    margin: 0;
    flex-shrink: 0;
    font-size: 20px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
  }

  /* the leader itself */
  .rev-leader {
    flex: 1 1 auto;
    min-width: 24px;
    height: 1px;
    align-self: center;
    background-image: linear-gradient(90deg, var(--bs-border-color) 33%, transparent 0);
    background-size: 6px 1px;
    background-repeat: repeat-x;
  }

  .rev-hd-fig {
    flex-shrink: 0;
    font-size: 15px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--bs-primary);
  }

  .rev-hd-sub {
    margin: 8px 0 0;
    font-size: 13px;
    color: var(--bs-secondary-color);
    max-width: 700px;
  }

  /* ---- shared pieces ---------------------------------------------------- */
  .rev-lbl {
    display: block;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* every amount on the page is set in tabular figures */
  .rev-amt {
    font-variant-numeric: tabular-nums;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
  }

  .rev-amt.is-lg {
    font-size: 24px;
  }

  .rev-amt.is-md {
    font-size: 17px;
  }

  .rev-amt.is-in {
    color: #1ABE17;
  }

  .rev-amt.is-out {
    color: #E82646;
  }

  .rev-tag {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 10px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-emphasis-color);
    white-space: nowrap;
  }

  .rev-tag i {
    font-size: 13px;
  }

  .rev-tag.is-ai {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.2);
    color: var(--bs-primary);
  }

  .rev-tag.is-likely {
    background: #E8F9E8;
    border-color: #D1F2D1;
    color: #1ABE17;
  }

  .rev-tag.is-watch {
    background: #E7F1FC;
    border-color: #CFE2FA;
    color: #0F65CD;
  }

  .rev-tag.is-slow {
    background: #FEF8EA;
    border-color: #FDF1D6;
    color: #EAB300;
  }

  .rev-tag.is-risk {
    background: #FDE9ED;
    border-color: #FAD4DA;
    color: #E82646;
  }

  /* Dark mode - these status tags used solid light pastel backgrounds
   (#E8F9E8/#E7F1FC/#FEF8EA/#FDE9ED), which read as flat white/near-white
   chips floating on a dark card. Swapped for translucent washes of the
   same brand color, with the label brightened for contrast - the same
   treatment .ops-chip's dark variant already used for its "is-live"
   state, extended to every status color. */
  html[data-theme=dark] .rev-tag.is-likely {
    background: rgba(26, 190, 23, 0.16);
    border-color: rgba(26, 190, 23, 0.32);
    color: color-mix(in srgb, #1ABE17 60%, white);
  }

  html[data-theme=dark] .rev-tag.is-watch {
    background: rgba(15, 101, 205, 0.16);
    border-color: rgba(15, 101, 205, 0.32);
    color: color-mix(in srgb, #0F65CD 60%, white);
  }

  html[data-theme=dark] .rev-tag.is-slow {
    background: rgba(234, 179, 0, 0.16);
    border-color: rgba(234, 179, 0, 0.32);
    color: color-mix(in srgb, #EAB300 60%, white);
  }

  html[data-theme=dark] .rev-tag.is-risk {
    background: rgba(232, 38, 70, 0.16);
    border-color: rgba(232, 38, 70, 0.32);
    color: color-mix(in srgb, #E82646 60%, white);
  }

  /* ---- probability blocks: the family's signature readout ---------------
   Ten discrete blocks, filled to the likelihood. Discrete rather than a
   continuous bar, because a forecast is a count of outcomes, not a level. */
  .rev-prob {
    display: flex;
    gap: 3px;
  }

  .rev-prob i {
    flex: 1 1 0;
    height: 14px;
    border-radius: 2px;
    background: var(--bs-tertiary-bg);
  }

  .rev-prob i.on {
    background: var(--bs-primary);
  }

  .rev-prob.is-likely i.on {
    background: #1ABE17;
  }

  .rev-prob.is-slow i.on {
    background: #EAB300;
  }

  .rev-prob.is-risk i.on {
    background: #E82646;
  }

  .rev-prob.is-sm i {
    height: 8px;
  }

  /* a ledger row: label, leader, value */
  .rev-row {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding: 8px 0;
    font-size: 13px;
  }

  .rev-row+.rev-row {
    border-top: 1px solid var(--bs-border-color);
  }

  .rev-row>span:first-child {
    flex-shrink: 0;
    color: var(--bs-secondary-color);
  }

  .rev-row>b {
    flex-shrink: 0;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   HERO — copy on the left, a forecast cone on the right
   ============================================================ */
  .rev-hero {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius);
    background: linear-gradient(105deg, var(--bs-body-bg) 0%, var(--bs-body-bg) 50%, #E8F9E8 100%), var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* a faint ledger rule across the whole panel */
  .rev-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: repeating-linear-gradient(180deg, transparent 0 39px, var(--bs-border-color) 39px 40px);
    opacity: 0.4;
    mask-image: linear-gradient(180deg, transparent, #000 60%);
    pointer-events: none;
  }

  .rev-hero-inner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 380px;
    gap: 34px;
    padding: 28px;
  }

  @media (max-width: 1299.98px) {
    .rev-hero-inner {
      grid-template-columns: minmax(0, 1fr);
      gap: 26px;
    }
  }

  @media (max-width: 575.98px) {
    .rev-hero-inner {
      padding: 22px;
    }
  }

  .rev-hero-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 5px 12px;
    border-radius: 4px;
    background: var(--bs-emphasis-color);
    color: #fff;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

  .rev-hero-title {
    margin: 14px 0 10px;
    font-size: 30px;
    line-height: 1.22;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .rev-hero-title em {
    font-style: normal;
    font-variant-numeric: tabular-nums;
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  @media (max-width: 767.98px) {
    .rev-hero-title {
      font-size: 24px;
    }
  }

  /* the status block is a short statement, ruled like one */
  .rev-hero-stmt {
    margin-top: 20px;
    padding: 4px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  /* ---- illustration: the forecast cone ---- */
  .rev-cone-panel {
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 20px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--aix-glow);
  }

  /* three nested bands widening to the right: the range of outcomes */
  .rev-cone {
    position: relative;
    height: 132px;
  }

  .rev-cone-band {
    position: absolute;
    inset: 0;
    border-radius: 6px;
  }

  .rev-cone-band.b1 {
    background: linear-gradient(90deg, rgba(31, 59, 96, 0.05), rgba(31, 59, 96, 0.16));
    clip-path: polygon(0 46%, 100% 4%, 100% 96%, 0 54%);
  }

  .rev-cone-band.b2 {
    background: linear-gradient(90deg, rgba(31, 59, 96, 0.1), rgba(31, 59, 96, 0.3));
    clip-path: polygon(0 47%, 100% 24%, 100% 76%, 0 53%);
  }

  /* the expected line runs through the middle */

  .rev-cone-band.b3 {
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    clip-path: polygon(0 48%, 100% 46%, 100% 54%, 0 52%);
  }

  .rev-cone-pin {
    position: absolute;
    right: 0;
    top: 50%;
    transform: translate(50%, -50%);
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 3px solid var(--bs-primary);
    box-shadow: var(--shadow);
  }

  .rev-cone-axis {
    display: flex;
    justify-content: space-between;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   REVENUE CASE CARDS — statement head, amount, probability
   ============================================================ */
  .rev-case {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .rev-case:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .rev-case-head {
    display: flex;
    align-items: center;
    gap: 13px;
    padding: 16px 18px;
    border-bottom: 1px dashed var(--bs-border-color);
  }

  .rev-case-name {
    margin: 0 0 2px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the outstanding amount sits alone on a tinted shelf */
  .rev-shelf {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 12px;
    padding: 14px 18px;
    background: var(--bs-secondary-bg);
  }

  .rev-case-body {
    display: flex;
    flex-direction: column;
    gap: 13px;
    flex: 1 1 auto;
    padding: 16px 18px;
  }

  .rev-case-foot {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 18px;
    border-top: 1px solid var(--bs-border-color);
  }

  .rev-ico {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: 6px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 16px;
    transition: var(--transition);
  }

  .rev-ico:hover {
    color: var(--bs-primary);
    border-color: var(--bs-primary);
    background: var(--tint-primary);
  }

  /* ============================================================
   EXPLAINABLE AI — content left, a tinted impact rail right
   ============================================================ */
  .rev-note {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 232px;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .rev-note:hover {
    box-shadow: var(--shadow-lift);
  }

  @media (max-width: 991.98px) {
    .rev-note {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  .rev-note-body {
    padding: 20px;
  }

  .rev-note-obs {
    margin: 0 0 12px;
    font-size: 15.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .rev-ev {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding: 7px 0;
    font-size: 12.5px;
  }

  .rev-ev+.rev-ev {
    border-top: 1px dotted var(--bs-border-color);
  }

  .rev-ev>span:first-child {
    flex-shrink: 0;
    color: var(--bs-secondary-color);
  }

  .rev-ev>b {
    flex-shrink: 0;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  /* the rail carries the money view of the same finding */
  .rev-rail {
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 20px;
    background: linear-gradient(180deg, var(--tint-primary), var(--bs-secondary-bg));
    border-left: 1px solid var(--bs-border-color);
  }

  .rev-rail.is-likely {
    background: linear-gradient(180deg, #E8F9E8, var(--bs-secondary-bg));
  }

  .rev-rail.is-slow {
    background: linear-gradient(180deg, #FEF8EA, var(--bs-secondary-bg));
  }

  .rev-rail.is-risk {
    background: linear-gradient(180deg, #FDE9ED, var(--bs-secondary-bg));
  }

  @media (max-width: 991.98px) {
    .rev-rail {
      border-left: 0;
      border-top: 1px solid var(--bs-border-color);
    }
  }

  /* ============================================================
   INTELLIGENCE CARDS — an amount block beside the finding
   ============================================================ */
  .rev-int {
    display: flex;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .rev-int:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .rev-int-fig {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    width: 108px;
    padding: 16px 10px;
    text-align: center;
    background: var(--bs-secondary-bg);
    border-right: 1px solid var(--bs-border-color);
  }

  .rev-int-fig i {
    font-size: 19px;
    color: var(--bs-primary);
  }

  .rev-int-body {
    padding: 16px 18px;
  }

  .rev-int-title {
    margin: 0 0 10px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .rev-kv {
    margin-bottom: 10px;
  }

  .rev-kv span:first-child {
    display: block;
    margin-bottom: 2px;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .rev-kv span:last-child {
    display: block;
    font-size: 12.5px;
    line-height: 1.55;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   COLLECTION CARDS — probability blocks across the top
   ============================================================ */
  .rev-rec {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .rev-rec:hover {
    box-shadow: var(--shadow-lift);
  }

  .rev-rec-top {
    padding: 14px 16px 12px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .rev-rec-body {
    display: flex;
    flex-direction: column;
    gap: 10px;
    flex: 1 1 auto;
    padding: 16px;
  }

  .rev-rec-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .rev-rec-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px dashed var(--bs-border-color);
  }

  /* ============================================================
   OPPORTUNITY TILES — a corner amount badge
   ============================================================ */
  .rev-opp {
    position: relative;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .rev-opp:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .rev-opp-badge {
    position: absolute;
    right: 16px;
    top: 16px;
    padding: 4px 9px;
    border-radius: 4px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .rev-opp-badge.is-likely {
    background: #E8F9E8;
    color: #1ABE17;
  }

  .rev-opp-badge.is-slow {
    background: #FEF8EA;
    color: #EAB300;
  }

  .rev-opp-badge.is-risk {
    background: #FDE9ED;
    color: #E82646;
  }

  html[data-theme=dark] .rev-opp-badge.is-likely {
    background: rgba(26, 190, 23, 0.16);
    color: color-mix(in srgb, #1ABE17 60%, white);
  }

  html[data-theme=dark] .rev-opp-badge.is-slow {
    background: rgba(234, 179, 0, 0.16);
    color: color-mix(in srgb, #EAB300 60%, white);
  }

  html[data-theme=dark] .rev-opp-badge.is-risk {
    background: rgba(232, 38, 70, 0.16);
    color: color-mix(in srgb, #E82646 60%, white);
  }

  .rev-opp-title {
    margin: 0 0 8px;
    padding-right: 84px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   COPILOT — indexed rows with a run chip
   ============================================================ */
  .rev-do {
    display: flex;
    align-items: center;
    gap: 14px;
    width: 100%;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .rev-do:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--aix-glow);
  }

  .rev-do:hover .rev-do-run {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  .rev-do-ix {
    flex-shrink: 0;
    width: 34px;
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.04em;
    color: var(--bs-secondary-color);
  }

  .rev-do-run {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 11px;
    border-radius: 4px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 11px;
    font-weight: 600;
    transition: var(--transition);
  }

  /* ============================================================
   REVENUE JOURNEY — squares on a dotted rail, amounts at the right
   ============================================================ */
  .rev-journey {
    position: relative;
    padding-left: 30px;
  }

  .rev-journey::before {
    content: "";
    position: absolute;
    left: 8px;
    top: 14px;
    bottom: 14px;
    border-left: 2px dotted var(--bs-border-color);
  }

  .rev-stop {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .rev-stop+.rev-stop {
    margin-top: 12px;
  }

  .rev-stop:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* a small square sat on the dotted rail */

  .rev-stop::before {
    content: "";
    position: absolute;
    left: -27px;
    top: 22px;
    width: 12px;
    height: 12px;
    border-radius: 3px;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-tertiary-bg);
  }

  .rev-stop.is-done::before {
    background: #1ABE17;
    border-color: #1ABE17;
  }

  .rev-stop.is-now {
    background: var(--bs-body-bg);
    border-color: rgba(31, 59, 96, 0.3);
  }

  .rev-stop.is-now::before {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  .rev-stop-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   FINANCIAL OPPORTUNITY — a dotted-leader stat foot
   ============================================================ */
  .rev-fin {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .rev-fin:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .rev-fin-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    margin-bottom: 12px;
    border-radius: 8px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .rev-fin-title {
    margin: 0 0 6px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .rev-fin-foot {
    margin-top: auto;
    padding-top: 14px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   INSIGHT ROWS — a large figure leading the line
   ============================================================ */
  .rev-ins {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    height: 100%;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .rev-ins:hover {
    box-shadow: var(--shadow);
  }

  .rev-ins-fig {
    flex-shrink: 0;
    min-width: 78px;
    font-size: 21px;
    font-weight: 700;
    line-height: 1.2;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.02em;
    color: var(--bs-primary);
  }

  .rev-ins-fig.is-in {
    color: #1ABE17;
  }

  .rev-ins-fig.is-out {
    color: #E82646;
  }

  .rev-ins-title {
    margin: 0 0 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   WORKSPACE OFFCANVAS — boxed steps with a filling top edge
   ============================================================ */
  .offcanvas.offcanvas-end.rev-ws {
    width: 88% !important;
    max-width: 1440px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.rev-ws {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.rev-ws .offcanvas-body {
    padding: 22px;
  }

  .rev-ws-head {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding: 20px 22px;
    background: linear-gradient(105deg, var(--bs-body-bg) 0%, #E8F9E8 100%);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .rev-steps {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 10px;
    list-style: none;
    margin: 0;
    padding: 16px 22px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .rev-steps {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .rev-step {
    position: relative;
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 12px 14px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    text-align: left;
    transition: var(--transition);
    /* the top edge fills when active */
  }

  .rev-step::before {
    content: "";
    position: absolute;
    left: -1px;
    right: -1px;
    top: -1px;
    height: 3px;
    border-radius: var(--radius-sm) var(--radius-sm) 0 0;
    background: transparent;
    transition: var(--transition);
  }

  /* the caret linking to the next step */

  .rev-step::after {
    content: "";
    position: absolute;
    left: calc(100% + 1px);
    top: 50%;
    transform: translateY(-50%);
    border-width: 5px 0 5px 6px;
    border-style: solid;
    border-color: transparent transparent transparent var(--bs-border-color);
  }

  .rev-step.is-last::after {
    display: none;
  }

  .rev-step:hover {
    border-color: rgba(31, 59, 96, 0.3);
  }

  .rev-step.active {
    border-color: rgba(31, 59, 96, 0.35);
    box-shadow: var(--shadow);
  }

  .rev-step.active::before {
    background: var(--bs-primary);
  }

  .rev-step.active .rev-step-n {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  .rev-step.active .rev-step-txt span:last-child {
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 767.98px) {
    .rev-step::after {
      display: none;
    }
  }

  .rev-step-n {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 5px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    transition: var(--transition);
  }

  .rev-step-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
    line-height: 1.25;
  }

  .rev-step-txt span:first-child {
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .rev-step-txt span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  /* panels inside the workspace */
  .rev-box {
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .rev-box-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 13px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .rev-box-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .rev-box-body {
    padding: 16px;
  }

  /* a quoted note from the finance team */
  .rev-quote {
    padding: 14px 16px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border-left: 3px solid var(--bs-primary);
    font-size: 13px;
    line-height: 1.68;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   PREMIUM ACCORDION + EMPTY STATE
   ============================================================ */
  .rev-acc .accordion-item {
    margin-bottom: 10px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius) !important;
    overflow: hidden;
  }

  .rev-acc .accordion-button {
    padding: 14px 16px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    box-shadow: none;
  }

  .rev-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .rev-acc .accordion-button:focus {
    box-shadow: none;
  }

  .rev-acc .accordion-body {
    padding: 15px 16px;
    font-size: 13px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
    border-top: 1px solid var(--bs-border-color);
  }

  .rev-empty {
    padding: 40px 24px;
    text-align: center;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px dashed var(--bs-border-color);
  }

  .rev-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    margin-bottom: 14px;
    border-radius: 8px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 25px;
  }

  /* ============================================================
   24. AI OPERATING CENTER  —  prefix `ops-`

   The ninth family, and the one that defines the module. Every other AI
   page is a single application; this one is the surface they all launch
   from, so it is the only family that goes dark and cinematic.

     aix-  enclosed cards, hairline dividers, chevron steppers
     atn-  banded surfaces, a vertical spine, stations, arc gauges
     sdt-  portrait medallion, chapter numerals, date gutter, dot scales
     tto-  slot grids, bracketed marks, before/after bars, a horizontal track
     hwk-  paper sheets, margin rules, grade seals, rubric strips
     tch-  tinted bands, facet bars, definition rows, medals, folded corners
     fam-  paired avatars, message threads, drop capitals, calendar chips
     rev-  dotted leaders, tabular amounts, probability blocks, forecast cone
     ops-  a dark mission surface, glass panels, bento spans, telemetry rails
           and a glowing pipeline

   Nothing here overrides a rule from the families above.
   ============================================================ */
  /* dark surface tokens, scoped to this family only */
  @media (prefers-reduced-motion: reduce) {

    [class*=ops-],
    [class*=ops-]::before,
    [class*=ops-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- section heading: an eyebrow, a title, a hairline to the edge ---- */
  .ops-hd {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 16px;
    margin-bottom: 24px;
  }

  .ops-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--bs-primary);
  }

  .ops-eyebrow::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .ops-hd-title {
    margin: 0;
    font-size: 22px;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .ops-hd-sub {
    margin: 5px 0 0;
    font-size: 13px;
    color: var(--bs-secondary-color);
    max-width: 720px;
  }

  /* ---- shared pieces ---------------------------------------------------- */
  .ops-lbl {
    display: block;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* geometry, typography and surface come from the shared badge component */

  .ops-chip i {
    font-size: 12px;
  }

  .ops-chip.is-ai {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.2);
    color: var(--bs-primary);
  }

  .ops-chip.is-live {
    background: #E8F9E8;
    border-color: #D1F2D1;
    color: #1ABE17;
  }

  .ops-chip.is-idle {
    background: #E7F1FC;
    border-color: #CFE2FA;
    color: #0F65CD;
  }

  .ops-chip.is-queued {
    background: #FEF8EA;
    border-color: #FDF1D6;
    color: #EAB300;
  }

  .ops-chip.is-off {
    background: #FDE9ED;
    border-color: #FAD4DA;
    color: #E82646;
  }

  /* on the dark surface the chip becomes glass */

  .ops-dark .ops-chip {
    background: rgba(255, 255, 255, 0.07);
    border-color: var(--bs-border-color);
    color: var(--bs-emphasis-color);
  }

  .ops-dark .ops-chip.is-live {
    background: rgba(26, 190, 23, 0.16);
    border-color: rgba(26, 190, 23, 0.3);
    color: #7BE87A;
  }

  .ops-dark .ops-chip.is-ai {
    background: rgba(108, 139, 255, 0.16);
    border-color: rgba(108, 139, 255, 0.32);
    color: #A9BCFF;
  }

  /* Site dark mode - .ops-dark above only covers chips inside this page's
   permanently-dark "glass" panels; chips elsewhere on the page still sat
   on solid light pastel backgrounds when the whole site switched to dark
   mode. Same translucent-wash treatment as .ops-dark, so a chip looks the
   same whether it's in a glass panel or on an ordinary dark-mode card. */
  html[data-theme=dark] .ops-chip.is-live {
    background: rgba(26, 190, 23, 0.16);
    border-color: rgba(26, 190, 23, 0.32);
    color: color-mix(in srgb, #1ABE17 60%, white);
  }

  html[data-theme=dark] .ops-chip.is-idle {
    background: rgba(15, 101, 205, 0.16);
    border-color: rgba(15, 101, 205, 0.32);
    color: color-mix(in srgb, #0F65CD 60%, white);
  }

  html[data-theme=dark] .ops-chip.is-queued {
    background: rgba(234, 179, 0, 0.16);
    border-color: rgba(234, 179, 0, 0.32);
    color: color-mix(in srgb, #EAB300 60%, white);
  }

  html[data-theme=dark] .ops-chip.is-off {
    background: rgba(232, 38, 70, 0.16);
    border-color: rgba(232, 38, 70, 0.32);
    color: color-mix(in srgb, #E82646 60%, white);
  }

  /* a live pulsing dot, used for service status */
  .ops-dot {
    position: relative;
    display: inline-block;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: #1ABE17;
    flex-shrink: 0;
  }

  .ops-dot::after {
    content: "";
    position: absolute;
    inset: -4px;
    border-radius: 50%;
    border: 1px solid currentColor;
    color: #1ABE17;
    opacity: 0;
    animation: ops-pulse 2.4s ease-out infinite;
  }

  .ops-dot.is-idle {
    background: #0F65CD;
  }

  .ops-dot.is-idle::after {
    color: #0F65CD;
  }

  .ops-dot.is-queued {
    background: #EAB300;
  }

  .ops-dot.is-queued::after {
    color: #EAB300;
  }

  .ops-dot.is-off {
    background: #E82646;
  }

  .ops-dot.is-off::after {
    animation: none;
  }

  @keyframes ops-pulse {
    0% {
      transform: scale(0.6);
      opacity: 0.9;
    }

    100% {
      transform: scale(1.9);
      opacity: 0;
    }
  }

  /* health meter — four segments */
  .ops-health {
    display: inline-flex;
    gap: 3px;
  }

  .ops-health i {
    width: 14px;
    height: 4px;
    border-radius: 2px;
    background: var(--bs-tertiary-bg);
  }

  .ops-health i.on {
    background: #1ABE17;
  }

  .ops-health.is-warn i.on {
    background: #EAB300;
  }

  .ops-health.is-bad i.on {
    background: #E82646;
  }

  .ops-dark .ops-health i {
    background: rgba(255, 255, 255, 0.16);
  }

  /* ============================================================
   1. MISSION CONTROL — the dark cinematic hero
   ============================================================ */
  .ops-mission {
    position: relative;
    overflow: hidden;
    border-radius: 20px;
    background: radial-gradient(90% 120% at 10% 0%, rgba(108, 139, 255, 0.28) 0%, transparent 55%), radial-gradient(70% 100% at 100% 100%, rgba(53, 214, 229, 0.2) 0%, transparent 58%), linear-gradient(160deg, var(--bs-secondary-color) 0%, var(--bs-emphasis-color) 100%);
    color: var(--bs-body-color);
    box-shadow: 0 24px 60px rgba(14, 21, 38, 0.28);
  }

  /* a fine grid, faded out toward the foot — the mission surface */
  .ops-mission::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: linear-gradient(var(--bs-border-color) 1px, transparent 1px), linear-gradient(90deg, var(--bs-border-color) 1px, transparent 1px);
    background-size: 54px 54px;
    mask-image: radial-gradient(120% 90% at 50% 0%, #000 0%, transparent 78%);
    pointer-events: none;
  }

  /* a slow sweep of light across the surface */
  .ops-mission::after {
    content: "";
    position: absolute;
    top: -40%;
    left: -30%;
    width: 60%;
    height: 180%;
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.05), transparent);
    transform: rotate(18deg);
    animation: ops-sweep 9s ease-in-out infinite;
    pointer-events: none;
  }

  @keyframes ops-sweep {

    0%,
    100% {
      transform: translateX(-10%) rotate(18deg);
      opacity: 0;
    }

    50% {
      transform: translateX(120%) rotate(18deg);
      opacity: 1;
    }
  }

  .ops-mission-inner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 392px;
    gap: 40px;
    padding: 40px;
  }

  @media (max-width: 1299.98px) {
    .ops-mission-inner {
      grid-template-columns: minmax(0, 1fr);
      gap: 30px;
      padding: 32px;
    }
  }

  @media (max-width: 575.98px) {
    .ops-mission-inner {
      padding: 24px;
    }
  }

  .ops-mission-badge {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    padding: 6px 14px 6px 8px;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.07);
    border: 1px solid var(--bs-border-color);
    backdrop-filter: blur(8px);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .ops-mission-badge i {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--bs-primary), var(--accent-strong));
    color: #0E1526;
    font-size: 14px;
  }

  .ops-mission-title {
    margin: 20px 0 14px;
    font-size: 42px;
    line-height: 1.12;
    font-weight: 600;
    letter-spacing: -0.03em;
    color: var(--bs-emphasis-color);
  }

  .ops-mission-title em {
    font-style: normal;
    background: linear-gradient(90deg, var(--bs-primary), var(--accent-strong));
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  @media (max-width: 991.98px) {
    .ops-mission-title {
      font-size: 32px;
    }
  }

  @media (max-width: 575.98px) {
    .ops-mission-title {
      font-size: 26px;
    }
  }

  .ops-mission-lead {
    margin: 0;
    max-width: 640px;
    font-size: 15px;
    line-height: 1.7;
    color: var(--bs-body-color);
  }

  /* telemetry rail: figures on the dark surface, divided by hairlines */
  .ops-rail {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1px;
    margin-top: 30px;
    background: var(--bs-border-color);
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    overflow: hidden;
  }

  @media (max-width: 575.98px) {
    .ops-rail {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .ops-rail-cell {
    padding: 15px 18px;
    background: rgba(255, 255, 255, 0.02);
    line-height: 1.3;
  }

  .ops-rail-cell b {
    display: block;
    margin-top: 5px;
    font-size: 21px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .ops-rail-cell b small {
    font-size: 12px;
    font-weight: 500;
    color: var(--bs-body-color);
  }

  .ops-rail-cell span:first-child {
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.5);
  }

  /* primary actions on the dark surface */
  .ops-btn {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 11px 20px;
    border-radius: 10px;
    border: 1px solid var(--bs-border-color);
    background: rgba(255, 255, 255, 0.07);
    color: var(--bs-emphasis-color);
    font-size: 14px;
    font-weight: 600;
    backdrop-filter: blur(8px);
    transition: var(--transition);
  }

  .ops-btn:hover {
    background: rgba(255, 255, 255, 0.13);
    color: var(--bs-emphasis-color);
    transform: translateY(-1px);
  }

  .ops-btn.is-primary {
    background: linear-gradient(135deg, var(--bs-primary), #4C6BE8);
    border-color: transparent;
    box-shadow: 0 8px 24px rgba(76, 107, 232, 0.4);
  }

  .ops-btn.is-primary:hover {
    box-shadow: 0 12px 30px rgba(76, 107, 232, 0.5);
  }

  /* ---- the glass mission panel on the right ---- */
  .ops-glass {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 22px;
    border-radius: 16px;
    background: rgba(255, 255, 255, 0.06);
    border: 1px solid var(--bs-border-color);
    backdrop-filter: blur(14px);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08);
  }

  /* a floating orb behind the glass */
  .ops-orb {
    position: absolute;
    border-radius: 50%;
    filter: blur(30px);
    pointer-events: none;
  }

  .ops-orb.o1 {
    width: 160px;
    height: 160px;
    right: -40px;
    top: -50px;
    background: rgba(108, 139, 255, 0.5);
    animation: ops-drift 14s ease-in-out infinite;
  }

  .ops-orb.o2 {
    width: 120px;
    height: 120px;
    left: -30px;
    bottom: -40px;
    background: rgba(53, 214, 229, 0.38);
    animation: ops-drift 18s ease-in-out infinite reverse;
  }

  @keyframes ops-drift {

    0%,
    100% {
      transform: translate(0, 0);
    }

    50% {
      transform: translate(-16px, 20px);
    }
  }

  /* the mission list inside the glass */
  .ops-mission-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 11px 0;
    font-size: 13px;
    color: var(--bs-body-color);
  }

  .ops-mission-row+.ops-mission-row {
    border-top: 1px solid var(--bs-border-color);
  }

  .ops-mission-row b {
    display: block;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ops-mission-row time {
    flex-shrink: 0;
    font-size: 11px;
    font-variant-numeric: tabular-nums;
    color: rgba(255, 255, 255, 0.45);
  }

  .ops-mission-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 10px;
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-emphasis-color);
    font-size: 16px;
  }

  /* ============================================================
   2. BENTO — the capability hub
   ============================================================ */
  .ops-bento {
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 16px;
  }

  @media (max-width: 1199.98px) {
    .ops-bento {
      grid-template-columns: repeat(4, minmax(0, 1fr));
    }
  }

  @media (max-width: 767.98px) {
    .ops-bento {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  /* spans, so the grid reads as a bento rather than as a row of equals */
  .ops-span-2 {
    grid-column: span 2;
  }

  .ops-span-3 {
    grid-column: span 3;
  }

  .ops-span-4 {
    grid-column: span 4;
  }

  @media (max-width: 1199.98px) {

    .ops-span-3,
    .ops-span-4 {
      grid-column: span 4;
    }
  }

  @media (max-width: 767.98px) {

    .ops-span-2,
    .ops-span-3,
    .ops-span-4 {
      grid-column: span 2;
    }
  }

  .ops-tile {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 12px;
    min-height: 168px;
    padding: 20px;
    border-radius: 16px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
    /* a corner glow that arrives on hover */
  }

  .ops-tile::after {
    content: "";
    position: absolute;
    right: -50px;
    top: -50px;
    width: 150px;
    height: 150px;
    border-radius: 50%;
    background: radial-gradient(circle, var(--tint-primary) 0%, transparent 70%);
    opacity: 0;
    transition: var(--transition);
  }

  .ops-tile:hover {
    border-color: rgba(31, 59, 96, 0.32);
    box-shadow: var(--shadow-lift);
    transform: translateY(-2px);
  }

  .ops-tile:hover::after {
    opacity: 1;
  }

  .ops-tile:hover .ops-tile-ic {
    background: linear-gradient(135deg, var(--bs-primary), #02a8b5);
    border-color: transparent;
    color: #fff;
  }

  /* the feature tile carries the dark treatment */

  .ops-tile.is-feature {
    background: radial-gradient(80% 120% at 100% 0%, rgba(53, 214, 229, 0.18) 0%, transparent 60%), linear-gradient(150deg, #1f3b60 0%, #202C4B 100%);
    border-color: transparent;
    color: rgba(255, 255, 255, 0.78);
  }

  .ops-tile.is-feature .ops-tile-title,
  .ops-tile.is-feature .ops-tile-fig {
    color: #fff;
  }

  .ops-tile.is-feature .ops-tile-ic {
    background: rgba(255, 255, 255, 0.12);
    border-color: rgba(255, 255, 255, 0.18);
    color: #fff;
  }

  .ops-tile.is-feature .ops-lbl {
    color: rgba(255, 255, 255, 0.55);
  }

  .ops-tile.is-feature .ops-health i {
    background: rgba(255, 255, 255, 0.2);
  }

  .ops-tile-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: 12px;
    background: var(--tint-primary);
    border: 1px solid transparent;
    color: var(--bs-primary);
    font-size: 20px;
    transition: var(--transition);
  }

  .ops-tile-title {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ops-tile-fig {
    font-size: 26px;
    font-weight: 700;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  /* ---- the full-width tile ------------------------------------------------
   A tile spanning the whole grid cannot keep the stacked layout: the copy
   would run the full width and the figure would sit alone in dead space.
   From lg up it becomes three columns — identity, reading, controls — and
   drops the stacked min-height so it reads as a banner, not a short card. */
  @media (min-width: 992px) {
    .ops-tile.is-wide {
      display: grid;
      grid-template-columns: 268px minmax(0, 1fr) auto;
      align-items: center;
      gap: 28px;
      min-height: 0;
      padding: 22px 24px;
    }

    .ops-tile.is-wide .ops-tile-foot {
      margin-top: 0;
      padding-top: 0;
      border-top: 0;
      flex-direction: column;
      align-items: flex-end;
      gap: 12px;
    }
  }

  /* identity column of the wide tile: icon beside the figure, not above it */
  .ops-tile-lead {
    display: flex;
    align-items: center;
    gap: 14px;
  }

  .ops-tile-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  .is-feature .ops-tile-foot {
    border-top-color: rgba(255, 255, 255, 0.14);
  }

  /* ============================================================
   3. LAUNCHER — large application tiles
   ============================================================ */
  .ops-launch {
    position: relative;
    display: flex;
    align-items: center;
    gap: 16px;
    height: 100%;
    padding: 20px;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
    /* a thin accent that fills from the left on hover */
  }

  .ops-launch::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
    background: linear-gradient(180deg, var(--bs-primary), #02a8b5);
    transform: scaleY(0);
    transform-origin: top;
    transition: var(--transition);
  }

  .ops-launch:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--aix-glow);
  }

  .ops-launch:hover::before {
    transform: scaleY(1);
  }

  .ops-launch:hover .ops-launch-go {
    transform: translateX(4px);
    color: var(--bs-primary);
  }

  .ops-launch-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    border-radius: 14px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 22px;
  }

  .ops-launch-title {
    margin: 0 0 3px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ops-launch-go {
    flex-shrink: 0;
    font-size: 18px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  /* ============================================================
   4. OPERATIONS FEED — a status rail down the left of each card
   ============================================================ */
  .ops-op {
    position: relative;
    display: flex;
    align-items: flex-start;
    gap: 14px;
    padding: 16px 18px 16px 22px;
    border-radius: 12px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .ops-op+.ops-op {
    margin-top: 12px;
  }

  /* the rail */

  .ops-op::before {
    content: "";
    position: absolute;
    left: 10px;
    top: 16px;
    bottom: 16px;
    width: 3px;
    border-radius: 2px;
    background: #1ABE17;
  }

  .ops-op.is-running::before {
    background: var(--bs-primary);
  }

  .ops-op.is-queued::before {
    background: #EAB300;
  }

  .ops-op.is-alert::before {
    background: #E82646;
  }

  .ops-op:hover {
    box-shadow: var(--shadow);
  }

  .ops-op-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 11px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 17px;
  }

  .ops-op-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   5. PIPELINE — six stages with a glowing connector
   ============================================================ */
  .ops-pipe {
    position: relative;
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 12px;
  }

  @media (max-width: 1199.98px) {
    .ops-pipe {
      grid-template-columns: repeat(3, minmax(0, 1fr));
      row-gap: 24px;
    }
  }

  @media (max-width: 575.98px) {
    .ops-pipe {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .ops-stage {
    position: relative;
    padding: 20px 16px 16px;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    text-align: center;
    transition: var(--transition);
    /* the flowing connector to the next stage */
  }

  .ops-stage::after {
    content: "";
    position: absolute;
    left: calc(100% + 1px);
    top: 50%;
    width: 10px;
    height: 2px;
    background: var(--bs-border-color);
    z-index: 1;
  }

  .ops-stage:last-child::after {
    display: none;
  }

  .ops-stage.is-done {
    border-color: rgba(26, 190, 23, 0.3);
    background: #E8F9E8;
  }

  .ops-stage.is-done::after {
    background: #1ABE17;
  }

  .ops-stage.is-live {
    border-color: rgba(31, 59, 96, 0.35);
    box-shadow: var(--aix-glow);
  }

  @media (max-width: 1199.98px) {
    .ops-stage::after {
      display: none;
    }
  }

  .ops-stage-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    margin-bottom: 12px;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 20px;
  }

  .is-done .ops-stage-ic {
    background: #1ABE17;
    border-color: #1ABE17;
    color: #fff;
  }

  .is-live .ops-stage-ic {
    background: linear-gradient(135deg, var(--bs-primary), #02a8b5);
    border-color: transparent;
    color: #fff;
    animation: ops-breathe 2.6s ease-in-out infinite;
  }

  @keyframes ops-breathe {

    0%,
    100% {
      box-shadow: 0 0 0 0 rgba(31, 59, 96, 0.45);
    }

    50% {
      box-shadow: 0 0 0 8px rgba(31, 59, 96, 0);
    }
  }

  .ops-stage-n {
    display: block;
    margin-bottom: 4px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.12em;
    color: var(--bs-secondary-color);
  }

  .ops-stage-title {
    margin: 0 0 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   6. AUTOMATION CARDS — a switch-led head, run times below
   ============================================================ */
  .ops-auto {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .ops-auto:hover {
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow-lift);
  }

  .ops-auto-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 18px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .ops-auto-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ops-auto-body {
    padding: 16px 18px;
  }

  .ops-kv {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 8px 0;
    font-size: 12.5px;
    color: var(--bs-secondary-color);
  }

  .ops-kv+.ops-kv {
    border-top: 1px dashed var(--bs-border-color);
  }

  .ops-kv b {
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   7. AGENT GALLERY — a ringed glyph and capability chips
   ============================================================ */
  .ops-agent {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 20px;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .ops-agent:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  .ops-agent-ic {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    margin-bottom: 14px;
    border-radius: 16px;
    background: linear-gradient(135deg, var(--tint-primary), var(--bs-secondary-bg));
    color: var(--bs-primary);
    font-size: 24px;
    /* a dashed orbit around the glyph */
  }

  .ops-agent-ic::after {
    content: "";
    position: absolute;
    inset: -6px;
    border-radius: 20px;
    border: 1px dashed var(--bs-border-color);
  }

  .ops-agent-name {
    margin: 0 0 4px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ops-caps {
    display: flex;
    flex-wrap: wrap;
    gap: 5px;
    margin: 12px 0;
  }

  .ops-caps span {
    padding: 3px 9px;
    border-radius: 5px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .ops-agent-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 14px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   8. KNOWLEDGE TILES — a count in the corner
   ============================================================ */
  .ops-know {
    position: relative;
    display: flex;
    align-items: flex-start;
    gap: 14px;
    height: 100%;
    padding: 18px;
    border-radius: 14px;
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .ops-know:hover {
    background: var(--bs-body-bg);
    border-color: rgba(31, 59, 96, 0.28);
    box-shadow: var(--shadow);
  }

  .ops-know-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 12px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .ops-know-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ops-know-n {
    flex-shrink: 0;
    font-size: 15px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--bs-primary);
  }

  /* ============================================================
   9. COPILOT — a dark command launcher
   ============================================================ */
  .ops-console {
    position: relative;
    overflow: hidden;
    border-radius: 18px;
    background: radial-gradient(70% 120% at 100% 0%, rgba(53, 214, 229, 0.16) 0%, transparent 55%), linear-gradient(150deg, var(--bs-secondary-color) 0%, var(--bs-emphasis-color) 100%);
    color: var(--bs-body-color);
    padding: 30px;
  }

  @media (max-width: 575.98px) {
    .ops-console {
      padding: 22px;
    }
  }

  .ops-console::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: linear-gradient(90deg, var(--bs-border-color) 1px, transparent 1px);
    background-size: 48px 100%;
    mask-image: linear-gradient(180deg, #000, transparent 70%);
    pointer-events: none;
  }

  .ops-cmd {
    position: relative;
    display: flex;
    align-items: center;
    gap: 14px;
    width: 100%;
    padding: 15px 18px;
    border-radius: 12px;
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-body-color);
    transition: var(--transition);
  }

  .ops-cmd:hover {
    background: rgba(255, 255, 255, 0.1);
    border-color: rgba(108, 139, 255, 0.4);
    color: var(--bs-body-color);
    transform: translateX(3px);
  }

  .ops-cmd:hover .ops-cmd-ic {
    background: linear-gradient(135deg, var(--bs-primary), var(--accent-strong));
    color: #0E1526;
  }

  .ops-cmd-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 11px;
    background: rgba(255, 255, 255, 0.08);
    color: var(--bs-emphasis-color);
    font-size: 18px;
    transition: var(--transition);
  }

  .ops-cmd-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* a keyboard hint on the dark surface */
  .ops-kbd {
    flex-shrink: 0;
    padding: 3px 8px;
    border-radius: 5px;
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid var(--bs-border-color);
    font-size: 11px;
    font-weight: 600;
    color: rgba(255, 255, 255, 0.6);
  }

  /* ============================================================
   10. SHOWCASE — a corner ribbon on what is new
   ============================================================ */
  .ops-new {
    position: relative;
    height: 100%;
    padding: 20px;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .ops-new:hover {
    transform: translateY(-3px);
    box-shadow: var(--shadow-lift);
  }

  /* the ribbon across the top-right corner */
  .ops-ribbon {
    position: absolute;
    right: -34px;
    top: 14px;
    width: 130px;
    padding: 4px 0;
    transform: rotate(38deg);
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    color: #fff;
    text-align: center;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

  .ops-ribbon.is-soon {
    background: linear-gradient(90deg, #EAB300, #F9C55A);
  }

  .ops-ribbon.is-lab {
    background: linear-gradient(90deg, #4A00E5, #1f3b60);
  }

  .ops-new-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    margin-bottom: 14px;
    border-radius: 13px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 20px;
  }

  .ops-new-title {
    margin: 0 0 6px;
    padding-right: 40px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   WORKSPACE OFFCANVAS — a glass rail stepper
   ============================================================ */
  .offcanvas.offcanvas-end.ops-ws {
    width: 90% !important;
    max-width: 1500px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.ops-ws {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.ops-ws .offcanvas-body {
    padding: 24px;
  }

  /* the workspace head keeps the dark mission treatment */
  .ops-ws-head {
    position: relative;
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding: 22px;
    overflow: hidden;
    background: radial-gradient(70% 140% at 0% 0%, rgba(108, 139, 255, 0.3) 0%, transparent 58%), linear-gradient(150deg, var(--bs-secondary-color) 0%, var(--bs-emphasis-color) 100%);
    color: var(--bs-body-color);
  }

  .ops-ws-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    flex-shrink: 0;
    border-radius: 16px;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid var(--bs-border-color);
    color: #fff;
    font-size: 26px;
    backdrop-filter: blur(8px);
  }

  .ops-ws-title {
    margin: 0 0 4px;
    font-size: 19px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
  }

  /* the stepper: pills on a rail, the completed portion glowing */
  .ops-steps {
    position: relative;
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 0;
    list-style: none;
    margin: 0;
    padding: 0;
    background: var(--bs-body-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .ops-steps {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .ops-step {
    position: relative;
    display: flex;
    align-items: center;
    gap: 11px;
    width: 100%;
    padding: 18px 16px;
    border: 0;
    background: transparent;
    text-align: left;
    transition: var(--transition);
    /* hairline between steps */
  }

  .ops-step+.ops-step,
  .ops-step {
    border-right: 1px solid var(--bs-border-color);
  }

  .ops-step:last-child {
    border-right: 0;
  }

  /* the glow bar under the active step */

  .ops-step::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: 3px;
    background: transparent;
    transition: var(--transition);
  }

  .ops-step:hover {
    background: var(--bs-secondary-bg);
  }

  .ops-step.active {
    background: var(--tint-primary);
  }

  .ops-step.active::after {
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    box-shadow: 0 0 12px rgba(31, 59, 96, 0.5);
  }

  .ops-step.active .ops-step-n {
    background: linear-gradient(135deg, var(--bs-primary), #02a8b5);
    border-color: transparent;
    color: #fff;
  }

  .ops-step.active .ops-step-txt span:last-child {
    color: var(--bs-emphasis-color);
  }

  .ops-step-n {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 11px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 12px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    transition: var(--transition);
  }

  .ops-step-txt {
    display: flex;
    flex-direction: column;
    min-width: 0;
    line-height: 1.25;
  }

  .ops-step-txt span:first-child {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .ops-step-txt span:last-child {
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  /* panels inside the workspace */
  .ops-box {
    height: 100%;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .ops-box-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 14px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .ops-box-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ops-box-body {
    padding: 16px;
  }

  /* progress readout used while intelligence generates */
  .ops-prog {
    display: block;
    height: 6px;
    border-radius: 3px;
    background: linear-gradient(90deg, var(--bs-primary) 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  .ops-quote {
    padding: 15px 17px;
    border-radius: 12px;
    background: linear-gradient(135deg, var(--tint-primary), var(--bs-secondary-bg));
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    line-height: 1.68;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   PREMIUM ACCORDION + EMPTY STATE
   ============================================================ */
  .ops-acc .accordion-item {
    margin-bottom: 10px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: 12px !important;
    overflow: hidden;
  }

  .ops-acc .accordion-button {
    padding: 15px 17px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    box-shadow: none;
  }

  .ops-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .ops-acc .accordion-button:focus {
    box-shadow: none;
  }

  .ops-acc .accordion-body {
    padding: 15px 17px;
    font-size: 13px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
    border-top: 1px solid var(--bs-border-color);
  }

  .ops-empty {
    padding: 40px 24px;
    text-align: center;
    border-radius: 14px;
    background: rgba(255, 255, 255, 0.04);
    border: 1px dashed var(--bs-border-color);
    color: var(--bs-body-color);
  }

  .ops-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    margin-bottom: 14px;
    border-radius: 16px;
    background: rgba(255, 255, 255, 0.07);
    border: 1px solid var(--bs-border-color);
    color: #fff;
    font-size: 25px;
  }

  /* ============================================================
   25. STUDENT SUCCESS  —  prefix `lrn-`

   The tenth family, and the only one addressed to a student rather than to
   staff. Its language is warmer and lighter: streak grids, quest bars,
   squircle progress frames, a day schedule and milestone tracks.

     aix-  enclosed cards, hairline dividers, chevron steppers
     atn-  banded surfaces, a vertical spine, stations, arc gauges
     sdt-  portrait medallion, chapter numerals, date gutter, dot scales
     tto-  slot grids, bracketed marks, before/after bars, a horizontal track
     hwk-  paper sheets, margin rules, grade seals, rubric strips
     tch-  tinted bands, facet bars, definition rows, medals, folded corners
     fam-  paired avatars, message threads, drop capitals, calendar chips
     rev-  dotted leaders, tabular amounts, probability blocks, forecast cone
     ops-  dark mission surface, glass panels, bento spans, glowing pipeline
     lrn-  streak grids, quest bars, squircle frames, a day schedule,
           milestone tracks and achievement badges

   Nothing here overrides a rule from the families above.
   ============================================================ */
  @media (prefers-reduced-motion: reduce) {

    [class*=lrn-],
    [class*=lrn-]::before,
    [class*=lrn-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- section heading: a soft squircle glyph and a ruled title -------- */
  .lrn-hd {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-bottom: 24px;
  }

  @media (max-width: 767.98px) {
    .lrn-hd {
      flex-wrap: wrap;
    }
  }

  .lrn-hd-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 46px;
    height: 46px;
    border-radius: 16px;
    background: linear-gradient(135deg, var(--tint-primary), #E6F9FF);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 21px;
  }

  .lrn-hd-title {
    position: relative;
    display: inline-block;
    margin: 0 0 6px;
    padding-bottom: 6px;
    font-size: 20px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
    /* a short gradient rule under the title only */
  }

  .lrn-hd-title::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: 0;
    width: 42px;
    height: 3px;
    border-radius: 2px;
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
  }

  .lrn-hd-sub {
    margin: 0;
    font-size: 13px;
    color: var(--bs-secondary-color);
    max-width: 700px;
  }

  /* ---- shared pieces ---------------------------------------------------- */
  .lrn-lbl {
    display: block;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .lrn-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 4px 10px;
    border-radius: 8px;
    font-size: 11px;
    font-weight: 600;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-emphasis-color);
    white-space: nowrap;
  }

  .lrn-chip i {
    font-size: 13px;
  }

  .lrn-chip.is-ai {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.2);
    color: var(--bs-primary);
  }

  .lrn-chip.is-go {
    background: #E8F9E8;
    border-color: #D1F2D1;
    color: #1ABE17;
  }

  .lrn-chip.is-now {
    background: #E7F1FC;
    border-color: #CFE2FA;
    color: #0F65CD;
  }

  .lrn-chip.is-soon {
    background: #FEF8EA;
    border-color: #FDF1D6;
    color: #EAB300;
  }

  .lrn-chip.is-hot {
    background: #FDE9ED;
    border-color: #FAD4DA;
    color: #E82646;
  }

  html[data-theme=dark] .lrn-chip.is-go {
    background: rgba(26, 190, 23, 0.16);
    border-color: rgba(26, 190, 23, 0.32);
    color: color-mix(in srgb, #1ABE17 60%, white);
  }

  html[data-theme=dark] .lrn-chip.is-now {
    background: rgba(15, 101, 205, 0.16);
    border-color: rgba(15, 101, 205, 0.32);
    color: color-mix(in srgb, #0F65CD 60%, white);
  }

  html[data-theme=dark] .lrn-chip.is-soon {
    background: rgba(234, 179, 0, 0.16);
    border-color: rgba(234, 179, 0, 0.32);
    color: color-mix(in srgb, #EAB300 60%, white);
  }

  html[data-theme=dark] .lrn-chip.is-hot {
    background: rgba(232, 38, 70, 0.16);
    border-color: rgba(232, 38, 70, 0.32);
    color: color-mix(in srgb, #E82646 60%, white);
  }

  /* difficulty: three ascending bars */
  .lrn-diff {
    display: inline-flex;
    align-items: flex-end;
    gap: 3px;
    height: 12px;
  }

  .lrn-diff i {
    width: 4px;
    border-radius: 1px;
    background: var(--bs-tertiary-bg);
  }

  .lrn-diff i:nth-child(1) {
    height: 50%;
  }

  .lrn-diff i:nth-child(2) {
    height: 75%;
  }

  .lrn-diff i:nth-child(3) {
    height: 100%;
  }

  .lrn-diff i.on {
    background: var(--bs-primary);
  }

  .lrn-diff.is-hard i.on {
    background: #E82646;
  }

  .lrn-diff.is-mid i.on {
    background: #EAB300;
  }

  /* ============================================================
   HERO — a bright success hub with a streak grid
   ============================================================ */
  .lrn-hub {
    position: relative;
    overflow: hidden;
    border-radius: 20px;
    background: radial-gradient(80% 130% at 0% 0%, rgba(31, 59, 96, 0.16) 0%, transparent 52%), radial-gradient(70% 120% at 100% 100%, rgba(2, 168, 181, 0.16) 0%, transparent 52%), var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* soft floating shapes, the only decoration on the surface */
  .lrn-hub::before,
  .lrn-hub::after {
    content: "";
    position: absolute;
    border-radius: 40%;
    pointer-events: none;
  }

  .lrn-hub::before {
    width: 220px;
    height: 220px;
    right: 8%;
    top: -110px;
    background: rgba(31, 59, 96, 0.07);
    animation: lrn-float 16s ease-in-out infinite;
  }

  .lrn-hub::after {
    width: 160px;
    height: 160px;
    left: 12%;
    bottom: -100px;
    background: rgba(2, 168, 181, 0.08);
    animation: lrn-float 20s ease-in-out infinite reverse;
  }

  @keyframes lrn-float {

    0%,
    100% {
      transform: translate(0, 0) rotate(0deg);
    }

    50% {
      transform: translate(18px, -14px) rotate(28deg);
    }
  }

  .lrn-hub-inner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) 348px;
    gap: 34px;
    padding: 32px;
  }

  @media (max-width: 1299.98px) {
    .lrn-hub-inner {
      grid-template-columns: minmax(0, 1fr);
      gap: 26px;
    }
  }

  @media (max-width: 575.98px) {
    .lrn-hub-inner {
      padding: 22px;
    }
  }

  .lrn-hub-hello {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 6px 14px 6px 6px;
    border-radius: 999px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lrn-hub-hello .avatar {
    width: 26px;
    height: 26px;
  }

  .lrn-hub-title {
    margin: 16px 0 10px;
    font-size: 32px;
    line-height: 1.2;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .lrn-hub-title em {
    font-style: normal;
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
  }

  @media (max-width: 767.98px) {
    .lrn-hub-title {
      font-size: 25px;
    }
  }

  /* today's mission, set on a tinted shelf */
  .lrn-mission {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-top: 22px;
    padding: 18px;
    border-radius: 16px;
    background: linear-gradient(120deg, var(--tint-primary), var(--bs-secondary-bg));
    border: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .lrn-mission {
      flex-wrap: wrap;
    }
  }

  /* a squircle frame that fills to --p, used for mission and journey cards */
  .lrn-frame {
    position: relative;
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 62px;
    height: 62px;
    border-radius: 20px;
    background: var(--bs-body-bg);
    color: var(--bs-primary);
    font-size: 24px;
    font-weight: 700;
    /* the frame itself is a conic sweep masked to a ring */
  }

  .lrn-frame::before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 20px;
    background: conic-gradient(from 180deg, var(--bs-primary) 0deg calc(var(--p, 0) * 3.6deg), var(--bs-tertiary-bg) calc(var(--p, 0) * 3.6deg) 360deg);
    -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
    -webkit-mask-composite: xor;
    mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
    mask-composite: exclude;
    padding: 3px;
  }

  .lrn-frame.is-sm {
    width: 46px;
    height: 46px;
    border-radius: 15px;
    font-size: 17px;
  }

  .lrn-hub-facts {
    display: flex;
    flex-wrap: wrap;
    gap: 14px 30px;
    margin-top: 22px;
    padding-top: 18px;
    border-top: 1px solid var(--bs-border-color);
  }

  .lrn-fact {
    display: flex;
    flex-direction: column;
    gap: 3px;
    line-height: 1.25;
  }

  .lrn-fact b {
    font-size: 16px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ---- the streak panel ---- */
  .lrn-streak-panel {
    display: flex;
    flex-direction: column;
    gap: 16px;
    padding: 22px;
    border-radius: 18px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--aix-glow);
  }

  .lrn-flame {
    display: flex;
    align-items: center;
    gap: 14px;
  }

  .lrn-flame i {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    border-radius: 16px;
    background: linear-gradient(135deg, #EAB300, #E82646);
    color: #fff;
    font-size: 24px;
  }

  .lrn-flame b {
    font-size: 28px;
    font-weight: 700;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  /* the streak grid — four weeks of study days */
  .lrn-streak {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 5px;
  }

  .lrn-streak i {
    aspect-ratio: 1;
    border-radius: 6px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  .lrn-streak i.d1 {
    background: rgba(31, 59, 96, 0.22);
    border-color: transparent;
  }

  .lrn-streak i.d2 {
    background: rgba(31, 59, 96, 0.48);
    border-color: transparent;
  }

  .lrn-streak i.d3 {
    background: var(--bs-primary);
    border-color: transparent;
  }

  .lrn-streak i.today {
    background: linear-gradient(135deg, #EAB300, #E82646);
    border-color: transparent;
  }

  .lrn-streak-days {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 5px;
    font-size: 10px;
    font-weight: 600;
    text-align: center;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   JOURNEY CARDS — a squircle frame, chips, then actions
   ============================================================ */
  .lrn-card {
    display: flex;
    flex-direction: column;
    gap: 13px;
    height: 100%;
    padding: 18px;
    border-radius: 16px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .lrn-card:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
    transform: translateY(-2px);
  }

  .lrn-card-title {
    margin: 0 0 3px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the AI line, quoted softly */
  .lrn-say {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    padding: 11px 13px;
    border-radius: 12px;
    background: var(--tint-primary);
    font-size: 12.5px;
    line-height: 1.55;
    color: var(--bs-emphasis-color);
  }

  .lrn-say i {
    flex-shrink: 0;
    margin-top: 1px;
    color: var(--bs-primary);
    font-size: 15px;
  }

  .lrn-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    padding-top: 12px;
    margin-top: auto;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   EXPLAINABLE AI — a breadcrumb trail across the top
   ============================================================ */
  .lrn-why {
    position: relative;
    height: 100%;
    padding: 20px;
    border-radius: 16px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .lrn-why:hover {
    box-shadow: var(--shadow-lift);
  }

  /* the trail: observation, reasoning, evidence, action */
  .lrn-trail {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    padding-bottom: 14px;
    margin-bottom: 16px;
    border-bottom: 1px dashed var(--bs-border-color);
  }

  .lrn-trail span {
    padding: 3px 9px;
    border-radius: 7px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .lrn-trail span.on {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.22);
    color: var(--bs-primary);
  }

  .lrn-trail i {
    font-size: 13px;
    color: var(--bs-border-color);
  }

  .lrn-why-obs {
    margin: 0 0 12px;
    font-size: 16px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lrn-block {
    margin-bottom: 14px;
  }

  .lrn-block span:first-child {
    display: block;
    margin-bottom: 4px;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .lrn-ev {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    padding: 5px 0;
    font-size: 12.5px;
    color: var(--bs-secondary-color);
  }

  .lrn-ev i {
    flex-shrink: 0;
    margin-top: 5px;
    font-size: 6px;
    color: var(--bs-primary);
  }

  .lrn-why-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    padding-top: 14px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   DAY PLANNER — a time column with study blocks
   ============================================================ */
  .lrn-day {
    display: flex;
    flex-direction: column;
  }

  .lrn-slot {
    display: grid;
    grid-template-columns: 78px 1fr;
    gap: 18px;
    align-items: stretch;
  }

  @media (max-width: 575.98px) {
    .lrn-slot {
      grid-template-columns: 58px 1fr;
      gap: 12px;
    }
  }

  .lrn-time {
    position: relative;
    padding: 18px 0;
    text-align: right;
    font-size: 12px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-secondary-color);
    /* the rail running through the times */
  }

  .lrn-time::after {
    content: "";
    position: absolute;
    right: -10px;
    top: 0;
    bottom: 0;
    width: 2px;
    background: var(--bs-border-color);
  }

  .lrn-slot:first-child .lrn-time::after {
    top: 22px;
  }

  .lrn-slot:last-child .lrn-time::after {
    bottom: calc(100% - 22px);
  }

  .lrn-block-card {
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 6px 0;
    padding: 14px 16px;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-left: 4px solid var(--bs-primary);
    transition: var(--transition);
  }

  .lrn-block-card:hover {
    box-shadow: var(--shadow-lift);
    transform: translateX(3px);
  }

  .lrn-block-card.is-done {
    border-left-color: #1ABE17;
    background: var(--bs-secondary-bg);
  }

  .lrn-block-card.is-now {
    border-left-color: #EAB300;
    box-shadow: var(--aix-glow);
  }

  @media (max-width: 575.98px) {
    .lrn-block-card {
      flex-wrap: wrap;
    }
  }

  .lrn-block-title {
    margin: 0 0 2px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* a slim progress rule used inside blocks and goals */
  .lrn-bar {
    display: block;
    height: 5px;
    border-radius: 3px;
    background: linear-gradient(90deg, var(--bs-primary) 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  .lrn-bar.is-go {
    background: linear-gradient(90deg, #1ABE17 0 calc(var(--p, 0) * 1%), var(--bs-tertiary-bg) calc(var(--p, 0) * 1%) 100%);
  }

  /* ============================================================
   COACH CARDS — a bold call to action
   ============================================================ */
  .lrn-coach {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: 16px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .lrn-coach:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  .lrn-coach:hover .lrn-coach-ic {
    transform: scale(1.06) rotate(-4deg);
  }

  .lrn-coach-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 16px 18px 0;
  }

  .lrn-coach-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 46px;
    height: 46px;
    border-radius: 16px;
    background: linear-gradient(135deg, var(--bs-primary), #02a8b5);
    color: #fff;
    font-size: 21px;
    transition: var(--transition);
  }

  .lrn-coach-body {
    display: flex;
    flex-direction: column;
    gap: 8px;
    flex: 1 1 auto;
    padding: 14px 18px 18px;
  }

  .lrn-coach-title {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lrn-coach-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px dashed var(--bs-border-color);
  }

  /* ============================================================
   GOAL TRACKS — milestones along a filled rail
   ============================================================ */
  .lrn-goal {
    padding: 18px 20px;
    border-radius: 16px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .lrn-goal+.lrn-goal {
    margin-top: 14px;
  }

  .lrn-goal:hover {
    box-shadow: var(--shadow);
  }

  .lrn-goal-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    margin-bottom: 18px;
  }

  .lrn-goal-title {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the track: a rail with milestone dots sitting on it */
  .lrn-track {
    position: relative;
    display: flex;
    justify-content: space-between;
    padding-top: 22px;
    /* the unfilled rail */
  }

  .lrn-track::before {
    content: "";
    position: absolute;
    left: 6px;
    right: 6px;
    top: 6px;
    height: 3px;
    border-radius: 2px;
    background: var(--bs-tertiary-bg);
  }

  /* the filled portion */

  .lrn-track::after {
    content: "";
    position: absolute;
    left: 6px;
    top: 6px;
    width: calc((100% - 12px) * var(--p, 0) / 100);
    height: 3px;
    border-radius: 2px;
    background: linear-gradient(90deg, var(--bs-primary), #02a8b5);
  }

  .lrn-mile {
    position: relative;
    z-index: 1;
    flex: 1 1 0;
    text-align: center;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .lrn-mile::before {
    content: "";
    position: absolute;
    left: 50%;
    top: -22px;
    transform: translateX(-50%);
    width: 13px;
    height: 13px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 3px solid var(--bs-tertiary-bg);
  }

  .lrn-mile:first-child::before {
    left: 6px;
    transform: none;
  }

  .lrn-mile:last-child::before {
    left: auto;
    right: 6px;
    transform: none;
  }

  .lrn-mile.is-done::before {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
  }

  .lrn-mile.is-now::before {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  /* ============================================================
   COMPANION TILES — icon, title, arrow
   ============================================================ */
  .lrn-do {
    display: flex;
    align-items: center;
    gap: 14px;
    height: 100%;
    padding: 16px;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .lrn-do:hover {
    border-color: rgba(31, 59, 96, 0.3);
    background: var(--tint-primary);
  }

  .lrn-do:hover .lrn-do-go {
    transform: translateX(4px);
    color: var(--bs-primary);
  }

  .lrn-do-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: 14px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .lrn-do-go {
    flex-shrink: 0;
    font-size: 17px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  /* ============================================================
   GROWTH STORY — badges on a dashed rail
   ============================================================ */
  .lrn-story {
    position: relative;
    padding-left: 62px;
  }

  .lrn-story::before {
    content: "";
    position: absolute;
    left: 23px;
    top: 16px;
    bottom: 16px;
    border-left: 2px dashed var(--bs-border-color);
  }

  .lrn-beat {
    position: relative;
    padding: 16px 18px;
    border-radius: 14px;
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .lrn-beat+.lrn-beat {
    margin-top: 14px;
  }

  .lrn-beat:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* the badge sits on the rail */

  .lrn-beat::before {
    content: "";
    position: absolute;
    left: -62px;
    top: 14px;
    width: 48px;
    height: 48px;
    border-radius: 16px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .lrn-beat.is-done::before {
    background: linear-gradient(135deg, var(--bs-primary), #02a8b5);
    border-color: transparent;
  }

  .lrn-beat.is-win::before {
    background: linear-gradient(135deg, #EAB300, #E82646);
    border-color: transparent;
  }

  .lrn-beat-ic {
    position: absolute;
    left: -62px;
    top: 14px;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    font-size: 20px;
    color: var(--bs-secondary-color);
  }

  .is-done .lrn-beat-ic,
  .is-win .lrn-beat-ic {
    color: #fff;
  }

  .lrn-beat-title {
    margin: 0 0 3px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   OPPORTUNITY ROWS
   ============================================================ */
  .lrn-opp {
    display: flex;
    align-items: center;
    gap: 14px;
    height: 100%;
    padding: 16px;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .lrn-opp:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
  }

  .lrn-opp-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 20px;
  }

  .lrn-opp-ic.is-go {
    background: #E8F9E8;
    color: #1ABE17;
  }

  .lrn-opp-ic.is-soon {
    background: #FEF8EA;
    color: #EAB300;
  }

  .lrn-opp-ic.is-now {
    background: #E7F1FC;
    color: #0F65CD;
  }

  .lrn-opp-title {
    margin: 0 0 2px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   INSPIRATION TILES — soft tinted, quoted
   ============================================================ */
  .lrn-tip {
    position: relative;
    height: 100%;
    padding: 18px 20px;
    border-radius: 16px;
    background: linear-gradient(150deg, var(--tint-primary) 0%, var(--bs-body-bg) 60%);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .lrn-tip:hover {
    box-shadow: var(--shadow-lift);
  }

  .lrn-tip.is-go {
    background: linear-gradient(150deg, #E8F9E8 0%, var(--bs-body-bg) 60%);
  }

  .lrn-tip.is-soon {
    background: linear-gradient(150deg, #FEF8EA 0%, var(--bs-body-bg) 60%);
  }

  .lrn-tip.is-now {
    background: linear-gradient(150deg, #E7F1FC 0%, var(--bs-body-bg) 60%);
  }

  .lrn-tip-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    margin-bottom: 12px;
    border-radius: 13px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 17px;
  }

  .lrn-tip-title {
    margin: 0 0 6px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   WORKSPACE OFFCANVAS — a quest bar stepper
   ============================================================ */
  .offcanvas.offcanvas-end.lrn-ws {
    width: 88% !important;
    max-width: 1420px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.lrn-ws {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.lrn-ws .offcanvas-body {
    padding: 22px;
  }

  .lrn-ws-head {
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
    padding: 22px;
    background: radial-gradient(70% 130% at 0% 0%, rgba(31, 59, 96, 0.14) 0%, transparent 54%), radial-gradient(60% 120% at 100% 100%, rgba(2, 168, 181, 0.14) 0%, transparent 54%), var(--bs-body-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  /* one rounded bar cut into five; the active segment grows to show its label */
  .lrn-quest {
    display: flex;
    gap: 6px;
    list-style: none;
    margin: 0;
    padding: 16px 22px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .lrn-quest li {
    display: flex;
  }

  @media (max-width: 767.98px) {
    .lrn-quest {
      flex-wrap: wrap;
    }

    .lrn-quest li {
      flex: 1 1 45%;
    }
  }

  .lrn-questbtn {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 11px 16px;
    border: 1px solid var(--bs-border-color);
    border-radius: 999px;
    background: var(--bs-body-bg);
    white-space: nowrap;
    transition: var(--transition);
  }

  .lrn-questbtn:hover {
    border-color: rgba(31, 59, 96, 0.35);
  }

  /* inactive steps shrink to the number, the active one takes the room */

  li:has(.lrn-questbtn) {
    flex: 0 1 auto;
  }

  li:has(.lrn-questbtn.active) {
    flex: 1 1 auto;
  }

  .lrn-questbtn .lrn-questbtn-txt {
    display: none;
  }

  .lrn-questbtn.active {
    background: linear-gradient(135deg, var(--bs-primary), #02a8b5);
    border-color: transparent;
    box-shadow: 0 8px 20px rgba(31, 59, 96, 0.28);
  }

  .lrn-questbtn.active .lrn-questbtn-n {
    background: rgba(255, 255, 255, 0.22);
    color: #fff;
  }

  .lrn-questbtn.active .lrn-questbtn-txt {
    display: flex;
    color: #fff;
  }

  @media (max-width: 767.98px) {
    .lrn-questbtn .lrn-questbtn-txt {
      display: flex;
    }
  }

  .lrn-questbtn-n {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    color: var(--bs-secondary-color);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    transition: var(--transition);
  }

  .lrn-questbtn-txt {
    flex-direction: column;
    min-width: 0;
    line-height: 1.2;
    text-align: left;
  }

  .lrn-questbtn-txt span:first-child {
    font-size: 9.5px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    opacity: 0.75;
  }

  .lrn-questbtn-txt span:last-child {
    font-size: 13px;
    font-weight: 600;
  }

  /* panels inside the workspace */
  .lrn-box {
    height: 100%;
    border-radius: 14px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .lrn-box-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 13px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .lrn-box-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lrn-box-body {
    padding: 16px;
  }

  .lrn-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .lrn-row+.lrn-row {
    border-top: 1px dashed var(--bs-border-color);
  }

  .lrn-row b {
    font-weight: 600;
  }

  /* ============================================================
   PREMIUM ACCORDION + EMPTY STATE
   ============================================================ */
  .lrn-acc .accordion-item {
    margin-bottom: 10px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: 14px !important;
    overflow: hidden;
  }

  .lrn-acc .accordion-button {
    padding: 14px 16px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    box-shadow: none;
  }

  .lrn-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .lrn-acc .accordion-button:focus {
    box-shadow: none;
  }

  .lrn-acc .accordion-body {
    padding: 15px 16px;
    font-size: 13px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
    border-top: 1px solid var(--bs-border-color);
  }

  .lrn-empty {
    padding: 40px 24px;
    text-align: center;
    border-radius: 16px;
    background: linear-gradient(150deg, var(--tint-primary), var(--bs-body-bg));
    border: 1px dashed var(--bs-border-color);
  }

  .lrn-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 58px;
    height: 58px;
    margin-bottom: 14px;
    border-radius: 20px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    color: var(--bs-primary);
    font-size: 26px;
  }

  /*-----------------
    Notifications — reusable notification centre components

    A shared vocabulary for notification surfaces anywhere in the product,
    not styles for one page. Class prefix `ntf-`.

    The language here is an inbox rather than a workspace: date dividers,
    an unread rail down the left of each row, category chips, priority
    ribs and a sticky filter bar. Nothing here depends on the AI families
    in `_ai-insights.scss` and nothing overrides them.

    Contents
      1.  Tokens
      2.  Hero
      3.  Sticky filter toolbar
      4.  Feed — groups, rows, states
      5.  Category cards
      6.  Priority cards
      7.  Quick actions
      8.  Timeline
      9.  Insights + announcements
      10. Preferences
      11. Offcanvas + modal + empty state
-----------------*/
  /* ============================================================
   1. TOKENS
   ============================================================ */
  @media (prefers-reduced-motion: reduce) {

    [class*=ntf-],
    [class*=ntf-]::before,
    [class*=ntf-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- shared small pieces ---------------------------------------------- */
  .ntf-lbl {
    display: block;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* category chip — a coloured dot and a name */
  .ntf-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 10px;
    border-radius: 999px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 11px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    white-space: nowrap;
  }

  .ntf-chip::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--bs-primary);
  }

  .ntf-chip.is-academic::before {
    background: #1f3b60;
  }

  .ntf-chip.is-attendance::before {
    background: #0F65CD;
  }

  .ntf-chip.is-fees::before {
    background: #1ABE17;
  }

  .ntf-chip.is-exams::before {
    background: #4A00E5;
  }

  .ntf-chip.is-library::before {
    background: #02a8b5;
  }

  .ntf-chip.is-transport::before {
    background: #EAB300;
  }

  .ntf-chip.is-hostel::before {
    background: #0e76bd;
  }

  .ntf-chip.is-medical::before {
    background: #E82646;
  }

  .ntf-chip.is-hr::before {
    background: #E83E8C;
  }

  .ntf-chip.is-security::before {
    background: #202C4B;
  }

  .ntf-chip.is-system::before {
    background: #677788;
  }

  /* a plain variant with no dot, for counts and meta */

  .ntf-chip.is-plain::before {
    display: none;
  }

  /* priority badge — a small rib rather than a pill */
  .ntf-pri {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .ntf-pri::before {
    content: "";
    width: 3px;
    height: 12px;
    border-radius: 2px;
    background: var(--bs-tertiary-bg);
  }

  .ntf-pri.is-critical {
    color: #E82646;
  }

  .ntf-pri.is-critical::before {
    background: #E82646;
  }

  .ntf-pri.is-high {
    color: #EAB300;
  }

  .ntf-pri.is-high::before {
    background: #EAB300;
  }

  .ntf-pri.is-medium {
    color: #0F65CD;
  }

  .ntf-pri.is-medium::before {
    background: #0F65CD;
  }

  .ntf-pri.is-low {
    color: #1ABE17;
  }

  .ntf-pri.is-low::before {
    background: #1ABE17;
  }

  /* an unread count bubble */
  .ntf-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 22px;
    height: 22px;
    padding: 0 7px;
    border-radius: 999px;
    background: var(--bs-primary);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .ntf-count.is-quiet {
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
  }

  .ntf-count.is-alert {
    background: #E82646;
  }

  /* ============================================================
   2. HERO
   ============================================================ */
  .ntf-hero {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius);
    background: radial-gradient(70% 130% at 100% 0%, #F2F5FF 0%, transparent 58%), var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  /* a stack of faint envelopes in the corner, the only decoration */
  .ntf-hero::after {
    content: "";
    position: absolute;
    right: 34px;
    top: -30px;
    width: 150px;
    height: 150px;
    border-radius: 26px;
    border: 1px solid var(--bs-border-color);
    transform: rotate(24deg);
    opacity: 0.5;
    pointer-events: none;
  }

  .ntf-hero-inner {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 26px;
    padding: 26px 28px;
  }

  @media (max-width: 575.98px) {
    .ntf-hero-inner {
      padding: 22px;
    }
  }

  .ntf-hero-title {
    margin: 12px 0 8px;
    font-size: 27px;
    font-weight: 600;
    letter-spacing: -0.02em;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 767.98px) {
    .ntf-hero-title {
      font-size: 22px;
    }
  }

  /* the readouts sit on one ruled line, no boxes */
  .ntf-hero-rail {
    display: flex;
    flex-wrap: wrap;
    gap: 14px 30px;
    margin-top: 18px;
    padding-top: 16px;
    border-top: 1px solid var(--bs-border-color);
  }

  .ntf-stat {
    display: flex;
    flex-direction: column;
    gap: 3px;
    line-height: 1.25;
  }

  .ntf-stat b {
    font-size: 19px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .ntf-stat b small {
    font-size: 12px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   3. STICKY FILTER TOOLBAR
   ============================================================ */
  .ntf-bar {
    position: sticky;
    top: 0;
    z-index: 5;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  @media (max-width: 991.98px) {
    .ntf-bar {
      position: static;
    }
  }

  /* the quick filters read as a segmented row of pills */
  .ntf-quick {
    display: flex;
    flex-wrap: wrap;
    gap: 7px;
    padding-top: 12px;
    margin-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  .ntf-tab {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 6px 13px;
    border-radius: 999px;
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    transition: var(--transition);
    white-space: nowrap;
  }

  .ntf-tab i {
    font-size: 14px;
  }

  .ntf-tab:hover {
    background: var(--bs-tertiary-bg);
    color: var(--bs-emphasis-color);
  }

  .ntf-tab.active {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.24);
    color: var(--bs-primary);
  }

  /* ============================================================
   4. FEED
   ============================================================ */
  .ntf-feed {
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  /* a sticky date divider between groups */
  .ntf-group {
    position: sticky;
    top: 0;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 11px 18px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .ntf-group+.ntf-row {
    border-top: 0;
  }

  .ntf-group span:first-child {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  /* a notification row */
  .ntf-row {
    position: relative;
    display: grid;
    grid-template-columns: 46px minmax(0, 1fr) auto;
    gap: 14px;
    padding: 16px 18px 16px 22px;
    border-top: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .ntf-row:first-child {
    border-top: 0;
  }

  /* the unread rail down the left edge */

  .ntf-row::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
    background: transparent;
    transition: var(--transition);
  }

  .ntf-row:hover {
    background: var(--bs-secondary-bg);
  }

  .ntf-row:hover .ntf-row-tools {
    opacity: 1;
    transform: translateX(0);
  }

  /* unread rows are tinted and carry the rail */

  .ntf-row.is-unread {
    background: var(--tint-primary);
  }

  .ntf-row.is-unread::before {
    background: var(--bs-primary);
  }

  .ntf-row.is-unread:hover {
    background: #ECEFFC;
  }

  .ntf-row.is-unread .ntf-row-title {
    font-weight: 600;
  }

  .ntf-row.is-critical::before {
    background: #E82646;
  }

  /* a pinned row keeps a marker whatever its read state */

  .ntf-row.is-pinned::after {
    content: "\ea5f";
    position: absolute;
    left: 8px;
    top: 18px;
    font-family: "tabler-icons" !important;
    font-size: 11px;
    color: var(--bs-primary);
  }

  @media (max-width: 767.98px) {
    .ntf-row {
      grid-template-columns: 40px minmax(0, 1fr);
      row-gap: 10px;
    }
  }

  /* the avatar column, with a small module glyph pinned to it */
  .ntf-ava {
    position: relative;
    width: 46px;
    height: 46px;
  }

  .ntf-ava img,
  .ntf-ava>.avatar {
    width: 100%;
    height: 100%;
    border-radius: 12px;
    object-fit: cover;
  }

  @media (max-width: 767.98px) {
    .ntf-ava {
      width: 40px;
      height: 40px;
    }
  }

  .ntf-ava-badge {
    position: absolute;
    right: -5px;
    bottom: -5px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 21px;
    height: 21px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    font-size: 11px;
    color: var(--bs-primary);
  }

  /* a glyph-only avatar for system notifications */
  .ntf-ava-sys {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    border-radius: 12px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 20px;
  }

  .ntf-row-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 500;
    color: var(--bs-emphasis-color);
  }

  .ntf-row-title b {
    font-weight: 600;
  }

  .ntf-row-txt {
    margin: 0 0 8px;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .ntf-row-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px 12px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  /* an attachment pill */
  .ntf-file {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 11.5px;
    color: var(--bs-emphasis-color);
  }

  .ntf-file i {
    font-size: 14px;
    color: var(--bs-secondary-color);
  }

  /* a quoted preview of the underlying record */
  .ntf-preview {
    margin: 10px 0 0;
    padding: 10px 13px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-left: 3px solid var(--bs-tertiary-bg);
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* the right column: time above, tools that appear on hover */
  .ntf-row-side {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: space-between;
    gap: 10px;
    white-space: nowrap;
  }

  @media (max-width: 767.98px) {
    .ntf-row-side {
      grid-column: 1/-1;
      flex-direction: row;
      align-items: center;
      justify-content: space-between;
    }
  }

  .ntf-row-tools {
    display: flex;
    align-items: center;
    gap: 4px;
    opacity: 0;
    transform: translateX(6px);
    transition: var(--transition);
  }

  @media (max-width: 991.98px) {
    .ntf-row-tools {
      opacity: 1;
      transform: none;
    }
  }

  .ntf-tool {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 15px;
    transition: var(--transition);
  }

  .ntf-tool:hover {
    background: var(--tint-primary);
    border-color: var(--bs-primary);
    color: var(--bs-primary);
  }

  /* the foot of the feed */
  .ntf-feed-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    padding: 14px 18px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   5. CATEGORY CARDS
   ============================================================ */
  .ntf-cat {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 10px;
    height: 100%;
    padding: 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .ntf-cat:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: var(--shadow-lift);
    transform: translateY(-2px);
  }

  .ntf-cat-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 12px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .ntf-cat-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   6. PRIORITY CARDS — a thick rib along the top edge
   ============================================================ */
  .ntf-prio {
    position: relative;
    height: 100%;
    padding: 20px 18px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .ntf-prio::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    height: 4px;
    background: var(--bs-tertiary-bg);
  }

  .ntf-prio.is-critical::before {
    background: #E82646;
  }

  .ntf-prio.is-high::before {
    background: #EAB300;
  }

  .ntf-prio.is-medium::before {
    background: #0F65CD;
  }

  .ntf-prio.is-low::before {
    background: #1ABE17;
  }

  .ntf-prio:hover {
    box-shadow: var(--shadow-lift);
  }

  .ntf-prio-fig {
    display: block;
    margin: 10px 0 4px;
    font-size: 30px;
    font-weight: 700;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.02em;
    color: var(--bs-emphasis-color);
  }

  .ntf-prio-latest {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px dashed var(--bs-border-color);
  }

  /* ============================================================
   7. QUICK ACTIONS
   ============================================================ */
  .ntf-act {
    display: flex;
    align-items: center;
    gap: 13px;
    height: 100%;
    padding: 15px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .ntf-act:hover {
    border-color: rgba(31, 59, 96, 0.3);
    background: var(--tint-primary);
  }

  .ntf-act:hover .ntf-act-ic {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  .ntf-act-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 11px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 17px;
    transition: var(--transition);
  }

  /* ============================================================
   8. TIMELINE — a horizontal delivery track
   ============================================================ */
  .ntf-track-flow {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 10px;
  }

  @media (max-width: 991.98px) {
    .ntf-track-flow {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      row-gap: 22px;
    }
  }

  @media (max-width: 480px) {
    .ntf-track-flow {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  .ntf-step {
    position: relative;
    padding-top: 40px;
    text-align: center;
  }

  .ntf-step::before {
    content: "";
    position: absolute;
    left: calc(50% + 18px);
    right: calc(-50% + 18px);
    top: 15px;
    height: 2px;
    background: var(--bs-tertiary-bg);
  }

  .ntf-step:last-child::before {
    display: none;
  }

  .ntf-step.is-done::before {
    background: #1ABE17;
  }

  .ntf-step::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 0;
    transform: translateX(-50%);
    width: 32px;
    height: 32px;
    border-radius: 10px;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-tertiary-bg);
  }

  .ntf-step.is-done::after {
    background: #1ABE17;
    border-color: #1ABE17;
  }

  .ntf-step.is-now::after {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  @media (max-width: 991.98px) {
    .ntf-step::before {
      display: none;
    }
  }

  .ntf-step-ic {
    position: absolute;
    left: 50%;
    top: 0;
    transform: translateX(-50%);
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    font-size: 15px;
    color: var(--bs-secondary-color);
  }

  .ntf-step.is-done .ntf-step-ic {
    color: #fff;
  }

  .ntf-step.is-now .ntf-step-ic {
    color: var(--bs-primary);
  }

  .ntf-step-title {
    margin: 0 0 3px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   9. INSIGHTS + ANNOUNCEMENTS
   ============================================================ */
  .ntf-note {
    display: flex;
    align-items: flex-start;
    gap: 13px;
    height: 100%;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid transparent;
    transition: var(--transition);
  }

  .ntf-note:hover {
    background: var(--bs-body-bg);
    border-color: var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .ntf-note-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 11px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 17px;
  }

  .ntf-note-title {
    margin: 0 0 3px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* announcement cards carry a tinted head strip */
  .ntf-ann {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .ntf-ann:hover {
    box-shadow: var(--shadow-lift);
    transform: translateY(-2px);
  }

  .ntf-ann-head {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 13px 16px;
    background: var(--tint-primary);
  }

  .ntf-ann-head.is-warn {
    background: #FEF8EA;
  }

  .ntf-ann-head.is-alert {
    background: #FDE9ED;
  }

  .ntf-ann-head.is-good {
    background: #E8F9E8;
  }

  .ntf-ann-head.is-info {
    background: #E7F1FC;
  }

  .ntf-ann-body {
    display: flex;
    flex-direction: column;
    gap: 8px;
    flex: 1 1 auto;
    padding: 16px;
  }

  .ntf-ann-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ntf-ann-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   10. PREFERENCES
   ============================================================ */
  .ntf-pref {
    display: flex;
    align-items: center;
    gap: 14px;
    height: 100%;
    padding: 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .ntf-pref:hover {
    box-shadow: var(--shadow);
  }

  .ntf-pref-ic {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .ntf-pref-title {
    margin: 0 0 2px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   11. OFFCANVAS + MODAL + EMPTY STATE
   ============================================================ */
  .offcanvas.offcanvas-end.ntf-panel {
    width: 88% !important;
    max-width: 1400px !important;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.ntf-panel {
      width: 100% !important;
    }
  }

  .offcanvas.offcanvas-end.ntf-panel .offcanvas-body {
    padding: 22px;
  }

  .ntf-panel-head {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    flex-wrap: wrap;
    padding: 22px;
    background: radial-gradient(60% 130% at 100% 0%, #F2F5FF 0%, transparent 60%), var(--bs-body-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .ntf-box {
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .ntf-box-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 13px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .ntf-box-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ntf-box-body {
    padding: 16px;
  }

  .ntf-line {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 9px 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .ntf-line+.ntf-line {
    border-top: 1px dashed var(--bs-border-color);
  }

  .ntf-line b {
    font-weight: 600;
  }

  /* a comment thread inside the panel */
  .ntf-comment {
    display: flex;
    gap: 12px;
    padding: 12px 0;
  }

  .ntf-comment+.ntf-comment {
    border-top: 1px solid var(--bs-border-color);
  }

  .ntf-comment p {
    margin: 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* an audit line */
  .ntf-audit {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 8px 0;
    font-size: 12.5px;
    color: var(--bs-secondary-color);
  }

  .ntf-audit+.ntf-audit {
    border-top: 1px dotted var(--bs-border-color);
  }

  .ntf-audit time {
    flex-shrink: 0;
    width: 96px;
    font-variant-numeric: tabular-nums;
  }

  .ntf-audit b {
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .ntf-modal .modal-content {
    border-radius: var(--radius);
    border: 0;
  }

  .ntf-modal .modal-header {
    align-items: flex-start;
    padding: 20px 22px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .ntf-modal .modal-body {
    padding: 22px;
  }

  .ntf-modal .modal-footer {
    padding: 16px 22px;
    border-top: 1px solid var(--bs-border-color);
  }

  .ntf-empty {
    padding: 48px 24px;
    text-align: center;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--bs-border-color);
  }

  .ntf-empty-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 60px;
    height: 60px;
    margin-bottom: 14px;
    border-radius: 18px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    color: var(--bs-primary);
    font-size: 26px;
  }

  .ntf-empty-title {
    margin: 0 0 4px;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /*-----------------
	Dashboard widgets — merged in from the former
	components/_ui-dashboard-widgets.scss. These are generic, reusable
	components; they live with their own kind rather than in a page-shaped file.
-----------------*/
  /* ---------- TOASTS ---------- */
  #tdToasts {
    position: fixed;
    top: 76px;
    right: 20px;
    z-index: 3000;
    display: flex;
    flex-direction: column;
    gap: 10px;
  }

  #tdToasts .toast {
    min-width: 250px;
  }

  /*-----------------
    Settings module

    Every Settings screen — profile, branding, identity, configuration,
    compliance, audit trail and each settings sub-module — lives here. The
    blocks below were previously ten separate partials under components/,
    which made them look reusable when they are page styles for one module.
    Order is preserved exactly as it was compiled before the merge.
-----------------*/
  /*===== Settings top tabs =====*/
  /* An editorial underline bar for settings-family pages that were moved from
   a left-hand link list to a horizontal switcher above the content. No pill
   track — the tabs sit directly on a hairline rail, and only the active one
   earns a gradient underline and a filled icon, so the bar reads as a piece
   of typography rather than a segmented control. */
  .settings-toptabs {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 4px 30px;
    padding: 0 4px;
    border-bottom: 1px solid var(--bs-border-color);
    margin-bottom: 28px;
  }

  .settings-toptabs-link {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 14px 2px 13px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    white-space: nowrap;
    transition: color 0.18s cubic-bezier(0.4, 0, 0.2, 1);
    /* the underline — scaled to nothing until active, so it grows in
     rather than just appearing */
  }

  .settings-toptabs-link::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: 2.5px;
    border-radius: 2px 2px 0 0;
    background: linear-gradient(90deg, var(--bs-primary), rgb(125.7775, 114.0035714286, 233.1964285714));
    transform: scaleX(0);
    transform-origin: left center;
    opacity: 0;
    transition: transform 0.22s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.22s;
  }

  .settings-toptabs-link:hover {
    color: var(--heading);
  }

  .settings-toptabs-link:hover .settings-toptabs-ic {
    background: var(--surface-soft);
    border-color: rgba(var(--bs-primary-rgb), 0.3);
    color: var(--bs-primary);
  }

  .settings-toptabs-link.active {
    color: var(--bs-primary);
  }

  .settings-toptabs-link.active::after {
    transform: scaleX(1);
    opacity: 1;
  }

  .settings-toptabs-link.active .settings-toptabs-ic {
    background: linear-gradient(155deg, var(--bs-primary) 0%, rgb(28.7410714286, 60.35625, 185.8589285714) 100%);
    border-color: transparent;
    color: #fff;
    box-shadow: 0 4px 10px -2px rgba(var(--bs-primary-rgb), 0.5);
  }

  @media (max-width: 575.98px) {
    .settings-toptabs-link {
      width: 100%;
      justify-content: flex-start;
    }
  }

  .settings-toptabs-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    flex-shrink: 0;
    border-radius: 9px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 14px;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  @media (max-width: 575.98px) {
    .settings-toptabs {
      flex-direction: column;
      align-items: stretch;
      border-bottom: 0;
    }

    .settings-toptabs-link {
      border-bottom: 1px solid var(--bs-border-color);
    }
  }

  /*===== Profile & upload =====*/
  .profile-uploader.profile-uploader-two {
    position: relative;
    width: 100%;
    border: 1px dashed #B5B9C3;
    background-color: transparent;
    border-radius: 5px;
    padding: 15px 15px 12px;
    margin-bottom: 15px;
  }

  .profile-uploader.profile-uploader-two .upload-icon {
    display: block;
    text-align: center;
    font-size: 24px;
    line-height: 0;
    margin-bottom: 15px;
  }

  .profile-uploader.profile-uploader-two input[type=file] {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
  }

  .profile-uploader.profile-uploader-two input[type=file].form-control {
    padding: 0;
  }

  .profile-uploader.profile-uploader-two .drag-upload-btn {
    font-size: 12px;
    text-align: center;
  }

  .profile-uploader.profile-uploader-two .drag-upload-btn .upload-btn {
    font-size: 12px;
    margin-bottom: 5px;
  }

  .profile-uploader.profile-uploader-two .drag-upload-btn .upload-btn span {
    color: #1f3b60;
  }

  .profile-uploader.profile-uploader-two .drag-upload-btn h6 {
    font-size: 12px;
    font-weight: 400;
    margin-bottom: 5px;
  }

  .settings-profile-upload {
    display: flex;
    align-items: center;
    margin-bottom: 15px;
  }

  .settings-profile-upload .profile-pic {
    width: 60px;
    height: 60px;
    border-radius: 50%;
    margin-right: 15px;
    display: block;
    flex-shrink: 0;
  }

  .settings-profile-upload .profile-pic img {
    width: 100%;
    border-radius: 50%;
  }

  .settings-profile-upload .title-upload h5 {
    margin-bottom: 5px;
  }

  .language-setup-table {
    border: 1px solid #E9EDF4;
    border-radius: 5px;
    overflow: auto;
  }

  .language-setup-table .table thead {
    background: #F2F4F8;
  }

  .language-setup-table .table thead th {
    background: #F2F4F8;
  }

  .language-setup-table .table tbody tr td {
    border-bottom: 1px solid #E9EDF4;
    width: 50%;
  }

  .language-setup-table .table tbody tr:last-child td {
    border-bottom: 0;
  }

  .tax-group-input {
    position: relative;
  }

  /*===== settings =====*/
  /*-----------------
    Settings — reusable administration workspace components

    A shared vocabulary for configuration surfaces anywhere in the product,
    not styles for one page. Class prefix `set-`.

    The language here is an admin console: a sticky navigation rail, rows of
    label/value/edit, colour swatches, asset frames, compliance ribs and
    document tiles. Nothing here depends on the AI families in
    `_ai-insights.scss` or on `_notifications.scss`, and nothing overrides them.

    Contents
      1.  Tokens
      2.  Identity hero
      3.  Sticky settings navigation
      4.  Configuration cards + value rows
      5.  Branding — swatches and asset frames
      6.  Contact + management cards
      7.  Compliance cards
      8.  Document tiles
      9.  Audit timeline
      10. Offcanvas + modal + empty state
-----------------*/
  @media (prefers-reduced-motion: reduce) {

    .identity-panel,
    .identity-panel::before,
    .identity-panel::after,
    .section-nav-link,
    .option-card,
    .option-item,
    .choice-tile,
    .segmented-btn,
    .inline-meter,
    .state-dot {
      animation: none !important;
      transition: none !important;
    }
  }

  /* ---- shared small pieces ---------------------------------------------- */
  .eyebrow-label {
    display: block;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* status badge — a dot and a word */
  .meta-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 11px;
    border-radius: 6px;
    background: var(--surface-soft);
    border: 1px solid var(--bs-border-color);
    font-size: 11px;
    font-weight: 600;
    color: var(--heading);
    white-space: nowrap;
  }

  .meta-badge::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--bs-secondary-color);
  }

  .meta-badge.is-active {
    color: #1ABE17;
    background: #E8F9E8;
    border-color: #D1F2D1;
  }

  .meta-badge.is-active::before {
    background: #1ABE17;
  }

  .meta-badge.is-pending {
    color: #EAB300;
    background: #FEF8EA;
    border-color: #FDF1D6;
  }

  .meta-badge.is-pending::before {
    background: #EAB300;
  }

  .meta-badge.is-expiring {
    color: #E82646;
    background: #FDE9ED;
    border-color: #FAD4DA;
  }

  .meta-badge.is-expiring::before {
    background: #E82646;
  }

  .meta-badge.is-draft {
    color: #0F65CD;
    background: #E7F1FC;
    border-color: #CFE2FA;
  }

  .meta-badge.is-draft::before {
    background: #0F65CD;
  }

  /* a plain variant with no dot */

  .meta-badge.is-plain::before {
    display: none;
  }

  /* a small "set / not set" indicator used beside field names */
  .state-dot {
    display: inline-block;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: #1ABE17;
    flex-shrink: 0;
  }

  .state-dot.is-empty {
    background: var(--border-strong);
  }

  .state-dot.is-warn {
    background: #EAB300;
  }

  /* an icon-led "jump to another settings screen" rail — a card of links
   threaded on a connecting spine, like a route map, used beside the content
   on payment/tax-style settings screens in place of a bare list-group.
   Class prefix stays `settings-index-*` since 21 pages already reference it;
   only the visual treatment changed. */
  .settings-index-card {
    border-radius: 16px;
    overflow: hidden;
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.04);
  }

  .settings-index-card>.card-header {
    padding: 16px 18px;
    background: radial-gradient(120% 180% at 0% 0%, #F2F5FF 0%, transparent 60%), var(--surface);
  }

  .settings-index-card>.card-header h5 {
    font-size: 14.5px;
    font-weight: 700;
    letter-spacing: -0.01em;
    color: var(--heading);
  }

  /* same $primary-transparent-doesn't-adapt issue as the identity panel
     and the active nav row: on dark this left a bright white glare
     across an otherwise dark header. */

  [data-theme=dark] .settings-index-card>.card-header {
    background: radial-gradient(120% 180% at 0% 0%, rgba(var(--bs-primary-rgb), 0.16) 0%, transparent 60%), var(--surface);
  }

  .settings-index-nav {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 1px;
    padding: 14px 14px 14px 12px;
    /* the spine every station sits on — offset must land on the icon's
     horizontal centre: nav's own left padding (12px) + the link's left
     padding (10px) + half the 32px icon (16px) = 38px */
  }

  .settings-index-nav::before {
    content: "";
    position: absolute;
    left: 38px;
    top: 33px;
    bottom: 33px;
    width: 2px;
    background: var(--bs-border-color);
  }

  .settings-index-link {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px 10px;
    border-radius: 11px;
    color: var(--bs-secondary-color);
    font-size: 13.5px;
    font-weight: 500;
    line-height: 1.4;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .settings-index-link:hover {
    background: var(--surface-soft);
    color: var(--heading);
  }

  .settings-index-link:hover .settings-index-ic {
    border-color: rgba(var(--bs-primary-rgb), 0.35);
    color: var(--bs-primary);
  }

  .settings-index-link:hover .settings-index-arrow {
    opacity: 1;
    transform: translateX(0);
  }

  .settings-index-link.active {
    color: var(--bs-primary);
    font-weight: 600;
    background: linear-gradient(90deg, #F2F5FF 0%, transparent 92%);
  }

  .settings-index-link.active .settings-index-ic {
    background: linear-gradient(155deg, var(--bs-primary) 0%, #2E48C4 100%);
    border-color: transparent;
    color: #fff;
    box-shadow: 0 0 0 4px #F2F5FF, 0 6px 14px -4px rgba(var(--bs-primary-rgb), 0.55);
  }

  .settings-index-link.active .settings-index-label {
    color: var(--bs-primary);
  }

  .settings-index-link.active .settings-index-arrow {
    opacity: 1;
    transform: translateX(0);
    color: var(--bs-primary);
  }

  /* $primary-transparent (#F2F5FF) is a near-white wash baked in at
     compile time; on dark it painted the active row as a bright light
     patch instead of a subtle highlight. Same fix as .identity-panel:
     swap for a translucent primary tint. */

  [data-theme=dark] .settings-index-link.active {
    background: linear-gradient(90deg, rgba(var(--bs-primary-rgb), 0.18) 0%, transparent 92%);
  }

  [data-theme=dark] .settings-index-link.active .settings-index-ic {
    box-shadow: 0 0 0 4px rgba(var(--bs-primary-rgb), 0.22), 0 6px 14px -4px rgba(var(--bs-primary-rgb), 0.55);
  }

  /* the station: a circle riding the spine, ring-bordered so the connecting
   line reads as passing behind it rather than through a solid square */
  .settings-index-ic {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--surface);
    border: 1.5px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 15px;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .settings-index-label {
    flex: 1;
    min-width: 0;
  }

  .settings-index-arrow {
    flex-shrink: 0;
    font-size: 13px;
    opacity: 0;
    transform: translateX(-4px);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  /* the compact in-page tab nav (e.g. Payment Gateway / Tax Rates) — stays
   visible below the fixed header while the content beside it is scrolled */
  .settings-tab-nav {
    position: sticky;
    top: 76px;
  }

  /* ============================================================
   2. IDENTITY HERO
   ============================================================ */
  .identity-panel {
    position: relative;
    overflow: hidden;
    border-radius: 16px;
    background: linear-gradient(115deg, #F2F5FF 0%, var(--surface) 44%), var(--surface);
    border: 1px solid var(--bs-border-color);
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
  }

  /* a faint institutional seal tucked into the very corner — small enough
   to stay clear of the action toolbar that now lives in that corner */
  .identity-panel::after {
    content: "";
    position: absolute;
    right: -130px;
    top: -130px;
    width: 160px;
    height: 160px;
    border-radius: 50%;
    border: 16px solid #F2F5FF;
    opacity: 0.6;
    pointer-events: none;
  }

  /* a second, softer glow low on the opposite side for depth */
  .identity-panel::before {
    content: "";
    position: absolute;
    left: -60px;
    bottom: -80px;
    width: 200px;
    height: 200px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(var(--bs-primary-rgb), 0.1) 0%, transparent 72%);
    pointer-events: none;
  }

  /* $primary-transparent is a near-white wash (#F2F5FF) baked in at compile
   time, so it can't respond to the [data-theme] attribute the way the
   --surface custom property does. Left alone it painted a pale patch over
   a dark panel, crushing the crest box against it into near-invisibility.
   Swap it for a translucent primary tint that reads as a glow on dark. */
  [data-theme=dark] .identity-panel {
    background: linear-gradient(115deg, rgba(var(--bs-primary-rgb), 0.16) 0%, var(--surface) 44%), var(--surface);
  }

  [data-theme=dark] .identity-panel::after {
    border-color: rgba(var(--bs-primary-rgb), 0.18);
  }

  .identity-panel-inner {
    position: relative;
    display: flex;
    align-items: flex-start;
    gap: 20px 26px;
    flex-wrap: wrap;
    padding: 28px 32px;
  }

  @media (max-width: 575.98px) {
    .identity-panel-inner {
      padding: 22px;
    }
  }

  @media (max-width: 575.98px) {
    .identity-panel-actions {
      width: 100%;
    }

    .identity-panel-actions .btn {
      width: 100%;
    }
  }

  /* the crest: the logo in a bordered frame with a status pip */
  /* crest + name/badges/description as one unit, growing to fill the row */
  .identity-panel-main {
    display: flex;
    align-items: flex-start;
    gap: 20px;
    flex: 1 1 380px;
    min-width: 0;
  }

  /* the crest: the logo in a bordered frame with a status pip. No
   overflow:hidden — the pip badge deliberately sits partly outside the
   frame and would get clipped otherwise; the logo image itself doesn't
   need clipping since it's inset via max-width/max-height. */
  .identity-crest {
    position: relative;
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 104px;
    height: 104px;
    border-radius: 22px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06), 0 0 0 6px rgba(var(--bs-primary-rgb), 0.07);
  }

  .identity-crest img {
    max-width: 72%;
    max-height: 72%;
    object-fit: contain;
  }

  .identity-crest-pip {
    position: absolute;
    right: -6px;
    bottom: -6px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: #1ABE17;
    border: 3px solid var(--surface);
    color: #fff;
    font-size: 14px;
    box-shadow: 0 3px 8px rgba(26, 190, 23, 0.35);
  }

  .identity-panel-name {
    margin: 0 0 6px;
    font-size: 27px;
    font-weight: 600;
    letter-spacing: -0.02em;
    line-height: 1.2;
    color: var(--heading);
  }

  @media (max-width: 767.98px) {
    .identity-panel-name {
      font-size: 22px;
    }
  }

  /* action toolbar — one primary CTA plus an overflow menu, pinned top-right
   so it never has to stretch full-width and stack like a list of bricks */
  .identity-panel-actions {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 0 0 auto;
    margin-left: auto;
  }

  @media (max-width: 575.98px) {
    .identity-panel-actions {
      width: 100%;
      margin-left: 0;
    }

    .identity-panel-actions .btn:not(.btn-icon) {
      flex: 1 1 auto;
    }
  }

  /* the facts always take their own full-width row below the CTA row */
  .identity-facts {
    flex: 1 0 100%;
    display: flex;
    flex-wrap: wrap;
    gap: 18px 30px;
    margin-top: 2px;
    padding-top: 18px;
    border-top: 1px solid var(--bs-border-color);
  }

  .identity-fact {
    display: flex;
    align-items: center;
    gap: 10px;
    line-height: 1.3;
  }

  .identity-fact b {
    font-size: 14px;
    font-weight: 600;
    color: var(--heading);
  }

  /* small icon chip in front of each fact */
  .identity-fact-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    flex-shrink: 0;
    border-radius: 9px;
    background: rgba(var(--bs-primary-rgb), 0.08);
    color: #1f3b60;
    font-size: 15px;
  }

  /* ============================================================
   3. STICKY SETTINGS NAVIGATION
   ============================================================ */
  /* The rail sticks below the fixed header, not to the top of the viewport,
   and never grows taller than the space left underneath it. */
  .section-nav {
    position: sticky;
    top: calc(60px + 16px);
    padding: 10px;
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
    max-height: calc(100vh - 60px - 32px);
    overflow-y: auto;
    /* Bootstrap's `.nav` sets `flex-wrap: wrap`. In a column flex container
     with a capped height that wraps overflowing items into a SECOND COLUMN
     rather than scrolling them, which is what produces a horizontal
     scrollbar. The rail must scroll vertically and never wrap. */
    flex-wrap: nowrap !important;
    overflow-x: hidden;
    /* items keep their height instead of being squeezed to fit */
  }

  .section-nav>* {
    flex-shrink: 0;
  }

  @media (max-width: 991.98px) {
    .section-nav {
      position: static;
      max-height: none;
    }
  }

  /* Anchor targets must clear the fixed header when jumped to, otherwise the
   heading lands underneath it. */
  .scroll-anchor {
    scroll-margin-top: calc(60px + 20px);
  }

  .section-nav-heading {
    padding: 10px 12px 8px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .section-nav-heading+.section-nav-link {
    margin-top: 0;
  }

  .section-nav-link {
    position: relative;
    display: flex;
    align-items: center;
    gap: 11px;
    width: 100%;
    padding: 9px 12px;
    border: 0;
    border-radius: 8px;
    background: transparent;
    text-align: left;
    font-size: 13px;
    font-weight: 500;
    line-height: 1.4;
    color: var(--bs-secondary-color);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
    /* a long label wraps onto a second line instead of widening the rail */
    min-width: 0;
    white-space: normal;
    word-break: break-word;
  }

  .section-nav-link i {
    flex-shrink: 0;
    font-size: 17px;
  }

  .section-nav-link:hover {
    background: var(--surface-soft);
    color: var(--heading);
  }

  /* the active rail sits inside the pill rather than outside it */

  .section-nav-link.active {
    background: #F2F5FF;
    color: var(--bs-primary);
    font-weight: 600;
  }

  .section-nav-link.active::before {
    content: "";
    position: absolute;
    left: 0;
    top: 8px;
    bottom: 8px;
    width: 3px;
    border-radius: 0 2px 2px 0;
    background: var(--bs-primary);
  }

  /* a completion meter at the foot of the rail */
  .section-nav-foot {
    margin-top: 10px;
    padding: 14px 12px 10px;
    border-top: 1px solid var(--bs-border-color);
  }

  .inline-meter {
    display: block;
    height: 6px;
    border-radius: 3px;
    background: linear-gradient(90deg, var(--bs-primary) 0 calc(var(--p, 0) * 1%), var(--border-strong) calc(var(--p, 0) * 1%) 100%);
  }

  /* Value carriers, so percentages stay out of inline styles. Declared here
   rather than borrowed from another partial, which keeps this file usable on
   its own. */
  .inline-meter-p-0 {
    --p: 0;
  }

  .inline-meter-p-1 {
    --p: 1;
  }

  .inline-meter-p-2 {
    --p: 2;
  }

  .inline-meter-p-3 {
    --p: 3;
  }

  .inline-meter-p-4 {
    --p: 4;
  }

  .inline-meter-p-5 {
    --p: 5;
  }

  .inline-meter-p-6 {
    --p: 6;
  }

  .inline-meter-p-7 {
    --p: 7;
  }

  .inline-meter-p-8 {
    --p: 8;
  }

  .inline-meter-p-9 {
    --p: 9;
  }

  .inline-meter-p-10 {
    --p: 10;
  }

  .inline-meter-p-11 {
    --p: 11;
  }

  .inline-meter-p-12 {
    --p: 12;
  }

  .inline-meter-p-13 {
    --p: 13;
  }

  .inline-meter-p-14 {
    --p: 14;
  }

  .inline-meter-p-15 {
    --p: 15;
  }

  .inline-meter-p-16 {
    --p: 16;
  }

  .inline-meter-p-17 {
    --p: 17;
  }

  .inline-meter-p-18 {
    --p: 18;
  }

  .inline-meter-p-19 {
    --p: 19;
  }

  .inline-meter-p-20 {
    --p: 20;
  }

  .inline-meter-p-21 {
    --p: 21;
  }

  .inline-meter-p-22 {
    --p: 22;
  }

  .inline-meter-p-23 {
    --p: 23;
  }

  .inline-meter-p-24 {
    --p: 24;
  }

  .inline-meter-p-25 {
    --p: 25;
  }

  .inline-meter-p-26 {
    --p: 26;
  }

  .inline-meter-p-27 {
    --p: 27;
  }

  .inline-meter-p-28 {
    --p: 28;
  }

  .inline-meter-p-29 {
    --p: 29;
  }

  .inline-meter-p-30 {
    --p: 30;
  }

  .inline-meter-p-31 {
    --p: 31;
  }

  .inline-meter-p-32 {
    --p: 32;
  }

  .inline-meter-p-33 {
    --p: 33;
  }

  .inline-meter-p-34 {
    --p: 34;
  }

  .inline-meter-p-35 {
    --p: 35;
  }

  .inline-meter-p-36 {
    --p: 36;
  }

  .inline-meter-p-37 {
    --p: 37;
  }

  .inline-meter-p-38 {
    --p: 38;
  }

  .inline-meter-p-39 {
    --p: 39;
  }

  .inline-meter-p-40 {
    --p: 40;
  }

  .inline-meter-p-41 {
    --p: 41;
  }

  .inline-meter-p-42 {
    --p: 42;
  }

  .inline-meter-p-43 {
    --p: 43;
  }

  .inline-meter-p-44 {
    --p: 44;
  }

  .inline-meter-p-45 {
    --p: 45;
  }

  .inline-meter-p-46 {
    --p: 46;
  }

  .inline-meter-p-47 {
    --p: 47;
  }

  .inline-meter-p-48 {
    --p: 48;
  }

  .inline-meter-p-49 {
    --p: 49;
  }

  .inline-meter-p-50 {
    --p: 50;
  }

  .inline-meter-p-51 {
    --p: 51;
  }

  .inline-meter-p-52 {
    --p: 52;
  }

  .inline-meter-p-53 {
    --p: 53;
  }

  .inline-meter-p-54 {
    --p: 54;
  }

  .inline-meter-p-55 {
    --p: 55;
  }

  .inline-meter-p-56 {
    --p: 56;
  }

  .inline-meter-p-57 {
    --p: 57;
  }

  .inline-meter-p-58 {
    --p: 58;
  }

  .inline-meter-p-59 {
    --p: 59;
  }

  .inline-meter-p-60 {
    --p: 60;
  }

  .inline-meter-p-61 {
    --p: 61;
  }

  .inline-meter-p-62 {
    --p: 62;
  }

  .inline-meter-p-63 {
    --p: 63;
  }

  .inline-meter-p-64 {
    --p: 64;
  }

  .inline-meter-p-65 {
    --p: 65;
  }

  .inline-meter-p-66 {
    --p: 66;
  }

  .inline-meter-p-67 {
    --p: 67;
  }

  .inline-meter-p-68 {
    --p: 68;
  }

  .inline-meter-p-69 {
    --p: 69;
  }

  .inline-meter-p-70 {
    --p: 70;
  }

  .inline-meter-p-71 {
    --p: 71;
  }

  .inline-meter-p-72 {
    --p: 72;
  }

  .inline-meter-p-73 {
    --p: 73;
  }

  .inline-meter-p-74 {
    --p: 74;
  }

  .inline-meter-p-75 {
    --p: 75;
  }

  .inline-meter-p-76 {
    --p: 76;
  }

  .inline-meter-p-77 {
    --p: 77;
  }

  .inline-meter-p-78 {
    --p: 78;
  }

  .inline-meter-p-79 {
    --p: 79;
  }

  .inline-meter-p-80 {
    --p: 80;
  }

  .inline-meter-p-81 {
    --p: 81;
  }

  .inline-meter-p-82 {
    --p: 82;
  }

  .inline-meter-p-83 {
    --p: 83;
  }

  .inline-meter-p-84 {
    --p: 84;
  }

  .inline-meter-p-85 {
    --p: 85;
  }

  .inline-meter-p-86 {
    --p: 86;
  }

  .inline-meter-p-87 {
    --p: 87;
  }

  .inline-meter-p-88 {
    --p: 88;
  }

  .inline-meter-p-89 {
    --p: 89;
  }

  .inline-meter-p-90 {
    --p: 90;
  }

  .inline-meter-p-91 {
    --p: 91;
  }

  .inline-meter-p-92 {
    --p: 92;
  }

  .inline-meter-p-93 {
    --p: 93;
  }

  .inline-meter-p-94 {
    --p: 94;
  }

  .inline-meter-p-95 {
    --p: 95;
  }

  .inline-meter-p-96 {
    --p: 96;
  }

  .inline-meter-p-97 {
    --p: 97;
  }

  .inline-meter-p-98 {
    --p: 98;
  }

  .inline-meter-p-99 {
    --p: 99;
  }

  .inline-meter-p-100 {
    --p: 100;
  }

  /* ============================================================
   4. CONFIGURATION CARDS
   ============================================================ */
  .option-card {
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .option-card:hover {
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
  }

  .option-card-head {
    display: flex;
    align-items: center;
    gap: 13px;
    padding: 15px 18px;
    background: var(--surface-soft);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .option-card-icon {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 11px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 17px;
  }

  .option-card-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--heading);
  }

  .option-card-body {
    padding: 6px 18px 14px;
  }

  /* the value row — the workhorse of the page */
  .option-row {
    display: grid;
    grid-template-columns: 200px minmax(0, 1fr) auto;
    align-items: center;
    gap: 16px;
    padding: 12px 0;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .option-row+.option-row {
    border-top: 1px solid var(--bs-border-color);
  }

  .option-row:hover .inline-edit {
    opacity: 1;
  }

  @media (max-width: 767.98px) {
    .option-row {
      grid-template-columns: minmax(0, 1fr) auto;
      gap: 4px 12px;
    }

    .option-row .option-row-value {
      grid-column: 1/-1;
    }
  }

  .option-row-key {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    color: var(--bs-secondary-color);
  }

  .option-row-value {
    display: inline-flex;
    align-items: center;
    font-size: 13.5px;
    font-weight: 500;
    color: var(--heading);
    word-break: break-word;
  }

  .option-row-value.is-empty {
    color: var(--bs-secondary-color);
    font-style: italic;
  }

  .option-row-value code {
    padding: 2px 7px;
    border-radius: 5px;
    background: var(--surface-soft);
    border: 1px solid var(--bs-border-color);
    font-size: 12.5px;
    color: var(--heading);
  }

  /* a small colour dot ahead of a hex value in a value row */
  .value-dot {
    display: inline-block;
    width: 9px;
    height: 9px;
    margin-right: 8px;
    border-radius: 50%;
    flex-shrink: 0;
    border: 1px solid rgba(17, 24, 39, 0.12);
    box-shadow: inset 0 -3px 5px rgba(0, 0, 0, 0.12);
  }

  /* the edit affordance appears on hover, stays on touch */
  .inline-edit {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 8px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 15px;
    opacity: 0;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .inline-edit:hover {
    background: #F2F5FF;
    border-color: var(--bs-primary);
    color: var(--bs-primary);
  }

  @media (max-width: 991.98px) {
    .inline-edit {
      opacity: 1;
    }
  }

  /* section heading inside a workspace */
  .section-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 14px;
    margin-bottom: 20px;
  }

  .section-head-title {
    margin: 0 0 4px;
    font-size: 19px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--heading);
  }

  .section-head-sub {
    margin: 0;
    font-size: 13px;
    color: var(--bs-secondary-color);
    max-width: 660px;
  }

  /* ============================================================
   5. BRANDING
   ============================================================ */
  .asset-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .asset-card:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: 0 8px 24px rgba(17, 24, 39, 0.1);
  }

  /* the preview well — a chequerboard so transparency is visible */
  .inset-well {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 116px;
    padding: 16px;
    border-bottom: 1px solid var(--bs-border-color);
    background-color: var(--surface-soft);
    background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.04) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.04) 75%), linear-gradient(45deg, rgba(0, 0, 0, 0.04) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.04) 75%);
    background-size: 16px 16px;
    background-position: 0 0, 8px 8px;
  }

  .inset-well img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
  }

  /* the dark variant, for checking a reversed logo */

  .inset-well.is-dark {
    background-color: #202C4B;
    background-image: none;
  }

  .asset-card-body {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
  }

  .asset-card-title {
    margin: 0 0 2px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--heading);
  }

  /* a colour swatch card */
  .color-swatch {
    display: flex;
    align-items: center;
    gap: 14px;
    height: 100%;
    padding: 14px 16px;
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .color-swatch:hover {
    box-shadow: 0 8px 24px rgba(17, 24, 39, 0.1);
  }

  .swatch-chip {
    flex-shrink: 0;
    width: 46px;
    height: 46px;
    border-radius: 13px;
    border: 1px solid rgba(17, 24, 39, 0.12);
    box-shadow: inset 0 -12px 18px rgba(0, 0, 0, 0.1);
  }

  .swatch-chip.is-primary {
    background: #1f3b60;
  }

  .swatch-chip.is-secondary {
    background: #0e76bd;
  }

  .swatch-chip.is-success {
    background: #1ABE17;
  }

  .swatch-chip.is-dark {
    background: #202C4B;
  }

  /* where a brand asset is applied */
  .usage-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 0;
    font-size: 13px;
  }

  .usage-row+.usage-row {
    border-top: 1px dashed var(--bs-border-color);
  }

  .usage-row-icon {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 10px;
    background: var(--surface-soft);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 15px;
  }

  /* ============================================================
   6. CONTACT + MANAGEMENT
   ============================================================ */
  .contact-block {
    position: relative;
    height: 100%;
    padding: 18px;
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .contact-block:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: 0 8px 24px rgba(17, 24, 39, 0.1);
  }

  .contact-block-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    margin-bottom: 12px;
    border-radius: 12px;
    background: #F2F5FF;
    color: var(--bs-primary);
    font-size: 18px;
  }

  .contact-block-icon.is-alert {
    background: #FDE9ED;
    color: #E82646;
  }

  .contact-block-icon.is-good {
    background: #E8F9E8;
    color: #1ABE17;
  }

  .contact-block-title {
    margin: 0 0 6px;
    font-size: 14px;
    font-weight: 600;
    color: var(--heading);
  }

  .contact-block-text {
    margin: 0;
    font-size: 13px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  /* a person card for the management section */
  .person-block {
    display: flex;
    align-items: center;
    gap: 14px;
    height: 100%;
    padding: 16px;
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .person-block:hover {
    border-color: rgba(31, 59, 96, 0.3);
    box-shadow: 0 8px 24px rgba(17, 24, 39, 0.1);
  }

  .person-block-name {
    margin: 0 0 2px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--heading);
  }

  .person-block-role {
    display: block;
    margin-bottom: 6px;
    font-size: 11.5px;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--bs-primary);
  }

  /* ============================================================
   7. COMPLIANCE — a rib keyed to expiry
   ============================================================ */
  .compliance-card {
    position: relative;
    height: 100%;
    padding: 18px 18px 18px 22px;
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .compliance-card::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 4px;
    background: #1ABE17;
  }

  .compliance-card.is-expiring::before {
    background: #EAB300;
  }

  .compliance-card.is-expired::before {
    background: #E82646;
  }

  .compliance-card.is-pending::before {
    background: #0F65CD;
  }

  .compliance-card:hover {
    box-shadow: 0 8px 24px rgba(17, 24, 39, 0.1);
  }

  .compliance-card-title {
    margin: 0 0 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--heading);
  }

  /* the registration number, set apart as a reference */
  .reference-code {
    display: inline-block;
    margin: 8px 0;
    padding: 5px 11px;
    border-radius: 8px;
    background: var(--surface-soft);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    letter-spacing: 0.04em;
    color: var(--heading);
  }

  .compliance-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px dashed var(--bs-border-color);
  }

  /* ============================================================
   8. DOCUMENT TILES
   ============================================================ */
  .document-row {
    display: flex;
    align-items: center;
    gap: 14px;
    height: 100%;
    padding: 15px 16px;
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .document-row:hover {
    border-color: rgba(31, 59, 96, 0.3);
    background: var(--surface-soft);
  }

  /* a folded-corner file glyph */
  .document-row-icon {
    position: relative;
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 50px;
    border-radius: 8px 14px 8px 8px;
    background: var(--surface-soft);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 19px;
    /* the fold */
  }

  .document-row-icon::after {
    content: "";
    position: absolute;
    right: 0;
    top: 0;
    border-width: 0 13px 13px 0;
    border-style: solid;
    border-color: var(--surface) var(--surface) var(--bs-border-color) var(--bs-border-color);
    border-top-right-radius: 13px;
  }

  .document-row-icon.is-pdf {
    color: #E82646;
  }

  .document-row-icon.is-img {
    color: #1ABE17;
  }

  .document-row-icon.is-doc {
    color: #0F65CD;
  }

  .document-row-title {
    margin: 0 0 2px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--heading);
  }

  /* ============================================================
   9. AUDIT TIMELINE — a ruled ledger of changes
   ============================================================ */
  .audit-trail {
    position: relative;
    padding-left: 34px;
  }

  .audit-trail::before {
    content: "";
    position: absolute;
    left: 11px;
    top: 14px;
    bottom: 14px;
    width: 2px;
    background: var(--bs-border-color);
  }

  .audit-event {
    position: relative;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    padding: 15px 17px;
    border-radius: 12px;
    background: var(--surface-soft);
    border: 1px solid transparent;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .audit-event+.audit-event {
    margin-top: 12px;
  }

  .audit-event:hover {
    background: var(--surface);
    border-color: var(--bs-border-color);
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
  }

  /* the knot on the rule */

  .audit-event::before {
    content: "";
    position: absolute;
    left: -29px;
    top: 20px;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: var(--surface);
    border: 3px solid var(--bs-border-color);
  }

  .audit-event.is-done::before {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
  }

  .audit-event.is-now::before {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px #F2F5FF;
  }

  .audit-event-title {
    margin: 0 0 3px;
    font-size: 14px;
    font-weight: 600;
    color: var(--heading);
  }

  /* a before / after pair inside an audit entry */
  .delta-value {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 8px;
    font-size: 12px;
  }

  .delta-value s {
    color: var(--bs-secondary-color);
  }

  .delta-value b {
    font-weight: 600;
    color: var(--heading);
  }

  .delta-value i {
    font-size: 13px;
    color: var(--bs-secondary-color);
  }

  /* consecutive .row blocks inside one tab pane (e.g. a colour-swatch row
   followed by an option-card row, with no section-head between them) have
   no gap by default — Bootstrap's gutter only spaces columns within a row,
   not row against row. */
  .settings-tab-content .row+.row {
    margin-top: 24px;
  }

  /* ============================================================
   10. OFFCANVAS + MODAL + EMPTY STATE
   ============================================================ */
  .offcanvas.offcanvas-end.flush-panel {
    width: 88% !important;
    max-width: 1360px !important;
    overflow-y: auto;
  }

  @media (max-width: 991.98px) {
    .offcanvas.offcanvas-end.flush-panel {
      width: 100% !important;
    }
  }

  /* the head and footer scroll away with the body instead of staying
     pinned — the offcanvas itself is the scroll container, not the body */

  .offcanvas.offcanvas-end.flush-panel .offcanvas-body {
    padding: 22px;
    flex-grow: 0;
    overflow-y: visible;
  }

  .flush-panel-head {
    position: relative;
    display: flex;
    align-items: flex-start;
    gap: 16px;
    flex-wrap: wrap;
    padding: 22px 56px 22px 22px;
    background: linear-gradient(115deg, #F2F5FF 0%, var(--surface) 55%), var(--surface);
    border-bottom: 1px solid var(--bs-border-color);
    /* pinned to the corner (not a flex item) so it can never wrap away
     when the title/badges take up the full width of the row. Every
     visual property is repeated here (not just position) because
     `.offcanvas .btn-close` in _popup.scss ties on specificity — it
     compiles earlier so this rule wins, but only for properties this
     rule actually declares. Leaving color/background undeclared here
     let that earlier rule's `background: transparent` and (on hover)
     `color: $danger` through, making the icon invisible. */
  }

  .flush-panel-head .custom-btn-close {
    position: absolute;
    top: 18px;
    right: 18px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    padding: 0;
    border-radius: 50%;
    background-color: var(--surface);
    border: 1px solid var(--bs-border-color);
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
    color: var(--bs-secondary-color);
    opacity: 1;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .flush-panel-head .custom-btn-close i {
    font-size: 16px;
    line-height: 1;
  }

  .flush-panel-head .custom-btn-close:hover {
    background-color: #FDE9ED;
    border-color: #FAD4DA;
    color: #E82646;
    box-shadow: 0 4px 10px rgba(232, 38, 70, 0.16);
  }

  .flush-panel .offcanvas-footer {
    padding: 16px 22px;
    background: var(--surface);
    border-top: 1px solid var(--bs-border-color);
  }

  .outline-box {
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.04);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .outline-box:hover {
    border-color: rgba(31, 59, 96, 0.25);
    box-shadow: 0 10px 26px rgba(17, 24, 39, 0.08);
  }

  /* the hero swatch — a full-bleed colour banner for a "current value" card,
   used in place of a bare colour dot so a colour setting reads as premium
   rather than as an empty card with a small chip in it. Colour comes in via
   the --hero-color custom property set inline per instance. */
  .color-hero {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px 24px;
    flex-wrap: wrap;
    padding: 24px;
    background-color: var(--hero-color, #1f3b60);
    background-image: radial-gradient(120% 160% at 0% 0%, rgba(255, 255, 255, 0.22) 0%, transparent 55%), linear-gradient(135deg, transparent 0%, rgba(0, 0, 0, 0.22) 100%);
  }

  @media (max-width: 575.98px) {
    .color-hero {
      padding: 20px;
    }
  }

  .color-hero-main {
    min-width: 0;
  }

  .color-hero-label {
    display: block;
    margin-bottom: 7px;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.8);
  }

  .color-hero-hex {
    display: block;
    font-size: 28px;
    font-weight: 700;
    letter-spacing: 0.01em;
    font-variant-numeric: tabular-nums;
    color: #fff;
  }

  .color-hero-side {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
  }

  .color-hero-prev {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 7px 13px;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.14);
    border: 1px solid rgba(255, 255, 255, 0.28);
    font-size: 12px;
    font-weight: 600;
    color: rgba(255, 255, 255, 0.92);
    white-space: nowrap;
  }

  .color-hero-prev s {
    font-weight: 500;
    color: rgba(255, 255, 255, 0.68);
  }

  .color-hero-prev-dot {
    width: 10px;
    height: 10px;
    flex-shrink: 0;
    border-radius: 50%;
    border: 1px solid rgba(255, 255, 255, 0.55);
  }

  .color-hero-copy {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 9px;
    background: rgba(255, 255, 255, 0.14);
    border: 1px solid rgba(255, 255, 255, 0.28);
    color: #fff;
    font-size: 15px;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .color-hero-copy:hover {
    background: rgba(255, 255, 255, 0.26);
  }

  .outline-box-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 13px 16px;
    background: var(--surface-soft);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .outline-box-head h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--heading);
  }

  .outline-box-body {
    padding: 16px;
  }

  /* a validation line: a rule passed or failed */
  .check-row {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 13px;
    color: var(--heading);
  }

  .check-row+.check-row {
    border-top: 1px dashed var(--bs-border-color);
  }

  .check-row i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 16px;
    color: #1ABE17;
  }

  .check-row.is-warn i {
    color: #EAB300;
  }

  .check-row.is-fail i {
    color: #E82646;
  }

  .settings-modal .modal-content {
    border-radius: 16px;
    border: 0;
  }

  .settings-modal .modal-header {
    align-items: flex-start;
    padding: 20px 22px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .settings-modal .modal-body {
    padding: 22px;
  }

  .settings-modal .modal-footer {
    padding: 16px 22px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* a drop target for uploads */
  .inline-drop {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 30px 20px;
    text-align: center;
    border-radius: 12px;
    background: var(--surface-soft);
    border: 1px dashed var(--bs-border-color);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .inline-drop:hover {
    background: #F2F5FF;
    border-color: var(--bs-primary);
  }

  .inline-drop i {
    font-size: 26px;
    color: var(--bs-primary);
  }

  .empty-block {
    padding: 44px 24px;
    text-align: center;
    border-radius: 12px;
    background: var(--surface-soft);
    border: 1px dashed var(--bs-border-color);
  }

  .empty-block-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 58px;
    height: 58px;
    margin-bottom: 14px;
    border-radius: 18px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
    color: var(--bs-primary);
    font-size: 25px;
  }

  /* ============================================================
   11. PREFERENCES — grouped setting lists and inline controls

   The school-profile surfaces are read-only records: label, value, edit.
   Preferences are the opposite — the control lives in the row and the value
   changes in place. These components carry that difference: grouped lists
   with hairlines, segmented pickers, accent swatches and toggle tiles.
   ============================================================ */
  /* a grouped list, in the manner of a system settings panel */
  .option-group {
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .option-group+.option-group {
    margin-top: 20px;
  }

  .option-group-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 18px;
    background: var(--surface-soft);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .option-group-title {
    margin: 0;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--heading);
  }

  /* one setting: glyph, name and description, then the control */
  .option-item {
    display: grid;
    grid-template-columns: 40px minmax(0, 1fr) auto;
    align-items: center;
    gap: 16px;
    padding: 15px 18px;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  @media (max-width: 1199.98px) {
    .option-item {
      display: flex;
      flex-wrap: wrap;
    }
  }

  .option-item+.option-item {
    border-top: 1px solid var(--bs-border-color);
  }

  .option-item:hover {
    background: var(--surface-soft);
  }

  /* a setting that is switched off dims its own description */

  .option-item.is-off .option-item-text p {
    opacity: 0.65;
  }

  @media (max-width: 767.98px) {
    .option-item {
      grid-template-columns: 40px minmax(0, 1fr);
      row-gap: 12px;
    }

    .option-item .option-item-control {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  .option-item-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 12px;
    background: var(--surface-soft);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .option-item-text {
    min-width: 0;
  }

  .option-item-text span:first-child {
    display: block;
    font-size: 14px;
    font-weight: 500;
    color: var(--heading);
  }

  .option-item-text p {
    margin: 2px 0 0;
    font-size: 12.5px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .option-item-control {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
    white-space: nowrap;
  }

  /* a compact select that sits inside a row without dominating it */
  .inline-select {
    min-width: 168px;
    padding: 7px 32px 7px 12px;
    border-radius: 8px;
    background-color: var(--surface);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    color: var(--heading);
  }

  .inline-select:focus {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px #F2F5FF;
    outline: 0;
  }

  @media (max-width: 575.98px) {
    .inline-select {
      min-width: 0;
      width: 100%;
    }
  }

  /* ---- segmented control ------------------------------------------------
   Two or three mutually exclusive options shown side by side, so the choice
   and its alternatives are visible at once. */
  .segmented {
    display: inline-flex;
    padding: 3px;
    border-radius: 10px;
    background: var(--surface-soft);
    border: 1px solid var(--bs-border-color);
  }

  .segmented-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 6px 14px;
    border: 0;
    border-radius: 7px;
    background: transparent;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .segmented-btn i {
    font-size: 15px;
  }

  .segmented-btn:hover {
    color: var(--heading);
  }

  .segmented-btn.active {
    background: var(--surface);
    color: var(--heading);
    box-shadow: 0 1px 2px rgba(17, 24, 39, 0.06);
  }

  /* ---- accent picker ---------------------------------------------------- */
  .accent-picker {
    display: inline-flex;
    gap: 8px;
  }

  .accent-picker-dot {
    position: relative;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    border: 0;
    padding: 0;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .accent-picker-dot::after {
    content: "";
    position: absolute;
    inset: -4px;
    border-radius: 50%;
    border: 2px solid transparent;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .accent-picker-dot:hover {
    transform: scale(1.08);
  }

  .accent-picker-dot.active::after {
    border-color: currentColor;
  }

  .accent-picker-dot.c-primary {
    background: #1f3b60;
    color: #1f3b60;
  }

  .accent-picker-dot.c-teal {
    background: #02a8b5;
    color: #02a8b5;
  }

  .accent-picker-dot.c-success {
    background: #1ABE17;
    color: #1ABE17;
  }

  .accent-picker-dot.c-warning {
    background: #EAB300;
    color: #EAB300;
  }

  .accent-picker-dot.c-danger {
    background: #E82646;
    color: #E82646;
  }

  .accent-picker-dot.c-purple {
    background: #4A00E5;
    color: #4A00E5;
  }

  .accent-picker-dot.c-pink {
    background: #E83E8C;
    color: #E83E8C;
  }

  .accent-picker-dot.c-dark {
    background: #202C4B;
    color: #202C4B;
  }

  /* ---- toggle tile ------------------------------------------------------
   For settings that deserve more room than a list row: a glyph, a short
   explanation and a switch, with the whole tile reflecting its state. */
  .choice-tile {
    display: flex;
    flex-direction: column;
    gap: 10px;
    height: 100%;
    padding: 18px;
    border-radius: 12px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .choice-tile:hover {
    box-shadow: 0 8px 24px rgba(17, 24, 39, 0.1);
  }

  /* an enabled tile tints and keeps its glyph solid */

  .choice-tile.is-on {
    background: #F2F5FF;
    border-color: rgba(31, 59, 96, 0.26);
  }

  .choice-tile.is-on .choice-tile-icon {
    background: var(--bs-primary);
    border-color: transparent;
    color: #fff;
  }

  .choice-tile-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: 13px;
    background: var(--surface-soft);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 19px;
    transition: 0.18s cubic-bezier(0.4, 0, 0.2, 1);
  }

  .choice-tile-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--heading);
  }

  .choice-tile-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ---- keyboard shortcut display ---------------------------------------- */
  .key-list {
    display: inline-flex;
    align-items: center;
    gap: 4px;
  }

  .key-list kbd {
    padding: 3px 8px;
    border-radius: 6px;
    background: var(--surface);
    border: 1px solid var(--bs-border-color);
    border-bottom-width: 2px;
    box-shadow: none;
    font-size: 11px;
    font-weight: 600;
    color: var(--heading);
  }

  .key-list span {
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  /* ---- a miniature of the interface, for previewing appearance ---------- */
  .layout-preview {
    display: flex;
    height: 148px;
    border-radius: 12px;
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    background: var(--bs-white);
  }

  .layout-preview.is-dark {
    background: #202C4B;
    border-color: rgba(255, 255, 255, 0.12);
  }

  .layout-preview.is-dark .layout-preview-side {
    background: rgba(255, 255, 255, 0.06);
  }

  .layout-preview.is-dark .layout-preview-bar {
    background: rgba(255, 255, 255, 0.08);
  }

  .layout-preview.is-dark .layout-preview-line {
    background: rgba(255, 255, 255, 0.14);
  }

  .layout-preview.is-dark .layout-preview-card {
    background: rgba(255, 255, 255, 0.06);
    border-color: rgba(255, 255, 255, 0.1);
  }

  .layout-preview-side {
    flex-shrink: 0;
    width: 42px;
    padding: 8px 6px;
    background: #F8FAFC;
    border-right: 1px solid var(--bs-border-color);
    display: flex;
    flex-direction: column;
    gap: 6px;
  }

  .layout-preview-main {
    flex: 1 1 auto;
    padding: 8px;
    display: flex;
    flex-direction: column;
    gap: 7px;
  }

  .layout-preview-bar {
    height: 10px;
    border-radius: 3px;
    background: #F8FAFC;
  }

  .layout-preview-bar.is-accent {
    background: var(--bs-primary);
  }

  .layout-preview-line {
    height: 6px;
    border-radius: 3px;
    background: #EDF1F6;
    width: calc(var(--p, 100) * 1%);
  }

  .layout-preview-card {
    flex: 1 1 auto;
    border-radius: 6px;
    background: #F8FAFC;
    border: 1px solid var(--bs-border-color);
  }

  /* ---- a summary strip at the head of a pane ---------------------------- */
  .summary-line {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 14px 18px;
    margin-bottom: 20px;
    border-radius: 12px;
    background: linear-gradient(110deg, #F2F5FF, #F8FAFC);
    border: 1px solid var(--bs-border-color);
  }

  .summary-line i {
    flex-shrink: 0;
    font-size: 20px;
    color: var(--bs-primary);
  }

  .summary-line p {
    margin: 0;
    font-size: 13px;
    color: #202C4B;
  }

  /*===== financial settings =====*/
  /*-----------------
    Financial Settings — reusable configuration components

    A shared vocabulary for every page in the Financial Settings Center
    (payment settings, gateways, tax rates, invoicing, fee and discount rules,
    currency, accounting, approvals and preferences). Class prefix `fin-`.

    The language here is a finance console rather than a settings form:
    a banded hero carrying the environment it is editing, a sticky rail of
    the whole centre, workspaces split into cards, provider tiles that show
    their own credentials and mode, rule rows that read condition -> outcome,
    and a publication timeline. Values are always accompanied by the control
    that changes them.

    It deliberately does NOT depend on `_settings.scss`, `_notifications.scss`
    or the AI families in `_ai-insights.scss`, and overrides nothing in them,
    so the two settings centres can evolve separately.

    Contents
      1.  Tokens + shared pieces
      2.  Settings hero
      3.  Sticky centre navigation
      4.  Configuration workspace + premium tabs
      5.  Configuration cards and setting rows
      6.  Payment provider cards
      7.  Business rule rows
      8.  Feature cards
      9.  Premium accordion
      10. Information centre panels
      11. Configuration timeline
      12. Offcanvas, modal helpers and empty state
-----------------*/
  /* ============================================================
   1. TOKENS + SHARED PIECES
   ============================================================ */
  :root {
    --fin-border: var(--bs-border-color, #E9EDF4);
    --fin-border-strong: #EDF1F6;
    --fin-money: #1ABE17;
    --fin-money-soft: #E8F9E8;
    --fin-alert: #E82646;
    --fin-alert-soft: #FDE9ED;
  }

  @media (prefers-reduced-motion: reduce) {

    [class*=fin-],
    [class*=fin-]::before,
    [class*=fin-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* Carries a numeric value into CSS without an inline style. */
  .fin-p-0 {
    --p: 0;
  }

  .fin-p-1 {
    --p: 1;
  }

  .fin-p-2 {
    --p: 2;
  }

  .fin-p-3 {
    --p: 3;
  }

  .fin-p-4 {
    --p: 4;
  }

  .fin-p-5 {
    --p: 5;
  }

  .fin-p-6 {
    --p: 6;
  }

  .fin-p-7 {
    --p: 7;
  }

  .fin-p-8 {
    --p: 8;
  }

  .fin-p-9 {
    --p: 9;
  }

  .fin-p-10 {
    --p: 10;
  }

  .fin-p-11 {
    --p: 11;
  }

  .fin-p-12 {
    --p: 12;
  }

  .fin-p-13 {
    --p: 13;
  }

  .fin-p-14 {
    --p: 14;
  }

  .fin-p-15 {
    --p: 15;
  }

  .fin-p-16 {
    --p: 16;
  }

  .fin-p-17 {
    --p: 17;
  }

  .fin-p-18 {
    --p: 18;
  }

  .fin-p-19 {
    --p: 19;
  }

  .fin-p-20 {
    --p: 20;
  }

  .fin-p-21 {
    --p: 21;
  }

  .fin-p-22 {
    --p: 22;
  }

  .fin-p-23 {
    --p: 23;
  }

  .fin-p-24 {
    --p: 24;
  }

  .fin-p-25 {
    --p: 25;
  }

  .fin-p-26 {
    --p: 26;
  }

  .fin-p-27 {
    --p: 27;
  }

  .fin-p-28 {
    --p: 28;
  }

  .fin-p-29 {
    --p: 29;
  }

  .fin-p-30 {
    --p: 30;
  }

  .fin-p-31 {
    --p: 31;
  }

  .fin-p-32 {
    --p: 32;
  }

  .fin-p-33 {
    --p: 33;
  }

  .fin-p-34 {
    --p: 34;
  }

  .fin-p-35 {
    --p: 35;
  }

  .fin-p-36 {
    --p: 36;
  }

  .fin-p-37 {
    --p: 37;
  }

  .fin-p-38 {
    --p: 38;
  }

  .fin-p-39 {
    --p: 39;
  }

  .fin-p-40 {
    --p: 40;
  }

  .fin-p-41 {
    --p: 41;
  }

  .fin-p-42 {
    --p: 42;
  }

  .fin-p-43 {
    --p: 43;
  }

  .fin-p-44 {
    --p: 44;
  }

  .fin-p-45 {
    --p: 45;
  }

  .fin-p-46 {
    --p: 46;
  }

  .fin-p-47 {
    --p: 47;
  }

  .fin-p-48 {
    --p: 48;
  }

  .fin-p-49 {
    --p: 49;
  }

  .fin-p-50 {
    --p: 50;
  }

  .fin-p-51 {
    --p: 51;
  }

  .fin-p-52 {
    --p: 52;
  }

  .fin-p-53 {
    --p: 53;
  }

  .fin-p-54 {
    --p: 54;
  }

  .fin-p-55 {
    --p: 55;
  }

  .fin-p-56 {
    --p: 56;
  }

  .fin-p-57 {
    --p: 57;
  }

  .fin-p-58 {
    --p: 58;
  }

  .fin-p-59 {
    --p: 59;
  }

  .fin-p-60 {
    --p: 60;
  }

  .fin-p-61 {
    --p: 61;
  }

  .fin-p-62 {
    --p: 62;
  }

  .fin-p-63 {
    --p: 63;
  }

  .fin-p-64 {
    --p: 64;
  }

  .fin-p-65 {
    --p: 65;
  }

  .fin-p-66 {
    --p: 66;
  }

  .fin-p-67 {
    --p: 67;
  }

  .fin-p-68 {
    --p: 68;
  }

  .fin-p-69 {
    --p: 69;
  }

  .fin-p-70 {
    --p: 70;
  }

  .fin-p-71 {
    --p: 71;
  }

  .fin-p-72 {
    --p: 72;
  }

  .fin-p-73 {
    --p: 73;
  }

  .fin-p-74 {
    --p: 74;
  }

  .fin-p-75 {
    --p: 75;
  }

  .fin-p-76 {
    --p: 76;
  }

  .fin-p-77 {
    --p: 77;
  }

  .fin-p-78 {
    --p: 78;
  }

  .fin-p-79 {
    --p: 79;
  }

  .fin-p-80 {
    --p: 80;
  }

  .fin-p-81 {
    --p: 81;
  }

  .fin-p-82 {
    --p: 82;
  }

  .fin-p-83 {
    --p: 83;
  }

  .fin-p-84 {
    --p: 84;
  }

  .fin-p-85 {
    --p: 85;
  }

  .fin-p-86 {
    --p: 86;
  }

  .fin-p-87 {
    --p: 87;
  }

  .fin-p-88 {
    --p: 88;
  }

  .fin-p-89 {
    --p: 89;
  }

  .fin-p-90 {
    --p: 90;
  }

  .fin-p-91 {
    --p: 91;
  }

  .fin-p-92 {
    --p: 92;
  }

  .fin-p-93 {
    --p: 93;
  }

  .fin-p-94 {
    --p: 94;
  }

  .fin-p-95 {
    --p: 95;
  }

  .fin-p-96 {
    --p: 96;
  }

  .fin-p-97 {
    --p: 97;
  }

  .fin-p-98 {
    --p: 98;
  }

  .fin-p-99 {
    --p: 99;
  }

  .fin-p-100 {
    --p: 100;
  }

  /* small caps label used above groups of values */
  .fin-lbl {
    display: block;
    margin: 0 0 4px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* an amount, set in tabular figures so columns of money line up */
  .fin-amt {
    font-variant-numeric: tabular-nums;
    font-feature-settings: "tnum" 1;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ---- status badges ----------------------------------------------------- */
  .fin-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 10px;
    border-radius: 999px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 11.5px;
    font-weight: 600;
    line-height: 1.4;
    white-space: nowrap;
    color: var(--bs-secondary-color);
  }

  .fin-badge::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: currentColor;
    flex-shrink: 0;
  }

  .fin-badge.is-live {
    background: var(--fin-money-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(21.0197183099, 153.6056338028, 18.5943661972);
  }

  .fin-badge.is-test {
    background: var(--tint-warning);
    border-color: rgba(234, 179, 0, 0.32);
    color: rgb(162.6, 124.3820512821, 0);
  }

  .fin-badge.is-review {
    background: var(--tint-primary);
    border-color: rgba(31, 59, 96, 0.26);
    color: var(--bs-primary);
  }

  .fin-badge.is-alert {
    background: var(--fin-alert-soft);
    border-color: rgba(232, 38, 70, 0.26);
    color: var(--fin-alert);
  }

  .fin-badge.is-off {
    opacity: 0.85;
  }

  /* a badge with no dot, for plain metadata */

  .fin-badge.is-plain::before {
    display: none;
  }

  /* ---- a thin proportion meter ------------------------------------------- */
  .fin-meter {
    position: relative;
    height: 6px;
    border-radius: 999px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  .fin-meter span {
    position: absolute;
    inset: 0 auto 0 0;
    width: calc(var(--p, 0) * 1%);
    border-radius: inherit;
    background: var(--bs-primary);
    transition: width var(--transition);
  }

  .fin-meter.is-money span {
    background: var(--fin-money);
  }

  .fin-meter.is-warn span {
    background: var(--bs-warning);
  }

  /* ============================================================
   2. SETTINGS HERO
   A banded surface that names what is being edited and, just as
   importantly, WHICH environment it will land in.
   ============================================================ */
  .fin-hero {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: flex-end;
    gap: 24px 32px;
    padding: 26px 28px;
    margin-bottom: 24px;
    border-radius: var(--radius);
    background: linear-gradient(112deg, var(--tint-primary) 0%, rgba(255, 255, 255, 0) 46%), var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow: hidden;
    /* a hairline rule of the accent along the top edge */
  }

  .fin-hero::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 3px;
    background: linear-gradient(90deg, var(--bs-primary), var(--fin-money));
  }

  @media (max-width: 1199.98px) {
    .fin-hero {
      grid-template-columns: minmax(0, 1fr);
      align-items: flex-start;
    }
  }

  @media (max-width: 575.98px) {
    .fin-hero {
      padding: 20px;
    }
  }

  .fin-hero-top {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-bottom: 14px;
    flex-wrap: wrap;
  }

  .fin-hero-crest {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    flex-shrink: 0;
    border-radius: 16px;
    background: var(--bs-primary);
    color: #fff;
    font-size: 25px;
    box-shadow: 0 8px 18px rgba(31, 59, 96, 0.28);
  }

  .fin-hero-title {
    margin: 0;
    font-size: 26px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .fin-hero-title {
      font-size: 21px;
    }
  }

  .fin-hero-sub {
    margin: 4px 0 0;
    max-width: 62ch;
    font-size: 13.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* the environment chip — deliberately loud, because it changes consequences */
  .fin-hero-env {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px;
    border-radius: 999px;
    background: var(--bs-emphasis-color);
    color: #fff;
    font-size: 11.5px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
  }

  .fin-hero-env i {
    font-size: 14px;
  }

  .fin-hero-env.is-test {
    background: rgb(172.8, 132.1846153846, 0);
  }

  /* facts sit on a single rule, divided by hairlines */
  .fin-hero-facts {
    display: flex;
    flex-wrap: wrap;
    margin-top: 20px;
    padding-top: 18px;
    border-top: 1px solid var(--bs-border-color);
  }

  .fin-hero-fact {
    display: flex;
    flex-direction: column;
    gap: 3px;
    flex: 1 1 0;
    min-width: 150px;
    padding: 0 20px;
  }

  .fin-hero-fact:first-child {
    padding-left: 0;
  }

  .fin-hero-fact+.fin-hero-fact {
    border-left: 1px solid var(--bs-border-color);
  }

  .fin-hero-fact span {
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .fin-hero-fact strong {
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 767.98px) {
    .fin-hero-fact {
      flex: 1 1 46%;
      padding: 10px 14px;
    }

    .fin-hero-fact:first-child {
      padding-left: 14px;
    }

    .fin-hero-fact+.fin-hero-fact {
      border-left: 0;
    }
  }

  .fin-hero-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
  }

  @media (max-width: 1199.98px) {
    .fin-hero-actions {
      width: 100%;
    }
  }

  /* ============================================================
   3. STICKY CENTRE NAVIGATION
   Every page of the centre, always visible, current one marked.
   ============================================================ */
  .fin-nav {
    position: sticky;
    top: calc(60px + 16px);
    max-height: calc(100vh - 60px - 32px);
    padding: 14px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow-y: auto;
    /* Bootstrap's `.nav` sets `flex-wrap: wrap`; inside a column flex box with
     a capped height that wraps the overflow into a SECOND COLUMN instead of
     scrolling, which shows as a horizontal scrollbar. The rail must scroll
     vertically and never wrap. */
    flex-wrap: nowrap;
    overflow-x: hidden;
  }

  .fin-nav>* {
    flex-shrink: 0;
  }

  @media (max-width: 991.98px) {
    .fin-nav {
      position: static;
      max-height: none;
    }
  }

  .fin-nav-hdr {
    display: block;
    padding: 12px 10px 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .fin-nav-hdr:first-child {
    padding-top: 2px;
  }

  .fin-nav-link {
    position: relative;
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 9px 12px;
    border-radius: var(--radius-sm);
    font-size: 13.5px;
    font-weight: 500;
    color: var(--bs-emphasis-color);
    text-decoration: none;
    transition: var(--transition);
  }

  .fin-nav-link i {
    flex-shrink: 0;
    font-size: 17px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  .fin-nav-link span:first-of-type {
    flex: 1 1 auto;
    min-width: 0;
  }

  .fin-nav-link:hover {
    background: var(--bs-secondary-bg);
    color: var(--bs-emphasis-color);
  }

  .fin-nav-link.active {
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-weight: 600;
  }

  .fin-nav-link.active i {
    color: var(--bs-primary);
  }

  /* a short mark against the left edge, rather than a full border */

  .fin-nav-link.active::before {
    content: "";
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    width: 3px;
    height: 18px;
    border-radius: 0 3px 3px 0;
    background: var(--bs-primary);
  }

  /* a quiet marker for a page that is configured, or not yet */
  .fin-nav-tag {
    flex-shrink: 0;
    padding: 2px 7px;
    border-radius: 999px;
    background: var(--bs-secondary-bg);
    font-size: 10px;
    font-weight: 600;
    color: var(--bs-secondary-color);
  }

  .fin-nav-tag.is-set {
    background: var(--fin-money-soft);
    color: rgb(21.0197183099, 153.6056338028, 18.5943661972);
  }

  .fin-nav-tag.is-warn {
    background: var(--tint-warning);
    color: rgb(152.4, 116.5794871795, 0);
  }

  .fin-nav-foot {
    margin-top: 14px;
    padding: 14px 12px 6px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   4. CONFIGURATION WORKSPACE + PREMIUM TABS
   ============================================================ */
  .fin-ws {
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow: hidden;
  }

  .fin-ws-head {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
    padding: 18px 22px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .fin-ws-title {
    margin: 0;
    font-size: 16px;
    font-weight: 700;
    color: var(--bs-emphasis-color);
  }

  .fin-ws-title+p {
    margin: 2px 0 0;
    font-size: 12.5px;
    color: var(--bs-secondary-color);
  }

  .fin-ws-body {
    padding: 22px;
  }

  @media (max-width: 575.98px) {
    .fin-ws-body {
      padding: 18px 16px;
    }
  }

  /* premium tabs — a rail of pills on a recessed track */
  .fin-tabs {
    display: flex;
    gap: 4px;
    padding: 4px;
    border-radius: 11px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow-x: auto;
    scrollbar-width: none;
    flex-wrap: nowrap;
  }

  .fin-tabs::-webkit-scrollbar {
    display: none;
  }

  .fin-tab {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 8px 15px;
    border: 0;
    border-radius: 8px;
    background: transparent;
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  .fin-tab i {
    font-size: 16px;
  }

  .fin-tab:hover {
    background: var(--bs-secondary-bg);
    color: var(--bs-emphasis-color);
  }

  .fin-tab.active {
    background: var(--bs-primary);
    color: #fff;
    box-shadow: 0 4px 12px rgba(31, 59, 96, 0.26);
  }

  /* a count riding along with the label */

  .fin-tab .fin-tab-n {
    padding: 1px 6px;
    border-radius: 999px;
    background: rgba(0, 0, 0, 0.07);
    font-size: 10.5px;
    line-height: 1.6;
  }

  .fin-tab.active .fin-tab-n {
    background: rgba(255, 255, 255, 0.24);
  }

  /* ============================================================
   5. CONFIGURATION CARDS + SETTING ROWS
   ============================================================ */
  .fin-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .fin-card:hover {
    border-color: var(--fin-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* a card whose whole surface opens the workspace */

  .fin-card.is-clickable {
    cursor: pointer;
  }

  .fin-card-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 18px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .fin-card-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    flex-shrink: 0;
    border-radius: 12px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .fin-card-ic.is-money {
    background: var(--fin-money-soft);
    color: rgb(21.0197183099, 153.6056338028, 18.5943661972);
  }

  .fin-card-ic.is-warn {
    background: var(--tint-warning);
    color: rgb(162.6, 124.3820512821, 0);
  }

  .fin-card-ic.is-alert {
    background: var(--fin-alert-soft);
    color: var(--fin-alert);
  }

  .fin-card-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fin-card-body {
    flex: 1 1 auto;
    padding: 6px 18px 14px;
  }

  .fin-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    padding: 12px 18px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* one setting: what it is, what it is set to, and the control that changes it */
  .fin-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 10px 16px;
    padding: 12px 0;
  }

  .fin-row+.fin-row {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .fin-row {
      grid-template-columns: minmax(0, 1fr);
    }

    .fin-row .fin-row-ctl {
      justify-content: flex-start;
    }
  }

  .fin-row-key {
    min-width: 0;
  }

  .fin-row-key strong {
    display: block;
    font-size: 13.5px;
    font-weight: 500;
    color: var(--bs-emphasis-color);
  }

  .fin-row-key span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .fin-row-ctl {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
    white-space: nowrap;
  }

  /* a compact input that sits inside a row without dominating it */
  .fin-input,
  .fin-select {
    min-width: 150px;
    padding: 7px 12px;
    border-radius: var(--radius-sm);
    background-color: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .fin-input:focus,
  .fin-select:focus {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
    outline: 0;
  }

  @media (max-width: 575.98px) {

    .fin-input,
    .fin-select {
      min-width: 0;
      width: 100%;
    }
  }

  .fin-select {
    padding-right: 30px;
  }

  /* an amount field with its currency fixed to the front */
  .fin-money-field {
    display: inline-flex;
    align-items: stretch;
    border-radius: var(--radius-sm);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .fin-money-field .fin-money-sym {
    display: inline-flex;
    align-items: center;
    padding: 0 10px;
    background: var(--bs-secondary-bg);
    border-right: 1px solid var(--bs-border-color);
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-secondary-color);
  }

  .fin-money-field input {
    width: 108px;
    padding: 7px 10px;
    border: 0;
    font-size: 13px;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .fin-money-field input:focus {
    outline: 0;
  }

  .fin-money-field:focus-within {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  /* ============================================================
   6. PAYMENT PROVIDER CARDS
   A provider shows its mark, the mode it is running in, its
   credentials as a masked fingerprint, and its cost.
   ============================================================ */
  .fin-prov {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .fin-prov:hover {
    border-color: var(--fin-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* the live provider is marked along its leading edge */

  .fin-prov.is-primary::after {
    content: "";
    position: absolute;
    inset: 0 auto 0 0;
    width: 3px;
    background: var(--fin-money);
  }

  .fin-prov.is-disabled {
    background: var(--bs-secondary-bg);
  }

  .fin-prov.is-disabled .fin-prov-mark,
  .fin-prov.is-disabled .fin-prov-name {
    opacity: 0.7;
  }

  .fin-prov-head {
    display: flex;
    align-items: flex-start;
    gap: 13px;
    padding: 18px 18px 14px;
  }

  .fin-prov-mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 46px;
    height: 46px;
    flex-shrink: 0;
    border-radius: 13px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 22px;
    color: var(--bs-emphasis-color);
  }

  .fin-prov-name {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fin-prov-name+p {
    margin: 2px 0 0;
    font-size: 12px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  /* the credential fingerprint — enough to identify a key, never enough to use it */
  .fin-prov-key {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 18px 14px;
    padding: 9px 12px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--fin-border-strong);
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  .fin-prov-key code {
    font-size: 12px;
    letter-spacing: 0.04em;
    color: var(--bs-emphasis-color);
  }

  /* provider facts, on their own hairline grid */
  .fin-prov-facts {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    border-top: 1px solid var(--bs-border-color);
  }

  .fin-prov-fact {
    padding: 11px 18px;
  }

  .fin-prov-fact:nth-child(odd) {
    border-right: 1px solid var(--bs-border-color);
  }

  .fin-prov-fact:nth-child(n+3) {
    border-top: 1px solid var(--bs-border-color);
  }

  .fin-prov-fact span {
    display: block;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .fin-prov-fact strong {
    display: block;
    margin-top: 2px;
    font-size: 13px;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .fin-prov-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 12px 18px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   7. BUSINESS RULE ROWS
   A rule reads as a sentence: when this, then that.
   ============================================================ */
  .fin-rule {
    display: grid;
    grid-template-columns: 34px minmax(0, 1fr) auto;
    align-items: center;
    gap: 16px;
    padding: 15px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .fin-rule+.fin-rule {
    margin-top: 10px;
  }

  .fin-rule:hover {
    border-color: var(--fin-border-strong);
    box-shadow: var(--shadow);
  }

  .fin-rule.is-off {
    background: var(--bs-secondary-bg);
  }

  .fin-rule.is-off .fin-rule-body {
    opacity: 0.68;
  }

  @media (max-width: 767.98px) {
    .fin-rule {
      grid-template-columns: 34px minmax(0, 1fr);
      row-gap: 12px;
    }

    .fin-rule .fin-rule-ctl {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  /* the rule's order in the chain — order matters when rules stack */
  .fin-rule-n {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    border-radius: 10px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 12.5px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--bs-secondary-color);
  }

  .fin-rule-body {
    min-width: 0;
  }

  .fin-rule-line {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    font-size: 13.5px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
    /* the arrow between condition and outcome */
  }

  .fin-rule-line i.ti-arrow-narrow-right {
    color: var(--bs-secondary-color);
    font-size: 17px;
  }

  /* the variable parts of the sentence, marked so the rule can be scanned */
  .fin-rule-cond,
  .fin-rule-then {
    padding: 2px 9px;
    border-radius: 7px;
    font-size: 12.5px;
    font-weight: 600;
  }

  .fin-rule-cond {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .fin-rule-then {
    background: var(--fin-money-soft);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .fin-rule-note {
    display: block;
    margin-top: 4px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  .fin-rule-ctl {
    display: flex;
    align-items: center;
    gap: 12px;
    justify-content: flex-end;
  }

  /* ============================================================
   8. FEATURE CARDS
   Status, what it does, what it needs, and the switch.
   ============================================================ */
  .fin-feature {
    display: flex;
    flex-direction: column;
    gap: 12px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .fin-feature:hover {
    box-shadow: var(--shadow-lift);
  }

  /* an enabled feature tints and solidifies its glyph */

  .fin-feature.is-on {
    border-color: rgba(31, 59, 96, 0.26);
    background: linear-gradient(160deg, var(--tint-primary), var(--bs-body-bg) 58%);
  }

  .fin-feature.is-on .fin-feature-ic {
    background: var(--bs-primary);
    border-color: transparent;
    color: #fff;
  }

  .fin-feature-top {
    display: flex;
    align-items: flex-start;
    gap: 12px;
  }

  .fin-feature-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    flex-shrink: 0;
    border-radius: 13px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 20px;
    transition: var(--transition);
  }

  .fin-feature-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fin-feature-txt {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* the things this feature depends on, named plainly */
  .fin-deps {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
  }

  .fin-dep {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 9px;
    border-radius: 7px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 11.5px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  .fin-dep i {
    font-size: 13px;
  }

  .fin-dep.is-missing {
    background: var(--fin-alert-soft);
    border-color: rgba(232, 38, 70, 0.24);
    color: var(--fin-alert);
  }

  .fin-feature-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   9. PREMIUM ACCORDION
   ============================================================ */
  .fin-acc {
    border-radius: var(--radius);
    border: 1px solid var(--bs-border-color);
    background: var(--bs-body-bg);
    overflow: hidden;
  }

  .fin-acc .accordion-item {
    border: 0;
    background: transparent;
  }

  .fin-acc .accordion-item+.accordion-item {
    border-top: 1px solid var(--bs-border-color);
  }

  .fin-acc .accordion-button {
    gap: 12px;
    padding: 16px 18px;
    background: var(--bs-body-bg);
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    box-shadow: none;
  }

  .fin-acc .accordion-button::after {
    margin-left: 0;
  }

  .fin-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .fin-acc .accordion-button:focus {
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .fin-acc .accordion-button i {
    font-size: 18px;
  }

  /* pushes anything after it to the right of the header */

  .fin-acc .fin-acc-spacer {
    margin-left: auto;
  }

  .fin-acc .accordion-body {
    padding: 4px 18px 18px;
  }

  /* ============================================================
   10. INFORMATION CENTRE PANELS
   ============================================================ */
  .fin-note {
    display: flex;
    flex-direction: column;
    gap: 10px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-left: 3px solid var(--bs-primary);
  }

  .fin-note.is-money {
    border-left-color: var(--fin-money);
  }

  .fin-note.is-warn {
    border-left-color: var(--bs-warning);
  }

  .fin-note.is-alert {
    border-left-color: var(--fin-alert);
  }

  .fin-note-head {
    display: flex;
    align-items: center;
    gap: 9px;
  }

  .fin-note-head i {
    font-size: 18px;
    color: var(--bs-primary);
  }

  .is-money .fin-note-head i {
    color: rgb(21.0197183099, 153.6056338028, 18.5943661972);
  }

  .is-warn .fin-note-head i {
    color: rgb(162.6, 124.3820512821, 0);
  }

  .is-alert .fin-note-head i {
    color: var(--fin-alert);
  }

  .fin-note-head h6 {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fin-note-list {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  .fin-note-list li {
    position: relative;
    padding: 6px 0 6px 18px;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
    /* a small dash rather than a bullet */
  }

  .fin-note-list li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 14px;
    width: 9px;
    height: 1px;
    background: var(--fin-border-strong);
  }

  .fin-note-list li+li {
    border-top: 1px solid var(--bs-border-color);
  }

  .fin-note-list li strong {
    color: var(--bs-emphasis-color);
    font-weight: 600;
  }

  /* a recent change, showing what moved from what to what */
  .fin-delta {
    display: flex;
    align-items: center;
    gap: 7px;
    flex-wrap: wrap;
    margin-top: 3px;
    font-size: 12px;
  }

  .fin-delta del {
    text-decoration: line-through;
    color: var(--bs-secondary-color);
  }

  .fin-delta ins {
    text-decoration: none;
    font-weight: 600;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .fin-delta i {
    font-size: 14px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   11. CONFIGURATION TIMELINE
   Horizontal on a wide screen, vertical when there is no room.
   ============================================================ */
  .fin-tl {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 0;
    padding: 24px 22px 22px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  @media (max-width: 991.98px) {
    .fin-tl {
      grid-template-columns: minmax(0, 1fr);
      padding: 18px;
    }
  }

  .fin-tl-step {
    position: relative;
    padding: 0 18px;
    /* the connecting rule runs behind the markers */
  }

  .fin-tl-step::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 13px;
    height: 2px;
    background: var(--bs-tertiary-bg);
  }

  .fin-tl-step:first-child::before {
    left: 50%;
  }

  .fin-tl-step:last-child::before {
    right: 50%;
  }

  /* a completed step carries the accent through to the next marker */

  .fin-tl-step.is-done::before {
    background: var(--bs-primary);
  }

  .fin-tl-step.is-current ::before {
    background: var(--bs-primary);
  }

  @media (max-width: 991.98px) {
    .fin-tl-step {
      padding: 0 0 22px 30px;
    }

    .fin-tl-step::before {
      left: 13px;
      right: auto;
      top: 0;
      bottom: 0;
      width: 2px;
      height: auto;
    }

    .fin-tl-step:first-child::before {
      left: 13px;
      top: 13px;
    }

    .fin-tl-step:last-child::before {
      right: auto;
      bottom: auto;
      height: 13px;
    }
  }

  .fin-tl-dot {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    margin-bottom: 12px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-tertiary-bg);
    font-size: 14px;
    color: var(--bs-secondary-color);
  }

  .is-done .fin-tl-dot {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  .is-current .fin-tl-dot {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  @media (max-width: 991.98px) {
    .fin-tl-dot {
      position: absolute;
      left: -30px;
      top: 0;
      margin-bottom: 0;
    }
  }

  .fin-tl-title {
    margin: 0;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fin-tl-meta {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .fin-tl-txt {
    margin: 6px 0 0;
    font-size: 12px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   12. OFFCANVAS, MODAL HELPERS, EMPTY STATE
   ============================================================ */
  /* The theme sets `.offcanvas.offcanvas-end { width: auto !important }` in
   `_popup.scss`. Two classes plus `!important` beats any single-class rule,
   so the workspace has to match on three classes to win. */
  .offcanvas.offcanvas-end.fin-ws-canvas {
    width: 88% !important;
    max-width: 1180px !important;
  }

  .fin-canvas-head {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    padding: 20px 24px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .fin-canvas-body {
    padding: 22px 24px 32px;
  }

  /* a section inside the workspace panel */
  .fin-sect+.fin-sect {
    margin-top: 26px;
    padding-top: 22px;
    border-top: 1px solid var(--bs-border-color);
  }

  .fin-sect-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 14px;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .fin-sect-title i {
    font-size: 17px;
    color: var(--bs-primary);
  }

  /* key/value pairs with a dotted leader, as on a statement */
  .fin-kv {
    display: flex;
    align-items: baseline;
    gap: 8px;
    margin: 0;
    padding: 8px 0;
    font-size: 13px;
  }

  .fin-kv+.fin-kv {
    border-top: 1px solid var(--bs-border-color);
  }

  .fin-kv dt {
    order: 0;
    flex-shrink: 0;
    font-weight: 400;
    color: var(--bs-secondary-color);
  }

  /* The leader is a pseudo-element ordered between the term and the
     description, so the markup stays a valid `dl` with nothing but
     `dt`/`dd` inside it. */

  .fin-kv::before {
    content: "";
    order: 1;
    flex: 1 1 auto;
    min-width: 14px;
    height: 1px;
    border-bottom: 1px dotted var(--fin-border-strong);
    transform: translateY(-3px);
  }

  .fin-kv dd {
    order: 2;
    margin: 0;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    text-align: right;
    color: var(--bs-emphasis-color);
  }

  /* a validation result: what was checked and whether it passed */
  .fin-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .fin-check+.fin-check {
    border-top: 1px solid var(--bs-border-color);
  }

  .fin-check>i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 17px;
    color: rgb(21.0197183099, 153.6056338028, 18.5943661972);
  }

  .fin-check.is-warn>i {
    color: rgb(162.6, 124.3820512821, 0);
  }

  .fin-check.is-alert>i {
    color: var(--fin-alert);
  }

  .fin-check span {
    display: block;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* audit entries — a date gutter and the change beside it */
  .fin-audit {
    display: grid;
    grid-template-columns: 108px minmax(0, 1fr);
    gap: 14px;
    padding: 12px 0;
  }

  .fin-audit+.fin-audit {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .fin-audit {
      grid-template-columns: minmax(0, 1fr);
      gap: 4px;
    }
  }

  .fin-audit-when {
    font-size: 12px;
    font-variant-numeric: tabular-nums;
    color: var(--bs-secondary-color);
  }

  .fin-audit-when strong {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fin-audit-what {
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .fin-audit-what span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ---- empty state ------------------------------------------------------- */
  .fin-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 6px;
    padding: 40px 24px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--fin-border-strong);
  }

  .fin-empty i {
    font-size: 32px;
    color: var(--bs-secondary-color);
    opacity: 0.8;
  }

  .fin-empty h6 {
    margin: 8px 0 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .fin-empty p {
    margin: 0;
    max-width: 46ch;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .fin-empty .btn {
    margin-top: 10px;
  }

  /*===== email settings =====*/
  /*-----------------
    Email Settings — mail delivery configuration components

    Reusable pieces for the Email Settings & Mail Delivery Configuration
    Center. Class prefix `eml-`.

    The visual language is a mail operations console rather than a settings
    page: values are presented the way a message header presents them, a dark
    transcript panel shows the live SMTP handshake, provider health is read
    off signal bars, DNS authentication is shown as records with a pass seal,
    and templates are previewed as miniature letters.

    It borrows nothing from `_financial-settings.scss` or `_settings.scss`
    and overrides nothing in them.

    Contents
      1.  Tokens + shared pieces
      2.  Workspace hero + connection console
      3.  Sticky section navigation
      4.  Configuration panels + header rows
      5.  Mail provider rows
      6.  Sender identity cards
      7.  Template cards
      8.  Rules, queue and log rows
      9.  Authentication records
      10. Premium accordion
      11. Mail activity timeline
      12. Offcanvas, panel helpers and empty state
-----------------*/
  /* ============================================================
   1. TOKENS + SHARED PIECES
   ============================================================ */
  :root {
    --eml-border: var(--bs-border-color, #E9EDF4);
    --eml-border-strong: #EDF1F6;
    --eml-ok: #1ABE17;
    --eml-ok-soft: #E8F9E8;
    --eml-bad: #E82646;
    --eml-bad-soft: #FDE9ED;
    --eml-ink: #101828;
    --eml-ink-line: rgba(255, 255, 255, .09);
    --eml-ink-text: rgba(255, 255, 255, .68);
  }

  @media (prefers-reduced-motion: reduce) {

    [class*=eml-],
    [class*=eml-]::before,
    [class*=eml-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* Carries a numeric value into CSS without an inline style. */
  .eml-p-0 {
    --p: 0;
  }

  .eml-p-1 {
    --p: 1;
  }

  .eml-p-2 {
    --p: 2;
  }

  .eml-p-3 {
    --p: 3;
  }

  .eml-p-4 {
    --p: 4;
  }

  .eml-p-5 {
    --p: 5;
  }

  .eml-p-6 {
    --p: 6;
  }

  .eml-p-7 {
    --p: 7;
  }

  .eml-p-8 {
    --p: 8;
  }

  .eml-p-9 {
    --p: 9;
  }

  .eml-p-10 {
    --p: 10;
  }

  .eml-p-11 {
    --p: 11;
  }

  .eml-p-12 {
    --p: 12;
  }

  .eml-p-13 {
    --p: 13;
  }

  .eml-p-14 {
    --p: 14;
  }

  .eml-p-15 {
    --p: 15;
  }

  .eml-p-16 {
    --p: 16;
  }

  .eml-p-17 {
    --p: 17;
  }

  .eml-p-18 {
    --p: 18;
  }

  .eml-p-19 {
    --p: 19;
  }

  .eml-p-20 {
    --p: 20;
  }

  .eml-p-21 {
    --p: 21;
  }

  .eml-p-22 {
    --p: 22;
  }

  .eml-p-23 {
    --p: 23;
  }

  .eml-p-24 {
    --p: 24;
  }

  .eml-p-25 {
    --p: 25;
  }

  .eml-p-26 {
    --p: 26;
  }

  .eml-p-27 {
    --p: 27;
  }

  .eml-p-28 {
    --p: 28;
  }

  .eml-p-29 {
    --p: 29;
  }

  .eml-p-30 {
    --p: 30;
  }

  .eml-p-31 {
    --p: 31;
  }

  .eml-p-32 {
    --p: 32;
  }

  .eml-p-33 {
    --p: 33;
  }

  .eml-p-34 {
    --p: 34;
  }

  .eml-p-35 {
    --p: 35;
  }

  .eml-p-36 {
    --p: 36;
  }

  .eml-p-37 {
    --p: 37;
  }

  .eml-p-38 {
    --p: 38;
  }

  .eml-p-39 {
    --p: 39;
  }

  .eml-p-40 {
    --p: 40;
  }

  .eml-p-41 {
    --p: 41;
  }

  .eml-p-42 {
    --p: 42;
  }

  .eml-p-43 {
    --p: 43;
  }

  .eml-p-44 {
    --p: 44;
  }

  .eml-p-45 {
    --p: 45;
  }

  .eml-p-46 {
    --p: 46;
  }

  .eml-p-47 {
    --p: 47;
  }

  .eml-p-48 {
    --p: 48;
  }

  .eml-p-49 {
    --p: 49;
  }

  .eml-p-50 {
    --p: 50;
  }

  .eml-p-51 {
    --p: 51;
  }

  .eml-p-52 {
    --p: 52;
  }

  .eml-p-53 {
    --p: 53;
  }

  .eml-p-54 {
    --p: 54;
  }

  .eml-p-55 {
    --p: 55;
  }

  .eml-p-56 {
    --p: 56;
  }

  .eml-p-57 {
    --p: 57;
  }

  .eml-p-58 {
    --p: 58;
  }

  .eml-p-59 {
    --p: 59;
  }

  .eml-p-60 {
    --p: 60;
  }

  .eml-p-61 {
    --p: 61;
  }

  .eml-p-62 {
    --p: 62;
  }

  .eml-p-63 {
    --p: 63;
  }

  .eml-p-64 {
    --p: 64;
  }

  .eml-p-65 {
    --p: 65;
  }

  .eml-p-66 {
    --p: 66;
  }

  .eml-p-67 {
    --p: 67;
  }

  .eml-p-68 {
    --p: 68;
  }

  .eml-p-69 {
    --p: 69;
  }

  .eml-p-70 {
    --p: 70;
  }

  .eml-p-71 {
    --p: 71;
  }

  .eml-p-72 {
    --p: 72;
  }

  .eml-p-73 {
    --p: 73;
  }

  .eml-p-74 {
    --p: 74;
  }

  .eml-p-75 {
    --p: 75;
  }

  .eml-p-76 {
    --p: 76;
  }

  .eml-p-77 {
    --p: 77;
  }

  .eml-p-78 {
    --p: 78;
  }

  .eml-p-79 {
    --p: 79;
  }

  .eml-p-80 {
    --p: 80;
  }

  .eml-p-81 {
    --p: 81;
  }

  .eml-p-82 {
    --p: 82;
  }

  .eml-p-83 {
    --p: 83;
  }

  .eml-p-84 {
    --p: 84;
  }

  .eml-p-85 {
    --p: 85;
  }

  .eml-p-86 {
    --p: 86;
  }

  .eml-p-87 {
    --p: 87;
  }

  .eml-p-88 {
    --p: 88;
  }

  .eml-p-89 {
    --p: 89;
  }

  .eml-p-90 {
    --p: 90;
  }

  .eml-p-91 {
    --p: 91;
  }

  .eml-p-92 {
    --p: 92;
  }

  .eml-p-93 {
    --p: 93;
  }

  .eml-p-94 {
    --p: 94;
  }

  .eml-p-95 {
    --p: 95;
  }

  .eml-p-96 {
    --p: 96;
  }

  .eml-p-97 {
    --p: 97;
  }

  .eml-p-98 {
    --p: 98;
  }

  .eml-p-99 {
    --p: 99;
  }

  .eml-p-100 {
    --p: 100;
  }

  /* Anything that should read as machine output rather than prose. */
  .eml-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
    letter-spacing: -0.01em;
  }

  .eml-lbl {
    display: block;
    margin: 0 0 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* ---- status badges ----------------------------------------------------- */
  .eml-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 10px;
    border-radius: 6px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    white-space: nowrap;
    color: var(--bs-secondary-color);
  }

  .eml-badge.is-ok {
    background: var(--eml-ok-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .eml-badge.is-warn {
    background: var(--tint-warning);
    border-color: rgba(234, 179, 0, 0.34);
    color: rgb(152.4, 116.5794871795, 0);
  }

  .eml-badge.is-bad {
    background: var(--eml-bad-soft);
    border-color: rgba(232, 38, 70, 0.26);
    color: var(--eml-bad);
  }

  .eml-badge.is-info {
    background: var(--tint-primary);
    border-color: rgba(15, 101, 205, 0.24);
    color: var(--bs-primary);
  }

  /* a small pulsing light, used where something is live */
  .eml-live {
    position: relative;
    display: inline-block;
    width: 8px;
    height: 8px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--bs-success);
    margin-left: auto;
    flex: unset !important;
  }

  .eml-live::after {
    content: "";
    position: absolute;
    inset: -4px;
    border-radius: 50%;
    border: 1px solid var(--bs-success);
    opacity: 0.45;
    animation: eml-ping 2.4s ease-out infinite;
  }

  .eml-live.is-warn {
    background: var(--bs-warning);
  }

  .eml-live.is-warn::after {
    border-color: var(--bs-warning);
  }

  .eml-live.is-bad {
    background: var(--eml-bad);
  }

  .eml-live.is-bad::after {
    border-color: var(--eml-bad);
    animation: none;
  }

  .eml-live.is-off {
    background: var(--eml-border-strong);
  }

  .eml-live.is-off::after {
    display: none;
  }

  @keyframes eml-ping {
    0% {
      transform: scale(0.7);
      opacity: 0.6;
    }

    70%,
    100% {
      transform: scale(1.5);
      opacity: 0;
    }
  }

  /* ---- signal bars ------------------------------------------------------
   Connection health read at a glance. `--p` is 0-100; each bar lights when
   the value clears its own threshold. */
  .eml-sig {
    display: inline-flex;
    align-items: flex-end;
    gap: 3px;
    height: 16px;
  }

  .eml-sig i {
    display: block;
    width: 4px;
    border-radius: 2px;
    background: var(--bs-tertiary-bg);
    transition: var(--transition);
  }

  .eml-sig i:nth-child(1) {
    height: 6px;
  }

  .eml-sig i:nth-child(2) {
    height: 9px;
  }

  .eml-sig i:nth-child(3) {
    height: 12px;
  }

  .eml-sig i:nth-child(4) {
    height: 16px;
  }

  /* Bars light up to the level given by `is-1` … `is-4`. Unlit bars keep
     the track colour, so a weak connection reads as mostly empty rather
     than as a different shape. */

  .eml-sig.is-4 i {
    background: var(--bs-success);
  }

  .eml-sig.is-3 i:nth-child(-n+3) {
    background: var(--bs-success);
  }

  .eml-sig.is-2 i:nth-child(-n+2) {
    background: var(--bs-warning);
  }

  .eml-sig.is-1 i:nth-child(1) {
    background: var(--eml-bad);
  }

  /* ============================================================
   2. WORKSPACE HERO + CONNECTION CONSOLE
   The hero pairs the identity of the configuration with a live
   transcript of the last handshake, the way a mail console does.
   ============================================================ */
  .eml-hero {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 420px;
    gap: 0;
    margin-bottom: 26px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow: hidden;
  }

  @media (max-width: 1399.98px) {
    .eml-hero {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  .eml-hero-id {
    padding: 26px 28px;
  }

  @media (max-width: 575.98px) {
    .eml-hero-id {
      padding: 20px;
    }
  }

  .eml-hero-top {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
    margin-bottom: 8px;
  }

  .eml-hero-crest {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 50px;
    height: 50px;
    flex-shrink: 0;
    border-radius: 15px;
    background: var(--bs-primary);
    color: #fff;
    font-size: 24px;
    box-shadow: 0 8px 18px rgba(15, 101, 205, 0.26);
  }

  .eml-hero-title {
    margin: 0;
    font-size: 26px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .eml-hero-title {
      font-size: 21px;
    }
  }

  .eml-hero-sub {
    margin: 4px 0 0;
    max-width: 64ch;
    font-size: 13.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  /* the hero's facts are chips, not a fact strip */
  .eml-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 18px;
  }

  .eml-chip {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 7px 12px;
    border-radius: 9px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 12.5px;
    color: var(--bs-emphasis-color);
  }

  .eml-chip i {
    font-size: 15px;
    color: var(--bs-secondary-color);
  }

  .eml-chip b {
    font-weight: 600;
  }

  .eml-chip span {
    color: var(--bs-secondary-color);
  }

  .eml-hero-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 22px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ---- the dark transcript panel ---------------------------------------- */
  .eml-console {
    display: flex;
    flex-direction: column;
    padding: 20px 22px;
    background: var(--eml-ink);
    color: var(--eml-ink-text);
    border-left: 1px solid var(--bs-border-color);
  }

  @media (max-width: 1399.98px) {
    .eml-console {
      border-left: 0;
      border-top: 1px solid var(--bs-border-color);
    }
  }

  .eml-console-head {
    display: flex;
    align-items: center;
    gap: 10px;
    padding-bottom: 12px;
    margin-bottom: 12px;
    border-bottom: 1px solid var(--eml-ink-line);
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.5);
  }

  .eml-console-head strong {
    color: #fff;
    font-weight: 600;
  }

  .eml-console-body {
    flex: 1 1 auto;
    font-family: var(--font-mono);
    font-size: 11.5px;
    line-height: 1.9;
    overflow-x: auto;
    scrollbar-width: thin;
  }

  .eml-console-line {
    display: flex;
    gap: 10px;
    white-space: nowrap;
    /* the direction of each line of the conversation */
  }

  .eml-console-line .eml-console-dir {
    flex-shrink: 0;
    width: 22px;
    color: rgba(255, 255, 255, 0.35);
  }

  .eml-console-line.is-in .eml-console-dir {
    color: #6EE7B7;
  }

  .eml-console-line.is-out .eml-console-dir {
    color: #7DA9F5;
  }

  .eml-console-line.is-ok {
    color: #6EE7B7;
  }

  .eml-console-line.is-warn {
    color: #FCD34D;
  }

  .eml-console-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    margin-top: 14px;
    padding-top: 12px;
    border-top: 1px solid var(--eml-ink-line);
    font-size: 11.5px;
    color: rgba(255, 255, 255, 0.55);
  }

  .eml-console-foot .eml-console-stat {
    display: inline-flex;
    align-items: center;
    gap: 6px;
  }

  .eml-console-foot .eml-console-stat b {
    font-family: var(--font-mono);
    color: #fff;
    font-weight: 600;
  }

  /* ============================================================
   3. STICKY SECTION NAVIGATION
   A boxed rail: each section numbered, with its own state light.
   ============================================================ */
  .eml-nav {
    position: sticky;
    top: calc(60px + 16px);
    max-height: calc(100vh - 60px - 32px);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow-y: auto;
    /* Bootstrap's `.nav` wraps by default; in a capped-height column that
     wraps overflow into a second column instead of scrolling. */
    flex-wrap: nowrap;
    overflow-x: hidden;
  }

  .eml-nav>* {
    flex-shrink: 0;
  }

  @media (max-width: 991.98px) {
    .eml-nav {
      position: static;
      max-height: none;
    }
  }

  .eml-nav-head {
    position: sticky;
    top: 0;
    z-index: 2;
    padding: 14px;
    background: var(--bs-body-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .eml-nav-search {
    position: relative;
  }

  .eml-nav-search i {
    position: absolute;
    left: 11px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 16px;
    color: var(--bs-secondary-color);
  }

  .eml-nav-search input {
    width: 100%;
    padding: 8px 12px 8px 34px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .eml-nav-search input:focus {
    background: var(--bs-body-bg);
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
    outline: 0;
  }

  .eml-nav-list {
    padding: 8px;
  }

  .eml-nav-link {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 9px 11px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    font-size: 13.5px;
    font-weight: 500;
    text-align: left;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
    /* the section number, in the machine face */
  }

  .eml-nav-link .eml-nav-n {
    flex-shrink: 0;
    width: 22px;
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  .eml-nav-link span:not(.eml-nav-n) {
    flex: 1 1 auto;
    min-width: 0;
  }

  .eml-nav-link:hover {
    background: var(--bs-secondary-bg);
  }

  /* the active section fills, rather than carrying an edge mark */

  .eml-nav-link.active {
    background: var(--bs-primary);
    color: #fff;
    font-weight: 600;
    box-shadow: 0 4px 12px rgba(15, 101, 205, 0.24);
  }

  .eml-nav-link.active .eml-nav-n {
    color: rgba(255, 255, 255, 0.72);
  }

  .eml-nav-link.active .eml-live {
    background: #fff;
  }

  .eml-nav-link.active .eml-live::after {
    border-color: #fff;
  }

  .eml-nav-foot {
    padding: 14px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   4. CONFIGURATION PANELS + HEADER ROWS
   ============================================================ */
  .eml-panel {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .eml-panel:hover {
    border-color: var(--eml-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* a tinted band across the top, the way a message header is banded */
  .eml-panel-band {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 13px 17px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .eml-panel-band.is-ok {
    background: var(--eml-ok-soft);
  }

  .eml-panel-band.is-warn {
    background: var(--tint-warning);
  }

  .eml-panel-band.is-bad {
    background: var(--eml-bad-soft);
  }

  .eml-panel-band.is-info {
    background: var(--tint-primary);
  }

  .eml-panel-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: 10px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 17px;
  }

  .eml-panel-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-panel-title+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .eml-panel-body {
    flex: 1 1 auto;
    padding: 8px 17px 14px;
  }

  .eml-panel-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    padding: 11px 17px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ---- header row -------------------------------------------------------
   A setting presented as a message header: the field name in the machine
   face, the value beside it, and the control that changes it. */
  .eml-hdr {
    display: grid;
    grid-template-columns: 148px minmax(0, 1fr) auto;
    align-items: center;
    gap: 8px 14px;
    padding: 10px 0;
  }

  .eml-hdr+.eml-hdr {
    border-top: 1px dashed var(--bs-border-color);
  }

  .eml-hdr dt,
  .eml-hdr .eml-hdr-key {
    margin: 0;
    font-family: var(--font-mono);
    font-size: 11.5px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .eml-hdr dd,
  .eml-hdr .eml-hdr-val {
    margin: 0;
    min-width: 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
    word-break: break-word;
  }

  .eml-hdr dd small,
  .eml-hdr .eml-hdr-val small {
    display: block;
    font-size: 11.5px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .eml-hdr .eml-hdr-ctl {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
  }

  @media (max-width: 767.98px) {
    .eml-hdr {
      grid-template-columns: minmax(0, 1fr) auto;
    }

    .eml-hdr dt,
    .eml-hdr .eml-hdr-key {
      grid-column: 1/-1;
    }
  }

  /* ---- compact controls -------------------------------------------------- */
  .eml-input,
  .eml-select {
    min-width: 140px;
    padding: 6px 11px;
    border-radius: var(--radius-sm);
    background-color: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .eml-input:focus,
  .eml-select:focus {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
    outline: 0;
  }

  @media (max-width: 575.98px) {

    .eml-input,
    .eml-select {
      min-width: 0;
      width: 100%;
    }
  }

  .eml-input.is-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
  }

  /* a secret, shown as its shape only */
  .eml-secret {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 5px 11px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--eml-border-strong);
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--bs-emphasis-color);
  }

  .eml-secret i {
    font-size: 14px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   5. MAIL PROVIDER ROWS
   Providers are wide rows, so health and authentication line up
   down the column and can be compared at a glance.
   ============================================================ */
  .eml-prov {
    display: grid;
    /* six children (icon, name, three cells, actions) need six columns.
     The template only ever defined five, so the actions block - the
     last child - had nowhere to go in row 1 and silently wrapped to an
     implicit row 2 under the icon column, where it was clipped to 46px.
     That happened at every desktop width, not just narrow ones. */
    grid-template-columns: 46px minmax(140px, 1.6fr) minmax(0, 0.8fr) minmax(0, 0.8fr) minmax(0, 0.8fr) minmax(260px, auto);
    align-items: center;
    gap: 18px;
    padding: 15px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .eml-prov+.eml-prov {
    margin-top: 10px;
  }

  .eml-prov:hover {
    border-color: var(--eml-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* the default provider is marked across the top edge */

  .eml-prov.is-default {
    border-color: rgba(15, 101, 205, 0.3);
    box-shadow: inset 0 3px 0 var(--bs-primary);
  }

  .eml-prov.is-off {
    background: var(--bs-secondary-bg);
  }

  .eml-prov.is-off .eml-prov-mark,
  .eml-prov.is-off .eml-prov-name {
    opacity: 0.68;
  }

  /* Below the point where five columns can breathe, stop trying to
     squeeze the action buttons into the header row next to the name —
     that's what forced "Amazon SES" and its hostname to wrap into a
     ragged column fighting the buttons for space. Everything below the
     icon/name header stacks full-width instead, with the actions row
     set off by its own divider so it reads as a distinct footer rather
     than bleeding into the card below it. */

  @media (max-width: 1199.98px) {
    .eml-prov {
      grid-template-columns: 46px minmax(0, 1fr);
      row-gap: 14px;
    }

    .eml-prov .eml-prov-cell {
      grid-column: 2/3;
    }

    .eml-prov .eml-prov-act {
      grid-row: auto;
      grid-column: 1/-1;
      justify-content: flex-start;
      flex-wrap: wrap;
      margin-top: 4px;
      padding-top: 14px;
      border-top: 1px solid var(--bs-border-color);
    }
  }

  .eml-prov-mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 46px;
    height: 46px;
    border-radius: 13px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 22px;
    color: var(--bs-emphasis-color);
  }

  .eml-prov-name {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-prov-name+p {
    margin: 2px 0 0;
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  /* one measured column of the row */
  .eml-prov-cell {
    min-width: 0;
  }

  .eml-prov-cell span {
    display: block;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .eml-prov-cell strong {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 3px;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-prov-act {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: flex-end;
  }

  /* ============================================================
   6. SENDER IDENTITY CARDS
   ============================================================ */
  .eml-ident {
    display: flex;
    flex-direction: column;
    gap: 14px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .eml-ident:hover {
    box-shadow: var(--shadow-lift);
  }

  /* an unverified identity is outlined rather than filled */

  .eml-ident.is-unverified {
    border-style: dashed;
    border-color: var(--bs-warning);
  }

  .eml-ident-top {
    display: flex;
    align-items: center;
    gap: 12px;
  }

  /* the avatar carries the sender's initials, as a mail client would show it */
  .eml-ident-av {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    flex-shrink: 0;
    border-radius: 14px;
    background: var(--tint-primary);
    font-size: 15px;
    font-weight: 700;
    letter-spacing: 0.02em;
    color: var(--bs-primary);
  }

  .eml-ident-name {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-ident-name+p {
    margin: 1px 0 0;
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--bs-secondary-color);
    word-break: break-all;
  }

  /* the signature, shown as it would appear beneath a message */
  .eml-ident-sig {
    padding: 12px 14px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border-left: 3px solid var(--eml-border-strong);
    font-size: 12px;
    line-height: 1.7;
    color: var(--bs-secondary-color);
  }

  .eml-ident-sig strong {
    display: block;
    font-size: 12.5px;
    color: var(--bs-emphasis-color);
  }

  .eml-ident-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   7. TEMPLATE CARDS
   Each template is previewed as a miniature letter, so the shape
   of the message is recognisable before it is opened.
   ============================================================ */
  .eml-tpl {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .eml-tpl:hover {
    border-color: var(--eml-border-strong);
    box-shadow: var(--shadow-lift);
  }

  .eml-tpl:hover .eml-tpl-act {
    opacity: 1;
  }

  .eml-tpl.is-draft .eml-tpl-paper {
    opacity: 0.6;
  }

  /* the miniature letter */
  .eml-tpl-paper {
    position: relative;
    padding: 14px 16px 16px;
    background: var(--bs-secondary-bg);
    border-bottom: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .eml-tpl-sub {
    display: block;
    margin-bottom: 10px;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  /* the body of the letter, suggested rather than written out */
  .eml-tpl-lines {
    display: flex;
    flex-direction: column;
    gap: 6px;
  }

  .eml-tpl-lines i {
    display: block;
    height: 5px;
    border-radius: 3px;
    background: var(--eml-border-strong);
    opacity: 0.75;
  }

  .eml-tpl-lines i:nth-child(1) {
    width: 100%;
  }

  .eml-tpl-lines i:nth-child(2) {
    width: 92%;
  }

  .eml-tpl-lines i:nth-child(3) {
    width: 78%;
  }

  .eml-tpl-lines i:nth-child(4) {
    width: 44%;
    background: var(--bs-primary);
    opacity: 1;
    height: 12px;
    border-radius: 4px;
    margin-top: 4px;
  }

  /* actions ride over the paper, appearing on hover and always on touch */
  .eml-tpl-act {
    position: absolute;
    right: 10px;
    top: 10px;
    display: flex;
    gap: 6px;
    opacity: 0;
    transition: var(--transition);
  }

  @media (hover: none) {
    .eml-tpl-act {
      opacity: 1;
    }
  }

  .eml-tpl-meta {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 16px;
  }

  .eml-tpl-name {
    margin: 0;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-tpl-name+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .eml-tpl-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-top: auto;
    padding: 10px 16px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   8. RULES, QUEUE AND LOG ROWS
   ============================================================ */
  /* a notification rule: trigger, audience, channel */
  .eml-rule {
    display: grid;
    grid-template-columns: 38px minmax(0, 1fr) auto;
    align-items: center;
    gap: 14px;
    padding: 13px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .eml-rule+.eml-rule {
    margin-top: 8px;
  }

  .eml-rule:hover {
    border-color: var(--eml-border-strong);
  }

  .eml-rule.is-off {
    background: var(--bs-secondary-bg);
  }

  .eml-rule.is-off .eml-rule-body {
    opacity: 0.66;
  }

  @media (max-width: 767.98px) {
    .eml-rule {
      grid-template-columns: 38px minmax(0, 1fr);
      row-gap: 10px;
    }

    .eml-rule .eml-rule-ctl {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  .eml-rule-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 11px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .eml-rule-body {
    min-width: 0;
  }

  .eml-rule-body strong {
    display: block;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-rule-body p {
    margin: 2px 0 0;
    font-size: 12px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .eml-rule-ctl {
    display: flex;
    align-items: center;
    gap: 10px;
    justify-content: flex-end;
  }

  /* an audience or channel tag */
  /* ---- queue rows -------------------------------------------------------
   A rib along the leading edge carries the priority, so the queue can be
   scanned without reading it. */
  .eml-q {
    display: grid;
    grid-template-columns: 4px minmax(0, 1fr) auto;
    align-items: center;
    gap: 0 14px;
    padding: 0;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .eml-q+.eml-q {
    margin-top: 8px;
  }

  .eml-q::before {
    content: "";
    align-self: stretch;
    background: var(--eml-border-strong);
  }

  .eml-q.is-high::before {
    background: var(--eml-bad);
  }

  .eml-q.is-normal::before {
    background: var(--bs-primary);
  }

  .eml-q.is-low::before {
    background: var(--bs-warning);
  }

  .eml-q-body {
    min-width: 0;
    padding: 11px 0;
  }

  .eml-q-body strong {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-q-body span {
    display: block;
    margin-top: 2px;
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
    word-break: break-all;
  }

  .eml-q-side {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 11px 14px 11px 0;
    text-align: right;
  }

  @media (max-width: 575.98px) {
    .eml-q-side {
      flex-direction: column;
      align-items: flex-end;
      gap: 4px;
    }
  }

  /* ---- log rows ---------------------------------------------------------- */
  .eml-log {
    display: grid;
    grid-template-columns: 152px 74px minmax(0, 1fr);
    gap: 14px;
    padding: 9px 0;
    font-family: var(--font-mono);
    font-size: 12px;
    line-height: 1.7;
  }

  .eml-log+.eml-log {
    border-top: 1px solid var(--bs-border-color);
  }

  .eml-log .eml-log-t {
    color: var(--bs-secondary-color);
    white-space: nowrap;
  }

  .eml-log .eml-log-msg {
    min-width: 0;
    color: var(--bs-emphasis-color);
    word-break: break-word;
  }

  .eml-log.is-bad .eml-log-msg {
    color: var(--eml-bad);
  }

  .eml-log.is-warn .eml-log-msg {
    color: rgb(142.2, 108.7769230769, 0);
  }

  @media (max-width: 767.98px) {
    .eml-log {
      grid-template-columns: minmax(0, 1fr);
      gap: 2px;
    }
  }

  /* ============================================================
   9. AUTHENTICATION RECORDS
   DNS-based authentication shown as the record itself, with the
   result stamped beside it.
   ============================================================ */
  .eml-dns {
    padding: 15px 17px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .eml-dns+.eml-dns {
    margin-top: 10px;
  }

  .eml-dns-top {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 10px;
  }

  .eml-dns-top h6 {
    margin: 0;
    font-size: 13.5px;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: var(--bs-emphasis-color);
  }

  .eml-dns-top p {
    margin: 0;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* the record value, wrapped and selectable */
  .eml-dns-rec {
    padding: 10px 12px;
    border-radius: var(--radius-sm);
    background: var(--bs-emphasis-color);
    font-family: var(--font-mono);
    font-size: 11.5px;
    line-height: 1.7;
    color: rgba(255, 255, 255, 0.8);
    word-break: break-all;
    overflow-x: auto;
  }

  /* a pass mark, stamped rather than written */
  .eml-seal {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 4px 11px;
    border: 1px solid currentColor;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .eml-seal i {
    font-size: 14px;
  }

  .eml-seal.is-warn {
    color: rgb(142.2, 108.7769230769, 0);
  }

  .eml-seal.is-bad {
    color: var(--eml-bad);
  }

  /* ============================================================
   10. PREMIUM ACCORDION
   ============================================================ */
  .eml-acc {
    border-radius: var(--radius);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .eml-acc .accordion-item {
    border: 0;
    background: var(--bs-body-bg);
  }

  .eml-acc .accordion-item+.accordion-item {
    border-top: 1px solid var(--bs-border-color);
  }

  .eml-acc .accordion-button {
    gap: 11px;
    padding: 15px 17px;
    background: var(--bs-body-bg);
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    box-shadow: none;
  }

  .eml-acc .accordion-button::after {
    margin-left: 0;
  }

  .eml-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .eml-acc .accordion-button:focus {
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .eml-acc .accordion-button i {
    font-size: 17px;
  }

  .eml-acc .eml-acc-spacer {
    margin-left: auto;
  }

  .eml-acc .accordion-body {
    padding: 4px 17px 17px;
  }

  /* ============================================================
   11. MAIL ACTIVITY TIMELINE
   Vertical, with the time in its own gutter.
   ============================================================ */
  .eml-tl {
    padding: 20px 22px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .eml-tl-step {
    position: relative;
    display: grid;
    grid-template-columns: 116px 30px minmax(0, 1fr);
    gap: 0 14px;
    padding-bottom: 20px;
    /* the rail runs down the marker column */
  }

  .eml-tl-step::before {
    content: "";
    position: absolute;
    left: 144px;
    top: 20px;
    bottom: 0;
    width: 2px;
    background: var(--bs-tertiary-bg);
  }

  .eml-tl-step:last-child {
    padding-bottom: 0;
  }

  .eml-tl-step:last-child::before {
    display: none;
  }

  .eml-tl-step.is-done::before {
    background: var(--bs-success);
  }

  @media (max-width: 767.98px) {
    .eml-tl-step {
      grid-template-columns: 30px minmax(0, 1fr);
    }

    .eml-tl-step::before {
      left: 14px;
    }

    .eml-tl-step .eml-tl-when {
      grid-column: 2;
      order: -1;
      margin-bottom: 2px;
      text-align: left;
    }
  }

  .eml-tl-when {
    font-family: var(--font-mono);
    font-size: 11.5px;
    line-height: 1.6;
    text-align: right;
    color: var(--bs-secondary-color);
  }

  .eml-tl-when strong {
    display: block;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-tl-dot {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-tertiary-bg);
    font-size: 15px;
    color: var(--bs-secondary-color);
  }

  .is-done .eml-tl-dot {
    background: var(--bs-success);
    border-color: var(--bs-success);
    color: #fff;
  }

  .is-current .eml-tl-dot {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  .eml-tl-body {
    min-width: 0;
    padding-top: 3px;
  }

  .eml-tl-body h6 {
    margin: 0;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-tl-body p {
    margin: 3px 0 0;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   12. OFFCANVAS, PANEL HELPERS, EMPTY STATE
   ============================================================ */
  /* The theme sets `.offcanvas.offcanvas-end { width: auto !important }`; the
   workspace has to match on three classes to beat it. */
  .offcanvas.offcanvas-end.eml-canvas {
    width: 88% !important;
    max-width: 1160px !important;
  }

  .eml-canvas-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 18px 24px;
    background: var(--bs-emphasis-color);
    color: #fff;
  }

  .eml-canvas-head .eml-panel-ic {
    background: rgba(255, 255, 255, 0.1);
    border-color: var(--eml-ink-line);
    color: #fff;
  }

  .eml-canvas-head .offcanvas-title {
    color: #fff;
  }

  .eml-canvas-head p {
    color: rgba(255, 255, 255, 0.55);
  }

  .eml-canvas-head .btn-close {
    filter: invert(1) grayscale(1);
    opacity: 0.7;
  }

  .eml-canvas-body {
    padding: 22px 24px 30px;
  }

  .eml-sect+.eml-sect {
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .eml-sect-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 13px;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .eml-sect-title i {
    font-size: 16px;
    color: var(--bs-primary);
  }

  /* a validation result */
  .eml-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .eml-check+.eml-check {
    border-top: 1px solid var(--bs-border-color);
  }

  .eml-check>i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 16px;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .eml-check.is-warn>i {
    color: rgb(142.2, 108.7769230769, 0);
  }

  .eml-check.is-bad>i {
    color: var(--eml-bad);
  }

  .eml-check span {
    display: block;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* audit entries */
  .eml-audit {
    display: grid;
    grid-template-columns: 148px minmax(0, 1fr);
    gap: 14px;
    padding: 11px 0;
  }

  .eml-audit+.eml-audit {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .eml-audit {
      grid-template-columns: minmax(0, 1fr);
      gap: 3px;
    }
  }

  .eml-audit-when {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .eml-audit-when strong {
    display: block;
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-audit-what {
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .eml-audit-what span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ---- empty state ------------------------------------------------------- */
  .eml-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 5px;
    padding: 38px 24px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--eml-border-strong);
  }

  .eml-empty i {
    font-size: 30px;
    color: var(--bs-secondary-color);
    opacity: 0.8;
  }

  .eml-empty h6 {
    margin: 8px 0 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .eml-empty p {
    margin: 0;
    max-width: 48ch;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .eml-empty .btn {
    margin-top: 10px;
  }

  /*===== sms settings =====*/
  /*-----------------
    SMS Settings — gateway and messaging configuration components

    Reusable pieces for the SMS Gateway & Messaging Configuration Center.
    Class prefix `sms-`.

    The visual language is a messaging console. Where the email centre speaks
    in message headers and SMTP transcripts, this one speaks in the things
    that are particular to SMS: a handset showing the message as it will
    actually arrive, a segment counter because 160 characters is a hard
    boundary that costs money, sender IDs shown as registered plates, a
    delivery ladder from submission to handset, and per-message pricing.

    It borrows nothing from `_email-settings.scss`, `_financial-settings.scss`
    or `_settings.scss` and overrides nothing in them.

    Contents
      1.  Tokens + shared pieces
      2.  Workspace hero + delivery ladder
      3.  Sticky section navigation
      4.  Configuration cards + setting lines
      5.  Handset preview + segment meter
      6.  Gateway provider tiles
      7.  Sender ID plates
      8.  Template cards
      9.  Rules, queue and log rows
      10. Premium accordion
      11. Messaging timeline
      12. Offcanvas, panel helpers and empty state
-----------------*/
  /* ============================================================
   1. TOKENS + SHARED PIECES
   ============================================================ */
  :root {
    --sms-border: var(--bs-border-color, #E9EDF4);
    --sms-border-strong: #EDF1F6;
    /* the theme has no purple tint, so one is mixed to match the density of
     the `-transparent` colours it does define */
    --sms-ok: #1ABE17;
    --sms-ok-soft: var(--tint-success);
    --sms-bad: #E82646;
    --sms-bad-soft: var(--tint-danger);
  }

  @media (prefers-reduced-motion: reduce) {

    [class*=sms-],
    [class*=sms-]::before,
    [class*=sms-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* Carries a numeric value into CSS without an inline style. */
  .sms-p-0 {
    --p: 0;
  }

  .sms-p-1 {
    --p: 1;
  }

  .sms-p-2 {
    --p: 2;
  }

  .sms-p-3 {
    --p: 3;
  }

  .sms-p-4 {
    --p: 4;
  }

  .sms-p-5 {
    --p: 5;
  }

  .sms-p-6 {
    --p: 6;
  }

  .sms-p-7 {
    --p: 7;
  }

  .sms-p-8 {
    --p: 8;
  }

  .sms-p-9 {
    --p: 9;
  }

  .sms-p-10 {
    --p: 10;
  }

  .sms-p-11 {
    --p: 11;
  }

  .sms-p-12 {
    --p: 12;
  }

  .sms-p-13 {
    --p: 13;
  }

  .sms-p-14 {
    --p: 14;
  }

  .sms-p-15 {
    --p: 15;
  }

  .sms-p-16 {
    --p: 16;
  }

  .sms-p-17 {
    --p: 17;
  }

  .sms-p-18 {
    --p: 18;
  }

  .sms-p-19 {
    --p: 19;
  }

  .sms-p-20 {
    --p: 20;
  }

  .sms-p-21 {
    --p: 21;
  }

  .sms-p-22 {
    --p: 22;
  }

  .sms-p-23 {
    --p: 23;
  }

  .sms-p-24 {
    --p: 24;
  }

  .sms-p-25 {
    --p: 25;
  }

  .sms-p-26 {
    --p: 26;
  }

  .sms-p-27 {
    --p: 27;
  }

  .sms-p-28 {
    --p: 28;
  }

  .sms-p-29 {
    --p: 29;
  }

  .sms-p-30 {
    --p: 30;
  }

  .sms-p-31 {
    --p: 31;
  }

  .sms-p-32 {
    --p: 32;
  }

  .sms-p-33 {
    --p: 33;
  }

  .sms-p-34 {
    --p: 34;
  }

  .sms-p-35 {
    --p: 35;
  }

  .sms-p-36 {
    --p: 36;
  }

  .sms-p-37 {
    --p: 37;
  }

  .sms-p-38 {
    --p: 38;
  }

  .sms-p-39 {
    --p: 39;
  }

  .sms-p-40 {
    --p: 40;
  }

  .sms-p-41 {
    --p: 41;
  }

  .sms-p-42 {
    --p: 42;
  }

  .sms-p-43 {
    --p: 43;
  }

  .sms-p-44 {
    --p: 44;
  }

  .sms-p-45 {
    --p: 45;
  }

  .sms-p-46 {
    --p: 46;
  }

  .sms-p-47 {
    --p: 47;
  }

  .sms-p-48 {
    --p: 48;
  }

  .sms-p-49 {
    --p: 49;
  }

  .sms-p-50 {
    --p: 50;
  }

  .sms-p-51 {
    --p: 51;
  }

  .sms-p-52 {
    --p: 52;
  }

  .sms-p-53 {
    --p: 53;
  }

  .sms-p-54 {
    --p: 54;
  }

  .sms-p-55 {
    --p: 55;
  }

  .sms-p-56 {
    --p: 56;
  }

  .sms-p-57 {
    --p: 57;
  }

  .sms-p-58 {
    --p: 58;
  }

  .sms-p-59 {
    --p: 59;
  }

  .sms-p-60 {
    --p: 60;
  }

  .sms-p-61 {
    --p: 61;
  }

  .sms-p-62 {
    --p: 62;
  }

  .sms-p-63 {
    --p: 63;
  }

  .sms-p-64 {
    --p: 64;
  }

  .sms-p-65 {
    --p: 65;
  }

  .sms-p-66 {
    --p: 66;
  }

  .sms-p-67 {
    --p: 67;
  }

  .sms-p-68 {
    --p: 68;
  }

  .sms-p-69 {
    --p: 69;
  }

  .sms-p-70 {
    --p: 70;
  }

  .sms-p-71 {
    --p: 71;
  }

  .sms-p-72 {
    --p: 72;
  }

  .sms-p-73 {
    --p: 73;
  }

  .sms-p-74 {
    --p: 74;
  }

  .sms-p-75 {
    --p: 75;
  }

  .sms-p-76 {
    --p: 76;
  }

  .sms-p-77 {
    --p: 77;
  }

  .sms-p-78 {
    --p: 78;
  }

  .sms-p-79 {
    --p: 79;
  }

  .sms-p-80 {
    --p: 80;
  }

  .sms-p-81 {
    --p: 81;
  }

  .sms-p-82 {
    --p: 82;
  }

  .sms-p-83 {
    --p: 83;
  }

  .sms-p-84 {
    --p: 84;
  }

  .sms-p-85 {
    --p: 85;
  }

  .sms-p-86 {
    --p: 86;
  }

  .sms-p-87 {
    --p: 87;
  }

  .sms-p-88 {
    --p: 88;
  }

  .sms-p-89 {
    --p: 89;
  }

  .sms-p-90 {
    --p: 90;
  }

  .sms-p-91 {
    --p: 91;
  }

  .sms-p-92 {
    --p: 92;
  }

  .sms-p-93 {
    --p: 93;
  }

  .sms-p-94 {
    --p: 94;
  }

  .sms-p-95 {
    --p: 95;
  }

  .sms-p-96 {
    --p: 96;
  }

  .sms-p-97 {
    --p: 97;
  }

  .sms-p-98 {
    --p: 98;
  }

  .sms-p-99 {
    --p: 99;
  }

  .sms-p-100 {
    --p: 100;
  }

  .sms-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
    letter-spacing: -0.01em;
  }

  .sms-lbl {
    display: block;
    margin: 0 0 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* ---- status badges ----------------------------------------------------
   Squared off and monospaced, in the manner of a delivery receipt code. */
  .sms-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 9px;
    border-radius: 5px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    white-space: nowrap;
    color: var(--bs-secondary-color);
  }

  .sms-badge.is-ok {
    background: var(--sms-ok-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .sms-badge.is-warn {
    background: var(--tint-warning);
    border-color: rgba(234, 179, 0, 0.34);
    color: rgb(152.4, 116.5794871795, 0);
  }

  .sms-badge.is-bad {
    background: var(--sms-bad-soft);
    border-color: rgba(232, 38, 70, 0.26);
    color: var(--sms-bad);
  }

  .sms-badge.is-accent {
    background: var(--tint-primary);
    border-color: rgba(74, 0, 229, 0.22);
    color: var(--bs-primary);
  }

  /* a small tag for a route, country or channel */
  /* a price, in tabular figures so a column of them lines up */
  .sms-price {
    font-family: var(--font-mono);
    font-variant-numeric: tabular-nums;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   2. WORKSPACE HERO + DELIVERY LADDER
   The hero pairs the configuration's identity with the journey a
   message actually takes, which is what an SMS console is for.
   ============================================================ */
  .sms-hero {
    position: relative;
    padding: 26px 28px;
    margin-bottom: 26px;
    border-radius: var(--radius);
    background: radial-gradient(120% 140% at 100% 0%, var(--tint-primary) 0%, rgba(255, 255, 255, 0) 52%), var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow: hidden;
  }

  @media (max-width: 575.98px) {
    .sms-hero {
      padding: 20px;
    }
  }

  .sms-hero-top {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
  }

  .sms-hero-crest {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    flex-shrink: 0;
    border-radius: 17px;
    background: var(--bs-primary);
    color: #fff;
    font-size: 25px;
    box-shadow: 0 8px 20px rgba(74, 0, 229, 0.3);
  }

  .sms-hero-title {
    margin: 0;
    font-size: 26px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .sms-hero-title {
      font-size: 21px;
    }
  }

  .sms-hero-sub {
    margin: 4px 0 0;
    max-width: 64ch;
    font-size: 13.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  /* the hero's facts sit in a boxed grid, not on a rule or in chips */
  .sms-hero-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(196px, 1fr));
    gap: 1px;
    margin-top: 22px;
    border-radius: var(--radius);
    background: var(--bs-border-color);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .sms-hero-cell {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 13px 16px;
    background: var(--bs-body-bg);
  }

  .sms-hero-cell span {
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .sms-hero-cell strong {
    display: flex;
    align-items: center;
    gap: 7px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-hero-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 20px;
  }

  /* ---- the delivery ladder ----------------------------------------------
   Where a message went and how long each leg took. Rendered as connected
   stages so the slow leg is obvious without reading the numbers. */
  .sms-ladder {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 10px;
    margin-top: 20px;
    padding: 16px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  @media (max-width: 767.98px) {
    .sms-ladder {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  .sms-ladder-leg {
    position: relative;
    padding-left: 18px;
    /* the marker, and the rule running on to the next leg */
  }

  .sms-ladder-leg::before {
    content: "";
    position: absolute;
    left: 0;
    top: -7px;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: var(--bs-primary);
  }

  .sms-ladder-leg::after {
    content: "";
    position: absolute;
    left: 9px;
    right: -10px;
    top: -3px;
    height: 1px;
    background: var(--sms-border-strong);
  }

  .sms-ladder-leg:last-child::after {
    display: none;
  }

  .sms-ladder-leg.is-pending::before {
    background: var(--bs-tertiary-bg);
  }

  .sms-ladder-leg span {
    display: block;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .sms-ladder-leg strong {
    display: block;
    margin-top: 2px;
    font-family: var(--font-mono);
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-ladder-leg small {
    display: block;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  @media (max-width: 767.98px) {
    .sms-ladder-leg::after {
      display: none;
    }
  }

  /* ============================================================
   3. STICKY SECTION NAVIGATION
   A plain rail: each entry carries a right-aligned state word so
   the whole centre can be read down the column.
   ============================================================ */
  .sms-nav {
    position: sticky;
    top: calc(60px + 16px);
    max-height: calc(100vh - 60px - 32px);
    padding: 10px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow-y: auto;
    /* Bootstrap's `.nav` wraps; in a capped-height column that wraps
     overflow into a second column instead of scrolling. */
    flex-wrap: nowrap;
    overflow-x: hidden;
  }

  .sms-nav>* {
    flex-shrink: 0;
  }

  @media (max-width: 991.98px) {
    .sms-nav {
      position: static;
      max-height: none;
    }
  }

  .sms-nav-link {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 9px 12px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    font-size: 13.5px;
    font-weight: 500;
    text-align: left;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .sms-nav-link i {
    flex-shrink: 0;
    font-size: 17px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  .sms-nav-link .sms-nav-txt {
    flex: 1 1 auto;
    min-width: 0;
  }

  /* the state word, quiet until the row is active */

  .sms-nav-link .sms-nav-state {
    flex-shrink: 0;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .sms-nav-link:hover {
    background: var(--bs-secondary-bg);
  }

  /* the active row is outlined and tinted rather than filled solid */

  .sms-nav-link.active {
    background: var(--tint-primary);
    border-left: 3px solid var(--bs-primary);
    padding-left: 9px;
    color: var(--bs-primary);
    font-weight: 600;
  }

  .sms-nav-link.active i,
  .sms-nav-link.active .sms-nav-state {
    color: var(--bs-primary);
  }

  .sms-nav-foot {
    margin-top: 8px;
    padding: 14px 12px 6px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* a credit balance bar */
  .sms-credit {
    height: 7px;
    border-radius: 999px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  .sms-credit span {
    display: block;
    height: 100%;
    width: calc(var(--p, 0) * 1%);
    border-radius: inherit;
    background: var(--bs-primary);
  }

  .sms-credit.is-low span {
    background: var(--bs-warning);
  }

  /* ============================================================
   4. CONFIGURATION CARDS + SETTING LINES
   ============================================================ */
  .sms-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .sms-card:hover {
    border-color: var(--sms-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* the header is a plain bar with a rule beneath, the icon set apart */
  .sms-card-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 18px 13px;
    border-bottom: 2px solid var(--bs-border-color);
    flex-wrap: wrap;
  }

  .sms-card-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    flex-shrink: 0;
    border-radius: 11px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .sms-card-ic.is-ok {
    background: var(--sms-ok-soft);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .sms-card-ic.is-warn {
    background: var(--tint-warning);
    color: rgb(152.4, 116.5794871795, 0);
  }

  .sms-card-ic.is-bad {
    background: var(--sms-bad-soft);
    color: var(--sms-bad);
  }

  .sms-card-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-card-title+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .sms-card-body {
    flex: 1 1 auto;
    padding: 6px 18px 14px;
  }

  .sms-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    padding: 11px 18px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* ---- setting line -----------------------------------------------------
   The name sits above its value, and the control sits to the right. A
   stacked pair rather than a labelled column, so long API endpoints and
   keys have the full width to themselves. */
  .sms-line {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 11px 0;
    flex-wrap: wrap;
  }

  .sms-line+.sms-line {
    border-top: 1px solid var(--bs-border-color);
  }

  .sms-line .sms-line-txt {
    flex: 1 1 auto;
    min-width: 0;
  }

  .sms-line strong {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-line p {
    margin: 2px 0 0;
    font-size: 12px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
    word-break: break-word;
  }

  .sms-line .sms-line-ctl {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 8px;
  }

  @media (max-width: 575.98px) {
    .sms-line {
      flex-wrap: wrap;
    }

    .sms-line .sms-line-ctl {
      width: 100%;
    }
  }

  .sms-input,
  .sms-select {
    min-width: 138px;
    padding: 6px 11px;
    border-radius: var(--radius-sm);
    background-color: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .sms-input:focus,
  .sms-select:focus {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
    outline: 0;
  }

  @media (max-width: 575.98px) {

    .sms-input,
    .sms-select {
      min-width: 0;
      width: 100%;
    }
  }

  .sms-input.is-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
  }

  /* a credential, shown as its shape only */
  .sms-secret {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 5px 11px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--sms-border-strong);
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--bs-emphasis-color);
  }

  .sms-secret i {
    font-size: 14px;
    color: var(--bs-secondary-color);
  }

  /* an endpoint or payload, on a dark strip */
  .sms-code {
    padding: 10px 12px;
    border-radius: var(--radius-sm);
    background: #101828;
    font-family: var(--font-mono);
    font-size: 11.5px;
    line-height: 1.75;
    color: rgba(255, 255, 255, 0.8);
    word-break: break-all;
    overflow-x: auto;
  }

  /* ============================================================
   5. HANDSET PREVIEW + SEGMENT METER
   The message as it will actually arrive, because on SMS the
   rendering IS the specification.
   ============================================================ */
  .sms-phone {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 14px 12px 16px;
    border-radius: 18px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    /* the sender line at the head of the conversation */
  }

  .sms-phone .sms-phone-from {
    display: block;
    margin-bottom: 2px;
    text-align: center;
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* the message bubble, with the tail an SMS client draws */
  .sms-bubble {
    position: relative;
    align-self: flex-start;
    max-width: 92%;
    padding: 10px 13px;
    border-radius: 14px 14px 14px 4px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 12.5px;
    line-height: 1.65;
    color: var(--bs-emphasis-color);
    white-space: pre-line;
    /* a placeholder inside the body, marked so it can be picked out */
  }

  .sms-bubble code {
    padding: 0 3px;
    border-radius: 4px;
    background: var(--tint-primary);
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-primary);
  }

  .sms-bubble+.sms-bubble {
    margin-top: 2px;
  }

  .sms-phone-time {
    align-self: flex-start;
    font-size: 10.5px;
    color: var(--bs-secondary-color);
  }

  /* ---- segment meter ----------------------------------------------------
   160 characters is a hard boundary that costs money, so it is shown as a
   filled track with the count beside it rather than buried in a footnote. */
  .sms-seg {
    display: flex;
    align-items: center;
    gap: 10px;
  }

  .sms-seg .sms-seg-track {
    position: relative;
    flex: 1 1 auto;
    height: 5px;
    border-radius: 999px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  .sms-seg .sms-seg-track span {
    position: absolute;
    inset: 0 auto 0 0;
    width: calc(var(--p, 0) * 1%);
    border-radius: inherit;
    background: var(--bs-primary);
  }

  .sms-seg .sms-seg-n {
    flex-shrink: 0;
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    color: var(--bs-secondary-color);
  }

  /* over one segment: the message now costs twice as much to send */

  .sms-seg.is-over .sms-seg-track span {
    background: var(--bs-warning);
  }

  .sms-seg.is-over .sms-seg-n {
    color: rgb(142.2, 108.7769230769, 0);
  }

  /* ============================================================
   6. GATEWAY PROVIDER TILES
   Compact tiles in a grid, each carrying its route, latency and
   the price it charges per message.
   ============================================================ */
  .sms-gw {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 12px;
    height: 100%;
    padding: 17px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .sms-gw:hover {
    border-color: var(--sms-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* the default route is ringed, so it reads as selected rather than better */

  .sms-gw.is-default {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .sms-gw.is-off {
    background: var(--bs-secondary-bg);
  }

  .sms-gw.is-off .sms-gw-mark,
  .sms-gw.is-off .sms-gw-name {
    opacity: 0.68;
  }

  .sms-gw-top {
    display: flex;
    align-items: flex-start;
    gap: 12px;
  }

  .sms-gw-mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    flex-shrink: 0;
    border-radius: 13px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 21px;
    color: var(--bs-emphasis-color);
  }

  .sms-gw-name {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-gw-name+p {
    margin: 2px 0 0;
    font-family: var(--font-mono);
    font-size: 11px;
    color: var(--bs-secondary-color);
    word-break: break-all;
  }

  /* the tile's measured facts, on their own hairline grid */
  .sms-gw-facts {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1px;
    border-radius: var(--radius-sm);
    background: var(--bs-border-color);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .sms-gw-fact {
    padding: 8px 10px;
    background: var(--bs-body-bg);
    text-align: center;
  }

  .sms-gw-fact span {
    display: block;
    font-size: 9.5px;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .sms-gw-fact strong {
    display: block;
    margin-top: 2px;
    font-family: var(--font-mono);
    font-size: 12.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-gw-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   7. SENDER ID PLATES
   A sender ID is six fixed characters that a regulator has to
   approve, so it is drawn as a registered plate.
   ============================================================ */
  .sms-sid {
    display: flex;
    flex-direction: column;
    gap: 14px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .sms-sid:hover {
    box-shadow: var(--shadow-lift);
  }

  .sms-sid.is-pending {
    border-style: dashed;
    border-color: var(--bs-warning);
  }

  /* the plate itself */
  .sms-plate {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 12px 10px;
    border-radius: var(--radius-sm);
    background: var(--bs-dark);
    font-family: var(--font-mono);
    font-size: 22px;
    font-weight: 700;
    letter-spacing: 0.22em;
    text-indent: 0.22em;
    color: #fff;
  }

  .is-pending .sms-plate {
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--sms-border-strong);
    color: var(--bs-secondary-color);
  }

  .sms-sid-name {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-sid-name+p {
    margin: 2px 0 0;
    font-size: 12px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  /* the registration facts, as label/value pairs on one line each */
  .sms-sid-facts {
    display: flex;
    flex-direction: column;
    gap: 7px;
  }

  .sms-sid-facts div {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    font-size: 12px;
  }

  .sms-sid-facts dt,
  .sms-sid-facts span:first-child {
    margin: 0;
    font-weight: 400;
    color: var(--bs-secondary-color);
  }

  .sms-sid-facts dd,
  .sms-sid-facts span:last-child {
    margin: 0;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-sid-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   8. TEMPLATE CARDS
   ============================================================ */
  .sms-tpl {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .sms-tpl:hover {
    border-color: var(--sms-border-strong);
    box-shadow: var(--shadow-lift);
  }

  .sms-tpl.is-draft .sms-phone {
    opacity: 0.62;
  }

  .sms-tpl-head {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 14px 16px 12px;
  }

  .sms-tpl-name {
    margin: 0;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-tpl-name+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .sms-tpl-body {
    padding: 0 16px 14px;
  }

  .sms-tpl-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-top: auto;
    padding: 10px 16px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   9. RULES, QUEUE AND LOG ROWS
   ============================================================ */
  /* a notification rule, with its trigger set apart from its audience */
  .sms-rule {
    display: grid;
    grid-template-columns: 40px minmax(0, 1fr) auto;
    align-items: center;
    gap: 14px;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .sms-rule+.sms-rule {
    margin-top: 8px;
  }

  .sms-rule:hover {
    border-color: var(--sms-border-strong);
  }

  .sms-rule.is-off {
    background: var(--bs-secondary-bg);
  }

  .sms-rule.is-off .sms-rule-body {
    opacity: 0.66;
  }

  @media (max-width: 767.98px) {
    .sms-rule {
      grid-template-columns: 40px minmax(0, 1fr);
      row-gap: 10px;
    }

    .sms-rule .sms-rule-ctl {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  .sms-rule-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 12px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .sms-rule-body {
    min-width: 0;
  }

  .sms-rule-body strong {
    display: block;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-rule-body p {
    margin: 2px 0 0;
    font-size: 12px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .sms-rule-ctl {
    display: flex;
    align-items: center;
    gap: 10px;
    justify-content: flex-end;
  }

  /* ---- queue rows -------------------------------------------------------
   The delivery state is the leading column, because in a message queue
   that is the only thing being scanned for. */
  .sms-q {
    display: grid;
    grid-template-columns: 108px minmax(0, 1fr) auto;
    align-items: center;
    gap: 14px;
    padding: 12px 16px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .sms-q+.sms-q {
    margin-top: 8px;
  }

  @media (max-width: 767.98px) {
    .sms-q {
      grid-template-columns: minmax(0, 1fr);
      gap: 8px;
    }
  }

  .sms-q-body {
    min-width: 0;
  }

  .sms-q-body strong {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-q-body span {
    display: block;
    margin-top: 2px;
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
    word-break: break-word;
  }

  .sms-q-side {
    display: flex;
    align-items: center;
    gap: 10px;
    justify-content: flex-end;
    flex-wrap: wrap;
  }

  /* ---- log rows ---------------------------------------------------------- */
  .sms-log {
    display: grid;
    grid-template-columns: 148px 96px minmax(0, 1fr);
    gap: 14px;
    padding: 9px 0;
    font-family: var(--font-mono);
    font-size: 12px;
    line-height: 1.7;
  }

  .sms-log+.sms-log {
    border-top: 1px solid var(--bs-border-color);
  }

  .sms-log .sms-log-t {
    color: var(--bs-secondary-color);
    white-space: nowrap;
  }

  .sms-log .sms-log-msg {
    min-width: 0;
    color: var(--bs-emphasis-color);
    word-break: break-word;
  }

  .sms-log.is-bad .sms-log-msg {
    color: var(--sms-bad);
  }

  .sms-log.is-warn .sms-log-msg {
    color: rgb(142.2, 108.7769230769, 0);
  }

  @media (max-width: 767.98px) {
    .sms-log {
      grid-template-columns: minmax(0, 1fr);
      gap: 2px;
    }
  }

  /* ============================================================
   10. PREMIUM ACCORDION
   ============================================================ */
  .sms-acc {
    border-radius: var(--radius);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .sms-acc .accordion-item {
    border: 0;
    background: var(--bs-body-bg);
  }

  .sms-acc .accordion-item+.accordion-item {
    border-top: 1px solid var(--bs-border-color);
  }

  .sms-acc .accordion-button {
    gap: 11px;
    padding: 15px 18px;
    background: var(--bs-body-bg);
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    box-shadow: none;
  }

  .sms-acc .accordion-button::after {
    margin-left: 0;
  }

  .sms-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .sms-acc .accordion-button:focus {
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .sms-acc .accordion-button i {
    font-size: 17px;
  }

  .sms-acc .sms-acc-spacer {
    margin-left: auto;
  }

  .sms-acc .accordion-body {
    padding: 4px 18px 18px;
  }

  /* ============================================================
   11. MESSAGING TIMELINE
   A trail of stages that wraps, each notched into the next.
   ============================================================ */
  .sms-trail {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    padding: 20px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .sms-trail-step {
    position: relative;
    flex: 1 1 210px;
    padding: 14px 16px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    /* the notch pointing on to the next stage */
  }

  .sms-trail-step::after {
    content: "";
    position: absolute;
    right: -7px;
    top: 50%;
    transform: translateY(-50%) rotate(45deg);
    width: 12px;
    height: 12px;
    background: inherit;
    border-top: 1px solid var(--bs-border-color);
    border-right: 1px solid var(--bs-border-color);
    z-index: 1;
  }

  .sms-trail-step:last-child::after {
    display: none;
  }

  .sms-trail-step.is-done {
    background: var(--sms-ok-soft);
    border-color: rgba(26, 190, 23, 0.26);
  }

  .sms-trail-step.is-done::after {
    border-color: rgba(26, 190, 23, 0.26);
  }

  .sms-trail-step.is-done .sms-trail-n {
    background: var(--bs-success);
    border-color: var(--bs-success);
    color: #fff;
  }

  .sms-trail-step.is-current {
    background: var(--tint-primary);
    border-color: rgba(74, 0, 229, 0.28);
  }

  .sms-trail-step.is-current::after {
    border-color: rgba(74, 0, 229, 0.28);
  }

  .sms-trail-step.is-current .sms-trail-n {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
  }

  @media (max-width: 991.98px) {
    .sms-trail-step {
      flex: 1 1 100%;
    }

    .sms-trail-step::after {
      right: 50%;
      top: auto;
      bottom: -7px;
      transform: translateX(50%) rotate(135deg);
    }
  }

  .sms-trail-top {
    display: flex;
    align-items: center;
    gap: 9px;
    margin-bottom: 7px;
  }

  .sms-trail-n {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-tertiary-bg);
    font-size: 13px;
    color: var(--bs-secondary-color);
  }

  .sms-trail-title {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-trail-when {
    display: block;
    font-family: var(--font-mono);
    font-size: 10.5px;
    color: var(--bs-secondary-color);
  }

  .sms-trail-txt {
    margin: 0;
    font-size: 12px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   12. OFFCANVAS, PANEL HELPERS, EMPTY STATE
   ============================================================ */
  /* The theme sets `.offcanvas.offcanvas-end { width: auto !important }`; the
   workspace has to match on three classes to beat it. */
  .offcanvas.offcanvas-end.sms-canvas {
    width: 88% !important;
    max-width: 1160px !important;
  }

  .sms-canvas-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 20px 24px;
    background: var(--tint-primary);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .sms-canvas-body {
    padding: 22px 24px 30px;
  }

  .sms-sect+.sms-sect {
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .sms-sect-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 13px;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .sms-sect-title i {
    font-size: 16px;
    color: var(--bs-primary);
  }

  /* a validation result */
  .sms-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .sms-check+.sms-check {
    border-top: 1px solid var(--bs-border-color);
  }

  .sms-check>i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 16px;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .sms-check.is-warn>i {
    color: rgb(142.2, 108.7769230769, 0);
  }

  .sms-check.is-bad>i {
    color: var(--sms-bad);
  }

  .sms-check span {
    display: block;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* audit entries */
  .sms-audit {
    display: grid;
    grid-template-columns: 146px minmax(0, 1fr);
    gap: 14px;
    padding: 11px 0;
  }

  .sms-audit+.sms-audit {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .sms-audit {
      grid-template-columns: minmax(0, 1fr);
      gap: 3px;
    }
  }

  .sms-audit-when {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .sms-audit-when strong {
    display: block;
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-audit-what {
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .sms-audit-what span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ---- empty state ------------------------------------------------------- */
  .sms-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 5px;
    padding: 38px 24px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--sms-border-strong);
  }

  .sms-empty i {
    font-size: 30px;
    color: var(--bs-secondary-color);
    opacity: 0.8;
  }

  .sms-empty h6 {
    margin: 8px 0 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sms-empty p {
    margin: 0;
    max-width: 48ch;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .sms-empty .btn {
    margin-top: 10px;
  }

  /*===== account security =====*/
  /*-----------------
    Account & Security — reusable account protection components

    A shared vocabulary for the Account & Security Center: identity,
    authentication, passwords, sessions, devices, permissions and the
    activity that follows from all of it. Class prefix `acs-`.

    The visual language is a security console. Where the finance, email and
    SMS centres are about configuring a service, this one is about a person
    and the state of their account, so the pieces are different in kind: a
    shield carrying a posture score, factor cards that show whether a method
    is armed, device cards that mark the machine you are reading this on,
    login rows ranked by outcome, recovery codes struck through as they are
    spent, and recommendations ordered by how much risk each one removes.

    It borrows nothing from `_financial-settings.scss`, `_email-settings.scss`,
    `_sms-settings.scss` or `_settings.scss` and overrides nothing in them.

    Contents
      1.  Tokens + shared pieces
      2.  Identity hero + posture shield
      3.  Sticky section navigation
      4.  Security cards + fact rows
      5.  Authentication factor cards
      6.  Password strength + recovery codes
      7.  Session and device cards
      8.  Login history rows
      9.  Permission grid
      10. Recommendation cards
      11. Premium accordion + alternating timeline
      12. Offcanvas, panel helpers and empty state
-----------------*/
  /* ============================================================
   1. TOKENS + SHARED PIECES
   ============================================================ */
  :root {
    --acs-border: var(--bs-border-color, #E9EDF4);
    --acs-border-strong: #EDF1F6;
    --acs-safe: #1ABE17;
    --acs-safe-soft: #E8F9E8;
    --acs-watch: #EAB300;
    --acs-watch-soft: #FEF8EA;
    --acs-risk: #E82646;
    --acs-risk-soft: #FDE9ED;
  }

  @media (prefers-reduced-motion: reduce) {

    [class*=acs-],
    [class*=acs-]::before,
    [class*=acs-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* Carries a numeric value into CSS without an inline style. */
  .acs-p-0 {
    --p: 0;
  }

  .acs-p-1 {
    --p: 1;
  }

  .acs-p-2 {
    --p: 2;
  }

  .acs-p-3 {
    --p: 3;
  }

  .acs-p-4 {
    --p: 4;
  }

  .acs-p-5 {
    --p: 5;
  }

  .acs-p-6 {
    --p: 6;
  }

  .acs-p-7 {
    --p: 7;
  }

  .acs-p-8 {
    --p: 8;
  }

  .acs-p-9 {
    --p: 9;
  }

  .acs-p-10 {
    --p: 10;
  }

  .acs-p-11 {
    --p: 11;
  }

  .acs-p-12 {
    --p: 12;
  }

  .acs-p-13 {
    --p: 13;
  }

  .acs-p-14 {
    --p: 14;
  }

  .acs-p-15 {
    --p: 15;
  }

  .acs-p-16 {
    --p: 16;
  }

  .acs-p-17 {
    --p: 17;
  }

  .acs-p-18 {
    --p: 18;
  }

  .acs-p-19 {
    --p: 19;
  }

  .acs-p-20 {
    --p: 20;
  }

  .acs-p-21 {
    --p: 21;
  }

  .acs-p-22 {
    --p: 22;
  }

  .acs-p-23 {
    --p: 23;
  }

  .acs-p-24 {
    --p: 24;
  }

  .acs-p-25 {
    --p: 25;
  }

  .acs-p-26 {
    --p: 26;
  }

  .acs-p-27 {
    --p: 27;
  }

  .acs-p-28 {
    --p: 28;
  }

  .acs-p-29 {
    --p: 29;
  }

  .acs-p-30 {
    --p: 30;
  }

  .acs-p-31 {
    --p: 31;
  }

  .acs-p-32 {
    --p: 32;
  }

  .acs-p-33 {
    --p: 33;
  }

  .acs-p-34 {
    --p: 34;
  }

  .acs-p-35 {
    --p: 35;
  }

  .acs-p-36 {
    --p: 36;
  }

  .acs-p-37 {
    --p: 37;
  }

  .acs-p-38 {
    --p: 38;
  }

  .acs-p-39 {
    --p: 39;
  }

  .acs-p-40 {
    --p: 40;
  }

  .acs-p-41 {
    --p: 41;
  }

  .acs-p-42 {
    --p: 42;
  }

  .acs-p-43 {
    --p: 43;
  }

  .acs-p-44 {
    --p: 44;
  }

  .acs-p-45 {
    --p: 45;
  }

  .acs-p-46 {
    --p: 46;
  }

  .acs-p-47 {
    --p: 47;
  }

  .acs-p-48 {
    --p: 48;
  }

  .acs-p-49 {
    --p: 49;
  }

  .acs-p-50 {
    --p: 50;
  }

  .acs-p-51 {
    --p: 51;
  }

  .acs-p-52 {
    --p: 52;
  }

  .acs-p-53 {
    --p: 53;
  }

  .acs-p-54 {
    --p: 54;
  }

  .acs-p-55 {
    --p: 55;
  }

  .acs-p-56 {
    --p: 56;
  }

  .acs-p-57 {
    --p: 57;
  }

  .acs-p-58 {
    --p: 58;
  }

  .acs-p-59 {
    --p: 59;
  }

  .acs-p-60 {
    --p: 60;
  }

  .acs-p-61 {
    --p: 61;
  }

  .acs-p-62 {
    --p: 62;
  }

  .acs-p-63 {
    --p: 63;
  }

  .acs-p-64 {
    --p: 64;
  }

  .acs-p-65 {
    --p: 65;
  }

  .acs-p-66 {
    --p: 66;
  }

  .acs-p-67 {
    --p: 67;
  }

  .acs-p-68 {
    --p: 68;
  }

  .acs-p-69 {
    --p: 69;
  }

  .acs-p-70 {
    --p: 70;
  }

  .acs-p-71 {
    --p: 71;
  }

  .acs-p-72 {
    --p: 72;
  }

  .acs-p-73 {
    --p: 73;
  }

  .acs-p-74 {
    --p: 74;
  }

  .acs-p-75 {
    --p: 75;
  }

  .acs-p-76 {
    --p: 76;
  }

  .acs-p-77 {
    --p: 77;
  }

  .acs-p-78 {
    --p: 78;
  }

  .acs-p-79 {
    --p: 79;
  }

  .acs-p-80 {
    --p: 80;
  }

  .acs-p-81 {
    --p: 81;
  }

  .acs-p-82 {
    --p: 82;
  }

  .acs-p-83 {
    --p: 83;
  }

  .acs-p-84 {
    --p: 84;
  }

  .acs-p-85 {
    --p: 85;
  }

  .acs-p-86 {
    --p: 86;
  }

  .acs-p-87 {
    --p: 87;
  }

  .acs-p-88 {
    --p: 88;
  }

  .acs-p-89 {
    --p: 89;
  }

  .acs-p-90 {
    --p: 90;
  }

  .acs-p-91 {
    --p: 91;
  }

  .acs-p-92 {
    --p: 92;
  }

  .acs-p-93 {
    --p: 93;
  }

  .acs-p-94 {
    --p: 94;
  }

  .acs-p-95 {
    --p: 95;
  }

  .acs-p-96 {
    --p: 96;
  }

  .acs-p-97 {
    --p: 97;
  }

  .acs-p-98 {
    --p: 98;
  }

  .acs-p-99 {
    --p: 99;
  }

  .acs-p-100 {
    --p: 100;
  }

  .acs-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
    letter-spacing: -0.01em;
  }

  .acs-lbl {
    display: block;
    margin: 0 0 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* ---- status badges ----------------------------------------------------
   Pill-shaped with a leading glyph slot, so a state is legible without
   relying on colour alone. */
  .acs-badge {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 10px 3px 8px;
    border-radius: 999px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 11.5px;
    font-weight: 600;
    line-height: 1.5;
    white-space: nowrap;
    color: var(--bs-secondary-color);
  }

  .acs-badge i {
    font-size: 13px;
  }

  .acs-badge.is-safe {
    background: var(--acs-safe-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .acs-badge.is-watch {
    background: var(--acs-watch-soft);
    border-color: rgba(234, 179, 0, 0.34);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .acs-badge.is-risk {
    background: var(--acs-risk-soft);
    border-color: rgba(232, 38, 70, 0.26);
    color: var(--acs-risk);
  }

  .acs-badge.is-info {
    background: var(--tint-info);
    border-color: rgba(15, 101, 205, 0.24);
    color: var(--bs-info);
  }

  /* a quiet tag for a browser, platform or scope */
  /* ============================================================
   2. IDENTITY HERO + POSTURE SHIELD
   The hero is about a person, not a service, so it leads with
   the account and states its posture as a single figure.
   ============================================================ */
  .acs-hero {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 300px;
    gap: 0;
    margin-bottom: 26px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow: hidden;
  }

  @media (max-width: 1199.98px) {
    .acs-hero {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  .acs-hero-id {
    padding: 26px 28px;
  }

  @media (max-width: 575.98px) {
    .acs-hero-id {
      padding: 20px;
    }
  }

  .acs-hero-top {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
  }

  /* the portrait, ringed by its own account state */
  .acs-portrait {
    position: relative;
    flex-shrink: 0;
    width: 64px;
    height: 64px;
    border-radius: 20px;
    background: var(--tint-primary);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 21px;
    font-weight: 700;
    letter-spacing: 0.02em;
    color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--bs-body-bg), 0 0 0 5px var(--acs-safe);
  }

  .acs-portrait.is-unverified {
    box-shadow: 0 0 0 3px var(--bs-body-bg), 0 0 0 5px var(--acs-watch);
  }

  .acs-portrait.is-unverified .acs-portrait-tick {
    background: var(--acs-watch);
  }

  /* the verification tick, set into the corner of the portrait */
  .acs-portrait-tick {
    position: absolute;
    right: -6px;
    bottom: -6px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--acs-safe);
    border: 2px solid var(--bs-body-bg);
    font-size: 12px;
    color: #fff;
  }

  .acs-hero-name {
    margin: 0;
    font-size: 25px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .acs-hero-name {
      font-size: 21px;
    }
  }

  .acs-hero-role {
    margin: 3px 0 0;
    font-size: 13.5px;
    color: var(--bs-secondary-color);
  }

  /* the hero's facts, stacked as label-over-value pairs on a single rule */
  .acs-hero-facts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(168px, 1fr));
    gap: 18px 24px;
    margin-top: 22px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .acs-hero-fact span {
    display: block;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .acs-hero-fact strong {
    display: flex;
    align-items: center;
    gap: 7px;
    margin-top: 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acs-hero-fact small {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .acs-hero-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 22px;
  }

  /* ---- the posture shield ------------------------------------------------
   One figure for the state of the account, drawn on a shield rather than a
   dial, because a security score is a judgement rather than a measurement. */
  .acs-posture {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    padding: 26px 20px;
    background: var(--bs-primary);
    color: rgba(255, 255, 255, 0.72);
    text-align: center;
  }

  @media (max-width: 1199.98px) {
    .acs-posture {
      border-top: 1px solid var(--bs-border-color);
    }
  }

  .acs-shield {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 104px;
    height: 116px;
    margin-bottom: 12px;
    /* the shield silhouette, filled from the bottom to the score */
  }

  .acs-shield::before {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(to top, var(--acs-safe) 0%, var(--acs-safe) calc(var(--p, 0) * 1%), rgba(255, 255, 255, 0.12) calc(var(--p, 0) * 1%), rgba(255, 255, 255, 0.12) 100%);
    clip-path: polygon(50% 0%, 100% 16%, 100% 58%, 50% 100%, 0% 58%, 0% 16%);
  }

  /* the inner face the figure sits on */

  .acs-shield::after {
    content: "";
    position: absolute;
    inset: 6px;
    background: var(--bs-primary);
    clip-path: polygon(50% 0%, 100% 16%, 100% 58%, 50% 100%, 0% 58%, 0% 16%);
  }

  .acs-shield.is-watch::before {
    background: linear-gradient(to top, var(--acs-watch) 0%, var(--acs-watch) calc(var(--p, 0) * 1%), rgba(255, 255, 255, 0.12) calc(var(--p, 0) * 1%), rgba(255, 255, 255, 0.12) 100%);
  }

  .acs-shield.is-risk::before {
    background: linear-gradient(to top, var(--acs-risk) 0%, var(--acs-risk) calc(var(--p, 0) * 1%), rgba(255, 255, 255, 0.12) calc(var(--p, 0) * 1%), rgba(255, 255, 255, 0.12) 100%);
  }

  .acs-shield-n {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    line-height: 1;
    color: #fff;
  }

  .acs-shield-n b {
    font-size: 32px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
  }

  .acs-shield-n span {
    margin-top: 3px;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.55);
  }

  .acs-posture-title {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: #fff;
  }

  .acs-posture-txt {
    margin: 2px 0 0;
    max-width: 30ch;
    font-size: 12px;
    line-height: 1.6;
  }

  /* ============================================================
   3. STICKY SECTION NAVIGATION
   Grouped under headings, with a state glyph rather than a word.
   ============================================================ */
  .acs-nav {
    position: sticky;
    top: calc(60px + 16px);
    max-height: calc(100vh - 60px - 32px);
    padding: 8px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow-y: auto;
    /* Bootstrap's `.nav` wraps; in a capped-height column that wraps
     overflow into a second column instead of scrolling. */
    flex-wrap: nowrap;
    overflow-x: hidden;
  }

  .acs-nav>* {
    flex-shrink: 0;
  }

  @media (max-width: 991.98px) {
    .acs-nav {
      position: static;
      max-height: none;
    }
  }

  .acs-nav-hdr {
    display: block;
    padding: 14px 12px 6px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.11em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .acs-nav-hdr:first-child {
    padding-top: 6px;
  }

  .acs-nav-link {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 9px 12px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    font-size: 13.5px;
    font-weight: 500;
    text-align: left;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .acs-nav-link>i:first-child {
    flex-shrink: 0;
    font-size: 17px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  .acs-nav-link .acs-nav-txt {
    flex: 1 1 auto;
    min-width: 0;
  }

  /* the state glyph: attention needed, or nothing at all */

  .acs-nav-link .acs-nav-flag {
    flex-shrink: 0;
    font-size: 15px;
    color: var(--acs-watch);
  }

  .acs-nav-link:hover {
    background: var(--bs-secondary-bg);
  }

  /* the active row is inked solid, which suits a console about identity */

  .acs-nav-link.active {
    background: var(--bs-primary);
    color: #fff;
    font-weight: 600;
  }

  .acs-nav-link.active>i:first-child {
    color: rgba(255, 255, 255, 0.8);
  }

  .acs-nav-link.active .acs-nav-flag {
    color: #FFD666;
  }

  .acs-nav-foot {
    margin-top: 8px;
    padding: 14px 12px 6px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   4. SECURITY CARDS + FACT ROWS
   ============================================================ */
  .acs-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .acs-card:hover {
    border-color: var(--acs-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* a card whose subject needs attention carries a tinted top edge */

  .acs-card.is-watch {
    box-shadow: inset 0 3px 0 var(--acs-watch);
  }

  .acs-card.is-risk {
    box-shadow: inset 0 3px 0 var(--acs-risk);
  }

  .acs-card-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 17px 18px 14px;
  }

  @media (max-width: 575.98px) {
    .acs-card-head {
      flex-direction: column;
      align-items: start;
      gap: 12px;
    }
  }

  .acs-card-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: 12px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .acs-card-ic.is-safe {
    background: var(--acs-safe-soft);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .acs-card-ic.is-watch {
    background: var(--acs-watch-soft);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .acs-card-ic.is-risk {
    background: var(--acs-risk-soft);
    color: var(--acs-risk);
  }

  .acs-card-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acs-card-title+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .acs-card-body {
    flex: 1 1 auto;
    padding: 0 18px 14px;
  }

  .acs-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    padding: 12px 18px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ---- fact row ---------------------------------------------------------
   Label above, value below, with the control to the right. The label sits
   above rather than beside because account values — email addresses,
   employee ids, device fingerprints — are long. */
  .acs-fact {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 11px 0;
  }

  .acs-fact+.acs-fact {
    border-top: 1px solid var(--bs-border-color);
  }

  .acs-fact .acs-fact-txt {
    flex: 1 1 auto;
    min-width: 0;
  }

  .acs-fact span {
    display: block;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .acs-fact strong {
    display: block;
    margin-top: 2px;
    font-size: 13.5px;
    font-weight: 500;
    color: var(--bs-emphasis-color);
    word-break: break-word;
  }

  .acs-fact .acs-fact-ctl {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 8px;
  }

  @media (max-width: 575.98px) {
    .acs-fact {
      flex-wrap: wrap;
    }

    .acs-fact .acs-fact-ctl {
      width: 100%;
    }
  }

  .acs-input,
  .acs-select {
    min-width: 150px;
    padding: 6px 11px;
    border-radius: var(--radius-sm);
    background-color: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .acs-input:focus,
  .acs-select:focus {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
    outline: 0;
  }

  @media (max-width: 575.98px) {

    .acs-input,
    .acs-select {
      min-width: 0;
      width: 100%;
    }
  }

  /* ============================================================
   5. AUTHENTICATION FACTOR CARDS
   A factor is either armed or it is not, and the card says which
   before anything else.
   ============================================================ */
  .acs-factor {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 12px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .acs-factor:hover {
    box-shadow: var(--shadow-lift);
  }

  /* an armed factor is tinted and its glyph made solid */

  .acs-factor.is-on {
    border-color: rgba(26, 190, 23, 0.3);
    background: linear-gradient(165deg, var(--acs-safe-soft), var(--bs-body-bg) 62%);
  }

  .acs-factor.is-on .acs-factor-ic {
    background: var(--acs-safe);
    border-color: transparent;
    color: #fff;
  }

  /* an available but unused factor is drawn as an outline */

  .acs-factor.is-off {
    border-style: dashed;
  }

  .acs-factor-top {
    display: flex;
    align-items: flex-start;
    gap: 12px;
  }

  .acs-factor-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    flex-shrink: 0;
    border-radius: 14px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-primary);
    font-size: 21px;
    transition: var(--transition);
  }

  .acs-factor-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acs-factor-txt {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* how strong the factor is, as a run of pips rather than a number */
  .acs-strength {
    display: inline-flex;
    align-items: center;
    gap: 4px;
  }

  .acs-strength i {
    display: block;
    width: 16px;
    height: 4px;
    border-radius: 2px;
    background: var(--bs-tertiary-bg);
  }

  .acs-strength.is-3 i:nth-child(-n+3),
  .acs-strength.is-4 i {
    background: var(--acs-safe);
  }

  .acs-strength.is-2 i:nth-child(-n+2) {
    background: var(--acs-watch);
  }

  .acs-strength.is-1 i:nth-child(1) {
    background: var(--acs-risk);
  }

  .acs-strength em {
    margin-left: 4px;
    font-style: normal;
    font-size: 11px;
    font-weight: 600;
    color: var(--bs-secondary-color);
  }

  .acs-factor-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   6. PASSWORD STRENGTH + RECOVERY CODES
   ============================================================ */
  /* the age of a password, as a bar that fills towards expiry */
  .acs-age .acs-age-track {
    position: relative;
    height: 8px;
    border-radius: 999px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  .acs-age .acs-age-track span {
    position: absolute;
    inset: 0 auto 0 0;
    width: calc(var(--p, 0) * 1%);
    border-radius: inherit;
    background: var(--acs-safe);
  }

  .acs-age.is-watch .acs-age-track span {
    background: var(--acs-watch);
  }

  .acs-age.is-risk .acs-age-track span {
    background: var(--acs-risk);
  }

  .acs-age .acs-age-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: 7px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .acs-age .acs-age-meta b {
    font-family: var(--font-mono);
    color: var(--bs-emphasis-color);
  }

  /* a rule the password must satisfy */
  .acs-rule {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 7px 0;
    font-size: 12.5px;
    color: var(--bs-emphasis-color);
  }

  .acs-rule i {
    flex-shrink: 0;
    font-size: 16px;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .acs-rule.is-off {
    color: var(--bs-secondary-color);
  }

  .acs-rule.is-off i {
    color: var(--acs-border-strong);
  }

  /* ---- recovery codes ---------------------------------------------------
   Printed as a block, with the spent ones struck through, because that is
   how they are actually used: on paper, one at a time. */
  .acs-codes {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(124px, 1fr));
    gap: 1px;
    border-radius: var(--radius-sm);
    background: var(--bs-border-color);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .acs-code {
    padding: 10px 12px;
    background: var(--bs-body-bg);
    font-family: var(--font-mono);
    font-size: 12.5px;
    letter-spacing: 0.04em;
    text-align: center;
    color: var(--bs-emphasis-color);
  }

  .acs-code.is-used {
    background: var(--bs-secondary-bg);
    color: var(--bs-secondary-color);
    text-decoration: line-through;
  }

  /* ============================================================
   7. SESSION AND DEVICE CARDS
   ============================================================ */
  .acs-device {
    display: grid;
    grid-template-columns: 52px minmax(0, 1fr) auto;
    align-items: center;
    gap: 16px;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .acs-device+.acs-device {
    margin-top: 10px;
  }

  .acs-device:hover {
    border-color: var(--acs-border-strong);
    box-shadow: var(--shadow);
  }

  /* the machine this page is being read on */

  .acs-device.is-current {
    border-color: rgba(26, 190, 23, 0.34);
    background: linear-gradient(100deg, var(--acs-safe-soft), var(--bs-body-bg) 42%);
  }

  /* a device that has not been seen in a long time */

  .acs-device.is-stale {
    background: var(--bs-secondary-bg);
  }

  .acs-device.is-stale .acs-device-ic,
  .acs-device.is-stale .acs-device-name {
    opacity: 0.72;
  }

  @media (max-width: 767.98px) {
    .acs-device {
      grid-template-columns: 52px minmax(0, 1fr);
      row-gap: 12px;
    }

    .acs-device .acs-device-act {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  .acs-device-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    border-radius: 15px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 25px;
    color: var(--bs-emphasis-color);
  }

  .acs-device-name {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the device's particulars, run together on one line with separators */
  .acs-device-meta {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px 10px;
    margin: 6px 0 0;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  .acs-device-meta span {
    display: inline-flex;
    align-items: center;
    gap: 5px;
  }

  .acs-device-meta span i {
    font-size: 14px;
  }

  /* a hairline between particulars, rather than a bullet */

  .acs-device-meta span+span::before {
    content: "";
    width: 1px;
    height: 11px;
    margin-right: 5px;
    background: var(--acs-border-strong);
  }

  .acs-device-act {
    display: flex;
    align-items: center;
    gap: 8px;
    justify-content: flex-end;
  }

  /* ============================================================
   8. LOGIN HISTORY ROWS
   Outcome first, because that is the only thing being scanned for.
   ============================================================ */
  .acs-login {
    display: grid;
    grid-template-columns: 30px minmax(0, 1fr) auto;
    align-items: center;
    gap: 14px;
    padding: 12px 16px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .acs-login+.acs-login {
    margin-top: 8px;
  }

  .acs-login.is-fail {
    background: var(--acs-risk-soft);
    border-color: rgba(232, 38, 70, 0.2);
  }

  .acs-login.is-flagged {
    background: var(--acs-watch-soft);
    border-color: rgba(234, 179, 0, 0.28);
  }

  @media (max-width: 767.98px) {
    .acs-login {
      grid-template-columns: 30px minmax(0, 1fr);
      row-gap: 8px;
    }

    .acs-login .acs-login-side {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  .acs-login-mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: var(--acs-safe-soft);
    font-size: 16px;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .is-fail .acs-login-mark {
    background: rgba(255, 255, 255, 0.7);
    color: var(--acs-risk);
  }

  .is-flagged .acs-login-mark {
    background: rgba(255, 255, 255, 0.7);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .acs-login-body {
    min-width: 0;
  }

  .acs-login-body strong {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acs-login-body span {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .acs-login-side {
    display: flex;
    align-items: center;
    gap: 10px;
    justify-content: flex-end;
    flex-wrap: wrap;
  }

  .acs-login-side .acs-login-ip {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   9. PERMISSION GRID
   Not a table: a list of capabilities, each with its verdict.
   ============================================================ */
  .acs-perm {
    display: grid;
    grid-template-columns: minmax(0, 1fr) repeat(4, 62px);
    align-items: center;
    gap: 8px;
    padding: 10px 0;
  }

  .acs-perm+.acs-perm {
    border-top: 1px solid var(--bs-border-color);
  }

  /* the header row of the grid */

  .acs-perm.is-head {
    padding-bottom: 8px;
    border-bottom: 2px solid var(--bs-border-color);
  }

  .acs-perm.is-head span {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    text-align: center;
    color: var(--bs-secondary-color);
  }

  .acs-perm.is-head span:first-child {
    text-align: left;
  }

  .acs-perm .acs-perm-name {
    min-width: 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 767.98px) {
    .acs-perm {
      grid-template-columns: minmax(0, 1fr) repeat(4, 1fr);
      gap: 4px;
    }
  }

  /* a verdict pip: granted, denied, or granted with a condition */
  .acs-pip {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    margin: 0 auto;
    border-radius: 8px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 15px;
    color: var(--acs-border-strong);
  }

  .acs-pip.is-yes {
    background: var(--acs-safe-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .acs-pip.is-cond {
    background: var(--acs-watch-soft);
    border-color: rgba(234, 179, 0, 0.32);
    color: rgb(142.2, 108.7769230769, 0);
  }

  /* ============================================================
   10. RECOMMENDATION CARDS
   Ranked, because the order is the advice.
   ============================================================ */
  .acs-rec {
    display: grid;
    grid-template-columns: 44px minmax(0, 1fr) auto;
    align-items: center;
    gap: 16px;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-left: 3px solid var(--acs-border-strong);
    transition: var(--transition);
  }

  @media (max-width: 575.98px) {
    .acs-rec {
      flex-direction: column;
      display: flex;
      align-items: start;
    }
  }

  .acs-rec+.acs-rec {
    margin-top: 10px;
  }

  .acs-rec:hover {
    box-shadow: var(--shadow-lift);
  }

  .acs-rec.is-high {
    border-left-color: var(--acs-risk);
  }

  .acs-rec.is-high .acs-rec-n {
    background: var(--acs-risk-soft);
    color: var(--acs-risk);
  }

  .acs-rec.is-medium {
    border-left-color: var(--acs-watch);
  }

  .acs-rec.is-medium .acs-rec-n {
    background: var(--acs-watch-soft);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .acs-rec.is-done {
    border-left-color: var(--acs-safe);
    background: var(--bs-secondary-bg);
  }

  .acs-rec.is-done .acs-rec-n {
    background: var(--acs-safe-soft);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .acs-rec.is-done .acs-rec-title {
    text-decoration: line-through;
    color: var(--bs-secondary-color);
  }

  @media (max-width: 767.98px) {
    .acs-rec {
      grid-template-columns: 44px minmax(0, 1fr);
      row-gap: 12px;
    }

    .acs-rec .acs-rec-act {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  /* the rank, which is the whole point of the list */
  .acs-rec-n {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 14px;
    background: var(--bs-secondary-bg);
    font-size: 16px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--bs-secondary-color);
  }

  .acs-rec-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acs-rec-txt {
    margin: 3px 0 0;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .acs-rec-act {
    display: flex;
    align-items: center;
    gap: 10px;
    justify-content: flex-end;
  }

  /* ============================================================
   11. PREMIUM ACCORDION + ALTERNATING TIMELINE
   ============================================================ */
  .acs-acc {
    border-radius: var(--radius);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .acs-acc .accordion-item {
    border: 0;
    background: var(--bs-body-bg);
  }

  .acs-acc .accordion-item+.accordion-item {
    border-top: 1px solid var(--bs-border-color);
  }

  .acs-acc .accordion-button {
    gap: 11px;
    padding: 16px 18px;
    background: var(--bs-body-bg);
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    box-shadow: none;
  }

  .acs-acc .accordion-button::after {
    margin-left: 0;
  }

  .acs-acc .accordion-button:not(.collapsed) {
    background: var(--bs-primary);
    color: #fff;
  }

  .acs-acc .accordion-button:not(.collapsed)::after {
    filter: invert(1) grayscale(1) brightness(2);
  }

  .acs-acc .accordion-button:focus {
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .acs-acc .accordion-button i {
    font-size: 17px;
  }

  .acs-acc .acs-acc-spacer {
    margin-left: auto;
  }

  .acs-acc .accordion-body {
    padding: 6px 18px 18px;
  }

  /* ---- alternating timeline ---------------------------------------------
   Events fall either side of a central rule on a wide screen, which keeps
   a long security history readable without a date gutter. */
  .acs-time {
    position: relative;
    padding: 22px 0;
    /* the central rule */
  }

  .acs-time::before {
    content: "";
    position: absolute;
    left: 50%;
    top: 0;
    bottom: 0;
    width: 2px;
    margin-left: -1px;
    background: var(--bs-tertiary-bg);
  }

  @media (max-width: 991.98px) {
    .acs-time::before {
      left: 15px;
      margin-left: 0;
    }
  }

  .acs-time-item {
    position: relative;
    width: 50%;
    padding-right: 42px;
    margin-bottom: 22px;
  }

  .acs-time-item:last-child {
    margin-bottom: 0;
  }

  /* the marker sits on the central rule */

  .acs-time-item::after {
    content: "";
    position: absolute;
    right: -7px;
    top: 20px;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 3px solid var(--bs-tertiary-bg);
  }

  .acs-time-item.is-done::after {
    background: var(--acs-safe);
    border-color: var(--acs-safe);
  }

  .acs-time-item.is-current::after {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  /* every second event crosses to the other side */

  .acs-time-item:nth-child(even) {
    margin-left: 50%;
    padding-right: 0;
    padding-left: 42px;
    text-align: left;
  }

  .acs-time-item:nth-child(even)::after {
    right: auto;
    left: -7px;
  }

  .acs-time-item:nth-child(odd) {
    text-align: right;
  }

  @media (max-width: 991.98px) {
    .acs-time-item {
      width: 100%;
      padding-right: 0;
      padding-left: 44px;
      text-align: left;
    }

    .acs-time-item::after {
      right: auto;
      left: 8px;
    }

    .acs-time-item:nth-child(even) {
      margin-left: 0;
      padding-left: 44px;
    }

    .acs-time-item:nth-child(even)::after {
      left: 8px;
    }

    .acs-time-item:nth-child(odd) {
      text-align: left;
    }
  }

  .acs-time-card {
    display: inline-block;
    max-width: 100%;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    text-align: left;
  }

  .acs-time-card h6 {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 8px;
  }

  .acs-time-card h6 i {
    font-size: 16px;
    color: var(--bs-secondary-color);
  }

  .acs-time-card time {
    display: block;
    margin-top: 2px;
    font-family: var(--font-mono);
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .acs-time-card p {
    margin: 7px 0 0;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   12. OFFCANVAS, PANEL HELPERS, EMPTY STATE
   ============================================================ */
  /* The theme sets `.offcanvas.offcanvas-end { width: auto !important }`; the
   workspace has to match on three classes to beat it. */
  .offcanvas.offcanvas-end.acs-canvas {
    width: 88% !important;
    max-width: 1160px !important;
  }

  .acs-canvas-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 20px 24px;
    background: var(--bs-primary);
    color: #fff;
  }

  .acs-canvas-head .acs-card-ic {
    background: rgba(255, 255, 255, 0.12);
    color: #fff;
  }

  .acs-canvas-head .offcanvas-title {
    color: #fff;
  }

  .acs-canvas-head p {
    color: rgba(255, 255, 255, 0.58);
  }

  .acs-canvas-head .btn-close {
    filter: invert(1) grayscale(1);
    opacity: 0.7;
  }

  .acs-canvas-body {
    padding: 22px 24px 30px;
  }

  .acs-sect+.acs-sect {
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .acs-sect-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 13px;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .acs-sect-title i {
    font-size: 16px;
    color: var(--bs-primary);
  }

  /* a check result */
  .acs-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .acs-check+.acs-check {
    border-top: 1px solid var(--bs-border-color);
  }

  .acs-check>i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 16px;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .acs-check.is-watch>i {
    color: rgb(142.2, 108.7769230769, 0);
  }

  .acs-check.is-risk>i {
    color: var(--acs-risk);
  }

  .acs-check span {
    display: block;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* audit entries */
  .acs-audit {
    display: grid;
    grid-template-columns: 150px minmax(0, 1fr);
    gap: 14px;
    padding: 11px 0;
  }

  .acs-audit+.acs-audit {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .acs-audit {
      grid-template-columns: minmax(0, 1fr);
      gap: 3px;
    }
  }

  .acs-audit-when {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .acs-audit-when strong {
    display: block;
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acs-audit-what {
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .acs-audit-what span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ---- empty state ------------------------------------------------------- */
  .acs-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 5px;
    padding: 38px 24px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--acs-border-strong);
  }

  .acs-empty i {
    font-size: 30px;
    color: var(--bs-secondary-color);
    opacity: 0.8;
  }

  .acs-empty h6 {
    margin: 8px 0 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acs-empty p {
    margin: 0;
    max-width: 48ch;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .acs-empty .btn {
    margin-top: 10px;
  }

  /*===== academic settings =====*/
  /*-----------------
    Academic Settings — institution configuration components

    A shared vocabulary for the Academic Settings & Institution Configuration
    Center: the year and its terms, grades and sections, subjects and credits,
    grading scales, examinations, promotion rules and the calendar that ties
    them together. Class prefix `acd-`.

    The visual language is an academic register rather than a service console.
    The pieces come from how a school actually describes itself: a year drawn
    as a spine divided into terms, grades and their sections as a bracketed
    tree, a grading scale as a ladder of bands with their cut-offs, subjects
    as chips carrying credits, the calendar as twelve tinted months, and
    recommendations filed as tabbed cards.

    It borrows nothing from `_financial-settings.scss`, `_email-settings.scss`,
    `_sms-settings.scss`, `_account-security.scss` or `_settings.scss`, and
    overrides nothing in them.

    Contents
      1.  Tokens + shared pieces
      2.  Workspace hero + year spine
      3.  Sticky section navigation
      4.  Configuration cards + setting rows
      5.  Term ribbon
      6.  Grade and section tree
      7.  Subject chips + credit meter
      8.  Grading ladder
      9.  Policy statements + rule rows
      10. Calendar strip
      11. Premium accordion + milestone track
      12. Recommendation folders
      13. Offcanvas, panel helpers and empty state
-----------------*/
  /* ============================================================
   1. TOKENS + SHARED PIECES
   ============================================================ */
  :root {
    --acd-border: var(--bs-border-color, #E9EDF4);
    --acd-border-strong: #EDF1F6;
    --acd-pass: #1ABE17;
    --acd-pass-soft: #E8F9E8;
    --acd-watch: #EAB300;
    --acd-watch-soft: #FEF8EA;
    --acd-fail: #E82646;
    --acd-fail-soft: #FDE9ED;
    --acd-alt: #4A00E5;
  }

  @media (prefers-reduced-motion: reduce) {

    [class*=acd-],
    [class*=acd-]::before,
    [class*=acd-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* Carries a numeric value into CSS without an inline style. */
  .acd-p-0 {
    --p: 0;
  }

  .acd-p-1 {
    --p: 1;
  }

  .acd-p-2 {
    --p: 2;
  }

  .acd-p-3 {
    --p: 3;
  }

  .acd-p-4 {
    --p: 4;
  }

  .acd-p-5 {
    --p: 5;
  }

  .acd-p-6 {
    --p: 6;
  }

  .acd-p-7 {
    --p: 7;
  }

  .acd-p-8 {
    --p: 8;
  }

  .acd-p-9 {
    --p: 9;
  }

  .acd-p-10 {
    --p: 10;
  }

  .acd-p-11 {
    --p: 11;
  }

  .acd-p-12 {
    --p: 12;
  }

  .acd-p-13 {
    --p: 13;
  }

  .acd-p-14 {
    --p: 14;
  }

  .acd-p-15 {
    --p: 15;
  }

  .acd-p-16 {
    --p: 16;
  }

  .acd-p-17 {
    --p: 17;
  }

  .acd-p-18 {
    --p: 18;
  }

  .acd-p-19 {
    --p: 19;
  }

  .acd-p-20 {
    --p: 20;
  }

  .acd-p-21 {
    --p: 21;
  }

  .acd-p-22 {
    --p: 22;
  }

  .acd-p-23 {
    --p: 23;
  }

  .acd-p-24 {
    --p: 24;
  }

  .acd-p-25 {
    --p: 25;
  }

  .acd-p-26 {
    --p: 26;
  }

  .acd-p-27 {
    --p: 27;
  }

  .acd-p-28 {
    --p: 28;
  }

  .acd-p-29 {
    --p: 29;
  }

  .acd-p-30 {
    --p: 30;
  }

  .acd-p-31 {
    --p: 31;
  }

  .acd-p-32 {
    --p: 32;
  }

  .acd-p-33 {
    --p: 33;
  }

  .acd-p-34 {
    --p: 34;
  }

  .acd-p-35 {
    --p: 35;
  }

  .acd-p-36 {
    --p: 36;
  }

  .acd-p-37 {
    --p: 37;
  }

  .acd-p-38 {
    --p: 38;
  }

  .acd-p-39 {
    --p: 39;
  }

  .acd-p-40 {
    --p: 40;
  }

  .acd-p-41 {
    --p: 41;
  }

  .acd-p-42 {
    --p: 42;
  }

  .acd-p-43 {
    --p: 43;
  }

  .acd-p-44 {
    --p: 44;
  }

  .acd-p-45 {
    --p: 45;
  }

  .acd-p-46 {
    --p: 46;
  }

  .acd-p-47 {
    --p: 47;
  }

  .acd-p-48 {
    --p: 48;
  }

  .acd-p-49 {
    --p: 49;
  }

  .acd-p-50 {
    --p: 50;
  }

  .acd-p-51 {
    --p: 51;
  }

  .acd-p-52 {
    --p: 52;
  }

  .acd-p-53 {
    --p: 53;
  }

  .acd-p-54 {
    --p: 54;
  }

  .acd-p-55 {
    --p: 55;
  }

  .acd-p-56 {
    --p: 56;
  }

  .acd-p-57 {
    --p: 57;
  }

  .acd-p-58 {
    --p: 58;
  }

  .acd-p-59 {
    --p: 59;
  }

  .acd-p-60 {
    --p: 60;
  }

  .acd-p-61 {
    --p: 61;
  }

  .acd-p-62 {
    --p: 62;
  }

  .acd-p-63 {
    --p: 63;
  }

  .acd-p-64 {
    --p: 64;
  }

  .acd-p-65 {
    --p: 65;
  }

  .acd-p-66 {
    --p: 66;
  }

  .acd-p-67 {
    --p: 67;
  }

  .acd-p-68 {
    --p: 68;
  }

  .acd-p-69 {
    --p: 69;
  }

  .acd-p-70 {
    --p: 70;
  }

  .acd-p-71 {
    --p: 71;
  }

  .acd-p-72 {
    --p: 72;
  }

  .acd-p-73 {
    --p: 73;
  }

  .acd-p-74 {
    --p: 74;
  }

  .acd-p-75 {
    --p: 75;
  }

  .acd-p-76 {
    --p: 76;
  }

  .acd-p-77 {
    --p: 77;
  }

  .acd-p-78 {
    --p: 78;
  }

  .acd-p-79 {
    --p: 79;
  }

  .acd-p-80 {
    --p: 80;
  }

  .acd-p-81 {
    --p: 81;
  }

  .acd-p-82 {
    --p: 82;
  }

  .acd-p-83 {
    --p: 83;
  }

  .acd-p-84 {
    --p: 84;
  }

  .acd-p-85 {
    --p: 85;
  }

  .acd-p-86 {
    --p: 86;
  }

  .acd-p-87 {
    --p: 87;
  }

  .acd-p-88 {
    --p: 88;
  }

  .acd-p-89 {
    --p: 89;
  }

  .acd-p-90 {
    --p: 90;
  }

  .acd-p-91 {
    --p: 91;
  }

  .acd-p-92 {
    --p: 92;
  }

  .acd-p-93 {
    --p: 93;
  }

  .acd-p-94 {
    --p: 94;
  }

  .acd-p-95 {
    --p: 95;
  }

  .acd-p-96 {
    --p: 96;
  }

  .acd-p-97 {
    --p: 97;
  }

  .acd-p-98 {
    --p: 98;
  }

  .acd-p-99 {
    --p: 99;
  }

  .acd-p-100 {
    --p: 100;
  }

  /* A second channel, for components that need two values at once — a term
   band needs both where it starts and how wide it is. */
  .acd-q-0 {
    --q: 0;
  }

  .acd-q-1 {
    --q: 1;
  }

  .acd-q-2 {
    --q: 2;
  }

  .acd-q-3 {
    --q: 3;
  }

  .acd-q-4 {
    --q: 4;
  }

  .acd-q-5 {
    --q: 5;
  }

  .acd-q-6 {
    --q: 6;
  }

  .acd-q-7 {
    --q: 7;
  }

  .acd-q-8 {
    --q: 8;
  }

  .acd-q-9 {
    --q: 9;
  }

  .acd-q-10 {
    --q: 10;
  }

  .acd-q-11 {
    --q: 11;
  }

  .acd-q-12 {
    --q: 12;
  }

  .acd-q-13 {
    --q: 13;
  }

  .acd-q-14 {
    --q: 14;
  }

  .acd-q-15 {
    --q: 15;
  }

  .acd-q-16 {
    --q: 16;
  }

  .acd-q-17 {
    --q: 17;
  }

  .acd-q-18 {
    --q: 18;
  }

  .acd-q-19 {
    --q: 19;
  }

  .acd-q-20 {
    --q: 20;
  }

  .acd-q-21 {
    --q: 21;
  }

  .acd-q-22 {
    --q: 22;
  }

  .acd-q-23 {
    --q: 23;
  }

  .acd-q-24 {
    --q: 24;
  }

  .acd-q-25 {
    --q: 25;
  }

  .acd-q-26 {
    --q: 26;
  }

  .acd-q-27 {
    --q: 27;
  }

  .acd-q-28 {
    --q: 28;
  }

  .acd-q-29 {
    --q: 29;
  }

  .acd-q-30 {
    --q: 30;
  }

  .acd-q-31 {
    --q: 31;
  }

  .acd-q-32 {
    --q: 32;
  }

  .acd-q-33 {
    --q: 33;
  }

  .acd-q-34 {
    --q: 34;
  }

  .acd-q-35 {
    --q: 35;
  }

  .acd-q-36 {
    --q: 36;
  }

  .acd-q-37 {
    --q: 37;
  }

  .acd-q-38 {
    --q: 38;
  }

  .acd-q-39 {
    --q: 39;
  }

  .acd-q-40 {
    --q: 40;
  }

  .acd-q-41 {
    --q: 41;
  }

  .acd-q-42 {
    --q: 42;
  }

  .acd-q-43 {
    --q: 43;
  }

  .acd-q-44 {
    --q: 44;
  }

  .acd-q-45 {
    --q: 45;
  }

  .acd-q-46 {
    --q: 46;
  }

  .acd-q-47 {
    --q: 47;
  }

  .acd-q-48 {
    --q: 48;
  }

  .acd-q-49 {
    --q: 49;
  }

  .acd-q-50 {
    --q: 50;
  }

  .acd-q-51 {
    --q: 51;
  }

  .acd-q-52 {
    --q: 52;
  }

  .acd-q-53 {
    --q: 53;
  }

  .acd-q-54 {
    --q: 54;
  }

  .acd-q-55 {
    --q: 55;
  }

  .acd-q-56 {
    --q: 56;
  }

  .acd-q-57 {
    --q: 57;
  }

  .acd-q-58 {
    --q: 58;
  }

  .acd-q-59 {
    --q: 59;
  }

  .acd-q-60 {
    --q: 60;
  }

  .acd-q-61 {
    --q: 61;
  }

  .acd-q-62 {
    --q: 62;
  }

  .acd-q-63 {
    --q: 63;
  }

  .acd-q-64 {
    --q: 64;
  }

  .acd-q-65 {
    --q: 65;
  }

  .acd-q-66 {
    --q: 66;
  }

  .acd-q-67 {
    --q: 67;
  }

  .acd-q-68 {
    --q: 68;
  }

  .acd-q-69 {
    --q: 69;
  }

  .acd-q-70 {
    --q: 70;
  }

  .acd-q-71 {
    --q: 71;
  }

  .acd-q-72 {
    --q: 72;
  }

  .acd-q-73 {
    --q: 73;
  }

  .acd-q-74 {
    --q: 74;
  }

  .acd-q-75 {
    --q: 75;
  }

  .acd-q-76 {
    --q: 76;
  }

  .acd-q-77 {
    --q: 77;
  }

  .acd-q-78 {
    --q: 78;
  }

  .acd-q-79 {
    --q: 79;
  }

  .acd-q-80 {
    --q: 80;
  }

  .acd-q-81 {
    --q: 81;
  }

  .acd-q-82 {
    --q: 82;
  }

  .acd-q-83 {
    --q: 83;
  }

  .acd-q-84 {
    --q: 84;
  }

  .acd-q-85 {
    --q: 85;
  }

  .acd-q-86 {
    --q: 86;
  }

  .acd-q-87 {
    --q: 87;
  }

  .acd-q-88 {
    --q: 88;
  }

  .acd-q-89 {
    --q: 89;
  }

  .acd-q-90 {
    --q: 90;
  }

  .acd-q-91 {
    --q: 91;
  }

  .acd-q-92 {
    --q: 92;
  }

  .acd-q-93 {
    --q: 93;
  }

  .acd-q-94 {
    --q: 94;
  }

  .acd-q-95 {
    --q: 95;
  }

  .acd-q-96 {
    --q: 96;
  }

  .acd-q-97 {
    --q: 97;
  }

  .acd-q-98 {
    --q: 98;
  }

  .acd-q-99 {
    --q: 99;
  }

  .acd-q-100 {
    --q: 100;
  }

  .acd-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
    letter-spacing: -0.01em;
  }

  .acd-lbl {
    display: block;
    margin: 0 0 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* ---- status badges ----------------------------------------------------
   Squared with a soft radius, the way a syllabus marks a status. */
  .acd-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 10px;
    border-radius: 7px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 11.5px;
    font-weight: 600;
    line-height: 1.5;
    white-space: nowrap;
    color: var(--bs-secondary-color);
  }

  .acd-badge i {
    font-size: 13px;
  }

  .acd-badge.is-live {
    background: var(--acd-pass-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .acd-badge.is-draft {
    background: var(--acd-watch-soft);
    border-color: rgba(234, 179, 0, 0.34);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .acd-badge.is-closed {
    background: var(--acd-fail-soft);
    border-color: rgba(232, 38, 70, 0.26);
    color: var(--acd-fail);
  }

  .acd-badge.is-accent {
    background: var(--tint-primary);
    border-color: rgba(2, 168, 181, 0.3);
    color: rgb(1.5540983607, 130.5442622951, 140.6459016393);
  }

  /* ============================================================
   2. WORKSPACE HERO + YEAR SPINE
   The hero leads with the year, because in a school every other
   setting is scoped to one.
   ============================================================ */
  .acd-hero {
    position: relative;
    padding: 26px 28px;
    margin-bottom: 26px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow: hidden;
    /* a broad tint sweeping in from the leading edge */
  }

  .acd-hero::before {
    content: "";
    position: absolute;
    inset: 0 auto 0 0;
    width: 46%;
    background: linear-gradient(100deg, var(--tint-primary), rgba(255, 255, 255, 0));
    pointer-events: none;
  }

  .acd-hero>* {
    position: relative;
  }

  @media (max-width: 575.98px) {
    .acd-hero {
      padding: 20px;
    }
  }

  .acd-hero-top {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
  }

  /* the year mark: the academic year set as a plate, since it is the scope
   for everything else on the page */
  .acd-yearmark {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    min-width: 84px;
    padding: 10px 14px;
    border-radius: 16px;
    background: var(--bs-primary);
    color: #fff;
    box-shadow: 0 8px 20px rgba(2, 168, 181, 0.28);
  }

  .acd-yearmark b {
    font-size: 19px;
    font-weight: 700;
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
  }

  .acd-yearmark span {
    margin-top: 2px;
    font-size: 9.5px;
    font-weight: 600;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.72);
  }

  .acd-hero-title {
    margin: 0;
    font-size: 26px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .acd-hero-title {
      font-size: 21px;
    }
  }

  .acd-hero-sub {
    margin: 4px 0 0;
    max-width: 66ch;
    font-size: 13.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  /* the hero's facts, stacked in a plain row of columns divided by rules */
  .acd-hero-facts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(178px, 1fr));
    gap: 16px 0;
    margin-top: 22px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .acd-hero-fact {
    padding: 0 20px;
  }

  .acd-hero-fact:first-child {
    padding-left: 0;
  }

  .acd-hero-fact+.acd-hero-fact {
    border-left: 1px solid var(--bs-border-color);
  }

  .acd-hero-fact span {
    display: block;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .acd-hero-fact strong {
    display: flex;
    align-items: center;
    gap: 7px;
    margin-top: 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 767.98px) {
    .acd-hero-fact {
      padding: 0 14px;
    }

    .acd-hero-fact:first-child {
      padding-left: 14px;
    }

    .acd-hero-fact+.acd-hero-fact {
      border-left: 0;
    }
  }

  .acd-hero-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 20px;
  }

  /* ---- the year spine ---------------------------------------------------
   The whole academic year on one bar, divided into its terms, with a mark
   for today. It is the one drawing that makes the shape of the year legible
   at a glance. */
  .acd-spine {
    position: relative;
    margin-top: 22px;
    padding: 18px 20px 16px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  .acd-spine-bar {
    position: relative;
    display: flex;
    height: 34px;
    border-radius: 8px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  /* one term, sized by the share of the year it occupies */
  .acd-spine-term {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 calc(var(--p, 20) * 1%);
    min-width: 0;
    padding: 0 8px;
    font-size: 11.5px;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: #fff;
    background: var(--bs-primary);
  }

  .acd-spine-term+.acd-spine-term {
    border-left: 2px solid var(--bs-body-bg);
  }

  /* a break between terms reads as a gap, not as teaching time */

  .acd-spine-term.is-break {
    background: var(--acd-border-strong);
    color: var(--bs-emphasis-color);
  }

  .acd-spine-term.is-exam {
    background: rgb(203.4, 155.5923076923, 0);
  }

  .acd-spine-term.is-future {
    background: var(--tint-primary);
    color: rgb(1.331147541, 111.8163934426, 120.468852459);
  }

  /* today, marked across the bar */
  .acd-spine-now {
    position: absolute;
    top: -6px;
    bottom: -6px;
    left: calc(var(--p, 0) * 1%);
    width: 2px;
    background: var(--bs-emphasis-color);
    z-index: 2;
  }

  .acd-spine-now::before {
    content: "";
    position: absolute;
    left: 50%;
    top: -4px;
    width: 9px;
    height: 9px;
    margin-left: -4.5px;
    border-radius: 50%;
    background: var(--bs-emphasis-color);
  }

  .acd-spine-scale {
    display: flex;
    margin-top: 8px;
    font-size: 10.5px;
    color: var(--bs-secondary-color);
  }

  .acd-spine-scale span {
    flex: 1 1 0;
    text-align: center;
  }

  .acd-spine-scale span:first-child {
    text-align: left;
  }

  .acd-spine-scale span:last-child {
    text-align: right;
  }

  /* ============================================================
   3. STICKY SECTION NAVIGATION
   Long — nineteen sections — so it is grouped and scrolls.
   ============================================================ */
  .acd-nav {
    position: sticky;
    top: calc(60px + 16px);
    max-height: calc(100vh - 60px - 32px);
    padding: 8px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow-y: auto;
    /* Bootstrap's `.nav` wraps; in a capped-height column that wraps
     overflow into a second column instead of scrolling. */
    flex-wrap: nowrap;
    overflow-x: hidden;
  }

  .acd-nav>* {
    flex-shrink: 0;
  }

  @media (max-width: 991.98px) {
    .acd-nav {
      position: static;
      max-height: none;
    }
  }

  .acd-nav-hdr {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 14px 12px 6px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.11em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .acd-nav-hdr:first-child {
    padding-top: 6px;
  }

  /* a rule filling the space after the group name */

  .acd-nav-hdr::after {
    content: "";
    flex: 1 1 auto;
    height: 1px;
    background: var(--bs-border-color);
  }

  .acd-nav-link {
    position: relative;
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 8px 12px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    font-size: 13.5px;
    font-weight: 500;
    text-align: left;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .acd-nav-link .acd-nav-txt {
    flex: 1 1 auto;
    min-width: 0;
  }

  /* a count of what the section holds, which is what an administrator
     actually wants to know before opening it */

  .acd-nav-link .acd-nav-n {
    flex-shrink: 0;
    min-width: 22px;
    padding: 1px 6px;
    border-radius: 999px;
    background: var(--bs-secondary-bg);
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 600;
    text-align: center;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  .acd-nav-link:hover {
    background: var(--bs-secondary-bg);
  }

  /* the active section is banded across, with a rule down the leading edge */

  .acd-nav-link.active {
    background: var(--tint-primary);
    color: rgb(1.2196721311, 102.4524590164, 110.3803278689);
    font-weight: 600;
  }

  .acd-nav-link.active::before {
    content: "";
    position: absolute;
    left: 0;
    top: 6px;
    bottom: 6px;
    width: 3px;
    border-radius: 0 3px 3px 0;
    background: var(--bs-primary);
  }

  .acd-nav-link.active .acd-nav-n {
    background: var(--bs-primary);
    color: #fff;
  }

  .acd-nav-foot {
    margin-top: 8px;
    padding: 14px 12px 6px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   4. CONFIGURATION CARDS + SETTING ROWS
   ============================================================ */
  .acd-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .acd-card:hover {
    border-color: var(--acd-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* height: 100% is for equal-height cards sitting side by side in a
   multi-column row (see the col-xl-6 pairs further down this page). A
   full-width col-12 card is always alone on its line, so there's nothing
   to match heights with - but it was still inheriting whatever tall
   cross-size the row's OTHER wrapped lines produced, stretching its
   .acd-card-body (flex: 1 1 auto) into a block of empty space under a
   four-row card. Full-width cards should just size to their content. */
  .col-12>.acd-card {
    height: auto;
  }

  /* the header carries a coloured rule beneath rather than a filled band */
  .acd-card-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 18px 13px;
    border-bottom: 1px solid var(--bs-border-color);
    flex-wrap: wrap;
  }

  .acd-card-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: 12px;
    background: var(--tint-primary);
    color: rgb(1.5540983607, 130.5442622951, 140.6459016393);
    font-size: 19px;
  }

  .acd-card-ic.is-pass {
    background: var(--acd-pass-soft);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .acd-card-ic.is-watch {
    background: var(--acd-watch-soft);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .acd-card-ic.is-fail {
    background: var(--acd-fail-soft);
    color: var(--acd-fail);
  }

  .acd-card-ic.is-alt {
    background: rgba(74, 0, 229, 0.08);
    color: var(--acd-alt);
  }

  .acd-card-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acd-card-title+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .acd-card-body {
    flex: 1 1 auto;
    padding: 6px 18px 14px;
  }

  .acd-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    padding: 11px 18px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* ---- setting row ------------------------------------------------------
   Name and value on one line with a dot leader between, the way a syllabus
   or a prospectus sets out a specification. */
  .acd-row {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding: 10px 0;
  }

  .acd-row+.acd-row {
    border-top: 1px solid var(--bs-border-color);
  }

  .acd-row .acd-row-key {
    flex-shrink: 0;
    max-width: 58%;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .acd-row .acd-row-key small {
    display: block;
    font-size: 11.5px;
    line-height: 1.5;
    color: var(--bs-secondary-color);
  }

  .acd-row .acd-row-fill {
    flex: 1 1 auto;
    min-width: 12px;
    height: 1px;
    border-bottom: 1px dotted var(--acd-border-strong);
    transform: translateY(-3px);
  }

  .acd-row .acd-row-val {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    font-weight: 600;
    text-align: right;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .acd-row {
      flex-wrap: wrap;
    }

    .acd-row .acd-row-key {
      max-width: 100%;
    }

    .acd-row .acd-row-fill {
      display: none;
    }

    .acd-row .acd-row-val {
      width: 100%;
      justify-content: flex-start;
    }
  }

  .acd-input,
  .acd-select {
    min-width: 140px;
    padding: 6px 11px;
    border-radius: var(--radius-sm);
    background-color: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    font-weight: 400;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .acd-input:focus,
  .acd-select:focus {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
    outline: 0;
  }

  @media (max-width: 575.98px) {

    .acd-input,
    .acd-select {
      min-width: 0;
      width: 100%;
    }
  }

  /* ============================================================
   5. TERM RIBBON
   Each term as a card with its dates, weeks and what it contains.
   ============================================================ */
  .acd-term {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 12px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .acd-term:hover {
    box-shadow: var(--shadow-lift);
  }

  /* the term in progress is banded down its leading edge */

  .acd-term.is-current {
    border-color: rgba(2, 168, 181, 0.34);
    box-shadow: inset 3px 0 0 var(--bs-primary);
  }

  .acd-term.is-done {
    background: var(--bs-secondary-bg);
  }

  .acd-term.is-done .acd-term-name {
    opacity: 0.78;
  }

  .acd-term-top {
    display: flex;
    align-items: center;
    gap: 10px;
  }

  /* the term's ordinal, set large and hollow */
  .acd-term-n {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    flex-shrink: 0;
    border-radius: 13px;
    border: 2px solid var(--bs-primary);
    font-size: 15px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: rgb(1.4426229508, 121.1803278689, 130.5573770492);
  }

  .acd-term-name {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acd-term-name+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  /* how far through the term the school is */
  .acd-term-bar {
    height: 6px;
    border-radius: 999px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  .acd-term-bar span {
    display: block;
    height: 100%;
    width: calc(var(--p, 0) * 1%);
    border-radius: inherit;
    background: var(--bs-primary);
  }

  .acd-term-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   6. GRADE AND SECTION TREE
   A grade and the sections beneath it, drawn with the bracket a
   timetable or a register would use.
   ============================================================ */
  .acd-tree {
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .acd-tree+.acd-tree {
    margin-top: 10px;
  }

  .acd-tree-head {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
  }

  .acd-tree-grade {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 54px;
    padding: 7px 12px;
    border-radius: 10px;
    background: var(--bs-emphasis-color);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: #fff;
  }

  .acd-tree-name {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acd-tree-name+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  /* the sections, hanging off a bracket */
  .acd-tree-body {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 14px 0 0;
    padding: 14px 0 0 22px;
    border-top: 1px solid var(--bs-border-color);
    /* the trunk */
  }

  .acd-tree-body::before {
    content: "";
    position: absolute;
    left: 8px;
    top: 14px;
    bottom: 14px;
    width: 1px;
    background: var(--acd-border-strong);
  }

  .acd-section {
    position: relative;
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 8px 12px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 12.5px;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .acd-section:hover {
    border-color: var(--bs-primary);
    background: var(--tint-primary);
  }

  .acd-section b {
    font-weight: 700;
  }

  .acd-section span {
    color: var(--bs-secondary-color);
  }

  /* a section that is over its intended size */

  .acd-section.is-full {
    border-color: rgba(234, 179, 0, 0.4);
    background: var(--acd-watch-soft);
  }

  .acd-section.is-full span {
    color: rgb(132, 100.9743589744, 0);
  }

  /* ============================================================
   7. SUBJECT CHIPS + CREDIT METER
   ============================================================ */
  .acd-subjects {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
  }

  .acd-subject {
    display: inline-flex;
    align-items: center;
    gap: 9px;
    padding: 8px 12px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 12.5px;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .acd-subject:hover {
    border-color: var(--acd-border-strong);
    box-shadow: var(--shadow);
  }

  /* the credit value, carried in its own well */

  .acd-subject .acd-subject-cr {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 22px;
    height: 22px;
    border-radius: 6px;
    background: var(--bs-secondary-bg);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    color: var(--bs-secondary-color);
  }

  .acd-subject.is-core {
    border-color: rgba(2, 168, 181, 0.34);
  }

  .acd-subject.is-core .acd-subject-cr {
    background: var(--bs-primary);
    color: #fff;
  }

  .acd-subject.is-elective {
    border-style: dashed;
  }

  .acd-subject.is-elective .acd-subject-cr {
    background: rgba(74, 0, 229, 0.1);
    color: var(--acd-alt);
  }

  .acd-subject.is-practical .acd-subject-cr {
    background: var(--acd-pass-soft);
    color: rgb(18.5295774648, 135.4084507042, 16.3915492958);
  }

  /* ============================================================
   8. GRADING LADDER
   Bands from the top down, each showing the range it covers and
   the point it starts, because a grading scale is read as a scale.
   ============================================================ */
  .acd-ladder {
    border-radius: var(--radius);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .acd-band {
    display: grid;
    grid-template-columns: 62px 92px minmax(0, 1fr) 74px;
    align-items: center;
    gap: 14px;
    padding: 11px 16px;
    background: var(--bs-body-bg);
    transition: var(--transition);
  }

  .acd-band+.acd-band {
    border-top: 1px solid var(--bs-border-color);
  }

  .acd-band:hover {
    background: var(--bs-secondary-bg);
  }

  /* below the pass mark the whole band reads as a failure */

  .acd-band.is-fail {
    background: var(--acd-fail-soft);
  }

  .acd-band.is-fail .acd-band-letter {
    background: var(--acd-fail);
    color: #fff;
  }

  @media (max-width: 767.98px) {
    .acd-band {
      grid-template-columns: 54px minmax(0, 1fr) 64px;
    }

    .acd-band .acd-band-track {
      grid-column: 1/-1;
    }
  }

  .acd-band-letter {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 6px 0;
    border-radius: 8px;
    background: var(--bs-emphasis-color);
    font-size: 13px;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: #fff;
  }

  .acd-band-range {
    font-family: var(--font-mono);
    font-size: 12.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the band's extent, drawn against the full 0-100 scale */
  .acd-band-track {
    position: relative;
    height: 8px;
    border-radius: 999px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  .acd-band-track span {
    position: absolute;
    top: 0;
    bottom: 0;
    left: calc(var(--p, 0) * 1%);
    width: calc(var(--q, 0) * 1%);
    border-radius: 999px;
    background: var(--bs-primary);
  }

  .is-fail .acd-band-track span {
    background: var(--acd-fail);
  }

  .acd-band-point {
    font-family: var(--font-mono);
    font-size: 12.5px;
    font-weight: 600;
    text-align: right;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   9. POLICY STATEMENTS + RULE ROWS
   ============================================================ */
  /* a policy set out as a statement, with the reasoning beneath it */
  .acd-policy {
    display: flex;
    gap: 14px;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-left: 3px solid var(--bs-primary);
  }

  .acd-policy+.acd-policy {
    margin-top: 10px;
  }

  .acd-policy.is-watch {
    border-left-color: var(--acd-watch);
  }

  .acd-policy.is-fail {
    border-left-color: var(--acd-fail);
  }

  .acd-policy.is-off {
    border-left-color: var(--acd-border-strong);
    background: var(--bs-secondary-bg);
  }

  .acd-policy.is-off .acd-policy-txt {
    opacity: 0.72;
  }

  .acd-policy-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: 12px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-emphasis-color);
    font-size: 18px;
  }

  .acd-policy-body {
    flex: 1 1 auto;
    min-width: 0;
  }

  /* the rule itself, set larger than the prose that explains it */
  .acd-policy-rule {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    line-height: 1.5;
    color: var(--bs-emphasis-color);
  }

  .acd-policy-rule b {
    color: rgb(1.2196721311, 102.4524590164, 110.3803278689);
  }

  .acd-policy-txt {
    margin: 6px 0 0;
    font-size: 12.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  .acd-policy-act {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-shrink: 0;
  }

  /* ============================================================
   10. CALENDAR STRIP
   Twelve months across, tinted by what happens in each.
   ============================================================ */
  .acd-months {
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    gap: 1px;
    border-radius: var(--radius-sm);
    background: var(--bs-border-color);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  @media (max-width: 991.98px) {
    .acd-months {
      grid-template-columns: repeat(6, minmax(0, 1fr));
    }
  }

  @media (max-width: 575.98px) {
    .acd-months {
      grid-template-columns: repeat(3, minmax(0, 1fr));
    }
  }

  .acd-month {
    padding: 12px 6px;
    background: var(--bs-body-bg);
    text-align: center;
  }

  .acd-month b {
    display: block;
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .acd-month span {
    display: block;
    margin-top: 3px;
    font-family: var(--font-mono);
    font-size: 10.5px;
    color: var(--bs-secondary-color);
  }

  .acd-month.is-term {
    background: var(--tint-primary);
  }

  .acd-month.is-exam {
    background: var(--acd-watch-soft);
  }

  .acd-month.is-break {
    background: var(--bs-secondary-bg);
  }

  .acd-month.is-break b,
  .acd-month.is-break span {
    color: var(--bs-secondary-color);
  }

  .acd-month.is-now {
    box-shadow: inset 0 0 0 2px var(--bs-emphasis-color);
  }

  /* a dated entry in the calendar */
  .acd-event {
    display: grid;
    grid-template-columns: 58px minmax(0, 1fr) auto;
    align-items: center;
    gap: 14px;
    padding: 11px 0;
  }

  .acd-event+.acd-event {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .acd-event {
      grid-template-columns: 58px minmax(0, 1fr);
      row-gap: 8px;
    }
  }

  /* the date, set as a torn-off leaf */
  .acd-event-date {
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 6px 0;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  .acd-event-date b {
    font-size: 16px;
    font-weight: 700;
    line-height: 1.1;
    font-variant-numeric: tabular-nums;
    color: var(--bs-emphasis-color);
  }

  .acd-event-date span {
    font-size: 9.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .acd-event-body {
    min-width: 0;
  }

  .acd-event-body strong {
    display: block;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acd-event-body span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   11. PREMIUM ACCORDION + MILESTONE TRACK
   ============================================================ */
  .acd-acc {
    border-radius: var(--radius);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .acd-acc .accordion-item {
    border: 0;
    background: var(--bs-body-bg);
  }

  .acd-acc .accordion-item+.accordion-item {
    border-top: 1px solid var(--bs-border-color);
  }

  .acd-acc .accordion-button {
    gap: 11px;
    padding: 15px 18px;
    background: var(--bs-body-bg);
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    box-shadow: none;
  }

  .acd-acc .accordion-button::after {
    margin-left: 0;
  }

  .acd-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: rgb(1.2196721311, 102.4524590164, 110.3803278689);
  }

  .acd-acc .accordion-button:focus {
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .acd-acc .accordion-button i {
    font-size: 17px;
  }

  .acd-acc .acd-acc-spacer {
    margin-left: auto;
  }

  .acd-acc .accordion-body {
    padding: 4px 18px 18px;
  }

  /* ---- milestone track --------------------------------------------------
   A descending list where each stage carries a large hollow numeral in its
   own gutter, and a continuous band runs behind them. */
  .acd-track {
    position: relative;
    padding: 4px 0;
  }

  .acd-track::before {
    content: "";
    position: absolute;
    left: 27px;
    top: 12px;
    bottom: 12px;
    width: 2px;
    background: var(--bs-tertiary-bg);
  }

  @media (max-width: 575.98px) {
    .acd-track::before {
      left: 19px;
    }
  }

  .acd-track-step {
    position: relative;
    display: grid;
    grid-template-columns: 56px minmax(0, 1fr);
    gap: 18px;
    padding-bottom: 16px;
  }

  .acd-track-step:last-child {
    padding-bottom: 0;
  }

  @media (max-width: 575.98px) {
    .acd-track-step {
      grid-template-columns: 40px minmax(0, 1fr);
      gap: 12px;
    }
  }

  /* the numeral, hollow so the band reads through the column */
  .acd-track-n {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    border-radius: 18px;
    background: var(--bs-body-bg);
    border: 2px solid var(--bs-tertiary-bg);
    font-size: 19px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--bs-secondary-color);
  }

  .is-done .acd-track-n {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    color: #fff;
  }

  .is-current .acd-track-n {
    border-color: var(--bs-primary);
    color: rgb(1.2196721311, 102.4524590164, 110.3803278689);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  @media (max-width: 575.98px) {
    .acd-track-n {
      width: 40px;
      height: 40px;
      border-radius: 13px;
      font-size: 15px;
    }
  }

  .acd-track-card {
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .acd-track-card h6 {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acd-track-card time {
    display: block;
    margin-top: 2px;
    font-family: var(--font-mono);
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .acd-track-card p {
    margin: 7px 0 0;
    font-size: 12.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   12. RECOMMENDATION FOLDERS
   Filed rather than listed: each card carries a tab naming what
   kind of note it is.
   ============================================================ */
  .acd-folder {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 10px;
    height: 100%;
    margin-top: 13px;
    padding: 18px;
    border-radius: 0 var(--radius) var(--radius) var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .acd-folder:hover {
    box-shadow: var(--shadow-lift);
  }

  /* the tab, sitting above the card's top-left corner */
  .acd-folder-tab {
    position: absolute;
    left: -1px;
    top: -13px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 26px;
    padding: 0 14px;
    border-radius: 8px 8px 0 0;
    background: var(--bs-primary);
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #fff;
  }

  .acd-folder-tab i {
    font-size: 13px;
  }

  .acd-folder-tab.is-watch {
    background: rgb(183, 139.9871794872, 0);
  }

  .acd-folder-tab.is-alt {
    background: var(--acd-alt);
  }

  .acd-folder-tab.is-pass {
    background: rgb(23.5098591549, 171.8028169014, 20.7971830986);
  }

  .acd-folder-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acd-folder-txt {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  .acd-folder-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   13. OFFCANVAS, PANEL HELPERS, EMPTY STATE
   ============================================================ */
  /* The theme sets `.offcanvas.offcanvas-end { width: auto !important }`; the
   workspace has to match on three classes to beat it. */
  .offcanvas.offcanvas-end.acd-canvas {
    width: 88% !important;
    max-width: 1180px !important;
  }

  .acd-canvas-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 20px 24px;
    background: var(--tint-primary);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .acd-canvas-body {
    padding: 22px 24px 30px;
  }

  .acd-sect+.acd-sect {
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .acd-sect-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 13px;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .acd-sect-title i {
    font-size: 16px;
    color: rgb(1.5540983607, 130.5442622951, 140.6459016393);
  }

  /* a validation result */
  .acd-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .acd-check+.acd-check {
    border-top: 1px solid var(--bs-border-color);
  }

  .acd-check>i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 16px;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .acd-check.is-watch>i {
    color: rgb(142.2, 108.7769230769, 0);
  }

  .acd-check.is-fail>i {
    color: var(--acd-fail);
  }

  .acd-check span {
    display: block;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* a preview of what a setting produces, framed as a printed page */
  .acd-preview {
    padding: 18px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .acd-preview .acd-preview-head {
    padding-bottom: 12px;
    margin-bottom: 12px;
    border-bottom: 2px solid var(--bs-emphasis-color);
    text-align: center;
  }

  .acd-preview .acd-preview-head b {
    display: block;
    font-size: 14px;
    font-weight: 700;
    letter-spacing: 0.04em;
    color: var(--bs-emphasis-color);
  }

  .acd-preview .acd-preview-head span {
    display: block;
    margin-top: 2px;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .acd-preview .acd-preview-line {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 6px 0;
    font-size: 12px;
    color: var(--bs-emphasis-color);
  }

  .acd-preview .acd-preview-line+.acd-preview-line {
    border-top: 1px dotted var(--bs-border-color);
  }

  .acd-preview .acd-preview-line b {
    font-family: var(--font-mono);
    font-weight: 600;
  }

  /* audit entries */
  .acd-audit {
    display: grid;
    grid-template-columns: 150px minmax(0, 1fr);
    gap: 14px;
    padding: 11px 0;
  }

  .acd-audit+.acd-audit {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .acd-audit {
      grid-template-columns: minmax(0, 1fr);
      gap: 3px;
    }
  }

  .acd-audit-when {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .acd-audit-when strong {
    display: block;
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acd-audit-what {
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .acd-audit-what span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ---- empty state ------------------------------------------------------- */
  .acd-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 5px;
    padding: 38px 24px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--acd-border-strong);
  }

  .acd-empty i {
    font-size: 30px;
    color: var(--bs-secondary-color);
    opacity: 0.8;
  }

  .acd-empty h6 {
    margin: 8px 0 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .acd-empty p {
    margin: 0;
    max-width: 48ch;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .acd-empty .btn {
    margin-top: 10px;
  }

  /*===== language settings =====*/
  /*-----------------
    Language & Localization — multilingual configuration components

    A shared vocabulary for the Language & Localization Configuration Center:
    languages and their locales, translation coverage, regional formats,
    right-to-left support and typography. Class prefix `lng-`.

    The visual language is a translation console. The pieces are the ones only
    a localization tool needs: a language plate that shows the native name in
    its own script, coverage split three ways between translated, needing
    review and missing, string keys paired with their translations, format
    samples rendered as they will actually appear, and a mirror that shows a
    layout flipping for right-to-left.

    It borrows nothing from `_financial-settings.scss`, `_email-settings.scss`,
    `_sms-settings.scss`, `_account-security.scss`, `_academic-settings.scss`
    or `_settings.scss`, and overrides nothing in them.

    Contents
      1.  Tokens + shared pieces
      2.  Workspace hero + locale summary
      3.  Sticky section navigation
      4.  Configuration cards + setting rows
      5.  Language plates
      6.  Coverage bars
      7.  String keys and translation pairs
      8.  Format samples
      9.  RTL mirror + font specimens
      10. Premium accordion + milestone filmstrip
      11. Insight cards
      12. Offcanvas, panel helpers and empty state
-----------------*/
  /* ============================================================
   1. TOKENS + SHARED PIECES
   ============================================================ */
  :root {
    --lng-border: var(--bs-border-color, #E9EDF4);
    --lng-border-strong: #EDF1F6;
    /* The theme's `$pink-transparent` is a salmon rather than a tint, so a
     proper one is mixed at the density the other `-transparent` colours use. */
    --lng-done: #1ABE17;
    --lng-done-soft: var(--tint-success);
    --lng-review: #EAB300;
    --lng-review-soft: var(--tint-warning);
    --lng-missing: #E82646;
    --lng-missing-soft: var(--tint-danger);
  }

  @media (prefers-reduced-motion: reduce) {

    [class*=lng-],
    [class*=lng-]::before,
    [class*=lng-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* Carries a numeric value into CSS without an inline style. Coverage needs
   three at once — translated, needing review, missing — so there are three
   channels rather than one. */
  .lng-p-0 {
    --p: 0;
  }

  .lng-q-0 {
    --q: 0;
  }

  .lng-r-0 {
    --r: 0;
  }

  .lng-p-1 {
    --p: 1;
  }

  .lng-q-1 {
    --q: 1;
  }

  .lng-r-1 {
    --r: 1;
  }

  .lng-p-2 {
    --p: 2;
  }

  .lng-q-2 {
    --q: 2;
  }

  .lng-r-2 {
    --r: 2;
  }

  .lng-p-3 {
    --p: 3;
  }

  .lng-q-3 {
    --q: 3;
  }

  .lng-r-3 {
    --r: 3;
  }

  .lng-p-4 {
    --p: 4;
  }

  .lng-q-4 {
    --q: 4;
  }

  .lng-r-4 {
    --r: 4;
  }

  .lng-p-5 {
    --p: 5;
  }

  .lng-q-5 {
    --q: 5;
  }

  .lng-r-5 {
    --r: 5;
  }

  .lng-p-6 {
    --p: 6;
  }

  .lng-q-6 {
    --q: 6;
  }

  .lng-r-6 {
    --r: 6;
  }

  .lng-p-7 {
    --p: 7;
  }

  .lng-q-7 {
    --q: 7;
  }

  .lng-r-7 {
    --r: 7;
  }

  .lng-p-8 {
    --p: 8;
  }

  .lng-q-8 {
    --q: 8;
  }

  .lng-r-8 {
    --r: 8;
  }

  .lng-p-9 {
    --p: 9;
  }

  .lng-q-9 {
    --q: 9;
  }

  .lng-r-9 {
    --r: 9;
  }

  .lng-p-10 {
    --p: 10;
  }

  .lng-q-10 {
    --q: 10;
  }

  .lng-r-10 {
    --r: 10;
  }

  .lng-p-11 {
    --p: 11;
  }

  .lng-q-11 {
    --q: 11;
  }

  .lng-r-11 {
    --r: 11;
  }

  .lng-p-12 {
    --p: 12;
  }

  .lng-q-12 {
    --q: 12;
  }

  .lng-r-12 {
    --r: 12;
  }

  .lng-p-13 {
    --p: 13;
  }

  .lng-q-13 {
    --q: 13;
  }

  .lng-r-13 {
    --r: 13;
  }

  .lng-p-14 {
    --p: 14;
  }

  .lng-q-14 {
    --q: 14;
  }

  .lng-r-14 {
    --r: 14;
  }

  .lng-p-15 {
    --p: 15;
  }

  .lng-q-15 {
    --q: 15;
  }

  .lng-r-15 {
    --r: 15;
  }

  .lng-p-16 {
    --p: 16;
  }

  .lng-q-16 {
    --q: 16;
  }

  .lng-r-16 {
    --r: 16;
  }

  .lng-p-17 {
    --p: 17;
  }

  .lng-q-17 {
    --q: 17;
  }

  .lng-r-17 {
    --r: 17;
  }

  .lng-p-18 {
    --p: 18;
  }

  .lng-q-18 {
    --q: 18;
  }

  .lng-r-18 {
    --r: 18;
  }

  .lng-p-19 {
    --p: 19;
  }

  .lng-q-19 {
    --q: 19;
  }

  .lng-r-19 {
    --r: 19;
  }

  .lng-p-20 {
    --p: 20;
  }

  .lng-q-20 {
    --q: 20;
  }

  .lng-r-20 {
    --r: 20;
  }

  .lng-p-21 {
    --p: 21;
  }

  .lng-q-21 {
    --q: 21;
  }

  .lng-r-21 {
    --r: 21;
  }

  .lng-p-22 {
    --p: 22;
  }

  .lng-q-22 {
    --q: 22;
  }

  .lng-r-22 {
    --r: 22;
  }

  .lng-p-23 {
    --p: 23;
  }

  .lng-q-23 {
    --q: 23;
  }

  .lng-r-23 {
    --r: 23;
  }

  .lng-p-24 {
    --p: 24;
  }

  .lng-q-24 {
    --q: 24;
  }

  .lng-r-24 {
    --r: 24;
  }

  .lng-p-25 {
    --p: 25;
  }

  .lng-q-25 {
    --q: 25;
  }

  .lng-r-25 {
    --r: 25;
  }

  .lng-p-26 {
    --p: 26;
  }

  .lng-q-26 {
    --q: 26;
  }

  .lng-r-26 {
    --r: 26;
  }

  .lng-p-27 {
    --p: 27;
  }

  .lng-q-27 {
    --q: 27;
  }

  .lng-r-27 {
    --r: 27;
  }

  .lng-p-28 {
    --p: 28;
  }

  .lng-q-28 {
    --q: 28;
  }

  .lng-r-28 {
    --r: 28;
  }

  .lng-p-29 {
    --p: 29;
  }

  .lng-q-29 {
    --q: 29;
  }

  .lng-r-29 {
    --r: 29;
  }

  .lng-p-30 {
    --p: 30;
  }

  .lng-q-30 {
    --q: 30;
  }

  .lng-r-30 {
    --r: 30;
  }

  .lng-p-31 {
    --p: 31;
  }

  .lng-q-31 {
    --q: 31;
  }

  .lng-r-31 {
    --r: 31;
  }

  .lng-p-32 {
    --p: 32;
  }

  .lng-q-32 {
    --q: 32;
  }

  .lng-r-32 {
    --r: 32;
  }

  .lng-p-33 {
    --p: 33;
  }

  .lng-q-33 {
    --q: 33;
  }

  .lng-r-33 {
    --r: 33;
  }

  .lng-p-34 {
    --p: 34;
  }

  .lng-q-34 {
    --q: 34;
  }

  .lng-r-34 {
    --r: 34;
  }

  .lng-p-35 {
    --p: 35;
  }

  .lng-q-35 {
    --q: 35;
  }

  .lng-r-35 {
    --r: 35;
  }

  .lng-p-36 {
    --p: 36;
  }

  .lng-q-36 {
    --q: 36;
  }

  .lng-r-36 {
    --r: 36;
  }

  .lng-p-37 {
    --p: 37;
  }

  .lng-q-37 {
    --q: 37;
  }

  .lng-r-37 {
    --r: 37;
  }

  .lng-p-38 {
    --p: 38;
  }

  .lng-q-38 {
    --q: 38;
  }

  .lng-r-38 {
    --r: 38;
  }

  .lng-p-39 {
    --p: 39;
  }

  .lng-q-39 {
    --q: 39;
  }

  .lng-r-39 {
    --r: 39;
  }

  .lng-p-40 {
    --p: 40;
  }

  .lng-q-40 {
    --q: 40;
  }

  .lng-r-40 {
    --r: 40;
  }

  .lng-p-41 {
    --p: 41;
  }

  .lng-q-41 {
    --q: 41;
  }

  .lng-r-41 {
    --r: 41;
  }

  .lng-p-42 {
    --p: 42;
  }

  .lng-q-42 {
    --q: 42;
  }

  .lng-r-42 {
    --r: 42;
  }

  .lng-p-43 {
    --p: 43;
  }

  .lng-q-43 {
    --q: 43;
  }

  .lng-r-43 {
    --r: 43;
  }

  .lng-p-44 {
    --p: 44;
  }

  .lng-q-44 {
    --q: 44;
  }

  .lng-r-44 {
    --r: 44;
  }

  .lng-p-45 {
    --p: 45;
  }

  .lng-q-45 {
    --q: 45;
  }

  .lng-r-45 {
    --r: 45;
  }

  .lng-p-46 {
    --p: 46;
  }

  .lng-q-46 {
    --q: 46;
  }

  .lng-r-46 {
    --r: 46;
  }

  .lng-p-47 {
    --p: 47;
  }

  .lng-q-47 {
    --q: 47;
  }

  .lng-r-47 {
    --r: 47;
  }

  .lng-p-48 {
    --p: 48;
  }

  .lng-q-48 {
    --q: 48;
  }

  .lng-r-48 {
    --r: 48;
  }

  .lng-p-49 {
    --p: 49;
  }

  .lng-q-49 {
    --q: 49;
  }

  .lng-r-49 {
    --r: 49;
  }

  .lng-p-50 {
    --p: 50;
  }

  .lng-q-50 {
    --q: 50;
  }

  .lng-r-50 {
    --r: 50;
  }

  .lng-p-51 {
    --p: 51;
  }

  .lng-q-51 {
    --q: 51;
  }

  .lng-r-51 {
    --r: 51;
  }

  .lng-p-52 {
    --p: 52;
  }

  .lng-q-52 {
    --q: 52;
  }

  .lng-r-52 {
    --r: 52;
  }

  .lng-p-53 {
    --p: 53;
  }

  .lng-q-53 {
    --q: 53;
  }

  .lng-r-53 {
    --r: 53;
  }

  .lng-p-54 {
    --p: 54;
  }

  .lng-q-54 {
    --q: 54;
  }

  .lng-r-54 {
    --r: 54;
  }

  .lng-p-55 {
    --p: 55;
  }

  .lng-q-55 {
    --q: 55;
  }

  .lng-r-55 {
    --r: 55;
  }

  .lng-p-56 {
    --p: 56;
  }

  .lng-q-56 {
    --q: 56;
  }

  .lng-r-56 {
    --r: 56;
  }

  .lng-p-57 {
    --p: 57;
  }

  .lng-q-57 {
    --q: 57;
  }

  .lng-r-57 {
    --r: 57;
  }

  .lng-p-58 {
    --p: 58;
  }

  .lng-q-58 {
    --q: 58;
  }

  .lng-r-58 {
    --r: 58;
  }

  .lng-p-59 {
    --p: 59;
  }

  .lng-q-59 {
    --q: 59;
  }

  .lng-r-59 {
    --r: 59;
  }

  .lng-p-60 {
    --p: 60;
  }

  .lng-q-60 {
    --q: 60;
  }

  .lng-r-60 {
    --r: 60;
  }

  .lng-p-61 {
    --p: 61;
  }

  .lng-q-61 {
    --q: 61;
  }

  .lng-r-61 {
    --r: 61;
  }

  .lng-p-62 {
    --p: 62;
  }

  .lng-q-62 {
    --q: 62;
  }

  .lng-r-62 {
    --r: 62;
  }

  .lng-p-63 {
    --p: 63;
  }

  .lng-q-63 {
    --q: 63;
  }

  .lng-r-63 {
    --r: 63;
  }

  .lng-p-64 {
    --p: 64;
  }

  .lng-q-64 {
    --q: 64;
  }

  .lng-r-64 {
    --r: 64;
  }

  .lng-p-65 {
    --p: 65;
  }

  .lng-q-65 {
    --q: 65;
  }

  .lng-r-65 {
    --r: 65;
  }

  .lng-p-66 {
    --p: 66;
  }

  .lng-q-66 {
    --q: 66;
  }

  .lng-r-66 {
    --r: 66;
  }

  .lng-p-67 {
    --p: 67;
  }

  .lng-q-67 {
    --q: 67;
  }

  .lng-r-67 {
    --r: 67;
  }

  .lng-p-68 {
    --p: 68;
  }

  .lng-q-68 {
    --q: 68;
  }

  .lng-r-68 {
    --r: 68;
  }

  .lng-p-69 {
    --p: 69;
  }

  .lng-q-69 {
    --q: 69;
  }

  .lng-r-69 {
    --r: 69;
  }

  .lng-p-70 {
    --p: 70;
  }

  .lng-q-70 {
    --q: 70;
  }

  .lng-r-70 {
    --r: 70;
  }

  .lng-p-71 {
    --p: 71;
  }

  .lng-q-71 {
    --q: 71;
  }

  .lng-r-71 {
    --r: 71;
  }

  .lng-p-72 {
    --p: 72;
  }

  .lng-q-72 {
    --q: 72;
  }

  .lng-r-72 {
    --r: 72;
  }

  .lng-p-73 {
    --p: 73;
  }

  .lng-q-73 {
    --q: 73;
  }

  .lng-r-73 {
    --r: 73;
  }

  .lng-p-74 {
    --p: 74;
  }

  .lng-q-74 {
    --q: 74;
  }

  .lng-r-74 {
    --r: 74;
  }

  .lng-p-75 {
    --p: 75;
  }

  .lng-q-75 {
    --q: 75;
  }

  .lng-r-75 {
    --r: 75;
  }

  .lng-p-76 {
    --p: 76;
  }

  .lng-q-76 {
    --q: 76;
  }

  .lng-r-76 {
    --r: 76;
  }

  .lng-p-77 {
    --p: 77;
  }

  .lng-q-77 {
    --q: 77;
  }

  .lng-r-77 {
    --r: 77;
  }

  .lng-p-78 {
    --p: 78;
  }

  .lng-q-78 {
    --q: 78;
  }

  .lng-r-78 {
    --r: 78;
  }

  .lng-p-79 {
    --p: 79;
  }

  .lng-q-79 {
    --q: 79;
  }

  .lng-r-79 {
    --r: 79;
  }

  .lng-p-80 {
    --p: 80;
  }

  .lng-q-80 {
    --q: 80;
  }

  .lng-r-80 {
    --r: 80;
  }

  .lng-p-81 {
    --p: 81;
  }

  .lng-q-81 {
    --q: 81;
  }

  .lng-r-81 {
    --r: 81;
  }

  .lng-p-82 {
    --p: 82;
  }

  .lng-q-82 {
    --q: 82;
  }

  .lng-r-82 {
    --r: 82;
  }

  .lng-p-83 {
    --p: 83;
  }

  .lng-q-83 {
    --q: 83;
  }

  .lng-r-83 {
    --r: 83;
  }

  .lng-p-84 {
    --p: 84;
  }

  .lng-q-84 {
    --q: 84;
  }

  .lng-r-84 {
    --r: 84;
  }

  .lng-p-85 {
    --p: 85;
  }

  .lng-q-85 {
    --q: 85;
  }

  .lng-r-85 {
    --r: 85;
  }

  .lng-p-86 {
    --p: 86;
  }

  .lng-q-86 {
    --q: 86;
  }

  .lng-r-86 {
    --r: 86;
  }

  .lng-p-87 {
    --p: 87;
  }

  .lng-q-87 {
    --q: 87;
  }

  .lng-r-87 {
    --r: 87;
  }

  .lng-p-88 {
    --p: 88;
  }

  .lng-q-88 {
    --q: 88;
  }

  .lng-r-88 {
    --r: 88;
  }

  .lng-p-89 {
    --p: 89;
  }

  .lng-q-89 {
    --q: 89;
  }

  .lng-r-89 {
    --r: 89;
  }

  .lng-p-90 {
    --p: 90;
  }

  .lng-q-90 {
    --q: 90;
  }

  .lng-r-90 {
    --r: 90;
  }

  .lng-p-91 {
    --p: 91;
  }

  .lng-q-91 {
    --q: 91;
  }

  .lng-r-91 {
    --r: 91;
  }

  .lng-p-92 {
    --p: 92;
  }

  .lng-q-92 {
    --q: 92;
  }

  .lng-r-92 {
    --r: 92;
  }

  .lng-p-93 {
    --p: 93;
  }

  .lng-q-93 {
    --q: 93;
  }

  .lng-r-93 {
    --r: 93;
  }

  .lng-p-94 {
    --p: 94;
  }

  .lng-q-94 {
    --q: 94;
  }

  .lng-r-94 {
    --r: 94;
  }

  .lng-p-95 {
    --p: 95;
  }

  .lng-q-95 {
    --q: 95;
  }

  .lng-r-95 {
    --r: 95;
  }

  .lng-p-96 {
    --p: 96;
  }

  .lng-q-96 {
    --q: 96;
  }

  .lng-r-96 {
    --r: 96;
  }

  .lng-p-97 {
    --p: 97;
  }

  .lng-q-97 {
    --q: 97;
  }

  .lng-r-97 {
    --r: 97;
  }

  .lng-p-98 {
    --p: 98;
  }

  .lng-q-98 {
    --q: 98;
  }

  .lng-r-98 {
    --r: 98;
  }

  .lng-p-99 {
    --p: 99;
  }

  .lng-q-99 {
    --q: 99;
  }

  .lng-r-99 {
    --r: 99;
  }

  .lng-p-100 {
    --p: 100;
  }

  .lng-q-100 {
    --q: 100;
  }

  .lng-r-100 {
    --r: 100;
  }

  .lng-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
    letter-spacing: -0.01em;
  }

  .lng-lbl {
    display: block;
    margin: 0 0 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* ---- the locale code ---------------------------------------------------
   `en-IN`, `ta-IN`, `ar-AE` — set in the machine face and given its own
   well, because in a localization tool the code is the identifier and the
   name is only a label. */
  .lng-code {
    display: inline-flex;
    align-items: center;
    padding: 2px 8px;
    border-radius: 6px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--bs-emphasis-color);
  }

  .lng-code.is-accent {
    background: var(--tint-primary);
    border-color: rgba(232, 62, 140, 0.26);
    color: rgb(208.0111111111, 24.7888888889, 108.8555555556);
  }

  /* geometry, typography and surface come from the shared badge component */

  .lng-badge i {
    font-size: 13px;
  }

  .lng-badge.is-done {
    background: var(--lng-done-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .lng-badge.is-review {
    background: var(--lng-review-soft);
    border-color: rgba(234, 179, 0, 0.34);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .lng-badge.is-missing {
    background: var(--lng-missing-soft);
    border-color: rgba(232, 38, 70, 0.26);
    color: var(--lng-missing);
  }

  .lng-badge.is-accent {
    background: var(--tint-primary);
    border-color: rgba(232, 62, 140, 0.26);
    color: rgb(208.0111111111, 24.7888888889, 108.8555555556);
  }

  /* ============================================================
   2. WORKSPACE HERO + LOCALE SUMMARY
   ============================================================ */
  .lng-hero {
    position: relative;
    padding: 26px 28px;
    margin-bottom: 26px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow: hidden;
    /* a soft corner wash, drawn from the trailing edge */
  }

  .lng-hero::before {
    content: "";
    position: absolute;
    right: -80px;
    top: -80px;
    width: 320px;
    height: 320px;
    border-radius: 50%;
    background: var(--tint-primary);
    pointer-events: none;
  }

  .lng-hero>* {
    position: relative;
  }

  @media (max-width: 575.98px) {
    .lng-hero {
      padding: 20px;
    }
  }

  .lng-hero-top {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
  }

  /* the default locale, set as a glyph carrying its own script */
  .lng-hero-crest {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 62px;
    height: 62px;
    border-radius: 20px;
    background: var(--bs-primary);
    color: #fff;
    box-shadow: 0 8px 20px rgba(232, 62, 140, 0.28);
  }

  .lng-hero-crest b {
    font-size: 19px;
    font-weight: 700;
    line-height: 1;
  }

  .lng-hero-crest span {
    margin-top: 3px;
    font-family: var(--font-mono);
    font-size: 9.5px;
    letter-spacing: 0.06em;
    color: rgba(255, 255, 255, 0.78);
  }

  .lng-hero-title {
    margin: 0;
    font-size: 26px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .lng-hero-title {
      font-size: 21px;
    }
  }

  .lng-hero-sub {
    margin: 4px 0 0;
    max-width: 66ch;
    font-size: 13.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  /* the hero's facts, in a plain boxed strip */
  .lng-hero-facts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(184px, 1fr));
    gap: 1px;
    margin-top: 22px;
    border-radius: var(--radius);
    background: var(--bs-border-color);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .lng-hero-fact {
    padding: 13px 16px;
    background: var(--bs-body-bg);
  }

  .lng-hero-fact span {
    display: block;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .lng-hero-fact strong {
    display: flex;
    align-items: center;
    gap: 7px;
    margin-top: 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lng-hero-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 20px;
  }

  /* ============================================================
   3. STICKY SECTION NAVIGATION
   Each entry carries its locale-ish shorthand on the right.
   ============================================================ */
  .lng-nav {
    position: sticky;
    top: calc(60px + 16px);
    max-height: calc(100vh - 60px - 32px);
    padding: 10px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow-y: auto;
    /* Bootstrap's `.nav` wraps; in a capped-height column that wraps
     overflow into a second column instead of scrolling. */
    flex-wrap: nowrap;
    overflow-x: hidden;
  }

  .lng-nav>* {
    flex-shrink: 0;
  }

  @media (max-width: 991.98px) {
    .lng-nav {
      position: static;
      max-height: none;
    }
  }

  .lng-nav-link {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 9px 12px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    font-size: 13.5px;
    font-weight: 500;
    text-align: left;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .lng-nav-link>i {
    flex-shrink: 0;
    font-size: 17px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  .lng-nav-link .lng-nav-txt {
    flex: 1 1 auto;
    min-width: 0;
  }

  .lng-nav-link .lng-nav-hint {
    flex-shrink: 0;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 600;
    color: var(--bs-secondary-color);
  }

  .lng-nav-link:hover {
    background: var(--bs-secondary-bg);
  }

  /* the active section is inked in the accent and its glyph reversed out */

  .lng-nav-link.active {
    background: var(--bs-primary);
    color: #fff;
    font-weight: 600;
    box-shadow: 0 4px 12px rgba(232, 62, 140, 0.24);
  }

  .lng-nav-link.active>i,
  .lng-nav-link.active .lng-nav-hint {
    color: rgba(255, 255, 255, 0.82);
  }

  .lng-nav-foot {
    margin-top: 10px;
    padding: 14px 12px 6px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   4. CONFIGURATION CARDS + SETTING ROWS
   ============================================================ */
  .lng-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .lng-card:hover {
    border-color: var(--lng-border-strong);
    box-shadow: var(--shadow-lift);
  }

  .lng-card-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 18px 13px;
  }

  @media (max-width: 575.98px) {
    .lng-card-head {
      flex-wrap: wrap;
    }
  }

  .lng-card-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: 12px;
    background: var(--tint-primary);
    color: rgb(208.0111111111, 24.7888888889, 108.8555555556);
    font-size: 19px;
  }

  .lng-card-ic.is-done {
    background: var(--lng-done-soft);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .lng-card-ic.is-review {
    background: var(--lng-review-soft);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .lng-card-ic.is-missing {
    background: var(--lng-missing-soft);
    color: var(--lng-missing);
  }

  .lng-card-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lng-card-title+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .lng-card-body {
    flex: 1 1 auto;
    padding: 0 18px 14px;
  }

  .lng-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    padding: 11px 18px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* ---- setting row ------------------------------------------------------
   Two columns: the name on the left, the value and its control on the
   right, separated by a hairline rather than a leader. */
  .lng-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 10px 16px;
    padding: 11px 0;
  }

  .lng-row+.lng-row {
    border-top: 1px solid var(--bs-border-color);
  }

  .lng-row .lng-row-key {
    min-width: 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .lng-row .lng-row-key small {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .lng-row .lng-row-val {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .lng-row {
      grid-template-columns: minmax(0, 1fr);
    }

    .lng-row .lng-row-val {
      justify-content: flex-start;
    }
  }

  .lng-input,
  .lng-select {
    min-width: 150px;
    padding: 6px 11px;
    border-radius: var(--radius-sm);
    background-color: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    font-weight: 400;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .lng-input:focus,
  .lng-select:focus {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
    outline: 0;
  }

  @media (max-width: 575.98px) {

    .lng-input,
    .lng-select {
      min-width: 0;
      width: 100%;
    }
  }

  /* ============================================================
   5. LANGUAGE PLATES
   The native name is set large in its own script, because that is
   what a speaker of the language recognises. The English name and
   the locale code sit beneath it as metadata.
   ============================================================ */
  .lng-plate {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 14px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .lng-plate:hover {
    border-color: var(--lng-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* the default language is ringed rather than filled */

  .lng-plate.is-default {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .lng-plate.is-off {
    background: var(--bs-secondary-bg);
  }

  .lng-plate.is-off .lng-plate-native,
  .lng-plate.is-off .lng-plate-name {
    opacity: 0.66;
  }

  .lng-plate-top {
    display: flex;
    align-items: flex-start;
    gap: 12px;
  }

  /* the native name — the one element on the page set at display size */
  .lng-plate-native {
    margin: 0;
    font-size: 24px;
    font-weight: 600;
    line-height: 1.25;
    color: var(--bs-emphasis-color);
    /* a right-to-left language sets its own name the right way round */
  }

  .lng-plate-native.is-rtl {
    direction: rtl;
    text-align: right;
  }

  .lng-plate-name {
    margin: 3px 0 0;
    font-size: 12.5px;
    color: var(--bs-secondary-color);
  }

  .lng-plate-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
  }

  .lng-plate-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   6. COVERAGE BARS
   Translation is never simply done or not done. A string can be
   translated, translated but awaiting review, or missing, so the
   bar is split three ways and labelled underneath.
   ============================================================ */
  .lng-cover .lng-cover-bar {
    display: flex;
    height: 8px;
    border-radius: 999px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  .lng-cover .lng-cover-bar i {
    display: block;
    height: 100%;
  }

  /* translated and approved */

  .lng-cover .lng-cover-bar i:nth-child(1) {
    width: calc(var(--p, 0) * 1%);
    background: var(--lng-done);
  }

  /* translated, awaiting review */

  .lng-cover .lng-cover-bar i:nth-child(2) {
    width: calc(var(--q, 0) * 1%);
    background: var(--lng-review);
  }

  /* missing */

  .lng-cover .lng-cover-bar i:nth-child(3) {
    width: calc(var(--r, 0) * 1%);
    background: var(--lng-missing);
  }

  .lng-cover .lng-cover-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: 7px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .lng-cover .lng-cover-meta b {
    font-family: var(--font-mono);
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* the key to the bar, used once per pane rather than on every card */
  .lng-legend {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-wrap: wrap;
  }

  .lng-legend span {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .lng-legend i {
    width: 10px;
    height: 10px;
    border-radius: 3px;
    background: var(--bs-tertiary-bg);
  }

  .lng-legend i.is-done {
    background: var(--lng-done);
  }

  .lng-legend i.is-review {
    background: var(--lng-review);
  }

  .lng-legend i.is-missing {
    background: var(--lng-missing);
  }

  /* ============================================================
   7. STRING KEYS AND TRANSLATION PAIRS
   ============================================================ */
  .lng-string {
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .lng-string+.lng-string {
    margin-top: 10px;
  }

  /* the key itself, on a dark strip so it reads as an identifier */
  .lng-key {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 4px 10px;
    border-radius: 6px;
    background: #101828;
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: rgba(255, 255, 255, 0.84);
    word-break: break-all;
  }

  .lng-key i {
    font-size: 13px;
    color: rgba(255, 255, 255, 0.45);
  }

  /* one language's rendering of that key */
  .lng-pair {
    display: grid;
    grid-template-columns: 84px minmax(0, 1fr) auto;
    align-items: center;
    gap: 14px;
    padding: 9px 0;
  }

  .lng-pair+.lng-pair {
    border-top: 1px dashed var(--bs-border-color);
  }

  .lng-pair .lng-pair-val {
    min-width: 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
    word-break: break-word;
  }

  .lng-pair .lng-pair-val.is-rtl {
    direction: rtl;
    text-align: right;
  }

  /* an untranslated string falls back and says so */

  .lng-pair .lng-pair-val.is-missing {
    color: var(--bs-secondary-color);
    font-style: italic;
  }

  @media (max-width: 575.98px) {
    .lng-pair {
      grid-template-columns: minmax(0, 1fr) auto;
    }

    .lng-pair .lng-code {
      grid-column: 1/-1;
      justify-self: start;
    }
  }

  /* ============================================================
   8. FORMAT SAMPLES
   A format setting is only meaningful rendered, so the sample is
   the largest thing in the card and the rule beneath it.
   ============================================================ */
  .lng-sample {
    display: flex;
    flex-direction: column;
    gap: 6px;
    height: 100%;
    padding: 16px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .lng-sample:hover {
    border-color: var(--bs-primary);
    box-shadow: var(--shadow);
  }

  .lng-sample-out {
    font-family: var(--font-mono);
    font-size: 19px;
    font-weight: 600;
    line-height: 1.3;
    color: var(--bs-emphasis-color);
    word-break: break-word;
  }

  @media (max-width: 575.98px) {
    .lng-sample-out {
      font-size: 16px;
    }
  }

  .lng-sample-rule {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: rgb(208.0111111111, 24.7888888889, 108.8555555556);
    word-break: break-all;
  }

  .lng-sample-name {
    margin: 0;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   9. RTL MIRROR + FONT SPECIMENS
   ============================================================ */
  /* two miniature layouts side by side, one flipped, so the effect of
   turning right-to-left on is visible rather than described */
  .lng-mirror {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
  }

  @media (max-width: 575.98px) {
    .lng-mirror {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  .lng-mock {
    display: flex;
    height: 132px;
    border-radius: var(--radius-sm);
    border: 1px solid var(--bs-border-color);
    background: var(--bs-body-bg);
    overflow: hidden;
  }

  .lng-mock.is-rtl {
    flex-direction: row-reverse;
  }

  .lng-mock.is-rtl .lng-mock-side {
    border-right: 0;
    border-left: 1px solid var(--bs-border-color);
  }

  .lng-mock.is-rtl .lng-mock-line {
    margin-left: 0;
    margin-right: auto;
  }

  .lng-mock-side {
    flex-shrink: 0;
    width: 38px;
    padding: 8px 6px;
    background: var(--bs-secondary-bg);
    border-right: 1px solid var(--bs-border-color);
    display: flex;
    flex-direction: column;
    gap: 6px;
  }

  .lng-mock-main {
    flex: 1 1 auto;
    padding: 8px;
    display: flex;
    flex-direction: column;
    gap: 7px;
  }

  .lng-mock-bar {
    height: 10px;
    border-radius: 3px;
    background: var(--bs-secondary-bg);
  }

  .lng-mock-bar.is-accent {
    background: var(--bs-primary);
  }

  .lng-mock-line {
    height: 6px;
    border-radius: 3px;
    background: var(--bs-tertiary-bg);
    width: calc(var(--p, 100) * 1%);
    margin-left: 0;
  }

  .lng-mock-card {
    flex: 1 1 auto;
    border-radius: 6px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  .lng-mock-cap {
    display: block;
    margin-top: 6px;
    font-family: var(--font-mono);
    font-size: 10.5px;
    text-align: center;
    color: var(--bs-secondary-color);
  }

  /* ---- font specimen ----------------------------------------------------- */
  .lng-font {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .lng-font+.lng-font {
    margin-top: 8px;
  }

  @media (max-width: 767.98px) {
    .lng-font {
      flex-wrap: wrap;
    }
  }

  .lng-font-meta {
    flex-shrink: 0;
    width: 172px;
  }

  .lng-font-meta strong {
    display: block;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lng-font-meta span {
    display: block;
    margin-top: 2px;
    font-family: var(--font-mono);
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  @media (max-width: 767.98px) {
    .lng-font-meta {
      width: 100%;
    }
  }

  /* the specimen line, set at reading size in the face being described */
  .lng-font-spec {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 17px;
    line-height: 1.5;
    color: var(--bs-emphasis-color);
    word-break: break-word;
  }

  .lng-font-spec.is-rtl {
    direction: rtl;
    text-align: right;
  }

  /* ============================================================
   10. PREMIUM ACCORDION + MILESTONE FILMSTRIP
   ============================================================ */
  .lng-acc {
    border-radius: var(--radius);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .lng-acc .accordion-item {
    border: 0;
    background: var(--bs-body-bg);
  }

  .lng-acc .accordion-item+.accordion-item {
    border-top: 1px solid var(--bs-border-color);
  }

  .lng-acc .accordion-button {
    gap: 11px;
    padding: 15px 18px;
    background: var(--bs-body-bg);
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    box-shadow: none;
  }

  .lng-acc .accordion-button::after {
    margin-left: 0;
  }

  .lng-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: rgb(198.8972222222, 23.7027777778, 104.0861111111);
  }

  .lng-acc .accordion-button:focus {
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .lng-acc .accordion-button i {
    font-size: 17px;
  }

  .lng-acc .lng-acc-spacer {
    margin-left: auto;
  }

  .lng-acc .accordion-body {
    padding: 4px 18px 18px;
  }

  /* ---- milestone filmstrip ----------------------------------------------
   Stages laid along a rule that runs above them, so the sequence reads
   left to right and scrolls sideways when it will not fit. */
  .lng-strip {
    position: relative;
    display: flex;
    gap: 16px;
    padding: 26px 20px 20px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow-x: auto;
    scrollbar-width: thin;
  }

  .lng-strip-stage {
    position: relative;
    flex: 1 0 234px;
    padding-top: 22px;
    /* the rule running along the top of the strip */
  }

  .lng-strip-stage::before {
    content: "";
    position: absolute;
    left: 0;
    right: -16px;
    top: 8px;
    height: 2px;
    background: var(--bs-tertiary-bg);
  }

  .lng-strip-stage:last-child::before {
    right: 0;
  }

  .lng-strip-stage.is-done::before {
    background: var(--lng-done);
  }

  /* the marker sitting on the rule */

  .lng-strip-stage::after {
    content: "";
    position: absolute;
    left: 0;
    top: 3px;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 3px solid var(--bs-tertiary-bg);
  }

  .lng-strip-stage.is-done::after {
    background: var(--lng-done);
    border-color: var(--lng-done);
  }

  .lng-strip-stage.is-current::after {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  .lng-strip-when {
    display: block;
    font-family: var(--font-mono);
    font-size: 10.5px;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .lng-strip-title {
    margin: 3px 0 0;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lng-strip-txt {
    margin: 6px 0 0;
    font-size: 12px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   11. INSIGHT CARDS
   Each carries the locale it concerns as a watermark, so a column
   of them can be scanned by language rather than by heading.
   ============================================================ */
  .lng-insight {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 9px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
    transition: var(--transition);
  }

  .lng-insight:hover {
    box-shadow: var(--shadow-lift);
  }

  .lng-insight>* {
    position: relative;
  }

  /* the watermark, large and very pale behind the text */
  .lng-insight-mark {
    position: absolute;
    right: 30px;
    top: 20px;
    font-family: var(--font-mono);
    font-size: 20px;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -0.03em;
    color: var(--bs-secondary-bg);
    pointer-events: none;
    user-select: none;
  }

  .lng-insight-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lng-insight-txt {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  .lng-insight-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   12. OFFCANVAS, PANEL HELPERS, EMPTY STATE
   ============================================================ */
  /* The theme sets `.offcanvas.offcanvas-end { width: auto !important }`; the
   workspace has to match on three classes to beat it. */
  .offcanvas.offcanvas-end.lng-canvas {
    width: 88% !important;
    max-width: 1160px !important;
  }

  .lng-canvas-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 20px 24px;
    background: var(--tint-primary);
    border-bottom: 1px solid var(--bs-border-color);
  }

  .lng-canvas-body {
    padding: 22px 24px 30px;
  }

  .lng-sect+.lng-sect {
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .lng-sect-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 13px;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .lng-sect-title i {
    font-size: 16px;
    color: rgb(208.0111111111, 24.7888888889, 108.8555555556);
  }

  /* a validation result */
  .lng-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .lng-check+.lng-check {
    border-top: 1px solid var(--bs-border-color);
  }

  .lng-check>i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 16px;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .lng-check.is-review>i {
    color: rgb(142.2, 108.7769230769, 0);
  }

  .lng-check.is-missing>i {
    color: var(--lng-missing);
  }

  .lng-check span {
    display: block;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* audit entries */
  .lng-audit {
    display: grid;
    grid-template-columns: 150px minmax(0, 1fr);
    gap: 14px;
    padding: 11px 0;
  }

  .lng-audit+.lng-audit {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .lng-audit {
      grid-template-columns: minmax(0, 1fr);
      gap: 3px;
    }
  }

  .lng-audit-when {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .lng-audit-when strong {
    display: block;
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lng-audit-what {
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .lng-audit-what span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ---- empty state ------------------------------------------------------- */
  .lng-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 5px;
    padding: 38px 24px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--lng-border-strong);
  }

  .lng-empty i {
    font-size: 30px;
    color: var(--bs-secondary-color);
    opacity: 0.8;
  }

  .lng-empty h6 {
    margin: 8px 0 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .lng-empty p {
    margin: 0;
    max-width: 48ch;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .lng-empty .btn {
    margin-top: 10px;
  }

  /*===== system settings =====*/
  /*-----------------
    System Settings — platform configuration components

    A shared vocabulary for the System Settings & Platform Configuration
    Center: services and their health, performance, storage, maintenance,
    APIs, backups and the environment all of it runs in. Class prefix `sys-`.

    The visual language is a cloud console. The pieces are the ones an
    infrastructure operator reads first: a loud environment ribbon, service
    tiles carrying a state light and thirty days of uptime as a strip of
    cells, resources measured as thin inline gauges, disk usage as a single
    partitioned bar, versions in the machine face, and a deployment stair for
    the sequence of events that produced the current state.

    It borrows nothing from `_financial-settings.scss`, `_email-settings.scss`,
    `_sms-settings.scss`, `_account-security.scss`, `_academic-settings.scss`,
    `_language-settings.scss` or `_settings.scss`, and overrides nothing in
    them.

    Contents
      1.  Tokens + shared pieces
      2.  Workspace hero + environment ribbon
      3.  Sticky section navigation
      4.  Configuration cards + setting rows
      5.  Service tiles + uptime strip
      6.  Resource gauges
      7.  Disk partitions
      8.  Maintenance control
      9.  Endpoint and job rows
      10. Premium accordion + deployment stair
      11. Advisory cards
      12. Offcanvas, panel helpers and empty state
-----------------*/
  /* ============================================================
   1. TOKENS + SHARED PIECES
   ============================================================ */
  :root {
    --sys-border: var(--bs-border-color, #E9EDF4);
    --sys-border-strong: #EDF1F6;
    /* `$secondary` is a pale cyan, which is right for a fill but not for ink,
     so the accent keeps a darkened companion for text and glyphs. */
    --sys-up: #1ABE17;
    --sys-up-soft: #E8F9E8;
    --sys-down: #E82646;
    --sys-down-soft: #FDE9ED;
  }

  @media (prefers-reduced-motion: reduce) {

    [class*=sys-],
    [class*=sys-]::before,
    [class*=sys-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* Carries a numeric value into CSS without an inline style. Two channels,
   because a partition needs both its width and its offset. */
  .sys-p-0 {
    --p: 0;
  }

  .sys-q-0 {
    --q: 0;
  }

  .sys-p-1 {
    --p: 1;
  }

  .sys-q-1 {
    --q: 1;
  }

  .sys-p-2 {
    --p: 2;
  }

  .sys-q-2 {
    --q: 2;
  }

  .sys-p-3 {
    --p: 3;
  }

  .sys-q-3 {
    --q: 3;
  }

  .sys-p-4 {
    --p: 4;
  }

  .sys-q-4 {
    --q: 4;
  }

  .sys-p-5 {
    --p: 5;
  }

  .sys-q-5 {
    --q: 5;
  }

  .sys-p-6 {
    --p: 6;
  }

  .sys-q-6 {
    --q: 6;
  }

  .sys-p-7 {
    --p: 7;
  }

  .sys-q-7 {
    --q: 7;
  }

  .sys-p-8 {
    --p: 8;
  }

  .sys-q-8 {
    --q: 8;
  }

  .sys-p-9 {
    --p: 9;
  }

  .sys-q-9 {
    --q: 9;
  }

  .sys-p-10 {
    --p: 10;
  }

  .sys-q-10 {
    --q: 10;
  }

  .sys-p-11 {
    --p: 11;
  }

  .sys-q-11 {
    --q: 11;
  }

  .sys-p-12 {
    --p: 12;
  }

  .sys-q-12 {
    --q: 12;
  }

  .sys-p-13 {
    --p: 13;
  }

  .sys-q-13 {
    --q: 13;
  }

  .sys-p-14 {
    --p: 14;
  }

  .sys-q-14 {
    --q: 14;
  }

  .sys-p-15 {
    --p: 15;
  }

  .sys-q-15 {
    --q: 15;
  }

  .sys-p-16 {
    --p: 16;
  }

  .sys-q-16 {
    --q: 16;
  }

  .sys-p-17 {
    --p: 17;
  }

  .sys-q-17 {
    --q: 17;
  }

  .sys-p-18 {
    --p: 18;
  }

  .sys-q-18 {
    --q: 18;
  }

  .sys-p-19 {
    --p: 19;
  }

  .sys-q-19 {
    --q: 19;
  }

  .sys-p-20 {
    --p: 20;
  }

  .sys-q-20 {
    --q: 20;
  }

  .sys-p-21 {
    --p: 21;
  }

  .sys-q-21 {
    --q: 21;
  }

  .sys-p-22 {
    --p: 22;
  }

  .sys-q-22 {
    --q: 22;
  }

  .sys-p-23 {
    --p: 23;
  }

  .sys-q-23 {
    --q: 23;
  }

  .sys-p-24 {
    --p: 24;
  }

  .sys-q-24 {
    --q: 24;
  }

  .sys-p-25 {
    --p: 25;
  }

  .sys-q-25 {
    --q: 25;
  }

  .sys-p-26 {
    --p: 26;
  }

  .sys-q-26 {
    --q: 26;
  }

  .sys-p-27 {
    --p: 27;
  }

  .sys-q-27 {
    --q: 27;
  }

  .sys-p-28 {
    --p: 28;
  }

  .sys-q-28 {
    --q: 28;
  }

  .sys-p-29 {
    --p: 29;
  }

  .sys-q-29 {
    --q: 29;
  }

  .sys-p-30 {
    --p: 30;
  }

  .sys-q-30 {
    --q: 30;
  }

  .sys-p-31 {
    --p: 31;
  }

  .sys-q-31 {
    --q: 31;
  }

  .sys-p-32 {
    --p: 32;
  }

  .sys-q-32 {
    --q: 32;
  }

  .sys-p-33 {
    --p: 33;
  }

  .sys-q-33 {
    --q: 33;
  }

  .sys-p-34 {
    --p: 34;
  }

  .sys-q-34 {
    --q: 34;
  }

  .sys-p-35 {
    --p: 35;
  }

  .sys-q-35 {
    --q: 35;
  }

  .sys-p-36 {
    --p: 36;
  }

  .sys-q-36 {
    --q: 36;
  }

  .sys-p-37 {
    --p: 37;
  }

  .sys-q-37 {
    --q: 37;
  }

  .sys-p-38 {
    --p: 38;
  }

  .sys-q-38 {
    --q: 38;
  }

  .sys-p-39 {
    --p: 39;
  }

  .sys-q-39 {
    --q: 39;
  }

  .sys-p-40 {
    --p: 40;
  }

  .sys-q-40 {
    --q: 40;
  }

  .sys-p-41 {
    --p: 41;
  }

  .sys-q-41 {
    --q: 41;
  }

  .sys-p-42 {
    --p: 42;
  }

  .sys-q-42 {
    --q: 42;
  }

  .sys-p-43 {
    --p: 43;
  }

  .sys-q-43 {
    --q: 43;
  }

  .sys-p-44 {
    --p: 44;
  }

  .sys-q-44 {
    --q: 44;
  }

  .sys-p-45 {
    --p: 45;
  }

  .sys-q-45 {
    --q: 45;
  }

  .sys-p-46 {
    --p: 46;
  }

  .sys-q-46 {
    --q: 46;
  }

  .sys-p-47 {
    --p: 47;
  }

  .sys-q-47 {
    --q: 47;
  }

  .sys-p-48 {
    --p: 48;
  }

  .sys-q-48 {
    --q: 48;
  }

  .sys-p-49 {
    --p: 49;
  }

  .sys-q-49 {
    --q: 49;
  }

  .sys-p-50 {
    --p: 50;
  }

  .sys-q-50 {
    --q: 50;
  }

  .sys-p-51 {
    --p: 51;
  }

  .sys-q-51 {
    --q: 51;
  }

  .sys-p-52 {
    --p: 52;
  }

  .sys-q-52 {
    --q: 52;
  }

  .sys-p-53 {
    --p: 53;
  }

  .sys-q-53 {
    --q: 53;
  }

  .sys-p-54 {
    --p: 54;
  }

  .sys-q-54 {
    --q: 54;
  }

  .sys-p-55 {
    --p: 55;
  }

  .sys-q-55 {
    --q: 55;
  }

  .sys-p-56 {
    --p: 56;
  }

  .sys-q-56 {
    --q: 56;
  }

  .sys-p-57 {
    --p: 57;
  }

  .sys-q-57 {
    --q: 57;
  }

  .sys-p-58 {
    --p: 58;
  }

  .sys-q-58 {
    --q: 58;
  }

  .sys-p-59 {
    --p: 59;
  }

  .sys-q-59 {
    --q: 59;
  }

  .sys-p-60 {
    --p: 60;
  }

  .sys-q-60 {
    --q: 60;
  }

  .sys-p-61 {
    --p: 61;
  }

  .sys-q-61 {
    --q: 61;
  }

  .sys-p-62 {
    --p: 62;
  }

  .sys-q-62 {
    --q: 62;
  }

  .sys-p-63 {
    --p: 63;
  }

  .sys-q-63 {
    --q: 63;
  }

  .sys-p-64 {
    --p: 64;
  }

  .sys-q-64 {
    --q: 64;
  }

  .sys-p-65 {
    --p: 65;
  }

  .sys-q-65 {
    --q: 65;
  }

  .sys-p-66 {
    --p: 66;
  }

  .sys-q-66 {
    --q: 66;
  }

  .sys-p-67 {
    --p: 67;
  }

  .sys-q-67 {
    --q: 67;
  }

  .sys-p-68 {
    --p: 68;
  }

  .sys-q-68 {
    --q: 68;
  }

  .sys-p-69 {
    --p: 69;
  }

  .sys-q-69 {
    --q: 69;
  }

  .sys-p-70 {
    --p: 70;
  }

  .sys-q-70 {
    --q: 70;
  }

  .sys-p-71 {
    --p: 71;
  }

  .sys-q-71 {
    --q: 71;
  }

  .sys-p-72 {
    --p: 72;
  }

  .sys-q-72 {
    --q: 72;
  }

  .sys-p-73 {
    --p: 73;
  }

  .sys-q-73 {
    --q: 73;
  }

  .sys-p-74 {
    --p: 74;
  }

  .sys-q-74 {
    --q: 74;
  }

  .sys-p-75 {
    --p: 75;
  }

  .sys-q-75 {
    --q: 75;
  }

  .sys-p-76 {
    --p: 76;
  }

  .sys-q-76 {
    --q: 76;
  }

  .sys-p-77 {
    --p: 77;
  }

  .sys-q-77 {
    --q: 77;
  }

  .sys-p-78 {
    --p: 78;
  }

  .sys-q-78 {
    --q: 78;
  }

  .sys-p-79 {
    --p: 79;
  }

  .sys-q-79 {
    --q: 79;
  }

  .sys-p-80 {
    --p: 80;
  }

  .sys-q-80 {
    --q: 80;
  }

  .sys-p-81 {
    --p: 81;
  }

  .sys-q-81 {
    --q: 81;
  }

  .sys-p-82 {
    --p: 82;
  }

  .sys-q-82 {
    --q: 82;
  }

  .sys-p-83 {
    --p: 83;
  }

  .sys-q-83 {
    --q: 83;
  }

  .sys-p-84 {
    --p: 84;
  }

  .sys-q-84 {
    --q: 84;
  }

  .sys-p-85 {
    --p: 85;
  }

  .sys-q-85 {
    --q: 85;
  }

  .sys-p-86 {
    --p: 86;
  }

  .sys-q-86 {
    --q: 86;
  }

  .sys-p-87 {
    --p: 87;
  }

  .sys-q-87 {
    --q: 87;
  }

  .sys-p-88 {
    --p: 88;
  }

  .sys-q-88 {
    --q: 88;
  }

  .sys-p-89 {
    --p: 89;
  }

  .sys-q-89 {
    --q: 89;
  }

  .sys-p-90 {
    --p: 90;
  }

  .sys-q-90 {
    --q: 90;
  }

  .sys-p-91 {
    --p: 91;
  }

  .sys-q-91 {
    --q: 91;
  }

  .sys-p-92 {
    --p: 92;
  }

  .sys-q-92 {
    --q: 92;
  }

  .sys-p-93 {
    --p: 93;
  }

  .sys-q-93 {
    --q: 93;
  }

  .sys-p-94 {
    --p: 94;
  }

  .sys-q-94 {
    --q: 94;
  }

  .sys-p-95 {
    --p: 95;
  }

  .sys-q-95 {
    --q: 95;
  }

  .sys-p-96 {
    --p: 96;
  }

  .sys-q-96 {
    --q: 96;
  }

  .sys-p-97 {
    --p: 97;
  }

  .sys-q-97 {
    --q: 97;
  }

  .sys-p-98 {
    --p: 98;
  }

  .sys-q-98 {
    --q: 98;
  }

  .sys-p-99 {
    --p: 99;
  }

  .sys-q-99 {
    --q: 99;
  }

  .sys-p-100 {
    --p: 100;
  }

  .sys-q-100 {
    --q: 100;
  }

  /* The stair uses its own channel for depth. */
  .sys-i-0 {
    --i: 0;
  }

  .sys-i-1 {
    --i: 1;
  }

  .sys-i-2 {
    --i: 2;
  }

  .sys-i-3 {
    --i: 3;
  }

  .sys-i-4 {
    --i: 4;
  }

  .sys-i-5 {
    --i: 5;
  }

  .sys-i-6 {
    --i: 6;
  }

  .sys-i-7 {
    --i: 7;
  }

  .sys-i-8 {
    --i: 8;
  }

  .sys-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
    letter-spacing: -0.01em;
  }

  .sys-lbl {
    display: block;
    margin: 0 0 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* a version or identifier, in the machine face */
  .sys-ver {
    display: inline-flex;
    align-items: center;
    padding: 2px 8px;
    border-radius: 5px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ---- status badges ----------------------------------------------------
   Rectangular with a small radius, the way a console labels a resource. */
  .sys-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 9px;
    border-radius: 5px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 11.5px;
    font-weight: 600;
    line-height: 1.5;
    white-space: nowrap;
    color: var(--bs-secondary-color);
  }

  .sys-badge i {
    font-size: 13px;
  }

  .sys-badge.is-up {
    background: var(--sys-up-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .sys-badge.is-warn {
    background: var(--tint-warning);
    border-color: rgba(234, 179, 0, 0.34);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .sys-badge.is-down {
    background: var(--sys-down-soft);
    border-color: rgba(232, 38, 70, 0.26);
    color: var(--sys-down);
  }

  .sys-badge.is-accent {
    background: var(--tint-primary);
    border-color: rgba(14, 118, 189, 0.5);
    color: var(--bs-primary);
  }

  .sys-tag {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 2px 8px;
    border-radius: 5px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 11px;
    font-weight: 500;
    color: var(--bs-secondary-color);
  }

  .sys-tag i {
    font-size: 13px;
  }

  /* a state light */
  .sys-led {
    position: relative;
    display: inline-block;
    width: 8px;
    height: 8px;
    flex-shrink: 0;
    border-radius: 50%;
    background: var(--sys-up);
  }

  .sys-led::after {
    content: "";
    position: absolute;
    inset: -4px;
    border-radius: 50%;
    border: 1px solid var(--sys-up);
    opacity: 0.4;
    animation: sys-pulse 2.6s ease-out infinite;
  }

  .sys-led.is-warn {
    background: var(--bs-warning);
  }

  .sys-led.is-warn::after {
    border-color: var(--bs-warning);
  }

  .sys-led.is-down {
    background: var(--sys-down);
  }

  .sys-led.is-down::after {
    border-color: var(--sys-down);
    animation: none;
  }

  .sys-led.is-off {
    background: var(--sys-border-strong);
  }

  .sys-led.is-off::after {
    display: none;
  }

  @keyframes sys-pulse {
    0% {
      transform: scale(0.7);
      opacity: 0.55;
    }

    70%,
    100% {
      transform: scale(1.6);
      opacity: 0;
    }
  }

  /* ============================================================
   2. WORKSPACE HERO + ENVIRONMENT RIBBON
   In a console the environment is the loudest thing on the page,
   because everything else means something different without it.
   ============================================================ */
  .sys-hero {
    margin-bottom: 26px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow: hidden;
  }

  /* the ribbon across the top */
  .sys-ribbon {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
    padding: 10px 24px;
    background: var(--bs-emphasis-color);
    color: rgba(255, 255, 255, 0.62);
    font-size: 12px;
  }

  .sys-ribbon strong {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 3px 10px;
    border-radius: 5px;
    background: var(--sys-up);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #fff;
  }

  .sys-ribbon .sys-ribbon-sep {
    width: 1px;
    height: 14px;
    background: rgba(255, 255, 255, 0.16);
  }

  .sys-ribbon b {
    font-family: var(--font-mono);
    font-weight: 600;
    color: #fff;
  }

  /* a non-production environment shouts louder */

  .sys-ribbon.is-staging strong {
    background: rgb(193.2, 147.7897435897, 0);
  }

  .sys-hero-body {
    padding: 24px 26px;
  }

  @media (max-width: 575.98px) {
    .sys-hero-body {
      padding: 20px;
    }
  }

  .sys-hero-top {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
  }

  .sys-hero-crest {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    flex-shrink: 0;
    border-radius: 15px;
    background: var(--bs-primary);
    color: #fff;
    font-size: 25px;
    box-shadow: 0 8px 18px rgba(2, 132, 148, 0.26);
  }

  .sys-hero-title {
    margin: 0;
    font-size: 26px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .sys-hero-title {
      font-size: 21px;
    }
  }

  .sys-hero-sub {
    margin: 4px 0 0;
    max-width: 66ch;
    font-size: 13.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  /* the hero's facts, each in its own bordered cell */
  .sys-hero-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 12px;
    margin-top: 22px;
  }

  .sys-hero-cell {
    padding: 12px 14px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
  }

  .sys-hero-cell span {
    display: block;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .sys-hero-cell strong {
    display: flex;
    align-items: center;
    gap: 7px;
    margin-top: 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-hero-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 20px;
  }

  /* ============================================================
   3. STICKY SECTION NAVIGATION
   Nineteen sections, so each carries a state light rather than a
   count and the rail scrolls.
   ============================================================ */
  .sys-nav {
    position: sticky;
    top: calc(60px + 16px);
    max-height: calc(100vh - 60px - 32px);
    padding: 8px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow-y: auto;
    /* Bootstrap's `.nav` wraps; in a capped-height column that wraps
     overflow into a second column instead of scrolling. */
    flex-wrap: nowrap;
    overflow-x: hidden;
  }

  .sys-nav>* {
    flex-shrink: 0;
  }

  @media (max-width: 991.98px) {
    .sys-nav {
      position: static;
      max-height: none;
    }
  }

  .sys-nav-hdr {
    display: block;
    padding: 13px 12px 5px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.11em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .sys-nav-hdr:first-child {
    padding-top: 5px;
  }

  .sys-nav-link {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 8px 12px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    font-size: 13.5px;
    font-weight: 500;
    text-align: left;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .sys-nav-link>i:first-child {
    flex-shrink: 0;
    font-size: 17px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  .sys-nav-link .sys-nav-txt {
    flex: 1 1 auto;
    min-width: 0;
  }

  .sys-nav-link:hover {
    background: var(--bs-secondary-bg);
  }

  /* the active row is filled in the deep accent, as a console selection is */

  .sys-nav-link.active {
    background: var(--bs-primary);
    color: #fff;
    font-weight: 600;
  }

  .sys-nav-link.active>i:first-child {
    color: rgba(255, 255, 255, 0.82);
  }

  .sys-nav-link.active .sys-led {
    background: #fff;
  }

  .sys-nav-link.active .sys-led::after {
    border-color: #fff;
  }

  .sys-nav-foot {
    margin-top: 8px;
    padding: 13px 12px 5px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   4. CONFIGURATION CARDS + SETTING ROWS
   ============================================================ */
  .sys-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .sys-card:hover {
    border-color: var(--sys-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* the header carries a thin rule of state along its very top */
  .sys-card-head {
    position: relative;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 15px 17px 12px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .sys-card-head::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 2px;
    background: var(--bs-primary);
  }

  .sys-card-head.is-up::before {
    background: var(--sys-up);
  }

  .sys-card-head.is-warn::before {
    background: var(--bs-warning);
  }

  .sys-card-head.is-down::before {
    background: var(--sys-down);
  }

  .sys-card-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    flex-shrink: 0;
    border-radius: 10px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 18px;
  }

  .sys-card-ic.is-up {
    background: var(--sys-up-soft);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .sys-card-ic.is-warn {
    background: var(--tint-warning);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .sys-card-ic.is-down {
    background: var(--sys-down-soft);
    color: var(--sys-down);
  }

  .sys-card-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-card-title+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .sys-card-body {
    flex: 1 1 auto;
    padding: 4px 17px 12px;
  }

  .sys-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    padding: 10px 17px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* ---- setting row ------------------------------------------------------
   A console lists a key and its value in two fixed columns, with the
   control tucked to the right of the value. */
  .sys-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 8px 14px;
    padding: 10px 0;
  }

  .sys-row+.sys-row {
    border-top: 1px solid var(--bs-border-color);
  }

  .sys-row .sys-row-key {
    min-width: 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .sys-row .sys-row-key small {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .sys-row .sys-row-val {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .sys-row {
      grid-template-columns: minmax(0, 1fr);
    }

    .sys-row .sys-row-val {
      justify-content: flex-start;
    }
  }

  .sys-input,
  .sys-select {
    min-width: 148px;
    padding: 6px 10px;
    border-radius: var(--radius-sm);
    background-color: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    font-weight: 400;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .sys-input:focus,
  .sys-select:focus {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
    outline: 0;
  }

  @media (max-width: 575.98px) {

    .sys-input,
    .sys-select {
      min-width: 0;
      width: 100%;
    }
  }

  .sys-input.is-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
  }

  /* a value that is machine output rather than a choice */
  .sys-code {
    padding: 9px 11px;
    border-radius: var(--radius-sm);
    background: var(--bs-emphasis-color);
    font-family: var(--font-mono);
    font-size: 11.5px;
    line-height: 1.75;
    color: rgba(255, 255, 255, 0.8);
    word-break: break-all;
    overflow-x: auto;
  }

  /* ============================================================
   5. SERVICE TILES + UPTIME STRIP
   ============================================================ */
  .sys-svc {
    display: flex;
    flex-direction: column;
    gap: 12px;
    height: 100%;
    padding: 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .sys-svc:hover {
    border-color: var(--sys-border-strong);
    box-shadow: var(--shadow-lift);
  }

  /* a degraded or stopped service is tinted along its whole surface */

  .sys-svc.is-warn {
    background: linear-gradient(170deg, var(--tint-warning), var(--bs-body-bg) 52%);
    border-color: rgba(234, 179, 0, 0.3);
  }

  .sys-svc.is-down {
    background: linear-gradient(170deg, var(--sys-down-soft), var(--bs-body-bg) 52%);
    border-color: rgba(232, 38, 70, 0.28);
  }

  .sys-svc-top {
    display: flex;
    align-items: center;
    gap: 11px;
  }

  .sys-svc-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    flex-shrink: 0;
    border-radius: 12px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-emphasis-color);
    font-size: 19px;
  }

  .sys-svc-name {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-svc-name+p {
    margin: 2px 0 0;
    font-family: var(--font-mono);
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  /* ---- uptime strip -----------------------------------------------------
   Thirty cells, one per day. A console shows history this way because the
   shape of an outage matters as much as the percentage. */
  .sys-uptime {
    display: flex;
    gap: 2px;
    height: 22px;
  }

  .sys-uptime i {
    flex: 1 1 0;
    min-width: 0;
    border-radius: 2px;
    background: var(--sys-up);
  }

  .sys-uptime i.is-warn {
    background: var(--bs-warning);
  }

  .sys-uptime i.is-down {
    background: var(--sys-down);
  }

  .sys-uptime i.is-none {
    background: var(--bs-tertiary-bg);
  }

  .sys-uptime-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: 6px;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .sys-uptime-meta b {
    font-family: var(--font-mono);
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-svc-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 11px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   6. RESOURCE GAUGES
   Thin, inline, and always paired with the figure — a bar without
   a number is decoration.
   ============================================================ */
  .sys-gauge {
    display: flex;
    align-items: center;
    gap: 10px;
  }

  .sys-gauge .sys-gauge-track {
    position: relative;
    flex: 1 1 auto;
    height: 5px;
    min-width: 60px;
    border-radius: 999px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
  }

  .sys-gauge .sys-gauge-track span {
    position: absolute;
    inset: 0 auto 0 0;
    width: calc(var(--p, 0) * 1%);
    border-radius: inherit;
    background: var(--bs-primary);
  }

  .sys-gauge .sys-gauge-n {
    flex-shrink: 0;
    min-width: 46px;
    font-family: var(--font-mono);
    font-size: 11.5px;
    font-weight: 600;
    text-align: right;
    color: var(--bs-emphasis-color);
  }

  .sys-gauge.is-warn .sys-gauge-track span {
    background: var(--bs-warning);
  }

  .sys-gauge.is-down .sys-gauge-track span {
    background: var(--sys-down);
  }

  /* ============================================================
   7. DISK PARTITIONS
   One bar for the volume, divided into what is actually on it,
   with each block naming itself underneath.
   ============================================================ */
  .sys-disk {
    display: flex;
    height: 30px;
    border-radius: var(--radius-sm);
    background: var(--bs-tertiary-bg);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .sys-part {
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 calc(var(--p, 10) * 1%);
    min-width: 0;
    padding: 0 6px;
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: #fff;
    background: var(--bs-primary);
  }

  .sys-part+.sys-part {
    border-left: 1px solid rgba(255, 255, 255, 0.35);
  }

  .sys-part.is-media {
    background: rgb(17.0863636364, 115.0481818182, 233.5136363636);
  }

  .sys-part.is-db {
    background: rgb(126.9388646288, 65.8, 255);
  }

  .sys-part.is-logs {
    background: rgb(203.4, 155.5923076923, 0);
  }

  .sys-part.is-backup {
    background: rgb(22.2647887324, 162.7042253521, 19.6957746479);
  }

  /* free space is not a partition, so it is left unfilled */

  .sys-part.is-free {
    background: transparent;
    color: var(--bs-secondary-color);
  }

  .sys-disk-key {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
    margin-top: 12px;
  }

  .sys-disk-key span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .sys-disk-key span b {
    font-family: var(--font-mono);
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-disk-key i {
    width: 10px;
    height: 10px;
    border-radius: 3px;
    background: var(--bs-primary);
  }

  .sys-disk-key i.is-media {
    background: rgb(17.0863636364, 115.0481818182, 233.5136363636);
  }

  .sys-disk-key i.is-db {
    background: rgb(126.9388646288, 65.8, 255);
  }

  .sys-disk-key i.is-logs {
    background: rgb(203.4, 155.5923076923, 0);
  }

  .sys-disk-key i.is-backup {
    background: rgb(22.2647887324, 162.7042253521, 19.6957746479);
  }

  .sys-disk-key i.is-free {
    background: var(--bs-tertiary-bg);
  }

  /* ============================================================
   8. MAINTENANCE CONTROL
   A switch that takes the platform away from everyone deserves
   more than a row in a list.
   ============================================================ */
  .sys-switchboard {
    display: flex;
    align-items: center;
    gap: 18px;
    padding: 20px 22px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-left: 4px solid var(--sys-up);
    /* armed: the platform is closed */
  }

  .sys-switchboard.is-armed {
    border-left-color: var(--sys-down);
    background: linear-gradient(100deg, var(--sys-down-soft), var(--bs-body-bg) 48%);
  }

  @media (max-width: 767.98px) {
    .sys-switchboard {
      flex-wrap: wrap;
    }
  }

  .sys-switchboard-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 52px;
    height: 52px;
    flex-shrink: 0;
    border-radius: 16px;
    background: var(--sys-up-soft);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
    font-size: 25px;
  }

  .is-armed .sys-switchboard-ic {
    background: var(--sys-down-soft);
    color: var(--sys-down);
  }

  .sys-switchboard-body {
    flex: 1 1 auto;
    min-width: 0;
  }

  .sys-switchboard-body h6 {
    margin: 0;
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-switchboard-body p {
    margin: 4px 0 0;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   9. ENDPOINT AND JOB ROWS
   ============================================================ */
  .sys-item {
    display: grid;
    grid-template-columns: 10px minmax(0, 1fr) auto;
    align-items: center;
    gap: 14px;
    padding: 12px 16px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .sys-item+.sys-item {
    margin-top: 8px;
  }

  .sys-item:hover {
    border-color: var(--sys-border-strong);
  }

  /* a rib carrying the row's state */

  .sys-item::before {
    content: "";
    width: 4px;
    height: 26px;
    border-radius: 3px;
    background: var(--sys-up);
  }

  .sys-item.is-warn::before {
    background: var(--bs-warning);
  }

  .sys-item.is-down::before {
    background: var(--sys-down);
  }

  .sys-item.is-off {
    background: var(--bs-secondary-bg);
  }

  .sys-item.is-off::before {
    background: var(--sys-border-strong);
  }

  .sys-item.is-off .sys-item-body {
    opacity: 0.7;
  }

  @media (max-width: 767.98px) {
    .sys-item {
      grid-template-columns: 10px minmax(0, 1fr);
      row-gap: 10px;
    }

    .sys-item .sys-item-side {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  .sys-item-body {
    min-width: 0;
  }

  .sys-item-body strong {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-item-body span {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .sys-item-body code {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-primary);
  }

  .sys-item-side {
    display: flex;
    align-items: center;
    gap: 10px;
    justify-content: flex-end;
    flex-wrap: wrap;
  }

  /* ---- log lines --------------------------------------------------------- */
  .sys-log {
    display: grid;
    grid-template-columns: 152px 78px minmax(0, 1fr);
    gap: 14px;
    padding: 8px 0;
    font-family: var(--font-mono);
    font-size: 12px;
    line-height: 1.7;
  }

  .sys-log+.sys-log {
    border-top: 1px solid var(--bs-border-color);
  }

  .sys-log .sys-log-t {
    color: var(--bs-secondary-color);
    white-space: nowrap;
  }

  .sys-log .sys-log-msg {
    min-width: 0;
    color: var(--bs-emphasis-color);
    word-break: break-word;
  }

  .sys-log.is-down .sys-log-msg {
    color: var(--sys-down);
  }

  .sys-log.is-warn .sys-log-msg {
    color: rgb(142.2, 108.7769230769, 0);
  }

  @media (max-width: 767.98px) {
    .sys-log {
      grid-template-columns: minmax(0, 1fr);
      gap: 2px;
    }
  }

  /* ============================================================
   10. PREMIUM ACCORDION + DEPLOYMENT STAIR
   ============================================================ */
  .sys-acc {
    border-radius: var(--radius);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .sys-acc .accordion-item {
    border: 0;
    background: var(--bs-body-bg);
  }

  .sys-acc .accordion-item+.accordion-item {
    border-top: 1px solid var(--bs-border-color);
  }

  .sys-acc .accordion-button {
    gap: 11px;
    padding: 15px 17px;
    background: var(--bs-body-bg);
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    box-shadow: none;
  }

  .sys-acc .accordion-button::after {
    margin-left: 0;
  }

  .sys-acc .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .sys-acc .accordion-button:focus {
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .sys-acc .accordion-button i {
    font-size: 17px;
  }

  .sys-acc .sys-acc-spacer {
    margin-left: auto;
  }

  .sys-acc .accordion-body {
    padding: 4px 17px 17px;
  }

  /* ---- deployment stair -------------------------------------------------
   Each stage steps in from the one before it and is joined by an elbow, so
   the sequence reads as a pipeline rather than a list of dates. */
  .sys-stair {
    padding: 4px 0;
  }

  .sys-stair-step {
    position: relative;
    margin-left: calc(var(--i, 0) * 30px);
    padding-bottom: 14px;
  }

  .sys-stair-step:last-child {
    padding-bottom: 0;
  }

  /* the elbow: down from the previous step, then across into this one */

  .sys-stair-step::before {
    content: "";
    position: absolute;
    left: -18px;
    top: -14px;
    bottom: 50%;
    width: 18px;
    border-left: 2px solid var(--bs-tertiary-bg);
    border-bottom: 2px solid var(--bs-tertiary-bg);
    border-bottom-left-radius: 10px;
  }

  .sys-stair-step:first-child::before {
    display: none;
  }

  .sys-stair-step.is-done::before {
    border-color: var(--sys-up);
  }

  @media (max-width: 991.98px) {
    .sys-stair-step {
      margin-left: 0;
    }

    .sys-stair-step::before {
      left: 20px;
      width: 0;
      border-bottom: 0;
      border-radius: 0;
    }
  }

  .sys-stair-card {
    display: flex;
    align-items: flex-start;
    gap: 14px;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .sys-stair-card h6 {
    margin: 0;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-stair-card time {
    display: block;
    margin-top: 2px;
    font-family: var(--font-mono);
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .sys-stair-card p {
    margin: 7px 0 0;
    font-size: 12.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  .sys-stair-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: 11px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 18px;
  }

  .is-done .sys-stair-ic {
    background: var(--sys-up);
    border-color: var(--sys-up);
    color: #fff;
  }

  .is-current .sys-stair-ic {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  /* ============================================================
   11. ADVISORY CARDS
   A console recommendation names the resource it concerns and how
   severe it is before it says anything else.
   ============================================================ */
  .sys-advice {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 10px;
    height: 100%;
    padding: 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    /* a folded corner, cut out of the top-right */
    clip-path: polygon(0 0, calc(100% - 18px) 0, 100% 18px, 100% 100%, 0 100%);
  }

  .sys-advice::after {
    content: "";
    position: absolute;
    right: 0;
    top: 0;
    width: 18px;
    height: 18px;
    background: var(--bs-border-color);
    clip-path: polygon(0 0, 100% 100%, 0 100%);
  }

  .sys-advice:hover {
    box-shadow: var(--shadow-lift);
  }

  .sys-advice.is-warn::after {
    background: var(--bs-warning);
  }

  .sys-advice.is-down::after {
    background: var(--sys-down);
  }

  .sys-advice.is-up::after {
    background: var(--sys-up);
  }

  .sys-advice-top {
    display: flex;
    align-items: center;
    gap: 10px;
  }

  .sys-advice-sev {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: 9px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    color: var(--bs-secondary-color);
    font-size: 17px;
  }

  .is-warn .sys-advice-sev {
    background: var(--tint-warning);
    border-color: rgba(234, 179, 0, 0.32);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .is-down .sys-advice-sev {
    background: var(--sys-down-soft);
    border-color: rgba(232, 38, 70, 0.26);
    color: var(--sys-down);
  }

  .is-up .sys-advice-sev {
    background: var(--sys-up-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .sys-advice-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-advice-txt {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  .sys-advice-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   12. OFFCANVAS, PANEL HELPERS, EMPTY STATE
   ============================================================ */
  /* The theme sets `.offcanvas.offcanvas-end { width: auto !important }`; the
   workspace has to match on three classes to beat it. */
  .offcanvas.offcanvas-end.sys-canvas {
    width: 88% !important;
    max-width: 1180px !important;
  }

  .sys-canvas-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 18px 24px;
    background: var(--bs-emphasis-color);
    color: #fff;
  }

  .sys-canvas-head .sys-card-ic {
    background: rgba(255, 255, 255, 0.1);
    color: #fff;
  }

  .sys-canvas-head .offcanvas-title {
    color: #fff;
  }

  .sys-canvas-head p {
    color: rgba(255, 255, 255, 0.55);
  }

  .sys-canvas-head .btn-close {
    filter: invert(1) grayscale(1);
    opacity: 0.7;
  }

  .sys-canvas-body {
    padding: 22px 24px 30px;
  }

  .sys-sect+.sys-sect {
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .sys-sect-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 13px;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .sys-sect-title i {
    font-size: 16px;
    color: var(--bs-primary);
  }

  /* a check result */
  .sys-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .sys-check+.sys-check {
    border-top: 1px solid var(--bs-border-color);
  }

  .sys-check>i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 16px;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .sys-check.is-warn>i {
    color: rgb(142.2, 108.7769230769, 0);
  }

  .sys-check.is-down>i {
    color: var(--sys-down);
  }

  .sys-check span {
    display: block;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* audit entries */
  .sys-audit {
    display: grid;
    grid-template-columns: 152px minmax(0, 1fr);
    gap: 14px;
    padding: 11px 0;
  }

  .sys-audit+.sys-audit {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .sys-audit {
      grid-template-columns: minmax(0, 1fr);
      gap: 3px;
    }
  }

  .sys-audit-when {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .sys-audit-when strong {
    display: block;
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-audit-what {
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .sys-audit-what span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ---- empty state ------------------------------------------------------- */
  .sys-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 5px;
    padding: 38px 24px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--sys-border-strong);
  }

  .sys-empty i {
    font-size: 30px;
    color: var(--bs-secondary-color);
    opacity: 0.8;
  }

  .sys-empty h6 {
    margin: 8px 0 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .sys-empty p {
    margin: 0;
    max-width: 48ch;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .sys-empty .btn {
    margin-top: 10px;
  }

  /*===== ai settings =====*/
  /*-----------------
    AI Settings — intelligence configuration components

    A shared vocabulary for the AI Settings & Intelligence Configuration
    Center: providers, models, the features each model is routed to, prompt
    templates, automations, permissions and privacy. Class prefix `aig-`.

    The visual language is a model-governance console. The pieces are the
    ones this subject needs and no other settings page does: a model plate
    with its context window drawn as a ruler, sampling parameters as marked
    dials, prompts shown as the text they actually are with their variables
    picked out, features routed to a named model, and a token budget read as
    a column rather than a bar.

    It is separate from `_ai-insights.scss`, which styles the AI feature
    pages themselves — this partial governs them rather than joining them —
    and it borrows nothing from the other settings partials.

    Contents
      1.  Tokens + shared pieces
      2.  Configuration hero
      3.  Sticky section navigation
      4.  Configuration cards + setting rows
      5.  Provider cards
      6.  Model plates + context ruler
      7.  Sampling dials + token column
      8.  Feature routing rows
      9.  Prompt templates
      10. Automation rows + permission matrix
      11. Premium accordion + activity flow
      12. Recommendation cards
      13. Offcanvas, panel helpers and empty state
-----------------*/
  /* ============================================================
   1. TOKENS + SHARED PIECES
   ============================================================ */
  :root {
    --aig-border: var(--bs-border-color, #E9EDF4);
    --aig-border-strong: #EDF1F6;
    /* A deep indigo, mixed rather than taken straight, so it sits apart from
     both the bright purple and the navy already in use elsewhere. */
    --aig-model: #02a8b5;
    --aig-model-soft: #E6F9FF;
    --aig-ok: #1ABE17;
    --aig-ok-soft: #E8F9E8;
    --aig-stop: #E82646;
    --aig-stop-soft: #FDE9ED;
  }

  @media (prefers-reduced-motion: reduce) {

    [class*=aig-],
    [class*=aig-]::before,
    [class*=aig-]::after {
      animation: none !important;
      transition: none !important;
    }
  }

  /* Value carriers. Two channels: a position and a width, since a context
   ruler needs both. */
  .aig-p-0 {
    --p: 0;
  }

  .aig-q-0 {
    --q: 0;
  }

  .aig-p-1 {
    --p: 1;
  }

  .aig-q-1 {
    --q: 1;
  }

  .aig-p-2 {
    --p: 2;
  }

  .aig-q-2 {
    --q: 2;
  }

  .aig-p-3 {
    --p: 3;
  }

  .aig-q-3 {
    --q: 3;
  }

  .aig-p-4 {
    --p: 4;
  }

  .aig-q-4 {
    --q: 4;
  }

  .aig-p-5 {
    --p: 5;
  }

  .aig-q-5 {
    --q: 5;
  }

  .aig-p-6 {
    --p: 6;
  }

  .aig-q-6 {
    --q: 6;
  }

  .aig-p-7 {
    --p: 7;
  }

  .aig-q-7 {
    --q: 7;
  }

  .aig-p-8 {
    --p: 8;
  }

  .aig-q-8 {
    --q: 8;
  }

  .aig-p-9 {
    --p: 9;
  }

  .aig-q-9 {
    --q: 9;
  }

  .aig-p-10 {
    --p: 10;
  }

  .aig-q-10 {
    --q: 10;
  }

  .aig-p-11 {
    --p: 11;
  }

  .aig-q-11 {
    --q: 11;
  }

  .aig-p-12 {
    --p: 12;
  }

  .aig-q-12 {
    --q: 12;
  }

  .aig-p-13 {
    --p: 13;
  }

  .aig-q-13 {
    --q: 13;
  }

  .aig-p-14 {
    --p: 14;
  }

  .aig-q-14 {
    --q: 14;
  }

  .aig-p-15 {
    --p: 15;
  }

  .aig-q-15 {
    --q: 15;
  }

  .aig-p-16 {
    --p: 16;
  }

  .aig-q-16 {
    --q: 16;
  }

  .aig-p-17 {
    --p: 17;
  }

  .aig-q-17 {
    --q: 17;
  }

  .aig-p-18 {
    --p: 18;
  }

  .aig-q-18 {
    --q: 18;
  }

  .aig-p-19 {
    --p: 19;
  }

  .aig-q-19 {
    --q: 19;
  }

  .aig-p-20 {
    --p: 20;
  }

  .aig-q-20 {
    --q: 20;
  }

  .aig-p-21 {
    --p: 21;
  }

  .aig-q-21 {
    --q: 21;
  }

  .aig-p-22 {
    --p: 22;
  }

  .aig-q-22 {
    --q: 22;
  }

  .aig-p-23 {
    --p: 23;
  }

  .aig-q-23 {
    --q: 23;
  }

  .aig-p-24 {
    --p: 24;
  }

  .aig-q-24 {
    --q: 24;
  }

  .aig-p-25 {
    --p: 25;
  }

  .aig-q-25 {
    --q: 25;
  }

  .aig-p-26 {
    --p: 26;
  }

  .aig-q-26 {
    --q: 26;
  }

  .aig-p-27 {
    --p: 27;
  }

  .aig-q-27 {
    --q: 27;
  }

  .aig-p-28 {
    --p: 28;
  }

  .aig-q-28 {
    --q: 28;
  }

  .aig-p-29 {
    --p: 29;
  }

  .aig-q-29 {
    --q: 29;
  }

  .aig-p-30 {
    --p: 30;
  }

  .aig-q-30 {
    --q: 30;
  }

  .aig-p-31 {
    --p: 31;
  }

  .aig-q-31 {
    --q: 31;
  }

  .aig-p-32 {
    --p: 32;
  }

  .aig-q-32 {
    --q: 32;
  }

  .aig-p-33 {
    --p: 33;
  }

  .aig-q-33 {
    --q: 33;
  }

  .aig-p-34 {
    --p: 34;
  }

  .aig-q-34 {
    --q: 34;
  }

  .aig-p-35 {
    --p: 35;
  }

  .aig-q-35 {
    --q: 35;
  }

  .aig-p-36 {
    --p: 36;
  }

  .aig-q-36 {
    --q: 36;
  }

  .aig-p-37 {
    --p: 37;
  }

  .aig-q-37 {
    --q: 37;
  }

  .aig-p-38 {
    --p: 38;
  }

  .aig-q-38 {
    --q: 38;
  }

  .aig-p-39 {
    --p: 39;
  }

  .aig-q-39 {
    --q: 39;
  }

  .aig-p-40 {
    --p: 40;
  }

  .aig-q-40 {
    --q: 40;
  }

  .aig-p-41 {
    --p: 41;
  }

  .aig-q-41 {
    --q: 41;
  }

  .aig-p-42 {
    --p: 42;
  }

  .aig-q-42 {
    --q: 42;
  }

  .aig-p-43 {
    --p: 43;
  }

  .aig-q-43 {
    --q: 43;
  }

  .aig-p-44 {
    --p: 44;
  }

  .aig-q-44 {
    --q: 44;
  }

  .aig-p-45 {
    --p: 45;
  }

  .aig-q-45 {
    --q: 45;
  }

  .aig-p-46 {
    --p: 46;
  }

  .aig-q-46 {
    --q: 46;
  }

  .aig-p-47 {
    --p: 47;
  }

  .aig-q-47 {
    --q: 47;
  }

  .aig-p-48 {
    --p: 48;
  }

  .aig-q-48 {
    --q: 48;
  }

  .aig-p-49 {
    --p: 49;
  }

  .aig-q-49 {
    --q: 49;
  }

  .aig-p-50 {
    --p: 50;
  }

  .aig-q-50 {
    --q: 50;
  }

  .aig-p-51 {
    --p: 51;
  }

  .aig-q-51 {
    --q: 51;
  }

  .aig-p-52 {
    --p: 52;
  }

  .aig-q-52 {
    --q: 52;
  }

  .aig-p-53 {
    --p: 53;
  }

  .aig-q-53 {
    --q: 53;
  }

  .aig-p-54 {
    --p: 54;
  }

  .aig-q-54 {
    --q: 54;
  }

  .aig-p-55 {
    --p: 55;
  }

  .aig-q-55 {
    --q: 55;
  }

  .aig-p-56 {
    --p: 56;
  }

  .aig-q-56 {
    --q: 56;
  }

  .aig-p-57 {
    --p: 57;
  }

  .aig-q-57 {
    --q: 57;
  }

  .aig-p-58 {
    --p: 58;
  }

  .aig-q-58 {
    --q: 58;
  }

  .aig-p-59 {
    --p: 59;
  }

  .aig-q-59 {
    --q: 59;
  }

  .aig-p-60 {
    --p: 60;
  }

  .aig-q-60 {
    --q: 60;
  }

  .aig-p-61 {
    --p: 61;
  }

  .aig-q-61 {
    --q: 61;
  }

  .aig-p-62 {
    --p: 62;
  }

  .aig-q-62 {
    --q: 62;
  }

  .aig-p-63 {
    --p: 63;
  }

  .aig-q-63 {
    --q: 63;
  }

  .aig-p-64 {
    --p: 64;
  }

  .aig-q-64 {
    --q: 64;
  }

  .aig-p-65 {
    --p: 65;
  }

  .aig-q-65 {
    --q: 65;
  }

  .aig-p-66 {
    --p: 66;
  }

  .aig-q-66 {
    --q: 66;
  }

  .aig-p-67 {
    --p: 67;
  }

  .aig-q-67 {
    --q: 67;
  }

  .aig-p-68 {
    --p: 68;
  }

  .aig-q-68 {
    --q: 68;
  }

  .aig-p-69 {
    --p: 69;
  }

  .aig-q-69 {
    --q: 69;
  }

  .aig-p-70 {
    --p: 70;
  }

  .aig-q-70 {
    --q: 70;
  }

  .aig-p-71 {
    --p: 71;
  }

  .aig-q-71 {
    --q: 71;
  }

  .aig-p-72 {
    --p: 72;
  }

  .aig-q-72 {
    --q: 72;
  }

  .aig-p-73 {
    --p: 73;
  }

  .aig-q-73 {
    --q: 73;
  }

  .aig-p-74 {
    --p: 74;
  }

  .aig-q-74 {
    --q: 74;
  }

  .aig-p-75 {
    --p: 75;
  }

  .aig-q-75 {
    --q: 75;
  }

  .aig-p-76 {
    --p: 76;
  }

  .aig-q-76 {
    --q: 76;
  }

  .aig-p-77 {
    --p: 77;
  }

  .aig-q-77 {
    --q: 77;
  }

  .aig-p-78 {
    --p: 78;
  }

  .aig-q-78 {
    --q: 78;
  }

  .aig-p-79 {
    --p: 79;
  }

  .aig-q-79 {
    --q: 79;
  }

  .aig-p-80 {
    --p: 80;
  }

  .aig-q-80 {
    --q: 80;
  }

  .aig-p-81 {
    --p: 81;
  }

  .aig-q-81 {
    --q: 81;
  }

  .aig-p-82 {
    --p: 82;
  }

  .aig-q-82 {
    --q: 82;
  }

  .aig-p-83 {
    --p: 83;
  }

  .aig-q-83 {
    --q: 83;
  }

  .aig-p-84 {
    --p: 84;
  }

  .aig-q-84 {
    --q: 84;
  }

  .aig-p-85 {
    --p: 85;
  }

  .aig-q-85 {
    --q: 85;
  }

  .aig-p-86 {
    --p: 86;
  }

  .aig-q-86 {
    --q: 86;
  }

  .aig-p-87 {
    --p: 87;
  }

  .aig-q-87 {
    --q: 87;
  }

  .aig-p-88 {
    --p: 88;
  }

  .aig-q-88 {
    --q: 88;
  }

  .aig-p-89 {
    --p: 89;
  }

  .aig-q-89 {
    --q: 89;
  }

  .aig-p-90 {
    --p: 90;
  }

  .aig-q-90 {
    --q: 90;
  }

  .aig-p-91 {
    --p: 91;
  }

  .aig-q-91 {
    --q: 91;
  }

  .aig-p-92 {
    --p: 92;
  }

  .aig-q-92 {
    --q: 92;
  }

  .aig-p-93 {
    --p: 93;
  }

  .aig-q-93 {
    --q: 93;
  }

  .aig-p-94 {
    --p: 94;
  }

  .aig-q-94 {
    --q: 94;
  }

  .aig-p-95 {
    --p: 95;
  }

  .aig-q-95 {
    --q: 95;
  }

  .aig-p-96 {
    --p: 96;
  }

  .aig-q-96 {
    --q: 96;
  }

  .aig-p-97 {
    --p: 97;
  }

  .aig-q-97 {
    --q: 97;
  }

  .aig-p-98 {
    --p: 98;
  }

  .aig-q-98 {
    --q: 98;
  }

  .aig-p-99 {
    --p: 99;
  }

  .aig-q-99 {
    --q: 99;
  }

  .aig-p-100 {
    --p: 100;
  }

  .aig-q-100 {
    --q: 100;
  }

  .aig-mono {
    font-family: var(--font-mono);
    font-size: 12.5px;
    letter-spacing: -0.01em;
  }

  .aig-lbl {
    display: block;
    margin: 0 0 6px;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* geometry, typography and surface come from the shared badge component */

  .aig-badge i {
    font-size: 13px;
  }

  .aig-badge.is-on {
    background: var(--aig-ok-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .aig-badge.is-warn {
    background: var(--tint-warning);
    border-color: rgba(234, 179, 0, 0.34);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .aig-badge.is-stop {
    background: var(--aig-stop-soft);
    border-color: rgba(232, 38, 70, 0.26);
    color: var(--aig-stop);
  }

  .aig-badge.is-accent {
    background: var(--tint-primary);
    border-color: rgba(74, 0, 229, 0.2);
    color: var(--bs-primary);
  }

  /* a model reference, always in the machine face because it is an identifier */
  .aig-chip {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 3px 9px;
    border-radius: 7px;
    background: var(--aig-model-soft);
    border: 1px solid rgba(2, 168, 181, 0.3);
    font-family: var(--font-mono);
    font-size: 11px;
    font-weight: 600;
    white-space: nowrap;
    color: rgb(1.2196721311, 102.4524590164, 110.3803278689);
  }

  .aig-chip i {
    font-size: 12px;
  }

  .aig-chip.is-plain {
    background: var(--bs-secondary-bg);
    border-color: var(--bs-border-color);
    color: var(--bs-emphasis-color);
  }

  .aig-chip.is-none {
    background: transparent;
    border-style: dashed;
    border-color: var(--aig-border-strong);
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   2. CONFIGURATION HERO
   ============================================================ */
  .aig-hero {
    position: relative;
    padding: 26px 28px;
    margin-bottom: 26px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow: hidden;
    /* a fine grid, the way a model console suggests a latent space without
     drawing a chart */
  }

  .aig-hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: linear-gradient(var(--bs-border-color) 1px, transparent 1px), linear-gradient(90deg, var(--bs-border-color) 1px, transparent 1px);
    background-size: 34px 34px;
    opacity: 0.5;
    mask-image: radial-gradient(120% 90% at 100% 0%, #000, transparent 62%);
    -webkit-mask-image: radial-gradient(120% 90% at 100% 0%, #000, transparent 62%);
    pointer-events: none;
  }

  .aig-hero>* {
    position: relative;
  }

  @media (max-width: 575.98px) {
    .aig-hero {
      padding: 20px;
    }
  }

  .aig-hero-top {
    display: flex;
    align-items: center;
    gap: 16px;
    flex-wrap: wrap;
  }

  .aig-hero-crest {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 54px;
    height: 54px;
    flex-shrink: 0;
    border-radius: 17px;
    background: var(--bs-primary);
    color: #fff;
    font-size: 26px;
    box-shadow: 0 8px 20px rgba(43, 22, 106, 0.3);
  }

  .aig-hero-title {
    margin: 0;
    font-size: 26px;
    font-weight: 700;
    line-height: 1.2;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .aig-hero-title {
      font-size: 21px;
    }
  }

  .aig-hero-sub {
    margin: 4px 0 0;
    max-width: 66ch;
    font-size: 13.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  /* the hero's facts, run along one rule and divided by hairlines */
  .aig-hero-facts {
    display: flex;
    flex-wrap: wrap;
    margin-top: 22px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .aig-hero-fact {
    flex: 1 1 0;
    min-width: 170px;
    padding: 0 20px;
  }

  .aig-hero-fact:first-child {
    padding-left: 0;
  }

  .aig-hero-fact+.aig-hero-fact {
    border-left: 1px solid var(--bs-border-color);
  }

  .aig-hero-fact span {
    display: block;
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .aig-hero-fact strong {
    display: flex;
    align-items: center;
    gap: 7px;
    margin-top: 4px;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 767.98px) {
    .aig-hero-fact {
      flex: 1 1 46%;
      padding: 10px 14px;
    }

    .aig-hero-fact:first-child {
      padding-left: 14px;
    }

    .aig-hero-fact+.aig-hero-fact {
      border-left: 0;
    }
  }

  .aig-hero-actions {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    margin-top: 20px;
  }

  /* ============================================================
   3. STICKY SECTION NAVIGATION
   ============================================================ */
  .aig-nav {
    position: sticky;
    top: calc(60px + 16px);
    max-height: calc(100vh - 60px - 32px);
    padding: 10px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
    overflow-y: auto;
    /* Bootstrap's `.nav` wraps; in a capped-height column that wraps
     overflow into a second column instead of scrolling. */
    flex-wrap: nowrap;
    overflow-x: hidden;
  }

  .aig-nav>* {
    flex-shrink: 0;
  }

  @media (max-width: 991.98px) {
    .aig-nav {
      position: static;
      max-height: none;
    }
  }

  .aig-nav-link {
    position: relative;
    display: flex;
    align-items: center;
    gap: 11px;
    width: 100%;
    padding: 9px 12px;
    border: 0;
    border-radius: var(--radius-sm);
    background: transparent;
    font-size: 13.5px;
    font-weight: 500;
    text-align: left;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .aig-nav-link>i {
    flex-shrink: 0;
    font-size: 17px;
    color: var(--bs-secondary-color);
    transition: var(--transition);
  }

  .aig-nav-link .aig-nav-txt {
    flex: 1 1 auto;
    min-width: 0;
  }

  .aig-nav-link .aig-nav-n {
    flex-shrink: 0;
    font-family: var(--font-mono);
    font-size: 10.5px;
    font-weight: 600;
    color: var(--bs-secondary-color);
  }

  .aig-nav-link:hover {
    background: var(--bs-secondary-bg);
  }

  /* the active row is tinted and carries a short accent bar inside its
     own rounded edge, rather than a full-height border */

  .aig-nav-link.active {
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-weight: 600;
  }

  .aig-nav-link.active>i,
  .aig-nav-link.active .aig-nav-n {
    color: var(--bs-primary);
  }

  .aig-nav-link.active::before {
    content: "";
    position: absolute;
    left: 4px;
    top: 12px;
    bottom: 12px;
    width: 3px;
    border-radius: 3px;
    background: var(--bs-primary);
  }

  .aig-nav-foot {
    margin-top: 10px;
    padding: 14px 12px 6px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   4. CONFIGURATION CARDS + SETTING ROWS
   ============================================================ */
  .aig-card {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .aig-card:hover {
    border-color: var(--aig-border-strong);
    box-shadow: var(--shadow-lift);
  }

  .aig-card-head {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 18px 13px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .aig-card-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: 12px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 19px;
  }

  .aig-card-ic.is-model {
    background: var(--aig-model-soft);
    color: rgb(1.2196721311, 102.4524590164, 110.3803278689);
  }

  .aig-card-ic.is-warn {
    background: var(--tint-warning);
    color: rgb(142.2, 108.7769230769, 0);
  }

  .aig-card-ic.is-stop {
    background: var(--aig-stop-soft);
    color: var(--aig-stop);
  }

  .aig-card-title {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-card-title+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .aig-card-body {
    flex: 1 1 auto;
    padding: 4px 18px 14px;
  }

  .aig-card-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    padding: 11px 18px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  .aig-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 8px 14px;
    padding: 10px 0;
  }

  .aig-row+.aig-row {
    border-top: 1px solid var(--bs-border-color);
  }

  .aig-row .aig-row-key {
    min-width: 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .aig-row .aig-row-key small {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .aig-row .aig-row-val {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 8px;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  @media (max-width: 575.98px) {
    .aig-row {
      grid-template-columns: minmax(0, 1fr);
    }

    .aig-row .aig-row-val {
      justify-content: flex-start;
    }
  }

  .aig-input,
  .aig-select {
    min-width: 148px;
    padding: 6px 11px;
    border-radius: var(--radius-sm);
    background-color: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 13px;
    font-weight: 400;
    color: var(--bs-emphasis-color);
    transition: var(--transition);
  }

  .aig-input:focus,
  .aig-select:focus {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
    outline: 0;
  }

  @media (max-width: 575.98px) {

    .aig-input,
    .aig-select {
      min-width: 0;
      width: 100%;
    }
  }

  .aig-secret {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 5px 11px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--aig-border-strong);
    font-family: var(--font-mono);
    font-size: 12px;
    color: var(--bs-emphasis-color);
  }

  .aig-secret i {
    font-size: 14px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   5. PROVIDER CARDS
   The endpoint is carried on a dark strip at the head, because a
   provider is identified by where it is reached, not by its name.
   ============================================================ */
  .aig-prov {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .aig-prov:hover {
    border-color: var(--aig-border-strong);
    box-shadow: var(--shadow-lift);
  }

  .aig-prov.is-default {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .aig-prov.is-off .aig-prov-bar,
  .aig-prov.is-off .aig-prov-name {
    opacity: 0.62;
  }

  .aig-prov-bar {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 14px;
    background: var(--bs-emphasis-color);
    font-family: var(--font-mono);
    font-size: 10.5px;
    color: rgba(255, 255, 255, 0.68);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .aig-prov-bar i {
    flex-shrink: 0;
    font-size: 13px;
    color: rgba(255, 255, 255, 0.4);
  }

  .aig-prov-body {
    flex: 1 1 auto;
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 16px;
  }

  .aig-prov-top {
    display: flex;
    align-items: flex-start;
    gap: 12px;
  }

  .aig-prov-mark {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    flex-shrink: 0;
    border-radius: 13px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 20px;
    color: var(--bs-emphasis-color);
  }

  .aig-prov-name {
    margin: 0;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-prov-name+p {
    margin: 2px 0 0;
    font-size: 11.5px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  /* the models this provider makes available, as chips */
  .aig-prov-models {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
  }

  .aig-prov-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   6. MODEL PLATES + CONTEXT RULER
   ============================================================ */
  .aig-model {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .aig-model:hover {
    border-color: var(--aig-border-strong);
    box-shadow: var(--shadow-lift);
  }

  .aig-model.is-off {
    background: var(--bs-secondary-bg);
  }

  .aig-model.is-off .aig-model-id {
    opacity: 0.66;
  }

  .aig-model-head {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 14px 16px 12px;
  }

  .aig-model-id {
    margin: 0;
    font-family: var(--font-mono);
    font-size: 14px;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--bs-emphasis-color);
    word-break: break-all;
  }

  .aig-model-id+p {
    margin: 2px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .aig-model-body {
    flex: 1 1 auto;
    padding: 0 16px 12px;
  }

  /* ---- context ruler ----------------------------------------------------
   A context window is a length, so it is drawn as one: a measured track
   with the reserved portion filled and the scale marked beneath. */
  .aig-ruler .aig-ruler-track {
    position: relative;
    height: 10px;
    border-radius: 4px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
    /* what a typical request actually occupies */
  }

  .aig-ruler .aig-ruler-track span {
    position: absolute;
    inset: 0 auto 0 0;
    width: calc(var(--p, 0) * 1%);
    background: var(--aig-model);
  }

  /* the reserve kept for the response */

  .aig-ruler .aig-ruler-track em {
    position: absolute;
    top: 0;
    bottom: 0;
    left: calc(var(--p, 0) * 1%);
    width: calc(var(--q, 0) * 1%);
    background: repeating-linear-gradient(45deg, rgba(2, 168, 181, 0.34) 0 4px, transparent 4px 8px);
  }

  .aig-ruler .aig-ruler-scale {
    display: flex;
    justify-content: space-between;
    margin-top: 5px;
    font-family: var(--font-mono);
    font-size: 10px;
    color: var(--bs-secondary-color);
  }

  .aig-ruler .aig-ruler-meta {
    margin-top: 6px;
    font-size: 11.5px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .aig-ruler .aig-ruler-meta b {
    font-family: var(--font-mono);
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-model-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-top: auto;
    padding: 10px 16px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   7. SAMPLING DIALS + TOKEN COLUMN
   ============================================================ */
  /* a parameter with a marked position on its range, not a slider control */
  .aig-dial+.aig-dial {
    margin-top: 14px;
  }

  .aig-dial .aig-dial-top {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 6px;
  }

  .aig-dial .aig-dial-top span {
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  .aig-dial .aig-dial-top b {
    font-family: var(--font-mono);
    font-size: 12.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-dial .aig-dial-track {
    position: relative;
    height: 4px;
    border-radius: 999px;
    background: var(--bs-tertiary-bg);
    /* the marker */
  }

  .aig-dial .aig-dial-track i {
    position: absolute;
    top: 50%;
    left: calc(var(--p, 0) * 1%);
    width: 13px;
    height: 13px;
    margin: -6.5px 0 0 -6.5px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 3px solid var(--bs-primary);
  }

  /* the travelled part of the range */

  .aig-dial .aig-dial-track::before {
    content: "";
    position: absolute;
    inset: 0 auto 0 0;
    width: calc(var(--p, 0) * 1%);
    border-radius: inherit;
    background: var(--bs-primary);
  }

  .aig-dial .aig-dial-ends {
    display: flex;
    justify-content: space-between;
    margin-top: 5px;
    font-family: var(--font-mono);
    font-size: 10px;
    color: var(--bs-secondary-color);
  }

  /* ---- token column -----------------------------------------------------
   A monthly budget read vertically, which keeps the figures beside it and
   makes an overspend obvious as height rather than as a number. */
  .aig-budget {
    display: flex;
    align-items: flex-end;
    gap: 16px;
  }

  .aig-column {
    position: relative;
    flex-shrink: 0;
    width: 46px;
    height: 132px;
    border-radius: 8px;
    background: var(--bs-tertiary-bg);
    overflow: hidden;
    /* used */
  }

  .aig-column span {
    position: absolute;
    inset: auto 0 0 0;
    height: calc(var(--p, 0) * 1%);
    background: var(--bs-primary);
  }

  /* the ceiling mark */

  .aig-column::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: calc(var(--q, 100) * 1%);
    height: 2px;
    background: var(--aig-stop);
  }

  .aig-budget-facts {
    flex: 1 1 auto;
    min-width: 0;
  }

  .aig-budget-facts div {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    padding: 5px 0;
    font-size: 12.5px;
    color: var(--bs-secondary-color);
  }

  .aig-budget-facts div+div {
    border-top: 1px solid var(--bs-border-color);
  }

  .aig-budget-facts div b {
    font-family: var(--font-mono);
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   8. FEATURE ROUTING ROWS
   Which feature is answered by which model, and who may see it.
   ============================================================ */
  .aig-feat {
    display: grid;
    grid-template-columns: 42px minmax(0, 1.3fr) minmax(0, 1fr) auto;
    align-items: center;
    gap: 16px;
    padding: 14px 16px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .aig-feat+.aig-feat {
    margin-top: 9px;
  }

  .aig-feat:hover {
    border-color: var(--aig-border-strong);
    box-shadow: var(--shadow);
  }

  .aig-feat.is-off {
    background: var(--bs-secondary-bg);
  }

  .aig-feat.is-off .aig-feat-body {
    opacity: 0.66;
  }

  @media (max-width: 1199.98px) {
    .aig-feat {
      grid-template-columns: 42px minmax(0, 1fr) auto;
    }

    .aig-feat .aig-feat-route {
      grid-column: 2/-1;
    }
  }

  @media (max-width: 575.98px) {
    .aig-feat {
      grid-template-columns: 42px minmax(0, 1fr);
    }

    .aig-feat .aig-feat-act {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  .aig-feat-ic {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: 13px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    font-size: 20px;
  }

  .aig-feat-body {
    min-width: 0;
  }

  .aig-feat-body strong {
    display: block;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-feat-body p {
    margin: 2px 0 0;
    font-size: 12px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  /* the routing itself, read as an arrow into a named model */
  .aig-feat-route {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    min-width: 0;
  }

  .aig-feat-route>i {
    font-size: 16px;
    color: var(--bs-secondary-color);
  }

  .aig-feat-act {
    display: flex;
    align-items: center;
    gap: 10px;
    justify-content: flex-end;
  }

  /* ============================================================
   9. PROMPT TEMPLATES
   Shown as the text they are, with the variables picked out and
   the system instruction separated from the task.
   ============================================================ */
  .aig-prompt {
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
    overflow: hidden;
  }

  .aig-prompt:hover {
    border-color: var(--aig-border-strong);
    box-shadow: var(--shadow-lift);
  }

  .aig-prompt.is-draft .aig-prompt-text {
    opacity: 0.68;
  }

  .aig-prompt-head {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 14px 16px 11px;
  }

  .aig-prompt-name {
    margin: 0;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-prompt-name+p {
    margin: 1px 0 0;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  /* the prompt body, on a recessed surface with a marker rule */
  .aig-prompt-text {
    margin: 0 16px;
    padding: 12px 14px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    border-left: 3px solid var(--bs-primary);
    font-size: 12.5px;
    line-height: 1.7;
    color: var(--bs-emphasis-color);
    white-space: pre-line;
  }

  .aig-prompt-text+.aig-prompt-text {
    margin-top: 8px;
    border-left-color: var(--aig-model);
  }

  /* the role this segment plays */

  .aig-prompt-text .aig-prompt-role {
    display: block;
    margin-bottom: 5px;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  /* a variable filled in at run time */

  .aig-prompt-text var {
    padding: 0 4px;
    border-radius: 4px;
    background: var(--tint-primary);
    font-family: var(--font-mono);
    font-size: 11.5px;
    font-style: normal;
    color: var(--bs-primary);
  }

  .aig-prompt-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    /* `auto` rather than a fixed gap, so the footer sits on the bottom edge
     however short the prompt above it is */
    margin-top: auto;
    padding: 11px 16px;
    background: var(--bs-secondary-bg);
    border-top: 1px solid var(--bs-border-color);
  }

  /* the space between the last prompt segment and the footer */
  .aig-prompt-text:last-of-type {
    margin-bottom: 14px;
  }

  /* ============================================================
   10. AUTOMATION ROWS + PERMISSION MATRIX
   ============================================================ */
  .aig-auto {
    display: grid;
    grid-template-columns: 8px minmax(0, 1fr) auto;
    align-items: center;
    gap: 14px;
    padding: 13px 16px;
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
  }

  .aig-auto+.aig-auto {
    margin-top: 8px;
  }

  /* a rib carrying whether the automation ran cleanly */

  .aig-auto::before {
    content: "";
    width: 4px;
    height: 28px;
    border-radius: 3px;
    background: var(--bs-success);
  }

  .aig-auto.is-warn::before {
    background: var(--bs-warning);
  }

  .aig-auto.is-stop::before {
    background: var(--aig-stop);
  }

  .aig-auto.is-off {
    background: var(--bs-secondary-bg);
  }

  .aig-auto.is-off::before {
    background: var(--aig-border-strong);
  }

  .aig-auto.is-off .aig-auto-body {
    opacity: 0.68;
  }

  @media (max-width: 767.98px) {
    .aig-auto {
      grid-template-columns: 8px minmax(0, 1fr);
      row-gap: 10px;
    }

    .aig-auto .aig-auto-side {
      grid-column: 2/-1;
      justify-content: flex-start;
    }
  }

  .aig-auto-body {
    min-width: 0;
  }

  .aig-auto-body strong {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-auto-body span {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    line-height: 1.55;
    color: var(--bs-secondary-color);
  }

  .aig-auto-side {
    display: flex;
    align-items: center;
    gap: 10px;
    justify-content: flex-end;
    flex-wrap: wrap;
  }

  /* ---- permission matrix ------------------------------------------------- */
  .aig-perm {
    display: grid;
    grid-template-columns: minmax(0, 1fr) repeat(4, 68px);
    align-items: center;
    gap: 8px;
    padding: 10px 0;
  }

  .aig-perm+.aig-perm {
    border-top: 1px solid var(--bs-border-color);
  }

  .aig-perm.is-head {
    padding-bottom: 8px;
    border-bottom: 2px solid var(--bs-border-color);
  }

  .aig-perm.is-head span {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    text-align: center;
    color: var(--bs-secondary-color);
  }

  .aig-perm.is-head span:first-child {
    text-align: left;
  }

  .aig-perm .aig-perm-name {
    min-width: 0;
    font-size: 13px;
    color: var(--bs-emphasis-color);
  }

  .aig-perm .aig-perm-name small {
    display: block;
    margin-top: 2px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  @media (max-width: 767.98px) {
    .aig-perm {
      grid-template-columns: minmax(0, 1fr) repeat(4, 1fr);
      gap: 4px;
    }
  }

  .aig-dot {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    margin: 0 auto;
    border-radius: 8px;
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    font-size: 15px;
    color: var(--aig-border-strong);
  }

  .aig-dot.is-yes {
    background: var(--aig-ok-soft);
    border-color: rgba(26, 190, 23, 0.28);
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .aig-dot.is-limited {
    background: var(--tint-warning);
    border-color: rgba(234, 179, 0, 0.32);
    color: rgb(142.2, 108.7769230769, 0);
  }

  /* ============================================================
   11. PREMIUM ACCORDION + ACTIVITY FLOW
   ============================================================ */
  .aig-acc {
    border-radius: var(--radius);
    border: 1px solid var(--bs-border-color);
    overflow: hidden;
  }

  .aig-acc .accordion-item {
    border: 0;
    background: var(--bs-body-bg);
  }

  .aig-acc .accordion-item+.accordion-item {
    border-top: 1px solid var(--bs-border-color);
  }

  .aig-acc .accordion-button {
    gap: 11px;
    padding: 15px 18px;
    background: var(--bs-body-bg);
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    box-shadow: none;
  }

  .aig-acc .accordion-button::after {
    margin-left: 0;
  }

  .aig-acc .accordion-button:not(.collapsed) {
    background: var(--bs-primary);
    color: #fff;
  }

  .aig-acc .accordion-button:not(.collapsed)::after {
    filter: invert(1) grayscale(1) brightness(2);
  }

  .aig-acc .accordion-button:focus {
    box-shadow: 0 0 0 3px var(--tint-primary);
  }

  .aig-acc .accordion-button i {
    font-size: 17px;
  }

  .aig-acc .aig-acc-spacer {
    margin-left: auto;
  }

  .aig-acc .accordion-body {
    padding: 6px 18px 18px;
  }

  /* ---- activity flow ----------------------------------------------------
   A rule runs horizontally through the middle of the row and the stages
   sit alternately above and below it, which reads as a signal path. */
  .aig-flow {
    position: relative;
    display: flex;
    gap: 14px;
    padding: 8px 4px;
    overflow-x: auto;
    scrollbar-width: thin;
    /* the rule itself */
  }

  .aig-flow::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 50%;
    height: 2px;
    margin-top: -1px;
    background: var(--bs-tertiary-bg);
  }

  .aig-flow-stage {
    position: relative;
    flex: 1 0 232px;
    padding: 106px 0 0;
    /* the node on the rule */
  }

  .aig-flow-stage::after {
    content: "";
    position: absolute;
    left: 22px;
    top: 50%;
    width: 13px;
    height: 13px;
    margin-top: -6.5px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 3px solid var(--bs-tertiary-bg);
    z-index: 1;
  }

  .aig-flow-stage.is-done::after {
    background: var(--bs-success);
    border-color: var(--bs-success);
  }

  .aig-flow-stage.is-current::after {
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  /* every second stage lifts above the rule instead of hanging below it */

  .aig-flow-stage:nth-child(even) {
    padding: 0 0 106px;
  }

  @media (max-width: 991.98px) {
    .aig-flow-stage {
      padding: 106px 0 0;
    }

    .aig-flow-stage:nth-child(even) {
      padding: 106px 0 0;
    }
  }

  .aig-flow-card {
    padding: 13px 15px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    box-shadow: var(--shadow);
  }

  .aig-flow-card h6 {
    margin: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-flow-card time {
    display: block;
    margin-top: 2px;
    font-family: var(--font-mono);
    font-size: 10.5px;
    color: var(--bs-secondary-color);
  }

  .aig-flow-card p {
    margin: 6px 0 0;
    font-size: 12px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   12. RECOMMENDATION CARDS
   The heading sits in a pill that straddles the top edge.
   ============================================================ */
  .aig-rec {
    position: relative;
    display: flex;
    flex-direction: column;
    gap: 10px;
    height: 100%;
    margin-top: 14px;
    padding: 26px 18px 18px;
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    transition: var(--transition);
  }

  .aig-rec:hover {
    box-shadow: var(--shadow-lift);
  }

  .aig-rec-pill {
    position: absolute;
    left: 18px;
    top: -14px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 28px;
    padding: 0 13px;
    border-radius: 999px;
    background: var(--bs-primary);
    font-size: 10.5px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #fff;
  }

  .aig-rec-pill i {
    font-size: 13px;
  }

  .aig-rec-pill.is-model {
    background: rgb(1.4426229508, 121.1803278689, 130.5573770492);
  }

  .aig-rec-pill.is-warn {
    background: rgb(172.8, 132.1846153846, 0);
  }

  .aig-rec-pill.is-ok {
    background: rgb(22.2647887324, 162.7042253521, 19.6957746479);
  }

  .aig-rec-title {
    margin: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-rec-txt {
    margin: 0;
    font-size: 12.5px;
    line-height: 1.65;
    color: var(--bs-secondary-color);
  }

  .aig-rec-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px solid var(--bs-border-color);
  }

  /* ============================================================
   13. OFFCANVAS, PANEL HELPERS, EMPTY STATE
   ============================================================ */
  /* The theme sets `.offcanvas.offcanvas-end { width: auto !important }`; the
   workspace has to match on three classes to beat it. */
  .offcanvas.offcanvas-end.aig-canvas {
    width: 88% !important;
    max-width: 1180px !important;
  }

  .aig-canvas-head {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 20px 24px;
    background: var(--bs-primary);
    color: #fff;
  }

  .aig-canvas-head .aig-card-ic {
    background: rgba(255, 255, 255, 0.14);
    color: #fff;
  }

  .aig-canvas-head .offcanvas-title {
    color: #fff;
  }

  .aig-canvas-head p {
    color: rgba(255, 255, 255, 0.6);
  }

  .aig-canvas-head .btn-close {
    filter: invert(1) grayscale(1);
    opacity: 0.7;
  }

  .aig-canvas-body {
    padding: 22px 24px 30px;
  }

  .aig-sect+.aig-sect {
    margin-top: 24px;
    padding-top: 20px;
    border-top: 1px solid var(--bs-border-color);
  }

  .aig-sect-title {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0 0 13px;
    font-size: 12px;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    color: var(--bs-emphasis-color);
  }

  .aig-sect-title i {
    font-size: 16px;
    color: var(--bs-primary);
  }

  .aig-check {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 9px 0;
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .aig-check+.aig-check {
    border-top: 1px solid var(--bs-border-color);
  }

  .aig-check>i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 16px;
    color: rgb(19.7746478873, 144.5070422535, 17.4929577465);
  }

  .aig-check.is-warn>i {
    color: rgb(142.2, 108.7769230769, 0);
  }

  .aig-check.is-stop>i {
    color: var(--aig-stop);
  }

  .aig-check span {
    display: block;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  .aig-audit {
    display: grid;
    grid-template-columns: 150px minmax(0, 1fr);
    gap: 14px;
    padding: 11px 0;
  }

  .aig-audit+.aig-audit {
    border-top: 1px solid var(--bs-border-color);
  }

  @media (max-width: 575.98px) {
    .aig-audit {
      grid-template-columns: minmax(0, 1fr);
      gap: 3px;
    }
  }

  .aig-audit-when {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .aig-audit-when strong {
    display: block;
    font-size: 12px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-audit-what {
    font-size: 13px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
  }

  .aig-audit-what span {
    display: block;
    margin-top: 2px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ---- empty state ------------------------------------------------------- */
  .aig-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 5px;
    padding: 38px 24px;
    border-radius: var(--radius);
    background: var(--bs-secondary-bg);
    border: 1px dashed var(--aig-border-strong);
  }

  .aig-empty i {
    font-size: 30px;
    color: var(--bs-secondary-color);
    opacity: 0.8;
  }

  .aig-empty h6 {
    margin: 8px 0 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  .aig-empty p {
    margin: 0;
    max-width: 48ch;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-secondary-color);
  }

  .aig-empty .btn {
    margin-top: 10px;
  }

  /*===== custom fields =====*/
  /*-----------------
	Custom Fields — dynamic form configuration components

	A shared vocabulary for the Custom Fields & Dynamic Form Configuration
	Center: the reusable fields themselves, the modules they are bound to,
	the validation that guards them, the layout that arranges them and the
	rules that make them move. Class prefix `cfx-`.

	The visual language is a low-code field builder, not a settings form.
	The pieces are the ones this subject needs and no other page does: a
	field plate carrying its type glyph and its machine name in monospace,
	a module plate whose field budget is drawn as a split required/optional
	bar, a live preview surface drawn on a dotted canvas, validation stated
	as rule chips rather than switches, and a rule card written as
	when/then.

	It borrows nothing from `_settings.scss` or `_ai-settings.scss` — those
	govern option lists;/* A cool slate-cyan, mixed rather than taken straight, so the builder
     reads as a schema tool and not as another blue settings page. */
  --field-accent: rgb(13.4, 120.88, 140.72);
  --field-accent-line: rgb(189.22, 232.38, 235.76);
  --field-req: #E82646;
  --field-req-soft: #FDE9ED;
  --field-opt: #0F65CD;
  --field-opt-soft: #E7F1FC;
  --field-ok: #1ABE17;
  --field-ok-soft: #E8F9E8;
  --field-draft: #4A00E5;
  --field-draft-soft: rgb(236.9, 229.5, 252.4);
  --field-grid: rgb(228.24, 229.68, 233.4);
}

[data-bs-theme=dark] {
  --field-accent-line: rgba(2, 168, 181, .34);
  --field-grid: rgba(255, 255, 255, .14);
}

/* Small eyebrow label used above every section heading. */
.field-metric-label {
  display: block;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
  margin-bottom: 4px;
}

/* Machine name of a field / module — always monospace, always selectable. */
.field-key {
  font-family: var(--font-mono);
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  background: var(--bs-secondary-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 6px;
  padding: 1px 6px;
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  vertical-align: middle;
}

/* Status / meta badge. Modifiers colour it;/* geometry, typography and surface come from the shared badge component */

.field-status-badge i {
  font-size: 12px;
}

.field-status-badge.is-published {
  background: var(--field-ok-soft);
  color: var(--bs-success);
  border-color: transparent;
}

.field-status-badge.is-draft {
  background: var(--field-draft-soft);
  color: var(--field-draft);
  border-color: transparent;
}

.field-status-badge.is-required {
  background: var(--field-req-soft);
  color: var(--field-req);
  border-color: transparent;
}

.field-status-badge.is-optional {
  background: var(--field-opt-soft);
  color: var(--field-opt);
  border-color: transparent;
}

.field-status-badge.is-warn {
  background: var(--tint-warning);
  color: rgb(172.8, 132.1846153846, 0);
  border-color: transparent;
}

.field-status-badge.is-accent {
  background: var(--tint-primary);
  color: var(--bs-primary);
  border-color: transparent;
}

.field-status-badge.is-archived {
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  border-style: dashed;
}

/* Field-type badge — carries the glyph of the input it produces. */
.type {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 600;
  padding: 2px 9px 2px 4px;
  border-radius: 999px;
  background: var(--tint-primary);
  color: var(--bs-primary);
  white-space: nowrap;
}

.type i {
  font-size: 12px;
  width: 17px;
  height: 17px;
  border-radius: 50%;
  background: var(--bs-body-bg);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* A split meter: required portion first, optional portion after. */
.field-progress-meter {
  height: 6px;
  border-radius: 999px;
  background: var(--track);
  display: flex;
  overflow: hidden;
}

.field-progress-meter span {
  display: block;
  height: 100%;
}

.field-progress-meter span:first-child {
  background: var(--field-req);
}

.field-progress-meter span:last-child {
  background: var(--field-opt);
}

/* Percentage helpers for the meter and coverage bars. */
/* ============================================================
   2. BUILDER HERO
   ============================================================ */
.hero {
  position: relative;
  overflow: hidden;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: radial-gradient(120% 160% at 100% 0%, var(--tint-primary) 0%, transparent 58%), var(--bs-body-bg);
  padding: 26px 26px 22px;
  margin-bottom: 24px;
  box-shadow: var(--shadow);
  /* The dotted canvas is the signature of this page — a field grid the
     builder snaps to, drawn faintly behind the hero content. */

  .hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: radial-gradient(var(--field-grid) 1px, transparent 1px);
    background-size: 18px 18px;
    opacity: 0.35;
    pointer-events: none;
  }

  .hero>* {
    position: relative;
  }

  .hero-top {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    flex-wrap: wrap;
  }

  .hero-crest {
    width: 54px;
    height: 54px;
    flex-shrink: 0;
    border-radius: var(--radius);
    background: var(--bs-primary);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 26px;
    box-shadow: 0 8px 20px rgba(2, 168, 181, 0.28);
  }

  .hero-title {
    font-size: 26px;
    font-weight: 700;
    color: var(--bs-emphasis-color);
    line-height: 1.25;
    margin-bottom: 6px;
  }

  .hero-subtitle {
    font-size: 13.5px;
    color: var(--bs-secondary-color);
    max-width: 74ch;
    margin-bottom: 0;
  }

  /* Hero facts read as a schema summary strip, not as KPI cards. */
  .hero-facts {
    display: flex;
    flex-wrap: wrap;
    gap: 0;
    margin-top: 22px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    overflow: hidden;
  }

  .hero-fact {
    flex: 1 1 168px;
    min-width: 150px;
    padding: 13px 16px;
    border-right: 1px solid var(--bs-border-color);
  }

  .hero-fact:last-child {
    border-right: 0;
  }

  .hero-fact span {
    display: block;
    font-size: 11px;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
    margin-bottom: 4px;
  }

  .hero-fact strong {
    display: flex;
    align-items: center;
    gap: 7px;
    flex-wrap: wrap;
    font-size: 16px;
    font-weight: 700;
    color: var(--bs-emphasis-color);
    line-height: 1.3;
  }

  .hero-fact small {
    font-size: 12px;
    font-weight: 400;
    color: var(--bs-secondary-color);
  }

  .hero-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 18px;
  }

  /* ============================================================
   3. STICKY MODULE NAVIGATION
   ============================================================ */
  .field-navigation {
    position: sticky;
    top: 76px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    padding: 8px;
    box-shadow: var(--shadow);
    max-height: calc(100vh - 100px);
    overflow-y: auto;
  }

  .field-navigation::-webkit-scrollbar {
    width: 5px;
  }

  .field-navigation::-webkit-scrollbar-thumb {
    background: var(--track);
    border-radius: 999px;
  }

  .navigation-header {
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
    padding: 10px 10px 6px;
  }

  .field-navigation-link {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    text-align: left;
    border: 0;
    background: transparent;
    color: var(--bs-emphasis-color);
    font-size: 13.5px;
    font-weight: 500;
    padding: 9px 11px;
    border-radius: var(--radius-sm);
    transition: var(--transition);
  }

  .field-navigation-link>i {
    font-size: 17px;
    color: var(--bs-secondary-color);
    flex-shrink: 0;
    transition: var(--transition);
  }

  .field-navigation-link .navigation-text {
    flex: 1 1 auto;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .field-navigation-link .navigation-n {
    font-size: 11px;
    font-weight: 600;
    color: var(--bs-secondary-color);
    background: var(--bs-secondary-bg);
    border-radius: 999px;
    padding: 1px 7px;
    flex-shrink: 0;
  }

  .field-navigation-link:hover {
    background: var(--bs-secondary-bg);
  }

  .field-navigation-link.active {
    background: var(--bs-primary);
    color: #fff;
  }

  .field-navigation-link.active>i,
  .field-navigation-link.active .navigation-n {
    color: #fff;
  }

  .field-navigation-link.active .navigation-n {
    background: rgba(255, 255, 255, 0.18);
  }

  .navigation-footer {
    border-top: 1px solid var(--bs-border-color);
    margin-top: 8px;
    padding: 14px 11px 6px;
  }

  /* Coverage bar in the nav footer. */
  .cover {
    height: 8px;
    border-radius: 999px;
    background: var(--track);
    overflow: hidden;
    margin-bottom: 8px;
  }

  .cover span {
    display: block;
    height: 100%;
    border-radius: 999px;
    background: linear-gradient(90deg, var(--bs-primary), var(--field-accent-line));
  }

  /* ============================================================
   4. MODULE CARDS
   ============================================================ */
  .module {
    position: relative;
    height: 100%;
    display: flex;
    flex-direction: column;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    transition: var(--transition);
    overflow: hidden;
  }

  .module:hover {
    border-color: var(--field-accent-line);
    box-shadow: var(--shadow-lift);
    transform: translateY(-2px);
  }

  .module-header {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 16px 16px 12px;
  }

  .module-icon {
    width: 42px;
    height: 42px;
    flex-shrink: 0;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 21px;
  }

  .module-name {
    font-size: 15px;
    font-weight: 700;
    color: var(--bs-emphasis-color);
    margin-bottom: 3px;
    line-height: 1.3;
  }

  /* The field budget: total, then the required/optional split beneath it. */
  .module-count {
    display: flex;
    align-items: baseline;
    gap: 6px;
    padding: 0 16px;
  }

  .module-count b {
    font-size: 26px;
    font-weight: 700;
    color: var(--bs-emphasis-color);
    line-height: 1;
  }

  .module-count span {
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  .module-split {
    padding: 10px 16px 0;
  }

  .module-split .module-legend {
    display: flex;
    gap: 14px;
    margin-top: 8px;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  .module-split .module-legend span {
    display: inline-flex;
    align-items: center;
    gap: 5px;
  }

  .module-split .module-legend span::before {
    content: "";
    width: 7px;
    height: 7px;
    border-radius: 2px;
    background: var(--field-opt);
  }

  .module-split .module-legend span.is-req::before {
    background: var(--field-req);
  }

  .module-split .module-legend b {
    color: var(--bs-emphasis-color);
    font-weight: 600;
  }

  .module-footer {
    margin-top: auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
    padding: 14px 16px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   5. FIELD CARDS + TYPE GLYPHS
   ============================================================ */
  .field {
    position: relative;
    height: 100%;
    display: flex;
    flex-direction: column;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    transition: var(--transition);
    cursor: pointer;
    /* The drag rail — this is a builder, so a field can be reordered. */
  }

  .field::before {
    content: "";
    position: absolute;
    left: 0;
    top: 14px;
    bottom: 14px;
    width: 3px;
    border-radius: 0 3px 3px 0;
    background: var(--bs-primary);
    opacity: 0;
    transition: var(--transition);
  }

  .field:hover,
  .field:focus-visible {
    border-color: var(--field-accent-line);
    box-shadow: var(--shadow-lift);
    outline: 0;
  }

  .field:hover::before,
  .field:focus-visible::before {
    opacity: 1;
  }

  .field.is-draft {
    border-style: dashed;
  }

  .field.is-archived {
    opacity: 0.72;
  }

  .field-header {
    display: flex;
    align-items: flex-start;
    gap: 11px;
    padding: 14px 14px 10px;
  }

  .field-glyph {
    width: 38px;
    height: 38px;
    flex-shrink: 0;
    border-radius: var(--radius-sm);
    border: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
    color: var(--bs-emphasis-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 19px;
  }

  .field-name {
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 4px;
    line-height: 1.35;
  }

  .field-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    flex-wrap: wrap;
    padding: 0 14px 12px;
  }

  .field-footer {
    margin-top: auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 10px 14px;
    border-top: 1px solid var(--bs-border-color);
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* Type palette — every supported field type as a pickable glyph tile. */
  .palette {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(126px, 1fr));
    gap: 10px;
  }

  .field-tile {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 10px 11px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    color: var(--bs-emphasis-color);
    font-size: 12.5px;
    font-weight: 500;
    text-align: left;
    width: 100%;
    transition: var(--transition);
  }

  .field-tile i {
    font-size: 17px;
    color: var(--bs-primary);
    flex-shrink: 0;
  }

  .field-tile span {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .field-tile:hover {
    border-color: var(--field-accent-line);
    background: var(--tint-primary);
    transform: translateY(-1px);
  }

  .field-tile.is-active {
    border-color: var(--bs-primary);
    background: var(--tint-primary);
    box-shadow: inset 0 0 0 1px var(--bs-primary);
  }

  /* ============================================================
   6. FIELD PREVIEW CANVAS
   ============================================================ */
  .canvas {
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background-color: var(--bs-body-bg);
    background-image: radial-gradient(var(--field-grid) 1px, transparent 1px);
    background-size: 16px 16px;
    padding: 18px;
  }

  .preview {
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    padding: 14px;
    box-shadow: var(--shadow);
  }

  .preview+.preview {
    margin-top: 12px;
  }

  .preview .preview-label {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 6px;
  }

  .preview .preview-label .star {
    color: var(--field-req);
  }

  .preview .preview-help {
    font-size: 11.5px;
    color: var(--bs-secondary-color);
    margin: 6px 0 0;
  }

  /* A dashed slot where the next field will land. */
  .slot {
    border: 1px dashed var(--border-strong);
    border-radius: var(--radius-sm);
    background: transparent;
    color: var(--bs-secondary-color);
    font-size: 12.5px;
    font-weight: 500;
    padding: 16px;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    transition: var(--transition);
  }

  .slot:hover {
    border-color: var(--bs-primary);
    color: var(--bs-primary);
    background: var(--tint-primary);
  }

  /* ============================================================
   7. VALIDATION CARDS + RULE CHIPS
   ============================================================ */
  .guard {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    height: 100%;
    padding: 14px;
    border: 1px solid var(--bs-border-color);
    border-left: 3px solid var(--bs-primary);
    border-radius: var(--radius-sm);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    transition: var(--transition);
  }

  .guard:hover {
    box-shadow: var(--shadow-lift);
  }

  .guard.is-req {
    border-left-color: var(--field-req);
  }

  .guard.is-warn {
    border-left-color: var(--bs-warning);
  }

  .guard.is-ok {
    border-left-color: var(--bs-success);
  }

  .guard .guard-icon {
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    color: var(--bs-emphasis-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
  }

  .guard .guard-title {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 2px;
  }

  .guard p {
    font-size: 12px;
    color: var(--bs-secondary-color);
    margin-bottom: 0;
  }

  /* A validation rule stated as an expression. */
  .expression {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-emphasis-color);
    background: var(--bs-secondary-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: 6px;
    padding: 3px 8px;
    margin: 6px 6px 0 0;
  }

  .expression b {
    color: var(--bs-primary);
    font-weight: 600;
  }

  /* ============================================================
   8. LAYOUT / SECTION CARDS
   ============================================================ */
  .field-panel {
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    display: flex;
    flex-direction: column;
  }

  .field-panel-header {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 14px 16px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .field-panel-header .field-panel-icon {
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
  }

  .field-panel-header .field-panel-title {
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 1px;
  }

  .field-panel-header p {
    font-size: 12px;
    color: var(--bs-secondary-color);
    margin-bottom: 0;
  }

  .field-panel-body {
    padding: 14px 16px;
    flex: 1 1 auto;
  }

  .field-panel-footer {
    padding: 12px 16px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
    border-radius: 0 0 var(--radius) var(--radius);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
    font-size: 12px;
    color: var(--bs-secondary-color);
  }

  /* A key/value line inside any panel. */
  .field-info-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 0;
    border-bottom: 1px dashed var(--bs-border-color);
  }

  .field-info-row:last-child {
    border-bottom: 0;
    padding-bottom: 0;
  }

  .field-info-row:first-child {
    padding-top: 0;
  }

  .field-info-row .field-row-key {
    flex: 1 1 auto;
    font-size: 13px;
    font-weight: 500;
    color: var(--bs-emphasis-color);
  }

  .field-info-row .field-row-key small {
    display: block;
    font-size: 11.5px;
    font-weight: 400;
    color: var(--bs-secondary-color);
    margin-top: 1px;
  }

  .field-info-row .field-row-value {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 8px;
  }

  /* A compact column diagram for the layout section. */
  .columns {
    display: flex;
    gap: 6px;
  }

  .columns span {
    flex: 1 1 0;
    height: 34px;
    border-radius: 6px;
    border: 1px dashed var(--border-strong);
    background: var(--bs-secondary-bg);
  }

  .columns.is-active span {
    border-style: solid;
    border-color: var(--field-accent-line);
    background: var(--tint-primary);
  }

  /* ============================================================
   9. DYNAMIC RULE CARDS (WHEN → THEN)
   ============================================================ */
  .field-rule {
    height: 100%;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    padding: 15px;
    transition: var(--transition);
  }

  .field-rule:hover {
    border-color: var(--field-accent-line);
    box-shadow: var(--shadow-lift);
  }

  .field-rule .rule-top {
    display: flex;
    align-items: center;
    gap: 9px;
    margin-bottom: 12px;
  }

  .field-rule .rule-top i {
    font-size: 18px;
    color: var(--bs-primary);
  }

  .field-rule .rule-top .rule-title {
    flex: 1 1 auto;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 0;
  }

  .field-clause {
    position: relative;
    padding: 8px 10px 8px 52px;
    border-radius: var(--radius-sm);
    background: var(--bs-secondary-bg);
    font-size: 12.5px;
    color: var(--bs-emphasis-color);
  }

  .field-clause+.field-clause {
    margin-top: 6px;
  }

  /* WHEN / THEN keyword rendered in the gutter. */

  .field-clause::before {
    content: attr(data-kw);
    position: absolute;
    left: 10px;
    top: 9px;
    font-family: var(--font-mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.06em;
    color: var(--bs-primary);
  }

  .field-clause code {
    font-family: var(--font-mono);
    font-size: 11.5px;
    color: var(--bs-emphasis-color);
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: 5px;
    padding: 0 4px;
  }

  /* ============================================================
   10. ACTIVITY TIMELINE
   ============================================================ */
  .flow {
    position: relative;
    padding-left: 30px;
    margin: 0;
    list-style: none;
  }

  .flow::before {
    content: "";
    position: absolute;
    left: 11px;
    top: 6px;
    bottom: 6px;
    width: 2px;
    background: var(--track);
  }

  .flow-item {
    position: relative;
    padding-bottom: 20px;
  }

  .flow-item:last-child {
    padding-bottom: 0;
  }

  .flow-item::before {
    content: "";
    position: absolute;
    left: -25px;
    top: 3px;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: var(--bs-body-bg);
    border: 2px solid var(--track);
  }

  .flow-item.is-done::before {
    background: var(--bs-success);
    border-color: var(--bs-success);
  }

  .flow-item.is-current::before {
    background: var(--bs-primary);
    border-color: var(--bs-primary);
    box-shadow: 0 0 0 4px var(--tint-primary);
  }

  .flow-item .flow-title {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 2px;
  }

  .flow-item p {
    font-size: 12px;
    color: var(--bs-secondary-color);
    margin-bottom: 0;
  }

  .flow-item time {
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  /* ============================================================
   11. TEMPLATE CARDS
   ============================================================ */
  .field-template {
    position: relative;
    height: 100%;
    display: flex;
    flex-direction: column;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    overflow: hidden;
    transition: var(--transition);
  }

  .field-template:hover {
    border-color: var(--field-accent-line);
    box-shadow: var(--shadow-lift);
    transform: translateY(-2px);
  }

  /* A miniature of the form the template produces. */

  .field-template .template-thumb {
    height: 82px;
    padding: 12px 14px;
    background-color: var(--tint-primary);
    background-image: radial-gradient(var(--field-grid) 1px, transparent 1px);
    background-size: 14px 14px;
    display: flex;
    flex-direction: column;
    gap: 6px;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .field-template .template-thumb span {
    height: 8px;
    border-radius: 3px;
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    display: block;
  }

  .field-template .field-template-body {
    padding: 14px;
    flex: 1 1 auto;
  }

  .field-template .field-template-title {
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 3px;
  }

  .field-template .template-stats {
    display: flex;
    gap: 16px;
    margin-top: 11px;
  }

  .field-template .template-stats div {
    line-height: 1.2;
  }

  .field-template .template-stats b {
    display: block;
    font-size: 16px;
    font-weight: 700;
    color: var(--bs-emphasis-color);
  }

  .field-template .template-stats span {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--bs-secondary-color);
  }

  .field-template .field-template-footer {
    display: flex;
    gap: 8px;
    padding: 12px 14px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
  }

  /* ============================================================
   12. INSIGHT CARDS
   ============================================================ */
  .insight {
    height: 100%;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    padding: 16px;
  }

  .insight .insight-top {
    display: flex;
    align-items: center;
    gap: 9px;
    margin-bottom: 12px;
  }

  .insight .insight-top i {
    width: 30px;
    height: 30px;
    border-radius: 8px;
    background: var(--tint-primary);
    color: var(--bs-primary);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
  }

  .insight .insight-top .insight-title {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 0;
  }

  .insight.is-warn .insight-top i {
    background: var(--tint-warning);
    color: rgb(172.8, 132.1846153846, 0);
  }

  .insight.is-stop .insight-top i {
    background: var(--field-req-soft);
    color: var(--field-req);
  }

  /* A ranked usage line inside an insight card. */
  .rank {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 7px 0;
    border-bottom: 1px dashed var(--bs-border-color);
  }

  .rank:last-child {
    border-bottom: 0;
    padding-bottom: 0;
  }

  .rank .rank-n {
    width: 20px;
    font-family: var(--font-mono);
    font-size: 11px;
    color: var(--bs-secondary-color);
    flex-shrink: 0;
  }

  .rank .rank-name {
    flex: 1 1 auto;
    font-size: 12.5px;
    color: var(--bs-emphasis-color);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .rank .rank-bar {
    flex: 0 0 78px;
    height: 5px;
    border-radius: 999px;
    background: var(--track);
    overflow: hidden;
  }

  .rank .rank-bar span {
    display: block;
    height: 100%;
    border-radius: 999px;
    background: var(--bs-primary);
  }

  .rank .rank-v {
    flex: 0 0 auto;
    font-size: 11.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
  }

  /* ============================================================
   13. PREMIUM ACCORDION + TABS
   ============================================================ */
  .field-accordion .accordion-item {
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius) !important;
    background: var(--bs-body-bg);
    margin-bottom: 10px;
    overflow: hidden;
    box-shadow: var(--shadow);
  }

  .field-accordion .accordion-button {
    background: var(--bs-body-bg);
    color: var(--bs-emphasis-color);
    font-size: 13.5px;
    font-weight: 600;
    padding: 14px 16px;
    box-shadow: none;
  }

  .field-accordion .accordion-button:not(.collapsed) {
    background: var(--tint-primary);
    color: var(--bs-primary);
  }

  .field-accordion .accordion-button:focus {
    box-shadow: none;
    border-color: transparent;
  }

  .field-accordion .accordion-button::after {
    width: 24px;
    height: 24px;
    background-size: 15px;
  }

  .field-accordion .accordion-body {
    padding: 6px 16px 16px;
    font-size: 13px;
    color: var(--bs-secondary-color);
  }

  /* Segmented tabs used inside the offcanvas workspace. */
  .segment {
    display: inline-flex;
    flex-wrap: wrap;
    gap: 4px;
    padding: 4px;
    border: 1px solid var(--bs-border-color);
    border-radius: 999px;
    background: var(--bs-secondary-bg);
  }

  .segment .nav-link {
    border: 0;
    border-radius: 999px;
    padding: 6px 14px;
    font-size: 12.5px;
    font-weight: 500;
    color: var(--bs-secondary-color);
    background: transparent;
    transition: var(--transition);
  }

  .segment .nav-link:hover {
    color: var(--bs-emphasis-color);
  }

  .segment .nav-link.active {
    background: var(--bs-body-bg);
    color: var(--bs-primary);
    box-shadow: var(--shadow);
  }

  /* ============================================================
   14. OFFCANVAS WORKSPACE, MODALS, EMPTY STATE
   ============================================================ */
  .field-detail-panel {
    width: 88% !important;
    max-width: 1400px;
  }

  .field-detail-panel .offcanvas-header {
    border-bottom: 1px solid var(--bs-border-color);
    padding: 16px 22px;
    align-items: flex-start;
    gap: 14px;
  }

  .field-detail-panel .offcanvas-body {
    padding: 20px 22px 28px;
    background: var(--bs-secondary-bg);
  }

  @media (max-width: 991.98px) {
    .field-detail-panel {
      width: 100% !important;
    }
  }

  .field-detail-title {
    font-size: 19px;
    font-weight: 700;
    color: var(--bs-emphasis-color);
    margin-bottom: 4px;
    line-height: 1.3;
  }

  .field-modal-icon {
    width: 40px;
    height: 40px;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
  }

  .field-modal-icon.is-stop {
    background: var(--field-req-soft);
    color: var(--field-req);
  }

  .empty-state {
    border: 1px dashed var(--border-strong);
    border-radius: var(--radius);
    background-color: var(--bs-body-bg);
    background-image: radial-gradient(var(--field-grid) 1px, transparent 1px);
    background-size: 16px 16px;
    padding: 44px 24px;
    text-align: center;
  }

  .empty-state i {
    font-size: 32px;
    color: var(--bs-secondary-color);
    margin-bottom: 10px;
    display: block;
  }

  .empty-state .empty-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 4px;
  }

  .empty-state p {
    font-size: 12.5px;
    color: var(--bs-secondary-color);
    max-width: 46ch;
    margin: 0 auto 14px;
  }

  /* Section heading shared by every workspace pane. */
  .field-section-header {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 14px;
    flex-wrap: wrap;
    margin-bottom: 16px;
  }

  .field-section-header h2 {
    font-size: 19px;
    font-weight: 700;
    color: var(--bs-emphasis-color);
    margin-bottom: 3px;
  }

  .field-section-header p {
    font-size: 13px;
    color: var(--bs-secondary-color);
    margin-bottom: 0;
    max-width: 72ch;
  }

  @media (max-width: 1199.98px) {
    .settings-profile .border-start {
      border-left: none !important;
      padding: 0px !important;
    }
  }

  @media (max-width: 767.98px) {

    div.dataTables_wrapper div.dataTables_length,
    div.dataTables_wrapper div.dataTables_filter,
    div.dataTables_wrapper div.dataTables_info,
    div.dataTables_wrapper div.dataTables_paginate {
      text-align: start !important;
    }
  }

  /* A deep editorial indigo-blue, distinct from the plain brand blue so
     the communication desk reads as its own surface. */
  --message-accent: rgb(52.88, 80, 183);
  --message-accent-line: rgb(196.8, 206.7, 246);
  --message-urgent: #E82646;
  --message-urgent-soft: #FDE9ED;
  --message-high: #EAB300;
  --message-high-soft: #FEF8EA;
  --message-normal: #0F65CD;
  --message-normal-soft: #E7F1FC;
  --message-live: #1ABE17;
  --message-live-soft: #E8F9E8;
  --message-draft: #4A00E5;
  --message-draft-soft: rgb(236.9, 229.5, 252.4);
}

[data-theme=dark],
[data-bs-theme=dark],
html.darkmode {
  --message-accent-line: rgba(31, 59, 96, .38);
  --message-urgent-soft: rgba(234, 84, 85, 0.18);
  --message-high-soft: rgba(255, 159, 67, 0.18);
  --message-normal-soft: rgba(0, 207, 232, 0.18);
  --message-live-soft: rgba(40, 199, 111, 0.18);
  --message-draft-soft: rgba(115, 103, 240, 0.18);
}

[data-theme=dark] .message-status-badge.is-high,
[data-bs-theme=dark] .message-status-badge.is-high,
html.darkmode .message-status-badge.is-high {
  color: var(--message-high);
}

.message-metric-label {
  display: block;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
  margin-bottom: 4px;
}

/* Section heading shared by every block on the page. */
.message-section-header {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 14px;
  flex-wrap: wrap;
  margin-bottom: 16px;
}

.message-section-header h2 {
  font-size: 20px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  margin-bottom: 3px;
}

.message-section-header p {
  font-size: 13px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
  max-width: 74ch;
}

/* geometry, typography and surface come from the shared badge component */

.message-status-badge i {
  font-size: 12px;
}

.message-status-badge.is-live {
  background: var(--message-live-soft);
  color: var(--message-live);
  border-color: transparent;
}

.message-status-badge.is-draft {
  background: var(--message-draft-soft);
  color: var(--message-draft);
  border-color: transparent;
}

.message-status-badge.is-scheduled {
  background: var(--message-normal-soft);
  color: var(--message-normal);
  border-color: transparent;
}

.message-status-badge.is-urgent {
  background: var(--message-urgent-soft);
  color: var(--message-urgent);
  border-color: transparent;
}

.message-status-badge.is-high {
  background: var(--message-high-soft);
  color: rgb(172.8, 132.1846153846, 0);
  border-color: transparent;
}

.message-status-badge.is-accent {
  background: var(--tint-primary);
  color: var(--bs-primary);
  border-color: transparent;
}

.message-status-badge.is-expired {
  border-style: dashed;
}

/* Category tag — the subject of the announcement, always plain. */
.category {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--bs-primary);
}

.category::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 2px;
  background: currentcolor;
}

/* Channel pip — a channel this piece was carried on. */
.pip {
  width: 24px;
  height: 24px;
  border-radius: 7px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  border: 1px solid var(--bs-border-color);
}

.pip.is-on {
  background: var(--tint-primary);
  color: var(--bs-primary);
  border-color: transparent;
}

.pip.is-off {
  opacity: 0.45;
}

.pips {
  display: inline-flex;
  gap: 4px;
}

/* Read-rate bar, used on announcement, audience and channel cards. */
.rate {
  height: 5px;
  border-radius: 999px;
  background: var(--track);
  overflow: hidden;
}

.rate span {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--bs-primary);
}

.rate.is-live span {
  background: var(--message-live);
}

.rate.is-warn span {
  background: var(--message-high);
}

/* Small key/value line reused inside card bodies. */
.info-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 9px 0;
  border-bottom: 1px dashed var(--bs-border-color);
}

.info-row:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.info-row:first-child {
  padding-top: 0;
}

.info-row .row-key {
  flex: 1 1 auto;
  font-size: 13px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
}

.info-row .row-key small {
  display: block;
  font-size: 11.5px;
  font-weight: 400;
  color: var(--bs-secondary-color);
  margin-top: 1px;
}

.info-row .row-value {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

/* ============================================================
   2. ANNOUNCEMENT CARDS
   ============================================================ */
.message-post {
  position: relative;
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
  transition: var(--transition);
}

.message-post:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
  transform: translateY(-2px);
}

/* Priority rail — the one piece of colour on an otherwise calm card. */

.message-post::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--message-normal);
  z-index: 2;
}

.message-post.is-urgent::before {
  background: var(--message-urgent);
}

.message-post.is-high::before {
  background: var(--message-high);
}

.message-post.is-draft {
  border-style: dashed;
}

.message-post.is-draft::before {
  background: var(--message-draft);
}

.post-cover {
  position: relative;
  display: block;
  height: 148px;
  overflow: hidden;
  background: var(--bs-secondary-bg);
}

.post-cover img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.message-post:hover .post-cover img {
  transform: scale(1.04);
}

/* Status sits on the cover so the body stays about the content. */

.post-cover .post-status {
  position: absolute;
  top: 10px;
  left: 12px;
  display: inline-flex;
  gap: 5px;
  flex-wrap: wrap;
}

.post-cover .post-acknowledgement {
  position: absolute;
  top: 10px;
  right: 12px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  font-weight: 600;
  padding: 2px 9px;
  border-radius: 999px;
  background: rgba(20, 20, 43, 0.72);
  color: #fff;
  backdrop-filter: blur(4px);
}

.post-body {
  padding: 14px 16px;
  flex: 1 1 auto;
}

.post-body .post-title {
  font-size: 15.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  line-height: 1.35;
  margin: 6px 0 5px;
}

.post-body .post-title a {
  color: inherit;
}

.post-body .post-summary {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Dates and attachments — the practical facts, set apart from the copy. */
.post-facts {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 16px;
  margin-top: 12px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.post-facts span {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.post-facts b {
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

.post-reach {
  padding: 0 16px 12px;
}

.post-reach .post-reach-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 5px;
}

.post-reach .post-reach-top b {
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

.post-footer {
  margin-top: auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  padding: 11px 16px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
}

/* ============================================================
   3. AUDIENCE CARDS
   ============================================================ */
.audience {
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  padding: 16px;
  transition: var(--transition);
}

.audience:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
}

.audience .audience-top {
  display: flex;
  align-items: center;
  gap: 11px;
  margin-bottom: 14px;
}

.audience .audience-top .audience-icon {
  width: 38px;
  height: 38px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 19px;
}

.audience .audience-top .audience-name {
  font-size: 14.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 1px;
}

.audience .audience-top small {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.audience .audience-count {
  display: flex;
  align-items: baseline;
  gap: 6px;
  margin-bottom: 12px;
}

.audience .audience-count b {
  font-size: 24px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1;
}

.audience .audience-count span {
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.audience .audience-footer {
  margin-top: auto;
  padding-top: 12px;
  border-top: 1px dashed var(--bs-border-color);
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ============================================================
   4. TEMPLATE CARDS
   ============================================================ */
.template {
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
  transition: var(--transition);
}

.template:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
  transform: translateY(-2px);
}

/* A miniature of the notice the template writes. */

.template .template-preview {
  padding: 14px 16px 12px;
  background: var(--tint-primary);
  border-bottom: 1px solid var(--bs-border-color);
}

.template .template-preview .template-mini {
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  padding: 10px 12px;
}

.template .template-preview .template-mini b {
  display: block;
  font-size: 12px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 7px;
}

.template .template-preview .template-mini i {
  display: block;
  height: 6px;
  border-radius: 3px;
  background: var(--track);
  margin-bottom: 5px;
}

.template .template-preview .template-mini i:last-child {
  margin-bottom: 0;
}

.template .template-body {
  padding: 13px 16px;
  flex: 1 1 auto;
}

.template .template-body .template-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin: 5px 0 4px;
}

.template .template-body p {
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
}

.template .template-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 11px 16px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ============================================================
   5. SCHEDULE CARDS
   ============================================================ */
.schedule {
  display: flex;
  gap: 0;
  height: 100%;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
  transition: var(--transition);
}

.schedule:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
}

/* The date block reads as a tear-off from a desk calendar. */

.schedule .schedule-when {
  flex: 0 0 92px;
  padding: 14px 10px;
  text-align: center;
  background: var(--tint-primary);
  border-right: 1px solid var(--bs-border-color);
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.schedule .schedule-when .schedule-day {
  font-size: 26px;
  font-weight: 700;
  color: var(--bs-primary);
  line-height: 1;
}

.schedule .schedule-when .schedule-month {
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--bs-primary);
  margin-top: 3px;
}

.schedule .schedule-when .schedule-time {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-top: 7px;
  padding-top: 7px;
  border-top: 1px dashed var(--border-strong);
}

.schedule .schedule-main {
  flex: 1 1 auto;
  padding: 13px 15px;
  min-width: 0;
}

.schedule .schedule-main .schedule-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 4px;
}

.schedule .schedule-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 5px 14px;
  margin-top: 10px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.schedule .schedule-meta span {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.schedule .schedule-meta b {
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

/* ============================================================
   6. CHANNEL CARDS
   ============================================================ */
.channel {
  position: relative;
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  padding: 16px;
  transition: var(--transition);
}

.channel:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
}

.channel.is-off {
  background: var(--bs-secondary-bg);
}

.channel .channel-top {
  display: flex;
  align-items: flex-start;
  gap: 11px;
  margin-bottom: 12px;
}

.channel .channel-top .channel-icon {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
}

.channel .channel-top .channel-name {
  font-size: 14.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 2px;
}

.channel .channel-top p {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
}

.channel .channel-footer {
  margin-top: auto;
  padding-top: 12px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  border-top: 1px dashed var(--bs-border-color);
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ============================================================
   7. OFFCANVAS WORKSPACE + MODALS
   ============================================================ */
.message-detail-panel {
  width: 88% !important;
  max-width: 1400px;
}

.message-detail-panel .offcanvas-header {
  border-bottom: 1px solid var(--bs-border-color);
  padding: 16px 22px;
  align-items: flex-start;
  gap: 14px;
}

.message-detail-panel .offcanvas-body {
  padding: 20px 22px 28px;
  background: var(--bs-secondary-bg);
}

@media (max-width: 991.98px) {
  .message-detail-panel {
    width: 100% !important;
  }
}

.detail-title {
  font-size: 20px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  margin-bottom: 5px;
  line-height: 1.3;
}

/* A plain panel used to group anything inside the offcanvas or a modal. */
.message-panel {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
}

.message-panel .message-panel-header {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 13px 16px;
  border-bottom: 1px solid var(--bs-border-color);
}

.message-panel .message-panel-header .panel-icon {
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
}

.message-panel .message-panel-header .panel-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 0;
}

.message-panel .message-panel-body {
  padding: 14px 16px;
  flex: 1 1 auto;
}

.message-panel .panel-footer {
  padding: 11px 16px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
  border-radius: 0 0 var(--radius) var(--radius);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 12px;
  color: var(--bs-secondary-color);
}

/* The announcement as the recipient sees it. */
.reader {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  overflow: hidden;
}

.reader .reader-cover {
  height: 210px;
}

.reader .reader-cover img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.reader .reader-body {
  padding: 20px 22px 24px;
}

.reader .reader-body h3 {
  font-size: 22px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.3;
  margin: 8px 0 10px;
}

.reader .reader-body p {
  font-size: 13.5px;
  line-height: 1.7;
  color: var(--bs-secondary-color);
}

.reader .reader-body h6 {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin: 18px 0 8px;
}

.reader .reader-body ul {
  padding-left: 18px;
  font-size: 13.5px;
  line-height: 1.8;
  color: var(--bs-secondary-color);
}

/* Attachment row. */
.file {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 9px 11px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  transition: var(--transition);
}

.file+.file {
  margin-top: 8px;
}

.file:hover {
  border-color: var(--message-accent-line);
}

.file i {
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  border-radius: 8px;
  background: var(--bs-secondary-bg);
  color: var(--bs-primary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
}

.file .message-file-name {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.file .message-file-name small {
  display: block;
  font-size: 11px;
  font-weight: 400;
  color: var(--bs-secondary-color);
}

/* Comment thread inside the offcanvas. */
.comment {
  display: flex;
  gap: 11px;
  padding: 12px 0;
  border-bottom: 1px dashed var(--bs-border-color);
}

.comment:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.comment img {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}

.comment .comment-who {
  display: flex;
  align-items: baseline;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 3px;
}

.comment .comment-who b {
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

.comment .comment-who time {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.comment p {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
  line-height: 1.6;
}

/* Compact related-announcement row. */
.message-related-item {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 10px 0;
  border-bottom: 1px dashed var(--bs-border-color);
}

.message-related-item:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.message-related-item img {
  width: 46px;
  height: 40px;
  border-radius: 7px;
  object-fit: cover;
  flex-shrink: 0;
}

.message-related-item .related-text {
  flex: 1 1 auto;
  min-width: 0;
}

.message-related-item .related-text b {
  display: block;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.message-related-item .related-text small {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.message-modal-icon {
  width: 40px;
  height: 40px;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
}

/* ============================================================
   8. BROADCAST SCHEDULER

   The scheduler shares the badges, pips, rows, panels, reader and
   offcanvas above — a broadcast is an announcement that has not left
   yet. What it adds is the machinery of *when*: a departure clock on
   every card, a recurrence rule stated in words, a per-channel queue,
   and an approval that has to clear before the clock matters.
   ============================================================ */
/* --- Broadcast card ----------------------------------------- */
.broadcast {
  position: relative;
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
  transition: var(--transition);
}

.broadcast:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
  transform: translateY(-2px);
}

/* State rail — reads at a glance across a wall of cards. */

.broadcast::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--message-normal);
  z-index: 2;
}

.broadcast.is-paused::before {
  background: var(--message-high);
}

.broadcast.is-draft {
  border-style: dashed;
}

.broadcast.is-draft::before {
  background: var(--message-draft);
}

.broadcast.is-cancelled {
  opacity: 0.72;
}

.broadcast.is-cancelled::before {
  background: var(--bs-secondary-color);
}

.broadcast.is-sent::before {
  background: var(--message-live);
}

/* The departure block: when this leaves, and from which time zone. */
.broadcast-when {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 13px 15px;
  background: var(--tint-primary);
  border-bottom: 1px solid var(--bs-border-color);
}

.broadcast-when .clock {
  flex: 0 0 auto;
  text-align: center;
  line-height: 1;
}

.broadcast-when .clock b {
  display: block;
  font-size: 20px;
  font-weight: 700;
  color: var(--bs-primary);
}

.broadcast-when .clock span {
  display: block;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--bs-primary);
  margin-top: 4px;
}

.broadcast-when .broadcast-when-text {
  flex: 1 1 auto;
  min-width: 0;
  padding-left: 12px;
  border-left: 1px dashed var(--border-strong);
}

.broadcast-when .broadcast-when-text b {
  display: block;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

.broadcast-when .broadcast-when-text small {
  display: block;
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-top: 2px;
}

.broadcast-body {
  padding: 13px 15px;
  flex: 1 1 auto;
}

.broadcast-body .broadcast-title {
  font-size: 15px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  line-height: 1.35;
  margin: 6px 0 5px;
}

.broadcast-body .broadcast-title a {
  color: inherit;
}

.broadcast-body .broadcast-description {
  font-size: 12.5px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.broadcast-facts {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  margin-top: 11px;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.broadcast-facts span {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.broadcast-facts b {
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

.broadcast-footer {
  margin-top: auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  padding: 11px 15px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
}

/* --- Recurrence rule, written out --------------------------- */
.recurrence {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 600;
  padding: 2px 9px;
  border-radius: 999px;
  background: var(--bs-body-bg);
  color: var(--bs-emphasis-color);
  border: 1px dashed var(--border-strong);
  white-space: nowrap;
}

.recurrence i {
  font-size: 12px;
  color: var(--bs-primary);
}

.recurrence.is-once {
  border-style: solid;
  color: var(--bs-secondary-color);
}

/* --- Channel queue meter ------------------------------------ */
.queue {
  display: flex;
  gap: 3px;
  margin-top: 4px;
}

.queue span {
  flex: 1 1 0;
  height: 18px;
  border-radius: 3px;
  background: var(--track);
}

.queue span.is-filled {
  background: var(--bs-primary);
}

.queue span.is-warn {
  background: var(--message-high);
}

.queue span.is-done {
  background: var(--message-live);
}

/* --- Schedule state card ------------------------------------ */
.state {
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  padding: 15px;
  transition: var(--transition);
}

.state:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
}

.state .state-top {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 12px;
}

.state .state-top .state-icon {
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
}

.state .state-top .state-name {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 0;
}

.state .state-top .state-n {
  font-size: 18px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  margin-left: auto;
}

.state.is-warn .state-icon {
  background: var(--message-high-soft);
  color: rgb(172.8, 132.1846153846, 0);
}

.state.is-done .state-icon {
  background: var(--message-live-soft);
  color: var(--message-live);
}

.state.is-stop .state-icon {
  background: var(--message-urgent-soft);
  color: var(--message-urgent);
}

.state.is-draft .state-icon {
  background: var(--message-draft-soft);
  color: var(--message-draft);
}

/* --- Approval card ------------------------------------------ */
.approval {
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-left: 3px solid var(--message-high);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  padding: 14px;
  transition: var(--transition);
}

.approval:hover {
  box-shadow: var(--shadow-lift);
}

.approval.is-approved {
  border-left-color: var(--message-live);
}

.approval.is-rejected {
  border-left-color: var(--message-urgent);
}

.approval.is-scheduled {
  border-left-color: var(--message-normal);
}

.approval.is-review {
  border-left-color: var(--message-draft);
}

.approval .approval-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  line-height: 1.35;
  margin-bottom: 8px;
}

.approval .approval-who {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 4px;
  font-size: 12px;
  color: var(--bs-secondary-color);
}

.approval .approval-who img {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  object-fit: cover;
}

.approval .approval-who b {
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

.approval .approval-footer {
  margin-top: auto;
  padding-top: 12px;
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

/* --- Quick action card -------------------------------------- */
.quick-action {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  height: 100%;
  text-align: left;
  padding: 15px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  transition: var(--transition);
}

.quick-action i.message-action-icon {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  transition: var(--transition);
}

.quick-action .action-text {
  flex: 1 1 auto;
  min-width: 0;
}

.quick-action .action-text b {
  display: block;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 2px;
}

.quick-action .action-text small {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.quick-action .message-action-go {
  flex: 0 0 auto;
  font-size: 16px;
  color: var(--bs-secondary-color);
  transition: var(--transition);
}

.quick-action:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
  transform: translateY(-2px);
}

.quick-action:hover i.message-action-icon {
  background: var(--bs-primary);
  color: #fff;
}

.quick-action:hover .message-action-go {
  color: var(--bs-primary);
  transform: translateX(2px);
}

/* ============================================================
   9. SMS COMMUNICATION CENTER

   SMS is the one channel with a hard budget — 160 characters to a
   segment, and every segment costs money and arrives separately. So
   the pieces here are built around that constraint: a composer whose
   counter is part of the furniture rather than a footnote, merge
   fields that are visibly placeholders, a recipient card that reads
   as selected or not, and a preview drawn as the handset it lands on.

   Everything else — badges, rows, panels, offcanvas, template and
   action cards — is reused from the sections above.
   ============================================================ */
/* --- Composer workspace ------------------------------------- */
.compose {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
}

.compose .compose-header {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--bs-border-color);
}

.compose .compose-header .compose-icon {
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--bs-primary);
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
}

.compose .compose-header .compose-title {
  font-size: 15px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 1px;
}

.compose .compose-header p {
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
}

.compose .compose-body {
  padding: 16px;
}

.compose .compose-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  padding: 13px 16px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
}

/* The editor surface — a plain field, but framed so it reads as the
   message body rather than as one more form input. */
.editor {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  overflow: hidden;
}

.editor .editor-bar {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-wrap: wrap;
  padding: 7px 9px;
  border-bottom: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
}

.editor .editor-bar button {
  width: 28px;
  height: 28px;
  border: 0;
  border-radius: 7px;
  background: transparent;
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 15px;
  transition: var(--transition);
}

.editor .editor-bar button:hover {
  background: var(--bs-body-bg);
  color: var(--bs-primary);
}

.editor .editor-bar .editor-sep {
  width: 1px;
  height: 18px;
  background: var(--bs-border-color);
  margin: 0 4px;
}

.editor textarea.form-control {
  border: 0;
  border-radius: 0;
  resize: vertical;
  font-size: 13.5px;
  line-height: 1.7;
  min-height: 150px;
  background-color: transparent !important;
  color: var(--bs-emphasis-color);
}

.editor textarea.form-control:focus {
  box-shadow: none;
}

/* --- Character / segment counter ---------------------------- */
.counter {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  padding: 11px 13px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-secondary-bg);
}

.counter .counter-figure {
  line-height: 1.15;
}

.counter .counter-figure b {
  display: block;
  font-size: 17px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.counter .counter-figure span {
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
}

.counter .counter-bar {
  flex: 1 1 120px;
  min-width: 110px;
}

/* Segment ticks — one block per 160-character segment. */
.segments {
  display: flex;
  gap: 3px;
}

.segments span {
  flex: 1 1 0;
  height: 6px;
  border-radius: 999px;
  background: var(--track);
}

.segments span.is-used {
  background: var(--bs-primary);
}

.segments span.is-part {
  background: var(--message-accent-line);
}

.segments span.is-over {
  background: var(--message-high);
}

/* --- Merge field chip --------------------------------------- */
.merge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: "SFMono-Regular", "Menlo", "Consolas", "Liberation Mono", monospace;
  font-size: 11.5px;
  font-weight: 500;
  padding: 3px 9px;
  border-radius: 6px;
  background: var(--tint-primary);
  color: var(--bs-primary);
  border: 1px solid transparent;
  transition: var(--transition);
  white-space: nowrap;
}

.merge i {
  font-size: 12px;
}

.merge:hover {
  border-color: var(--bs-primary);
  background: var(--bs-body-bg);
}

.merges {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

/* --- Recipient selection card ------------------------------- */
.pick {
  position: relative;
  height: 100%;
  display: flex;
  align-items: flex-start;
  gap: 11px;
  padding: 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  transition: var(--transition);
  cursor: pointer;
}

.pick:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
}

/* Selected reads through the border and the tick, not a fill — a
     wall of filled cards would be unreadable. */

.pick.is-picked {
  border-color: var(--bs-primary);
  box-shadow: inset 0 0 0 1px var(--bs-primary), var(--shadow);
}

.pick.is-picked .pick-icon {
  background: var(--bs-primary);
  color: #fff;
}

.pick .pick-icon {
  width: 38px;
  height: 38px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 19px;
  transition: var(--transition);
}

.pick .pick-text {
  flex: 1 1 auto;
  min-width: 0;
}

.pick .pick-text b {
  display: block;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 2px;
}

.pick .pick-text .pick-n {
  font-size: 17px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  line-height: 1.2;
}

.pick .pick-text .pick-n small {
  font-size: 11.5px;
  font-weight: 400;
  color: var(--bs-secondary-color);
  margin-left: 4px;
}

.pick .pick-text .pick-last {
  display: block;
  font-size: 11px;
  color: var(--bs-secondary-color);
  margin-top: 6px;
  padding-top: 6px;
  border-top: 1px dashed var(--bs-border-color);
}

.pick .form-check-input {
  flex-shrink: 0;
  margin-top: 2px;
}

/* --- Upload dropzone ---------------------------------------- */
.dropzone {
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 26px 20px;
  text-align: center;
  transition: var(--transition);
}

.dropzone:hover {
  border-color: var(--bs-primary);
  background: var(--tint-primary);
}

.dropzone>i {
  display: block;
  font-size: 30px;
  color: var(--bs-primary);
  margin-bottom: 8px;
}

.dropzone b {
  display: block;
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 3px;
}

.dropzone p {
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin: 0 auto 12px;
  max-width: 44ch;
}

/* --- Mobile message preview --------------------------------- */
.phone {
  max-width: 300px;
  margin: 0 auto;
  /* always a dark bezel/status bar, like a phone's own chrome — not
     var(--bs-emphasis-color), which flips light in dark mode and left
     white text on a near-white bar; fixed to the colour light mode
     already rendered, so light mode is unchanged */
  border: 8px solid #202C4B;
  border-radius: 28px;
  background: var(--bs-secondary-bg);
  overflow: hidden;
  box-shadow: var(--shadow-lift);
}

.phone .phone-top {
  background: #202C4B;
  color: #fff;
  padding: 4px 14px 10px;
  text-align: center;
}

.phone .phone-top b {
  display: block;
  font-size: 12.5px;
  font-weight: 600;
}

.phone .phone-top small {
  font-size: 10.5px;
  opacity: 0.7;
}

.phone .phone-body {
  padding: 14px 12px 18px;
  min-height: 190px;
  background: var(--bs-secondary-bg);
}

/* The message as it lands: a received bubble, tail on the left. */

.phone .message-bubble {
  position: relative;
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 14px 14px 14px 3px;
  padding: 10px 12px;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--bs-emphasis-color);
  box-shadow: var(--shadow);
}

.phone .message-bubble+.message-bubble {
  margin-top: 8px;
}

.phone .message-bubble mark {
  background: var(--tint-primary);
  color: var(--bs-primary);
  padding: 0 3px;
  border-radius: 3px;
  font-weight: 600;
}

.phone .bubble-time {
  display: block;
  font-size: 10px;
  color: var(--bs-secondary-color);
  margin: 5px 0 0 4px;
}

/* --- SMS log card ------------------------------------------- */
.log {
  position: relative;
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  padding: 14px;
  transition: var(--transition);
}

.log:hover {
  border-color: var(--message-accent-line);
  box-shadow: var(--shadow-lift);
}

/* Delivery outcome as a corner flag rather than a full-width band. */

.log::after {
  content: "";
  position: absolute;
  top: 14px;
  right: 14px;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--message-live);
}

.log.is-failed::after {
  background: var(--message-urgent);
}

.log.is-pending::after {
  background: var(--message-high);
}

.log.is-queued::after {
  background: var(--message-normal);
}

.log .log-title {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  line-height: 1.35;
  margin: 0 18px 8px 0;
}

.log .log-to {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
  margin-bottom: 10px;
}

.log .log-to i {
  width: 28px;
  height: 28px;
  flex-shrink: 0;
  border-radius: 8px;
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
}

.log .log-to small {
  display: block;
  font-size: 11px;
  color: var(--bs-secondary-color);
}

/* A failure is stated, not hidden behind a status pill. */

.log .log-why {
  font-size: 11.5px;
  color: var(--message-urgent);
  background: var(--message-urgent-soft);
  border-radius: 6px;
  padding: 5px 8px;
  margin-top: 8px;
}

.log .log-footer {
  margin-top: auto;
  padding-top: 11px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  border-top: 1px dashed var(--bs-border-color);
  font-size: 11px;
  color: var(--bs-secondary-color);
}

/* ============================================================
   10. WHATSAPP COMMUNICATION CENTER

   A conversation channel rather than a broadcast one, so the centre of
   this page is an inbox and a chat, not a composer. Everything already
   defined above — badges, rows, panels, template cards, action cards,
   dropzone, merge fields, offcanvas — is reused as-is.

   The one page-wide change is the accent: `.whatsapp` remaps the accent
   tokens to WhatsApp's green, so every shared component picks it up
   without a second copy of any rule. Put the class on the content
   wrapper, and on the offcanvas and modals, which live outside it.
   ============================================================ */
.whatsapp {
  --message-accent: rgb(35.3, 154.22, 92.82);
  --message-accent-line: rgb(167.8, 237.4, 193.8);
}

[data-bs-theme=dark] .whatsapp {
  --message-accent: rgb(93.68, 222.44, 141.78);
  --message-accent-line: rgba(37, 211, 102, .38);
}

/* --- Conversation inbox ------------------------------------- */
.inbox {
  display: flex;
  flex-direction: column;
  height: 100%;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
}

.inbox .inbox-header {
  padding: 13px 14px;
  border-bottom: 1px solid var(--bs-border-color);
}

.inbox .inbox-list {
  flex: 1 1 auto;
  overflow-y: auto;
  max-height: 560px;
}

.inbox .inbox-list::-webkit-scrollbar {
  width: 5px;
}

.inbox .inbox-list::-webkit-scrollbar-thumb {
  background: var(--track);
  border-radius: 999px;
}

.inbox .inbox-footer {
  padding: 11px 14px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
  font-size: 11.5px;
  color: var(--bs-secondary-color);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

/* Section label inside the list — Pinned, Today, Earlier. */
.inbox-section {
  position: sticky;
  top: 0;
  z-index: 1;
  padding: 7px 14px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
  background: var(--bs-secondary-bg);
  border-bottom: 1px solid var(--bs-border-color);
}

/* A single conversation row. */
.thread {
  position: relative;
  display: flex;
  align-items: flex-start;
  gap: 11px;
  width: 100%;
  text-align: left;
  padding: 12px 14px;
  border: 0;
  border-bottom: 1px solid var(--bs-border-color);
  background: transparent;
  transition: var(--transition);
}

.thread:hover {
  background: var(--bs-secondary-bg);
}

/* Active thread carries a rail, not a fill, so the avatar and the
     preview text keep their contrast. */

.thread.is-active {
  background: var(--tint-primary);
}

.thread.is-active::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--bs-primary);
}

.thread.is-unread .thread-name,
.thread.is-unread .thread-preview {
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

.thread .thread-avatar {
  position: relative;
  flex: 0 0 auto;
}

.thread .thread-avatar img {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  object-fit: cover;
}

/* Presence dot, cut out of the avatar edge. */

.thread .thread-avatar::after {
  content: "";
  position: absolute;
  right: -1px;
  bottom: -1px;
  width: 11px;
  height: 11px;
  border-radius: 50%;
  background: var(--bs-secondary-color);
  border: 2px solid var(--bs-body-bg);
}

.thread .thread-avatar.is-online::after {
  background: var(--message-live);
}

.thread .thread-text {
  flex: 1 1 auto;
  min-width: 0;
}

.thread .thread-top {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 2px;
}

.thread .thread-name {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 13.5px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.thread .thread-time {
  flex: 0 0 auto;
  font-size: 10.5px;
  color: var(--bs-secondary-color);
}

.thread .thread-preview {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
}

.thread .thread-preview span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.thread .thread-preview>i {
  flex-shrink: 0;
  font-size: 13px;
}

.thread .thread-meta {
  display: flex;
  align-items: center;
  gap: 5px;
  margin-top: 6px;
  flex-wrap: wrap;
}

.thread .thread-n {
  flex: 0 0 auto;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 999px;
  background: var(--bs-primary);
  color: #fff;
  font-size: 10.5px;
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.thread .thread-pin {
  font-size: 13px;
  color: var(--bs-secondary-color);
}

/* --- Chat workspace ----------------------------------------- */
.message-chat {
  display: flex;
  flex-direction: column;
  height: 100%;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
}

.message-chat .message-chat-header {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 12px 15px;
  border-bottom: 1px solid var(--bs-border-color);
}

.message-chat .message-chat-header img {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}

.message-chat .message-chat-header .chat-who {
  flex: 1 1 auto;
  min-width: 0;
}

.message-chat .message-chat-header .chat-who b {
  display: block;
  font-size: 14.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  line-height: 1.3;
}

.message-chat .message-chat-header .chat-who small {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* The canvas carries the faint pattern a messaging app has, so the
     bubbles read as a conversation rather than a list of rows. */

.message-chat .chat-canvas {
  flex: 1 1 auto;
  overflow-y: auto;
  max-height: 480px;
  padding: 18px 16px;
  background-color: var(--bs-secondary-bg);
  background-image: radial-gradient(var(--border-strong) 1px, transparent 1px);
  background-size: 22px 22px;
}

.message-chat .chat-canvas::-webkit-scrollbar {
  width: 5px;
}

.message-chat .chat-canvas::-webkit-scrollbar-thumb {
  background: var(--track);
  border-radius: 999px;
}

/* Day divider inside the canvas. */
.message-day {
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 4px 0 16px;
}

.message-day span {
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 999px;
  padding: 3px 12px;
}

/* --- Message bubble ----------------------------------------- */
.message-message {
  display: flex;
  margin-bottom: 12px;
}

.message-message .message-in {
  max-width: 78%;
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 14px 14px 14px 3px;
  padding: 9px 12px;
  box-shadow: var(--shadow);
}

.message-message .message-in p {
  font-size: 13px;
  line-height: 1.6;
  color: var(--bs-emphasis-color);
  margin-bottom: 0;
}

.message-message .message-meta {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 4px;
  font-size: 10px;
  color: var(--bs-secondary-color);
  margin-top: 4px;
  /* Read receipt — the double tick, blue once seen. */

  .message-message .message-meta i.is-read {
    color: var(--message-normal);
  }

  /* Outgoing sits right, tinted, with the tail mirrored. */

  .message-message.is-out {
    justify-content: flex-end;
  }

  .message-message.is-out .message-in {
    background: var(--tint-primary);
    border-color: transparent;
    border-radius: 14px 14px 3px 14px;
  }

  /* An outgoing message sent from a registered template is labelled,
     because a template send is billed and a session reply is not. */

  .message-message .message-template {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 10px;
    font-weight: 600;
    color: var(--bs-primary);
    margin-bottom: 5px;
  }

  /* Attachment bubbles: document, voice note and image. */
  .message-attachment {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px;
    border-radius: 9px;
    background: var(--bs-secondary-bg);
    min-width: 210px;
  }

  .message-attachment>i {
    width: 34px;
    height: 34px;
    flex-shrink: 0;
    border-radius: 8px;
    background: var(--bs-body-bg);
    color: var(--bs-primary);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
  }

  .message-attachment .attachment-text {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 12px;
    font-weight: 500;
    color: var(--bs-emphasis-color);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .message-attachment .attachment-text small {
    display: block;
    font-size: 10.5px;
    font-weight: 400;
    color: var(--bs-secondary-color);
  }

  /* Voice note — a static waveform, not a control. */
  .wave {
    display: flex;
    align-items: center;
    gap: 2px;
    flex: 1 1 auto;
    height: 22px;
  }

  .wave span {
    flex: 1 1 0;
    background: var(--message-accent-line);
    border-radius: 999px;
    min-height: 3px;
  }

  .wave .h-1 {
    height: 25%;
  }

  .wave .h-2 {
    height: 45%;
  }

  .wave .h-3 {
    height: 70%;
  }

  .wave .h-4 {
    height: 100%;
  }

  .wave .h-5 {
    height: 55%;
  }

  .message-image {
    display: block;
    width: 190px;
    max-width: 100%;
    border-radius: 9px;
    margin-bottom: 6px;
  }

  /* --- Composer ----------------------------------------------- */
  .composer {
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-body-bg);
    padding: 11px 14px;
  }

  .composer .composer-row {
    display: flex;
    align-items: flex-end;
    gap: 8px;
  }

  .composer .composer-row .form-control {
    resize: none;
  }

  .composer .composer-tools {
    display: flex;
    align-items: center;
    gap: 3px;
    flex-shrink: 0;
  }

  .composer .composer-tools button {
    width: 34px;
    height: 34px;
    border: 0;
    border-radius: 9px;
    background: transparent;
    color: var(--bs-secondary-color);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 17px;
    transition: var(--transition);
  }

  .composer .composer-tools button:hover {
    background: var(--bs-secondary-bg);
    color: var(--bs-primary);
  }

  /* Quick reply chip above the composer. */
  .quick-reply {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11.5px;
    font-weight: 500;
    padding: 4px 11px;
    border-radius: 999px;
    background: var(--bs-body-bg);
    color: var(--bs-emphasis-color);
    border: 1px solid var(--bs-border-color);
    white-space: nowrap;
    transition: var(--transition);
  }

  .quick-reply i {
    font-size: 12px;
    color: var(--bs-primary);
  }

  .quick-reply:hover {
    border-color: var(--bs-primary);
    background: var(--tint-primary);
  }

  .qrs {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
    margin-bottom: 9px;
  }

  /* --- Broadcast queue card ----------------------------------- */
  .message-quote {
    position: relative;
    height: 100%;
    display: flex;
    flex-direction: column;
    padding: 14px 14px 14px 17px;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    transition: var(--transition);
  }

  .message-quote:hover {
    border-color: var(--message-accent-line);
    box-shadow: var(--shadow-lift);
  }

  .message-quote::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
    border-radius: var(--radius) 0 0 var(--radius);
    background: var(--message-normal);
  }

  .message-quote.is-draft::before {
    background: var(--message-draft);
  }

  .message-quote.is-processing::before {
    background: var(--message-high);
  }

  .message-quote.is-sent::before,
  .message-quote.is-delivered::before {
    background: var(--message-live);
  }

  .message-quote.is-failed::before {
    background: var(--message-urgent);
  }

  .message-quote.is-cancelled {
    opacity: 0.72;
  }

  .message-quote.is-cancelled::before {
    background: var(--bs-secondary-color);
  }

  .message-quote .message-quote-title {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    line-height: 1.35;
    margin-bottom: 6px;
  }

  .message-quote .message-quote-message {
    font-size: 12px;
    color: var(--bs-secondary-color);
    margin-bottom: 10px;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }

  .message-quote .message-quote-footer {
    margin-top: auto;
    padding-top: 11px;
    border-top: 1px dashed var(--bs-border-color);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  /* --- Media library tile ------------------------------------- */
  .message-media {
    position: relative;
    height: 100%;
    display: flex;
    flex-direction: column;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    overflow: hidden;
    transition: var(--transition);
  }

  .message-media:hover {
    border-color: var(--message-accent-line);
    box-shadow: var(--shadow-lift);
    transform: translateY(-2px);
  }

  .message-media .media-thumb {
    position: relative;
    height: 104px;
    background: var(--bs-secondary-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    border-bottom: 1px solid var(--bs-border-color);
  }

  .message-media .media-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  .message-media .media-thumb>i {
    font-size: 30px;
    color: var(--bs-primary);
  }

  .message-media .media-thumb .media-kind {
    position: absolute;
    top: 8px;
    left: 8px;
    font-size: 10px;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    padding: 2px 8px;
    border-radius: 999px;
    background: rgba(20, 20, 43, 0.72);
    color: #fff;
    backdrop-filter: blur(4px);
  }

  .message-media .message-media-body {
    padding: 11px 12px;
    flex: 1 1 auto;
  }

  .message-media .message-media-body b {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .message-media .message-media-body small {
    font-size: 11px;
    color: var(--bs-secondary-color);
  }

  .message-media .media-footer {
    display: flex;
    gap: 6px;
    padding: 10px 12px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
  }

  /* ============================================================
   11. NOTIFICATION & PARENT COMMUNICATION CENTER

   Three channels governed together — email, push and the parent
   communications that ride on either. Almost everything is reused from
   the sections above: channel cards, audience cards, template cards,
   log cards, action cards, panels, rows, badges, dropzone, merge
   fields, handset preview and the offcanvas.

   What this page adds is the distinction it lives on: delivered is not
   read. A notification card states both, stacked, because a 99%
   delivery rate against a 40% read rate is the whole story. `.notification`
   remaps the accent to a violet so the centre is not mistaken for the
   announcements desk; put it on the content wrapper and on the
   offcanvas and modals, which sit outside it.
   ============================================================ */
  .notification {
    --message-accent: rgb(81.7, 53.8, 150.6);
    --message-accent-line: rgb(203.32, 188.02, 230.52);
  }

  [data-bs-theme=dark] .notification {
    --message-accent: rgb(160.76, 132.86, 210.36);
    --message-accent-line: rgba(103, 58, 183, .44);
  }

  /* --- Notification card -------------------------------------- */
  .message-note-item {
    position: relative;
    height: 100%;
    display: flex;
    flex-direction: column;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    overflow: hidden;
    transition: var(--transition);
  }

  .message-note-item:hover {
    border-color: var(--message-accent-line);
    box-shadow: var(--shadow-lift);
    transform: translateY(-2px);
  }

  /* Priority rail. */

  .message-note-item::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3px;
    background: var(--message-normal);
    z-index: 2;
  }

  .message-note-item.is-urgent::before {
    background: var(--message-urgent);
  }

  .message-note-item.is-high::before {
    background: var(--message-high);
  }

  .message-note-item.is-sent::before {
    background: var(--message-live);
  }

  .message-note-item.is-draft {
    border-style: dashed;
  }

  .message-note-item.is-draft::before {
    background: var(--message-draft);
  }

  .message-note-item.is-archived {
    opacity: 0.72;
  }

  .message-note-item.is-archived::before {
    background: var(--bs-secondary-color);
  }

  .message-note-item .note-body {
    padding: 14px 15px;
    flex: 1 1 auto;
  }

  .message-note-item .note-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    line-height: 1.35;
    margin: 6px 0 5px;
  }

  .message-note-item .note-title a {
    color: inherit;
  }

  .message-note-item .note-description {
    font-size: 12.5px;
    color: var(--bs-secondary-color);
    margin-bottom: 0;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }

  .message-note-item .note-facts {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 14px;
    margin-top: 11px;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .message-note-item .note-facts span {
    display: inline-flex;
    align-items: center;
    gap: 5px;
  }

  .message-note-item .note-facts b {
    color: var(--bs-emphasis-color);
    font-weight: 600;
  }

  /* Author line — who sent it is part of the record, not metadata. */

  .message-note-item .message-note-by {
    display: flex;
    align-items: center;
    gap: 7px;
    margin-top: 12px;
    padding-top: 11px;
    border-top: 1px dashed var(--bs-border-color);
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  .message-note-item .message-note-by img {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    object-fit: cover;
  }

  .message-note-item .message-note-by b {
    color: var(--bs-emphasis-color);
    font-weight: 600;
  }

  .message-note-item .note-footer {
    margin-top: auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
    padding: 11px 15px;
    border-top: 1px solid var(--bs-border-color);
    background: var(--bs-secondary-bg);
  }

  /* --- Delivered versus read ---------------------------------- */
  .dual {
    padding: 0 15px 12px;
  }

  .dual .dual-row {
    display: flex;
    align-items: center;
    gap: 9px;
  }

  .dual .dual-row+.dual-row {
    margin-top: 6px;
  }

  .dual .dual-row>span:first-child {
    flex: 0 0 62px;
    font-size: 10.5px;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: var(--bs-secondary-color);
  }

  .dual .dual-row .dual-bar {
    flex: 1 1 auto;
    height: 5px;
    border-radius: 999px;
    background: var(--track);
    overflow: hidden;
  }

  .dual .dual-row .dual-bar span {
    display: block;
    height: 100%;
    border-radius: 999px;
    background: var(--message-live);
  }

  /* The read bar is deliberately the accent, not green — read is a
     different achievement from delivered and should not look like
     the same success. */

  .dual .dual-row.is-read .dual-bar span {
    background: var(--bs-primary);
  }

  .dual .dual-row>b {
    flex: 0 0 auto;
    font-size: 11.5px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    min-width: 34px;
    text-align: right;
  }

  /* --- Parent communication card ------------------------------ */
  .message-push {
    height: 100%;
    display: flex;
    flex-direction: column;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--radius);
    background: var(--bs-body-bg);
    box-shadow: var(--shadow);
    padding: 15px;
    transition: var(--transition);
  }

  .message-push:hover {
    border-color: var(--message-accent-line);
    box-shadow: var(--shadow-lift);
  }

  .message-push .push-top {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 11px;
  }

  .message-push .push-top .push-icon {
    width: 36px;
    height: 36px;
    flex-shrink: 0;
    border-radius: var(--radius-sm);
    background: var(--tint-primary);
    color: var(--bs-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
  }

  .message-push .push-top .push-name {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--bs-emphasis-color);
    margin-bottom: 0;
  }

  /* The message itself, quoted — the point of a communication card is
     what it actually says, not its configuration. */

  .message-push .push-quote {
    position: relative;
    font-size: 12.5px;
    line-height: 1.6;
    color: var(--bs-emphasis-color);
    background: var(--bs-secondary-bg);
    border-radius: var(--radius-sm);
    padding: 10px 12px 10px 26px;
    margin-bottom: 12px;
  }

  .message-push .push-quote::before {
    content: "“";
    position: absolute;
    left: 9px;
    top: 4px;
    font-size: 22px;
    line-height: 1;
    color: var(--message-accent-line);
  }

  .message-push .push-footer {
    margin-top: auto;
    padding-top: 11px;
    border-top: 1px dashed var(--bs-border-color);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
    font-size: 11.5px;
    color: var(--bs-secondary-color);
  }

  /* A deep engineered blue-grey, mixed rather than taken straight, so
     the automation console reads as machinery rather than as another
     communication surface. */
  --rule-accent: rgb(22.14, 77.06, 150.4);
  --rule-accent-line: rgb(178.2, 205.72, 239);
  /* The three clauses each keep their own colour throughout the page. */
  --rule-when: #4A00E5;
  --rule-when-soft: rgb(238.71, 232.05, 252.66);
  --rule-if: #EAB300;
  --rule-if-soft: #FEF8EA;
  --rule-then: #1ABE17;
  --rule-then-soft: #E8F9E8;
  --rule-on: #1ABE17;
  --rule-on-soft: #E8F9E8;
  --rule-stop: #E82646;
  --rule-stop-soft: #FDE9ED;
}

[data-bs-theme=dark] {
  --rule-accent-line: rgba(15, 101, 205, .4);
  --rule-when-soft: rgba(74, 0, 229, .18);
}

.rule-metric-label {
  display: block;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--bs-secondary-color);
  margin-bottom: 4px;
}

.rule-section-header {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 14px;
  flex-wrap: wrap;
  margin-bottom: 16px;
}

.rule-section-header h2 {
  font-size: 20px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  margin-bottom: 3px;
}

.rule-section-header p {
  font-size: 13px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
  max-width: 74ch;
}

/* geometry, typography and surface come from the shared badge component */

.rule-status-badge i {
  font-size: 12px;
}

.rule-status-badge.is-on {
  background: var(--rule-on-soft);
  color: var(--rule-on);
  border-color: transparent;
}

.rule-status-badge.is-off {
  border-style: dashed;
}

.rule-status-badge.is-draft {
  background: var(--rule-when-soft);
  color: var(--rule-when);
  border-color: transparent;
}

.rule-status-badge.is-warn {
  background: var(--rule-if-soft);
  color: rgb(172.8, 132.1846153846, 0);
  border-color: transparent;
}

.rule-status-badge.is-stop {
  background: var(--rule-stop-soft);
  color: var(--rule-stop);
  border-color: transparent;
}

.rule-status-badge.is-accent {
  background: var(--tint-primary);
  color: var(--bs-primary);
  border-color: transparent;
}

/* A field or variable, always monospace and always selectable. */
.key {
  font-family: var(--font-mono);
  font-size: 11.5px;
  color: var(--bs-emphasis-color);
  background: var(--bs-secondary-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 5px;
  padding: 1px 6px;
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  vertical-align: middle;
}

/* Priority marker — three stacked bars, filled to the level set. */
.priority {
  display: inline-flex;
  align-items: flex-end;
  gap: 2px;
  height: 12px;
  vertical-align: middle;
}

.priority span {
  width: 3px;
  border-radius: 1px;
  background: var(--track);
}

.priority span:nth-child(1) {
  height: 5px;
}

.priority span:nth-child(2) {
  height: 8px;
}

.priority span:nth-child(3) {
  height: 12px;
}

.priority span.is-lit {
  background: var(--bs-primary);
}

.priority.is-high span.is-lit {
  background: var(--rule-if);
}

.priority.is-critical span.is-lit {
  background: var(--rule-stop);
}

.rule-info-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 9px 0;
  border-bottom: 1px dashed var(--bs-border-color);
}

.rule-info-row:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.rule-info-row:first-child {
  padding-top: 0;
}

.rule-info-row .rule-row-key {
  flex: 1 1 auto;
  font-size: 13px;
  font-weight: 500;
  color: var(--bs-emphasis-color);
}

.rule-info-row .rule-row-key small {
  display: block;
  font-size: 11.5px;
  font-weight: 400;
  color: var(--bs-secondary-color);
  margin-top: 1px;
}

.rule-info-row .rule-row-value {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
  color: var(--bs-emphasis-color);
}

/* ============================================================
   2. WORKFLOW RULE CARDS
   ============================================================ */
.rule {
  position: relative;
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
  transition: var(--transition);
}

.rule:hover {
  border-color: var(--rule-accent-line);
  box-shadow: var(--shadow-lift);
  transform: translateY(-2px);
}

/* Live rail. A disabled rule loses it entirely rather than changing
     colour — the absence is what should register. */

.rule::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--rule-on);
  z-index: 2;
}

.rule.is-off {
  background: var(--bs-secondary-bg);
}

.rule.is-off::before {
  background: transparent;
}

.rule.is-draft {
  border-style: dashed;
}

.rule.is-draft::before {
  background: var(--rule-when);
}

.rule.is-error::before {
  background: var(--rule-stop);
}

.rule .rule-header {
  display: flex;
  align-items: flex-start;
  gap: 11px;
  padding: 14px 15px 10px;
}

.rule .rule-header .rule-icon {
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 18px;
}

.rule .rule-header .rule-name {
  font-size: 14.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  line-height: 1.35;
  margin-bottom: 3px;
}

.rule .rule-header .rule-name a {
  color: inherit;
}

.rule .rule-header .rule-description {
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.rule .rule-clauses {
  padding: 0 15px;
}

.rule .rule-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  padding: 12px 15px 0;
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.rule .rule-meta span {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}

.rule .rule-meta b {
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

.rule .rule-by {
  display: flex;
  align-items: center;
  gap: 7px;
  margin: 12px 15px 0;
  padding-top: 11px;
  border-top: 1px dashed var(--bs-border-color);
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.rule .rule-by img {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  object-fit: cover;
}

.rule .rule-by b {
  color: var(--bs-emphasis-color);
  font-weight: 600;
}

.rule .rule-footer {
  margin-top: auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  padding: 11px 15px;
  margin-top: 12px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
}

/* ============================================================
   3. TRIGGER / CONDITION / ACTION CLAUSES

   The rule read as a sentence. The keyword sits in the gutter so the
   three clauses line up down the left edge of every card on the page.
   ============================================================ */
.clause {
  position: relative;
  padding: 7px 10px 7px 54px;
  border-radius: var(--radius-sm);
  background: var(--bs-secondary-bg);
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--bs-emphasis-color);
}

.clause+.clause {
  margin-top: 5px;
}

.clause::before {
  content: attr(data-kw);
  position: absolute;
  left: 10px;
  top: 8px;
  font-family: var(--font-mono);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--bs-primary);
}

.clause.is-when {
  background: var(--rule-when-soft);
}

.clause.is-when::before {
  color: var(--rule-when);
}

.clause.is-if {
  background: var(--rule-if-soft);
}

.clause.is-if::before {
  color: rgb(162.6, 124.3820512821, 0);
}

.clause.is-then {
  background: var(--rule-then-soft);
}

.clause.is-then::before {
  color: var(--rule-then);
}

.clause code {
  font-family: var(--font-mono);
  font-size: 11.5px;
  color: var(--bs-emphasis-color);
  background: var(--bs-body-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: 5px;
  padding: 0 4px;
}

/* ============================================================
   4. ACTION CHAIN
   ============================================================ */
.chain {
  list-style: none;
  padding: 0;
  margin: 0;
  counter-reset: wfx-step;
}

.chain li {
  position: relative;
  counter-increment: wfx-step;
  display: flex;
  align-items: flex-start;
  gap: 11px;
  padding: 10px 0;
}

.chain li+li {
  border-top: 1px dashed var(--bs-border-color);
}

/* The execution order is the point, so it is numbered rather than
     bulleted, and the number is what the eye lands on. */

.chain li::before {
  content: counter(wfx-step);
  flex: 0 0 auto;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--rule-then-soft);
  color: var(--rule-then);
  font-family: var(--font-mono);
  font-size: 11px;
  font-weight: 700;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-top: 1px;
}

.chain li.is-skipped {
  opacity: 0.6;
}

.chain li.is-skipped::before {
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
}

.chain li.is-failed::before {
  background: var(--rule-stop-soft);
  color: var(--rule-stop);
}

.chain .chain-text {
  flex: 1 1 auto;
  min-width: 0;
}

.chain .chain-text b {
  display: block;
  font-size: 13px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 2px;
}

.chain .chain-text small {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* Compact action pip row, used on the rule cards. */
.actions {
  display: inline-flex;
  gap: 4px;
}

.actions .rule-action {
  width: 24px;
  height: 24px;
  border-radius: 7px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 13px;
  background: var(--rule-then-soft);
  color: var(--rule-then);
}

/* ============================================================
   5. CATEGORY CARDS
   ============================================================ */
.rule-category {
  display: flex;
  align-items: center;
  gap: 11px;
  width: 100%;
  height: 100%;
  text-align: left;
  padding: 14px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  transition: var(--transition);
}

.rule-category i.category-icon {
  width: 38px;
  height: 38px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 19px;
  transition: var(--transition);
}

.rule-category .category-text {
  flex: 1 1 auto;
  min-width: 0;
}

.rule-category .category-text b {
  display: block;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 2px;
}

.rule-category .category-text small {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.rule-category .category-n {
  flex: 0 0 auto;
  font-size: 17px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
}

.rule-category:hover {
  border-color: var(--rule-accent-line);
  box-shadow: var(--shadow-lift);
  transform: translateY(-2px);
}

.rule-category:hover i.category-icon {
  background: var(--bs-primary);
  color: #fff;
}

.rule-category.is-empty {
  border-style: dashed;
}

.rule-category.is-empty .category-n {
  color: var(--bs-secondary-color);
}

/* ============================================================
   6. TEMPLATE CARDS
   ============================================================ */
.rule-template {
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
  transition: var(--transition);
}

.rule-template:hover {
  border-color: var(--rule-accent-line);
  box-shadow: var(--shadow-lift);
  transform: translateY(-2px);
}

.rule-template .template-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 13px 15px;
  border-bottom: 1px solid var(--bs-border-color);
}

.rule-template .template-header .template-icon {
  width: 34px;
  height: 34px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
}

.rule-template .template-header .template-name {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 0;
}

.rule-template .rule-template-body {
  padding: 13px 15px;
  flex: 1 1 auto;
}

.rule-template .rule-template-body p {
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin-bottom: 10px;
}

.rule-template .rule-template-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 11px 15px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

/* ============================================================
   7. CONDITIONS BUILDER
   ============================================================ */
.builder {
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  overflow: hidden;
}

.builder .builder-header {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 13px 16px;
  border-bottom: 1px solid var(--bs-border-color);
}

.builder .builder-header .builder-icon {
  width: 34px;
  height: 34px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--rule-if-soft);
  color: rgb(162.6, 124.3820512821, 0);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 17px;
}

.builder .builder-header .builder-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 1px;
}

.builder .builder-header p {
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin-bottom: 0;
}

.builder .builder-body {
  padding: 16px;
}

.builder .builder-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  padding: 12px 16px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
  font-size: 12px;
  color: var(--bs-secondary-color);
}

/* A condition group — an indented block sharing one boolean operator. */
.group {
  position: relative;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-secondary-bg);
  padding: 12px 12px 12px 16px;
}

.group+.group {
  margin-top: 26px;
}

/* The bracket down the left edge is what makes the grouping legible
     at a glance, which is exactly where nested rules go wrong. */

.group::before {
  content: "";
  position: absolute;
  left: 6px;
  top: 12px;
  bottom: 12px;
  width: 2px;
  border-radius: 2px;
  background: var(--rule-accent-line);
}

.condition {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  padding: 8px 10px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius-sm);
  background: var(--bs-body-bg);
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.condition .condition-op {
  font-family: var(--font-mono);
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.condition .form-select-sm,
.condition .form-control-sm {
  width: auto;
  min-width: 120px;
  font-size: 12.5px;
}

.condition .condition-x {
  margin-left: auto;
  border: 0;
  background: transparent;
  color: var(--bs-secondary-color);
  font-size: 15px;
  line-height: 1;
  padding: 2px;
}

.condition .condition-x:hover {
  color: var(--rule-stop);
}

/* The boolean connector between two conditions — a pill on the rule
   line, so AND and OR cannot be skimmed past. */
.join {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 8px 0;
}

.join::before,
.join::after {
  content: "";
  flex: 1 1 auto;
  height: 1px;
  background: var(--bs-border-color);
}

.join .join-pill {
  flex: 0 0 auto;
  display: inline-flex;
  border-radius: 999px;
  border: 1px solid var(--bs-border-color);
  background: var(--bs-body-bg);
  padding: 2px;
  overflow: hidden;
}

.join .join-pill button {
  border: 0;
  background: transparent;
  border-radius: 999px;
  padding: 2px 12px;
  font-family: var(--font-mono);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--bs-secondary-color);
  transition: var(--transition);
}

.join .join-pill button.is-active {
  background: var(--bs-primary);
  color: #fff;
}

/* A variable chip, insertable into a condition value. */
.variable {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--font-mono);
  font-size: 11.5px;
  padding: 3px 9px;
  border-radius: 6px;
  background: var(--tint-primary);
  color: var(--bs-primary);
  border: 1px solid transparent;
  transition: var(--transition);
  white-space: nowrap;
}

.variable i {
  font-size: 12px;
}

.variable:hover {
  border-color: var(--bs-primary);
  background: var(--bs-body-bg);
}

.vars {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

/* ============================================================
   8. QUICK ACTIONS
   ============================================================ */
.rule-quick-action {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  height: 100%;
  text-align: left;
  padding: 15px;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
  transition: var(--transition);
}

.rule-quick-action i.rule-action-icon {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
  transition: var(--transition);
}

.rule-quick-action .rule-action-text {
  flex: 1 1 auto;
  min-width: 0;
}

.rule-quick-action .rule-action-text b {
  display: block;
  font-size: 13.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 2px;
}

.rule-quick-action .rule-action-text small {
  font-size: 11.5px;
  color: var(--bs-secondary-color);
}

.rule-quick-action .rule-action-go {
  flex: 0 0 auto;
  font-size: 16px;
  color: var(--bs-secondary-color);
  transition: var(--transition);
}

.rule-quick-action:hover {
  border-color: var(--rule-accent-line);
  box-shadow: var(--shadow-lift);
  transform: translateY(-2px);
}

.rule-quick-action:hover i.rule-action-icon {
  background: var(--bs-primary);
  color: #fff;
}

.rule-quick-action:hover .rule-action-go {
  color: var(--bs-primary);
  transform: translateX(2px);
}

/* ============================================================
   9. OFFCANVAS, PANELS AND MODALS
   ============================================================ */
.rule-detail-panel {
  width: 88% !important;
  max-width: 1400px;
}

.rule-detail-panel .offcanvas-header {
  border-bottom: 1px solid var(--bs-border-color);
  padding: 16px 22px;
  align-items: flex-start;
  gap: 14px;
}

.rule-detail-panel .offcanvas-body {
  padding: 20px 22px 28px;
  background: var(--bs-secondary-bg);
}

@media (max-width: 991.98px) {
  .rule-detail-panel {
    width: 100% !important;
  }
}

.rule-detail-title {
  font-size: 20px;
  font-weight: 700;
  color: var(--bs-emphasis-color);
  margin-bottom: 5px;
  line-height: 1.3;
}

.rule-panel {
  height: 100%;
  display: flex;
  flex-direction: column;
  border: 1px solid var(--bs-border-color);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  box-shadow: var(--shadow);
}

.rule-panel .rule-panel-header {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 13px 16px;
  border-bottom: 1px solid var(--bs-border-color);
}

.rule-panel .rule-panel-header .rule-panel-icon {
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 16px;
}

.rule-panel .rule-panel-header .rule-panel-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 0;
}

.rule-panel .rule-panel-body {
  padding: 14px 16px;
  flex: 1 1 auto;
}

.rule-panel .rule-panel-footer {
  padding: 11px 16px;
  border-top: 1px solid var(--bs-border-color);
  background: var(--bs-secondary-bg);
  border-radius: 0 0 var(--radius) var(--radius);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  font-size: 12px;
  color: var(--bs-secondary-color);
}

/* An execution-history row: one past run, with its outcome. */
.run {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 10px 0;
  border-bottom: 1px dashed var(--bs-border-color);
}

.run:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.run>i {
  width: 28px;
  height: 28px;
  flex-shrink: 0;
  border-radius: 8px;
  background: var(--rule-on-soft);
  color: var(--rule-on);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 14px;
}

.run.is-failed>i {
  background: var(--rule-stop-soft);
  color: var(--rule-stop);
}

.run.is-skipped>i {
  background: var(--bs-secondary-bg);
  color: var(--bs-secondary-color);
}

.run .run-text {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 12.5px;
  color: var(--bs-emphasis-color);
}

.run .run-text small {
  display: block;
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.run .run-when {
  flex: 0 0 auto;
  font-size: 11px;
  color: var(--bs-secondary-color);
}

/* A dependency edge — this rule feeds, or is fed by, another. */
.dependency {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px dashed var(--bs-border-color);
}

.dependency:last-child {
  border-bottom: 0;
  padding-bottom: 0;
}

.dependency>i {
  font-size: 16px;
  color: var(--bs-primary);
  flex-shrink: 0;
}

.dependency .dependency-text {
  flex: 1 1 auto;
  min-width: 0;
}

.dependency .dependency-text b {
  display: block;
  font-size: 12.5px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
}

.dependency .dependency-text small {
  font-size: 11px;
  color: var(--bs-secondary-color);
}

.rule-modal-icon {
  width: 40px;
  height: 40px;
  border-radius: var(--radius-sm);
  background: var(--tint-primary);
  color: var(--bs-primary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 20px;
}

.rule-modal-icon.is-stop {
  background: var(--rule-stop-soft);
  color: var(--rule-stop);
}

.rule-dropzone {
  border: 1px dashed var(--border-strong);
  border-radius: var(--radius);
  background: var(--bs-body-bg);
  padding: 26px 20px;
  text-align: center;
  transition: var(--transition);
}

.rule-dropzone:hover {
  border-color: var(--bs-primary);
  background: var(--tint-primary);
}

.rule-dropzone>i {
  display: block;
  font-size: 30px;
  color: var(--bs-primary);
  margin-bottom: 8px;
}

.rule-dropzone b {
  display: block;
  font-size: 14px;
  font-weight: 600;
  color: var(--bs-emphasis-color);
  margin-bottom: 3px;
}

.rule-dropzone p {
  font-size: 12px;
  color: var(--bs-secondary-color);
  margin: 0 auto 12px;
  max-width: 46ch;
}

/*-----------------
	Alumni — community platform components

	A shared vocabulary for the Alumni Network Platform: the members
	themselves, the chapters they organise into, the mentorship they
	offer, the opportunities they post, the events they attend and
	the stories the school tells about them. Class prefix `alx-`.

	The visual language is a professional community, not a directory.
	A member is drawn as a community tile rather than a contact card:
	the thing that leads is what they can offer the network — mentor,
	recruit, speak — carried as intent pills rather than buried in a
	field list. Chapters, opportunities and events each get their own
	silhouette so the eye can tell the sections apart while scrolling,
	and nothing on the page repeats the shape of a data table.

	Contents
	  1. Tokens + shared pieces
	  2. Community tiles
	  3. Chapter cards
	  4. Career + mentorship rosters
	  5. Opportunity postings
	  6. Event cards
	  7. Spotlight stories
	  8. Community resources
	  9. Community actions
	 10. Offcanvas, panels and modals
-----------------*/
/* ============================================================
   1. TOKENS + SHARED PIECES
   ============================================================ */
:root {
  --community-radius: 14px;
  --community-radius-sm: 9px;
  --community-border: var(--bs-border-color, #E9EDF4);
  --community-border-strong: #EDF1F6;
  --community-surface: #ffffff;
  --community-surface-soft: #F8FAFC;
  --community-surface-hover: rgb(247.24, 248.56, 253.8);
  --community-text: #202C4B;
  --community-muted: #677788;
  --community-accent: rgb(68.92, 51.28, 131.16);
  --community-accent-soft: rgb(242.84, 239.24, 249.24);
  --community-accent-line: rgb(209.4, 195.9, 233.4);
  --community-mono: "SFMono-Regular", "Menlo", "Consolas", monospace;
  --community-shadow: 0 1px 2px rgba(17, 24, 39, .05);
  --community-shadow-lift: 0 10px 28px rgba(17, 24, 39, .10);
  --community-ease: .18s cubic-bezier(.4, 0, .2, 1);
}

/* Sticky toolbar shell — rides just under the fixed 60px layout header.
   Released below lg, where the header itself stops being fixed. */
.toolbar-sticky {
  position: sticky;
  top: 64px;
  z-index: 4;
}

@media (max-width: 991.98px) {
  .toolbar-sticky {
    position: static;
  }
}

/* Section heading — a rule that runs out from the label */
.section-header {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 16px;
}

.section-header .section-title {
  font-size: 18px;
  font-weight: 600;
  color: var(--community-text);
  margin: 0;
  white-space: nowrap;
}

.section-header .section-subtitle {
  font-size: 13px;
  color: var(--community-muted);
  margin: 2px 0 0;
}

.section-header .section-rule {
  flex: 1 1 auto;
  height: 1px;
  background: linear-gradient(90deg, var(--community-border) 0%, transparent 100%);
}

/* Micro label */
.metric-label {
  display: block;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--community-muted);
  margin-bottom: 3px;
}

/* Skill / interest chip */
.member-tag {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  height: 24px;
  padding: 0 9px;
  border-radius: 999px;
  border: 1px solid var(--community-border);
  background: var(--community-surface-soft);
  font-size: 11.5px;
  font-weight: 500;
  color: var(--community-text);
}

.member-tag i {
  font-size: 13px;
  color: var(--community-muted);
}

.member-tag.is-accent {
  border-color: var(--community-accent-line);
  background: var(--community-accent-soft);
  color: var(--community-accent);
}

.member-tag.is-accent i {
  color: currentcolor;
}

/* Status badge */
.status-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 22px;
  padding: 0 8px;
  border-radius: 6px;
  font-size: 11px;
  font-weight: 600;
  background: var(--community-surface-soft);
  color: var(--community-muted);
}

.status-badge i {
  font-size: 12px;
}

.status-badge.is-open {
  background: rgb(227.52, 247.2, 227.16);
  color: rgb(27.56, 152.04, 36.52);
}

.status-badge.is-soon {
  background: rgb(252.06, 244.36, 219.3);
  color: rgb(149.16, 122.3, 31.5);
}

.status-badge.is-closed {
  background: rgb(252.7, 233.3, 236.5);
  color: rgb(176, 39.68, 71.4);
}

.status-badge.is-accent {
  background: var(--community-accent-soft);
  color: var(--community-accent);
}

.status-badge.is-featured {
  background: var(--community-accent);
  color: #ffffff;
}

/* Avatar stack — who else is here */
.avatar-stack {
  display: flex;
  align-items: center;
}

.avatar-stack img,
.avatar-stack span.more {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  border: 2px solid var(--community-surface);
  margin-left: -8px;
  object-fit: cover;
}

.avatar-stack img:first-child,
.avatar-stack span.more:first-child {
  margin-left: 0;
}

.avatar-stack span.more {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--community-surface-soft);
  color: var(--community-muted);
  font-size: 10px;
  font-weight: 700;
}

/* Capacity meter — a fill bar, deliberately not a chart */
.progress-meter {
  height: 5px;
  border-radius: 999px;
  background: var(--community-surface-soft);
  overflow: hidden;
}

.progress-meter span {
  display: block;
  height: 100%;
  border-radius: inherit;
  background: var(--community-accent);
}

.progress-meter.is-warm span {
  background: #EAB300;
}

.progress-meter.is-full span {
  background: #E82646;
}

/* ============================================================
   2. COMMUNITY TILES
   ============================================================ */
.tile {
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
  border: 1px solid var(--community-border);
  border-radius: var(--community-radius);
  background: var(--community-surface);
  box-shadow: var(--community-shadow);
  overflow: hidden;
  width: 100%;
  transition: box-shadow var(--community-ease), border-color var(--community-ease), transform var(--community-ease);
}

.tile:hover {
  border-color: var(--community-accent-line);
  box-shadow: var(--community-shadow-lift);
  transform: translateY(-2px);
}

/* Identity band — cover strip the avatar sits across */
.tile-band {
  position: relative;
  height: 62px;
  background: linear-gradient(135deg, var(--community-accent) 0%, #524ccc 100%);
  /* A faint grid so the band reads as texture, not a colour block */

  .tile-band::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: linear-gradient(rgba(255, 255, 255, 0.1) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.1) 1px, transparent 1px);
    background-size: 22px 22px;
  }

  .tile-band .tile-batch {
    position: absolute;
    top: 10px;
    right: 12px;
    z-index: 2;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    height: 22px;
    padding: 0 9px;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.18);
    border: 1px solid rgba(255, 255, 255, 0.34);
    color: #ffffff;
    font-family: var(--community-mono);
    font-size: 11px;
    font-weight: 600;
  }

  .tile-identity {
    position: relative;
    display: flex;
    align-items: flex-end;
    gap: 12px;
    padding: 0 16px;
    margin-top: -26px;
    /* Lets the name and role ellipsis instead of forcing the flex row wider */
  }

  .tile-identity>div {
    min-width: 0;
  }

  .tile-identity .tile-avatar {
    position: relative;
    flex-shrink: 0;
    width: 62px;
    height: 62px;
    border-radius: 14px;
    border: 3px solid var(--community-surface);
    object-fit: cover;
    background: var(--community-surface-soft);
  }

  .tile-identity .tile-dot {
    position: absolute;
    left: 62px;
    bottom: 4px;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    border: 2px solid var(--community-surface);
    background: #1ABE17;
  }

  .tile-identity .tile-name {
    font-size: 15.5px;
    font-weight: 600;
    color: var(--community-text);
    margin: 0 0 1px;
  }

  .tile-identity .tile-name a {
    color: inherit;
  }

  .tile-identity .tile-name a:hover {
    color: var(--community-accent);
  }

  .tile-identity .tile-role {
    font-size: 12.5px;
    color: var(--community-muted);
    margin: 0;
    padding-bottom: 3px;
  }

  .tile-body {
    flex: 1 1 auto;
    padding: 14px 16px 0;
  }

  /* Company / industry / country facts, three to a row */
  .tile-facts {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 10px;
    padding: 10px 12px;
    border: 1px solid var(--community-border);
    border-radius: var(--community-radius-sm);
    background: var(--community-surface-soft);
    margin-bottom: 12px;
  }

  .tile-facts p {
    margin: 0;
    font-size: 12.5px;
    font-weight: 500;
    color: var(--community-text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  /* Intent pills — what this member offers the network */
  .intents {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: 12px;
  }

  .intent {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    height: 26px;
    padding: 0 10px;
    border-radius: 7px;
    border: 1px dashed var(--community-border-strong);
    background: transparent;
    color: var(--community-muted);
    font-size: 11.5px;
    font-weight: 600;
  }

  .intent i {
    font-size: 14px;
  }

  /* Solid + coloured only when the member has actually opted in, so a
     scan of the grid reads availability without reading any labels. */

  .intent.is-on {
    border-style: solid;
  }

  .intent.is-on.is-mentor {
    border-color: rgb(154.24, 226.4, 152.92);
    background: rgb(232.1, 248.5, 231.8);
    color: rgb(27.68, 149.12, 37.56);
  }

  .intent.is-on.is-recruit {
    border-color: rgb(149.4, 187.24, 233);
    background: rgb(231, 239.6, 250);
    color: rgb(19.76, 85.04, 168.6);
  }

  .intent.is-on.is-speak {
    border-color: rgb(245.76, 221.56, 142.8);
    background: rgb(252.06, 244.36, 219.3);
    color: rgb(141.08, 116.9, 34.5);
  }

  /* Achievement line */
  .tile-note {
    display: flex;
    align-items: flex-start;
    gap: 7px;
    font-size: 12.5px;
    color: var(--community-muted);
    margin-bottom: 12px;
  }

  .tile-note i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 15px;
    color: #EAB300;
  }

  .tile-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 11px 16px;
    border-top: 1px solid var(--community-border);
    background: rgb(251.78, 252.7, 253.62);
  }

  .tile-footer .tile-connections {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 11.5px;
    color: var(--community-muted);
  }

  /* Compact icon button used across footers */
  .icon-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: 8px;
    border: 1px solid var(--community-border);
    background: var(--community-surface);
    color: var(--community-muted);
    transition: all var(--community-ease);
  }

  .icon-button i {
    font-size: 15px;
  }

  .icon-button:hover {
    border-color: var(--community-accent-line);
    background: var(--community-accent-soft);
    color: var(--community-accent);
  }

  /* ============================================================
   3. CHAPTER CARDS
   ============================================================ */
  .chapter {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    width: 100%;
    padding: 16px 16px 14px 20px;
    border: 1px solid var(--community-border);
    border-radius: var(--community-radius);
    background: var(--community-surface);
    box-shadow: var(--community-shadow);
    transition: box-shadow var(--community-ease), border-color var(--community-ease);
    /* Regional rail — the one piece of colour that distinguishes chapters */
  }

  .chapter::before {
    content: "";
    position: absolute;
    left: 0;
    top: 14px;
    bottom: 14px;
    width: 3px;
    border-radius: 0 3px 3px 0;
    background: var(--chapter-hue, var(--community-accent));
  }

  .chapter:hover {
    border-color: var(--community-accent-line);
    box-shadow: var(--community-shadow-lift);
  }

  .chapter.hue-teal {
    --chapter-hue: #02a8b5;
  }

  .chapter.hue-purple {
    --chapter-hue: #4A00E5;
  }

  .chapter.hue-warning {
    --chapter-hue: #EAB300;
  }

  .chapter.hue-success {
    --chapter-hue: #1ABE17;
  }

  .chapter.hue-info {
    --chapter-hue: #0F65CD;
  }

  .chapter.hue-danger {
    --chapter-hue: #E82646;
  }

  .chapter-header {
    display: flex;
    align-items: center;
    gap: 11px;
    margin-bottom: 13px;
  }

  .chapter-header .crest {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 42px;
    height: 42px;
    border-radius: 12px;
    background: color-mix(in srgb, var(--chapter-hue, var(--community-accent)) 12%, #ffffff);
    color: var(--chapter-hue, var(--community-accent));
  }

  .chapter-header .crest i {
    font-size: 21px;
  }

  .chapter-header h6 {
    font-size: 14.5px;
    font-weight: 600;
    color: var(--community-text);
    margin: 0 0 1px;
  }

  .chapter-header p {
    font-size: 12px;
    color: var(--community-muted);
    margin: 0;
  }

  /* Meetup strip */
  .meetup {
    display: flex;
    align-items: center;
    gap: 9px;
    padding: 9px 11px;
    border-radius: var(--community-radius-sm);
    background: var(--community-surface-soft);
    margin-bottom: 12px;
  }

  .meetup i {
    font-size: 16px;
    color: var(--chapter-hue, var(--community-accent));
  }

  .meetup .meetup-text {
    font-size: 12.5px;
    font-weight: 500;
    color: var(--community-text);
    line-height: 1.35;
  }

  .meetup .meetup-text small {
    display: block;
    font-size: 11px;
    font-weight: 400;
    color: var(--community-muted);
  }

  .chapter-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding-top: 12px;
    border-top: 1px dashed var(--community-border);
  }

  .chapter-footer .coordinator {
    display: flex;
    align-items: center;
    gap: 7px;
    min-width: 0;
  }

  .chapter-footer .coordinator img {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    object-fit: cover;
  }

  .chapter-footer .coordinator span {
    font-size: 12px;
    color: var(--community-text);
    font-weight: 500;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .chapter-footer .coordinator small {
    display: block;
    font-size: 10.5px;
    font-weight: 400;
    color: var(--community-muted);
  }

  /* ============================================================
   4. CAREER + MENTORSHIP ROSTERS
   ============================================================ */
  .roster {
    height: 100%;
    width: 100%;
    border: 1px solid var(--community-border);
    border-radius: var(--community-radius);
    background: var(--community-surface);
    box-shadow: var(--community-shadow);
    overflow: hidden;
  }

  .roster-header {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 14px 16px;
    border-bottom: 1px solid var(--community-border);
  }

  .roster-header .roster-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 38px;
    height: 38px;
    border-radius: 11px;
    background: var(--community-accent-soft);
    color: var(--community-accent);
  }

  .roster-header .roster-icon i {
    font-size: 19px;
  }

  .roster-header h6 {
    font-size: 14px;
    font-weight: 600;
    margin: 0 0 1px;
    color: var(--community-text);
  }

  .roster-header p {
    font-size: 11.5px;
    color: var(--community-muted);
    margin: 0;
  }

  /* One person inside a roster */
  .person {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 11px 16px;
    border-bottom: 1px solid var(--community-border);
    transition: background var(--community-ease);
  }

  .person:last-child {
    border-bottom: 0;
  }

  .person:hover {
    background: var(--community-surface-hover);
  }

  .person img {
    width: 36px;
    height: 36px;
    border-radius: 10px;
    object-fit: cover;
    flex-shrink: 0;
  }

  .person .person-main {
    flex: 1 1 auto;
    min-width: 0;
  }

  .person .person-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--community-text);
    margin: 0 0 1px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .person .person-org {
    font-size: 11.5px;
    color: var(--community-muted);
    margin: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .person .person-meta {
    flex-shrink: 0;
    text-align: right;
  }

  .person .person-meta .years {
    display: block;
    font-family: var(--community-mono);
    font-size: 12px;
    font-weight: 600;
    color: var(--community-text);
  }

  .person .person-meta small {
    font-size: 10px;
    color: var(--community-muted);
  }

  /* Availability dot + word */
  .availability {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 11px;
    font-weight: 600;
    color: var(--community-muted);
  }

  .availability::before {
    content: "";
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: currentcolor;
  }

  .availability.is-free {
    color: rgb(27.8, 146.2, 38.6);
  }

  .availability.is-limited {
    color: rgb(137.04, 114.2, 36);
  }

  .availability.is-busy {
    color: #677788;
  }

  .roster-footer {
    padding: 11px 16px;
    border-top: 1px solid var(--community-border);
    background: rgb(251.78, 252.7, 253.62);
  }

  /* ============================================================
   5. OPPORTUNITY POSTINGS
   ============================================================ */
  .post {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 15px 16px 14px;
    border: 1px solid var(--community-border);
    border-radius: var(--community-radius);
    background: var(--community-surface);
    box-shadow: var(--community-shadow);
    transition: box-shadow var(--community-ease), border-color var(--community-ease);
  }

  .post:hover {
    border-color: var(--community-accent-line);
    box-shadow: var(--community-shadow-lift);
  }

  /* Category worn on the top edge rather than as another badge in the body */
  .post-category {
    position: absolute;
    top: -1px;
    left: 16px;
    height: 3px;
    width: 46px;
    border-radius: 0 0 3px 3px;
    background: var(--post-hue, var(--community-accent));
  }

  .post-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 11px;
  }

  .post-header h6 {
    font-size: 14.5px;
    font-weight: 600;
    color: var(--community-text);
    margin: 0 0 3px;
    line-height: 1.35;
  }

  .post-header .post-org {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    color: var(--community-muted);
  }

  .post-header .post-org img {
    width: 18px;
    height: 18px;
    border-radius: 5px;
    object-fit: cover;
  }

  .post-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 14px;
    margin-bottom: 12px;
    font-size: 12px;
    color: var(--community-muted);
  }

  .post-meta span {
    display: inline-flex;
    align-items: center;
    gap: 5px;
  }

  .post-meta i {
    font-size: 14px;
  }

  /* Deadline strip — the fact that decides whether the card matters */
  .deadline {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: auto;
    padding: 9px 11px;
    border-radius: var(--community-radius-sm);
    background: var(--community-surface-soft);
    font-size: 12px;
  }

  .deadline .deadline-when {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-weight: 500;
    color: var(--community-text);
  }

  .deadline .deadline-when i {
    font-size: 15px;
    color: var(--community-muted);
  }

  /* ============================================================
   6. EVENT CARDS
   ============================================================ */
  .event {
    display: flex;
    height: 100%;
    width: 100%;
    border: 1px solid var(--community-border);
    border-radius: var(--community-radius);
    background: var(--community-surface);
    box-shadow: var(--community-shadow);
    overflow: hidden;
    transition: box-shadow var(--community-ease), border-color var(--community-ease);
  }

  .event:hover {
    border-color: var(--community-accent-line);
    box-shadow: var(--community-shadow-lift);
  }

  /* Date block — a torn calendar leaf down the left edge */
  .event-date {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 78px;
    padding: 14px 6px;
    border-right: 1px solid var(--community-border);
    background: linear-gradient(180deg, var(--community-accent-soft) 0%, var(--community-surface) 100%);
  }

  .event-date .event-day {
    font-size: 26px;
    font-weight: 700;
    line-height: 1;
    color: var(--community-accent);
  }

  .event-date .event-month {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--community-muted);
    margin-top: 3px;
  }

  .event-date .event-time {
    font-size: 10.5px;
    color: var(--community-muted);
    margin-top: 7px;
    padding-top: 7px;
    border-top: 1px dashed var(--community-border);
    width: 100%;
    text-align: center;
  }

  .event-body {
    flex: 1 1 auto;
    min-width: 0;
    padding: 13px 15px;
    display: flex;
    flex-direction: column;
  }

  .event-body h6 {
    font-size: 14.5px;
    font-weight: 600;
    color: var(--community-text);
    margin: 0 0 4px;
  }

  .event-body .event-where {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 13px;
    font-size: 12px;
    color: var(--community-muted);
    margin-bottom: 11px;
  }

  .event-body .event-where span {
    display: inline-flex;
    align-items: center;
    gap: 5px;
  }

  .event-body .event-where i {
    font-size: 14px;
  }

  .event-seats {
    margin-top: auto;
  }

  .event-seats .seats-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    font-size: 11.5px;
    color: var(--community-muted);
    margin-bottom: 5px;
  }

  .event-seats .seats-row b {
    color: var(--community-text);
  }

  .event-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-top: 12px;
    padding-top: 11px;
    border-top: 1px solid var(--community-border);
  }

  /* ============================================================
   7. SPOTLIGHT STORIES
   ============================================================ */
  .spotlight {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    border-radius: var(--community-radius);
    overflow: hidden;
    border: 1px solid var(--community-border);
    background: var(--community-surface);
    box-shadow: var(--community-shadow);
    transition: box-shadow var(--community-ease), transform var(--community-ease);
  }

  .spotlight:hover {
    box-shadow: var(--community-shadow-lift);
    transform: translateY(-2px);
  }

  .spotlight-photo {
    position: relative;
    height: 168px;
    overflow: hidden;
  }

  .spotlight-photo img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  }

  /* Scrim so the ribbon and award stay legible on any photo */

  .spotlight-photo::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(32, 44, 75, 0.48) 0%, rgba(32, 44, 75, 0) 46%, rgba(32, 44, 75, 0.72) 100%);
  }

  .spotlight-photo .spotlight-ribbon {
    position: absolute;
    top: 12px;
    left: 12px;
    z-index: 2;
  }

  .spotlight-photo .spotlight-award {
    position: absolute;
    left: 14px;
    right: 14px;
    bottom: 11px;
    z-index: 2;
    display: flex;
    align-items: center;
    gap: 7px;
    color: #ffffff;
    font-size: 12px;
    font-weight: 500;
  }

  .spotlight-photo .spotlight-award i {
    font-size: 16px;
    color: #EAB300;
  }

  .spotlight:hover .spotlight-photo img {
    transform: scale(1.04);
  }

  .spotlight-body {
    flex: 1 1 auto;
    padding: 14px 16px 0;
  }

  .spotlight-body h6 {
    font-size: 15.5px;
    font-weight: 600;
    line-height: 1.4;
    color: var(--community-text);
    margin: 0 0 7px;
  }

  .spotlight-body p {
    font-size: 12.5px;
    color: var(--community-muted);
    line-height: 1.6;
    margin: 0;
  }

  .spotlight-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 13px 16px;
  }

  .spotlight-footer .spotlight-who {
    display: flex;
    align-items: center;
    gap: 9px;
    min-width: 0;
  }

  .spotlight-footer .spotlight-who img {
    width: 32px;
    height: 32px;
    border-radius: 9px;
    object-fit: cover;
  }

  .spotlight-footer .spotlight-who b {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--community-text);
  }

  .spotlight-footer .spotlight-who small {
    font-size: 11px;
    color: var(--community-muted);
  }

  /* ============================================================
   8. COMMUNITY RESOURCES
   ============================================================ */
  /* Rounded glyph tile. Top level rather than nested under .resource because the
   offcanvas event rows reuse it outside a resource card. */
  .resource-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 40px;
    height: 40px;
    border-radius: 11px;
    background: var(--community-surface-soft);
    color: var(--community-accent);
  }

  .resource-icon i {
    font-size: 20px;
  }

  .resource {
    display: flex;
    align-items: center;
    gap: 12px;
    height: 100%;
    padding: 13px 14px;
    border: 1px solid var(--community-border);
    border-radius: var(--community-radius);
    background: var(--community-surface);
    box-shadow: var(--community-shadow);
    transition: all var(--community-ease);
  }

  .resource:hover {
    border-color: var(--community-accent-line);
    background: var(--community-surface-hover);
    box-shadow: var(--community-shadow-lift);
  }

  .resource:hover .resource-go {
    color: var(--community-accent);
    transform: translateX(2px);
  }

  .resource .resource-main {
    flex: 1 1 auto;
    min-width: 0;
  }

  .resource .resource-main h6 {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--community-text);
    margin: 0 0 2px;
  }

  .resource .resource-main p {
    font-size: 11.5px;
    color: var(--community-muted);
    margin: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .resource .resource-go {
    flex-shrink: 0;
    color: var(--community-muted);
    font-size: 17px;
    transition: all var(--community-ease);
  }

  /* ============================================================
   9. COMMUNITY ACTIONS
   ============================================================ */
  .action {
    position: relative;
    display: block;
    height: 100%;
    padding: 16px 15px 14px;
    border: 1px solid var(--community-border);
    border-radius: var(--community-radius);
    background: var(--community-surface);
    box-shadow: var(--community-shadow);
    text-align: left;
    width: 100%;
    transition: all var(--community-ease);
  }

  .action:hover {
    border-color: var(--community-accent);
    box-shadow: var(--community-shadow-lift);
    transform: translateY(-2px);
  }

  .action .action-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 11px;
    background: var(--community-accent-soft);
    color: var(--community-accent);
    margin-bottom: 11px;
  }

  .action .action-icon i {
    font-size: 19px;
  }

  .action h6 {
    font-size: 13.5px;
    font-weight: 600;
    color: var(--community-text);
    margin: 0 0 3px;
  }

  .action p {
    font-size: 11.5px;
    color: var(--community-muted);
    line-height: 1.5;
    margin: 0;
  }

  .action .action-go {
    position: absolute;
    top: 16px;
    right: 15px;
    color: var(--community-border-strong);
    font-size: 16px;
    transition: all var(--community-ease);
  }

  .action:hover .action-go {
    color: var(--community-accent);
    transform: translateX(2px);
  }

  /* ============================================================
   10. OFFCANVAS, PANELS AND MODALS
   ============================================================ */
  .detail-panel {
    width: 88%;
  }

  @media (max-width: 991.98px) {
    .detail-panel {
      width: 100%;
    }
  }

  .detail-panel .offcanvas-body {
    background: rgb(252.2, 253, 253.8);
  }

  /* Member header inside the offcanvas */
  .detail-identity {
    display: flex;
    align-items: center;
    gap: 14px;
  }

  .detail-identity img {
    width: 56px;
    height: 56px;
    border-radius: 14px;
    object-fit: cover;
  }

  .detail-identity h5 {
    font-size: 17px;
    font-weight: 600;
    margin: 0 0 2px;
    color: var(--community-text);
  }

  .detail-identity p {
    font-size: 12.5px;
    color: var(--community-muted);
    margin: 0;
  }

  /* Generic panel used for every block in the offcanvas */
  .panel {
    border: 1px solid var(--community-border);
    border-radius: var(--community-radius);
    background: var(--community-surface);
    box-shadow: var(--community-shadow);
    margin-bottom: 16px;
  }

  .panel .panel-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--community-border);
  }

  .panel .panel-header h6 {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13.5px;
    font-weight: 600;
    color: var(--community-text);
    margin: 0;
  }

  .panel .panel-header h6 i {
    font-size: 16px;
    color: var(--community-accent);
  }

  .panel .panel-body {
    padding: 14px 16px;
  }

  .panel .panel-body.is-flush {
    padding: 0;
  }

  /* Definition rows — profile and education facts */
  .facts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
    gap: 14px;
  }

  .facts .fact p {
    margin: 0;
    font-size: 13px;
    font-weight: 500;
    color: var(--community-text);
  }

  /* Professional journey — stacked posting blocks, not a timeline */
  .journey .job {
    display: flex;
    gap: 12px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--community-border);
  }

  .journey .job:last-child {
    border-bottom: 0;
  }

  .journey .job .job-logo {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    width: 38px;
    height: 38px;
    border-radius: 10px;
    border: 1px solid var(--community-border);
    background: var(--community-surface-soft);
    color: var(--community-muted);
  }

  .journey .job .job-logo i {
    font-size: 18px;
  }

  .journey .job h6 {
    font-size: 13px;
    font-weight: 600;
    color: var(--community-text);
    margin: 0 0 2px;
  }

  .journey .job .job-org {
    font-size: 12px;
    color: var(--community-muted);
    margin: 0 0 4px;
  }

  .journey .job .job-span {
    font-family: var(--community-mono);
    font-size: 11px;
    color: var(--community-muted);
    white-space: nowrap;
    margin-left: auto;
    flex-shrink: 0;
  }

  .journey .job.is-current .job-logo {
    border-color: var(--community-accent-line);
    background: var(--community-accent-soft);
    color: var(--community-accent);
  }

  /* Achievement rows */
  .award {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 0;
    border-bottom: 1px dashed var(--community-border);
  }

  .award:first-child {
    padding-top: 0;
  }

  .award:last-child {
    border-bottom: 0;
    padding-bottom: 0;
  }

  .award i {
    flex-shrink: 0;
    margin-top: 1px;
    font-size: 17px;
    color: #EAB300;
  }

  .award b {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--community-text);
  }

  .award small {
    font-size: 11.5px;
    color: var(--community-muted);
  }

  /* Community participation counters, no card chrome */
  .tally {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(96px, 1fr));
    gap: 1px;
    background: var(--community-border);
    border-radius: var(--community-radius-sm);
    overflow: hidden;
  }

  .tally .tally-cell {
    padding: 12px 10px;
    background: var(--community-surface);
    text-align: center;
  }

  .tally .tally-cell b {
    display: block;
    font-size: 19px;
    font-weight: 700;
    color: var(--community-text);
    line-height: 1.15;
  }

  .tally .tally-cell small {
    font-size: 11px;
    color: var(--community-muted);
  }

  /* Gallery thumbs */
  .gallery {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(92px, 1fr));
    gap: 8px;
  }

  .gallery img {
    width: 100%;
    aspect-ratio: 4/3;
    object-fit: cover;
    border-radius: var(--community-radius-sm);
    border: 1px solid var(--community-border);
  }

  /* Social links */
  .social {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
  }

  .social a {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    height: 32px;
    padding: 0 12px;
    border-radius: 8px;
    border: 1px solid var(--community-border);
    background: var(--community-surface-soft);
    font-size: 12px;
    font-weight: 500;
    color: var(--community-text);
    transition: all var(--community-ease);
  }

  .social a i {
    font-size: 15px;
    color: var(--community-muted);
  }

  .social a:hover {
    border-color: var(--community-accent-line);
    background: var(--community-accent-soft);
    color: var(--community-accent);
  }

  .social a:hover i {
    color: currentcolor;
  }

  /* Note entries */
  .note-item {
    padding: 11px 12px;
    border-radius: var(--community-radius-sm);
    background: var(--community-surface-soft);
    border: 1px solid var(--community-border);
    margin-bottom: 9px;
  }

  .note-item:last-child {
    margin-bottom: 0;
  }

  .note-item p {
    font-size: 12.5px;
    color: var(--community-text);
    line-height: 1.55;
    margin: 0 0 6px;
  }

  .note-item .note-by {
    font-size: 11px;
    color: var(--community-muted);
  }

  /* Related alumni rows */
  .related-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 9px 16px;
    border-bottom: 1px solid var(--community-border);
    transition: background var(--community-ease);
  }

  .related-item:last-child {
    border-bottom: 0;
  }

  .related-item:hover {
    background: var(--community-surface-hover);
  }

  .related-item img {
    width: 34px;
    height: 34px;
    border-radius: 9px;
    object-fit: cover;
  }

  .related-item .related-main {
    flex: 1 1 auto;
    min-width: 0;
  }

  .related-item .related-main b {
    display: block;
    font-size: 12.5px;
    font-weight: 600;
    color: var(--community-text);
  }

  .related-item .related-main small {
    font-size: 11px;
    color: var(--community-muted);
  }

  /* Modal header icon */
  .modal-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 10px;
    background: var(--community-accent-soft);
    color: var(--community-accent);
    margin-right: 11px;
  }

  .modal-icon i {
    font-size: 18px;
  }

  /* ============================================================
   DARK THEME
   ============================================================ */
  [data-theme=dark],
  [data-bs-theme=dark] {
    --community-border: #2c3448;
    --community-border-strong: #3a4459;
    --community-surface: #1f2536;
    --community-surface-soft: #262d40;
    --community-surface-hover: #2a3145;
    --community-text: #e6e9f2;
    --community-muted: #9aa3b8;
    --community-accent: rgb(175.96, 152.56, 217.56);
    --community-accent-soft: rgba(103, 58, 183, .18);
    --community-accent-line: rgba(103, 58, 183, .42);
    --community-shadow: 0 1px 2px rgba(0, 0, 0, .32);
    --community-shadow-lift: 0 10px 28px rgba(0, 0, 0, .42);
  }

  [data-theme=dark] .tile-footer,
  [data-theme=dark] .roster-footer,
  [data-bs-theme=dark] .tile-footer,
  [data-bs-theme=dark] .roster-footer {
    background: #232a3c;
  }

  [data-theme=dark] .intent,
  [data-bs-theme=dark] .intent {
    border-color: #3a4459;
  }

  [data-theme=dark] .detail-panel .offcanvas-body,
  [data-bs-theme=dark] .detail-panel .offcanvas-body {
    background: #1a2030;
  }

  [data-theme=dark] .tile-band::after,
  [data-bs-theme=dark] .tile-band::after {
    background-image: linear-gradient(rgba(255, 255, 255, 0.06) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
  }

  .sticky-item {
    position: sticky;
    top: 80px;
  }

  .choices[data-type*=select-multiple] .choices__inner {
    padding-top: 3px !important;
    padding-left: 10px !important;
  }

  .timepicker~.cal-icon,
  .datetimepicker~.cal-icon {
    display: none !important;
  }

  /*-----------------
	Percentage width helpers

	Fill widths for meters, coverage bars and progress rails. One shared set
	replaces the three identical per-family loops that used to generate
	`alx-w-*`, `cmx-w-*` and `cfx-w-*`. Named `width-*` rather than `w-*` so
	they cannot collide with Bootstrap's own `.w-25/50/75/100`.
-----------------*/
  .width-4 {
    width: 4%;
  }

  .width-8 {
    width: 8%;
  }

  .width-12 {
    width: 12%;
  }

  .width-16 {
    width: 16%;
  }

  .width-18 {
    width: 18%;
  }

  .width-20 {
    width: 20%;
  }

  .width-24 {
    width: 24%;
  }

  .width-28 {
    width: 28%;
  }

  .width-30 {
    width: 30%;
  }

  .width-32 {
    width: 32%;
  }

  .width-36 {
    width: 36%;
  }

  .width-38 {
    width: 38%;
  }

  .width-40 {
    width: 40%;
  }

  .width-44 {
    width: 44%;
  }

  .width-48 {
    width: 48%;
  }

  .width-52 {
    width: 52%;
  }

  .width-56 {
    width: 56%;
  }

  .width-58 {
    width: 58%;
  }

  .width-60 {
    width: 60%;
  }

  .width-64 {
    width: 64%;
  }

  .width-68 {
    width: 68%;
  }

  .width-72 {
    width: 72%;
  }

  .width-76 {
    width: 76%;
  }

  .width-78 {
    width: 78%;
  }

  .width-80 {
    width: 80%;
  }

  .width-84 {
    width: 84%;
  }

  .width-86 {
    width: 86%;
  }

  .width-88 {
    width: 88%;
  }

  .width-92 {
    width: 92%;
  }

  .width-96 {
    width: 96%;
  }

  .width-100 {
    width: 100%;
  }
}

/* Global Required Field Indicator */
.form-label.required::after,
label.required::after {
  content: " *";
  color: #dc3545;
  font-weight: bold;
  font-size: 14px;
}

/* ============================================================
   AEA ERP — Modern Flat Button System (No 3D / No Shadows)
   ============================================================ */

/* 1. Eliminate all shadows, 3D ledges, and vertical jumps */
.btn,
.btn:hover,
.btn:focus,
.btn:active,
.btn.active,
.btn.show,
.btn:disabled,
.btn.disabled,
.btn-3d,
.btn-3d:hover,
.btn-3d:focus,
.btn-3d:active,
.btn[class*="btn-"] {
  box-shadow: none !important;
  transform: none !important;
  text-shadow: none !important;
  filter: none !important;
}

/* 2. Flat Solid Backgrounds (Replace Glossy Gradients) */
.btn.btn-primary {
  background: #1d4282 !important;
  border-color: #1d4282 !important;
  color: #fff !important;
}

.btn.btn-primary:hover,
.btn.btn-primary:focus {
  background: #153264 !important;
  border-color: #153264 !important;
  color: #fff !important;
}

.btn.btn-primary:active,
.btn.btn-primary.active {
  background: #0f2448 !important;
  border-color: #0f2448 !important;
  color: #fff !important;
}

/* 3. Clean Flat Hover for Semantic Buttons */
.btn.btn-success {
  background-color: #16a34a !important;
  border-color: #16a34a !important;
  color: #fff !important;
}

.btn.btn-success:hover,
.btn.btn-success:focus {
  background-color: #15803d !important;
  border-color: #15803d !important;
  color: #fff !important;
}

.btn.btn-danger {
  background-color: #dc2626 !important;
  border-color: #dc2626 !important;
  color: #fff !important;
}

.btn.btn-danger:hover,
.btn.btn-danger:focus {
  background-color: #b91c1c !important;
  border-color: #b91c1c !important;
  color: #fff !important;
}

/* 4. Crisp Flat Light / Outline Buttons */
.btn.btn-light,
.btn.btn-white {
  background-color: #f8fafc !important;
  border-color: #e2e8f0 !important;
  color: #334155 !important;
}

.btn.btn-light:hover,
.btn.btn-white:hover {
  background-color: #f1f5f9 !important;
  border-color: #cbd5e1 !important;
  color: #1e293b !important;
}

/* Table / Inline Filter Search Box */
.table-search-box {
  width: 220px !important;
}

@media (max-width: 575.98px) {
  .table-search-box {
    width: 100% !important;
  }
}