/* ═══════════════════════════════════════════════════════════════
   Entity 910 Pages — Extracted inline styles
   Source files listed in section headers
   ═══════════════════════════════════════════════════════════════ */

/* ═══════════════════════════════════════════════════════════════
   BSFA BRAND REBRAND — design tokens + component system
   ───────────────────────────────────────────────────────────────
   This file is loaded globally (every tenant, every page — see
   api/views/layouts.php's shared <head> block), so every rule below
   is nested under .bsfa-theme. That class is added ONLY to entity
   910's own page wrappers (one class per page file) — it never
   appears on another tenant's markup, so none of this can leak into
   NuVida/Active Pharm/Sage & Atlas Law/etc. The shared shell (sidebar
   accent, header gradient) is themed separately via the existing
   per-entity --sa-primary-color/--sa-secondary-color system already
   built into this codebase (Entities.colorDark/colorLight) — see
   atlascm-brand-colors-update.sql. Do not add bare/unscoped selectors
   here (.card, .btn, button, etc.) — always nest under .bsfa-theme.

   Colors/type/spacing pulled from bigskyfootandankle.com's live site
   (computed styles, checked 2026-08-07) — see project memory for the
   full extraction. Rounded rebrand pass 1: tokens + Home + Employee
   Hub. Remaining AtlasCM pages follow in subsequent passes.
   ═══════════════════════════════════════════════════════════════ */

.bsfa-theme {
	/* .sa-cc-kpi-card (entity-admin.css, shared with AtlasCD) reads the
	   platform's generic --sa-primary-color/--sa-secondary-color for its
	   navy gradient -- pointing those at BSFA's own navy/blue here means
	   reusing that shared component still renders in-brand instead of the
	   platform's default muddy brown (#282320). */
	--sa-primary-color: var(--bsfa-navy);
	--sa-secondary-color: var(--bsfa-blue);
	--bsfa-navy:        #0C3560; /* BSFA hero/header navy */
	--bsfa-navy-text:   #0F1E35; /* BSFA body text */
	--bsfa-blue:         #1565C0; /* BSFA primary action blue */
	--bsfa-blue-dark:    #0F4FA0;
	--bsfa-blue-soft:    rgba(21, 101, 192, 0.08);
	--bsfa-blue-soft-2:  rgba(21, 101, 192, 0.14);
	--bsfa-slate:        #3A5470; /* muted icon/secondary color */
	--bsfa-text-muted:   #5B6B7F;
	--bsfa-text-faint:   #8896A6;
	--bsfa-bg-soft:      #F4F8FC; /* alternating soft section bg */
	--bsfa-bg-page:      #FAFBFD;
	--bsfa-border:       #E4EAF2;
	--bsfa-border-soft:  #EDF1F7;
	--bsfa-success:      #1B8A5A;
	--bsfa-success-soft: #E7F6EF;
	--bsfa-warning:      #B7791E;
	--bsfa-warning-soft: #FDF3E2;
	--bsfa-danger:       #C0392B;
	--bsfa-danger-soft:  #FBEAE8;
	--bsfa-info-soft:    #E9F2FC;
	--bsfa-loc-1:        #14b8a6; /* Calendar location-differentiator accent (Bozeman) — categorical, not semantic */
	--bsfa-loc-2:        #a855f7; /* Calendar location-differentiator accent (Butte) */
	--bsfa-radius-sm:    8px;
	--bsfa-radius-md:    14px;
	--bsfa-radius-lg:    20px;
	--bsfa-radius-pill:  999px;
	--bsfa-shadow-xs:    0 1px 2px rgba(15, 30, 53, 0.04);
	--bsfa-shadow-sm:    0 2px 8px rgba(15, 30, 53, 0.05);
	--bsfa-shadow-md:    0 8px 24px rgba(15, 30, 53, 0.07);
	--bsfa-font:         'Inter', system-ui, -apple-system, sans-serif;

	font-family: var(--bsfa-font);
	color: var(--bsfa-navy-text);
	background: var(--bsfa-bg-page);
}
/* Bootstrap's outer .modal element is a full-viewport, normally-transparent
   positioning wrapper around .modal-dialog/.modal-content -- it is NOT the
   visible card. Bootstrap moves the modal to a direct child of <body> when
   it opens, outside the page's own .bsfa-theme-scoped wrapper, so every
   BSFA modal re-applies .bsfa-theme directly on .modal to keep the
   --bsfa-navy/--bsfa-blue/etc. tokens resolving inside it. That
   unintentionally pulled in this file's base .bsfa-theme background rule
   too, painting an opaque page-colored layer over the ENTIRE viewport at a
   z-index above the dimmed .modal-backdrop -- every BSFA modal looked like
   a full separate page instead of a card floating over a dimmed page
   (2026-09-25 design feedback). CSS custom properties still cascade into
   .modal-content fine without a background here -- inheritance doesn't
   depend on this property being set on an ancestor. */
.modal.bsfa-theme { background: transparent; }

/* ── Typography ─────────────────────────────────────────────────── */
.bsfa-theme h1, .bsfa-theme h2, .bsfa-theme h3, .bsfa-theme h4, .bsfa-theme h5, .bsfa-theme h6 {
	font-family: var(--bsfa-font);
	color: var(--bsfa-navy-text);
	letter-spacing: -0.01em;
}
.bsfa-theme .text-muted, .bsfa-theme small.text-muted { color: var(--bsfa-text-muted) !important; }
.bsfa-theme a { color: var(--bsfa-blue); }
.bsfa-theme a:hover { color: var(--bsfa-blue-dark); }

/* ── Page header ────────────────────────────────────────────────── */
/* 2026-10-05: previously a single flex-wrap row containing the title
   column, a width:100% stats block, and the actions buttons. Flex-wrap
   packs items line-by-line, and a width:100% item can never share a line
   with anything else -- so stats always forced a wrap onto their own row,
   which then pushed actions (coming after stats in DOM order) onto a
   THIRD row, floating alone with nothing to its right ("Add Contact"
   reported as sitting in "a weird space" below the KPI cards on
   /entities/910/contacts/, with a cramped-feeling table below it since
   that extra row ate vertical space before reaching real content). Title
   and actions are now a single row via .bsfa-page-header__top below, with
   stats as their own full-width row underneath -- two rows of chrome
   instead of three, and the button sits beside the title where a primary
   action is expected. */
.bsfa-page-header {
	display: flex; flex-direction: column; margin-bottom: 5px;
	box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.1);
	background: #f0f0f0;
	/* padding-inline-start is intentionally NOT set here -- the platform's
	   base .page-header-breadcrumb rule already supplies the correct,
	   sidebar-width-aware value (16.4rem expanded / 6rem collapsed, see
	   styles.css:3800-3816 and :11433-11435), which is real clearance for
	   the fixed, higher-z-index .app-sidebar, not dead space. A flat
	   `1.45rem !important` was tried here 2026-09-28 -- but applied
	   unconditionally, it beat the real sidebar's clearance, hiding the
	   eyebrow/title text and the header avatar behind the sidebar in both
	   its expanded and collapsed states (reported same day on
	   /entities/910/home/). */
}
.bsfa-page-header__top {
	display: flex; align-items: flex-start; justify-content: space-between;
	gap: 1rem; flex-wrap: wrap; width: 100%;
}
.bsfa-page-header__eyebrow {
	font-size: 0.7rem; font-weight: 700; letter-spacing: 0.07em; text-transform: uppercase;
	color: var(--bsfa-blue); margin-bottom: 0.35rem; display: block;
}
.bsfa-page-header__title {
	font-size: 1.6rem; font-weight: 300; color: var(--bsfa-navy-text); margin: 0;
	letter-spacing: -0.02em; line-height: 1.15;
}
/* styles.css:8601 forces .page-header-breadcrumb h4 to white !important,
   assuming a dark header background — our light BSFA header needs to beat
   that with equal !important + higher specificity (3 classes vs their
   attribute+class+element). */
