/* TogetherTrack — brand theme. Loaded after Bootstrap + app.css.
   Self-hosted Plus Jakarta Sans (static/fonts/) — no third-party font
   request on page load (RA 10173 data-minimization: avoids sending
   staff/guardian IPs to Google on every request). */

@font-face {
  font-family: "Plus Jakarta Sans";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/plus-jakarta-sans-400.503e7cbdb484.woff2") format("woff2");
}
@font-face {
  font-family: "Plus Jakarta Sans";
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url("../fonts/plus-jakarta-sans-500.e5e6761eaecb.woff2") format("woff2");
}
@font-face {
  font-family: "Plus Jakarta Sans";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("../fonts/plus-jakarta-sans-600.79e62f3332cd.woff2") format("woff2");
}
@font-face {
  font-family: "Plus Jakarta Sans";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("../fonts/plus-jakarta-sans-700.5b629bd8abb4.woff2") format("woff2");
}
@font-face {
  font-family: "Plus Jakarta Sans";
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url("../fonts/plus-jakarta-sans-800.408ecc6630e8.woff2") format("woff2");
}

:root {
  /* Brand palette */
  --tt-blue: #1d6fab;
  --tt-blue-dark: #155280;
  --tt-blue-tint: #e8f4fd;
  --tt-green: #1d9e75;
  --tt-green-dark: #0f6e56;
  --tt-green-tint: #eaf3de;
  --tt-text: #2c2c2a;
  --tt-text-muted: #717170;
  --tt-bg: #f7f8fa;
  --tt-white: #ffffff;
  --tt-amber-tint: #faeeda;
  --tt-amber-text: #633806;
  --tt-red-tint: #fcebeb;
  --tt-red-text: #a32d2d;
  --tt-purple-tint: #eeedfe;
  --tt-purple-text: #3c3489;

  /* Bootstrap 5.3 variable overrides — CSS-var driven, no SCSS recompile */
  --bs-body-font-family: "Plus Jakarta Sans", system-ui, sans-serif;
  --bs-body-font-size: 0.9375rem;
  --bs-body-line-height: 1.7;
  --bs-body-color: var(--tt-text);
  --bs-body-bg: var(--tt-bg);

  --bs-primary: var(--tt-blue);
  --bs-primary-rgb: 29, 111, 171;
  --bs-success: var(--tt-green);
  --bs-success-rgb: 29, 158, 117;

  /* "Subtle" tokens (alert-primary/-success, our own sidebar active-link,
     accordion/list-group active states) are separate literal :root values
     in Bootstrap 5.3, not derived from --bs-primary/--bs-success — override
     them too or those surfaces stay stock Bootstrap blue/green. */
  --bs-primary-bg-subtle: var(--tt-blue-tint);
  --bs-primary-border-subtle: color-mix(in srgb, var(--tt-blue) 35%, white);
  --bs-primary-text-emphasis: var(--tt-blue-dark);
  --bs-success-bg-subtle: var(--tt-green-tint);
  --bs-success-border-subtle: color-mix(in srgb, var(--tt-green) 35%, white);
  --bs-success-text-emphasis: var(--tt-green-dark);

  --bs-link-color: var(--tt-blue);
  --bs-link-color-rgb: 29, 111, 171;
  --bs-link-hover-color: var(--tt-blue-dark);
  --bs-link-hover-color-rgb: 21, 82, 128;

  --bs-border-radius: 8px;
  --bs-border-radius-sm: 6px;
  --bs-border-radius-lg: 12px;

  --bs-card-border-color: rgba(0, 0, 0, 0.08);
  --bs-card-border-radius: 12px;
  --bs-card-cap-bg: transparent;

  /* Deterministic navbar height so the sticky sidebar (app.css) can offset
     against it exactly, instead of both files guessing the same magic
     number independently. */
  --tt-navbar-height: 80px;
  --tt-org-bar-height: 28px;
}

.navbar {
  min-height: var(--tt-navbar-height);
}

/* Thin org-name bar stacked above the main nav — both are sticky, so the
   nav's own sticky offset is pushed down by this bar's height (app.css's
   sidebar offset accounts for both, see --tt-org-bar-height there). */
.tt-org-bar {
  background-color: var(--tt-blue);
  color: #fff;
  font-size: 12pt;
  height: var(--tt-org-bar-height);
  line-height: var(--tt-org-bar-height);
  position: sticky;
  top: 0;
  z-index: 1030;
}

.navbar.sticky-top {
  top: var(--tt-org-bar-height);
}

/* --- Buttons -------------------------------------------------------------
   Bootstrap 5.3 bakes each variant's bg/hover/active/focus as literal hex
   values into --bs-btn-* on the .btn-* class itself (verified against the
   shipped bootstrap.css) — the :root --bs-primary override above does NOT
   reach buttons. Only primary/success get brand colors; danger/warning/
   outline-secondary/link have no brand-specced button color and stay stock
   Bootstrap. */

.btn-primary,
.btn-outline-primary {
  --bs-btn-color: #fff;
  --bs-btn-bg: var(--tt-blue);
  --bs-btn-border-color: var(--tt-blue);
  --bs-btn-hover-color: #fff;
  --bs-btn-hover-bg: var(--tt-blue-dark);
  --bs-btn-hover-border-color: var(--tt-blue-dark);
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: color-mix(in srgb, var(--tt-blue-dark) 88%, black);
  --bs-btn-active-border-color: color-mix(in srgb, var(--tt-blue-dark) 88%, black);
  --bs-btn-disabled-color: #fff;
  --bs-btn-disabled-bg: var(--tt-blue);
  --bs-btn-disabled-border-color: var(--tt-blue);
  --bs-btn-focus-shadow-rgb: var(--bs-primary-rgb);
}
.btn-outline-primary {
  --bs-btn-color: var(--tt-blue);
  --bs-btn-bg: transparent;
  --bs-btn-disabled-color: var(--tt-blue);
  --bs-btn-disabled-bg: transparent;
}

.btn-success,
.btn-outline-success {
  --bs-btn-color: #fff;
  --bs-btn-bg: var(--tt-green);
  --bs-btn-border-color: var(--tt-green);
  --bs-btn-hover-color: #fff;
  --bs-btn-hover-bg: var(--tt-green-dark);
  --bs-btn-hover-border-color: var(--tt-green-dark);
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: color-mix(in srgb, var(--tt-green-dark) 88%, black);
  --bs-btn-active-border-color: color-mix(in srgb, var(--tt-green-dark) 88%, black);
  --bs-btn-disabled-color: #fff;
  --bs-btn-disabled-bg: var(--tt-green);
  --bs-btn-disabled-border-color: var(--tt-green);
  --bs-btn-focus-shadow-rgb: var(--bs-success-rgb);
}
.btn-outline-success {
  --bs-btn-color: var(--tt-green);
  --bs-btn-bg: transparent;
  --bs-btn-disabled-color: var(--tt-green);
  --bs-btn-disabled-bg: transparent;
}


/* --- HTMX global loading bar --------------------------------------------
   Per-element hx-indicator spinners already exist elsewhere (e.g. the
   attendance search box, kiosk) — this is a separate, app-wide affordance
   for requests that don't have a local spinner. */

.tt-htmx-progress {
  position: fixed;
  top: 0;
  left: 0;
  width: 0;
  height: 3px;
  background: var(--tt-blue);
  z-index: 1040;
  opacity: 0;
  transition: width 0.3s ease, opacity 0.2s ease;
}
.tt-htmx-progress.is-loading {
  width: 30%;
  opacity: 1;
}
.tt-htmx-progress.is-done {
  width: 100%;
  opacity: 1;
}

/* --- Status / role badges -------------------------------------------------
   Defined per brand spec. Not yet swept into every template that renders a
   status pill — several existing states (Supervisor/Doctor/Front Desk role,
   attendance Late/Early-out, account Active/Inactive/Pending, goal Review/
   Maintenance) have no equivalent in this taxonomy; that mapping is a
   separate, smaller follow-up task. */

.tt-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  font-weight: 600;
  padding: 3px 10px;
  border-radius: 20px;
  font-family: inherit;
}

.tt-badge-published,
.tt-badge-present,
.tt-badge-mastered {
  background: var(--tt-green-tint);
  color: var(--tt-green-dark);
}
.tt-badge-draft,
.tt-badge-partial,
.tt-badge-progress {
  background: var(--tt-amber-tint);
  color: var(--tt-amber-text);
}
.tt-badge-absent,
.tt-badge-not-started {
  background: var(--tt-red-tint);
  color: var(--tt-red-text);
}
.tt-badge-admin {
  background: var(--tt-purple-tint);
  color: var(--tt-purple-text);
}
.tt-badge-teacher {
  background: var(--tt-blue-tint);
  color: var(--tt-blue-dark);
}
.tt-badge-guardian {
  background: var(--tt-green-tint);
  color: var(--tt-green-dark);
}