.bsfa-page-header.bsfa-theme .bsfa-page-header__title,
.bsfa-page-header.bsfa-theme h4 {
	color: var(--bsfa-navy-text) !important;
	white-space: normal !important;
	overflow: visible !important;
	text-overflow: clip !important;
}
.bsfa-page-header__desc {
	font-size: 0.85rem; color: var(--bsfa-text-muted); margin-top: 0.35rem; max-width: 56ch;
}
.bsfa-page-header__actions { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.bsfa-page-header__meta { font-size: 0.7rem; color: var(--bsfa-text-faint); }

/* 2026-10-05: standardized, global rule -- a page's primary/secondary
   actions always live in the header's actions slot, right-aligned (the
   flex layout above already does that), and always render at this size.
   Several pages had wired a real action button (Add Staff Profile, Give
   Kudos, etc.) with .btn-sm to match the header's otherwise-small type
   scale, which understated what's usually the single most important
   control on the page -- and a few pages (Staff Directory) hadn't put
   their primary action in this slot at all, burying it down in the KPI
   row instead. This rule forces every button here to the same confident
   size regardless of what size class a given page's markup happens to
   add, so a page can't quietly opt back into "small" -- consistency is
   enforced centrally, not left to each page to remember. */
.bsfa-page-header__actions .btn,
.bsfa-page-header__actions .btn-sm {
	font-size: 0.95rem;
	padding: 0.55rem 1.15rem;
	font-weight: 600;
}

/* 2026-09-25: the header previously had a lot of dead blank space below the
   title on every page while a separate .sa-stat-card row duplicated that
   space between the toolbar/search bar and the table, pushing the table
   further from its own controls. This slot lets a page's KPIs live in the
   header instead, via bsfaRenderPageHeader()'s `statsHtml` +
   bsfaHeaderStatHtml() (api/includes/incl-bsfa-page-header.php), reusing
   the exact same .sa-stat-card/.sa-stats-row markup every other KPI row on
   the site already uses (Employee Hub, Performance Dashboard) so it's
   visually identical everywhere, not a parallel component.
   Tried living beside the title on wide screens first (2026-09-25, same
   day) -- that squeezed the description column narrower, which sometimes
   pushed it to wrap an extra line the header's height wasn't sized for,
   overlapping the content below. Always full-width below the title
   avoids that entirely and gives full-height .sa-stat-card's room to
   render properly instead of a cramped inline chip. */
.bsfa-page-header__stats { width: 100%; margin-top: 0.85rem; }
.bsfa-page-header__stats .sa-stats-row { margin-bottom: 0; }

/* 2026-10-05: companion to the above for bsfaRenderPageHeader()'s
   'statsInline' opt-in (bsfaRenderPageHeaderStats()) -- same cards, placed
   inside .main-content.app-content instead of the header, specifically so
   they scroll away with the rest of the page content. .bsfa-page-header is
   a sibling of .main-content.app-content, not a descendant, so nothing
   inside it can ever be part of that scroll region; moving the KPI row's
   actual DOM location is the only way to make it scroll, not a CSS
   position change. margin-bottom (not -top, unlike the in-header variant
   above) since this sits ABOVE the toolbar/table it now precedes, not
   below a title it used to follow. */
.bsfa-page-header-inline-stats { margin-bottom: 1rem; }
.bsfa-page-header-inline-stats .sa-stats-row { margin-bottom: 0; }

/* Below 991px the base theme's fixed .app-header stops being offset by
   the shared page-header-breadcrumb rule's `top: 4rem` (that value gets
   overridden to 0 in this app's mobile nav-toggled state), so our lighter
   header sits underneath the fixed topbar. Force real clearance instead
   of relying on the shared rule. */
@media (max-width: 991px) {
	.bsfa-page-header.bsfa-theme {
		padding-block-start: 4.5rem !important;
	}
}

/* The header's eyebrow/title/description column and its actions slot are
   plain flex children with no stacking rule — on a phone with 2-3 export
   buttons in the actions slot, the title column gets squeezed into a
   narrow strip alongside them instead of cleanly stacking underneath. */
@media (max-width: 576px) {
	.bsfa-theme .bsfa-page-header__top {
		flex-direction: column;
		align-items: stretch;
	}
	.bsfa-theme .bsfa-page-header__actions {
		justify-content: flex-start;
		width: 100%;
	}
}

/* Tables with 4+ columns and width:100% squeeze every column into an
   unreadable sliver on phones (names wrapping letter-by-letter). Let them
   size naturally and scroll horizontally inside their existing
   .table-responsive wrapper instead. Extended to 991px (tablet portrait) —
   the same DataTables-forced pixel widths squeeze there too, just less
   severely than on a true phone. */
@media (max-width: 991px) {
	.bsfa-theme .table-responsive > table.w-100 { width: auto !important; }
	/* white-space:normal lets the browser "solve" the narrow viewport by
	   wrapping cell text instead of growing the table — which is exactly
	   the letter-by-letter wrapping we're trying to avoid. Force nowrap so
	   the table takes its natural width and overflows into the scroller. */
	.bsfa-theme .table-responsive > table.w-100 td,
	.bsfa-theme .table-responsive > table.w-100 th {
		white-space: nowrap !important;
		word-break: normal !important;
	}
}

/* Header/export .btn-sm buttons and modal-footer buttons compute to ~30px
   tall — under the ~40-44px touch-target floor — on phones. */
@media (max-width: 576px) {
	.bsfa-theme .bsfa-page-header__actions .btn-sm,
	.bsfa-theme .modal-footer .btn-sm {
		min-height: 40px;
		padding: 0.5rem 0.9rem;
	}
}

/* KPI stat-card rows rely on flex-wrap + a 220px min-width with no
   breakpoint of their own between phone (which the platform's own 768px
   rule already stacks to 1-column) and desktop (992px, where the sidebar
   collapses to a hamburger) — so a 4-card row on a tablet-portrait width
   wraps into an awkward "3 cards then 1 lonely full-width card" instead of
   a clean grid. Force 2-up in that gap. */
@media (min-width: 769px) and (max-width: 991px) {
	.bsfa-theme .sa-stat-card {
		flex: 1 1 calc(50% - 0.5rem);
		min-width: calc(50% - 0.5rem);
	}
}

/* ── Cards ──────────────────────────────────────────────────────── */
.bsfa-theme .card.custom-card,
.bsfa-theme .card {
	background: #fff;
	border: 1px solid var(--bsfa-border);
	border-radius: var(--bsfa-radius-md);
	box-shadow: var(--bsfa-shadow-xs);
}
.bsfa-theme .card .card-body { padding: 1.5rem; }
.bsfa-theme .card-title, .bsfa-theme .card-header { color: var(--bsfa-navy-text); font-weight: 600; }

/* ── Stat cards (sa-stat-card, used across AtlasCM KPI rows) ──────── */
/* 2026-09-25 (site owner, three passes): (1) an all-navy-gradient treatment
   read as too heavy/uniform across an 8-card row; (2) a white card with a
   3px top edge + 38px solid icon badge was closer but still read as loose/
   soft, not "modern"; (3) explicitly asked for square corners. Landed here:
   sharp corners throughout (card, icon), a tighter 2px top edge, a smaller
   soft-tint icon square (mirrors --stat-accent instead of a bold solid
   fill -- less "sticker," more like a spec-sheet swatch), an uppercase
   micro-label (the platform default treatment this file used to override
   to sentence-case -- reverted, since a small caps label plus a bold
   number is the tighter, denser "dashboard metric" convention this needed)
   and a bold value instead of the previous thin/oversized one. --stat-
   accent still drives both the top edge and the icon tint from one place. */
.bsfa-theme .sa-stat-card {
	--stat-accent: var(--bsfa-slate);
	position: relative;
	background: #fff;
	border: 1px solid var(--bsfa-border);
	border-top: 2px solid var(--stat-accent);
	border-radius: 0;
	box-shadow: var(--bsfa-shadow-xs);
	padding: 0.85rem 1rem 0.95rem;
}
.bsfa-theme .sa-stat-card--highlight,
.bsfa-theme .sa-stat-card--warning    { --stat-accent: var(--bsfa-warning); } /* --warning is Contacts' "Follow-Ups Due" tile (atlasmps-custom.css); same accent as --highlight since both mean "needs attention" */
.bsfa-theme .sa-stat-card--success   { --stat-accent: var(--bsfa-success); }
.bsfa-theme .sa-stat-card--danger    { --stat-accent: var(--bsfa-danger); }
.bsfa-theme .sa-stat-card--info      { --stat-accent: var(--bsfa-blue); }
.bsfa-theme .sa-stat-card__header { margin-bottom: 0.45rem; }
.bsfa-theme .sa-stat-card__title {
	font-size: 0.68rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase;
	color: var(--bsfa-text-faint); margin: 0;
}
.bsfa-theme .sa-stat-card__icon {
	width: 28px; height: 28px;
	display: flex; align-items: center; justify-content: center;
	color: var(--stat-accent) !important; background: color-mix(in srgb, var(--stat-accent) 14%, #fff) !important;
	border-radius: 0 !important; font-size: 0.85rem; opacity: 1;
}
.bsfa-theme .sa-stat-card__value {
	font-size: 1.6rem; font-weight: 700; color: var(--bsfa-navy-text); line-height: 1.05; margin-top: 0.15rem;
}
.bsfa-theme .sa-stat-card__subtitle { font-size: 0.72rem; color: var(--bsfa-text-muted); margin-top: 0.1rem; }

/* Response-to-interaction lift (the Elevation system's "Response, Not
   Decoration" rule) — a resting card stays at shadow-xs; hover is the
   only place it earns shadow-sm + a 1px rise. */
.bsfa-theme .sa-stat-card {
	transition: transform 0.18s cubic-bezier(0.22, 1, 0.36, 1), box-shadow 0.18s cubic-bezier(0.22, 1, 0.36, 1);
}
.bsfa-theme .sa-stat-card:hover {
	transform: translateY(-2px);
	box-shadow: var(--bsfa-shadow-sm);
}
@media (prefers-reduced-motion: reduce) {
	.bsfa-theme .sa-stat-card { transition: none; }
	.bsfa-theme .sa-stat-card:hover { transform: none; }
}

/* Value row: big number + delta badge side by side, sparkline underneath.
   Cards that don't use these (most existing analytics pages) are unaffected
   — these are additive classes, not changes to the base .sa-stat-card__value. */
.bsfa-theme .sa-stat-card__value-row { display: flex; align-items: baseline; gap: 0.5rem; flex-wrap: wrap; }
.bsfa-theme .atlascm-sparkline-wrap { height: 30px; margin-top: 0.4rem; opacity: 0.9; }
.bsfa-theme .atlascm-delta { display: inline-flex; align-items: center; gap: 0.2rem; font-size: 0.72rem; font-weight: 700; padding: 0.1rem 0.4rem; border-radius: var(--bsfa-radius-pill); }
.bsfa-theme .atlascm-delta--up { background: var(--bsfa-success-soft); color: var(--bsfa-success); }
.bsfa-theme .atlascm-delta--down { background: var(--bsfa-danger-soft); color: var(--bsfa-danger); }
.bsfa-theme .atlascm-delta--flat { background: var(--bsfa-bg-soft); color: var(--bsfa-text-muted); }
.bsfa-theme .atlascm-delta i { font-size: 0.62rem; }

/* Skeleton loading state — a resting shimmer, never a spinner. Applied to
   any block via `.bsfa-skeleton`; sizing comes from the element itself. */
.bsfa-theme .bsfa-skeleton {
	position: relative; overflow: hidden; background: var(--bsfa-bg-soft);
	border-radius: var(--bsfa-radius-sm); color: transparent !important;
}
.bsfa-theme .bsfa-skeleton::after {
	content: ""; position: absolute; inset: 0; transform: translateX(-100%);
	background: linear-gradient(90deg, transparent, rgba(21,101,192,0.09), transparent);
	animation: bsfaShimmer 1.4s ease-in-out infinite;
}
@keyframes bsfaShimmer { 100% { transform: translateX(100%); } }
@media (prefers-reduced-motion: reduce) {
	.bsfa-theme .bsfa-skeleton::after { animation: none; display: none; }
}

/* Staggered entrance for first-paint lists (schedule rows, activity feed,
   staff-on-shift chips) — each item fades/slides in slightly after the
   previous one via inline --i custom property set per-row. */
.bsfa-theme .bsfa-enter {
	animation: bsfaEnter 0.32s cubic-bezier(0.22, 1, 0.36, 1) both;
	animation-delay: calc(var(--i, 0) * 40ms);
}
@keyframes bsfaEnter { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
	.bsfa-theme .bsfa-enter { animation: bsfaEnterReduced 0.01s both; animation-delay: 0ms; }
	@keyframes bsfaEnterReduced { from { opacity: 0; } to { opacity: 1; } }
}

/* ── Buttons ────────────────────────────────────────────────────── */
.bsfa-theme .btn-primary {
	background: var(--bsfa-blue); border-color: var(--bsfa-blue); color: #fff;
	border-radius: var(--bsfa-radius-pill); font-weight: 600; padding: 0.5rem 1.15rem;
	box-shadow: 0 2px 10px rgba(21, 101, 192, 0.25);
}
.bsfa-theme .btn-primary:hover, .bsfa-theme .btn-primary:focus {
	background: var(--bsfa-blue-dark); border-color: var(--bsfa-blue-dark);
	box-shadow: 0 4px 14px rgba(21, 101, 192, 0.32);
}
.bsfa-theme .btn-outline-primary, .bsfa-theme .btn-outline-secondary, .bsfa-theme .btn-light {
	background: #fff; border: 1px solid var(--bsfa-border); color: var(--bsfa-navy-text);
	border-radius: var(--bsfa-radius-pill); font-weight: 600; padding: 0.5rem 1.15rem;
}
.bsfa-theme .btn-outline-primary { color: var(--bsfa-blue); border-color: rgba(21, 101, 192, 0.35); }
.bsfa-theme .btn-outline-primary:hover { background: var(--bsfa-blue-soft); }
.bsfa-theme .btn-outline-secondary:hover, .bsfa-theme .btn-light:hover { background: var(--bsfa-bg-soft); }
.bsfa-theme .btn-outline-danger {
	border-radius: var(--bsfa-radius-pill); font-weight: 600; padding: 0.5rem 1.15rem;
	color: var(--bsfa-danger); border-color: rgba(192, 57, 43, 0.25); background: #fff;
}
.bsfa-theme .btn-outline-danger:hover { background: var(--bsfa-danger-soft); }
/* Raw Bootstrap btn-success/btn-warning predate the rebrand and clash with
   the calm palette — mute them to the brand's semantic success/warning
   tokens rather than converting every call site to a different class. */
.bsfa-theme .btn-success {
	background: var(--bsfa-success); border-color: var(--bsfa-success); color: #fff;
	border-radius: var(--bsfa-radius-pill); font-weight: 600; padding: 0.5rem 1.15rem;
}
.bsfa-theme .btn-success:hover, .bsfa-theme .btn-success:focus {
	background: #156e48; border-color: #156e48;
}
.bsfa-theme .btn-warning {
	background: var(--bsfa-warning); border-color: var(--bsfa-warning); color: #fff;
	border-radius: var(--bsfa-radius-pill); font-weight: 600; padding: 0.5rem 1.15rem;
}
.bsfa-theme .btn-warning:hover, .bsfa-theme .btn-warning:focus {
	background: #96611a; border-color: #96611a;
}
.bsfa-theme .btn-sm { padding: 0.3rem 0.85rem; font-size: 0.78rem; }
.bsfa-theme .btn { transition: all 0.15s ease; }

/* ── Tables ─────────────────────────────────────────────────────── */
.bsfa-theme .table thead th {
	font-size: 0.68rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase;
	color: var(--bsfa-text-faint); border-bottom: 1px solid var(--bsfa-border); background: transparent;
	padding: 0.65rem 0.85rem;
}
.bsfa-theme .table td { padding: 0.75rem 0.85rem; border-bottom: 1px solid var(--bsfa-border-soft); color: var(--bsfa-navy-text); vertical-align: middle; }
.bsfa-theme .table tbody tr:hover { background: var(--bsfa-bg-soft); }
.bsfa-theme .table tbody tr:last-child td { border-bottom: none; }

/* ── Badges / status pills ─────────────────────────────────────── */
.bsfa-theme .badge {
	font-weight: 600; font-size: 0.68rem; letter-spacing: 0.02em; border-radius: var(--bsfa-radius-pill);
	padding: 0.3rem 0.65rem;
}
.bsfa-theme .badge.bg-success-transparent { background: var(--bsfa-success-soft) !important; color: var(--bsfa-success) !important; }
.bsfa-theme .badge.bg-warning-transparent { background: var(--bsfa-warning-soft) !important; color: var(--bsfa-warning) !important; }
.bsfa-theme .badge.bg-danger-transparent  { background: var(--bsfa-danger-soft)  !important; color: var(--bsfa-danger)  !important; }
.bsfa-theme .badge.bg-primary-transparent { background: var(--bsfa-blue-soft)   !important; color: var(--bsfa-blue)    !important; }
.bsfa-theme .badge.bg-secondary-transparent, .bsfa-theme .badge.bg-info-transparent { background: var(--bsfa-info-soft) !important; color: var(--bsfa-slate) !important; }

/* ── Forms ──────────────────────────────────────────────────────── */
.bsfa-theme .form-control, .bsfa-theme .form-select {
	border: 1px solid var(--bsfa-border); border-radius: var(--bsfa-radius-sm);
	padding: 0.55rem 0.85rem; font-size: 0.85rem; color: var(--bsfa-navy-text);
}
.bsfa-theme .form-control:focus, .bsfa-theme .form-select:focus {
	border-color: var(--bsfa-blue); box-shadow: 0 0 0 3px var(--bsfa-blue-soft);
}
.bsfa-theme .form-label { font-size: 0.78rem; font-weight: 600; color: var(--bsfa-navy-text); margin-bottom: 0.35rem; }
.bsfa-theme .form-check-input:checked { background-color: var(--bsfa-blue); border-color: var(--bsfa-blue); }

/* ── File upload drag & drop (global rule, 2026-09-25) ──────────────
   Built by initFileDropZones() in samg-common.js -- every input[type=file]
   across AtlasCM gets wrapped in a .bsfa-dropzone box automatically, no
   page markup changes needed. The native <input> stays inside the box
   unchanged (still a plain .form-control), so this only adds a dashed
   affordance + dragover highlight around it. .bsfa-dropzone-inline is the
   variant used when the underlying input is display:none (Chat's
   paperclip-triggered upload) -- there the highlight is applied to the
   input's own parent bar instead of a dedicated box, since a full dashed
   box doesn't fit that compact layout. */
.bsfa-theme .bsfa-dropzone {
	border: 2px dashed var(--bsfa-border);
	border-radius: var(--bsfa-radius-sm);
	background: var(--bsfa-bg-soft);
	padding: 0.6rem;
	cursor: pointer;
	transition: border-color 0.15s ease, background-color 0.15s ease;
}
.bsfa-theme .bsfa-dropzone .form-control[type="file"] {
	border: none; background: transparent; padding: 0.15rem 0; cursor: pointer;
}
.bsfa-theme .bsfa-dropzone.bsfa-dropzone--over {
	border-color: var(--bsfa-blue);
	border-style: solid;
	background: var(--bsfa-blue-soft-2);
}
.bsfa-theme .bsfa-dropzone-inline {
	border-radius: var(--bsfa-radius-sm);
	transition: box-shadow 0.15s ease, background-color 0.15s ease;
}
.bsfa-theme .bsfa-dropzone-inline.bsfa-dropzone--over {
	box-shadow: 0 0 0 2px var(--bsfa-blue) inset;
	background: var(--bsfa-blue-soft);
}
.bsfa-theme .bsfa-dropzone__msg {
	font-size: 0.72rem; color: var(--bsfa-danger); margin-top: 0.35rem;
}

/* ── Modals ─────────────────────────────────────────────────────── */
/* Platform-wide fix (2026-09-24): only 9 of this Hub's 37 modal-dialog
   instances used Bootstrap's .modal-dialog-centered class, so most modals
   opened top-aligned instead of floating centered -- inconsistent and,
   per the site owner, didn't read as "floating above the page." Centering
   is applied here, globally, to every .bsfa-theme modal at once (mirrors
   Bootstrap's own .modal-dialog-centered implementation) rather than
   editing all 37 modal-dialog divs by hand -- new modals get this for
   free too. Also: assets/css/atlasmps-custom.css has a platform-wide
   `.modal-content { border-radius: 0 !important; }` rule that was
   silently beating this file's own (non-!important) rounded-corner rule
   -- !important added below so AtlasCM's modals actually get their
   intended rounded, elevated "floating card" look instead of flat/square
   corners. */
.bsfa-theme .modal-dialog {
	display: flex;
	align-items: center;
	min-height: calc(100% - 3.5rem);
}
.bsfa-theme .modal-content { border-radius: var(--bsfa-radius-md) !important; border: none; box-shadow: 0 1rem 3rem rgba(0,0,0,0.18); }
.bsfa-theme .modal-header { border-bottom: 1px solid var(--bsfa-border); padding: 1.1rem 1.5rem; }
.bsfa-theme .modal-title { font-weight: 600; font-size: 1.05rem; color: var(--bsfa-navy-text); }
.bsfa-theme .modal-body { padding: 1.5rem; }
.bsfa-theme .modal-footer { border-top: 1px solid var(--bsfa-border); padding: 1rem 1.5rem; }
/* Marked by samg-common.js's shown.bs.modal handler (see that file for why
   this can't be done in pure CSS) -- overrides Bootstrap's own CSS custom
   properties rather than fighting its background/opacity rules directly,
   so the .show fade transition still works exactly as Bootstrap intends. */
.modal-backdrop.sa-bsfa-backdrop { --bs-backdrop-bg: #0a1628; --bs-backdrop-opacity: 0.65; }

/* ── Tabs / pills ───────────────────────────────────────────────── */
.bsfa-theme .nav-tabs { border-bottom: 1px solid var(--bsfa-border); }
.bsfa-theme .nav-tabs .nav-link {
	border: none; color: var(--bsfa-text-muted); font-weight: 600; font-size: 0.85rem;
	padding: 0.6rem 0.25rem; margin-right: 1.5rem; border-radius: 0;
}
.bsfa-theme .nav-tabs .nav-link.active {
	color: var(--bsfa-blue); border-bottom: 2px solid var(--bsfa-blue); background: transparent;
}

/* ── Empty states ───────────────────────────────────────────────── */
/* 2026-09-25: this component existed but nothing on the site actually used
   it yet — every "No X yet" empty state across AtlasCM was a bare
   .text-muted one-liner with no visual treatment (flagged in the UI-polish
   pass). Extended with an optional icon square (sharp corners, matching
   .sa-stat-card__icon's language, not the older 50%-circle
   .so-cart-empty-icon) + title/text slots, and rolled out to the plainest
   empty states on the least-recently-touched pages (Locations, Onboarding,
   Recognition, Forms Center, PTO, Facilities) plus Home/Referrals/Tasks.
   Markup: <div class="bsfa-empty-state"><div class="bsfa-empty-state__icon">
   <i class="lni lni-..."></i></div><div class="bsfa-empty-state__title">...
   </div><div class="bsfa-empty-state__text">...</div></div> — title is
   optional for a one-line message. */
.bsfa-theme .bsfa-empty-state {
	text-align: center; padding: 2.5rem 1.5rem; color: var(--bsfa-text-muted); font-size: 0.85rem;
}
.bsfa-theme .bsfa-empty-state__icon {
	width: 40px; height: 40px; margin: 0 auto 0.85rem;
	display: flex; align-items: center; justify-content: center;
	background: var(--bsfa-bg-soft); color: var(--bsfa-text-faint);
	border-radius: 0; font-size: 1.05rem;
}
.bsfa-theme .bsfa-empty-state__title {
	font-weight: 600; color: var(--bsfa-navy-text); font-size: 0.9rem; margin-bottom: 0.2rem;
}
.bsfa-theme .bsfa-empty-state__text { color: var(--bsfa-text-muted); font-size: 0.82rem; max-width: 42ch; margin: 0 auto; }

/* ── KPI card grid rhythm ───────────────────────────────────────── */
.bsfa-theme .sa-stats-row { gap: 1rem !important; }

/* Home's KPI strip has 7-8 .sa-cc-kpi-card tiles -- entity-admin.css's
   shared .sa-cc-kpi-row sets a 200px-per-card floor (auto-fit,
   minmax(200px,1fr)), tuned for AtlasCD's 5-card row, which forces 7-8
   cards to wrap onto two lines well before running out of real width
   (per the site owner: should fit on one line). Lowering the floor to
   140px is the fix -- still auto-fit, so it still collapses gracefully on
   narrow/mobile widths on its own, just allows more columns before that
   happens on a normal desktop width. */
.bsfa-theme .sa-cc-kpi-row {
	grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
	gap: 0.75rem;
}
.bsfa-theme .sa-cc-kpi-card .sa-kpi-card__inner { padding: 0.85rem 0.9rem 0.7rem; }
.bsfa-theme .sa-cc-kpi-card .sa-kpi-card__label { font-size: 0.62rem; }
.bsfa-theme .sa-cc-kpi-card .sa-kpi-card__value { font-size: 1.2rem; }
.bsfa-theme .sa-cc-kpi-card .sa-kpi-card__icon { width: 32px; height: 32px; font-size: 0.8rem; }

/* ── atlascm.css's separate warm-beige component system (filter bar,
   stat cards, chips) — used by Financial/Clinical/Payer/Provider
   Performance/RCM dashboards. Unified to the same brand tokens instead
   of running two different palettes side by side. ────────────────── */
.bsfa-theme .atlascm-filterbar {
	border-color: var(--bsfa-border); box-shadow: var(--bsfa-shadow-xs);
}
.bsfa-theme .atlascm-filterbar .atlascm-field label { color: var(--bsfa-text-faint); }
.bsfa-theme .atlascm-filterbar .atlascm-preset { background: var(--bsfa-bg-soft); color: var(--bsfa-text-muted); }
.bsfa-theme .atlascm-filterbar .atlascm-preset:hover { background: var(--bsfa-blue-soft); color: var(--bsfa-blue); }
.bsfa-theme .atlascm-filterbar .atlascm-preset.is-active { background: var(--bsfa-blue); border-color: var(--bsfa-blue); }

.bsfa-theme .atlascm-chip { background: var(--bsfa-blue-soft); color: var(--bsfa-blue); }
.bsfa-theme .atlascm-chip--date { background: var(--bsfa-info-soft); color: var(--bsfa-slate); }
.bsfa-theme .atlascm-chip--provider { background: var(--bsfa-blue-soft); color: var(--bsfa-blue); }
.bsfa-theme .atlascm-chip--location { background: var(--bsfa-success-soft); color: var(--bsfa-success); }

.bsfa-theme .atlascm-delta--up   { background: var(--bsfa-success-soft); color: var(--bsfa-success); }
.bsfa-theme .atlascm-delta--down { background: var(--bsfa-danger-soft); color: var(--bsfa-danger); }
.bsfa-theme .atlascm-delta--flat { background: var(--bsfa-bg-soft); color: var(--bsfa-text-muted); }

.bsfa-theme .atlascm-stat {
	border-color: var(--bsfa-border); box-shadow: var(--bsfa-shadow-xs); border-radius: var(--bsfa-radius-md);
}
.bsfa-theme .atlascm-stat__icon,
.bsfa-theme .atlascm-stat__icon--green, .bsfa-theme .atlascm-stat__icon--blue,
.bsfa-theme .atlascm-stat__icon--amber, .bsfa-theme .atlascm-stat__icon--red, .bsfa-theme .atlascm-stat__icon--purple {
	background: var(--bsfa-blue-soft) !important; color: var(--bsfa-blue);
}
.bsfa-theme .atlascm-stat__label { color: var(--bsfa-text-faint); }
.bsfa-theme .atlascm-stat__value { color: var(--bsfa-navy-text); }
.bsfa-theme .atlascm-stat__sub { color: var(--bsfa-text-muted); }

.bsfa-theme .atlascm-dt-wrap table.dataTable thead th { background: transparent; color: var(--bsfa-text-faint); border-bottom-color: var(--bsfa-border); }
.bsfa-theme .atlascm-dt-wrap table.dataTable tbody tr:hover { background: var(--bsfa-bg-soft); }

/* === 910/calendar/index.php === */
/* ========== BSFA Calendar styles — migrated onto --bsfa-* tokens 2026-08-10 ==========
   Previously ran a parallel raw-hex palette (teal/purple accents, #305E6C brand
   color) entirely independent of the rest of AtlasCM. Retokenized so this is
   visually the same system as every other page, not a separately-designed one. */
.bsfa-theme .bsfa-cal-wrap { font-size: 0.85rem; }
.bsfa-theme .bsfa-cal-toolbar {
    display:flex; flex-wrap:wrap; gap:0.75rem; align-items:center; justify-content:space-between;
    padding:0.9rem 1.1rem; background:#fff; border:1px solid var(--bsfa-border); border-radius:var(--bsfa-radius-md);
    box-shadow:var(--bsfa-shadow-xs); margin-bottom:0.85rem;
}
.bsfa-theme .bsfa-cal-title { font-size:1.15rem; font-weight:700; color:var(--bsfa-navy-text); margin:0; }
.bsfa-theme .bsfa-cal-subtitle { font-size:0.78rem; color:var(--bsfa-text-muted); margin-top:2px; }
.bsfa-theme .bsfa-cal-nav-btn {
    border:1px solid var(--bsfa-border); background:#fff; color:var(--bsfa-navy-text); height:34px; min-width:34px;
    padding:0 0.75rem; border-radius:var(--bsfa-radius-sm); font-size:0.8rem; font-weight:600;
    display:inline-flex; align-items:center; justify-content:center; cursor:pointer;
    transition:all 0.15s;
}
.bsfa-theme .bsfa-cal-nav-btn:hover { background:var(--bsfa-bg-soft); border-color:var(--bsfa-border); }
.bsfa-theme .bsfa-cal-nav-group { display:inline-flex; gap:0.4rem; align-items:center; }
.bsfa-theme .bsfa-cal-range-label { font-weight:600; color:var(--bsfa-navy-text); font-size:0.9rem; min-width:200px; text-align:center; }

.bsfa-theme .bsfa-cal-pills { display:inline-flex; background:var(--bsfa-bg-soft); border-radius:10px; padding:3px; gap:2px; }
.bsfa-theme .bsfa-cal-pill {
    border:none; background:transparent; color:var(--bsfa-text-muted); padding:6px 14px; border-radius:var(--bsfa-radius-sm);
    font-size:0.78rem; font-weight:600; cursor:pointer; transition:all 0.15s;
}
.bsfa-theme .bsfa-cal-pill:hover { color:var(--bsfa-navy-text); }
.bsfa-theme .bsfa-cal-pill.active { background:#fff; color:var(--bsfa-blue); box-shadow:var(--bsfa-shadow-xs); }

.bsfa-theme .bsfa-cal-filter-bar {
    display:flex; flex-wrap:wrap; gap:1.25rem; align-items:center;
    padding:0.85rem 1.1rem; background:#fff; border:1px solid var(--bsfa-border); border-radius:var(--bsfa-radius-md);
    box-shadow:var(--bsfa-shadow-xs); margin-bottom:0.85rem;
}
.bsfa-theme .bsfa-cal-filter-group { display:flex; align-items:center; gap:0.5rem; }
.bsfa-theme .bsfa-cal-filter-label { font-size:0.7rem; font-weight:700; color:var(--bsfa-text-faint); text-transform:uppercase; letter-spacing:0.05em; }

.bsfa-theme .bsfa-cal-stats { display:grid; grid-template-columns:repeat(4,1fr); gap:0.75rem; margin-bottom:0.85rem; }
.bsfa-theme .bsfa-cal-stat {
    background:#fff; border:1px solid var(--bsfa-border); border-radius:var(--bsfa-radius-md); padding:0.95rem 1.1rem;
    display:flex; align-items:center; gap:0.85rem; box-shadow:var(--bsfa-shadow-xs);
    transition:transform 0.15s, box-shadow 0.15s;
}
.bsfa-theme .bsfa-cal-stat:hover { transform:translateY(-1px); box-shadow:var(--bsfa-shadow-sm); }
.bsfa-theme .bsfa-cal-stat__icon {
    width:42px; height:42px; border-radius:var(--bsfa-radius-sm); display:flex; align-items:center; justify-content:center;
    font-size:1rem; flex-shrink:0; background:var(--bsfa-blue-soft); color:var(--bsfa-blue);
}
.bsfa-theme .bsfa-cal-stat__label { font-size:0.7rem; font-weight:700; color:var(--bsfa-text-faint); text-transform:uppercase; letter-spacing:0.05em; }
.bsfa-theme .bsfa-cal-stat__value { font-size:1.45rem; font-weight:300; color:var(--bsfa-navy-text); line-height:1.1; margin-top:2px; }

/* Calendar grid container */
.bsfa-theme .bsfa-cal-board {
    background:#fff; border:1px solid var(--bsfa-border); border-radius:var(--bsfa-radius-md); overflow:hidden;
    box-shadow:var(--bsfa-shadow-xs);
}

/* WEEK / DAY view grid */
.bsfa-theme .bsfa-cal-grid {
    display:grid; max-height:72vh; overflow:auto; scroll-behavior:smooth;
    background:#fff;
}
.bsfa-theme .bsfa-cal-grid__head {
    display:contents;
}
.bsfa-theme .bsfa-cal-day-head {
    position:sticky; top:0; z-index:5; background:#fff;
    border-bottom:2px solid var(--bsfa-border); border-left:1px solid var(--bsfa-border-soft);
    padding:0.55rem 0.5rem; text-align:center;
}
.bsfa-theme .bsfa-cal-day-head--today { background:linear-gradient(180deg, var(--bsfa-blue-soft) 0%, #fff 100%); }
.bsfa-theme .bsfa-cal-day-head__dow { font-size:0.68rem; font-weight:700; color:var(--bsfa-text-faint); text-transform:uppercase; letter-spacing:0.05em; }
.bsfa-theme .bsfa-cal-day-head__date { font-size:1.05rem; font-weight:700; color:var(--bsfa-navy-text); line-height:1.2; }
.bsfa-theme .bsfa-cal-day-head--today .bsfa-cal-day-head__date {
    display:inline-flex; align-items:center; justify-content:center;
    width:30px; height:30px; border-radius:50%; background:var(--bsfa-blue); color:#fff;
}
.bsfa-theme .bsfa-cal-prov-head {
    position:sticky; top:0; z-index:4; background:var(--bsfa-bg-soft);
    border-bottom:1px solid var(--bsfa-border); border-left:1px solid var(--bsfa-border-soft);
    padding:5px 4px; text-align:center; font-size:0.65rem; font-weight:700; color:var(--bsfa-slate);
}
.bsfa-theme .bsfa-cal-time-col-head {
    position:sticky; top:0; left:0; z-index:6; background:#fff;
    border-bottom:2px solid var(--bsfa-border); border-right:1px solid var(--bsfa-border);
}
.bsfa-theme .bsfa-cal-time-cell {
    position:sticky; left:0; z-index:3; background:#fff;
    border-right:1px solid var(--bsfa-border); border-top:1px solid var(--bsfa-border-soft);
    padding:2px 8px 0 0; font-size:0.68rem; color:var(--bsfa-text-faint); text-align:right; font-weight:600;
    height:36px;
}
.bsfa-theme .bsfa-cal-slot {
    border-left:1px solid var(--bsfa-border-soft); border-top:1px solid var(--bsfa-border-soft);
    height:36px; position:relative;
}
.bsfa-theme .bsfa-cal-slot--today { background:var(--bsfa-blue-soft); }

.bsfa-theme .bsfa-cal-appt {
    position:absolute; left:3px; right:3px; top:2px;
    background:var(--bsfa-blue); color:#fff; border-radius:6px; padding:4px 6px;
    font-size:0.7rem; line-height:1.15; cursor:pointer; overflow:hidden;
    border-left:3px solid var(--bsfa-loc-1);
    box-shadow:var(--bsfa-shadow-xs);
    transition:all 0.15s; z-index:2;
}
.bsfa-theme .bsfa-cal-appt:hover {
    transform:translateY(-1px); box-shadow:var(--bsfa-shadow-sm); z-index:3;
}
.bsfa-theme .bsfa-cal-appt__time { font-weight:700; font-size:0.66rem; opacity:0.9; }
.bsfa-theme .bsfa-cal-appt__name { font-weight:700; font-size:0.74rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.bsfa-theme .bsfa-cal-appt__type { font-size:0.66rem; opacity:0.92; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

.bsfa-theme .bsfa-cal-appt[data-status="Booked"]    { background:var(--bsfa-blue); }
.bsfa-theme .bsfa-cal-appt[data-status="Arrived"]   { background:var(--bsfa-warning); }
.bsfa-theme .bsfa-cal-appt[data-status="Completed"] { background:var(--bsfa-success); }
.bsfa-theme .bsfa-cal-appt[data-status="No-Show"]   { background:var(--bsfa-danger); }
.bsfa-theme .bsfa-cal-appt[data-status="Cancelled"] { background:var(--bsfa-text-faint); }
.bsfa-theme .bsfa-cal-appt[data-loc="bozeman"] { border-left-color:var(--bsfa-loc-1); }
.bsfa-theme .bsfa-cal-appt[data-loc="butte"]   { border-left-color:var(--bsfa-loc-2); }

/* MONTH view */
.bsfa-theme .bsfa-cal-month {
    display:grid; grid-template-columns:repeat(7,1fr); background:var(--bsfa-border); gap:1px;
    border:1px solid var(--bsfa-border);
}
.bsfa-theme .bsfa-cal-month__dow {
    background:var(--bsfa-bg-soft); padding:8px; text-align:center;
    font-size:0.68rem; font-weight:700; color:var(--bsfa-text-muted); text-transform:uppercase; letter-spacing:0.05em;
}
.bsfa-theme .bsfa-cal-month__cell {
    background:#fff; min-height:115px; padding:6px 7px; cursor:pointer;
    position:relative; transition:background 0.12s;
}
.bsfa-theme .bsfa-cal-month__cell:hover { background:var(--bsfa-bg-soft); }
.bsfa-theme .bsfa-cal-month__cell--other { background:var(--bsfa-bg-page); color:var(--bsfa-border); }
.bsfa-theme .bsfa-cal-month__cell--today { box-shadow:inset 0 0 0 2px var(--bsfa-blue); }
.bsfa-theme .bsfa-cal-month__date { font-weight:700; font-size:0.82rem; color:var(--bsfa-navy-text); }
.bsfa-theme .bsfa-cal-month__cell--other .bsfa-cal-month__date { color:var(--bsfa-border); }
.bsfa-theme .bsfa-cal-month__chip {
    display:block; font-size:0.65rem; padding:2px 5px; border-radius:4px;
    color:#fff; margin-top:3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
    font-weight:600;
}
.bsfa-theme .bsfa-cal-month__more { font-size:0.62rem; color:var(--bsfa-text-muted); margin-top:3px; font-weight:600; }
.bsfa-theme .bsfa-cal-month__dot {
    position:absolute; bottom:5px; right:7px; width:6px; height:6px; border-radius:50%; background:var(--bsfa-blue);
}

/* Sidebar */
.bsfa-theme .bsfa-cal-side-card {
    background:#fff; border:1px solid var(--bsfa-border); border-radius:var(--bsfa-radius-md); padding:1rem 1.1rem;
    margin-bottom:0.85rem; box-shadow:var(--bsfa-shadow-xs);
}
.bsfa-theme .bsfa-cal-side-title {
    font-size:0.7rem; font-weight:700; color:var(--bsfa-text-faint); text-transform:uppercase; letter-spacing:0.05em;
    margin-bottom:0.7rem;
}
.bsfa-theme .bsfa-cal-side-row {
    display:flex; align-items:center; gap:0.6rem; padding:0.55rem 0;
    border-top:1px solid var(--bsfa-border-soft); font-size:0.78rem;
}
.bsfa-theme .bsfa-cal-side-row:first-of-type { border-top:none; }
.bsfa-theme .bsfa-cal-side-dot { width:8px; height:8px; border-radius:50%; flex-shrink:0; }

/* Empty state */
.bsfa-theme .bsfa-cal-empty {
    padding:3rem 1rem; text-align:center; color:var(--bsfa-text-muted);
}
.bsfa-theme .bsfa-cal-empty i { font-size:2.5rem; color:var(--bsfa-border); margin-bottom:0.75rem; display:block; }

/* Modal */
.bsfa-theme .bsfa-cal-modal-backdrop {
    position:fixed; inset:0; background:rgba(15,30,53,0.5); z-index:9998;
    display:none; align-items:center; justify-content:center; padding:1rem;
    backdrop-filter:blur(2px);
}
.bsfa-theme .bsfa-cal-modal-backdrop.show { display:flex; }
.bsfa-theme .bsfa-cal-modal {
    background:#fff; border-radius:var(--bsfa-radius-md); max-width:460px; width:100%;
    box-shadow:var(--bsfa-shadow-md); overflow:hidden;
    animation:bsfaCalPop 0.18s cubic-bezier(0.22, 1, 0.36, 1);
}
@keyframes bsfaCalPop {
    from { transform:scale(0.94); opacity:0; }
    to   { transform:scale(1); opacity:1; }
}
@media (prefers-reduced-motion: reduce) {
    .bsfa-theme .bsfa-cal-modal { animation: none; }
}
.bsfa-theme .bsfa-cal-modal__header {
    padding:1.1rem 1.3rem; color:#fff; position:relative;
    background: linear-gradient(135deg, var(--bsfa-navy) 0%, var(--bsfa-blue) 100%);
}
.bsfa-theme .bsfa-cal-modal__close {
    position:absolute; top:12px; right:14px; background:rgba(255,255,255,0.2);
    border:none; color:#fff; width:28px; height:28px; border-radius:50%; cursor:pointer;
    font-size:0.85rem;
}
.bsfa-theme .bsfa-cal-modal__close:hover { background:rgba(255,255,255,0.3); }
.bsfa-theme .bsfa-cal-modal__name { font-size:1.2rem; font-weight:700; margin:0; }
.bsfa-theme .bsfa-cal-modal__meta { font-size:0.78rem; opacity:0.9; margin-top:3px; }
.bsfa-theme .bsfa-cal-modal__body { padding:1.1rem 1.3rem; }
.bsfa-theme .bsfa-cal-modal__row { display:flex; align-items:flex-start; gap:0.7rem; padding:0.55rem 0; border-top:1px solid var(--bsfa-border-soft); font-size:0.85rem; }
.bsfa-theme .bsfa-cal-modal__row:first-child { border-top:none; padding-top:0; }
.bsfa-theme .bsfa-cal-modal__row i { color:var(--bsfa-text-faint); width:18px; text-align:center; margin-top:2px; }
.bsfa-theme .bsfa-cal-modal__row strong { color:var(--bsfa-navy-text); }
.bsfa-theme .bsfa-cal-modal__footer { padding:0.85rem 1.3rem; background:var(--bsfa-bg-soft); display:flex; gap:0.5rem; justify-content:flex-end; }
.bsfa-theme .bsfa-cal-modal__btn {
    padding:8px 16px; border-radius:var(--bsfa-radius-pill); border:none; font-size:0.8rem; font-weight:600; cursor:pointer;
}
.bsfa-theme .bsfa-cal-modal__btn--primary { background:var(--bsfa-blue); color:#fff; }
.bsfa-theme .bsfa-cal-modal__btn--primary:hover { background:var(--bsfa-blue-dark); }
.bsfa-theme .bsfa-cal-modal__btn--ghost { background:#fff; border:1px solid var(--bsfa-border); color:var(--bsfa-navy-text); }

@media (max-width: 992px) {
    .bsfa-theme .bsfa-cal-stats { grid-template-columns:repeat(2,1fr); }
}
@media (max-width: 768px) {
    .bsfa-theme .bsfa-cal-toolbar, .bsfa-theme .bsfa-cal-filter-bar { flex-direction:column; align-items:stretch; }
    .bsfa-theme .bsfa-cal-stats { grid-template-columns:1fr 1fr; }

    /* Calendar grid: taller slots for touch, scrollable */
    .bsfa-theme .bsfa-cal-grid { max-height: 65vh; -webkit-overflow-scrolling: touch; }
    .bsfa-theme .bsfa-cal-slot { height: 44px; }
    .bsfa-theme .bsfa-cal-time-cell { height: 44px; font-size: 0.62rem; }

    /* Appointment cards: larger for touch */
    .bsfa-theme .bsfa-cal-appt { font-size: 0.68rem; padding: 5px 6px; min-height: 36px; }
    .bsfa-theme .bsfa-cal-appt__name { font-size: 0.72rem; }

    /* Nav buttons: 44px touch target */
    .bsfa-theme .bsfa-cal-nav-btn { height: 44px; min-width: 44px; }

    /* View pills: bigger touch target */
    .bsfa-theme .bsfa-cal-pill { padding: 8px 14px; font-size: 0.78rem; min-height: 36px; }

    /* Filter bar: stack, full width */
    .bsfa-theme .bsfa-cal-filter-group { width: 100%; }
    .bsfa-theme .bsfa-cal-range-label { min-width: auto; font-size: 0.82rem; }

    /* Location/Provider/Status pill rows can hold dozens of options —
       let them scroll horizontally instead of wrapping each pill's text
       onto multiple lines. */
    .bsfa-theme .bsfa-cal-pills {
        display: flex;
        max-width: 100%;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }
    .bsfa-theme .bsfa-cal-pills::-webkit-scrollbar { display: none; }
    .bsfa-theme .bsfa-cal-pill { white-space: nowrap; flex-shrink: 0; }

    /* Month view: smaller cells */
    .bsfa-theme .bsfa-cal-month__cell { min-height: 80px; padding: 4px 5px; }
    .bsfa-theme .bsfa-cal-month__chip { font-size: 0.6rem; padding: 2px 4px; }

    /* Stat cards: compact */
    .bsfa-theme .bsfa-cal-stat { padding: 0.75rem 0.85rem; gap: 0.6rem; }
    .bsfa-theme .bsfa-cal-stat__icon { width: 34px; height: 34px; font-size: 0.85rem; }
    .bsfa-theme .bsfa-cal-stat__value { font-size: 1.15rem; }

    /* Modal: full width on tablet */
    .bsfa-theme .bsfa-cal-modal { max-width: 95vw; }
    .bsfa-theme .bsfa-cal-modal__close { width: 36px; height: 36px; }
}

@media (max-width: 576px) {
    .bsfa-theme .bsfa-cal-stats { grid-template-columns: 1fr; gap: 0.5rem; }
    .bsfa-theme .bsfa-cal-stat { padding: 0.625rem 0.75rem; }
    .bsfa-theme .bsfa-cal-stat__value { font-size: 1rem; }
    .bsfa-theme .bsfa-cal-stat__icon { width: 30px; height: 30px; }

    /* Calendar grid: more compact on phone */
    .bsfa-theme .bsfa-cal-grid { max-height: 60vh; }
    .bsfa-theme .bsfa-cal-day-head { padding: 0.4rem 0.25rem; }
    .bsfa-theme .bsfa-cal-day-head__dow { font-size: 0.6rem; }
    .bsfa-theme .bsfa-cal-day-head__date { font-size: 0.9rem; }
    .bsfa-theme .bsfa-cal-prov-head { font-size: 0.58rem; padding: 4px 2px; }

    /* Month view: ultra-compact */
    .bsfa-theme .bsfa-cal-month__cell { min-height: 60px; padding: 3px 4px; }
    .bsfa-theme .bsfa-cal-month__date { font-size: 0.72rem; }
    .bsfa-theme .bsfa-cal-month__chip { font-size: 0.55rem; padding: 1px 3px; }
    .bsfa-theme .bsfa-cal-month__dow { font-size: 0.6rem; padding: 5px; }

    /* Toolbar: tighter */
    .bsfa-theme .bsfa-cal-toolbar { padding: 0.625rem 0.75rem; gap: 0.5rem; border-radius: var(--bsfa-radius-sm); }
    .bsfa-theme .bsfa-cal-title { font-size: 0.95rem; }
    .bsfa-theme .bsfa-cal-filter-bar { padding: 0.625rem 0.75rem; gap: 0.625rem; border-radius: var(--bsfa-radius-sm); }

    /* Side cards: compact */
    .bsfa-theme .bsfa-cal-side-card { padding: 0.75rem 0.85rem; border-radius: var(--bsfa-radius-sm); }

    /* Modal: near full screen on phone */
    .bsfa-theme .bsfa-cal-modal { max-width: 100%; border-radius: 0; }
    .bsfa-theme .bsfa-cal-modal-backdrop { padding: 0; }
    .bsfa-theme .bsfa-cal-modal__body { padding: 0.875rem 1rem; }
    .bsfa-theme .bsfa-cal-modal__footer { padding: 0.75rem 1rem; }
    .bsfa-theme .bsfa-cal-modal__btn { min-height: 44px; padding: 10px 18px; }
}

/* === 910/patient-center/patient-profile-modal.php === */
/* ── BSFA Patient Profile Modal Styles — migrated onto --bsfa-* tokens 2026-08-10 ──
   Previously ran its own raw-hex blue palette (#1e3a8a/#2563eb/#38bdf8) independent
   of the rest of AtlasCM, plus a banned side-stripe accent on the coverage card
   (DESIGN.md's "no border-left as a colored accent" rule) — both fixed here. */
.bsfa-theme #bsfaPatientProfileModal .modal-dialog { max-width: 1200px; }
.bsfa-theme #bsfaPatientProfileModal .modal-content { border: 0; border-radius: var(--bsfa-radius-md); overflow: hidden; box-shadow: var(--bsfa-shadow-md); }
.bsfa-theme #bsfaPatientProfileModal .modal-header {
	background: linear-gradient(135deg, var(--bsfa-navy) 0%, var(--bsfa-blue) 100%);
	color: #fff;
	padding: 1.1rem 1.5rem;
	border: 0;
}
.bsfa-theme #bsfaPatientProfileModal .modal-header .modal-title { font-weight: 600; font-size: 1.15rem; letter-spacing: 0.2px; }
.bsfa-theme #bsfaPatientProfileModal .modal-header .btn-close { filter: invert(1) brightness(2); opacity: 0.9; }
.bsfa-theme #bsfaPatientProfileModal .modal-body { padding: 0; background: var(--bsfa-bg-soft); }
.bsfa-theme #bsfaPatientProfileModal .modal-footer { background: #ffffff; border-top: 1px solid var(--bsfa-border); padding: 0.75rem 1.25rem; }

.bsfa-theme .bsfa-pp-shell { display: flex; min-height: 600px; }
.bsfa-theme .bsfa-pp-sidebar {
	width: 220px;
	background: #ffffff;
	border-right: 1px solid var(--bsfa-border);
	padding: 1rem 0.5rem;
	flex-shrink: 0;
}
.bsfa-theme .bsfa-pp-nav-item {
	display: flex;
	align-items: center;
	gap: 0.65rem;
	padding: 0.65rem 0.85rem;
	font-size: 0.85rem;
	font-weight: 500;
	color: var(--bsfa-text-muted);
	border-radius: var(--bsfa-radius-sm);
	cursor: pointer;
	margin-bottom: 0.15rem;
	transition: all 0.15s ease;
}
.bsfa-theme .bsfa-pp-nav-item i { width: 18px; text-align: center; color: var(--bsfa-text-faint); }
.bsfa-theme .bsfa-pp-nav-item:hover { background: var(--bsfa-bg-soft); color: var(--bsfa-navy-text); }
.bsfa-theme .bsfa-pp-nav-item.active {
	background: linear-gradient(135deg, var(--bsfa-navy) 0%, var(--bsfa-blue) 100%);
	color: #fff;
}
.bsfa-theme .bsfa-pp-nav-item.active i { color: #fff; }

.bsfa-theme .bsfa-pp-content {
	flex: 1;
	padding: 1.5rem 1.75rem;
	overflow-y: auto;
	max-height: 75vh;
}

/* Overview grid */
.bsfa-theme .bsfa-pp-overview-grid {
	display: grid;
	grid-template-columns: 280px 1fr;
	gap: 1.25rem;
	margin-bottom: 1rem;
}
.bsfa-theme .bsfa-pp-headshot-card {
	background: #fff;
	border: 1px solid var(--bsfa-border);
	border-radius: var(--bsfa-radius-md);
	padding: 1.25rem;
	text-align: center;
}
.bsfa-theme .bsfa-pp-headshot {
	width: 130px; height: 130px; border-radius: 50%;
	background: linear-gradient(135deg, var(--bsfa-navy) 0%, var(--bsfa-blue) 100%);
	color: #fff;
	font-size: 2.5rem;
	font-weight: 600;
	display: flex; align-items: center; justify-content: center;
	margin: 0 auto 0.85rem;
	box-shadow: 0 8px 24px rgba(21, 101, 192, 0.25);
}
.bsfa-theme .bsfa-pp-headshot-name { font-size: 1.05rem; font-weight: 600; color: var(--bsfa-navy-text); }
.bsfa-theme .bsfa-pp-headshot-meta { font-size: 0.75rem; color: var(--bsfa-text-muted); margin: 0.35rem 0 0.75rem; line-height: 1.55; }
.bsfa-theme .bsfa-pp-headshot-contact { font-size: 0.78rem; color: var(--bsfa-slate); text-align: left; border-top: 1px solid var(--bsfa-border); padding-top: 0.75rem; line-height: 1.85; }
.bsfa-theme .bsfa-pp-headshot-contact i { width: 14px; color: var(--bsfa-text-faint); margin-right: 6px; }

/* KPI cards */
.bsfa-theme .bsfa-pp-kpi-grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 0.85rem;
}
.bsfa-theme .bsfa-pp-stat-card {
	background: #fff;
	border: 1px solid var(--bsfa-border);
	border-radius: var(--bsfa-radius-sm);
	padding: 0.95rem 1.1rem;
	display: flex;
	align-items: center;
	gap: 0.85rem;
}
.bsfa-theme .bsfa-pp-stat-icon {
	width: 44px; height: 44px;
	border-radius: var(--bsfa-radius-sm);
	display: flex; align-items: center; justify-content: center;
	font-size: 1.05rem;
	flex-shrink: 0;
}
.bsfa-theme .bsfa-pp-stat-label { font-size: 0.7rem; color: var(--bsfa-text-muted); text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; }
.bsfa-theme .bsfa-pp-stat-value { font-size: 1.35rem; font-weight: 300; color: var(--bsfa-navy-text); line-height: 1.2; }
.bsfa-theme .bsfa-pp-stat-value.bsfa-pp-stat-sm { font-size: 0.95rem; }

/* Info cards */
.bsfa-theme .bsfa-pp-info-card {
	background: #fff;
	border: 1px solid var(--bsfa-border);
	border-radius: var(--bsfa-radius-sm);
	padding: 1rem 1.15rem;
}
.bsfa-theme .bsfa-pp-info-title {
	font-size: 0.72rem;
	text-transform: uppercase;
	letter-spacing: 0.6px;
	font-weight: 700;
	color: var(--bsfa-text-muted);
	margin-bottom: 0.5rem;
}
.bsfa-theme .bsfa-pp-info-body { color: var(--bsfa-navy-text); font-size: 0.95rem; }
.bsfa-theme .bsfa-pp-kv {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	font-size: 0.82rem;
	padding: 0.35rem 0;
	border-bottom: 1px dashed var(--bsfa-border-soft);
}
.bsfa-theme .bsfa-pp-kv:last-child { border-bottom: 0; }
.bsfa-theme .bsfa-pp-kv span { color: var(--bsfa-text-muted); }
.bsfa-theme .bsfa-pp-kv strong { color: var(--bsfa-navy-text); font-weight: 600; text-align: right; }

/* Section title */
.bsfa-theme .bsfa-pp-section-title {
	font-size: 0.85rem;
	font-weight: 700;
	color: var(--bsfa-navy-text);
	text-transform: uppercase;
	letter-spacing: 0.5px;
	margin-bottom: 0.65rem;
	display: flex;
	align-items: center;
	gap: 0.5rem;
}
.bsfa-theme .bsfa-pp-count-pill {
	background: var(--bsfa-blue-soft);
	color: var(--bsfa-blue);
	font-size: 0.7rem;
	font-weight: 600;
	padding: 0.15rem 0.5rem;
	border-radius: var(--bsfa-radius-pill);
	text-transform: none;
	letter-spacing: 0;
}

/* Tables */
.bsfa-theme .bsfa-pp-table {
	font-size: 0.82rem;
	background: #fff;
	border: 1px solid var(--bsfa-border);
	border-radius: var(--bsfa-radius-sm);
	overflow: hidden;
	margin-bottom: 0;
}
.bsfa-theme .bsfa-pp-table thead th {
	background: var(--bsfa-bg-soft);
	border-bottom: 1px solid var(--bsfa-border);
	font-size: 0.7rem;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	color: var(--bsfa-text-muted);
	font-weight: 700;
	padding: 0.65rem 0.85rem;
}
.bsfa-theme .bsfa-pp-table tbody td { padding: 0.7rem 0.85rem; vertical-align: middle; border-top: 1px solid var(--bsfa-border-soft); }
.bsfa-theme .bsfa-pp-table tbody tr:hover { background: var(--bsfa-bg-soft); }

/* Code chips */
.bsfa-theme .bsfa-pp-icd, .bsfa-theme .bsfa-pp-cpt {
	display: inline-block;
	background: var(--bsfa-bg-soft);
	color: var(--bsfa-navy-text);
	font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
	font-size: 0.72rem;
	padding: 0.15rem 0.45rem;
	border-radius: var(--bsfa-radius-sm);
	font-weight: 600;
}
.bsfa-theme .bsfa-pp-cpt { background: var(--bsfa-warning-soft); color: var(--bsfa-warning); }

/* Badges */
.bsfa-theme .bsfa-pp-badge {
	display: inline-block;
	padding: 0.2rem 0.55rem;
	font-size: 0.7rem;
	font-weight: 600;
	border-radius: var(--bsfa-radius-pill);
	letter-spacing: 0.2px;
}

/* Coverage cards — was a border-left accent stripe (banned pattern per DESIGN.md);
   replaced with a full-border tint, same signal without the stripe. */
.bsfa-theme .bsfa-pp-coverage-card { background: var(--bsfa-blue-soft); border-color: var(--bsfa-blue-soft-2); }
.bsfa-theme .bsfa-pp-coverage-payer { font-size: 1rem; font-weight: 700; color: var(--bsfa-navy-text); }
.bsfa-theme .bsfa-pp-coverage-plan { font-size: 0.82rem; color: var(--bsfa-text-muted); }

/* Appointment cards */
.bsfa-theme .bsfa-pp-appt-card {
	background: #fff;
	border: 1px solid var(--bsfa-border);
	border-radius: var(--bsfa-radius-sm);
	padding: 0.9rem;
	display: flex;
	gap: 0.85rem;
	align-items: center;
}
.bsfa-theme .bsfa-pp-appt-date {
	background: linear-gradient(135deg, var(--bsfa-navy), var(--bsfa-blue));
	color: #fff;
	border-radius: var(--bsfa-radius-sm);
	width: 60px; height: 60px;
	display: flex; flex-direction: column; align-items: center; justify-content: center;
	flex-shrink: 0;
}
.bsfa-theme .bsfa-pp-appt-month { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.5px; opacity: 0.85; }
.bsfa-theme .bsfa-pp-appt-day { font-size: 1.4rem; font-weight: 700; line-height: 1; }
.bsfa-theme .bsfa-pp-appt-time { font-size: 0.8rem; color: var(--bsfa-text-muted); }
.bsfa-theme .bsfa-pp-appt-type { font-size: 0.92rem; color: var(--bsfa-navy-text); }

/* Aging bar */
.bsfa-theme .bsfa-pp-aging-bar {
	height: 22px;
	display: flex;
	border-radius: 6px;
	overflow: hidden;
	background: var(--bsfa-bg-soft);
	margin-bottom: 0.5rem;
}
.bsfa-theme .bsfa-pp-aging-bar > div { height: 100%; }
.bsfa-theme .bsfa-pp-aging-legend { font-size: 0.75rem; color: var(--bsfa-text-muted); display: flex; align-items: center; gap: 0.4rem; }
.bsfa-theme .bsfa-pp-aging-legend span { width: 10px; height: 10px; border-radius: 2px; display: inline-block; }

/* Filter pills */
.bsfa-theme .bsfa-pp-filter-pill {
	background: var(--bsfa-bg-soft);
	color: var(--bsfa-text-muted);
	font-size: 0.75rem;
	font-weight: 500;
	padding: 0.35rem 0.85rem;
	border-radius: var(--bsfa-radius-pill);
	cursor: pointer;
	border: 1px solid transparent;
	transition: all 0.15s;
}
.bsfa-theme .bsfa-pp-filter-pill:hover { background: var(--bsfa-border-soft); }
.bsfa-theme .bsfa-pp-filter-pill.active { background: var(--bsfa-blue); color: #fff; }

@media (max-width: 768px) {
	.bsfa-theme .bsfa-pp-shell { flex-direction: column; min-height: auto; }
	.bsfa-theme .bsfa-pp-sidebar { width: 100%; display: flex; overflow-x: auto; padding: 0.5rem; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
	.bsfa-theme .bsfa-pp-sidebar::-webkit-scrollbar { display: none; }
	.bsfa-theme .bsfa-pp-overview-grid { grid-template-columns: 1fr; }
	.bsfa-theme .bsfa-pp-kpi-grid { grid-template-columns: 1fr; }
	.bsfa-theme .bsfa-pp-nav-item { white-space: nowrap; min-height: 44px; display: flex; align-items: center; }
}

@media (max-width: 576px) {
	.bsfa-theme #bsfaPatientProfileModal .modal-dialog { margin: 0; max-width: 100%; }
	.bsfa-theme #bsfaPatientProfileModal .modal-content { border-radius: 0; min-height: 100vh; }
	.bsfa-theme .bsfa-pp-content { padding: 0.75rem; }
	.bsfa-theme .bsfa-pp-filter-pill { padding: 0.3rem 0.625rem; font-size: 0.7rem; min-height: 32px; }
}

/* === 910/staff-directory/staff-profile-modal.php === */
/* 2026-09-25: was a plain white modal-header + flat 2-col field grid --
   the site owner pointed at the AtlasCD Patient Profile modal as the bar
   to hit. Reuses the same .bsfa-dp-hero/-avatar/-kpi-grid classes below
   (already built for the retired Doctor Profile modal, already
   dark-mode-styled) rather than inventing a parallel system. */
.bsfa-theme #bsfaStaffProfileModal .modal-content { border:none; border-radius:var(--bsfa-radius-md); overflow:hidden; }
.bsfa-theme #bsfaStaffProfileModal .modal-header {
	background: linear-gradient(135deg, var(--bsfa-navy) 0%, var(--bsfa-blue) 100%);
	color: #fff; border:none; padding: 1.1rem 1.5rem;
}
.bsfa-theme #bsfaStaffProfileModal .modal-header .btn-close { filter: brightness(0) invert(1); opacity:0.8; }
.bsfa-theme #bsfaStaffProfileModal .modal-title { font-weight:600; font-size:1.15rem; }
.bsfa-theme #bsfaStaffProfileModal .modal-body { padding:0; background:var(--bsfa-bg-soft); }
.bsfa-theme #bsfaStaffProfileModal .modal-footer { background:#fff; border-top:1px solid var(--bsfa-border); }

/* === 910/provider-performance/doctor-profile-modal.php === */
/* ── BSFA Doctor Profile (bsfa-dp) — migrated onto --bsfa-* tokens 2026-08-10 ──
   Previously ran a THIRD independent raw-hex navy (#30428b/#1e3a8a, different
   again from the patient-profile-modal's own #1e3a8a/#2563eb) and a different
   active-nav-item convention (border-left) than its twin patient-profile
   modal (gradient background). Retokenized + unified to the same pattern. */
.bsfa-theme #bsfaDoctorProfileModal .modal-content { border:none; border-radius:var(--bsfa-radius-md); overflow:hidden; }
.bsfa-theme #bsfaDoctorProfileModal .modal-header {
	background: linear-gradient(135deg, var(--bsfa-navy) 0%, var(--bsfa-blue) 100%);
	color: #fff; border:none; padding: 1.1rem 1.5rem;
}
.bsfa-theme #bsfaDoctorProfileModal .modal-header .btn-close { filter: brightness(0) invert(1); opacity:0.8; }
.bsfa-theme #bsfaDoctorProfileModal .modal-title { font-weight:600; font-size:1.15rem; display:flex; align-items:center; gap:0.6rem; }
.bsfa-theme #bsfaDoctorProfileModal .modal-title i { font-size:1rem; opacity:0.85; }
.bsfa-theme #bsfaDoctorProfileModal .modal-body { padding:0; background:var(--bsfa-bg-soft); }
.bsfa-theme #bsfaDoctorProfileModal .modal-footer { background:#fff; border-top:1px solid var(--bsfa-border); }

.bsfa-theme .bsfa-dp-layout { display:flex; min-height: 560px; }
.bsfa-theme .bsfa-dp-sidebar {
	width: 220px; background:#fff; border-right:1px solid var(--bsfa-border);
	padding: 1rem 0; flex-shrink:0;
}
.bsfa-theme .bsfa-dp-nav-item {
	display:flex; align-items:center; gap:0.7rem;
	padding: 0.75rem 1.25rem; cursor:pointer;
	color:var(--bsfa-text-muted); font-size:0.88rem; font-weight:500;
	transition: background 0.15s, color 0.15s;
}
.bsfa-theme .bsfa-dp-nav-item i { width: 18px; text-align:center; font-size:0.95rem; }
.bsfa-theme .bsfa-dp-nav-item:hover { background:var(--bsfa-bg-soft); color:var(--bsfa-navy-text); }
.bsfa-theme .bsfa-dp-nav-item.active {
	background: linear-gradient(135deg, var(--bsfa-navy) 0%, var(--bsfa-blue) 100%);
	color:#fff; font-weight:600;
}
.bsfa-theme .bsfa-dp-content { flex:1; padding: 1.5rem; overflow-y:auto; max-height: 75vh; }

/* Hero */
.bsfa-theme .bsfa-dp-hero {
	display:flex; gap:1.5rem; align-items:center;
	background:#fff; padding:1.5rem; border-radius:var(--bsfa-radius-md);
	border:1px solid var(--bsfa-border); margin-bottom:1.25rem;
}
.bsfa-theme .bsfa-dp-avatar {
	width:130px; height:130px; border-radius:50%;
	background: linear-gradient(135deg, var(--bsfa-navy), var(--bsfa-blue));
	color:#fff; display:flex; align-items:center; justify-content:center;
	font-size:2.6rem; font-weight:600; flex-shrink:0;
	box-shadow: 0 6px 20px rgba(21,101,192,0.25);
}
.bsfa-theme .bsfa-dp-hero-info { flex:1; min-width:0; }
.bsfa-theme .bsfa-dp-hero-name { margin:0 0 0.4rem 0; color:var(--bsfa-navy-text); font-weight:600; font-size:1.4rem; }
.bsfa-theme .bsfa-dp-specialty-badge {
	display:inline-flex; align-items:center; gap:0.45rem;
	padding:0.3rem 0.7rem; background:var(--bsfa-blue-soft); color:var(--bsfa-blue);
	border-radius:var(--bsfa-radius-pill); font-size:0.78rem; font-weight:600;
	margin-bottom:0.85rem;
}
.bsfa-theme .bsfa-dp-meta-grid {
	display:grid; grid-template-columns: repeat(2, minmax(0,1fr));
	gap: 0.45rem 1.5rem; font-size:0.8rem; color:var(--bsfa-text-muted);
}
.bsfa-theme .bsfa-dp-meta-grid > div { display:flex; align-items:center; gap:0.5rem; }
.bsfa-theme .bsfa-dp-meta-grid i { color:var(--bsfa-text-faint); width:14px; text-align:center; }

/* KPI grid */
.bsfa-theme .bsfa-dp-kpi-grid {
	display:grid; grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 0.85rem; margin-bottom: 1.25rem;
}
.bsfa-theme .bsfa-dp-kpi {
	background:#fff; border:1px solid var(--bsfa-border); border-radius:var(--bsfa-radius-sm);
	padding: 0.95rem 1.1rem;
}
.bsfa-theme .bsfa-dp-kpi-label { font-size:0.72rem; text-transform:uppercase; color:var(--bsfa-text-faint); font-weight:600; letter-spacing:0.04em; }
.bsfa-theme .bsfa-dp-kpi-value { font-size:1.55rem; font-weight:300; color:var(--bsfa-navy-text); margin: 0.2rem 0 0.1rem 0; }
.bsfa-theme .bsfa-dp-kpi-sub { font-size:0.72rem; color:var(--bsfa-text-muted); }

/* Comparison */
.bsfa-theme .bsfa-dp-section-title { color:var(--bsfa-navy-text); font-size:0.95rem; font-weight:600; margin: 0.5rem 0 0.75rem 0; }
.bsfa-theme .bsfa-dp-cmp-grid { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 0.85rem; }
.bsfa-theme .bsfa-dp-cmp { background:#fff; border:1px solid var(--bsfa-border); border-radius:var(--bsfa-radius-sm); padding:0.9rem 1.1rem; }
.bsfa-theme .bsfa-dp-cmp-label { font-size:0.72rem; text-transform:uppercase; color:var(--bsfa-text-faint); font-weight:600; }
.bsfa-theme .bsfa-dp-cmp-vals { margin: 0.35rem 0; font-size:0.92rem; color:var(--bsfa-navy-text); }
.bsfa-theme .bsfa-dp-cmp-doctor { font-weight:600; font-size:1.15rem; }
.bsfa-theme .bsfa-dp-cmp-vs { color:var(--bsfa-text-faint); margin: 0 0.4rem; font-size:0.78rem; }
.bsfa-theme .bsfa-dp-cmp-practice { color:var(--bsfa-text-muted); }
.bsfa-theme .bsfa-dp-cmp-delta { font-size:0.82rem; font-weight:600; }

/* Tab headers */
.bsfa-theme .bsfa-dp-tab-header { display:flex; align-items:center; justify-content:space-between; margin-bottom: 0.85rem; }
.bsfa-theme .bsfa-dp-tab-header h5 { margin:0; font-size:1rem; font-weight:600; color:var(--bsfa-navy-text); }
.bsfa-theme .bsfa-dp-pill { background:var(--bsfa-blue-soft); color:var(--bsfa-blue); padding:0.25rem 0.65rem; border-radius:var(--bsfa-radius-pill); font-size:0.72rem; font-weight:600; }

/* Provider name link in performance summary */
.bsfa-theme .bsfa-dp-name-link { color:var(--bsfa-blue); cursor:pointer; text-decoration:none; }
.bsfa-theme .bsfa-dp-name-link:hover { text-decoration:underline; color:var(--bsfa-blue-dark); }

@media (max-width: 768px) {
	.bsfa-theme .bsfa-dp-layout { flex-direction:column; min-height: auto; }
	.bsfa-theme .bsfa-dp-sidebar { width:100%; display:flex; overflow-x:auto; padding:0.5rem; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
	.bsfa-theme .bsfa-dp-sidebar::-webkit-scrollbar { display: none; }
	.bsfa-theme .bsfa-dp-nav-item { white-space:nowrap; min-height: 44px; }
	.bsfa-theme .bsfa-dp-kpi-grid, .bsfa-theme .bsfa-dp-cmp-grid { grid-template-columns: 1fr 1fr; }
	.bsfa-theme .bsfa-dp-meta-grid { grid-template-columns: 1fr; }
	.bsfa-theme .bsfa-dp-hero { flex-direction:column; text-align:center; }
	.bsfa-theme .bsfa-dp-avatar { width: 90px; height: 90px; font-size: 2rem; }
	.bsfa-theme .bsfa-dp-content { padding: 1rem; max-height: none; }
}

@media (max-width: 576px) {
	.bsfa-theme #bsfaDoctorProfileModal .modal-dialog { margin: 0; max-width: 100%; }
	.bsfa-theme #bsfaDoctorProfileModal .modal-content { border-radius: 0; min-height: 100vh; }
	.bsfa-theme .bsfa-dp-kpi-grid { grid-template-columns: 1fr; }
	.bsfa-theme .bsfa-dp-cmp-grid { grid-template-columns: 1fr; }
	.bsfa-theme .bsfa-dp-avatar { width: 70px; height: 70px; font-size: 1.6rem; }
	.bsfa-theme .bsfa-dp-hero-name { font-size: 1.1rem; }
	.bsfa-theme .bsfa-dp-kpi-value { font-size: 1.25rem; }
	.bsfa-theme .bsfa-dp-content { padding: 0.75rem; }
}

/* === 910/supply-ordering/index.php === */
/* ── Supply Ordering Page Styles — migrated onto --bsfa-* tokens 2026-08-10 ──── */
.bsfa-theme .so-cat-tab { border: none; background: var(--bsfa-bg-soft); color: var(--bsfa-text-muted); font-size: 0.78rem; font-weight: 600; padding: 0.4rem 1rem; border-radius: var(--bsfa-radius-pill); cursor: pointer; transition: all 0.15s; white-space: nowrap; }
.bsfa-theme .so-cat-tab:hover { background: var(--bsfa-border-soft); color: var(--bsfa-navy-text); }
.bsfa-theme .so-cat-tab.active { background: var(--bsfa-blue); color: #fff; }

.bsfa-theme .so-product-card { border: 1px solid var(--bsfa-border); border-radius: var(--bsfa-radius-sm); overflow: hidden; transition: all 0.2s; background: #fff; height: 100%; display: flex; flex-direction: column; }
.bsfa-theme .so-product-card:hover { border-color: var(--bsfa-blue-soft-2); box-shadow: var(--bsfa-shadow-sm); transform: translateY(-2px); }
.bsfa-theme .so-product-img { width: 100%; height: 140px; background: var(--bsfa-bg-soft); display: flex; align-items: center; justify-content: center; overflow: hidden; border-bottom: 1px solid var(--bsfa-border-soft); }
.bsfa-theme .so-product-img img { max-width: 100%; max-height: 140px; object-fit: contain; padding: 12px; }
.bsfa-theme .so-product-img .so-icon-fallback { font-size: 2.2rem; opacity: 0.2; }
.bsfa-theme .so-product-body { padding: 0.85rem; flex: 1; display: flex; flex-direction: column; }
.bsfa-theme .so-product-cat { font-size: 0.65rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; margin-bottom: 0.3rem; }
.bsfa-theme .so-product-name { font-size: 0.82rem; font-weight: 600; line-height: 1.35; color: var(--bsfa-navy-text); margin-bottom: 0.25rem; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.bsfa-theme .so-product-brand { font-size: 0.72rem; color: var(--bsfa-text-faint); margin-bottom: auto; padding-bottom: 0.5rem; }
.bsfa-theme .so-product-footer { display: flex; align-items: center; justify-content: space-between; padding-top: 0.5rem; border-top: 1px solid var(--bsfa-border-soft); }
.bsfa-theme .so-product-price { font-size: 1.05rem; font-weight: 700; color: var(--bsfa-navy-text); }
.bsfa-theme .so-product-meta { font-size: 0.65rem; color: var(--bsfa-text-faint); }
.bsfa-theme .so-product-actions { padding: 0 0.85rem 0.85rem; }
.bsfa-theme .so-add-btn { width: 100%; border: none; background: var(--bsfa-blue); color: #fff; font-size: 0.78rem; font-weight: 600; padding: 0.5rem; border-radius: var(--bsfa-radius-sm); cursor: pointer; transition: all 0.15s; display: flex; align-items: center; justify-content: center; gap: 0.4rem; }
.bsfa-theme .so-add-btn:hover { background: var(--bsfa-blue-dark); transform: scale(1.01); }
.bsfa-theme .so-vendor-link { font-size: 0.68rem; color: var(--bsfa-text-faint); text-decoration: none; transition: color 0.15s; }
.bsfa-theme .so-vendor-link:hover { color: var(--bsfa-blue); }

/* Quick Reorder star toggle (One-Tap Reorder) */
.bsfa-theme .so-fav-btn { width: 34px; height: 34px; padding: 0; flex-shrink: 0; display: flex; align-items: center; justify-content: center; border: 1px solid var(--bsfa-border); border-radius: 0.375rem; background: #fff; color: var(--bsfa-text-muted); cursor: pointer; transition: all 0.15s; }
.bsfa-theme .so-fav-btn:hover { border-color: #F0B429; color: #F0B429; }
.bsfa-theme .so-fav-btn.active { background: #FEF6E7; border-color: #F0B429; color: #F0B429; }

.bsfa-theme .so-cart-empty { text-align: center; padding: 2.5rem 1rem; }
.bsfa-theme .so-cart-empty-icon { width: 64px; height: 64px; border-radius: 50%; background: var(--bsfa-bg-soft); display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; }
.bsfa-theme .so-cart-empty-icon i { font-size: 1.5rem; color: var(--bsfa-border); }

.bsfa-theme .so-search-wrap { position: relative; }
.bsfa-theme .so-search-wrap .lni-search-1 { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--bsfa-text-faint); font-size: 0.8rem; pointer-events: none; }
.bsfa-theme .so-search-input { padding-left: 36px; border-radius: var(--bsfa-radius-pill); border: 1px solid var(--bsfa-border); font-size: 0.82rem; height: 36px; transition: border-color 0.15s; }
.bsfa-theme .so-search-input:focus { border-color: var(--bsfa-blue); box-shadow: 0 0 0 3px var(--bsfa-blue-soft); }

.bsfa-theme .so-catalog-count { font-size: 0.75rem; color: var(--bsfa-text-faint); font-weight: 500; }

/* === 910/home/index.php === */
/* ── Page-header avatar (real headshot or initials fallback) ─────── */
.bsfa-theme .bsfa-home-avatar-img,
.bsfa-theme .bsfa-home-avatar-fallback {
	width: 68px; height: 68px; border-radius: 50%; flex-shrink: 0;
}
.bsfa-theme .bsfa-home-avatar-img { object-fit: cover; border: 2px solid var(--bsfa-blue-soft); }
.bsfa-theme .bsfa-home-avatar-fallback {
	display: flex; align-items: center; justify-content: center;
	background: linear-gradient(135deg, var(--bsfa-navy), var(--bsfa-blue));
	color: #fff; font-weight: 700; font-size: 1.3rem; letter-spacing: 0.02em;
}
@media (max-width: 576px) {
	.bsfa-theme .bsfa-home-avatar-img, .bsfa-theme .bsfa-home-avatar-fallback { width: 52px; height: 52px; font-size: 1rem; }
}

/* ── Needs Attention panel ─────────────────────────────────────── */
.bsfa-theme .bsfa-attn-list { display: flex; flex-direction: column; }
.bsfa-theme .bsfa-attn-item {
	display: flex; align-items: center; gap: 0.75rem; padding: 0.7rem 0.25rem;
	border-bottom: 1px solid var(--bsfa-border-soft); text-decoration: none; transition: background 0.15s;
}
.bsfa-theme .bsfa-attn-item:last-child { border-bottom: none; }
.bsfa-theme .bsfa-attn-item:hover { background: var(--bsfa-bg-soft); }
.bsfa-theme .bsfa-attn-icon {
	width: 34px; height: 34px; border-radius: var(--bsfa-radius-sm); flex-shrink: 0;
	display: flex; align-items: center; justify-content: center; font-size: 0.9rem;
}
.bsfa-theme .bsfa-attn-icon--danger { background: var(--bsfa-danger-soft); color: var(--bsfa-danger); }
.bsfa-theme .bsfa-attn-icon--warning { background: var(--bsfa-warning-soft); color: var(--bsfa-warning); }
.bsfa-theme .bsfa-attn-label { font-size: 0.85rem; font-weight: 600; color: var(--bsfa-navy-text); flex: 1; }
.bsfa-theme .bsfa-attn-chevron { color: var(--bsfa-border); font-size: 0.7rem; }
.bsfa-theme .bsfa-attn-empty {
	display: flex; align-items: center; gap: 0.6rem; padding: 0.85rem 0.25rem;
	color: var(--bsfa-success); font-size: 0.85rem; font-weight: 600;
}
.bsfa-theme .bsfa-attn-empty i { font-size: 1.1rem; }

/* ── Today's Schedule rows ─────────────────────────────────────── */
.bsfa-theme .bsfa-sched-row {
	display: flex; align-items: center; gap: 0.75rem; padding: 0.6rem 0.25rem;
	border-bottom: 1px solid var(--bsfa-border-soft); transition: background 0.15s;
}
.bsfa-theme .bsfa-sched-row:last-child { border-bottom: none; }
.bsfa-theme .bsfa-sched-row:hover { background: var(--bsfa-bg-soft); }
.bsfa-theme .bsfa-sched-time { font-size: 0.78rem; font-weight: 700; color: var(--bsfa-text-muted); width: 62px; flex-shrink: 0; white-space: nowrap; }
.bsfa-theme .bsfa-sched-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
.bsfa-theme .bsfa-sched-main { flex: 1; min-width: 0; }
.bsfa-theme .bsfa-sched-patient { font-size: 0.85rem; font-weight: 600; color: var(--bsfa-navy-text); }
.bsfa-theme .bsfa-sched-meta { font-size: 0.72rem; color: var(--bsfa-text-faint); }
.bsfa-theme .bsfa-sched-status {
	display: inline-flex; align-items: center; gap: 0.3rem; font-size: 0.68rem; font-weight: 700;
	padding: 0.25rem 0.55rem; border-radius: var(--bsfa-radius-pill); flex-shrink: 0; white-space: nowrap;
}
.bsfa-theme .bsfa-sched-status--completed { background: var(--bsfa-success-soft); color: var(--bsfa-success); }
.bsfa-theme .bsfa-sched-status--checkedin { background: var(--bsfa-info-soft); color: var(--bsfa-slate); }
.bsfa-theme .bsfa-sched-status--inprogress { background: var(--bsfa-blue-soft); color: var(--bsfa-blue); }
.bsfa-theme .bsfa-sched-status--noshow { background: var(--bsfa-danger-soft); color: var(--bsfa-danger); }
.bsfa-theme .bsfa-sched-status--scheduled { background: var(--bsfa-bg-soft); color: var(--bsfa-text-muted); }

/* ── Staff on Shift ─────────────────────────────────────────────── */
.bsfa-theme .bsfa-shift-list { display: flex; flex-direction: column; }
.bsfa-theme .bsfa-shift-row { display: flex; align-items: center; gap: 0.65rem; padding: 0.55rem 0.25rem; border-bottom: 1px solid var(--bsfa-border-soft); }
.bsfa-theme .bsfa-shift-row:last-child { border-bottom: none; }
.bsfa-theme .bsfa-shift-avatar {
	position: relative; width: 34px; height: 34px; border-radius: 50%; background: var(--bsfa-blue-soft);
	color: var(--bsfa-blue); display: flex; align-items: center; justify-content: center;
	font-size: 0.72rem; font-weight: 700; flex-shrink: 0;
}
.bsfa-theme .bsfa-shift-dot {
	position: absolute; bottom: -1px; right: -1px; width: 9px; height: 9px; border-radius: 50%;
	background: var(--bsfa-success); border: 2px solid #fff;
}
.bsfa-theme .bsfa-shift-dot::after {
	content: ""; position: absolute; inset: 0; border-radius: 50%; background: var(--bsfa-success);
	animation: bsfaPulse 2s ease-out infinite;
}
@keyframes bsfaPulse { 0% { opacity: 0.7; transform: scale(1); } 100% { opacity: 0; transform: scale(2.2); } }
@media (prefers-reduced-motion: reduce) { .bsfa-theme .bsfa-shift-dot::after { animation: none; display: none; } }
.bsfa-theme .bsfa-shift-name { font-size: 0.82rem; font-weight: 600; color: var(--bsfa-navy-text); }
.bsfa-theme .bsfa-shift-since { font-size: 0.7rem; color: var(--bsfa-text-faint); }
.bsfa-theme .bsfa-shift-empty { text-align: center; padding: 1.25rem 0.5rem; color: var(--bsfa-text-muted); font-size: 0.82rem; }

/* ── Activity feed ──────────────────────────────────────────────── */
.bsfa-theme .bsfa-activity-list { display: flex; flex-direction: column; }
.bsfa-theme .bsfa-activity-row { display: flex; align-items: flex-start; gap: 0.65rem; padding: 0.55rem 0.25rem; border-bottom: 1px solid var(--bsfa-border-soft); }
.bsfa-theme .bsfa-activity-row:last-child { border-bottom: none; }
.bsfa-theme .bsfa-activity-icon {
	width: 28px; height: 28px; border-radius: 50%; background: var(--bsfa-bg-soft); color: var(--bsfa-slate);
	display: flex; align-items: center; justify-content: center; font-size: 0.7rem; flex-shrink: 0; margin-top: 0.1rem;
}
.bsfa-theme .bsfa-activity-text { font-size: 0.82rem; color: var(--bsfa-navy-text); line-height: 1.4; }
.bsfa-theme .bsfa-activity-time { font-size: 0.68rem; color: var(--bsfa-text-faint); margin-top: 0.1rem; }
.bsfa-theme .bsfa-activity-empty { text-align: center; padding: 1.25rem 0.5rem; color: var(--bsfa-text-muted); font-size: 0.82rem; }

/* ── Quick Navigation — compact icon grid (demoted from a tall list) ──── */
.bsfa-theme .bsfa-qn-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 0.6rem; padding: 1.1rem; }
.bsfa-theme .bsfa-qn-section-label {
	grid-column: 1 / -1; font-size: 0.62rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.07em;
	color: var(--bsfa-text-faint); margin: 0.4rem 0 0.1rem; padding-top: 0.5rem; border-top: 1px solid var(--bsfa-border-soft);
}
.bsfa-theme .bsfa-qn-section-label:first-child { border-top: none; padding-top: 0; margin-top: 0; }
.bsfa-theme .bsfa-qn-tile {
	display: flex; align-items: center; gap: 0.6rem; padding: 0.6rem 0.7rem; border-radius: var(--bsfa-radius-sm);
	text-decoration: none; transition: background 0.15s, transform 0.15s; border: 1px solid transparent;
}
.bsfa-theme .bsfa-qn-tile:hover { background: var(--bsfa-bg-soft); border-color: var(--bsfa-border-soft); transform: translateY(-1px); }
@media (prefers-reduced-motion: reduce) { .bsfa-theme .bsfa-qn-tile:hover { transform: none; } }
.bsfa-theme .bsfa-qn-tile-icon {
	width: 32px; height: 32px; border-radius: var(--bsfa-radius-sm); background: var(--bsfa-blue-soft); color: var(--bsfa-blue);
	display: flex; align-items: center; justify-content: center; font-size: 0.82rem; flex-shrink: 0;
}
.bsfa-theme .bsfa-qn-tile-label { font-size: 0.8rem; font-weight: 600; color: var(--bsfa-navy-text); line-height: 1.25; }

/* ── Collapsed ModMed sync-status disclosure ───────────────────────── */
.bsfa-theme .bsfa-home-details summary { cursor: pointer; list-style: none; }
.bsfa-theme .bsfa-home-details summary::-webkit-details-marker { display: none; }
.bsfa-theme .bsfa-home-details summary .lni-chevron-down { transition: transform 0.15s; }
.bsfa-theme .bsfa-home-details[open] summary .lni-chevron-down { transform: rotate(180deg); }

@media (max-width: 576px) {
	.bsfa-theme .bsfa-qn-grid { grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); padding: 0.85rem; }
	.bsfa-theme .bsfa-sched-time { width: 52px; font-size: 0.72rem; }
}

/* ─── Dark mode ────────────────────────────────────────────── */
/* Calendar toolbar + filter bar */
[data-theme-mode="dark"] .bsfa-cal-toolbar,
[data-theme-mode="dark"] .bsfa-cal-filter-bar,
[data-theme-mode="dark"] .bsfa-cal-stats .bsfa-cal-stat {
	background: #202020 !important;
	border-color: #303030 !important;
}
[data-theme-mode="dark"] .bsfa-cal-title,
[data-theme-mode="dark"] .bsfa-cal-range-label { color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-cal-subtitle { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-cal-nav-btn {
	background: #202020 !important;
	border-color: #303030 !important;
	color: #C8C8C8 !important;
}
[data-theme-mode="dark"] .bsfa-cal-nav-btn:hover {
	background: #222222 !important;
	border-color: #3E3E3E !important;
}
[data-theme-mode="dark"] .bsfa-cal-pills {
	background: #1A1A1A !important;
}
[data-theme-mode="dark"] .bsfa-cal-pill { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-cal-pill.active {
	background: #202020 !important;
	color: #E8E8E8 !important;
	box-shadow: 0 1px 3px rgba(0,0,0,0.3) !important;
}
[data-theme-mode="dark"] .bsfa-cal-stat__label { color: #AAAAAA !important; }
/* Calendar grid */
[data-theme-mode="dark"] .bsfa-cal-grid-wrap,
[data-theme-mode="dark"] .bsfa-cal-week-wrap {
	background: #202020 !important;
	border-color: #303030 !important;
}
[data-theme-mode="dark"] .bsfa-cal-day-head {
	background: #202020 !important;
}
[data-theme-mode="dark"] .bsfa-cal-time-col-head,
[data-theme-mode="dark"] .bsfa-cal-time-cell,
[data-theme-mode="dark"] .bsfa-cal-board,
[data-theme-mode="dark"] .bsfa-cal-grid {
	background: #202020 !important;
	border-color: #303030 !important;
}
[data-theme-mode="dark"] .bsfa-cal-month__head {
	background: #222222 !important;
}
[data-theme-mode="dark"] .bsfa-cal-month__cell {
	background: #202020 !important;
}
[data-theme-mode="dark"] .bsfa-cal-month__cell:hover { background: #222222 !important; }
[data-theme-mode="dark"] .bsfa-cal-month__cell--other { background: #1A1A1A !important; color: #737373 !important; }
/* Patient profile modal */
[data-theme-mode="dark"] #bsfaPatientProfileModal .modal-body { background: #171717 !important; }
[data-theme-mode="dark"] #bsfaPatientProfileModal .modal-footer {
	background: #202020 !important;
	border-top-color: #303030 !important;
}
[data-theme-mode="dark"] .bsfa-pp-sidebar { background: #1A1A1A !important; }
[data-theme-mode="dark"] .bsfa-pp-nav-item { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-pp-nav-item:hover { background: #222222 !important; color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-cal-modal__footer {
	background: #222222 !important;
	border-top-color: #303030 !important;
}
/* Calendar appointment modal */
[data-theme-mode="dark"] .bsfa-cal-modal__btn--ghost {
	background: #222222 !important;
	border-color: #303030 !important;
	color: #C8C8C8 !important;
}

/* Home command center — needs attention, schedule, staff-on-shift, activity */
[data-theme-mode="dark"] .bsfa-attn-item,
[data-theme-mode="dark"] .bsfa-sched-row,
[data-theme-mode="dark"] .bsfa-shift-row,
[data-theme-mode="dark"] .bsfa-activity-row {
	border-bottom-color: #303030 !important;
}
[data-theme-mode="dark"] .bsfa-attn-item:hover,
[data-theme-mode="dark"] .bsfa-sched-row:hover,
[data-theme-mode="dark"] .bsfa-qn-tile:hover {
	background: #222222 !important;
}
[data-theme-mode="dark"] .bsfa-attn-label,
[data-theme-mode="dark"] .bsfa-sched-patient,
[data-theme-mode="dark"] .bsfa-shift-name,
[data-theme-mode="dark"] .bsfa-activity-text,
[data-theme-mode="dark"] .bsfa-qn-tile-label {
	color: #E8E8E8 !important;
}
[data-theme-mode="dark"] .bsfa-sched-meta,
[data-theme-mode="dark"] .bsfa-sched-time,
[data-theme-mode="dark"] .bsfa-shift-since,
[data-theme-mode="dark"] .bsfa-activity-time,
[data-theme-mode="dark"] .bsfa-shift-empty,
[data-theme-mode="dark"] .bsfa-activity-empty,
[data-theme-mode="dark"] .bsfa-qn-section-label {
	color: #AAAAAA !important;
}
[data-theme-mode="dark"] .bsfa-qn-section-label { border-top-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-activity-icon { background: #222222 !important; color: #C8C8C8 !important; }
[data-theme-mode="dark"] .bsfa-shift-dot { border-color: #171717 !important; }
[data-theme-mode="dark"] .bsfa-skeleton { background: #222222 !important; }
[data-theme-mode="dark"] .bsfa-sched-status--scheduled { background: #222222 !important; color: #AAAAAA !important; }

/* ─── Dark mode — QA pass fixes (2026-08-10) ──────────────────────────
   Root cause behind most of these: --bsfa-* tokens are one static light
   palette with no dark redefinition, so anything using them (or a light
   hardcoded hex) needs its OWN explicit [data-theme-mode="dark"] rule —
   there's no single place to "flip a switch." Two of these are CRITICAL:
   the light-only !important rules below were silently beating the
   platform's own generic dark overrides (same or lower specificity, and
   this file loads after atlasmps-custom.css), producing literal
   white-text-on-white-card and near-black-text-on-near-black-header. */

/* CRITICAL: Home's highlighted KPI tiles pin background to #fff !important
   regardless of theme (entity-910.css .sa-stat-card--highlight/--success/
   --danger/--info), and the platform's own dark value-color rule was
   winning over this file's un-important value color — net result was
   near-white text on a white-forced card. Match with equal-or-higher
   specificity so this genuinely wins in dark mode. The colored top-edge
   (--stat-accent, set per variant in the light-mode rules above) is kept
   as-is rather than muted to gray — none of the four accent colors are
   pale pastels, so all four still read clearly against #202020. Only the
   base border color is overridden, on the other three sides. */
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card,
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card--highlight,
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card--success,
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card--danger,
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card--info {
	background: #202020 !important;
	border-color: #303030 !important;
	border-top-color: var(--stat-accent) !important;
}
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card__value { color: #E8E8E8 !important; }
/* Title is now a muted uppercase micro-label (see light-mode rule above),
   not a bright sentence-case heading -- #AAAAAA matches the subtitle
   instead of the old near-white value. */
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card__title { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card__subtitle { color: #AAAAAA !important; }
/* The light-mode icon is a pale accent-tinted square (color-mix toward
   #fff) -- on a dark card that same mix would render as a near-white box.
   Mix toward the card's own dark background instead so the tint stays
   dark-appropriate; the glyph keeps the raw accent color, which (per the
   border-color comment above) already reads fine against #202020. */
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card__icon {
	background: color-mix(in srgb, var(--stat-accent) 22%, #202020) !important;
	color: var(--stat-accent) !important;
}

/* CRITICAL: the shared page header's title color rule exists specifically
   to beat a platform light-header default, using !important — which also
   beats the platform's dark-mode title color at equal specificity, since
   this file loads later. Every one of the 24 AtlasCM pages routes through
   this one partial, so this single fix restores every page's header. */
[data-theme-mode="dark"] .bsfa-page-header.bsfa-theme .bsfa-page-header__title,
[data-theme-mode="dark"] .bsfa-page-header.bsfa-theme h4 {
	color: #E8E8E8 !important;
}
[data-theme-mode="dark"] .bsfa-theme .bsfa-page-header__eyebrow { color: #5B9EE8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-page-header__desc,
[data-theme-mode="dark"] .bsfa-theme .bsfa-page-header__meta { color: #AAAAAA !important; }

/* Home avatar (headshot or initials fallback) in the page header */
[data-theme-mode="dark"] .bsfa-theme .bsfa-home-avatar-img { border-color: rgba(91,158,232,0.35) !important; }

/* Badge bg-*-transparent variants: this file's own light rule always wins
   over the platform's dark rule (higher specificity — 3 classes vs 2), in
   EVERY theme, so every "Live/Sample Data" and sync-status badge sitewide
   was pastel-on-light regardless of the toggle. Give dark mode its own
   equal-specificity, higher-priority (attribute-qualified) version. */
[data-theme-mode="dark"] .bsfa-theme .badge.bg-success-transparent { background: rgba(27,138,90,0.22) !important; color: #4ADE80 !important; }
[data-theme-mode="dark"] .bsfa-theme .badge.bg-warning-transparent { background: rgba(183,121,30,0.22) !important; color: #FBBF24 !important; }
[data-theme-mode="dark"] .bsfa-theme .badge.bg-danger-transparent  { background: rgba(192,57,43,0.22) !important; color: #F87171 !important; }
[data-theme-mode="dark"] .bsfa-theme .badge.bg-primary-transparent { background: rgba(21,101,192,0.24) !important; color: #5B9EE8 !important; }
[data-theme-mode="dark"] .bsfa-theme .badge.bg-secondary-transparent,
[data-theme-mode="dark"] .bsfa-theme .badge.bg-info-transparent { background: rgba(58,84,112,0.32) !important; color: #C8C8C8 !important; }

/* Home command-center chips the first dark pass missed — status/severity
   icons, staff avatars, quick-nav tile icons, and 4 of the 5 schedule
   status pills (only --scheduled got covered originally). */
[data-theme-mode="dark"] .bsfa-theme .bsfa-attn-icon--danger { background: rgba(192,57,43,0.22) !important; color: #F87171 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-attn-icon--warning { background: rgba(183,121,30,0.22) !important; color: #FBBF24 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-shift-avatar { background: rgba(21,101,192,0.22) !important; color: #5B9EE8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-qn-tile-icon { background: rgba(21,101,192,0.22) !important; color: #5B9EE8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-sched-status--completed { background: rgba(27,138,90,0.22) !important; color: #4ADE80 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-sched-status--checkedin { background: rgba(58,84,112,0.32) !important; color: #C8C8C8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-sched-status--inprogress { background: rgba(21,101,192,0.22) !important; color: #5B9EE8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-sched-status--noshow { background: rgba(192,57,43,0.22) !important; color: #F87171 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-sched-dot { box-shadow: 0 0 0 1px #171717; }

/* Doctor Profile modal — had ZERO dark-mode coverage; every card was a
   literal white box regardless of theme. Mirrors the treatment already
   given to its twin, the Patient Profile modal. */
[data-theme-mode="dark"] .bsfa-theme #bsfaDoctorProfileModal .modal-body { background: #171717 !important; }
[data-theme-mode="dark"] .bsfa-theme #bsfaDoctorProfileModal .modal-footer { background: #202020 !important; border-top-color: #303030 !important; }
/* Staff Profile modal — same dark treatment as its Doctor/Patient twins (the
   light --bsfa-bg-soft body otherwise left the credentialing/overview sections
   light-on-light in dark mode). */
[data-theme-mode="dark"] .bsfa-theme #bsfaStaffProfileModal .modal-body { background: #171717 !important; }
[data-theme-mode="dark"] .bsfa-theme #bsfaStaffProfileModal .modal-footer { background: #202020 !important; border-top-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-sidebar { background: #1A1A1A !important; border-right-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-nav-item { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-nav-item:hover { background: #222222 !important; color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-hero,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-kpi,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-cmp {
	background: #202020 !important;
	border-color: #303030 !important;
}
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-hero-name,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-kpi-value,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-cmp-vals,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-section-title,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-tab-header h5 { color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-kpi-label,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-kpi-sub,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-cmp-label,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-cmp-vs,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-cmp-practice,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-meta-grid { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-specialty-badge,
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-pill { background: rgba(21,101,192,0.22) !important; color: #5B9EE8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-dp-name-link { color: #5B9EE8 !important; }

/* Patient Profile modal's inner content cards — the modal chrome (body/
   footer/sidebar) went dark originally, but every card floating inside it
   (headshot, KPI, info, table, appointment cards) stayed a literal white
   box — a "white island" floating in a dark modal. */
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-headshot-card,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-stat-card,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-info-card,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-table,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-appt-card {
	background: #202020 !important;
	border-color: #303030 !important;
}
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-table thead th { background: #222222 !important; border-bottom-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-table tbody tr:hover { background: #222222 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-headshot-name,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-stat-value,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-info-body,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-kv strong,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-section-title,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-coverage-payer,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-appt-type { color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-headshot-meta,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-headshot-contact,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-stat-label,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-info-title,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-kv span,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-coverage-plan,
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-appt-time { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-headshot-contact { border-top-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-kv { border-bottom-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-icd { background: #222222 !important; color: #C8C8C8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-cpt { background: rgba(183,121,30,0.22) !important; color: #FBBF24 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-count-pill { background: rgba(21,101,192,0.24) !important; color: #5B9EE8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-coverage-card { background: rgba(21,101,192,0.14) !important; border-color: rgba(21,101,192,0.3) !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-filter-pill { background: #222222 !important; color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-filter-pill:hover { background: #2A2A2A !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-pp-filter-pill.active { background: var(--bsfa-blue) !important; color: #fff !important; }

/* Supply Ordering catalog — zero dark coverage, every product card and the
   category/search chrome stayed a literal white box. */
[data-theme-mode="dark"] .bsfa-theme .so-product-card { background: #202020 !important; border-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .so-product-img { background: #171717 !important; border-bottom-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .so-product-footer { border-top-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .so-product-name { color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-theme .so-product-brand,
[data-theme-mode="dark"] .bsfa-theme .so-product-meta,
[data-theme-mode="dark"] .bsfa-theme .so-catalog-count,
[data-theme-mode="dark"] .bsfa-theme .so-vendor-link { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .so-product-price { color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-theme .so-cat-tab { background: #222222 !important; color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .so-cat-tab:hover { background: #2A2A2A !important; color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-theme .so-search-input { background: #202020 !important; border-color: #303030 !important; color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-theme .so-cart-empty-icon { background: #222222 !important; }
[data-theme-mode="dark"] .bsfa-theme .so-fav-btn { background: #202020 !important; border-color: #303030 !important; color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .so-fav-btn:hover { border-color: #F0B429 !important; color: #F0B429 !important; }
[data-theme-mode="dark"] .bsfa-theme .so-fav-btn.active { background: rgba(240,180,41,0.15) !important; border-color: #F0B429 !important; color: #F0B429 !important; }

/* Remaining calendar sub-components the first dark pass missed: month-view
   detail chips/dots, sidebar cards, "today" slot tint, provider-column
   headers, and the appointment-detail modal's non-ghost parts. */
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-side-card { background: #202020 !important; border-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-side-title { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-side-row { border-top-color: #303030 !important; color: #C8C8C8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-prov-head { background: #1A1A1A !important; color: #AAAAAA !important; border-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-slot--today { background: rgba(21,101,192,0.12) !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-month__more { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-modal { background: #202020 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-modal__body { color: #C8C8C8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-modal__row { border-top-color: #303030 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-modal__row strong { color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-empty { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-empty i { color: #303030 !important; }

/* Root-cause fix, found independently by two mobile/dark-mode audit passes
   across all 21 AtlasCM Hub pages: --bsfa-navy-text/--bsfa-text-muted/
   --bsfa-border/--bsfa-border-soft are the base BSFA design tokens (defined
   near the top of this file) but were never redefined for dark mode --
   only specific components got hand-patched above. Any markup reading these
   tokens directly (base .card/.table/.form-control, or a page's own inline
   style="color:var(--bsfa-text-muted)") silently kept light-mode colors.
   --bsfa-border doubling as both a border-color AND a faint decorative
   icon color (.bsfa-cal-empty i above already sets it to #303030 in dark
   mode -- this redefinition just makes that the token's real value instead
   of a one-off override) -- the "muted ghost icon" look is consistent with
   the existing precedent, not a new regression. */
[data-theme-mode="dark"] .bsfa-theme {
	--bsfa-navy-text: #E8E8E8;
	--bsfa-text-muted: #AAAAAA;
	--bsfa-border: #303030;
	--bsfa-border-soft: #2A2A2A;
}
[data-theme-mode="dark"] .bsfa-theme .card.custom-card,
[data-theme-mode="dark"] .bsfa-theme .card { background: #202020 !important; }
[data-theme-mode="dark"] .bsfa-theme .table tbody tr:hover { background: #222222 !important; }
[data-theme-mode="dark"] .bsfa-theme .form-control,
[data-theme-mode="dark"] .bsfa-theme .form-select { background: #222222 !important; color: #E8E8E8 !important; }
[data-theme-mode="dark"] .bsfa-theme .form-control::placeholder { color: #737373 !important; }
[data-theme-mode="dark"] .bsfa-theme .form-label { color: #AAAAAA !important; }
[data-theme-mode="dark"] .bsfa-theme .modal-title { color: #E8E8E8 !important; }

/* .sa-stat-card's --highlight/--success/--danger/--info variants are
   covered by the dark-mode block above (they share its selector list);
   --warning (used by Contacts' "Follow-Ups Due" tile, source rule in
   atlasmps-custom.css) is the one sibling that block doesn't list, so it
   still needs its own dark-mode background/border override here -- the
   top-edge color comes from --stat-accent (set to --bsfa-warning in the
   light-mode rules above) same as every other variant, no separate value
   needed. */
[data-theme-mode="dark"] .bsfa-theme .sa-stat-card--warning { background: #202020 !important; border-color: #303030 !important; border-top-color: var(--stat-accent) !important; }

/* FIX (pre-deploy review, follow-up to the --bsfa-border root-cause fix
   above): --bsfa-border doubles as a border-color token AND, in a handful
   of spots, a deliberately-faint FOREGROUND (text/icon) color. The empty
   -state ghost icons (.bsfa-cal-empty i, .so-cart-empty-icon i) already
   read fine at the token's new dark value (#303030 against their
   #202020/#222222 empty-state backgrounds) -- that's the same low-contrast
   "ghost" look those large decorative icons already had in light mode, so
   no separate override was needed for those two.
   These two did NOT get that same treatment for free and are genuinely
   worse than before: previously (no dark redefinition existed) they kept
   rendering the light value (#E4EAF2), which is BRIGHT against a dark
   background -- clearly visible, if unthemed. Now that --bsfa-border
   resolves to #303030 in dark mode, both sit at ~14-16 RGB units from
   their own background, i.e. functionally invisible rather than merely
   subtle:
   - .bsfa-cal-month__cell--other .bsfa-cal-month__date (the "other month"
     day number in the Calendar's month view) has its own color:var(--bsfa-
     border) declaration that out-specifies the parent .bsfa-cal-month__cell
     --other's dark #737373 text-color override, so it never inherited that
     fix -- it was quietly relying on the token itself, which just changed.
   - .bsfa-attn-chevron (the small per-row ">" affordance on Home's "Needs
     Attention" list) is a real, if minor, interactive affordance rather
     than pure decoration, unlike the two ghost icons above -- losing it
     entirely in dark mode is a real (if low-severity) usability regression,
     not an accepted "barely-there" look. */
[data-theme-mode="dark"] .bsfa-theme .bsfa-cal-month__cell--other .bsfa-cal-month__date { color: #737373 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-attn-chevron { color: #3E3E3E !important; }

/* ─── Dark mode — file upload drag & drop (2026-09-25) ──────────────
   --bsfa-bg-soft isn't redefined for dark mode (same root cause as the
   note above), so the idle dropzone box needs its own explicit dark
   background here; the dashed border already re-colors for free since
   --bsfa-border itself gets redefined for dark mode. The --over state's
   --bsfa-blue-soft/--bsfa-blue-soft-2 tints are a fixed 8%/14%-alpha rgba
   over the *light* blue and read as barely-there on a near-black card, so
   both hover states get their own stronger dark-appropriate blue tint here
   instead, matching the codebase's other translucent-blue dark-mode values
   (see .badge.bg-primary-transparent above). */
[data-theme-mode="dark"] .bsfa-theme .bsfa-dropzone { background: #202020 !important; }
[data-theme-mode="dark"] .bsfa-theme .bsfa-dropzone.bsfa-dropzone--over {
	border-color: #5B9EE8 !important;
	background: rgba(21,101,192,0.24) !important;
}
[data-theme-mode="dark"] .bsfa-theme .bsfa-dropzone-inline.bsfa-dropzone--over {
	box-shadow: 0 0 0 2px #5B9EE8 inset !important;
	background: rgba(21,101,192,0.24) !important;
}
[data-theme-mode="dark"] .bsfa-theme .bsfa-dropzone__msg { color: #F87171 !important; }

/* ─── Dark mode — .bsfa-empty-state icon square (2026-09-25) ─────────
   Same root cause as .so-cart-empty-icon above: --bsfa-bg-soft/--bsfa-
   text-faint aren't redefined for dark mode, so the icon square needs its
   own explicit override; .bsfa-empty-state__title reads --bsfa-navy-text,
   which already has a global dark redefinition, so no separate rule
   needed for that one. */
[data-theme-mode="dark"] .bsfa-theme .bsfa-empty-state__icon { background: #222222 !important; color: #5A5A5A !important; }

/* ─── .so-cart-empty-icon sharp-corners correction (2026-09-25) ──────
   Predates the site owner's sharp-corners direction (see .sa-stat-card's
   history comment) -- was still a 50%-circle badge. Squaring it off keeps
   Supply Ordering's empty cart in line with every icon-square built since. */
.bsfa-theme .so-cart-empty-icon { border-radius: 0; }
