/*
 * Local overrides for the vendored digit-ui CSS bundle. Loaded AFTER
 * /digit-ui/vendor/digit-ui-css.css in public/index.html so rules here
 * win by cascade without !important. Keep this file small — anything
 * structural should go upstream to @egovernments/digit-ui-css.
 */

/* Pre-MDMS pages (login screen, splash) render BEFORE the tenant theme
 * loads — they always pick up vendor :root defaults regardless of which
 * tenant this build is deployed to. Don't try to themed them per-tenant
 * here; let them stay tenant-neutral and good-looking on DIGIT defaults.
 * The CSS-var-driven polish blocks below still apply, but their var
 * references resolve to DIGIT defaults pre-MDMS — which is the intent. */

/* Citizen home: align ServicesSection top padding with the 15px side
 * padding so the gap above the cards matches the gap on the sides
 * (closes egovernments/CCRS#421). Upstream digit-ui-css 1.8.37 sets
 * top padding to 40px, which looks off on tenants whose banner image
 * isn't tall enough to absorb the gap.
 */
.HomePageWrapper .ServicesSection {
  padding: 15px 15px 0;
}

@media (min-width: 780px) {
  .HomePageWrapper .ServicesSection {
    padding: 15px 15px 0;
    width: 100%;
  }
}

/* Employee landing logos — upstream sizes the banner logo at 50px which
 * crops the NCCG coat-of-arms badly. Constrain by max-width and let
 * the image scale, keeping object-fit so the SVG isn't squashed
 * (closes egovernments/CCRS#443 sub-7).
 */
.bannerCard .bannerHeader .bannerLogo,
.languageSelection .bannerHeader .bannerLogo {
  max-width: 96px;
  max-height: 96px;
  width: auto;
  height: auto;
  object-fit: contain;
}

/* Employee language-selection card — vendor wraps each language button
 * in `.language-button-container` and applies `margin: 0 4.65% 0 0` to the
 * `.customBtn` itself, so per-row gap is calculated against the parent
 * card width and the wrapped 4th button (German) ends up alone on a
 * second row, ragged against the wide gaps on row 1 (Subhashini flagged
 * "alignment of the buttons is off" — egovernments/CCRS#500). The JSX
 * inline-style now sets `justify-content: center; gap: 12px` so the rows
 * align centered with consistent spacing; zero the per-button margin
 * here so `gap` is the sole spacing source. */
.bannerCard.languageSelection .language-selector .customBtn,
.bannerCard.languageSelection .language-selector .customBtn-selected {
  margin: 0 !important;
}

/* Radio button layout — vendor's `.digit-radio-options-wrap .digit-radio-btn`
 * declares `position:absolute; height:1.5rem; width:1.5rem` but the cascade
 * loses to a generic `input` rule somewhere upstream, so the input ends up
 * `position:relative; 16x16` IN-flow. That pushes the visible
 * `.digit-radio-btn-checkmark` down — circle and selected-dot end up beside
 * each other (Subhashini flagged "Assigned to All / Assigned to Me"). Restate
 * the absolute-overlay positioning at higher specificity + !important so the
 * input sits invisibly on top of the checkmark and the dot lands inside the
 * ring. */
.digit-radio-options-wrap .digit-radio-btn-wrap,
.radio-wrap .radio-btn-wrap {
  width: 1.5rem;
  height: 1.5rem;
}
.digit-radio-options-wrap .digit-radio-btn-wrap .digit-radio-btn,
.radio-wrap .radio-btn-wrap .radio-btn {
  position: absolute !important;
  top: 0 !important;
  left: 0 !important;
  width: 1.5rem !important;
  height: 1.5rem !important;
  margin: 0 !important;
}
/* Older react-components Radio variant uses `.radio-wrap` /
 * `.radio-btn-wrap` / `.radio-btn-checkmark` (no `digit-` prefix). The
 * checkmark span ships statically positioned, so when the input above
 * it is in flow rather than absolutely overlapped, the ring renders
 * BELOW the label text and the selected dot lands beside the ring. Make
 * the wrap relative + position the checkmark absolutely on top of the
 * input rect. Also lay out each radio option (`.radio-wrap > div`) as
 * a flex row so the ring + label sit on the same baseline. */
.radio-wrap > div {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  margin-bottom: 8px !important;
}
.radio-wrap > div > label {
  margin: 0 !important;
}
.radio-wrap .radio-btn-wrap {
  position: relative !important;
  display: inline-block !important;
  flex: 0 0 auto !important;
}
.radio-wrap .radio-btn-wrap .radio-btn-checkmark {
  position: absolute !important;
  top: 0 !important;
  left: 0 !important;
  width: 1.5rem !important;
  height: 1.5rem !important;
  /* Both the input and the checkmark span are absolute-positioned over
   * the same 24x24 area; the checkmark sits later in DOM and would
   * otherwise paint above the input and intercept clicks. Disable
   * pointer events on the visual ring so the click goes through to the
   * input. */
  pointer-events: none !important;
}
.radio-wrap .radio-btn-wrap .radio-btn-checkmark:after {
  pointer-events: none !important;
}
/* Ensure the input itself stays above the checkmark in the stacking
 * order and accepts pointer events. */
.radio-wrap .radio-btn-wrap .radio-btn {
  z-index: 1 !important;
  pointer-events: auto !important;
  cursor: pointer !important;
}
/* Selected-dot pseudo for the unprefixed radio: vendor sets dot to
 * 1.25rem with `top: 10px; left: 10px` which (combined with our 24px
 * ring) places the dot's top-left at (10,10) and overflows the ring
 * down-right. Shrink to 0.75rem and center on the ring. */
.radio-wrap .radio-btn-wrap input:checked ~ .radio-btn-checkmark:after {
  width: 0.75rem !important;
  height: 0.75rem !important;
  top: 50% !important;
  left: 50% !important;
  transform: translate(-50%, -50%) !important;
}

/* Privacy-checkbox row breathing room. Vendor stacks the row with
 * `.digit-privacy-checkbox { margin-top: -1.5rem; margin-bottom: -2.5rem }`
 * + `.digit-privacy-checkbox-align { margin-top: -1.5rem !important }`,
 * which yanks the "I agree" line up underneath the field above it (Subhashini
 * flagged this on the employee login). Reset to a small positive gap so the
 * row reads as its own block. The ::#65 click-eat fix moved the submit button
 * into its own stacking layer, so the negative margin no longer protects
 * the button hit-area — safe to drop. */
.digit-privacy-checkbox,
.digit-privacy-checkbox-align {
  margin-top: 0.75rem !important;
  margin-bottom: 0 !important;
}

/* Login submit button hit-area (closes egovernments/CCRS#443 sub-9).
 *
 * The PrivacyComponent sibling rendered just above the submit button has
 * `.digit-privacy-checkbox { margin-bottom: -2.5rem }` — exactly the
 * button height — combined with `.digit-privacy-checkbox-align
 * { position: relative !important }`. Because the privacy row is
 * positioned and the button is static, CSS paints the positioned
 * sibling above the static one regardless of DOM order, so the lower
 * ~2.5rem of the privacy row overlays the upper portion of the button
 * and intercepts pointer events. Promote the button into its own
 * stacking layer so it sits above the privacy row across the whole
 * rendered area.
 */
.loginCardClassName button[type="submit"],
.login-form-container button[type="submit"],
.bannerCard button[type="submit"] {
  cursor: pointer;
  position: relative;
  z-index: 1;
}
.loginCardClassName button[type="submit"] *,
.login-form-container button[type="submit"] *,
.bannerCard button[type="submit"] * {
  pointer-events: none;
}

/* ─── v3 designer-1:1 surgical overrides ──────────────────────────────────
 *
 * These rules wire CSS vars introduced for the v3 schema (designer's New
 * System spreadsheet) to elements whose upstream rules either hard-coded
 * a hex or collapsed two distinct semantic roles onto one var. Each block
 * cites the designer's role from the spreadsheet so the rationale is
 * traceable. Loaded after the vendored CSS, so wins by cascade — !important
 * is reserved for selectors where upstream rules have higher specificity
 * (e.g. ".citizen .sidebar .sidebar-link.active" is .2.0 specificity).
 */

/* Sidebar selected pill — designer's "Sidebar / Selected Background"
 * (Nairobi: #FEC931 yellow). Upstream uses --color-primary-main directly;
 * promotes to a dedicated var so a tenant whose brand color isn't yellow
 * can have a non-brand selected pill. */
.citizen .sidebar .sidebar-link.active,
.citizen .sidebar .dropdown-link.active,
.citizen .sidebar .dropdown-link.active.level-1,
.citizen .sidebar .dropdown-link.active.level-2,
.employee .sidebar .sidebar-link.active,
.digit-side-nav-active,
.digit-side-nav-item.selected,
.digit-side-nav-item.active {
  background-color: var(--color-sidebar-selected-bg, #c84c0e) !important;
  color: var(--color-sidebar-selected-text, #FFFFFF) !important;
}
.citizen .sidebar .sidebar-link.active svg,
.citizen .sidebar .sidebar-link.active svg path,
.employee .sidebar .sidebar-link.active svg,
.employee .sidebar .sidebar-link.active svg path,
.digit-side-nav-item.active svg,
.digit-side-nav-item.active svg path {
  fill: var(--color-sidebar-selected-text, #FFFFFF) !important;
}

/* Sidebar default (non-active) text — designer's "Sidebar / Text Default"
 * (Nairobi: #D1D5DB). Upstream uses #FFF for everything; differentiates
 * active vs idle items. */
.citizen .sidebar .sidebar-link,
.employee .sidebar .sidebar-link,
.digit-side-nav-item:not(.active):not(.selected) {
  color: var(--color-sidebar-text-default, #D1D5DB);
}

/* Primary button hover — designer's "Primary Button / Background Hover"
 * (Nairobi: #E6B800). Upstream often uses theme(colors.primary.dark)
 * which compiles to a literal; this lets a tenant set a distinct hover
 * color (typically a darker shade of brand-default). */
.digit-btn.primary:hover,
.digit-button.primary:hover,
.digit-button-primary:hover,
button.digit-submit-bar:hover,
button[class*="submit-bar"]:hover {
  background-color: var(--color-button-primary-bg-hover, #B8420C) !important;
  color: var(--color-button-primary-text, #FFFFFF) !important;
}

/* Primary button pressed — designer's "Primary Button / Background Pressed"
 * (Nairobi: #CC9F00). Active state during click. */
.digit-btn.primary:active,
.digit-button.primary:active,
.digit-button-primary:active,
button.digit-submit-bar:active,
button[class*="submit-bar"]:active {
  background-color: var(--color-button-primary-bg-pressed, #A03A0A) !important;
}

/* Foreground (text + svg) on primary-2 surfaces. Vendor hardcodes
 * `color: rgba(255,255,255,…)` inside `.digit-button-primary h2` /
 * `.digit-submit-bar h2`, which fails WCAG once MDMS swaps the primary
 * surface to a light brand colour (Nairobi yellow #FEC931). Route through
 * --color-text-primary (kenya-green sets it to #0B0C0C ≈ black) so the
 * contrast colour stays theme-configurable without introducing a new var. */
.digit-button-primary,
.digit-button-primary h2,
.digit-button.primary,
.digit-btn.primary,
button.digit-submit-bar,
button[class*="submit-bar"],
.digit-submit-bar h2 {
  color: var(--color-text-primary, #0B0C0C) !important;
}
.digit-button-primary svg,
.digit-button-primary svg path,
.digit-submit-bar svg,
.digit-submit-bar svg path,
button.digit-submit-bar svg,
button.digit-submit-bar svg path,
button[class*="submit-bar"] svg,
button[class*="submit-bar"] svg path {
  fill: var(--color-text-primary, #0B0C0C) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
}

/* Input focus border — designer's "Inputs / Border Focus" (Nairobi: #204F37,
 * primary-1). Upstream typically uses outline:black; this gives focus a
 * brand-aware ring. */
.digit-text-input input:focus,
.digit-form-input:focus,
input.digit-input-text:focus,
input[type="text"].digit-input:focus,
input[type="email"]:focus,
input[type="password"]:focus,
.digit-employee-form-field input:focus,
.digit-textarea:focus,
textarea.digit-textarea:focus {
  border-color: var(--color-input-border-focus, #c84c0e) !important;
  outline: 2px solid var(--color-input-border-focus, #c84c0e) !important;
  outline-offset: 0 !important;
}

/* Input error border — designer's "Inputs / Border Error" (Nairobi: #C62828,
 * status-error-border). When a field has a validation error class, its
 * border picks up the dedicated error border var. */
.digit-text-input.digit-error input,
.digit-text-input input.error,
.digit-form-error input,
input.digit-input-error,
input[aria-invalid="true"] {
  border-color: var(--color-input-border-error, #D4351C) !important;
}

/* Input placeholder — designer's "Inputs / Placeholder" (Nairobi: #9CA3AF,
 * matches text-disabled). */
.digit-text-input input::placeholder,
.digit-form-input::placeholder,
input.digit-input::placeholder,
textarea.digit-textarea::placeholder {
  color: var(--color-input-placeholder, #9CA3AF);
  opacity: 1;
}

/* Input label — designer's "Inputs / Label" (Nairobi: #4B5563). Upstream
 * uses --color-text-secondary which is too light per designer. */
.digit-text-input label,
.digit-form-field label,
.digit-card-label,
label.digit-form-field-label {
  color: var(--color-input-label, #4B5563);
}

/* Input helper text — designer's "Inputs / Helper" (Nairobi: #6B7280). */
.digit-form-helper-text,
.digit-form-field-helper,
.digit-helper-text,
.digit-input-helper {
  color: var(--color-input-helper, #6B7280);
}

/* Tables hover row — designer's "Tables / Hover" (Nairobi: #FFF4D7,
 * primary-1-bg tint). Replaces upstream rules that use grey-mid or
 * grey-lighter for hover, which doesn't carry brand identity. */
.digit-table tbody tr:hover,
.digit-data-table tbody tr:hover,
table.digit-table-main tbody tr:hover,
.digit-table-row:hover {
  background-color: var(--color-table-hover, #FBEEE8) !important;
  color: var(--color-table-hover-text, var(--color-text-primary, #0B0C0C)) !important;
}

/* Tables selected row — designer's "Tables / Selected" (Nairobi: #FFF4D7). */
.digit-table tbody tr.selected,
.digit-table tbody tr.active,
.digit-data-table tbody tr.selected,
.digit-table-row.selected,
.digit-table-row.active {
  background-color: var(--color-table-selected, #FBEEE8) !important;
  color: var(--color-table-selected-text, var(--color-primary-1, #c84c0e)) !important;
}

/* Tables header — designer's "Tables / Header Background" (Nairobi:
 * #F3F4F6) and "Header Text" (#204F37, primary-1). */
.digit-table thead,
.digit-table thead th,
.digit-data-table thead,
.digit-data-table thead th,
table.digit-table-main thead {
  background-color: var(--color-table-header-bg, #F3F4F6);
}
.digit-table thead th,
.digit-data-table thead th,
table.digit-table-main thead th {
  color: var(--color-table-header-text, var(--color-primary-1, #c84c0e));
}

/* Tables alternate row stripe — designer's "Tables / Alternate Row"
 * (Nairobi: #FAFAFA, page-secondary-bg). */
.digit-table tbody tr:nth-child(even):not(:hover):not(.selected):not(.active),
.digit-data-table tbody tr:nth-child(even):not(:hover):not(.selected):not(.active) {
  background-color: var(--color-table-alt-row, #FAFAFA);
}

/* Tooltip — designer's "Misc / Tooltip Background" (Nairobi: #204F37,
 * primary-1) + "Tooltip Text" (#FFFFFF). Upstream tooltip rules vary
 * across components; this catches the common selectors. */
.digit-tooltip,
.digit-tooltip-content,
[role="tooltip"],
.tippy-box,
.tippy-content {
  background-color: var(--color-tooltip-bg, #22394D) !important;
  color: var(--color-tooltip-text, #FFFFFF) !important;
}

/* Loader / progress — designer's "Misc / Loader" + "Progress" (both
 * Nairobi: #204F37, primary-1). */
.digit-loader,
.digit-loader-spinner,
.digit-progress-bar-fill,
.digit-progress-fill {
  border-color: var(--color-loader, #c84c0e);
  background-color: var(--color-progress, #c84c0e);
}

/* Status alerts — designer splits Text / Border / Background into three
 * distinct roles (was 2 vars: text+border collapsed into --color-error,
 * --color-success etc.). v3 lets a tenant tint borders darker than text
 * or vice-versa. */
.digit-alert-success .digit-alert-text,
.digit-alert.digit-success-alert,
.digit-toast-success .digit-toast-text {
  color: var(--color-status-success-text, #00703C);
  border-left-color: var(--color-status-success-border, #00703C);
  background-color: var(--color-status-success-bg, #BAD6C9);
}
.digit-alert-error .digit-alert-text,
.digit-alert.digit-error-alert,
.digit-toast-error .digit-toast-text {
  color: var(--color-status-error-text, #D4351C);
  border-left-color: var(--color-status-error-border, #D4351C);
  background-color: var(--color-status-error-bg, #EFC7C1);
}
.digit-alert-warning .digit-alert-text,
.digit-alert.digit-warning-alert,
.digit-toast-warning .digit-toast-text {
  color: var(--color-status-warning-text, #9E5F00);
  border-left-color: var(--color-status-warning-border, #9E5F00);
  background-color: var(--color-status-warning-bg, #FFF4D6);
}
.digit-alert-info .digit-alert-text,
.digit-alert.digit-info-alert,
.digit-toast-info .digit-toast-text {
  color: var(--color-status-info-text, #0057BD);
  border-left-color: var(--color-status-info-border, #0057BD);
  background-color: var(--color-status-info-bg, #C7E0F1);
}

/* Header bar — designer's "Header / Background" (Nairobi: #204F37, primary-1)
 * + "Header / Text" (#FFFFFF). v2 used --color-secondary for navbar bg
 * (which is fine — primary-1 writes there too); this also explicitly sets
 * header text/icon vars so a tenant can theme them without inheriting
 * from header-sidenav. */
.navbar,
.digit-employee-header,
.digit-topbar.light {
  /* bg already inherited from --color-secondary via primary-1 fan-out;
     these overrides apply when the header uses its own bg var instead. */
  background-color: var(--color-header-bg, var(--color-secondary, #22394D));
}
.navbar,
.digit-topbar.light,
.digit-employee-header {
  color: var(--color-header-text, #FFFFFF);
}
.navbar svg,
.navbar svg path,
.digit-topbar.light svg,
.digit-topbar.light svg path,
.digit-employee-header svg,
.digit-employee-header svg path {
  fill: var(--color-header-icon, var(--color-header-text, #FFFFFF));
}

/* Page surfaces — designer's "Page / Background" (#FFFFFF) +
 * "Page / Secondary Background" (#FAFAFA). Set on the root document so
 * nothing requires bg overrides per-page. */
html, body {
  background-color: var(--color-page-bg, #FFFFFF);
  color: var(--color-text-primary, #0B0C0C);
}

/* ─── SVG fill / stroke override ──────────────────────────────────────────
 *
 * Upstream SVG icon components (packages/svg-components and inline JSX
 * paths) hard-code DIGIT-brand hex values as `fill="#c84c0e"` on <path>
 * / <circle> / <rect> elements. That's a presentation attribute with
 * specificity 0,0,0 — any CSS rule that matches the element overrides it.
 *
 * Mapping the canonical DIGIT defaults to their v3 CSS vars makes those
 * SVG icons themable without editing a single SVG file. Tenants whose
 * v3 record sets a non-orange brand color get themed icons automatically.
 *
 * Case-insensitive attribute match (`i` flag, CSS Selectors Level 4 —
 * supported in all modern browsers since 2018) handles both #c84c0e
 * and #C84C0E. Only canonical 6-digit hex matches; alpha-suffixed
 * variants like `#c84c0e80` are deliberately untouched (they signal an
 * intentional partial-opacity tint, not a primary fill).
 *
 * Each rule covers fill AND stroke so icons that use stroke for their
 * outline (line icons rather than filled glyphs) follow theme too.
 */

/* DIGIT primary-main (#c84c0e) → v3 primary-2 / button-primary */
[fill="#c84c0e" i],
[fill="#C84C0E" i] {
  fill: var(--color-primary-2, var(--color-primary-main, #c84c0e));
}
[stroke="#c84c0e" i],
[stroke="#C84C0E" i] {
  stroke: var(--color-primary-2, var(--color-primary-main, #c84c0e));
}

/* DIGIT primary-dark (#C8602B) → v3 primary-1 (the dominant brand) */
[fill="#C8602B" i] {
  fill: var(--color-primary-1, var(--color-primary-dark, #C8602B));
}
[stroke="#C8602B" i] {
  stroke: var(--color-primary-1, var(--color-primary-dark, #C8602B));
}

/* DIGIT primary-accent (#F47738) — orange-ish accent, often the
 * notification bell, status alert glyphs, info chevrons. Maps to v3
 * primary-2 since the designer collapsed accent into the secondary brand. */
[fill="#F47738" i],
[fill="#f47738" i] {
  fill: var(--color-primary-2, var(--color-primary-accent, #F47738));
}
[stroke="#F47738" i],
[stroke="#f47738" i] {
  stroke: var(--color-primary-2, var(--color-primary-accent, #F47738));
}

/* DIGIT primary-light (#F18F5E) — lighter accent variant. */
[fill="#F18F5E" i] {
  fill: var(--color-primary-2, var(--color-primary-light, #F18F5E));
}

/* DIGIT secondary (#22394D) → v3 header-bg path / primary-1 */
[fill="#22394D" i],
[fill="#22394d" i] {
  fill: var(--color-primary-1, var(--color-secondary, #22394D));
}
[stroke="#22394D" i],
[stroke="#22394d" i] {
  stroke: var(--color-primary-1, var(--color-secondary, #22394D));
}

/* DIGIT digitv2 header-sidenav (#0B4B66) — same role as secondary in v3. */
[fill="#0B4B66" i],
[fill="#0b4b66" i] {
  fill: var(--color-primary-1, var(--color-digitv2-header-sidenav, #0B4B66));
}

/* DIGIT text-primary (#0B0C0C) → v3 text-primary */
[fill="#0B0C0C" i],
[fill="#0b0c0c" i] {
  fill: var(--color-text-primary, #0B0C0C);
}
[stroke="#0B0C0C" i],
[stroke="#0b0c0c" i] {
  stroke: var(--color-text-primary, #0B0C0C);
}

/* DIGIT text-secondary (#505A5F) */
[fill="#505A5F" i],
[fill="#505a5f" i] {
  fill: var(--color-text-secondary, #505A5F);
}

/* DIGIT error (#D4351C) → v3 status-error */
[fill="#D4351C" i],
[fill="#d4351c" i] {
  fill: var(--color-status-error-text, var(--color-error, #D4351C));
}
[stroke="#D4351C" i],
[stroke="#d4351c" i] {
  stroke: var(--color-status-error-border, var(--color-error, #D4351C));
}

/* DIGIT error-dark (#B91900) — same role as error in v3. */
[fill="#B91900" i],
[fill="#b91900" i] {
  fill: var(--color-status-error-text, var(--color-error-dark, #B91900));
}

/* DIGIT success (#00703C) → v3 status-success */
[fill="#00703C" i],
[fill="#00703c" i] {
  fill: var(--color-status-success-text, var(--color-success, #00703C));
}
[stroke="#00703C" i],
[stroke="#00703c" i] {
  stroke: var(--color-status-success-border, var(--color-success, #00703C));
}

/* DIGIT link-normal (#1D70B8) → v3 button-tertiary-text / link */
[fill="#1D70B8" i],
[fill="#1d70b8" i] {
  fill: var(--color-button-tertiary-text, var(--color-link-normal, #1D70B8));
}
[stroke="#1D70B8" i],
[stroke="#1d70b8" i] {
  stroke: var(--color-button-tertiary-text, var(--color-link-normal, #1D70B8));
}

/* DIGIT link-hover (#003078) */
[fill="#003078" i] {
  fill: var(--color-link-hover, #003078);
}

/* ─── v3 polish layer — ports Figma's design rules ────────────────────────
 *
 * Goal: make the deployed UI feel as restrained and intentional as the
 * designer's Figma — clean typography, generous whitespace (already present
 * upstream — preserved), soft shadows, smooth interaction transitions,
 * brand-aware focus rings, and unified employee + citizen design language.
 *
 * Strict scope: pure CSS, targeted selectors, no architecture change. No
 * layout-altering rules (padding/margin/width) so existing component
 * widths and grids stay intact. Only color, typography weight/spacing,
 * shadow, transition.
 *
 * Each rule cites the Figma decision it implements.
 */

/* 1. Default anchor color — Figma: links are dark-green primary-1, never
 *    browser-blue and never primary-2 yellow. The navbar/sidebar override
 *    below pulls them back to white where the bg is dark. */
a:not(.digit-button):not(.button) {
  color: var(--color-button-tertiary-text, var(--color-link-normal, #204F37));
  text-decoration: none;
  transition: color 0.15s ease-out, opacity 0.15s ease-out;
}
a:not(.digit-button):not(.button):hover {
  color: var(--color-link-hover, var(--color-button-tertiary-text, #204F37));
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* 2. Navbar / employee header — Figma: dark-green bg, WHITE everything
 *    inside (logo, links, icons, dropdown chevrons). Upstream uses
 *    --color-text-primary which becomes invisible on dark green. */
.navbar,
.navbar a, .navbar span, .navbar div,
.digit-employee-header,
.digit-employee-header a, .digit-employee-header span, .digit-employee-header div,
.digit-topbar.light, .digit-topbar.light *,
.digit-topbar:not(.dark) {
  color: var(--color-header-text, #FFFFFF);
}
.navbar svg, .navbar svg path, .navbar svg circle, .navbar svg rect,
.digit-employee-header svg, .digit-employee-header svg path,
.digit-employee-header svg circle, .digit-employee-header svg rect,
.digit-topbar.light svg, .digit-topbar.light svg path {
  fill: var(--color-header-icon, var(--color-header-text, #FFFFFF));
}

/* Navbar layout — citizen `.navbar` is `display:block` and its single child
 * `.center-container.back-wrapper` is `inline-flex` (width:fit-content), so
 * the logo + language-dropdown cluster on the left and the entire right
 * side of the navbar shows as empty dark green. Make navbar a flex row and
 * stretch its children to full width so `justify-content:space-between`
 * actually pushes the language picker to the far right. */
.navbar {
  display: flex;
  align-items: center;
}
.navbar > .center-container,
.navbar > .back-wrapper,
.navbar > .center-container.back-wrapper {
  flex: 1 1 auto;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

/* Navbar language dropdown — upstream ships the trigger with bg:white,
 * which inside the dark-green navbar paints a white pill that clashes
 * with the brand. The text inside is also white (per .navbar color rule
 * above), so the trigger reads as a blank white box. Make it transparent
 * with a thin border-bottom so it still reads as a control, and ensure
 * the open menu has dark text on white. */
.navbar .language-dropdown,
.navbar .digit-dropdown-select-wrap.language-dropdown,
.navbar .digit-dropdown-select-wrap.language-dropdown .digit-dropdown-select {
  background-color: transparent !important;
  color: var(--color-header-text, #FFFFFF) !important;
  border: 0 !important;
  border-bottom: 1px solid rgba(255, 255, 255, 0.4) !important;
  border-radius: 0;
}
.navbar .language-dropdown .header-dropdown-label,
.navbar .language-dropdown .header-dropdown-arrow,
.navbar .language-dropdown svg, .navbar .language-dropdown svg path {
  color: var(--color-header-text, #FFFFFF) !important;
  fill: var(--color-header-text, #FFFFFF) !important;
}
/* Open dropdown menu — dark text on white so options are legible.
 * Citizen language picker uses .header-dropdown-options / .header-dropdown-option
 * (not .digit-dropdown-options-card). Cover both, since the navbar's
 * `.navbar * { color: white }` rule above otherwise leaks into the menu
 * and renders the option labels white-on-white. */
.navbar .header-dropdown-options,
.navbar .digit-dropdown-options-card,
.navbar .language-dropdown + .digit-dropdown-options-card {
  background-color: #FFFFFF !important;
  border: 1px solid var(--color-card-border, #E5E7EB) !important;
  border-radius: 4px;
  box-shadow: 0 4px 12px -2px rgba(16, 24, 40, 0.10),
              0 2px 4px -2px rgba(16, 24, 40, 0.06) !important;
  overflow: hidden;
  z-index: 1000;
}
.navbar .header-dropdown-options,
.navbar .header-dropdown-option,
.navbar .header-dropdown-option *,
.navbar .digit-dropdown-options-card .digit-dropdown-options-item,
.navbar .digit-dropdown-options-card p {
  color: var(--color-text-primary, #363636) !important;
  background-color: #FFFFFF !important;
}
.navbar .header-dropdown-option:hover,
.navbar .header-dropdown-option:hover * {
  background-color: var(--color-primary-1-bg, #FFF4D7) !important;
  color: var(--color-primary-1, #204F37) !important;
  cursor: pointer;
}

/* The popup container `.header-dropdown-menu` is `position:fixed` with
 * `left: <trigger-x>px` set by vendor JS, anchoring it under its
 * trigger. That overflows the viewport when the trigger sits near the
 * right edge (citizen language picker, employee user-menu, etc.).
 *
 * Position clamping is handled in index.html — a MutationObserver
 * adjusts `left` after vendor sets it, keeping the popup's right edge
 * 16px inside the viewport. That works dynamically for any future
 * header layout (e.g. if the configurator removes a trigger), unlike
 * a static `right: 16px` that would overlap multiple triggers.
 *
 * CSS here only handles cosmetics. */
html .header-dropdown-menu {
  background-color: #FFFFFF !important;
  border: 1px solid var(--color-card-border, #E5E7EB);
  border-radius: 4px;
  box-shadow: 0 4px 12px -2px rgba(16, 24, 40, 0.10),
              0 2px 4px -2px rgba(16, 24, 40, 0.06);
  overflow: hidden;
  /* Size to content with sensible bounds — vendor's fixed 248px width
   * overshoots short option lists like "English / SWAHILI" or
   * "Edit Profile / Logout". */
  width: max-content !important;
  min-width: 160px !important;
  max-width: 280px !important;
}
/* Hide the search input — these popups are tiny option lists (2-3
 * items), search is noise. */
html .header-dropdown-menu input[type="text"],
html .header-dropdown-menu .digit-search-wrapper,
html .header-dropdown-menu .header-dropdown-search-container {
  display: none !important;
}

/* 3. Card surfaces — Figma: white card, soft 1px border, subtle dual-layer
 *    shadow for elevation, smooth hover lift. Box-shadow only — does NOT
 *    touch padding/margin/width to avoid layout regressions. */
.digit-card, .employeeCard, .card,
.citizen-home-card, .CitizenHomeCard,
.digit-card-container,
[class*="home-card"]:not([class*="card-text"]) {
  border: 1px solid var(--color-card-border, #E5E7EB);
  border-radius: 6px;
  box-shadow: 0 1px 2px 0 rgba(16, 24, 40, 0.04),
              0 1px 1px 0 rgba(16, 24, 40, 0.02);
  transition: box-shadow 0.18s ease-out, transform 0.18s ease-out;
}
/* Hover lift only on cards that are actually CTAs (clickable cards
 * like CitizenHomeCard tile). Form-cards / dashboard tiles have
 * interactive children (links, buttons) and the parent-card lift
 * fires when you hover those children, making the whole card bob up
 * — tonally jumpy. Keep lift only for cards that wrap a top-level
 * action (.CitizenHomeCard, [class*="home-card"]) and skip the
 * generic .digit-card / .employeeCard. */
.CitizenHomeCard:hover,
[class*="home-card"]:not([class*="card-text"]):hover {
  box-shadow: 0 4px 6px -1px rgba(16, 24, 40, 0.06),
              0 2px 4px -2px rgba(16, 24, 40, 0.04);
}

/* Sidebar item readability — vendor renders .menu-label at rgb(95,92,98)
 * gray on white background (~3.8:1 contrast — fails WCAG AA). Bump to
 * text-primary and add font-weight 500. Also unify hover behavior so
 * the entire row gets a tint + underline regardless of whether the row
 * is wrapped in an <a> (Home, Citizen Complaint Resolution System) or
 * sits as a bare <span class="menu-item"> (Edit Profile, Logout, HELPLINE).
 *
 * Implementation note: vendor's .menu-item is `display:inline` so a
 * background on it only paints around the SVG icon line — leaves a
 * "colored square" around the icon and the label sticking out un-tinted.
 * Force display:flex so the hover bg covers the full 187x48 row. */
.SideBarStatic .menu-label,
.sidebar-list .menu-label,
[class*="SideBar"] .menu-label {
  color: var(--color-text-primary, #363636);
  font-weight: 500;
  transition: color 0.15s ease-out;
}
.SideBarStatic .menu-item,
.sidebar-list .menu-item {
  display: flex;
  align-items: center;
  gap: 0;
  padding: 0;
  cursor: pointer;
  transition: background-color 0.15s ease-out;
}
/* Vendor ships icons at varying sizes (Home is a 24x24 svg, Citizen
 * Complaint Resolution is 35x39 viewBox squashed to ~10x21, Edit Profile
 * is 18x18 …). Force a fixed 20x20 box so all rows have the same
 * icon footprint and labels start at the same X. */
.SideBarStatic .menu-item > svg,
.SideBarStatic .menu-item > img.icon,
.sidebar-list .menu-item > svg,
.sidebar-list .menu-item > img.icon {
  width: 20px !important;
  height: 20px !important;
  flex: 0 0 20px;
  object-fit: contain;
  /* Vendor adds margin-top:12px on the icon for inline flow alignment.
   * With flex parent + align-items:center, that extra margin offsets
   * the icon below the label's text-center. Zero it out. */
  margin: 0 !important;
}
/* Vendor sets `.menu-label { margin-left: 36px; line-height: 48px }`.
 * The 36px gap is too wide and the 48px line-height makes the label
 * box 48px tall which throws off vertical alignment with the 20px icon
 * even though the flex parent has align-items:center. Reset to natural
 * line-height so flex centering actually centers visually. */
.SideBarStatic .menu-item .menu-label,
.sidebar-list .menu-item .menu-label {
  margin-left: 12px !important;
  line-height: 1.5 !important;
  height: auto !important;
}

/* Status pill polish — vendor renders `.status-highlight` with no
 * horizontal padding (the tinted bg crowds the label) and font-weight
 * 400 so OPEN/CLOSED don't have the weight a status indicator needs.
 * Add 8px horizontal padding so the bg has breathing room around the
 * label, bump weight to 600, and tighten letter-spacing slightly so
 * the all-caps text reads cleanly. */
.status-highlight,
.status-highlight.success {
  display: inline-flex;
  align-items: center;
  padding: 4px 12px !important;
  font-weight: 600;
  letter-spacing: 0.02em;
  line-height: 1.2;
}
.status-highlight p,
.status-highlight.success p {
  padding: 0 !important;
  font-weight: 600;
  letter-spacing: 0.02em;
}

/* Header dropdown menus (.header-dropdown-menu) — both citizen and
 * employee surfaces. Vendor renders option text as white because the
 * containing topbar (.navbar / .digit-employee-header) sets `color:
 * white` on all descendants. Once the popup opens with white bg, the
 * white option labels become invisible. Force dark text inside the
 * menu regardless of which app or topbar opened it. */
html .header-dropdown-menu,
html .header-dropdown-menu *,
html .header-dropdown-options,
html .header-dropdown-options *,
html .header-dropdown-option,
html .header-dropdown-option * {
  color: var(--color-text-primary, #363636) !important;
}
html .header-dropdown-menu input,
html .header-dropdown-menu input::placeholder {
  color: var(--color-text-primary, #363636) !important;
}
html .header-dropdown-option:hover,
html .header-dropdown-option:hover * {
  background-color: var(--color-primary-1-bg, #FFF4D7) !important;
  color: var(--color-primary-1, #204F37) !important;
  cursor: pointer;
}

/* Employee surface vertical rhythm —
 *
 * Vendor stacks `.main.digit-home-main { padding-top:80px; margin-top:16px }`
 * + `.employee-app-wrapper { margin-top:70px }` for a total of ~166px of
 * empty space above the content, even though the fixed topbar is only
 * 72px tall. That shoves every page below a big top gap and pushes the
 * footer down to where it overlaps the fixed `.digit-action-bar` at the
 * bottom of the viewport.
 *
 * Tighten the top gap to ~88px (topbar 72 + 16px breathing room) and
 * add bottom padding equal to the action bar's typical 72px height so
 * the page can scroll past the action bar without the footer hiding
 * behind it. */
.main.digit-home-main {
  padding-top: 88px !important;
  margin-top: 0 !important;
}
.employee-app-wrapper.digit-home-app-wrapper {
  margin-top: 0 !important;
  padding-bottom: 16px;
}
/* The fixed `.digit-action-bar-wrap` (h:72px, position:fixed, bottom:0)
 * sits at the viewport bottom and covers anything in the bottom 72px.
 * The footer is below the form in the document flow, so when the user
 * scrolls all the way down, the footer ends up under the action bar.
 *
 * Add a 72px bottom margin on the footer so the body's scroll length
 * extends 72px past the footer — at scroll-bottom the footer sits ABOVE
 * the fixed action bar, fully visible. The 16px form padding-bottom
 * (above) keeps the form's tail close to the footer. */
.employee-home-footer,
.citizen-home-footer {
  margin-bottom: 72px;
}

/* Employee sidebar item icon fallback — vendor's React component
 * leaves `<span class="icon">` empty when the menu item's MDMS config
 * doesn't declare an iconUrl/iconName. Without an icon, the selected
 * yellow indicator bar reads as a blank colored rectangle.
 *
 * The employee dashboard only mounts ONE sidebar item by default
 * (Home), so paint a home icon as a CSS mask on any empty `.icon`
 * inside a sidebar item. mask-image lets the glyph pick up
 * sidebar-icon white via background-color, so it works on the yellow
 * selected indicator and the dark green non-selected items alike. */
.digit-sidebar-item .icon:empty {
  background-color: var(--color-sidebar-selected-text, #FFFFFF);
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z'/></svg>");
  mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z'/></svg>");
  -webkit-mask-size: 20px 20px;
  mask-size: 20px 20px;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}
.digit-sidebar-item.selected .icon:empty {
  background-color: var(--color-sidebar-selected-text, #FFFFFF);
}

/* Tertiary button label — vendor renders `.digit-button-teritiary
 * .digit-button-label` (note vendor's typo) at primary-main yellow,
 * but per the v3 designer spec a tertiary button reads as a TEXT
 * action and should use --color-button-tertiary-text (primary-1
 * green). Affects employee card-link CTAs like "Create Complaint",
 * "Search Complaint", "Manage Master Data", etc. */
html .digit-button-teritiary .digit-button-label,
html [class*="teritiary"] .digit-button-label,
html [class*="tertiary"] .digit-button-label {
  color: var(--color-button-tertiary-text, var(--color-primary-1, #204F37)) !important;
}
html .digit-button-teritiary svg path:not([fill="none"]),
html [class*="teritiary"] svg path:not([fill="none"]),
html [class*="tertiary"] svg path:not([fill="none"]) {
  fill: var(--color-button-tertiary-text, var(--color-primary-1, #204F37)) !important;
}

/* Suppress duplicate `.digit-topbar` header on /pgr/create-complaint/*
 * surfaces. Vendor mounts `.digit-topbar` (white bg, position:fixed,
 * z-index:9999999) on top of the existing dark-green `.navbar` so the
 * file-complaint flow suddenly shows a white "Powered by DIGIT" bar
 * instead of the green navbar that every other citizen surface uses.
 * Hide the second header so the consistent navbar shows through.
 *
 * IMPORTANT: scope to citizen-only via `:not(.digit-employee-header)`
 * — the employee surfaces use `.digit-topbar.digit-employee-header.light`
 * as their PRIMARY (and only) header, hiding it leaves them with no
 * topbar at all. */
html .digit-topbar:not(.digit-employee-header) {
  display: none !important;
}
/* When wrapped in an <a>, kill the anchor's underline so the row reads
 * as a button. The :hover label rule below adds underline back. */
.sidebar-list a {
  text-decoration: none !important;
}
.SideBarStatic .menu-item:hover,
.sidebar-list .menu-item:hover,
.sidebar-list a:hover .menu-item {
  background-color: var(--color-page-secondary-bg, #FAFAFA);
}
.SideBarStatic .menu-item:hover .menu-label,
.sidebar-list .menu-item:hover .menu-label,
.sidebar-list a:hover .menu-item .menu-label {
  color: var(--color-primary-1, #204F37);
  text-decoration: underline;
  text-underline-offset: 2px;
}
/* Sidebar SVGs ship with a transparent backing rect (path d="M0 0h24v24H0z"
 * fill="none") that defines the viewBox padding. Filling all paths makes
 * the rect render as a solid square covering the actual icon glyph behind
 * it. Skip paths whose fill is explicitly "none". */
.SideBarStatic .menu-item:hover svg path:not([fill="none"]),
.sidebar-list .menu-item:hover svg path:not([fill="none"]),
.sidebar-list a:hover .menu-item svg path:not([fill="none"]) {
  fill: var(--color-primary-1, #204F37) !important;
}
.SideBarStatic .menu-item:hover svg,
.sidebar-list .menu-item:hover svg,
.sidebar-list a:hover .menu-item svg {
  fill: var(--color-primary-1, #204F37);
}

/* ----------------------------------------------------------------------
 * Layout tokens (2026-05-06) — single source of truth for the topbar /
 * page-footer heights so v2 components subtracting them have one knob to
 * adjust. Used by the v2 ScreenContainer (form column height) and
 * CitizenSidebar (sidebar height = viewport − topbar − page-footer).
 *
 * Topbar = 82px (vendor `.citizen .main { padding-top: 82px }`, so
 * everything below the topbar starts 82px down from the viewport top).
 * Footer = 38px (10px top padding + 1.25em logo + 1px border ≈ 38px on
 * the .citizen-home-footer rule below).
 *
 * The .citizen .main override that follows pins the container's
 * available content area to exactly `100vh - topbar - footer`, so the
 * v2 sidebar (height: 100vh - topbar - footer) and the v2 ScreenContainer
 * (same calc) align flush — sidebar bottom and FormFooter (Cancel/Next)
 * land on the same y-line, just above "Powered by DIGIT".
 * -------------------------------------------------------------------- */
:root {
  --v2-page-footer-height: 38px;
  /* PR #99 reduced the topbar from the legacy ~82px to 56px (see
   * `.employee .digit-topbar` rules earlier in this file). The var
   * was left at 82px which made the citizen sidebar end ~26px above
   * the viewport bottom. Aligned to the actual topbar height. */
  --v2-topbar-height: 56px;
}

/* Vendor sets `.citizen .main { padding-top: 82px; min-height: calc(100vh - 90px) }`.
 * The `100vh - 90` content min-height plus the 82px padding makes the
 * .main border-box span `100vh - 8px` — way more than the actual room
 * between topbar and page footer (100vh - 82 - 38 = 100vh - 120). That
 * extra ~30+ pixels is dead space *inside* .main below our v2 children,
 * which then forces the page footer past the viewport (global scroll).
 *
 * Override: shrink .main's content min-height so its content-area height
 * matches the v2 child height calc exactly. Sidebar bottom and FormFooter
 * both land on the page-footer top with zero gap and no scroll.
 *
 * !important is needed because vendor's `.citizen .main` rule sets
 * min-height with the same specificity — last-rule-wins isn't reliable
 * across CSS load order, and this is a pure layout correction. */
.citizen .main.center-container.citizen-home-container,
.main.center-container.citizen-home-container:has(> aside.v2-scope) {
  min-height: calc(
    100vh - var(--v2-topbar-height, 82px) - var(--v2-page-footer-height, 38px)
  ) !important;
}

/* Some citizen surfaces (e.g. /user/profile, edit profile) mount under
 * the `.employee` wrapper because of how `useRouteSubscription` flips on
 * those paths. Vendor css then pins the citizen page footer with
 * `.employee .citizen-home-footer { position: fixed; bottom: 0 }`,
 * which on a modernized route lays the "Powered by DIGIT" bar OVER the
 * v2 sidebar/form column instead of below them. Whenever the v2 sidebar
 * is present in main, force the footer back to normal flow + clear the
 * 72px legacy margin so it parks flush below the v2 column. */
body:has(.main.center-container.citizen-home-container > aside.v2-scope) .citizen-home-footer {
  position: static !important;
  bottom: auto !important;
  margin-bottom: 0 !important;
  /* Reserve the 260px sidebar gutter on the left so the "Powered by
   * DIGIT" text lands in the centre of the right-side content area
   * (the same column the form / module list sits in) rather than the
   * centre of the full viewport — which would put it visually under
   * the sidebar's right edge. Only kicks in when the v2 sidebar is
   * actually mounted (via the body :has() guard above). */
  padding-left: 260px !important;
}
@media (max-width: 47.99rem) {
  /* Mobile: sidebar is hidden, drop the gutter so the footer text is
   * centred to the full viewport again. */
  body:has(.main.center-container.citizen-home-container > aside.v2-scope) .citizen-home-footer {
    padding-left: 0 !important;
  }
}

/* Sidebar modernization moved out of CSS — see
 * `packages/digit-ui-components-v2/src/components/layout/citizen-sidebar.tsx`.
 * The legacy `<StaticCitizenSideBar>` wrapper is no longer mounted on the
 * citizen routes (replaced by `<CitizenSidebar>`); pre-existing
 * `.SideBarStatic` rules above are retained because the employee surface
 * still mounts that component. */

/* ----------------------------------------------------------------------
 * Citizen footer modernization (2026-05-06)
 *
 * Vendor footer is just a centered "Powered by DIGIT" with no
 * separator and inconsistent padding. Add a soft top divider, balance
 * vertical rhythm, and constrain the logo to a sensible size on desktop.
 * -------------------------------------------------------------------- */
.citizen-home-footer {
  /* Theme-aware: borders use --color-border, surface uses
   * --color-page-bg (both already defined in vendor digit-ui-css). */
  border-top: 1px solid var(--color-border, #d6d5d4);
  background-color: var(--color-page-bg, #fafafa);
  /* Zero bottom padding (was 14px) — the logo line itself is the floor of
   * the page; any further space below it just pushed the citizen page
   * past the viewport. Top padding stays so the logo gets some breathing
   * room from the divider. */
  padding: 10px 16px 0 16px !important;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-size: 12px;
  color: var(--color-text-secondary, #505a5f);
}
.citizen-home-footer img {
  height: 1.25em !important;
  width: auto !important;
  display: block;
  opacity: 0.85;
  transition: opacity 0.15s ease-out;
}
.citizen-home-footer img:hover {
  opacity: 1;
}
/* `.citizen-home-container` ships with `mb-25` (margin-bottom: 25px),
 * which left a 25px void between the form area and the page footer —
 * pushed the footer below the viewport on otherwise short pages. Zero it
 * out so the footer sits flush against the form column. */
.citizen-home-container.mb-25 {
  margin-bottom: 0 !important;
}

/* The citizen page footer ships with `margin-bottom: 72px` (rule above —
 * legacy reservation for the fixed `.digit-action-bar-wrap`). On v2
 * citizen surfaces there's no action bar; the 72px just inflates the
 * page past the viewport and forces a global scroll. Zero it out on
 * citizen routes so total = topbar(82) + main(100vh-120) + footer(38) =
 * exactly 100vh, no scroll, page footer flush at viewport bottom. */
.citizen .citizen-home-footer {
  margin-bottom: 0 !important;
}

/* Yellow-CTA text colour — vendor renders the label inside primary
 * buttons via varied tags depending on the atom: `<h2 class="digit-
 * button-label">`, `<header>` (in the InboxSearchComposer's Search
 * atom), or a bare `<span>`. Each carries its own hardcoded
 * `color: #fff` and reads white-on-yellow on Search / Submit / Save
 * buttons. Force every yellow-bg CTA AND every descendant element to
 * honour `--color-text-primary` so the label reads as the tenant's
 * configured body text colour (#363636 on naipepea). */
.digit-button-primary,
.digit-button-primary *,
button.submit-bar,
button.submit-bar *,
button.digit-submit-bar,
button.digit-submit-bar *,
button[class*="submit-bar"],
button[class*="submit-bar"] *,
.digit-formcomposer-submitbar,
.digit-formcomposer-submitbar * {
  color: var(--color-text-primary, #0B0C0C) !important;
}

/* Sidebar rows in the v2 CitizenSidebar (Edit Profile / Logout / Helpline
 * are rendered as <button class="v2-sidebar-row">) inherit the global
 * "any non-tertiary button gets a card-like shadow on hover + a 0.5px
 * press translate" rule from a few hundred lines above. That makes the
 * three action rows lift on hover while the <Link>-rendered Home / module
 * rows above don't, breaking visual parity. Both effects are zeroed
 * unconditionally on the row class so nav rows stay flat regardless of
 * element type. */
.v2-sidebar-row,
.v2-sidebar-row:hover,
.v2-sidebar-row:active,
.v2-sidebar-row:focus,
.v2-sidebar-row:focus-visible {
  box-shadow: none !important;
  transform: none !important;
}

/* `.pgr-citizen-wrapper` — fills the available content width via
 * `flex: 1 1 auto` (citizen-home-container gives it 100vw - sidebar)
 * but takes its natural height. Page scrolls if content runs long.
 * The form card / dropdown popouts must NOT be clipped — see the
 * overflow:visible rules just below. */
.citizen .pgr-citizen-wrapper {
  margin-top: 0 !important;
  min-width: 0;
  flex: 1 1 auto;
  /* No `min-height` — the form card stays at content height. Dropdown
   * listboxes can extend past the card / footer / wrapper boundary
   * because nothing in the chain clips them. */
}
/* Defensive overflow: visible chain so a long dropdown listbox can
 * spill out past the form boundary instead of triggering an internal
 * scrollbar inside the wrapper. */
.citizen .pgr-citizen-wrapper,
.citizen .pgr-citizen-wrapper > .v2-scope,
.citizen .pgr-citizen-wrapper .digit-card-component {
  overflow: visible !important;
}

/* File-complaint location step — disabled boundary dropdowns + pincode
 * input show auto-filled values from the map. The default v2 disabled
 * styling drops the trigger opacity to 50%, which makes a populated
 * County / Sub-County / Ward read as if it were *empty*. Override:
 * keep full opacity so the resolved values stay legible, and use a
 * subtle off-white surface + muted border + not-allowed cursor as the
 * "this is read-only" cue instead. */
.citizen .pgr-citizen-wrapper button[role="combobox"]:disabled,
.citizen .pgr-citizen-wrapper input:disabled {
  opacity: 1 !important;
  background-color: rgba(0, 0, 0, 0.025) !important;
  border-color: var(--color-border, #d6d5d4) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  cursor: not-allowed !important;
}
.citizen .pgr-citizen-wrapper button[role="combobox"]:disabled span {
  color: var(--color-text-primary, #0B0C0C) !important;
}

/* Placeholder text on v2 inputs / textareas across the citizen flow
 * was reading too dark on first glance — a half-typed-looking gray.
 * Drop it to a soft 35% black so it's clearly hint text vs entered
 * value. Scoped to .v2-scope so it doesn't leak to legacy inputs. */
.v2-scope input::placeholder,
.v2-scope textarea::placeholder {
  color: rgba(0, 0, 0, 0.35) !important;
  opacity: 1 !important;
}

/* Employee login password wrapper — drive the focus border on the
 * outer wrapper (which contains the input + eye-toggle button) via
 * `:focus-within`, so focusing the input lights up the whole frame
 * uniformly. The previous behaviour saw a partial focus border
 * stopping at the eye SVG because the unified focus rule was
 * targeting the input element directly. */
.v2-password-input-wrap:focus-within {
  border-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
.v2-password-input-wrap.is-invalid:focus-within {
  border-color: var(--color-error, #d4351c) !important;
}
/* The inner password input + the eye-toggle button must never paint
 * their own focus ring or border — only the wrapper does. Higher-
 * specificity wrapper-scoped selectors so the global vendor `:focus`
 * rule (which paints `outline: 2px solid <brand>`) doesn't peek
 * through and draw a green vertical line where the input meets the
 * eye SVG. */
.v2-password-input-wrap .v2-login-password-input,
.v2-password-input-wrap .v2-login-password-input:focus,
.v2-password-input-wrap .v2-login-password-input:focus-visible,
.v2-password-input-wrap .v2-login-password-input:focus-within,
.v2-password-input-wrap .v2-password-toggle,
.v2-password-input-wrap .v2-password-toggle:focus,
.v2-password-input-wrap .v2-password-toggle:focus-visible {
  outline: 0 !important;
  outline-width: 0 !important;
  outline-style: none !important;
  outline-color: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
}

/* react-data-table-component pagination footer — its native
 * `<select>` (rows per page) was inheriting the unified 44px /
 * 12px-padded chrome and ending up as a tall 42×46 box with the
 * native chevron stuck at the top and the value floated underneath.
 * Reset to compact: ~28px tall, minimal padding, auto width — back
 * to the native dropdown look the data-table expects. */
.rdt_Pagination select {
  height: auto !important;
  min-height: 0 !important;
  /* Native `<select>` chevrons render inside the right-padding zone,
   * so padding-right must be wide enough (≈22px) to clear the value
   * text. Earlier 6px was tight and the chevron sat on top of "10". */
  padding: 2px 22px 2px 8px !important;
  font-size: 0.875rem !important;
  line-height: 1.25 !important;
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 4px !important;
  /* Let the browser draw the native chevron in the right-padding gap. */
}

/* Topbar profile dropdown menu (Edit Profile + Logout) — vendor
 * `.navbar svg { fill: white }` paints every SVG inside the navbar,
 * which leaks into the popped-open dropdown menu where the
 * background is white and white-on-white renders the icons
 * invisible. Re-tint icons inside the menu to the same colour the
 * menu text uses. */
.header-dropdown-menu svg,
.header-dropdown-menu svg path,
.header-dropdown-menu svg circle,
.header-dropdown-menu svg rect,
.header-dropdown-options svg,
.header-dropdown-options svg path,
.header-dropdown-options svg circle,
.header-dropdown-options svg rect {
  fill: var(--color-text-primary, #363636) !important;
  color: var(--color-text-primary, #363636) !important;
}

/* Rating-star buttons on /citizen/pgr/rate — strip every vendor button
 * affordance (box-shadow on hover, focus ring, default bg). Only the
 * star icon's color/fill should react to hover; the button frame
 * stays invisible. */
.v2-rating-star,
.v2-rating-star:hover,
.v2-rating-star:active,
.v2-rating-star:focus,
.v2-rating-star:focus-visible {
  background: transparent !important;
  background-color: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  outline: none !important;
  transform: none !important;
}

/* `.back-btn2` ships with `margin-bottom: 16px` from vendor; we used to
 * zero it because the wrapper was a flex column. With global scroll back
 * the 16px is fine — restore vendor default by leaving this block empty
 * (kept for documentation; the rule itself is removed). */

/* ----------------------------------------------------------------------
 * v2 Citizen complaint timeline.
 *
 * The legacy <ConnectingCheckPoints>/<CheckPoint> markup is preserved so
 * status-specific subcomponents (Resolved, Rejected, PendingAtLME, etc.)
 * keep wiring up their action buttons (Reopen / Rate / call-LME). We
 * just re-skin the existing `.checkpoint`, `.checkpoint-done`,
 * `.checkpoint-connect`, and `.checkpoint-comments-wrap` classes when
 * they appear inside a `.v2-timeline` wrapper to match the rest of the
 * modernized citizen surface — smaller dots, theme-aware fill, tidy
 * comment/photo card, brighter typography, no 18px override.
 * -------------------------------------------------------------------- */
.v2-timeline {
  position: relative;
  padding: 4px 0 0 0;
}
.v2-timeline .checkpoint-connect-wrap {
  padding-bottom: 24px !important;
}
.v2-timeline .checkpoint,
.v2-timeline .checkpoint-done {
  align-items: flex-start;
  gap: 16px;
}
/* Dots — smaller (12px), pixel-aligned with the connector line. The
 * latest event (`.checkpoint-done`) gets the tenant primary fill;
 * historical events keep a calmer secondary tint so the eye lands on
 * the most recent status first. */
.v2-timeline .checkpoint-done h2,
.v2-timeline .checkpoint h2 {
  width: 14px !important;
  height: 14px !important;
  margin-top: 6px !important;
  border-width: 2px !important;
  border-style: solid !important;
  border-radius: 9999px !important;
  flex-shrink: 0 !important;
  box-shadow: 0 0 0 3px var(--v2-surface-color, var(--color-surface, #ffffff));
}
.v2-timeline .checkpoint-done h2 {
  background-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  border-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
.v2-timeline .checkpoint h2 {
  background-color: var(--color-surface, #ffffff) !important;
  border-color: var(--color-border, #d6d5d4) !important;
}
/* Connector line — thinner, in border color, aligned to dot center. */
.v2-timeline .checkpoint-connect {
  margin-left: 6px !important;
  margin-top: 18px !important;
  border-left-width: 2px !important;
  border-left-color: var(--color-border, #e5e7eb) !important;
}
/* Header text inside each event — undo the legacy 18px blanket sizing,
 * give the latest event a heavier weight. */
.v2-timeline .checkpoint-done header,
.v2-timeline .checkpoint header {
  margin-left: 0 !important;
  font-size: 0.875rem !important;
  line-height: 1.5 !important;
  flex: 1;
  min-width: 0;
}
.v2-timeline .checkpoint-done header > :first-child {
  font-weight: 600;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e));
  font-size: 0.95rem;
}
.v2-timeline .checkpoint header > :first-child {
  font-weight: 500;
  color: var(--color-text-heading, #363636);
}
.v2-timeline header p {
  font-size: 0.8125rem !important;
  color: var(--color-text-secondary, #6B7280) !important;
  margin: 4px 0 0 0 !important;
  line-height: 1.4 !important;
}
/* Comment / attachment box — soft v2 surface instead of the legacy grey
 * block. Sits as a calm card under the status header. */
.v2-timeline .checkpoint-comments-wrap,
.v2-timeline .TLComments {
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-border, #e5e7eb) !important;
  border-radius: 8px !important;
  padding: 10px 14px !important;
  margin-top: 8px !important;
  max-width: 640px;
}
.v2-timeline .checkpoint-comments-wrap h4,
.v2-timeline .TLComments h3,
.v2-timeline .TLComments h4 {
  font-size: 0.75rem !important;
  font-weight: 600 !important;
  color: var(--color-text-secondary, #6B7280) !important;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin: 0 0 4px 0 !important;
  line-height: 1.4 !important;
}
.v2-timeline .checkpoint-comments-wrap p,
.v2-timeline .TLComments p {
  font-size: 0.875rem !important;
  color: var(--color-text-heading, #363636) !important;
  margin: 0 !important;
  line-height: 1.5 !important;
}

/* Logout popup sizing — vendor `.digit-popup-wrapper` only caps width
 * (`max-width: 51%`) inside `@media (min-width: 48rem)`. On mobile no
 * cap applies → the wrapper fills the entire viewport (looks like a
 * page takeover, not a yes/no question). Above 48rem the 51% cap is
 * also tuned for full-page admin popups, so for the small logout
 * confirm it reads way too narrow vs. its natural content height.
 *
 * Re-cap by media query so the modal looks like a calm centred card
 * on every viewport. Scoped to the LogoutDialog's stable
 * `digit-logout-popup-wrapper` class so other digit popups (employee
 * admin forms etc.) keep their existing sizing. */
/* Width is pinned (min/max equal) so vendor rules — `.digit-logout-
 * popup-wrapper { width: 31.25rem }`, `.digit-popup-wrapper { width: 100% }`,
 * the small-screen `width: 100%` clamp at 600px — can't pull the
 * card to a different size mid-render. Height stays content-driven. */
@media (max-width: 47.99rem) {
  .digit-popup-overlay .digit-popup-wrapper.digit-logout-popup-wrapper {
    width: min(420px, calc(100vw - 32px)) !important;
    min-width: min(420px, calc(100vw - 32px)) !important;
    max-width: min(420px, calc(100vw - 32px)) !important;
    max-height: none !important;
    height: auto !important;
    border-radius: 10px !important;
    margin: 0 !important;
  }
}
@media (min-width: 48rem) {
  .digit-popup-overlay .digit-popup-wrapper.digit-logout-popup-wrapper {
    width: 520px !important;
    min-width: 520px !important;
    max-width: 520px !important;
    max-height: none !important;
    height: auto !important;
    border-radius: 10px !important;
  }
}

/* Vendor's PopUp ships with very generous internal padding (header
 * ~48px, body ~212px just for one sentence, footer ~128px). For the
 * yes/no logout confirm that's overkill — the modal ends up looking
 * "too long". Tighten each section's height/padding so the card hugs
 * its actual content. */
.digit-popup-wrapper.digit-logout-popup-wrapper .digit-popup-header {
  padding: 18px 20px 8px 20px !important;
  min-height: 0 !important;
  height: auto !important;
}
.digit-popup-wrapper.digit-logout-popup-wrapper .digit-popup-children-wrap {
  padding: 4px 20px 16px 20px !important;
  min-height: 0 !important;
  height: auto !important;
  font-size: 0.9375rem !important;
  line-height: 1.5 !important;
}
.digit-popup-wrapper.digit-logout-popup-wrapper .digit-popup-footer {
  padding: 8px 20px 18px 20px !important;
  min-height: 0 !important;
  height: auto !important;
  gap: 8px !important;
}

/* v2 employee login card — make the top tenant + DIGIT-secondary logos
 * read at a confident size (legacy was ~50% wide / ~18-22px tall — too
 * small inside the modernised card). Scoped to the v2 wrapper so other
 * surfaces (legacy login, language-selection, banners) keep their
 * existing sizing. */
.v2-employee-login-top-logos .bannerHeader {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  margin: 0 !important;
}
.v2-employee-login-top-logos .bannerHeader .bannerLogo {
  width: auto !important;
  height: 56px !important;
  max-height: 56px !important;
  object-fit: contain;
}
.v2-employee-login-top-logos .bannerHeader .svgHeaderLogo {
  height: 40px !important;
  width: auto !important;
  max-height: 40px !important;
  object-fit: contain;
}
.v2-employee-login-top-logos .bannerHeader > span {
  color: var(--color-border, #d6d5d4) !important;
  font-weight: 300 !important;
  font-size: 2rem !important;
  line-height: 1 !important;
}

/* PrivacyComponent inside the v2 login card — vendor's
 * `.digit-privacy-checkbox` ships with negative margins
 * (`margin-top: -1.5rem; margin-bottom: -2.5rem`) tuned for the legacy
 * FormComposerV2 spacing. Inside our v2 card they collide with
 * surrounding fields. Reset them, tighten typography, and align the
 * checkbox + "Privacy Policy" link button on one line. */
.v2-scope .digit-privacy-checkbox,
.v2-scope .digit-privacy-checkbox-align {
  margin: 0 !important;
  padding: 0 !important;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px;
}
.v2-scope .digit-privacy-checkbox label,
.v2-scope .digit-privacy-checkbox .digit-checkbox-container,
.v2-scope .digit-privacy-checkbox .label {
  font-size: 0.8125rem !important;
  color: var(--color-text-secondary, #6B7280) !important;
  line-height: 1.4 !important;
  margin: 0 !important;
  align-items: center;
}
.v2-scope .digit-privacy-checkbox .digit-checkbox-container {
  display: inline-flex !important;
  align-items: center;
  gap: 8px;
}
.v2-scope .digit-privacy-checkbox .digit-checkbox-container > input[type="checkbox"],
.v2-scope .digit-privacy-checkbox .digit-checkbox-container .input-emp[type="checkbox"] {
  margin: 0 !important;
  vertical-align: middle;
}
.v2-scope .digit-privacy-checkbox button.digit-button-link,
.v2-scope .digit-privacy-checkbox .digit-button-link,
.v2-scope .digit-privacy-checkbox button[class*="link"] {
  margin: 0 !important;
  padding: 0 !important;
  font-size: 0.8125rem !important;
  font-weight: 600 !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  background: transparent !important;
  box-shadow: none !important;
  height: auto !important;
  min-height: 0 !important;
  text-decoration: underline;
  text-underline-offset: 3px;
}
.v2-scope .digit-privacy-checkbox button.digit-button-link:hover,
.v2-scope .digit-privacy-checkbox .digit-button-link:hover,
.v2-scope .digit-privacy-checkbox button[class*="link"]:hover {
  box-shadow: none !important;
  transform: none !important;
  background: transparent !important;
}

/* "Forgot password" — same `:not([class*="link"])` guard the global
 * button hover-shadow rule uses doesn't catch our `.v2-forgot-pw`,
 * so the link picks up a card-like shadow on hover. Strip it. */
.v2-forgot-pw,
.v2-forgot-pw:hover,
.v2-forgot-pw:active,
.v2-forgot-pw:focus,
.v2-forgot-pw:focus-visible {
  box-shadow: none !important;
  transform: none !important;
  background: transparent !important;
}
.v2-forgot-pw:hover {
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* ----------------------------------------------------------------------
 * Mobile-friendly tweaks for every modernised v2 surface (≤768px).
 *
 * Goals:
 *   - Form columns shouldn't pin a fixed `100vh - X - Y` height — that
 *     calc was tuned for a desktop topbar+breadcrumb stack and on a
 *     mobile keyboard breaks the layout (form too short, fields hidden
 *     under the soft keyboard). Switch to `min-height: auto` so the
 *     form flows naturally and the page scroll handles overflow.
 *   - Cards / dropdowns / inputs go full-width (max-width: 100%).
 *   - Page-header padding tightens.
 *   - Action bars (`Cancel` / `Submit` row) stack vertically with
 *     full-width buttons so each tap target stays comfortable.
 *   - The fixed `.digit-action-bar-wrap` clears the page footer.
 * -------------------------------------------------------------------- */
@media (max-width: 47.99rem) {
  /* Drop fixed-height calcs — let content flow */
  .v2-employee-create-complaint,
  .v2-workbench-manage-master {
    height: auto !important;
    overflow: visible !important;
  }
  .v2-employee-create-complaint .digit-card-component {
    overflow-y: visible !important;
  }

  /* Tighten page-level padding */
  .v2-employee-page-header,
  .v2-employee-landing-header {
    padding: 0.75rem 1rem 0.5rem 1rem !important;
  }
  .v2-employee-landing-header h1,
  .v2-employee-page-header h1 {
    font-size: 1.25rem !important;
  }

  /* Workbench search + grid full-width */
  .v2-workbench-manage-master .mdms-search-bar-container,
  .v2-workbench-manage-master .mdms-search-bar-container .digit-text-input-field,
  .v2-workbench-manage-master .mdms-search-input {
    width: 100% !important;
    max-width: 100% !important;
    box-sizing: border-box;
    padding-left: 12px !important;
    padding-right: 12px !important;
    margin: 0 !important;
  }
  /* Back-to-modules button — stop stretching the label, restore a
   * compact pill-sized button. */
  .v2-workbench-manage-master .master-details-container > button:first-child {
    width: auto !important;
    align-self: flex-start;
    padding: 8px 16px !important;
    font-size: 0.875rem !important;
    height: 36px !important;
    margin-bottom: 12px !important;
  }
  /* Section heading "<MODULE> - WBH_MASTERS" — vendor's
   * `.digit-card-header` defaults are oversized on mobile. */
  .v2-workbench-manage-master .module-cards-header .digit-card-header,
  .v2-workbench-manage-master .master-details-header .digit-card-header,
  .v2-workbench-manage-master .module-cards-header h2,
  .v2-workbench-manage-master .master-details-header h2 {
    font-size: 0.95rem !important;
    line-height: 1.35 !important;
    word-break: break-word;
    text-transform: none;
  }
  .v2-workbench-manage-master .module-cards-header,
  .v2-workbench-manage-master .master-details-header {
    flex-direction: column;
    align-items: center;
    text-align: center;
  }
  /* Center the single-column grid on mobile so the card sits with
   * symmetric padding on both sides instead of overflowing the right
   * edge / hugging the left. */
  .v2-workbench-manage-master .module-cards-container,
  .v2-workbench-manage-master .master-details-container {
    display: flex;
    flex-direction: column;
    align-items: center;
  }
  .v2-workbench-manage-master .module-cards-grid,
  .v2-workbench-manage-master .master-cards-grid {
    grid-template-columns: 1fr !important;
    width: 100% !important;
    max-width: calc(100vw - 32px);
    margin: 0 auto !important;
    justify-items: stretch;
  }
  .v2-workbench-manage-master .module-card,
  .v2-workbench-manage-master .master-card {
    max-width: 100%;
    box-sizing: border-box;
  }

  /* Employee landing — single full-width column on mobile.
   * Specificity bumped via the `.digit-home-ground` ancestor so this
   * rule wins over the desktop `.employee .digit-landing-page-wrapper`
   * rule lower in the file (cascade tie-breaks by source order
   * otherwise; the desktop rule was thus stealing 360px columns on
   * mobile and overflowing the viewport). */
  .employee .digit-home-ground .digit-landing-page-wrapper,
  .employee .digit-home-employee-app .digit-landing-page-wrapper,
  .employee .digit-landing-page-wrapper {
    grid-template-columns: 1fr !important;
    padding: 12px !important;
  }
  .employee .digit-landing-page-card {
    padding: 16px !important;
  }

  /* Employee create-complaint — form fields full-width */
  .v2-employee-create-complaint button[role="combobox"],
  .v2-employee-create-complaint .digit-dropdown-employee-select-wrap,
  .v2-employee-create-complaint .digit-dropdown-master,
  .v2-employee-create-complaint .digit-dropdown-master-active,
  .v2-employee-create-complaint .digit-card-component .relative,
  .v2-employee-create-complaint ul[role="listbox"] {
    max-width: 100% !important;
  }
  .v2-employee-create-complaint .digit-card-component {
    padding: 16px !important;
    margin: 0 !important;
  }
  /* Action bar stacks the buttons full-width but stays content-tall.
   * Earlier `flex: 1 1 100%` on children made the submit button grow
   * vertically too (the action bar is `flex-direction: column`, so
   * flex-grow stretches on the cross-axis), giving a 103px-tall
   * SUBMIT. Use `width: 100%` + `flex: 0 0 auto` so the button keeps
   * its 40px height. */
  .v2-employee-create-complaint .digit-action-bar-wrap {
    flex-direction: column !important;
    flex-wrap: wrap;
    justify-content: flex-start !important;
    align-items: stretch !important;
    gap: 8px;
    padding: 12px !important;
    height: auto !important;
    min-height: 0 !important;
  }
  .v2-employee-create-complaint .digit-action-bar-wrap > * {
    flex: 0 0 auto !important;
    width: 100% !important;
  }
  .v2-employee-create-complaint .digit-submit-bar,
  .v2-employee-create-complaint button[class*="submit-bar"] {
    width: 100% !important;
    max-width: 100% !important;
    height: 40px !important;
    min-height: 40px !important;
    flex: 0 0 auto !important;
  }
  /* Page header — align the heading to the same x as the form card
   * (16px viewport gutter, no extra inner padding). */
  .v2-employee-create-complaint .v2-employee-page-header {
    padding: 0.75rem 16px 0.5rem 16px !important;
  }
  .v2-employee-create-complaint .digit-card-component {
    margin-left: 16px !important;
    margin-right: 16px !important;
    padding: 16px !important;
  }

  /* Citizen sidebar already hides via Tailwind `md:flex` — ensure the
   * citizen-home-container collapses gracefully when sidebar is gone. */
  .citizen-home-container > .v2-scope:not(aside) {
    width: 100% !important;
    flex: 1 1 100% !important;
  }
  /* Citizen v2 surfaces — relax fixed heights so keyboards don't
   * truncate the form column. */
  .pgr-citizen-wrapper,
  .citizen .pgr-citizen-wrapper {
    height: auto !important;
    min-height: calc(
      100vh - var(--v2-topbar-height, 82px) - var(--v2-page-footer-height, 38px)
    );
  }

  /* Employee chrome — lower padding on the breadcrumb and cards */
  .employee .digit-bread-crumb {
    padding: 0 12px !important;
  }
}

/* The Hamburger drawer (`.digit-msb-sidebar`) ships with `min-width:
 * 17.5rem` and no `max-width`. When the user expands a parent item
 * with children (e.g. "Modules"), the wider child labels push the
 * sidebar past 17.5rem — making the drawer balloon mid-interaction.
 * Cap the width so submenu reveal stays in place. `min(17.5rem, 90vw)`
 * keeps it usable on very narrow screens too. Inner items take
 * `max-width: 100%` and `word-break` so long module names wrap inside
 * the locked column instead of stretching it. */
.digit-msb-sidebar {
  min-width: min(17.5rem, 90vw) !important;
  max-width: min(17.5rem, 90vw) !important;
  width: min(17.5rem, 90vw) !important;
}
.digit-msb-sidebar .digit-msb-item-label,
.digit-msb-sidebar .digit-inner-level-child,
.digit-msb-sidebar .digit-msb-item-child-wrapper {
  max-width: 100%;
  overflow-wrap: anywhere;
  word-break: break-word;
}

/* ----------------------------------------------------------------------
 * Citizen mobile sidebar (drawer) — re-skinned to match the v2 desktop
 * sidebar. Vendor ships `.citizen .sidebar` with a dark-green
 * (`--color-digitv2-header-sidenav` = #0B4B66) bg and white text/svg.
 * On mobile that creates a jarring switch from the white v2 desktop
 * sidebar to a green legacy drawer. Override the surface, text, and
 * active-state colours so the mobile drawer reads as v2 too.
 *
 * Scoped to `.citizen .sidebar` so the employee (admin) chrome is
 * unaffected — that surface still uses the legacy dark theme.
 * -------------------------------------------------------------------- */
.citizen .sidebar {
  background: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  color: var(--color-text-heading, #363636) !important;
  border-right: 1px solid var(--color-border, #d6d5d4) !important;
}
.citizen .sidebar svg,
.citizen .sidebar .sidebar-link svg,
.citizen .sidebar .sidebar-link svg path {
  fill: var(--color-text-secondary, #6B7280) !important;
}
.citizen .sidebar .sidebar-link {
  color: var(--color-text-heading, #363636) !important;
}
.citizen .sidebar .sidebar-link:hover {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
.citizen .sidebar .sidebar-link:hover svg,
.citizen .sidebar .sidebar-link:hover svg path {
  fill: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
.citizen .sidebar .sidebar-link.active {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
.citizen .sidebar .sidebar-link.active svg,
.citizen .sidebar .sidebar-link.active svg path {
  fill: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
.citizen .sidebar .search-icon-wrapper,
.citizen .sidebar .sidebar-link .search-icon-wrapper {
  border-color: var(--color-border, #d6d5d4) !important;
}
.citizen .sidebar .search-icon-wrapper svg,
.citizen .sidebar .search-icon-wrapper svg path {
  fill: var(--color-text-secondary, #6B7280) !important;
}
/* Hamburger / drawer overlay backdrop — keep neutral dim instead of green tint. */
.citizen .sidebar .actions,
.citizen .sidebar .actions .tooltip {
  color: inherit !important;
}

/* ----------------------------------------------------------------------
 * Employee chrome — re-skinned to match the modernized citizen surface
 * (v2 desktop), so an admin moving between citizen + employee tabs sees
 * the same calm white-on-brand language. Scoped to `.employee` so the
 * citizen surfaces aren't double-affected.
 *
 *  - Topbar: pin to 56px (was 72), bigger logos.
 *  - Sidebar (`.digit-sidebar`): legacy ships dark-green / dark-primary;
 *    swap to white surface, brand-tinted hover/active rows + icons,
 *    keep the collapsed 48px / expanded 240px width behaviour.
 *  - Footer (`.employee-home-footer`): zero the legacy 72px reservation,
 *    soft top divider, theme-aligned text colour.
 * -------------------------------------------------------------------- */

/* Topbar pinned + larger logos */
.employee .digit-topbar,
.employee .digit-topbar.digit-employee-header {
  height: 56px !important;
  min-height: 56px !important;
  align-items: center !important;
  padding-top: 8px !important;
  padding-bottom: 8px !important;
}
.employee .digit-topbar .digit-header-logo-img {
  height: 36px !important;
  width: 36px !important;
  max-height: 36px !important;
  max-width: 36px !important;
}
.employee .digit-topbar img.state,
.employee .digit-topbar .digit-topbar-ulb img,
.employee .digit-topbar .digit-logo-ulb-wrapper img.state {
  height: 28px !important;
  max-height: 28px !important;
  width: auto !important;
}
/* Right-side action icons (language switcher, ULB picker, profile,
 * notifications, etc.) — vendor renders 24×24 SVGs that read tiny
 * vs the bumped left-hand logos. Lift to 28px so the topbar feels
 * balanced left-to-right. */
.employee .digit-topbar [class*="header-action"] svg,
.employee .digit-topbar [class*="topbar-action"] svg,
.employee .digit-topbar [class*="topbar-icon"] svg,
.employee .digit-topbar [class*="header-right"] svg,
.employee .digit-topbar [class*="profile"] svg,
.employee .digit-topbar [class*="notification"] svg,
.employee .digit-topbar > div > svg,
.employee .digit-topbar > div > div > svg {
  width: 28px !important;
  height: 28px !important;
}
/* Right-side branding image (`.digit-header-img` — tenant secondary
 * wordmark on naipepea). Same uplift as the left-hand state logo. */
.employee .digit-topbar img.digit-header-img,
.employee .digit-topbar .digit-header-img {
  height: 28px !important;
  max-height: 28px !important;
  width: auto !important;
}

/* Employee sidebar — themed surface (matches top navbar / Nairobi theme
 * green) + brand-tinted active state. Uses the legacy `--color-sidebar-*`
 * tokens so a tenant's MDMS theme drives every shade. Falls back to the
 * Nairobi green when a tenant ships nothing. */
.employee .digit-sidebar,
.employee .digit-sidebar.dark {
  background: var(--color-sidebar-bg, var(--color-header-bg, var(--color-primary-1, #204F37))) !important;
  color: var(--color-sidebar-text-default, #D1D5DB) !important;
  border-right: 1px solid var(--color-sidebar-bg, var(--color-border, #d6d5d4)) !important;
}
.employee .digit-sidebar svg,
.employee .digit-sidebar .digit-sidebar-item svg,
.employee .digit-sidebar .digit-sidebar-item svg path {
  fill: var(--color-sidebar-icon-default, var(--color-sidebar-text-default, #D1D5DB)) !important;
}
.employee .digit-sidebar .digit-sidebar-item,
.employee .digit-sidebar .digit-sidebar-item .digit-sidebar-link,
.employee .digit-sidebar .digit-sidebar-item-label {
  color: var(--color-sidebar-text-default, #D1D5DB) !important;
}
.employee .digit-sidebar .digit-sidebar-item:hover {
  background-color: var(--color-sidebar-hover-bg, rgba(255, 255, 255, 0.08)) !important;
  color: var(--color-sidebar-hover-text, var(--color-sidebar-selected-text, #FFFFFF)) !important;
}
.employee .digit-sidebar .digit-sidebar-item.active,
.employee .digit-sidebar .digit-sidebar-item-active {
  background-color: var(--color-sidebar-selected-bg, var(--color-primary-1, #c84c0e)) !important;
  color: var(--color-sidebar-selected-text, #FFFFFF) !important;
}
.employee .digit-sidebar .digit-sidebar-item:hover svg,
.employee .digit-sidebar .digit-sidebar-item:hover svg path,
.employee .digit-sidebar .digit-sidebar-item.active svg,
.employee .digit-sidebar .digit-sidebar-item.active svg path,
.employee .digit-sidebar .digit-sidebar-item-active svg,
.employee .digit-sidebar .digit-sidebar-item-active svg path {
  fill: var(--color-sidebar-selected-text, #FFFFFF) !important;
}
/* Search input inside the expanded sidebar — translucent on dark surface */
.employee .digit-sidebar .digit-sidebar-search-container,
.employee .digit-sidebar .digit-sidebar-search-container input {
  background: rgba(255, 255, 255, 0.06) !important;
  color: var(--color-sidebar-selected-text, #FFFFFF) !important;
  border-color: rgba(255, 255, 255, 0.18) !important;
}
.employee .digit-sidebar .digit-sidebar-search-container ::placeholder {
  color: var(--color-sidebar-text-default, rgba(255, 255, 255, 0.55)) !important;
}

/* Sidebar position — vendor `top: 0` + topbar height 72 + sidebar
 * effective top from layout = 64. With our 56px topbar override the
 * sidebar should park at top: 56 with no gap. Pin it. */
.employee .digit-sidebar {
  top: 56px !important;
  height: calc(100vh - 56px) !important;
  margin-top: 0 !important;
}

/* Employee page footer normalized — `--color-page-bg` resolves to
 * #FFFFFF on naipepea, so a `background: var(--color-page-bg)` rule
 * just made the footer white-on-white. Use an explicit subtle off-white
 * (or pull from the body bg if a tenant overrides it) and leave the
 * border to do the lift. */
.employee .employee-home-footer {
  margin-bottom: 0 !important;
  border-top: 1px solid var(--color-border, #d6d5d4) !important;
  /* Transparent — let the body's #eee tint show through so the footer
   * reads as part of the page bg, not a separate white band hovering
   * over a grey body. Citizen surfaces converge on the same look once
   * a tenant uses the standard light-grey body bg. */
  background-color: transparent !important;
  color: var(--color-text-secondary, #6B7280);
  padding: 10px 16px 0 16px !important;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-size: 12px;
}
/* Page bg: match the citizen-page canvas (#eee body-container the
 * legacy stack already sits on). The earlier override forced the
 * employee surface to white which made it look "lighter" than the
 * citizen all-services page; reverting to transparent so the body's
 * #eee tint shows through. */
.employee {
  background-color: transparent !important;
}
.employee .employee-home-footer img {
  height: 1.25em !important;
  width: auto !important;
  display: block;
  opacity: 0.85;
  transition: opacity 0.15s ease-out;
}
.employee .employee-home-footer img:hover {
  opacity: 1;
}

/* ----------------------------------------------------------------------
 * Employee landing page — re-skin `.digit-landing-page-wrapper` +
 * `.digit-landing-page-card` so the module-card grid reads at the same
 * v2 visual cadence as the citizen all-services / module-home grids:
 * white card surface, soft border, brand-tinted module title, light
 * yellow hover tint on the link rows, calmer divider.
 * -------------------------------------------------------------------- */
.employee .digit-landing-page-wrapper {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)) !important;
  gap: 20px !important;
  padding: 16px !important;
}
.employee .digit-landing-page-card,
.employee .digit-card-component.digit-landing-page-card {
  /* Match the citizen ModuleCard chrome exactly: white surface, 1px
   * dark border (the citizen card resolves to `rgb(54, 54, 54)` =
   * `--color-text-heading`), no border-radius, same subtle drop
   * shadow. Keep a transparent transition so hover doesn't lift.
   * Vendor pins `min-height: 260px` and `padding: 24px` — release
   * both so the card hugs its actual content (icon + title + 2-3
   * link rows, ~140px) rather than reserving space for a banner that
   * doesn't exist on this surface. */
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-text-heading, #363636) !important;
  border-radius: 0 !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
  transition: none !important;
  width: auto !important;
  min-width: 0 !important;
  min-height: 0 !important;
  height: auto !important;
  padding: 16px 20px !important;
  gap: 8px !important;
}
/* No hover on the outer card — the row-level affordance below carries
 * the interaction signal. */
.employee .digit-landing-page-card:hover,
.employee .digit-card-component.digit-landing-page-card:hover {
  border-color: var(--color-text-heading, #363636) !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
}
.employee .digit-landing-page-card .digit-landingpagecard-icon,
.employee .digit-card-component.digit-landing-page-card .digit-landingpagecard-icon {
  /* Match the citizen ModuleCard icon: yellow glyph on a transparent
   * background. Drop the light-yellow bg circle so the icon reads as
   * a standalone shape (same look as the citizen exclamation icon). */
  background-color: transparent !important;
  color: var(--color-button-primary-bg-default, var(--color-primary-2, #FEC931)) !important;
  width: 40px !important;
  height: 40px !important;
  border-radius: 0 !important;
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.employee .digit-landing-page-card .digit-landingpagecard-icon svg,
.employee .digit-landing-page-card .digit-landingpagecard-icon svg path {
  fill: var(--color-button-primary-bg-default, var(--color-primary-2, #FEC931)) !important;
  height: 36px !important;
  width: 36px !important;
}
.employee .digit-landing-page-card [class*="card-header"],
.employee .digit-landing-page-card .digit-landingpagecard-modulename,
.employee .digit-landing-page-card .ladingcard-moduleName,
.employee .digit-landing-page-card .digit-landingpagecard-headersection h2,
.employee .digit-landing-page-card h2 {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  font-weight: 600 !important;
  font-size: 1rem !important;
  line-height: 1.3 !important;
}
/* Hide the light-grey hairline between the module title and the
 * link rows — citizen ModuleCard doesn't render one and the row
 * affordance carries enough visual separation on its own. */
.employee .digit-landingpage-divider,
.employee .digit-landing-page-card .digit-divider {
  display: none !important;
}
/* Link rows inside the card — vendor renders these as
 * `.digit-button-teritiary` (note the typo) tertiary buttons. Reset
 * their chrome to a flat row, give the row light-yellow tint on hover
 * and brand-color text + svg fill — same affordance as the citizen
 * sidebar / dropdown options / module-link rows. */
.employee .digit-landing-page-card a,
.employee .digit-landing-page-card .digit-button-link,
.employee .digit-landing-page-card button[class*="link"],
.employee .digit-landing-page-card button.digit-button-teritiary,
.employee .digit-landing-page-card button[class*="teritiary"],
.employee .digit-landing-page-card button[class*="tertiary"] {
  color: var(--color-text-heading, #363636) !important;
  background: transparent !important;
  box-shadow: none !important;
  transform: none !important;
  transition: background-color 0.15s ease-out, color 0.15s ease-out;
  border-radius: 6px !important;
  padding: 8px 12px !important;
  text-align: left !important;
  justify-content: flex-start !important;
  /* Normal weight, matching the citizen module-card link rows. */
  font-weight: 400 !important;
  font-size: 0.875rem !important;
}
.employee .digit-landing-page-card .icon-label-container,
.employee .digit-landing-page-card .icon-label-container * {
  font-weight: 400 !important;
}
.employee .digit-landing-page-card a:hover,
.employee .digit-landing-page-card .digit-button-link:hover,
.employee .digit-landing-page-card button[class*="link"]:hover,
.employee .digit-landing-page-card button.digit-button-teritiary:hover,
.employee .digit-landing-page-card button[class*="teritiary"]:hover,
.employee .digit-landing-page-card button[class*="tertiary"]:hover {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  box-shadow: none !important;
  transform: none !important;
}
.employee .digit-landing-page-card button.digit-button-teritiary:hover svg,
.employee .digit-landing-page-card button.digit-button-teritiary:hover svg path,
.employee .digit-landing-page-card button[class*="teritiary"]:hover svg,
.employee .digit-landing-page-card button[class*="teritiary"]:hover svg path {
  fill: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}

/* Match the citizen ModuleCard affordance: hide the legacy leading
 * arrow svg and stamp a trailing chevron-right via ::after so the
 * row reads "Create Complaint  ›" — same shape as citizen's
 * "File a Complaint  ›". */
.employee .digit-landing-page-card button.digit-button-teritiary,
.employee .digit-landing-page-card button[class*="teritiary"] {
  display: flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  width: 100% !important;
  gap: 12px;
}
/* Hide the leading arrow SVG. Vendor wraps it inside
 * `.icon-label-container > svg:first-child`, not as a direct button
 * child — earlier selector missed it and produced two arrows (the
 * leading legacy arrow + my trailing chevron `::after`). */
.employee .digit-landing-page-card button.digit-button-teritiary .icon-label-container > svg,
.employee .digit-landing-page-card button[class*="teritiary"] .icon-label-container > svg,
.employee .digit-landing-page-card button.digit-button-teritiary .icon-label-container svg:first-child,
.employee .digit-landing-page-card button[class*="teritiary"] .icon-label-container svg:first-child {
  display: none !important;
}
.employee .digit-landing-page-card button.digit-button-teritiary::after,
.employee .digit-landing-page-card button[class*="teritiary"]::after {
  content: "\203A"; /* › single right-pointing angle quote */
  font-size: 1.25rem;
  line-height: 1;
  color: var(--color-text-secondary, #6B7280);
  transition: color 0.15s ease-out;
  margin-left: auto;
}
.employee .digit-landing-page-card button.digit-button-teritiary:hover::after,
.employee .digit-landing-page-card button[class*="teritiary"]:hover::after {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e));
}

/* Page header above the landing grid — matches citizen "All Services"
 * h1. RoleBasedEmployeeHome.js renders `.v2-employee-landing-header`
 * just above the grid; this drives its typography. */
.v2-employee-landing-header,
.v2-employee-page-header {
  padding: 0.75rem 0 0.5rem 0;
}
.v2-employee-landing-header h1,
.v2-employee-page-header h1 {
  margin: 0;
  font-size: 1.5rem;
  font-weight: 700;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e));
  line-height: 1.25;
}

/* ----------------------------------------------------------------------
 * Workbench Manage Master Data — re-skin the legacy module/master grid
 * (`.module-cards-grid` / `.master-cards-grid`) so it reads at the same
 * v2 cadence as the citizen all-services / module-home grids: white
 * card surface with dark 1px border + 0 radius + subtle shadow,
 * brand-tinted module names, light-yellow hover tint.
 * -------------------------------------------------------------------- */
.v2-workbench-manage-master .jk-header-btn-wrapper {
  /* Vendor sets this to `display: flex; row nowrap`, which makes the
   * inner module-cards-container shrink to its content width (~500px)
   * regardless of the page width. Switch to block so the container
   * spans the full page width and the auto-fill grid below can pack
   * multiple cards per row. */
  display: block !important;
  width: 100% !important;
  padding: 0 !important;
}
.v2-workbench-manage-master .module-cards-container,
.v2-workbench-manage-master .master-details-container {
  padding: 0;
  width: 100% !important;
  max-width: none !important;
}
.v2-workbench-manage-master .module-cards-header,
.v2-workbench-manage-master .master-details-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  padding: 8px 0 16px 0;
}
.v2-workbench-manage-master .module-cards-header .digit-card-header,
.v2-workbench-manage-master .master-details-header .digit-card-header,
.v2-workbench-manage-master .module-cards-header h2,
.v2-workbench-manage-master .master-details-header h2 {
  font-size: 1rem !important;
  font-weight: 600 !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  margin: 0 !important;
}
/* Search input — v2 chrome */
.v2-workbench-manage-master .mdms-search-bar-container,
.v2-workbench-manage-master .mdms-search-bar-container .digit-text-input-field {
  margin: 0 !important;
  width: 320px;
  max-width: 100%;
}
.v2-workbench-manage-master .mdms-search-input,
.v2-workbench-manage-master .mdms-search-bar-container input[type="text"] {
  height: 44px !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 6px !important;
  padding: 0 12px !important;
  font-size: 0.9375rem !important;
  background: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  margin: 0 !important;
  width: 100% !important;
  outline: none;
}
.v2-workbench-manage-master .mdms-search-input:focus,
.v2-workbench-manage-master .mdms-search-bar-container input[type="text"]:focus {
  border-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
/* Module / master cards grid */
.v2-workbench-manage-master .module-cards-grid,
.v2-workbench-manage-master .master-cards-grid {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)) !important;
  gap: 16px !important;
}
.v2-workbench-manage-master .module-card,
.v2-workbench-manage-master .master-card {
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-text-heading, #363636) !important;
  border-radius: 0 !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
  padding: 18px 20px !important;
  cursor: pointer;
  transition: background-color 0.15s ease-out, color 0.15s ease-out;
  min-height: 0 !important;
  margin: 0 !important;
}
.v2-workbench-manage-master .module-card:hover,
.v2-workbench-manage-master .master-card:hover {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
}
.v2-workbench-manage-master .module-card:hover .digit-card-sub-header,
.v2-workbench-manage-master .master-card:hover .digit-card-sub-header,
.v2-workbench-manage-master .module-card:hover .employee-card-sub-header,
.v2-workbench-manage-master .master-card:hover .employee-card-sub-header,
.v2-workbench-manage-master .module-card:hover h2,
.v2-workbench-manage-master .master-card:hover h2 {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
.v2-workbench-manage-master .module-card .digit-card-sub-header,
.v2-workbench-manage-master .master-card .digit-card-sub-header,
.v2-workbench-manage-master .module-card .employee-card-sub-header,
.v2-workbench-manage-master .master-card .employee-card-sub-header,
.v2-workbench-manage-master .module-card h2,
.v2-workbench-manage-master .master-card h2 {
  font-size: 1rem !important;
  font-weight: 600 !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  margin: 0 0 6px 0 !important;
}
.v2-workbench-manage-master .module-card .digit-card-text,
.v2-workbench-manage-master .master-card .digit-card-text,
.v2-workbench-manage-master .module-card .card-text,
.v2-workbench-manage-master .master-card .card-text {
  color: var(--color-text-secondary, #6B7280) !important;
  font-size: 0.8125rem !important;
  margin: 0 !important;
  line-height: 1.4 !important;
}
.v2-workbench-manage-master .no-results-message {
  grid-column: 1 / -1;
  padding: 24px;
  text-align: center;
  border: 1px dashed var(--color-border, #d6d5d4);
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff));
}
/* Back-to-modules button */
.v2-workbench-manage-master .master-details-container > button:first-child {
  margin-bottom: 16px !important;
  background: transparent !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  color: var(--color-text-heading, #363636) !important;
  border-radius: 6px !important;
  padding: 8px 16px !important;
  font-weight: 500 !important;
  font-size: 0.875rem !important;
  box-shadow: none !important;
  height: auto !important;
}
.v2-workbench-manage-master .master-details-container > button:first-child:hover {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  border-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  box-shadow: none !important;
}

/* ----------------------------------------------------------------------
 * Workbench MDMS Search v2 (`/workbench/mdms-search-v2`) — re-skin
 * the InboxSearchComposer-driven search page so it matches the rest of
 * the modernised employee chrome: brand-tinted page header with bulk-
 * download CTA on the right, soft AlertCard banner, search filters
 * card, results table card, and a v2-styled ActionBar at the bottom.
 * -------------------------------------------------------------------- */
.v2-workbench-search-header {
  display: flex !important;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  padding: 0.75rem 0 0.75rem 0 !important;
}
.v2-workbench-search-header h1 {
  flex: 1 1 auto;
}
.v2-workbench-search-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

/* Employee language-selection page — the four lang buttons live in
 * `.language-selector` (flex, gap 12, justify center) with each button
 * wrapped in its own `.language-button-container`. On mobile the
 * flex-wrap pack-2-then-2 rendering ends up with the second row
 * aligned ~5px right of the first because the per-button container's
 * intrinsic width drifts. Switch the parent to a 2-column grid so
 * both rows share the same column tracks and the buttons align
 * pixel-perfect under each other. */
@media (max-width: 47.99rem) {
  .loginContainer .language-selector {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px !important;
    justify-content: center;
    width: 100% !important;
    max-width: 100%;
    box-sizing: border-box;
  }
  .loginContainer .language-button-container {
    width: 100% !important;
    display: flex !important;
    justify-content: stretch;
    /* Vendor sets `margin-left: 10px` on every container after the
     * first (the legacy flex layout used it as the inter-button gap).
     * Inside the grid that 10px stacks on the first child of row 2
     * and produces a 10px misalignment with row 1. Zero it; the
     * `gap: 12px` on the grid handles spacing instead. */
    margin: 0 !important;
  }
  .loginContainer .language-button-container > button.customBtn,
  .loginContainer .language-button-container > button.customBtn-selected {
    width: 100% !important;
  }
}

/* AlertCard / info banner horizontal margin — vendor ships
 * `margin: 12px 16px` which stacks on top of the page wrapper's
 * gutter and pushes the banner inward. Zero the horizontal margin
 * (keep vertical) so it sits flush with the surrounding cards. */
.v2-workbench-search .digit-infobanner-wrap,
.v2-workbench-search .digit-infobanner-wrap.default,
.v2-workbench-search [class*="infobanner"] {
  margin-left: 0 !important;
  margin-right: 0 !important;
  max-width: 100% !important;
}

/* InboxSearchComposer — the search filter card + results table. Match
 * the v2 form-card chrome (white surface, dark 1px border, square
 * corners, soft shadow). */
/* Card containers only — earlier the `[class*="card"]` selector also
 * matched `<h2 class="card-label">` (the Field / Value / Active filter
 * labels) and stamped a 1px border around them. Restrict to the
 * actual filter wrapper + the digit-card-component. */
.v2-workbench-search .inbox-search-wrapper > div:first-child,
.v2-workbench-search .digit-card-component {
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-text-heading, #363636) !important;
  border-radius: 0 !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
}
/* Filter form labels + inputs */
.v2-workbench-search .digit-card-component label,
.v2-workbench-search label {
  font-size: 0.875rem !important;
  color: var(--color-text-heading, #363636) !important;
  font-weight: 500 !important;
}
/* Filter section heading (`<h2 class="card-label">` for Field / Value /
 * Active) — drop any border the previous greedy selector applied. */
.v2-workbench-search .card-label,
.v2-workbench-search h2.card-label {
  border: 0 !important;
  background: transparent !important;
  margin: 0 0 6px 0 !important;
  padding: 0 !important;
  font-size: 0.875rem !important;
  font-weight: 500 !important;
  color: var(--color-text-heading, #363636) !important;
}
.v2-workbench-search .digit-text-input-field input[type="text"],
.v2-workbench-search .digit-text-input-field input[type="number"],
.v2-workbench-search .digit-card-component input[type="text"]:not(.mdms-search-input):not([readonly]),
.v2-workbench-search .digit-card-component input[type="number"]:not([readonly]) {
  height: 44px !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 6px !important;
  font-size: 0.9375rem !important;
}
/* Filter dropdowns — same chrome as create-complaint */
.v2-workbench-search .digit-dropdown-employee-select-wrap,
.v2-workbench-search .digit-dropdown-master,
.v2-workbench-search .digit-dropdown-master-active,
.v2-workbench-search button[role="combobox"] {
  height: 44px !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 6px !important;
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
}
.v2-workbench-search .digit-dropdown-select {
  border: 0 !important;
}
/* Results table */
.v2-workbench-search table {
  border-collapse: collapse;
  width: 100%;
}
.v2-workbench-search thead th,
.v2-workbench-search [class*="table-header"] {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  font-weight: 600 !important;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 0.75rem !important;
  padding: 12px 14px !important;
  /* No header borders — Field / Value / Active read as a clean tinted
   * band, not a bordered cell. */
  border: 0 !important;
}
.v2-workbench-search tbody td {
  padding: 12px 14px !important;
  border: 0 !important;
  border-bottom: 1px solid var(--color-border, #e5e7eb) !important;
  font-size: 0.875rem !important;
  color: var(--color-text-heading, #363636) !important;
}
.v2-workbench-search tbody tr {
  cursor: pointer;
  transition: background-color 0.15s ease-out;
}
.v2-workbench-search tbody tr:hover {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
}
.v2-workbench-search tbody tr:hover td {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}

/* Pagination footer (`Rows per page` + page nav) — vendor sets
 * `padding: 20px 40px 20px 0` on `.pagination`. Tighten the bottom
 * padding so the footer doesn't reserve a chunky 20px gap below the
 * controls. */
.v2-workbench-search .pagination,
.v2-pgr-inbox .pagination {
  padding: 12px 16px 0 16px !important;
}

/* ----------------------------------------------------------------------
 * PGR Employee Complaint Details (`/employee/pgr/complaint-details/<id>`)
 * — wrap is `.v2-pgr-details`. Re-skin the SummaryCard sections so the
 * details page reads at the same v2 chrome as the inbox + create-
 * complaint surfaces (white card, dark border, square corners, brand-
 * tinted section headers, calm field rows). Action footer parks above
 * the page footer.
 * -------------------------------------------------------------------- */
.v2-pgr-details .digit-summary-card,
.v2-pgr-details [class*="summary-card"],
.v2-pgr-details .digit-card-component {
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-text-heading, #363636) !important;
  border-radius: 0 !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
  margin: 0 0 16px 0 !important;
  padding: 20px 24px !important;
}
.v2-pgr-details .digit-summary-card-header,
.v2-pgr-details [class*="summary-card-header"],
.v2-pgr-details .digit-card-header,
.v2-pgr-details .digit-card-component h2 {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  font-weight: 600 !important;
  font-size: 1rem !important;
  line-height: 1.3 !important;
  margin: 0 0 12px 0 !important;
  padding: 0 !important;
}
.v2-pgr-details .field-pair-label,
.v2-pgr-details [class*="field-pair"] [class*="label"] {
  color: var(--color-text-secondary, #6B7280) !important;
  font-weight: 500 !important;
  font-size: 0.8125rem !important;
}
.v2-pgr-details .field-pair-value,
.v2-pgr-details [class*="field-pair"] [class*="value"] {
  color: var(--color-text-heading, #363636) !important;
  font-size: 0.9375rem !important;
}
.v2-pgr-details .digit-tag {
  display: inline-flex;
  align-items: center;
  padding: 2px 10px;
  border-radius: 9999px;
  font-size: 0.6875rem;
  font-weight: 600;
}

/* Action bar (Take Action button) — yellow CTA + parked above page
 * footer like the create-complaint surface. */
.v2-pgr-details .digit-footer,
.v2-pgr-details ~ .digit-footer,
.v2-pgr-details .digit-action-bar-wrap {
  /* Take Action — a normal-flow button row at the end of the page,
   * not a fixed strip floating at viewport bottom. Just a transparent
   * cell that right-aligns the Submit button below the last view
   * card. Page scrolls naturally; the bar scrolls with it. */
  position: static !important;
  bottom: auto !important;
  left: auto !important;
  right: auto !important;
  width: auto !important;
  height: auto !important;
  min-height: 0 !important;
  background-color: transparent !important;
  border-top: 0 !important;
  box-shadow: none !important;
  padding: 16px 0 0 0 !important;
  margin: 0 !important;
  display: flex !important;
  justify-content: flex-end !important;
}
.v2-pgr-details button.actionButton,
.v2-pgr-details button.submit-bar,
.v2-pgr-details button[class*="submit-bar"],
.v2-pgr-details .digit-button-primary {
  background-color: var(--color-button-primary-bg-default, var(--color-primary-2, #FEC931)) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  border-radius: 6px !important;
  padding: 10px 24px !important;
  font-weight: 600 !important;
  font-size: 0.875rem !important;
  height: 40px !important;
  min-height: 40px !important;
  border: 0 !important;
  box-shadow: none !important;
}

@media (max-width: 47.99rem) {
  .v2-pgr-details {
    padding: 0 16px !important;
    /* Take Action bar is no longer fixed — sits at content end and
     * scrolls with the page — so no bottom padding reservation needed. */
  }
  .v2-pgr-details .v2-employee-page-header {
    padding: 0.75rem 0 0.5rem 0 !important;
  }
  .v2-pgr-details .digit-summary-card,
  .v2-pgr-details .digit-card-component {
    padding: 16px !important;
  }
  /* Inline field pairs — switch to stacked on mobile, with the
   * label fixed full-width and `white-space: nowrap` so two-word
   * labels like "Complaint Type" stay on one line. */
  .v2-pgr-details [class*="field-pair"][class*="inline"],
  .v2-pgr-details .digit-viewcard-field-pair.inline,
  /* Also stack the non-inline field-pairs on mobile — the map +
   * photos panels sit inside `.digit-viewcard-field-pair` (no
   * .inline modifier) and the default flex-row collapses the value
   * column to 0px on a 480px viewport, hiding the map entirely. */
  .v2-pgr-details .digit-viewcard-field-pair {
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 4px !important;
  }
  /* Children of the field-pair value column get full row width on
   * mobile — the map's relative container reads `width: 100%` of
   * its parent, so the parent has to actually have width itself. */
  .v2-pgr-details .digit-viewcard-field-pair > *,
  .v2-pgr-details .digit-viewcard-value > *,
  .v2-pgr-details [class*="field-pair-value"] > * {
    max-width: 100% !important;
    width: 100% !important;
  }
  .v2-pgr-details .digit-viewcard-label,
  .v2-pgr-details [class*="field-pair-label"] {
    width: 100% !important;
    white-space: nowrap !important;
    overflow: visible !important;
    flex-shrink: 0 !important;
  }
  .v2-pgr-details .digit-viewcard-value,
  .v2-pgr-details [class*="field-pair-value"] {
    width: 100% !important;
    word-break: break-word;
  }
  /* Take Action bar on mobile — same normal-flow treatment as
   * desktop: a transparent right-aligned cell at the end of the
   * page. Vendor's `height: 8rem` is released so it hugs its button. */
  .v2-pgr-details .digit-action-bar-wrap,
  .v2-pgr-details .digit-footer {
    position: static !important;
    bottom: auto !important;
    left: auto !important;
    right: auto !important;
    width: auto !important;
    height: auto !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 16px 0 0 0 !important;
    flex-direction: row !important;
    gap: 8px !important;
    background-color: transparent !important;
    border-top: 0 !important;
    box-shadow: none !important;
  }
  .v2-pgr-details button.actionButton,
  .v2-pgr-details button.submit-bar,
  .v2-pgr-details button.digit-button-primary {
    width: 100% !important;
    height: 40px !important;
    min-height: 40px !important;
  }
}

/* ----------------------------------------------------------------------
 * PGR Employee Inbox (`/employee/pgr/inbox-v2`) — same v2 chrome as
 * the Workbench search page (filter card + results table). Selectors
 * mirror the `.v2-workbench-search` block above so both surfaces share
 * the modernised look.
 * -------------------------------------------------------------------- */
.v2-pgr-inbox {
  margin-bottom: 0;
}
/* Phone prefix on the mobile-number filter — only the prefix BUTTON
 * gets the yellow tint; the wrapper (`.digit-text-input-field.prefix`)
 * stays white (driven by the unified input chrome above). Painting
 * the wrapper yellow made the input area read as a yellow box with
 * a white inner box and a triple border (#538 follow-up: testers
 * flagged "double / triple borders" on the Mobile No filter). The
 * border + radius are handled by the unified-chrome block; here we
 * only set color + weight so the prefix tint remains. */
.v2-pgr-inbox button.digit-prefix,
.v2-pgr-inbox .digit-prefix,
.v2-pgr-inbox .digit-mobile-number-container .prefix {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  font-weight: 600 !important;
  cursor: default !important;
}

/* Results table card — vendor pads the wrapper with `padding-bottom:
 * 24px`. Drop it so the table sits flush against the page bottom /
 * pagination. */
.v2-pgr-inbox .digit-card-component.digit-table-card,
.v2-pgr-inbox .digit-table-card {
  padding-bottom: 0 !important;
  margin-bottom: 0 !important;
}

/* The filter card and the results-table card sit in the same CSS grid
 * (`.digit-sections-parent.inbox`). The table card naturally shrinks
 * to its rows-per-page content (~866px) while the filter column is
 * taller (~947px), leaving an empty band below the pagination footer.
 * Stretch the table cell + the inner card so they reach the same
 * bottom as the filter column. */
.v2-pgr-inbox .digit-sections-parent.inbox > * {
  align-self: stretch !important;
}
.v2-pgr-inbox .digit-results-table-wrapper {
  display: flex;
  flex-direction: column;
  height: 100%;
}
.v2-pgr-inbox .digit-results-table-wrapper > .digit-card-component,
.v2-pgr-inbox .digit-results-table-wrapper > .digit-table-card {
  flex: 1 1 auto;
  min-height: 100%;
}

/* react-data-table-component header colour — vendor renders header
 * cells as `.rdt_TableCol` (styled-components), which inherits its
 * legacy dark-teal `#0B4B66` colour. Force it through the brand
 * palette instead. */
.v2-pgr-inbox .rdt_TableHead,
.v2-pgr-inbox [class*="rdt_TableHead"],
.v2-pgr-inbox .rdt_TableHeadRow,
.v2-pgr-inbox [class*="rdt_TableHeadRow"] {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
}
.v2-pgr-inbox .rdt_TableCol,
.v2-pgr-inbox [class*="rdt_TableCol"],
.v2-pgr-inbox .rdt_TableCol_Sortable,
.v2-pgr-inbox [class*="rdt_TableCol"] *,
.v2-pgr-inbox [class*="rdt_TableCol_Sortable"] * {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  font-weight: 600 !important;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 0.75rem !important;
}
.v2-pgr-inbox .rdt_TableCol,
.v2-pgr-inbox [class*="rdt_TableCol"] {
  background-color: transparent !important;
  border: 0 !important;
}

/* Zero the AppContainer's `margin-bottom: 56px` on the PGR inbox so
 * the page doesn't reserve a chunky 56px gap below the table /
 * pagination. */
.employee .app-container.ground-container:has(.v2-pgr-inbox) {
  margin-bottom: 0 !important;
}

/* (Status checkbox column padding — restored to vendor default; user
 * wanted the rows aligned with the "Status" heading, not flush with
 * the column edge. The vendor's natural 24px content-container left
 * padding does that.)
 *
 * Each row's `<input type="checkbox">` is the real form input AND
 * separately the `<label class="digit-custom-checkbox">` is rendered
 * as the visible glyph. In the flex parent the hidden input still
 * takes 16px + an 11px gap before the visible label, so the visible
 * checkbox starts ~27px right of the container. Pull it back: take
 * the input out of the flex flow with `position: absolute`, and the
 * label flushes to the row's left edge. */
.v2-pgr-inbox .digit-checkbox-container .input,
.v2-pgr-inbox .digit-checkbox-container .input-emp,
.v2-pgr-inbox .digit-checkbox-container input[type="checkbox"] {
  position: absolute !important;
  margin: 0 !important;
  width: 16px !important;
  height: 16px !important;
  opacity: 0 !important;
  pointer-events: none;
}
.v2-pgr-inbox .digit-checkbox-container {
  position: relative;
}
.v2-pgr-inbox .digit-inbox-search-wrapper > div:first-child,
.v2-pgr-inbox .digit-card-component {
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-text-heading, #363636) !important;
  border-radius: 0 !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
}
.v2-pgr-inbox .card-label,
.v2-pgr-inbox h2.card-label {
  border: 0 !important;
  background: transparent !important;
  margin: 0 0 6px 0 !important;
  padding: 0 !important;
  font-size: 0.875rem !important;
  font-weight: 500 !important;
  color: var(--color-text-heading, #363636) !important;
}
.v2-pgr-inbox label {
  font-size: 0.875rem !important;
  color: var(--color-text-heading, #363636) !important;
  font-weight: 500 !important;
}
.v2-pgr-inbox .digit-text-input-field input[type="text"],
.v2-pgr-inbox .digit-text-input-field input[type="number"],
.v2-pgr-inbox .digit-card-component input[type="text"]:not([readonly]),
.v2-pgr-inbox .digit-card-component input[type="number"]:not([readonly]) {
  height: 44px !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 6px !important;
  font-size: 0.9375rem !important;
}
.v2-pgr-inbox .digit-dropdown-employee-select-wrap,
.v2-pgr-inbox .digit-dropdown-master,
.v2-pgr-inbox .digit-dropdown-master-active,
.v2-pgr-inbox button[role="combobox"] {
  height: 44px !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 6px !important;
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  width: 100% !important;
}
.v2-pgr-inbox .digit-dropdown-select {
  border: 0 !important;
}
/* v2 Field's wrappers take full column width so the County dropdown
 * fills its parent label-field-pair instead of shrinking to content
 * (which made it ~149px while the legacy Subtype dropdown was 242px).
 * After this both end up at the same 100% / parent width. */
.v2-pgr-inbox .digit-label-field-pair > div,
.v2-pgr-inbox .v2-scope .relative,
.v2-pgr-inbox .space-y-2 {
  width: 100% !important;
  max-width: 100% !important;
}
/* Search button + ActionBar primary CTA — vendor renders the inbox
 * search button as `.digit-button-primary` (not `.submit-bar`); cover
 * both class shapes. */
.v2-pgr-inbox button.submit-bar,
.v2-pgr-inbox button[class*="submit-bar"],
.v2-pgr-inbox button.digit-submit-bar,
.v2-pgr-inbox button.digit-button-primary,
.v2-pgr-inbox .digit-button-primary {
  background-color: var(--color-button-primary-bg-default, var(--color-primary-2, #FEC931)) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  border-radius: 6px !important;
  padding: 10px 24px !important;
  font-weight: 600 !important;
  font-size: 0.875rem !important;
  height: 40px !important;
  min-height: 40px !important;
  border: 0 !important;
  box-shadow: none !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  transition: background-color 0.15s ease-out !important;
}
.v2-pgr-inbox button.submit-bar:hover,
.v2-pgr-inbox button[class*="submit-bar"]:hover,
.v2-pgr-inbox button.digit-submit-bar:hover,
.v2-pgr-inbox button.digit-button-primary:hover,
.v2-pgr-inbox .digit-button-primary:hover {
  background-color: var(--color-button-primary-bg-hover, var(--color-primary-2, #E6B800)) !important;
}
.v2-pgr-inbox button.submit-bar h2,
.v2-pgr-inbox button[class*="submit-bar"] h2,
.v2-pgr-inbox .digit-button-label {
  color: var(--color-text-primary, #0B0C0C) !important;
  font-size: 0.875rem !important;
  font-weight: 600 !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  margin: 0 !important;
}
/* Results table */
.v2-pgr-inbox table {
  border-collapse: collapse;
  width: 100%;
}
.v2-pgr-inbox thead th,
.v2-pgr-inbox [class*="table-header"] {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  font-weight: 600 !important;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 0.75rem !important;
  padding: 12px 14px !important;
  border: 0 !important;
}
.v2-pgr-inbox tbody td {
  padding: 12px 14px !important;
  border: 0 !important;
  border-bottom: 1px solid var(--color-border, #e5e7eb) !important;
  font-size: 0.875rem !important;
  color: var(--color-text-heading, #363636) !important;
}
.v2-pgr-inbox tbody tr {
  cursor: pointer;
  transition: background-color 0.15s ease-out;
}
.v2-pgr-inbox tbody tr:hover {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
}
.v2-pgr-inbox tbody tr:hover td {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
/* Mobile */
@media (max-width: 47.99rem) {
  /* Stack the filter + results columns vertically on mobile.
   * `.digit-sections-parent.inbox` ships with `display: flex; columns:
   * 20% 1fr` which collapses the filter rail to ~75px on a 375vw and
   * makes the table 300vw with a horizontal scroll. */
  .v2-pgr-inbox .digit-sections-parent.inbox {
    display: flex !important;
    flex-direction: column !important;
    gap: 16px !important;
    grid-template-columns: 1fr !important;
    padding: 0 16px !important;
  }
  .v2-pgr-inbox .digit-sections-parent.inbox > * {
    width: 100% !important;
    flex: 1 1 100% !important;
  }
  .v2-pgr-inbox .filter-card {
    max-width: 100% !important;
    margin: 0 !important;
  }
  .v2-pgr-inbox .digit-results-table-wrapper,
  .v2-pgr-inbox .digit-table-card {
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch;
  }
  .v2-pgr-inbox .rdt_TableCol,
  .v2-pgr-inbox .rdt_TableCell,
  .v2-pgr-inbox [class*="rdt_TableCol"],
  .v2-pgr-inbox [class*="rdt_TableCell"] {
    white-space: nowrap;
  }
  .v2-pgr-inbox button.submit-bar,
  .v2-pgr-inbox button[class*="submit-bar"],
  .v2-pgr-inbox button.digit-button-primary {
    width: 100% !important;
  }
  .v2-pgr-inbox button[role="combobox"],
  .v2-pgr-inbox .digit-dropdown-employee-select-wrap {
    max-width: 100% !important;
  }
  /* Search button row's parent (`.searchBox` / search-button-wrapper)
   * extends edge-to-edge with no right padding — the button kisses
   * the viewport right border. Pad both sides so it stays inside the
   * 16px gutter. */
  .v2-pgr-inbox .searchBox,
  .v2-pgr-inbox .search-button-wrapper,
  .v2-pgr-inbox [class*="search-button"] {
    padding: 0 !important;
    margin: 12px 0 !important;
    box-sizing: border-box;
    width: 100% !important;
  }
  .v2-pgr-inbox .v2-employee-page-header {
    padding: 0.75rem 16px 0.5rem 16px !important;
  }
  /* Pagination footer wraps gracefully */
  .v2-pgr-inbox .pagination {
    flex-wrap: wrap;
    gap: 8px;
    padding: 12px !important;
    justify-content: center;
  }
  /* Hide table column headers on mobile (legacy data-table truncates
   * them into empty stripes that don't read as labels). */
  .v2-pgr-inbox .rdt_TableHead,
  .v2-pgr-inbox [class*="rdt_TableHead"],
  .v2-pgr-inbox thead {
    display: none !important;
  }
}

/* ----------------------------------------------------------------------
 * Workbench MDMS View (read-only detail page) — re-skin the
 * MDMSAdd-rendered detail card so the view surface reads at the same
 * v2 cadence (white card, dark border, calm typography, brand-tinted
 * section headers, yellow primary action buttons).
 * -------------------------------------------------------------------- */
.v2-workbench-view .digit-card-component,
.v2-workbench-view [class*="formcomposer-card"],
.v2-workbench-view .form-card-wrap {
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-text-heading, #363636) !important;
  border-radius: 0 !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
  padding: 20px 24px !important;
  margin-bottom: 16px !important;
}
.v2-workbench-view .digit-card-component .digit-card-header,
.v2-workbench-view .digit-card-component .digit-card-sub-header,
.v2-workbench-view .digit-card-component h2,
.v2-workbench-view .digit-card-component .card-sub-header,
.v2-workbench-view .digit-card-component .digit-form-card-header {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  font-weight: 600 !important;
  font-size: 1rem !important;
  line-height: 1.3 !important;
  margin: 0 0 12px 0 !important;
}
/* Read-only field labels + values — calm row pairs */
.v2-workbench-view .label-field-pair,
.v2-workbench-view [class*="label-field-pair"] {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 10px 0;
  border-bottom: 1px solid var(--color-border, #e5e7eb);
}
.v2-workbench-view .label-field-pair:last-child {
  border-bottom: 0;
}
.v2-workbench-view .label-field-pair label,
.v2-workbench-view .label-field-pair .digit-card-label,
.v2-workbench-view .digit-card-component label {
  font-size: 0.75rem !important;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--color-text-secondary, #6B7280) !important;
  font-weight: 600 !important;
}
.v2-workbench-view .label-field-pair input[readonly],
.v2-workbench-view .label-field-pair .digit-employee-card-input,
.v2-workbench-view .digit-card-component input[readonly] {
  border: 0 !important;
  background: transparent !important;
  padding: 0 !important;
  height: auto !important;
  font-size: 0.9375rem !important;
  color: var(--color-text-heading, #363636) !important;
}
/* "View Audit" button + any other view-action buttons — v2 style */
.v2-workbench-view .v2-mdms-view-audit,
.v2-workbench-view button.mdms-view-audit {
  background-color: transparent !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  color: var(--color-text-heading, #363636) !important;
  border-radius: 6px !important;
  padding: 8px 16px !important;
  font-size: 0.875rem !important;
  font-weight: 500 !important;
  height: auto !important;
  margin-top: 8px !important;
  box-shadow: none !important;
}
.v2-workbench-view .v2-mdms-view-audit:hover,
.v2-workbench-view button.mdms-view-audit:hover {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  border-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  box-shadow: none !important;
}
/* MDMSAdd's view-mode action buttons (Edit, Disable/Enable, Delete) —
 * vendor renders them as `.digit-button-primary` / submit-bar;
 * align with v2 yellow CTA chrome. */
.v2-workbench-view button.digit-submit-bar,
.v2-workbench-view button[class*="submit-bar"],
.v2-workbench-view .digit-button-primary {
  background-color: var(--color-button-primary-bg-default, var(--color-primary-2, #FEC931)) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  border-radius: 6px !important;
  padding: 10px 24px !important;
  font-weight: 600 !important;
  font-size: 0.875rem !important;
  height: 40px !important;
  border: 0 !important;
  box-shadow: none !important;
}
.v2-workbench-view button.digit-submit-bar:hover,
.v2-workbench-view button[class*="submit-bar"]:hover,
.v2-workbench-view .digit-button-primary:hover {
  background-color: var(--color-button-primary-bg-hover, var(--color-primary-2, #E6B800)) !important;
}

/* MDMS view "Actions" CTA + dropdown menu — vendor renders the button
 * inside `.action-bar-wrap` (sibling of the page wrapper, action-bar
 * stays fixed at the bottom-right). When the user opens it, a
 * `.menu-wrap` panel renders the action items (Edit, Enable/Disable,
 * etc.). Re-skin both: button as a yellow primary CTA with a chevron
 * affordance, menu as a clean white card with light-yellow hover. */
.action-bar-wrap > button.submit-bar,
.action-bar-wrap > button[class*="submit-bar"] {
  background-color: var(--color-button-primary-bg-default, var(--color-primary-2, #FEC931)) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  border: 0 !important;
  border-radius: 6px !important;
  height: 40px !important;
  min-height: 40px !important;
  padding: 0 18px !important;
  font-weight: 600 !important;
  font-size: 0.875rem !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 8px !important;
  box-shadow: none !important;
  transition: background-color 0.15s ease-out;
}
.action-bar-wrap > button.submit-bar:hover,
.action-bar-wrap > button[class*="submit-bar"]:hover {
  background-color: var(--color-button-primary-bg-hover, var(--color-primary-2, #E6B800)) !important;
  box-shadow: none !important;
  transform: none !important;
}
.action-bar-wrap > button.submit-bar h2,
.action-bar-wrap > button[class*="submit-bar"] h2,
.action-bar-wrap > button.submit-bar .digit-button-label {
  color: var(--color-text-primary, #0B0C0C) !important;
  font-size: 0.875rem !important;
  font-weight: 600 !important;
  margin: 0 !important;
}
.action-bar-wrap > button.submit-bar .digit-icon-toggle,
.action-bar-wrap > button[class*="submit-bar"] .digit-icon-toggle {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 16px !important;
  height: 16px !important;
}
.action-bar-wrap > button.submit-bar .digit-icon-toggle svg,
.action-bar-wrap > button[class*="submit-bar"] .digit-icon-toggle svg {
  width: 14px !important;
  height: 14px !important;
}
.action-bar-wrap > button.submit-bar .digit-icon-toggle svg path,
.action-bar-wrap > button[class*="submit-bar"] .digit-icon-toggle svg path {
  fill: var(--color-text-primary, #0B0C0C) !important;
}

/* Action menu dropdown */
.menu-wrap {
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 6px !important;
  box-shadow: 0 8px 16px rgba(16, 24, 40, 0.12) !important;
  padding: 4px !important;
  overflow: hidden !important;
}
.menu-wrap > div,
.menu-wrap > button,
.menu-wrap [class*="menu-item"],
.menu-wrap > p {
  padding: 10px 14px !important;
  font-size: 0.875rem !important;
  color: var(--color-text-heading, #363636) !important;
  font-weight: 500 !important;
  border: 0 !important;
  background: transparent !important;
  border-radius: 4px !important;
  cursor: pointer;
  transition: background-color 0.15s ease-out, color 0.15s ease-out;
  display: block;
  text-align: left;
  width: 100%;
}
.menu-wrap > div:hover,
.menu-wrap > button:hover,
.menu-wrap [class*="menu-item"]:hover,
.menu-wrap > p:hover {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
.menu-wrap > div:hover svg path,
.menu-wrap > button:hover svg path,
.menu-wrap [class*="menu-item"]:hover svg path {
  fill: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}

@media (max-width: 47.99rem) {
  .v2-workbench-view .digit-card-component {
    padding: 16px !important;
  }
  .v2-workbench-view .v2-mdms-view-audit,
  .v2-workbench-view button.digit-submit-bar {
    width: 100% !important;
  }
}

/* ActionBar (fixed bottom-right "Add MDMS" button) — match the v2
 * Submit button + park above the page footer. */
.v2-workbench-search .digit-action-bar-wrap,
.v2-workbench-search ~ .digit-action-bar-wrap {
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border-top: 1px solid var(--color-border, #d6d5d4) !important;
  box-shadow: none !important;
  bottom: 40px !important;
}
.v2-workbench-search .mdms-add-btn,
.v2-workbench-search button.digit-submit-bar,
.v2-workbench-search button.submit-bar,
.v2-workbench-search button[class*="submit-bar"] {
  background-color: var(--color-button-primary-bg-default, var(--color-primary-2, #FEC931)) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  border-radius: 6px !important;
  padding: 10px 24px !important;
  font-weight: 600 !important;
  font-size: 0.875rem !important;
  height: 40px !important;
  min-height: 40px !important;
  border: 0 !important;
  border-bottom: 0 !important;
  box-shadow: none !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  transition: background-color 0.15s ease-out !important;
}
.v2-workbench-search .mdms-add-btn:hover,
.v2-workbench-search button.digit-submit-bar:hover,
.v2-workbench-search button.submit-bar:hover,
.v2-workbench-search button[class*="submit-bar"]:hover {
  background-color: var(--color-button-primary-bg-hover, var(--color-primary-2, #E6B800)) !important;
  box-shadow: none !important;
  transform: none !important;
}
.v2-workbench-search button.submit-bar h2,
.v2-workbench-search button[class*="submit-bar"] h2,
.v2-workbench-search .digit-button-label {
  color: var(--color-text-primary, #0B0C0C) !important;
  font-size: 0.875rem !important;
  font-weight: 600 !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  margin: 0 !important;
}

/* Mobile: stack header actions, full-width filter inputs */
@media (max-width: 47.99rem) {
  .v2-workbench-search {
    padding: 0 16px !important;
    box-sizing: border-box;
  }
  .v2-workbench-search-header {
    flex-direction: column;
    align-items: stretch;
    padding: 0.75rem 0 0.5rem 0 !important;
  }
  /* Some workbench pages (LocalisationSearch) use the legacy
   * `.works-header-search` heading instead of the v2 page header
   * wrapper. Strip its own horizontal padding/margin so it relies on
   * the page wrapper's 16px gutter only — was rendering ~48px from
   * the viewport edge (16 wrap + 16 header padding + 16 header
   * margin). */
  .v2-workbench-search .works-header-search {
    padding: 0.75rem 0 0.5rem 0 !important;
    margin: 0 0 12px 0 !important;
  }
  /* AlertCard / info banner — zero only the inner padding tweaks on
   * mobile (margin handled below for all viewports). */
  .v2-workbench-search .digit-action-bar-wrap {
    padding: 12px !important;
  }
  .v2-workbench-search .mdms-add-btn,
  .v2-workbench-search button.digit-submit-bar,
  .v2-workbench-search button[class*="submit-bar"],
  .v2-workbench-search button.digit-button-primary {
    width: 100% !important;
  }
  .v2-workbench-search button[role="combobox"],
  .v2-workbench-search .digit-dropdown-employee-select-wrap {
    max-width: 100% !important;
  }
  /* Info banner ("WBH_MDMS_INFO") — tighten so it doesn't reserve
   * 86px on phones for a one-line tip. Zero the horizontal margin
   * so it sits inside the wrapper's gutter only. */
  .v2-workbench-search .digit-infobanner-wrap,
  .v2-workbench-search .digit-infobanner-wrap.default {
    margin: 12px 0 !important;
    padding: 10px 12px !important;
    max-width: 100% !important;
  }
  .v2-workbench-search .digit-infobanner-wrap p,
  .v2-workbench-search .digit-infobanner-wrap span {
    font-size: 0.8125rem !important;
    line-height: 1.4 !important;
  }
  /* Filter + results card — outer padding now lives on the wrapper
   * (.v2-workbench-search), so the inbox-search-wrapper itself just
   * fills the column. */
  .v2-workbench-search .inbox-search-wrapper {
    padding: 0;
  }
  .v2-workbench-search .inbox-search-wrapper > div:first-child,
  .v2-workbench-search .digit-card-component {
    width: 100% !important;
    box-sizing: border-box;
  }
  /* Filter form fields stack one-per-row */
  .v2-workbench-search .label-field-pair,
  .v2-workbench-search .digit-label-field-pair {
    flex: 1 1 100% !important;
    width: 100% !important;
  }
  /* Results table — horizontal scroll (instead of letting the table
   * overflow the page width). The legacy data-table is column-heavy
   * and can't reflow per-row on phones. */
  .v2-workbench-search .digit-results-table-wrapper,
  .v2-workbench-search .digit-table-card,
  .v2-workbench-search .rdt_Table,
  .v2-workbench-search [class*="rdt_TableWrapper"] {
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch;
  }
  .v2-workbench-search .rdt_TableCol,
  .v2-workbench-search .rdt_TableCell,
  .v2-workbench-search [class*="rdt_TableCol"],
  .v2-workbench-search [class*="rdt_TableCell"] {
    white-space: nowrap;
  }
  /* Pagination footer wraps gracefully on mobile */
  .v2-workbench-search .pagination {
    flex-wrap: wrap;
    gap: 8px;
    padding: 12px !important;
  }
  /* Hide the column-header row on phones — the legacy data-table
   * collapses headers into empty stripes (column titles get truncated
   * past the row's tap area), so they don't read as labels. Drop them
   * entirely; users still see the cell values per row. */
  .v2-workbench-search .rdt_TableHead,
  .v2-workbench-search [class*="rdt_TableHead"],
  .v2-workbench-search thead {
    display: none !important;
  }
  /* Hide the "Action: NA" detail row inside the mobile card layout —
   * the legacy data-table's mobile renderer ignores the column's
   * custom pencil-icon renderer and falls back to "NA". The whole
   * row is wrapped in an <a> already, so tapping anywhere navigates
   * to the edit page; the action affordance is redundant. */
  .v2-workbench-search .rdt_TableCell .detail:has(.label h2) {
    /* Selector below targets only the Action detail. */
  }
  .v2-workbench-search [role="cell"] .details-container .detail:last-child {
    display: none !important;
  }
}

/* ----------------------------------------------------------------------
 * Employee Create Complaint — re-skin the legacy FormComposerV2 chrome
 * (single .digit-card-component with section headers + fields) so it
 * matches the citizen file-complaint surface: white card with the same
 * dark 1px border + 0 radius + subtle shadow, brand-tinted section
 * headings, lighter labels, calmer field rhythm. The dynamic config
 * driving the form is untouched.
 * -------------------------------------------------------------------- */
.v2-employee-create-complaint .digit-card-component {
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-text-heading, #363636) !important;
  border-radius: 0 !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) !important;
  transition: none !important;
  /* No left/right margin — let the card align with the breadcrumb's
   * left edge (driven by the legacy AppContainer's gutter). Earlier
   * 1.5rem horizontal margin pushed the card 24px to the right of
   * the breadcrumb, breaking the visual rhythm. */
  margin: 0 0 1.5rem 0 !important;
  padding: 24px 28px !important;
}
/* Section headings inside the card */
.v2-employee-create-complaint .digit-card-component .digit-card-header,
.v2-employee-create-complaint .digit-card-component .digit-card-sub-header,
.v2-employee-create-complaint .digit-card-component h2,
.v2-employee-create-complaint .digit-card-component .digit-form-card-header,
.v2-employee-create-complaint .digit-card-component .card-sub-header {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  font-weight: 600 !important;
  font-size: 1rem !important;
  line-height: 1.3 !important;
  margin: 16px 0 8px 0 !important;
  padding: 0 !important;
}
.v2-employee-create-complaint .digit-card-component > h2:first-child,
.v2-employee-create-complaint .digit-card-component > .digit-card-header:first-child,
.v2-employee-create-complaint .digit-card-component > .digit-card-sub-header:first-child {
  margin-top: 0 !important;
}
/* Field labels */
.v2-employee-create-complaint .digit-card-component label,
.v2-employee-create-complaint .digit-card-component .digit-form-card-text {
  color: var(--color-text-heading, #363636) !important;
  font-size: 0.875rem !important;
  font-weight: 500 !important;
}
/* Required asterisks red — same convention citizen v2 uses */
.v2-employee-create-complaint .digit-card-component label .digit-mandatory-asterisk,
.v2-employee-create-complaint .digit-card-component label .mandatory,
.v2-employee-create-complaint .digit-card-component label .required-asterisk {
  color: var(--color-error, #d4351c) !important;
}

/* Layout: page flows naturally with global scroll. The earlier
 * body-only-scroll variant (constrained wrapper height + form card
 * overflow-y:auto + action bar pinned to wrapper bottom) was reverted
 * after testers flagged the regression in PR #99 (egov/CCRS#538). */
.employee .app-container.ground-container:has(> .v2-employee-create-complaint) {
  padding: 16px 16px 0 16px !important;
}
/* Cap the BoundaryComponent's v2 Select wrappers to the same width
 * the legacy form input wrappers render at (~600px) so the County /
 * Sub-County / Ward dropdowns line up with the rest of the form. */
.v2-employee-create-complaint .digit-card-component > div:has(> [class*="rounded-md"][role="combobox"]),
.v2-employee-create-complaint [class*="boundary"] > div,
.v2-employee-create-complaint .digit-card-component .v2-scope > div {
  max-width: 600px;
}
/* Cap every text-input wrapper on this surface to the same 600px the
 * dropdown triggers use, so Complainant Name / Postal Code don't
 * stretch past the County / Sub-County / Ward column width. */
.v2-employee-create-complaint .digit-card-component .digit-text-input-field {
  max-width: 600px !important;
  width: 100% !important;
}
.v2-employee-create-complaint button[role="combobox"] {
  max-width: 600px !important;
  /* Match the legacy dropdown chrome — white surface, light border,
   * 6px radius — so the County/Sub-County/Ward triggers read identical
   * to the form's other dropdowns. Earlier they showed with a black
   * 1px border + 0 radius (vendor button defaults). */
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 6px !important;
  height: 44px !important;
  min-height: 44px !important;
  padding: 0 12px !important;
  box-shadow: none !important;
}
.v2-employee-create-complaint button[role="combobox"]:hover,
.v2-employee-create-complaint button[role="combobox"]:focus,
.v2-employee-create-complaint button[role="combobox"]:focus-visible {
  border-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  outline: none !important;
}
/* Boundary v2 Select popup — cap width so it doesn't extend past the
 * trigger when the parent .relative wrapper is wider than 600. */
.v2-employee-create-complaint ul[role="listbox"] {
  max-width: 600px !important;
}
/* The v2 Select wrapper (.relative containing the trigger) — also cap
 * so the listbox `width: 100%` resolves to the trigger width instead of
 * the wider parent. */
.v2-employee-create-complaint .digit-card-component .relative {
  max-width: 600px;
}
.v2-employee-create-complaint .digit-card-component {
  margin-bottom: 0 !important;
}
/* Action bar — sits naturally below the form card. Transparent bg so
 * the page surface (#eee) shows through; only the Submit button reads
 * as a discrete element. No fixed positioning, no white shelf. */
.v2-employee-create-complaint .digit-action-bar-wrap,
.v2-employee-create-complaint form .digit-action-bar-wrap {
  position: static !important;
  bottom: auto !important;
  background-color: transparent !important;
  border-top: 0 !important;
  box-shadow: none !important;
  width: auto !important;
  height: auto !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 12px 0 0 0 !important;
  display: flex !important;
  justify-content: flex-end !important;
}
/* Submit button — match the citizen v2 Next/Submit (yellow bg, dark
 * text, 6px radius, 10px 24px padding, weight 600, no underline). */
.v2-employee-create-complaint .digit-submit-bar,
.v2-employee-create-complaint .digit-formcomposer-submitbar,
.v2-employee-create-complaint button.digit-submit-bar,
.v2-employee-create-complaint button[class*="submit-bar"] {
  background-color: var(--color-button-primary-bg-default, var(--color-primary-2, #FEC931)) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  border: 0 !important;
  border-bottom: 0 !important;
  border-radius: 6px !important;
  padding: 10px 24px !important;
  font-size: 0.875rem !important;
  font-weight: 600 !important;
  line-height: 1.25 !important;
  height: 40px !important;
  min-height: 40px !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  box-shadow: none !important;
  transition: background-color 0.15s ease-out !important;
}
.v2-employee-create-complaint .digit-submit-bar:hover,
.v2-employee-create-complaint .digit-formcomposer-submitbar:hover,
.v2-employee-create-complaint button.digit-submit-bar:hover,
.v2-employee-create-complaint button[class*="submit-bar"]:hover {
  background-color: var(--color-button-primary-bg-hover, var(--color-primary-2, #E6B800)) !important;
  box-shadow: none !important;
  transform: none !important;
}
.v2-employee-create-complaint .digit-submit-bar h2,
.v2-employee-create-complaint .digit-button-label,
.v2-employee-create-complaint button[class*="submit-bar"] h2 {
  color: var(--color-text-primary, #0B0C0C) !important;
  font-size: 0.875rem !important;
  font-weight: 600 !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  margin: 0 !important;
}

/* Legacy form dropdowns (`.digit-dropdown-employee-select-wrap` +
 * .digit-dropdown-master / -master-active) inside the create-complaint
 * card — re-skin them so they read like the v2 Select trigger (44px
 * height, light border, max-width matching other inputs, lighter
 * placeholder colour, yellow tint on hovered options). The data
 * layer (FormComposerV2 dropdown model) is untouched. */
.v2-employee-create-complaint .digit-dropdown-employee-select-wrap,
.v2-employee-create-complaint .digit-dropdown-master,
.v2-employee-create-complaint .digit-dropdown-master-active,
.v2-employee-create-complaint .digit-dropdown-select-wrap {
  height: 44px !important;
  min-height: 44px !important;
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 0.375rem !important;
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  transition: border-color 0.15s ease-out !important;
  max-width: 600px !important;
  width: 100% !important;
  box-shadow: none !important;
  padding: 0 12px !important;
  display: flex !important;
  align-items: center !important;
}
.v2-employee-create-complaint .digit-dropdown-employee-select-wrap:hover,
.v2-employee-create-complaint .digit-dropdown-employee-select-wrap:focus-within,
.v2-employee-create-complaint .digit-dropdown-master:hover,
.v2-employee-create-complaint .digit-dropdown-master-active,
.v2-employee-create-complaint .digit-dropdown-master-active:hover {
  border-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}
.v2-employee-create-complaint .digit-dropdown-employee-select-wrap input[type="text"],
.v2-employee-create-complaint .digit-dropdown-master input[type="text"],
.v2-employee-create-complaint .digit-dropdown-master-active input[type="text"] {
  border: 0 !important;
  background: transparent !important;
  outline: none !important;
  height: 100% !important;
  font-size: 1rem !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  padding: 0 !important;
}
/* Vendor wraps the input in `.digit-dropdown-select` which has its own
 * 1px border — that's what produced the visible double-border around
 * each dropdown. Strip it so only the outer wrapper border remains. */
.v2-employee-create-complaint .digit-dropdown-employee-select-wrap .digit-dropdown-select,
.v2-employee-create-complaint .digit-dropdown-master .digit-dropdown-select,
.v2-employee-create-complaint .digit-dropdown-master-active .digit-dropdown-select,
.v2-employee-create-complaint .digit-dropdown-select {
  border: 0 !important;
  outline: none !important;
  background: transparent !important;
  width: 100% !important;
  height: 100% !important;
  padding: 0 !important;
  display: flex !important;
  align-items: center !important;
}
/* Match the v2 Select's chevron — vendor renders a filled triangle at
 * 24×24 (`M7 10L12 15L17 10H7Z`); shrink it to 16×16 with the same
 * secondary text colour the v2 ChevronDown uses, so the legacy and
 * v2 dropdowns visually read identical at the trigger. */
.v2-employee-create-complaint .digit-dropdown-employee-select-wrap > svg,
.v2-employee-create-complaint .digit-dropdown-master > svg,
.v2-employee-create-complaint .digit-dropdown-master-active > svg {
  width: 16px !important;
  height: 16px !important;
  flex-shrink: 0;
}
.v2-employee-create-complaint .digit-dropdown-employee-select-wrap > svg path,
.v2-employee-create-complaint .digit-dropdown-master > svg path,
.v2-employee-create-complaint .digit-dropdown-master-active > svg path {
  fill: var(--color-text-secondary, #6B7280) !important;
}
.v2-employee-create-complaint .digit-dropdown-employee-select-wrap input::placeholder,
.v2-employee-create-complaint .digit-dropdown-master input::placeholder,
.v2-employee-create-complaint .digit-dropdown-master-active input::placeholder {
  color: var(--color-text-secondary, #6B7280) !important;
  opacity: 1 !important;
}
/* Dropdown popup option list */
.v2-employee-create-complaint .digit-dropdown-employee-select-wrap-active,
.v2-employee-create-complaint .digit-dropdown-options-card,
.v2-employee-create-complaint .digit-employee-select-wrap--menu,
.v2-employee-create-complaint [class*="dropdown"] [class*="options"] {
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 0.375rem !important;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08) !important;
}
/* Dropdown popup option items — yellow tint on hover/active row */
.v2-employee-create-complaint .digit-dropdown-item,
.v2-employee-create-complaint [class*="dropdown-item"] {
  padding: 8px 12px !important;
  font-size: 0.875rem !important;
}
.v2-employee-create-complaint .digit-dropdown-item:hover,
.v2-employee-create-complaint .digit-dropdown-item.selected,
.v2-employee-create-complaint .digit-dropdown-item.active,
.v2-employee-create-complaint [class*="dropdown-item"]:hover {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}

/* Complainant phone-number input — left-side prefix tinted with the
 * theme yellow (`--color-primary-selected-bg` #FFF4D7) and brand-color
 * text, matching the citizen login phone input. The legacy MobileNumber
 * atom renders the prefix as `<button class="digit-prefix">+254</button>`
 * inside `.input-container`; older surfaces use
 * `.digit-text-input-field.prefix` or `.component-in-front`. Cover all
 * three so the rule fires regardless of which atom is in use. */
/* Only the prefix BUTTON gets the yellow tint — not the wrapper,
 * because painting `.digit-text-input-field.prefix` (the wrapper)
 * yellow leaves the inner input area looking yellow too. The
 * unified `.digit-text-input-field` rule keeps the wrapper bg
 * white; the inner `.digit-prefix` button gets the yellow chip
 * with a 1px right separator from the unified-input block. */
.v2-employee-create-complaint button.digit-prefix,
.v2-employee-create-complaint .digit-prefix,
.v2-employee-create-complaint .digit-mobile-number-container .prefix,
.v2-employee-create-complaint .component-in-front {
  color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
  font-weight: 600 !important;
  cursor: default !important;
}
/* Lighten the phone input's vendor-default `1px solid rgb(90, 90, 90)`
 * so it visually matches the yellow prefix chip and the v2 inputs
 * around it. */
.v2-employee-create-complaint .digit-mobile-number-container .digit-employeeCard-input,
.v2-employee-create-complaint .input-container input[type="text"] {
  border: 1px solid var(--color-border, #d6d5d4) !important;
}

/* Citizen topbar logo — vendor ships `.navbar img { height: 24px;
 * min-width: 78px }` for the wordmark in `.hambuger-back-wrapper`. At
 * 24px on a 56px+ topbar it reads small and disconnected from the
 * surrounding chrome. Bump the logo to 32px and let width auto so the
 * wordmark keeps its native aspect ratio.
 *
 * The navbar itself is pinned to its original 56px (8px top/bottom
 * padding around the 32px logo + 16-line-height controls) so the bigger
 * logo doesn't make the entire topbar taller — that previously knocked
 * the v2 layout calc (--v2-topbar-height: 82px) and pushed the page
 * footer past the viewport. Pinning here keeps the topbar visually
 * unchanged in height while the wordmark itself reads larger. */
.citizen .navbar {
  height: 56px !important;
  min-height: 56px !important;
  padding-top: 8px !important;
  padding-bottom: 8px !important;
  align-items: center;
}
.citizen .navbar img.city,
.citizen .hambuger-back-wrapper img.city {
  height: 32px !important;
  min-width: 0 !important;
  max-width: 160px !important;
  width: auto !important;
}

/* 4. Buttons — smooth transitions, depth on hover, tactile press feedback.
 *    No color changes (those come from --color-button-* vars). */
button, .digit-button, .digit-btn,
button.digit-submit-bar, button[class*="submit-bar"],
input[type="submit"], input[type="button"] {
  transition: background-color 0.15s ease-out,
              box-shadow 0.15s ease-out,
              color 0.1s ease-out,
              transform 0.05s ease-out;
}
/* Submit/CTA polish — vendor ships `padding: 1px 24px` (vertical near-zero)
 * with `border-radius: 0` and `font-weight: 400`. The primary CTA needs
 * more presence: vertical breathing room, slight rounding, and a heavier
 * weight. Color and bg still come from the v3 button-primary-* vars.
 * Flex centering ensures the label sits in the middle of the box
 * (vendor ships `display:block` so text otherwise sticks to the top).
 * Height 40px (not 44) matches the form filter dropdowns next to it
 * so the search button aligns vertically with the input row. */
button.digit-submit-bar, button[class*="submit-bar"],
.digit-submit-bar, [class*="submit-bar"] {
  padding: 8px 28px !important;
  font-weight: 600 !important;
  border-radius: 4px !important;
  font-size: 14px;
  letter-spacing: 0.02em;
  min-height: 40px;
  height: 40px;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}
/* Search-row alignment — wrapper around the Search button has
 * `padding-top: 8px` + `margin-top: 32px` for ~40px of top offset.
 * The filter dropdowns next to it have a label (~20px) + 4px gap
 * above their 40px input — the input top sits ~24px below the row
 * top. Match the button's top offset to the input's top by trimming
 * the wrapper's margin-top to 24px and zeroing padding-top. */
/* Filter wrappers next to the search button have label (20px) + gap
 * above their 40px input — input top sits ~40px below the row top.
 * Match that offset on the button wrapper, use align-items:center +
 * fixed height matching the input (40px) so both children — the
 * "Clear Search" label AND the Search button — center on the SAME
 * Y line that the dropdown text baseline sits on. */
.search-button-wrapper.search {
  padding-top: 0 !important;
  margin-top: 40px !important;
  height: 40px !important;
  align-items: center !important;
}

/* Bare `<button>` (e.g. citizen Edit-Profile Save) ships with inline
 * `background-color: rgb(200,76,14)` (hardcoded DIGIT orange) + 1px-tall
 * `padding: 1px 6px` + `border-bottom: 1px solid black`. !important is
 * required because inline styles have specificity 1,0,0,0. The button
 * has no class attribute and no `type` attribute either (default is
 * "submit" via property), so the selector targets ANY unclassed button.
 * Route through --color-button-primary-* so MDMS (Kenya yellow primary-2)
 * actually drives this CTA. */
/* Match text CTA buttons only — exclude buttons whose direct child is
 * an icon (SVG/IMG), which are treated as icon-buttons (avatar upload,
 * close-X, etc.) and shouldn't get filled-button styling.
 *
 * Mirror the visual styling of `.digit-button-primary` (which the
 * "Next" button uses via its inner `<h2 class="digit-button-label">`):
 * white bold text on yellow primary-2 bg. Note: `--color-button-primary-text`
 * is set to #204F37 (green) by current MDMS — but the inner h2 of
 * .digit-button-primary hardcodes color:#fff, so the Next button reads
 * as white-on-yellow. We hardcode white here too so Save matches Next
 * exactly. Width capped + right margin so the button doesn't run flush
 * to the card edge when right-aligned. */
button:not([class]):not(:has(> svg)):not(:has(> img)) {
  background-color: var(--color-button-primary-bg-default, var(--color-primary-2, #FEC931)) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  padding: 10px 28px !important;
  font-weight: 500 !important;
  border-radius: 4px !important;
  border-bottom: 0 !important;
  border: 0 !important;
  font-size: 16px !important;
  min-height: 44px !important;
  max-width: 180px !important;
  width: auto !important;
  margin-right: 24px !important;
  letter-spacing: 0.02em;
  cursor: pointer;
  transition: background-color 0.15s ease-out, box-shadow 0.15s ease-out;
}
button:not([class]):not(:has(> svg)):not(:has(> img)):hover {
  background-color: var(--color-button-primary-bg-hover, #E6B800) !important;
  box-shadow: 0 1px 3px 0 rgba(16, 24, 40, 0.10);
}

/* Icon-button counterpart: bare `<button>` whose only child is an SVG
 * or IMG (e.g. profile-pic camera/upload affordance) renders with
 * browser-default light-grey bg #EFEFEF — clashes with the surrounding
 * white card. Strip the bg + border so just the icon glyph shows. */
button:not([class]):has(> svg),
button:not([class]):has(> img) {
  background-color: transparent !important;
  border: 0 !important;
  padding: 0 !important;
  cursor: pointer;
}
/* Hover shadow only on FILLED buttons (primary, secondary, submit-bar)
 * — text-style tertiary buttons should hover with color/underline,
 * not a card-like shadow lift. Excludes the various class-name spellings
 * vendor uses: digit-button-teritiary (typo) / digit-button-tertiary /
 * teritiary / tertiary / link / button-link. */
button:not(:disabled):not([class*="teritiary"]):not([class*="tertiary"]):not([class*="button-link"]):not(.digit-button-link):hover,
.digit-button:not(:disabled):not([class*="teritiary"]):not([class*="tertiary"]):not([class*="link"]):hover,
.digit-btn:not(:disabled):not([class*="teritiary"]):not([class*="tertiary"]):not([class*="link"]):hover {
  box-shadow: 0 1px 3px 0 rgba(16, 24, 40, 0.10),
              0 1px 2px 0 rgba(16, 24, 40, 0.06);
}
button:active:not(:disabled):not([class*="teritiary"]):not([class*="tertiary"]):not([class*="button-link"]),
.digit-button:active:not(:disabled):not([class*="teritiary"]):not([class*="tertiary"]):not([class*="link"]),
.digit-btn:active:not(:disabled):not([class*="teritiary"]):not([class*="tertiary"]):not([class*="link"]) {
  transform: translateY(0.5px);
  box-shadow: 0 1px 1px 0 rgba(16, 24, 40, 0.04);
}

/* 5. Headings — Figma uses heavy weight + tight line-height + slight negative
 *    letter-spacing for cleaner, more confident hierarchy. Color routes
 *    through --color-text-heading so kenya-green's primary-1 (#204F37 dark
 *    green) drives all heading tags by default — bare h1-h6 included.
 *    Block 39 below refines per-level size/weight; this block sets the
 *    shared color + base typographic feel. */
h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6,
.digit-card-header, .digit-section-header,
.card-sub-header, .employee-card-sub-header,
.title-text,
[class*="page-heading"], [class*="card-title"], [class*="card-header"],
[class*="card-sub-header"] {
  color: var(--color-text-heading, var(--color-primary-1, #204F37));
  line-height: 1.25;
  letter-spacing: -0.01em;
  font-feature-settings: "ss01", "cv11";
}
/* Vendor's `.card .card-sub-header` (digit-ui-css.css) sets color to
 * --color-text-primary (gray) at specificity 0,2,0 — beats the bare
 * .card-sub-header rule above. Match specificity + !important. */
html .card .card-sub-header,
html .card .employee-card-sub-header {
  color: var(--color-text-heading, var(--color-primary-1, #204F37)) !important;
}

/* 6. Inputs — smooth focus transitions, brand-aware focus ring beyond just
 *    the border (subtle wash that signals affordance without being loud). */
input.digit-input, input.digit-form-input, .digit-text-input input,
input[type="text"]:not(.no-style),
input[type="email"], input[type="password"], input[type="number"],
input[type="search"], input[type="tel"],
textarea, textarea.digit-textarea,
.digit-employee-form-field input,
select, .digit-select {
  transition: border-color 0.15s ease-out, box-shadow 0.15s ease-out;
}
input:focus-visible, textarea:focus-visible, select:focus-visible {
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-input-border-focus, #c84c0e) 18%, transparent);
}

/* 7. Back-link styling — Figma: green chevron + green label, no border,
 *    underline-on-hover. The deployed app uses several class names;
 *    cover the common ones. */
.digit-back-button, .back-button, .back-arrow,
[class*="BackLink"], [class*="backlink"],
.digit-employee-back-button,
.back-btn2, .back-wrapper, .hambuger-back-wrapper {
  color: var(--color-button-tertiary-text, var(--color-primary-1, #204F37));
  font-weight: 500;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  transition: color 0.15s ease-out;
}
.digit-back-button:hover, .back-button:hover,
[class*="BackLink"]:hover,
.back-btn2:hover, .back-wrapper:hover, .hambuger-back-wrapper:hover {
  color: var(--color-link-hover, #003078);
  text-decoration: underline;
  text-underline-offset: 2px;
}
.digit-back-button svg, .back-button svg,
[class*="BackLink"] svg path,
.back-btn2 svg, .back-wrapper svg, .hambuger-back-wrapper svg {
  fill: currentColor;
}
/* SVG with fill="none" on inner shape rects (viewbox padding) — keep
 * those transparent; only color the actual icon paths. */
.back-btn2 svg path:not([fill="none"]),
.back-wrapper svg path:not([fill="none"]),
.hambuger-back-wrapper svg path:not([fill="none"]) {
  fill: currentColor;
}

/* 8. Anchors inside content cards — Figma: list-item-style links read as
 *    primary-1 green, NOT primary-2 yellow. Upstream rule
 *    `.CitizenHomeCard .links a { color: var(--color-primary-main) !important }`
 *    has specificity (0,2,1) with !important, so a single-class selector
 *    `.CitizenHomeCard a` (0,1,1) loses even with !important. Compound
 *    selectors below match or exceed (0,2,1) so they win cascade-tie
 *    against upstream. `html` prefix on the catch-all is the safety net
 *    for any wrapper variant we haven't enumerated. */
html .CitizenHomeCard a,
html [class*="HomeCard"] a,
html [class*="home-card"] a,
html .citizen-home-card a,
html .digit-card a, html .employeeCard a,
html .complaint-container a,
html .card-container a, html .digit-card-container a,
.CitizenHomeCard .links a, .CitizenHomeCard .linksWrapper a,
[class*="HomeCard"] .links a, [class*="HomeCard"] .linksWrapper a,
.digit-card .links a, .employeeCard .links a {
  color: var(--color-button-tertiary-text, var(--color-primary-1, #204F37)) !important;
}
html .CitizenHomeCard a:hover,
html [class*="HomeCard"] a:hover,
html [class*="home-card"] a:hover,
html .citizen-home-card a:hover,
html .digit-card a:hover, html .employeeCard a:hover,
.CitizenHomeCard .links a:hover, .CitizenHomeCard .linksWrapper a:hover,
[class*="HomeCard"] .links a:hover {
  color: var(--color-link-hover, #003078) !important;
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* 9. Sidebar — Figma: dark green bg, dim white text by default, brand-tinted
 *    hover wash, yellow selected pill. Selected styling already handled by
 *    earlier sidebar-selected-* rules; this adds the rest. */
.sidebar, [class*="side-nav"], [class*="sidenav"] {
  color: var(--color-sidebar-text-default, #D1D5DB);
}
.sidebar a:not(.active):not(.selected),
.sidebar > div:not(.active):not(.selected),
[class*="sidenav"] a:not(.active):not(.selected),
[class*="sidenav"] > div:not(.active):not(.selected) {
  color: var(--color-sidebar-text-default, #D1D5DB);
  transition: color 0.15s ease-out, background-color 0.15s ease-out;
}
.sidebar a:not(.active):not(.selected):hover,
[class*="sidenav"] a:not(.active):not(.selected):hover {
  color: var(--color-sidebar-hover-text, var(--color-primary-1, #204F37));
  background-color: var(--color-sidebar-hover-bg, var(--color-primary-1-bg, #FFF4D6));
}

/* 10. Focus rings — universal brand-aware outline for keyboard accessibility.
 *     Tighter than Tailwind's default; uses primary-1 (the more saturated
 *     brand color) for high contrast. */
*:focus-visible:not(input):not(textarea):not(select) {
  outline: 2px solid var(--color-primary-1, #c84c0e);
  outline-offset: 2px;
  border-radius: 2px;
}

/* 11. Text selection — soft brand-tinted highlight (was browser default
 *     blue). Reads better on light surfaces. */
::selection {
  background-color: var(--color-primary-1-bg, #FFF4D7);
  color: var(--color-primary-1, #c84c0e);
}

/* 12. Tooltips — refined corners, soft shadow. Color comes from
 *     --color-tooltip-* set by v3 expansion. */
.digit-tooltip, .digit-tooltip-content,
[role="tooltip"], .tippy-box, .tippy-content,
.tooltip-content, [class*="tooltip-text"] {
  border-radius: 6px !important;
  font-size: 13px;
  font-weight: 500;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.08),
              0 2px 4px -2px rgba(0, 0, 0, 0.04) !important;
}

/* 13. Tables — uppercased compact headers per Figma's table system. Padding
 *     left to upstream (avoid layout shifts from changing td height). */
table.digit-table thead th, .digit-data-table thead th,
table.digit-table-main thead th {
  font-weight: 600;
  font-size: 12px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
table.digit-table tbody tr, .digit-data-table tbody tr,
table.digit-table-main tbody tr {
  transition: background-color 0.1s ease-out;
}

/* 14. Body text smoothing — sharp, predictable rendering on retina + LCD
 *     subpixel antialiasing fallback for non-retina. */
body, html {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

/* 15. Disabled state — Figma uses muted gray bg + gray text consistently.
 *     Don't recolor (vars handle that), refine cursor + opacity feel. */
button:disabled, input:disabled, .digit-button:disabled,
[disabled], [aria-disabled="true"] {
  cursor: not-allowed;
  opacity: 0.85;
}

/* 16. Cards inside grids — generous gutter via column-gap (no margin
 *     surgery). Many home cards sit on a flex/grid parent that already
 *     has gap; this is a safety net for older containers. */
[class*="home-card-container"] > .digit-card,
[class*="home-card-container"] > .citizen-home-card,
.complaint-container > .digit-card {
  margin-bottom: 16px;
}

/* ─── v3 polish layer — deeper component pass ─────────────────────────────
 *
 * Adapts Figma's mobile design language to desktop-specific surfaces it
 * doesn't explicitly cover: dropdowns, modals, pills, tabs, pagination,
 * checkboxes/radios, toggles, date pickers, scrollbars, skeleton loaders,
 * empty states, breadcrumbs, search bars.
 *
 * Every color references a v3 CSS variable so a tenant theme cascades
 * through. Same scope discipline as Block 1–16: no padding/margin/width
 * edits that risk layout regressions.
 */

/* 17. Form labels — Figma: ~12-14px, medium-weight, distinct gray, sits
 *     above input with consistent breathing room. */
.digit-card-label,
.digit-form-field label,
label.digit-form-field-label,
.digit-text-input label,
form label:not(.digit-radio-label):not(.digit-checkbox-label) {
  color: var(--color-input-label, #4B5563);
  font-weight: 500;
  font-size: 14px;
  letter-spacing: 0;
  line-height: 1.4;
}

/* 18. Required asterisk — Figma: error-red, slight kern offset from label
 *     text. Applies to the `<sup>` or `*` span next to mandatory-field labels. */
.digit-form-field label .mandatory,
.digit-form-field label sup,
.digit-form-field label .required-mark,
label .required, label sup,
[class*="mandatory"] {
  color: var(--color-status-error-text, var(--color-error, #D4351C));
  font-weight: 600;
  margin-left: 2px;
}

/* 19. Helper text — Figma: smaller, tertiary gray, relaxed line-height. */
.digit-form-helper-text, .digit-helper-text,
.digit-form-field-helper, .digit-input-helper,
.field-helper, .helper-text,
[class*="helper-text"] {
  color: var(--color-input-helper, #6B7280);
  font-size: 12px;
  line-height: 1.4;
  margin-top: 4px;
}

/* 20. Dropdown / select — Figma: white bg, light border, chevron-right
 *     glyph, brand-color focus. Custom-rendered DIGIT dropdowns use a
 *     shared shell class. */
.digit-dropdown, .digit-select,
.digit-select-wrap, .digit-select-input,
[class*="custom-select-wrap"] {
  background-color: var(--color-input-bg, #FFFFFF);
  border: 1px solid var(--color-input-border-default, var(--color-input-border, #D1D5DB));
  border-radius: 4px;
  transition: border-color 0.15s ease-out, box-shadow 0.15s ease-out;
}
.digit-dropdown:hover, .digit-select:hover {
  border-color: var(--color-input-border-focus, var(--color-primary-1, #c84c0e));
}
.digit-dropdown[aria-expanded="true"],
.digit-select[aria-expanded="true"],
.digit-dropdown:focus-within,
.digit-select:focus-within {
  border-color: var(--color-input-border-focus, var(--color-primary-1, #c84c0e));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-input-border-focus, #c84c0e) 18%, transparent);
}
/* Dropdown options panel */
.digit-dropdown-menu, .digit-select-menu,
.digit-dropdown-options, .digit-options-card,
[class*="options-card"], [class*="dropdown-list"] {
  background-color: var(--color-page-bg, #FFFFFF);
  border: 1px solid var(--color-card-border, #E5E7EB);
  border-radius: 6px;
  box-shadow: 0 6px 16px -4px rgba(16, 24, 40, 0.10),
              0 4px 6px -2px rgba(16, 24, 40, 0.05);
  overflow: hidden;
}
.digit-dropdown-item, .digit-select-option,
[class*="dropdown-list"] > *,
[class*="options-card"] > *:not(.digit-search) {
  transition: background-color 0.1s ease-out, color 0.1s ease-out;
}
.digit-dropdown-item:hover, .digit-select-option:hover,
[class*="dropdown-list"] > *:hover,
.digit-dropdown-item.keyChange, .digit-select-option.selected {
  background-color: var(--color-primary-selected-bg, var(--color-primary-1-bg, #FFF4D7));
  color: var(--color-primary-1, #204F37);
}

/* 21. Modal / dialog — Figma: subtle backdrop overlay, panel with rounded
 *     corners and elevation shadow, comfortable header spacing. */
.digit-popup-wrap, .digit-modal-wrap, .digit-dialog-wrap,
[role="dialog"], [class*="modal-wrap"],
[class*="popup-overlay"], .digit-dialog-backdrop {
  background-color: rgba(16, 24, 40, 0.45);
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
}
.digit-popup, .digit-modal, .digit-dialog,
[class*="popup-children-wrap"], [class*="modal-content"] {
  background-color: var(--color-page-bg, #FFFFFF);
  border: 1px solid var(--color-card-border, #E5E7EB);
  border-radius: 8px;
  box-shadow: 0 20px 25px -5px rgba(16, 24, 40, 0.10),
              0 10px 10px -5px rgba(16, 24, 40, 0.04);
}
.digit-popup-header, .digit-modal-header, .digit-dialog-header,
[class*="popup-heading"] {
  border-bottom: 1px solid var(--color-card-divider, #E5E7EB);
  color: var(--color-text-heading, var(--color-primary-1, #204F37));
}
.digit-popup-close, .digit-modal-close,
[class*="popup-close"], [aria-label="Close"] {
  color: var(--color-text-secondary, #5A5A5A);
  transition: color 0.15s ease-out;
  cursor: pointer;
}
.digit-popup-close:hover, .digit-modal-close:hover,
[aria-label="Close"]:hover {
  color: var(--color-text-primary, var(--color-primary-1, #204F37));
}

/* 22. Status pills / badges — Figma: soft tint bg + bold colored text +
 *     small radius. One pattern per severity, derived from status-* vars. */
.digit-tag, .digit-badge, .digit-status-tag,
.statushighlight, [class*="status-tag"], [class*="badge-"],
.digit-rounded-label, [class*="rounded-label"] {
  border-radius: 12px;
  font-weight: 600;
  font-size: 12px;
  letter-spacing: 0.02em;
  padding: 2px 10px;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  line-height: 1.5;
}
.digit-tag.success, [class*="status-success"], .statushighlight.success {
  background-color: var(--color-status-success-bg, #BAD6C9);
  color: var(--color-status-success-text, var(--color-success, #00703C));
}
.digit-tag.error, [class*="status-error"], .statushighlight.error {
  background-color: var(--color-status-error-bg, #EFC7C1);
  color: var(--color-status-error-text, var(--color-error, #D4351C));
}
.digit-tag.warning, [class*="status-warning"], .statushighlight.warning {
  background-color: var(--color-status-warning-bg, #FFF4D6);
  color: var(--color-status-warning-text, var(--color-warning-dark, #9E5F00));
}
.digit-tag.info, [class*="status-info"], .statushighlight.info {
  background-color: var(--color-status-info-bg, #C7E0F1);
  color: var(--color-status-info-text, var(--color-info-dark, #0057BD));
}

/* 23. Tabs — Figma: underline-style active indicator, smooth color
 *     transition on hover, primary-1 active color. */
.digit-tab, [role="tab"],
.digit-tab-button, [class*="search-tab-head"] {
  color: var(--color-text-secondary, #5A5A5A);
  font-weight: 500;
  border: none;
  background: transparent;
  border-bottom: 2px solid transparent;
  transition: color 0.15s ease-out, border-color 0.15s ease-out;
  cursor: pointer;
}
.digit-tab:hover, [role="tab"]:hover {
  color: var(--color-primary-1, #204F37);
}
.digit-tab.selected, .digit-tab[aria-selected="true"],
[role="tab"][aria-selected="true"],
[class*="search-tab-head-selected"] {
  color: var(--color-primary-1, #204F37);
  border-bottom-color: var(--color-primary-2, var(--color-primary-main, #FEC931));
  font-weight: 600;
}

/* 24. Breadcrumbs — Figma: gray separator, tertiary text, last item bold.
 *     Standard ARIA + DIGIT class names. */
.digit-breadcrumb, [aria-label="breadcrumb"],
[class*="breadcrumb"] {
  color: var(--color-text-secondary, #5A5A5A);
  font-size: 13px;
}
.digit-breadcrumb a, [class*="breadcrumb"] a {
  color: var(--color-button-tertiary-text, var(--color-primary-1, #204F37));
  text-decoration: none;
  transition: color 0.15s ease-out;
}
.digit-breadcrumb a:hover, [class*="breadcrumb"] a:hover {
  text-decoration: underline;
  text-underline-offset: 2px;
}
.digit-breadcrumb-separator,
[class*="breadcrumb"] [class*="separator"],
[class*="breadcrumb"] > span:not(:first-child):not(:last-child) {
  color: var(--color-text-disabled, var(--color-grey-disabled, #9CA3AF));
  margin: 0 8px;
}
.digit-breadcrumb [aria-current="page"],
[class*="breadcrumb"] [aria-current="page"] {
  color: var(--color-text-primary, #363636);
  font-weight: 600;
}

/* 25. Pagination — Figma: numbered pills, active = primary-1-bg fill +
 *     primary-1 text + bold; chevrons gray with hover. */
.digit-pagination, [class*="pagination"] {
  font-weight: 500;
}
.digit-pagination-item, [class*="pagination"] > button,
[class*="pagination"] > a {
  color: var(--color-text-secondary, #5A5A5A);
  border-radius: 4px;
  min-width: 32px;
  min-height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background-color 0.15s ease-out, color 0.15s ease-out;
}
.digit-pagination-item:hover, [class*="pagination"] > button:hover {
  background-color: var(--color-primary-1-bg, var(--color-primary-selected-bg, #FFF4D7));
  color: var(--color-primary-1, #204F37);
}
.digit-pagination-item.active, .digit-pagination-item.selected,
[class*="pagination"] > button[aria-current="page"],
[class*="pagination"] [aria-current="true"] {
  background-color: var(--color-primary-1-bg, #FFF4D7);
  color: var(--color-primary-1, #204F37);
  font-weight: 700;
}
.digit-pagination-item:disabled, .digit-pagination-item[aria-disabled="true"] {
  color: var(--color-text-disabled, #9CA3AF);
  cursor: not-allowed;
  opacity: 0.7;
}

/* 26. Toast notifications — Figma: solid color accent on left, soft tint
 *     bg, shadow, smooth slide-in. Severity comes from status-* vars.
 *     Inner `.toast-label` + svg need explicit selectors because vendor's
 *     `.digit-toast-success .toast-label { color: #ffffff }` is more
 *     specific than the parent rule and would render the message white
 *     on our soft-tint bg (closes egovernments/CCRS#498). */
.digit-toast, [class*="toast"]:not([class*="toast-bar"]),
.digit-snackbar, [role="status"][class*="alert"] {
  border-radius: 6px;
  border-left: 4px solid var(--color-primary-1, #204F37);
  box-shadow: 0 8px 16px -4px rgba(16, 24, 40, 0.10),
              0 4px 8px -2px rgba(16, 24, 40, 0.06);
  padding: 12px 16px;
}
.digit-toast.success, [class*="toast"][class*="success"],
[class*="toast"][data-status="success"] {
  background-color: var(--color-status-success-bg, #BAD6C9);
  border-left-color: var(--color-status-success-border, var(--color-success, #00703C));
  color: var(--color-status-success-text, var(--color-success, #00703C));
}
.digit-toast.success .toast-label, [class*="toast"][class*="success"] .toast-label,
.digit-toast.success svg, [class*="toast"][class*="success"] svg,
.digit-toast.success svg path, [class*="toast"][class*="success"] svg path {
  color: var(--color-status-success-text, var(--color-success, #00703C)) !important;
  fill: var(--color-status-success-text, var(--color-success, #00703C)) !important;
}
.digit-toast.error, [class*="toast"][class*="error"],
[class*="toast"][data-status="error"] {
  background-color: var(--color-status-error-bg, #EFC7C1);
  border-left-color: var(--color-status-error-border, var(--color-error, #D4351C));
  color: var(--color-status-error-text, var(--color-error, #D4351C));
}
.digit-toast.error .toast-label, [class*="toast"][class*="error"] .toast-label,
.digit-toast.error svg, [class*="toast"][class*="error"] svg,
.digit-toast.error svg path, [class*="toast"][class*="error"] svg path {
  color: var(--color-status-error-text, var(--color-error, #D4351C)) !important;
  fill: var(--color-status-error-text, var(--color-error, #D4351C)) !important;
}
.digit-toast.warning, [class*="toast"][class*="warning"] {
  background-color: var(--color-status-warning-bg, #FFF4D6);
  border-left-color: var(--color-status-warning-border, #9E5F00);
  color: var(--color-status-warning-text, #9E5F00);
}
.digit-toast.warning .toast-label, [class*="toast"][class*="warning"] .toast-label,
.digit-toast.warning svg, [class*="toast"][class*="warning"] svg,
.digit-toast.warning svg path, [class*="toast"][class*="warning"] svg path {
  color: var(--color-status-warning-text, #9E5F00) !important;
  fill: var(--color-status-warning-text, #9E5F00) !important;
}
.digit-toast.info, [class*="toast"][class*="info"] {
  background-color: var(--color-status-info-bg, #C7E0F1);
  border-left-color: var(--color-status-info-border, #0057BD);
  color: var(--color-status-info-text, #0057BD);
}
.digit-toast.info .toast-label, [class*="toast"][class*="info"] .toast-label,
.digit-toast.info svg, [class*="toast"][class*="info"] svg,
.digit-toast.info svg path, [class*="toast"][class*="info"] svg path {
  color: var(--color-status-info-text, #0057BD) !important;
  fill: var(--color-status-info-text, #0057BD) !important;
}

/* 27. Custom checkbox — Figma: 16px square with subtle gray unchecked
 *     border; checked fills with primary-1, white tick; brand-aware focus. */
input[type="checkbox"]:not([class*="default-style"]) {
  appearance: none;
  -webkit-appearance: none;
  width: 16px; height: 16px;
  border: 1.5px solid var(--color-input-border-default, #D1D5DB);
  border-radius: 3px;
  background-color: var(--color-input-bg, #FFFFFF);
  display: inline-block;
  position: relative;
  cursor: pointer;
  transition: background-color 0.12s ease-out, border-color 0.12s ease-out;
  vertical-align: middle;
  flex-shrink: 0;
}
input[type="checkbox"]:not([class*="default-style"]):hover {
  border-color: var(--color-primary-1, #204F37);
}
input[type="checkbox"]:not([class*="default-style"]):checked {
  background-color: var(--color-primary-1, #204F37);
  border-color: var(--color-primary-1, #204F37);
}
input[type="checkbox"]:not([class*="default-style"]):checked::after {
  content: "";
  position: absolute;
  left: 4px; top: 1px;
  width: 4px; height: 8px;
  border: solid var(--color-page-bg, #FFFFFF);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
input[type="checkbox"]:not([class*="default-style"]):focus-visible {
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary-1, #204F37) 22%, transparent);
}

/* 28. Custom radio — same pattern, circular, primary-1 dot when checked. */
input[type="radio"]:not([class*="default-style"]) {
  appearance: none;
  -webkit-appearance: none;
  width: 16px; height: 16px;
  border: 1.5px solid var(--color-input-border-default, #D1D5DB);
  border-radius: 50%;
  background-color: var(--color-input-bg, #FFFFFF);
  display: inline-block;
  position: relative;
  cursor: pointer;
  transition: background-color 0.12s ease-out, border-color 0.12s ease-out;
  vertical-align: middle;
  flex-shrink: 0;
}
input[type="radio"]:not([class*="default-style"]):hover {
  border-color: var(--color-primary-1, #204F37);
}
input[type="radio"]:not([class*="default-style"]):checked {
  border-color: var(--color-primary-1, #204F37);
}
input[type="radio"]:not([class*="default-style"]):checked::after {
  content: "";
  position: absolute;
  left: 3px; top: 3px;
  width: 8px; height: 8px;
  border-radius: 50%;
  background-color: var(--color-primary-1, #204F37);
}
input[type="radio"]:not([class*="default-style"]):focus-visible {
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary-1, #204F37) 22%, transparent);
}

/* 29. Toggle switches — Figma: rounded pill track, white thumb, smooth
 *     animation, primary-1 fill when on. */
.digit-toggle, [class*="toggle-switch"], [role="switch"] {
  background-color: var(--color-grey-disabled, #C5C5C5);
  border-radius: 999px;
  transition: background-color 0.18s ease-out;
  cursor: pointer;
}
.digit-toggle.on, .digit-toggle[aria-checked="true"],
[role="switch"][aria-checked="true"] {
  background-color: var(--color-primary-1, #204F37);
}
.digit-toggle .digit-switch-shape-on,
.digit-toggle [class*="thumb"],
[role="switch"] [class*="thumb"] {
  background-color: var(--color-page-bg, #FFFFFF);
  border-radius: 50%;
  transition: transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1),
              box-shadow 0.18s ease-out;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.20);
}

/* 30. Avatars — Figma: solid circle with initial, primary-1 bg or surface
 *     contrast. */
.digit-avatar, [class*="avatar"]:not([class*="avatar-text"]) {
  border-radius: 50%;
  background-color: var(--color-primary-1, #204F37);
  color: var(--color-header-text, #FFFFFF);
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  font-feature-settings: "tnum";
}

/* 31. Stepper / wizard indicators — Figma: completed step has primary-1
 *     fill + check, current step has primary-1 outline, future is gray. */
.digit-stepper-item, [class*="stepper-item"], [class*="step-indicator"] {
  color: var(--color-text-secondary, #5A5A5A);
  transition: color 0.15s ease-out;
}
.digit-stepper-item .digit-step-circle,
[class*="step-circle"], [class*="step-marker"] {
  width: 28px; height: 28px;
  border-radius: 50%;
  border: 2px solid var(--color-input-border-default, #D1D5DB);
  background-color: var(--color-page-bg, #FFFFFF);
  color: var(--color-text-secondary, #5A5A5A);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: 600;
  font-size: 12px;
  transition: all 0.18s ease-out;
}
.digit-stepper-item.completed .digit-step-circle,
.digit-stepper-item.complete [class*="step-circle"],
[class*="step-completed"] [class*="step-circle"] {
  background-color: var(--color-primary-1, #204F37);
  border-color: var(--color-primary-1, #204F37);
  color: var(--color-page-bg, #FFFFFF);
}
.digit-stepper-item.active .digit-step-circle,
.digit-stepper-item.current [class*="step-circle"],
[class*="step-current"] [class*="step-circle"] {
  border-color: var(--color-primary-1, #204F37);
  color: var(--color-primary-1, #204F37);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary-1, #204F37) 18%, transparent);
}
.digit-stepper-line, [class*="step-line"], [class*="step-connector"] {
  background-color: var(--color-input-border-default, #D1D5DB);
}
.digit-stepper-line.completed, [class*="step-line"][class*="complete"] {
  background-color: var(--color-primary-1, #204F37);
}

/* 32. Scrollbars — thin rail, subtle thumb, brand-tinted on hover.
 *     Webkit browsers + Firefox via scrollbar-color. */
* {
  scrollbar-width: thin;
  scrollbar-color: var(--color-grey-disabled, #C5C5C5) transparent;
}
*::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}
*::-webkit-scrollbar-track {
  background-color: transparent;
}
*::-webkit-scrollbar-thumb {
  background-color: var(--color-grey-disabled, #C5C5C5);
  border-radius: 4px;
  transition: background-color 0.15s ease-out;
}
*::-webkit-scrollbar-thumb:hover {
  background-color: var(--color-primary-1, #204F37);
}

/* 33. Search bar — Figma: leading search-glyph, clear-X on right, focus
 *     ring. The DIGIT search composer wraps an input + icon. */
.digit-search-bar, .digit-search,
[class*="search-bar"], [class*="search-form"] {
  background-color: var(--color-input-bg, #FFFFFF);
  border: 1px solid var(--color-input-border-default, #D1D5DB);
  border-radius: 6px;
  display: flex;
  align-items: center;
  gap: 8px;
  transition: border-color 0.15s ease-out, box-shadow 0.15s ease-out;
}
.digit-search-bar:focus-within, .digit-search:focus-within {
  border-color: var(--color-input-border-focus, var(--color-primary-1, #204F37));
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-input-border-focus, #c84c0e) 18%, transparent);
}
.digit-search-bar svg, .digit-search svg {
  fill: var(--color-text-secondary, #5A5A5A);
  flex-shrink: 0;
}

/* 34. File dropzone — Figma: dashed border, brand-tinted on drag-over,
 *     centered helper text. */
.digit-upload-area, .digit-drop-area, .drop-area,
[class*="dropzone"], [class*="upload-area"] {
  background-color: var(--color-page-secondary-bg, #FAFAFA);
  border: 2px dashed var(--color-input-border-default, #D1D5DB);
  border-radius: 8px;
  color: var(--color-text-secondary, #5A5A5A);
  transition: border-color 0.15s ease-out, background-color 0.15s ease-out;
  cursor: pointer;
}
.digit-upload-area:hover, .digit-drop-area:hover {
  border-color: var(--color-primary-1, #204F37);
}
.digit-upload-area.active, .digit-drop-area.active,
[class*="dropzone"][class*="active"] {
  border-color: var(--color-primary-1, #204F37);
  background-color: var(--color-primary-1-bg, #FFF4D7);
}

/* 35. Empty states — Figma: centered illustration + helper text + optional
 *     CTA. Don't restructure layout; just refine typography. */
.digit-empty-state, [class*="empty-state"], [class*="no-results"],
.digit-no-result, [class*="NoResultsFound"] {
  color: var(--color-text-secondary, #5A5A5A);
  text-align: center;
}
.digit-empty-state h3, [class*="empty-state"] h3,
[class*="no-results"] h3 {
  color: var(--color-text-primary, #363636);
  font-weight: 600;
  margin-top: 16px;
}

/* 36. Skeleton loaders — soft shimmer over neutral block. Brand-agnostic
 *     (intentionally — should look the same across themes). */
@keyframes digit-skeleton-shimmer {
  0% { background-position: -200px 0; }
  100% { background-position: calc(200px + 100%) 0; }
}
.digit-skeleton, [class*="skeleton"]:not([class*="skeleton-button"]) {
  background-color: var(--color-page-secondary-bg, #FAFAFA);
  background-image: linear-gradient(
    90deg,
    var(--color-page-secondary-bg, #FAFAFA) 0px,
    color-mix(in srgb, var(--color-grey-mid, #EEEEEE) 80%, transparent) 40px,
    var(--color-page-secondary-bg, #FAFAFA) 80px
  );
  background-size: 200px 100%;
  background-repeat: no-repeat;
  border-radius: 4px;
  animation: digit-skeleton-shimmer 1.4s ease-in-out infinite;
}

/* 37. Date picker — Figma: today is primary-1 outline, selected is filled,
 *     range hover is primary-1-bg wash. */
.react-datepicker, [class*="datepicker"]:not([class*="datepicker__input"]) {
  border: 1px solid var(--color-card-border, #E5E7EB) !important;
  border-radius: 8px !important;
  background-color: var(--color-page-bg, #FFFFFF) !important;
  box-shadow: 0 6px 16px -4px rgba(16, 24, 40, 0.10),
              0 4px 6px -2px rgba(16, 24, 40, 0.05);
  font-family: inherit !important;
}
.react-datepicker__header {
  background-color: var(--color-page-secondary-bg, #FAFAFA) !important;
  border-bottom: 1px solid var(--color-card-border, #E5E7EB) !important;
}
.react-datepicker__current-month,
.react-datepicker__day-name {
  color: var(--color-text-primary, #363636) !important;
  font-weight: 600 !important;
}
.react-datepicker__day {
  color: var(--color-text-primary, #363636) !important;
  border-radius: 4px !important;
  transition: background-color 0.1s ease-out, color 0.1s ease-out;
}
.react-datepicker__day:hover {
  background-color: var(--color-primary-1-bg, #FFF4D7) !important;
  color: var(--color-primary-1, #204F37) !important;
}
.react-datepicker__day--today {
  font-weight: 700 !important;
  color: var(--color-primary-1, #204F37) !important;
}
.react-datepicker__day--selected,
.react-datepicker__day--in-range,
.react-datepicker__day--in-selecting-range {
  background-color: var(--color-primary-1, #204F37) !important;
  color: var(--color-page-bg, #FFFFFF) !important;
}
.react-datepicker__day--keyboard-selected {
  background-color: var(--color-primary-1-bg, #FFF4D7) !important;
  color: var(--color-primary-1, #204F37) !important;
}
.react-datepicker__day--disabled {
  color: var(--color-text-disabled, #9CA3AF) !important;
  cursor: not-allowed !important;
}

/* 38. Status dots in lists — Figma: tiny circle in status color before list
 *     item text. Targets bare list items inside cards. */
.digit-list-item-dot, [class*="list-dot"], [class*="status-dot"] {
  display: inline-block;
  width: 8px; height: 8px;
  border-radius: 50%;
  margin-right: 8px;
  flex-shrink: 0;
}
.digit-list-item-dot.success, [class*="list-dot"][class*="success"] {
  background-color: var(--color-status-success-text, var(--color-success, #00703C));
}
.digit-list-item-dot.error, [class*="list-dot"][class*="error"] {
  background-color: var(--color-status-error-text, var(--color-error, #D4351C));
}
.digit-list-item-dot.warning, [class*="list-dot"][class*="warning"] {
  background-color: var(--color-status-warning-text, #9E5F00);
}
.digit-list-item-dot.info, [class*="list-dot"][class*="info"] {
  background-color: var(--color-status-info-text, #0057BD);
}

/* 39. Card-header vs page-heading hierarchy — Figma differentiates these:
 *     page-heading is largest + heaviest, card-header is mid, body smallest.
 *     Use weight + size for distinction (no padding changes). */
[class*="page-heading"], .digit-page-title,
h1.digit-card-header, h1[class*="title"] {
  font-size: 24px;
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.015em;
  color: var(--color-text-heading, var(--color-primary-1, #204F37));
}
[class*="card-header"]:not([class*="card-header-with-options"]),
.digit-card-header,
h2.digit-card-header, h2[class*="title"] {
  font-size: 18px;
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: -0.005em;
  color: var(--color-text-heading, var(--color-primary-1, #204F37));
}
[class*="section-header"], .digit-section-header,
h3.digit-card-header, h3[class*="title"] {
  font-size: 16px;
  font-weight: 600;
  line-height: 1.4;
  color: var(--color-text-heading, var(--color-primary-1, #204F37));
}

/* 40. Action / icon buttons — Figma: square hit area, subtle bg on hover,
 *     brand-color on press. */
.digit-icon-button, [class*="icon-button"], button[class*="icon-only"] {
  background-color: transparent;
  border: none;
  border-radius: 4px;
  padding: 6px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background-color 0.15s ease-out, color 0.15s ease-out;
}
.digit-icon-button:hover:not(:disabled),
[class*="icon-button"]:hover:not(:disabled) {
  background-color: var(--color-page-secondary-bg, #FAFAFA);
  color: var(--color-primary-1, #204F37);
}
.digit-icon-button:focus-visible {
  outline: 2px solid var(--color-primary-1, #204F37);
  outline-offset: 1px;
}

/* 41. Code / pre / kbd — surface for technical text within content. */
code, pre, kbd, samp,
.digit-code, [class*="code-block"] {
  background-color: var(--color-page-secondary-bg, #FAFAFA);
  border: 1px solid var(--color-card-border, #E5E7EB);
  border-radius: 4px;
  padding: 1px 6px;
  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
  font-size: 0.9em;
  color: var(--color-text-primary, #363636);
}
pre code {
  border: none;
  padding: 0;
  background-color: transparent;
}
pre, [class*="code-block"] {
  padding: 12px 16px;
  overflow-x: auto;
}

/* 42. Horizontal rules — Figma: subtle 1px hairline in card-border tone. */
hr, .digit-divider, [class*="divider"]:not([class*="vertical"]) {
  border: none;
  border-top: 1px solid var(--color-card-divider, var(--color-card-border, #E5E7EB));
  margin: 16px 0;
}

/* 43. Inline-action chips — Figma: light tint bg + brand text + small.
 *     Used for filter chips, applied filters etc. */
.digit-chip, .digit-filter-chip, .digit-applied-filter,
[class*="chip"]:not([class*="chip-container"]) {
  background-color: var(--color-primary-1-bg, var(--color-primary-selected-bg, #FFF4D7));
  color: var(--color-primary-1, #204F37);
  border-radius: 999px;
  padding: 4px 12px;
  font-size: 13px;
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  transition: background-color 0.15s ease-out;
}
.digit-chip:hover {
  background-color: color-mix(in srgb, var(--color-primary-1, #204F37) 15%, var(--color-page-bg, #FFFFFF));
}

/* 44. Button-group / segmented control — Figma: tabs-like but inline,
 *     active segment fills with primary-1-bg + primary-1 text. */
.digit-button-group, [class*="button-group"]:not([class*="button-group-container"]) {
  display: inline-flex;
  background-color: var(--color-page-secondary-bg, #FAFAFA);
  border: 1px solid var(--color-card-border, #E5E7EB);
  border-radius: 6px;
  padding: 2px;
  gap: 2px;
}
.digit-button-group button,
[class*="button-group"] > button {
  background: transparent;
  border: none;
  border-radius: 4px;
  padding: 6px 12px;
  font-weight: 500;
  font-size: 13px;
  color: var(--color-text-secondary, #5A5A5A);
  cursor: pointer;
  transition: background-color 0.15s ease-out, color 0.15s ease-out;
}
.digit-button-group button:hover,
[class*="button-group"] > button:hover {
  color: var(--color-primary-1, #204F37);
}
.digit-button-group button.active,
.digit-button-group button[aria-pressed="true"],
[class*="button-group"] > button[aria-current="true"] {
  background-color: var(--color-primary-1-bg, #FFF4D7);
  color: var(--color-primary-1, #204F37);
  font-weight: 600;
}

/* 45. Inline links inside body text — Figma: same as default anchor but
 *     with subtle underline on hover, not by default (cleaner reading). */
.digit-card p a, .digit-card-text a,
.digit-paragraph a, p a {
  color: var(--color-button-tertiary-text, var(--color-primary-1, #204F37));
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: border-color 0.15s ease-out, color 0.15s ease-out;
}
.digit-card p a:hover, .digit-card-text a:hover,
.digit-paragraph a:hover, p a:hover {
  border-bottom-color: var(--color-primary-1, #204F37);
}

/* 46. Notification dot / badge counter — Figma: small primary-2 dot or
 *     pill with white count, top-right of icon. */
.digit-notification-badge, [class*="notification-badge"],
[class*="badge-count"] {
  background-color: var(--color-primary-2, var(--color-primary-main, #FEC931));
  color: var(--color-text-primary, #0B0C0C);
  border-radius: 999px;
  font-size: 10px;
  font-weight: 700;
  min-width: 16px;
  height: 16px;
  padding: 0 4px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
}

/* 47. Body text rhythm — comfortable line-height, tabular-figures for
 *     numbers in dense data displays. */
body, .digit-body-text {
  line-height: 1.5;
}
[class*="number"], [class*="amount"], [class*="count"],
.digit-number, .digit-amount, table td.digit-numeric {
  font-feature-settings: "tnum";
  font-variant-numeric: tabular-nums;
}

/* ─── v3 polish — login + bare element coverage (post-PR-77 walk) ───────── */

/* 48. <header> tag + page-subheading classes — block 5 missed these. */
html header, html .digit-header-content,
html .digit-form-card-subheader,
html .loginCardSubH,
html [class*="form-card-subheader"],
html [class*="page-subheader"] {
  color: var(--color-text-heading, var(--color-primary-1, #204F37));
}

/* Login form centering — original layout pairs the form with a
 * citizen-banner.svg illustration on the right (`.banner` block 49
 * suppresses that asset because it had a leaked-tagline). With the
 * banner gone, the form sits flush-left at x=0 with empty grey on
 * the right. Center the form horizontally and vertically. */
.citizen-form-wrapper {
  width: 100% !important;
  justify-content: center !important;
  align-items: center !important;
  min-height: calc(100vh - 64px - 60px) !important;
  margin: 0 !important;
}
.citizen-form-wrapper > .digit-app-container {
  margin-right: 0;
}
/* Push the primary CTA (Next, Save, etc.) to the right of its card.
 * Form cards are `display:flex flex-direction:column` (e.g.
 * `.digit-card-component` for login, bare `<section>` for profile-edit
 * surfaces). `align-self: flex-end` floats the CTA right when the
 * parent is a flex column. Covers both classed `.digit-button-primary`
 * and bare `<button>` text CTAs. */
.digit-card-component > button.digit-button-primary,
.digit-app-container > button.digit-button-primary,
.card > button.submit-bar,
.card > button[class*="submit-bar"],
button:not([class]):not(:has(> svg)):not(:has(> img)) {
  align-self: flex-end !important;
}

/* Footer bg — vendor sets `.citizen-home-footer { background: #FAFAFA }`
 * which is just slightly off-white. The body bg is #EEEEEE (slightly
 * darker grey) so the footer reads as a separate white panel. Match
 * the body bg explicitly so the footer blends with the surrounding
 * surface. (Note: --color-page-bg in this tenant resolves to white
 * via legacy mapping, so we use a literal #EEEEEE matching body.) */
html .citizen-home-footer {
  background-color: #EEEEEE !important;
}

/* Citizen-only: the profile-pic wrapping `<section>` ships with
 * `background: #EEEEEE` which paints a darker panel inside the
 * otherwise white card, making the avatar area look like a separate
 * sub-panel — visually heavy on the citizen Edit Profile surface.
 * Employee surface keeps its grey backing (matches the design there). */
.user-profile.citizen section {
  background-color: transparent !important;
}

/* Sidebar profile name (.label-text under .profile-section) renders
 * inside a `.label-container.name-Profile` that sizes to ~95px content
 * width, with .label-text adding `padding: 0 16px`. That leaves ~63px
 * for the name — short names like "Gurjeet" wrap mid-word ("Gurj /
 * eet"). Widen the container to use the full 219px sidebar and tighten
 * the side padding so the full name renders on a single line. */
.SideBarStatic .profile-section .label-container,
.SideBarStatic .profile-section .label-container.name-Profile {
  width: 100% !important;
  text-align: center;
}
.SideBarStatic .profile-section .label-text {
  padding: 0 8px !important;
  text-align: center;
  width: 100% !important;
  white-space: normal;
}
/* Camera/upload affordance — smaller, sits a bit lower than vendor's
 * default. Vendor positions inline at `bottom: -24px` with a 40x40
 * SVG; user prefers ~28x28 with `bottom: -32px`. !important overrides
 * the inline style. */
.user-profile section button[style*="bottom"] svg {
  width: 28px !important;
  height: 28px !important;
}
.user-profile section button[style*="bottom"] {
  bottom: -32px !important;
}

/* 49. Login banner — drop the citizen-banner.svg illustration which
 *     contains a partial tagline ("...the resolution") that peeks out
 *     beside the login card and looks like leaked draft copy. Solid
 *     teal background reads cleaner. Tenant-neutral (uses upstream's
 *     existing teal value, no hardcoded brand). */
.banner, .banner-container,
[class*="banner-container"]:not([class*="banner-text"]) {
  background-image: linear-gradient(rgba(11, 75, 102, 0.85), rgba(11, 75, 102, 0.85)) !important;
  background-color: #0B4B66 !important;
}

/* 50b. Tertiary action labels (.primary-label-btn, .link-label) — upstream
 *      compiled-Tailwind rule sets color to a literal hex (DIGIT orange or
 *      kenya-yellow primary-main). Used for "Forgot Password?", "Register
 *      with email", inline link-style labels in cards. Route through
 *      tertiary-text var with a neutral link-blue fallback so pre-MDMS
 *      surfaces stay neutral; post-MDMS picks up tenant green. */
html .primary-label-btn, html [class*="primary-label-btn"],
html .link-label, html label.link-label {
  color: var(--color-button-tertiary-text, var(--color-link-normal, #1D70B8)) !important;
  transition: color 0.15s ease-out;
}
html .primary-label-btn:hover, html [class*="primary-label-btn"]:hover,
html .link-label:hover, html label.link-label:hover {
  color: var(--color-link-hover, #003078) !important;
}
html .primary-label-btn svg, html .primary-label-btn svg path,
html .link-label svg, html .link-label svg path {
  fill: var(--color-button-tertiary-text, var(--color-link-normal, #1D70B8));
}

/* 50. .digit-button-link text (Forgot Password, Privacy Policy) — coral
 *     in DIGIT defaults, should follow tertiary-text role. Fallback chain
 *     hits --color-link-normal (a neutral blue in vendor defaults) before
 *     primary-1 — so pre-MDMS pages render neutral, post-MDMS picks up
 *     the tenant's tertiary-text/link color. */
html .digit-button-link,
html .digit-button-link .digit-button-label,
html .digit-button-link h1, html .digit-button-link h2, html .digit-button-link h3,
html .digit-button-link span,
html .digit-button-link .icon-label-container,
html [class*="button-link"] .digit-button-label,
html .icon-label-container.link h1,
html .icon-label-container.link h2,
html .icon-label-container.link h3 {
  color: var(--color-button-tertiary-text, var(--color-link-normal, #1D70B8)) !important;
}
html .digit-button-link svg path,
html [class*="button-link"] svg path {
  fill: var(--color-button-tertiary-text, var(--color-link-normal, #1D70B8));
}
html .digit-button-link:hover,
html .digit-button-link:hover .digit-button-label,
html .digit-button-link:hover h2 {
  color: var(--color-link-hover, #003078) !important;
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* 51. Tenant title in login banner header — slight weight bump. */
.bannerHeader p, .bannerHeader > div p {
  font-weight: 600;
  letter-spacing: -0.01em;
}

/* 53. Unify back-button variants — DIGIT ships two back-button widgets
 *      that look noticeably different out of the box:
 *
 *      A) <div class="digit-back-link"> > <div class="digit-back-link-icon">
 *         + <div class="digit-back-link-label"> — used on /citizen/all-services
 *         and similar. Renders label at 20px, container is full-width 24px-tall,
 *         and (vendor bug) the chevron SVG points RIGHT (forward arrows!) which
 *         is semantically wrong for a Back button.
 *      B) <div class="back-btn2"> > <svg> + <p>Back</p> — used on /pgr/*
 *         citizen surfaces. Label at 16px, compact 50x56 container with
 *         16px vertical breathing room from the inner <p>'s margin, and the
 *         chevron SVG correctly points LEFT.
 *
 *      User flagged the inconsistency: complaint-type uses (B) which "looks
 *      better than the one outside" — same chevrons, same padding. Bring (A)
 *      to (B)'s scale: 16px label, 16px vertical padding, mirror the chevron
 *      so it points left. */
/* Vendor ships TWO competing rules: `.digit-back-link .digit-back-link-label
 * { font-size: 1rem }` then `{ font-size: 1.25rem }` (specificity 0,2,0);
 * a plain `html .digit-back-link-label` (0,1,1) loses. Match specificity. */
html .digit-back-link .digit-back-link-label,
html .digit-back-link-label {
  font-size: 16px !important;
  font-weight: 500;
  line-height: 1.5;
}
html .digit-back-link {
  gap: 4px;
  align-items: center;
  padding: 16px 0;
  height: auto;
}
html .digit-back-link .digit-back-link-icon,
html .digit-back-link-icon {
  display: inline-flex;
  align-items: center;
  width: 19px;
  height: 19px;
  /* Replace the vendor double-chevron SVG (which renders as ⏵⏵ pointing
   * forward — semantically wrong for Back) with the same single-chevron
   * (◂) used by `.back-btn2` on /pgr/* surfaces. mask-image lets the
   * glyph inherit currentColor / theme so MDMS theming keeps working. */
  background-color: var(--color-button-tertiary-text, var(--color-primary-1, #204F37));
  -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 7l-5 5 5 5V7z'/></svg>");
  mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 7l-5 5 5 5V7z'/></svg>");
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
}
html .digit-back-link .digit-back-link-icon svg,
html .digit-back-link-icon svg {
  display: none;
}

/* 52. .h1 — vendor digit-ui-css.css ships a compiled-Tailwind rule
 *     `.h1 { color: var(--color-text-primary, #0B0C0C) !important }` which
 *     drags every page-heading into body-text gray (#363636) instead of the
 *     designer's heading green. !important matches !important; we still
 *     resolve through --color-text-heading, so MDMS tenant theming wins. */
html .h1, html header.h1, html [class~="h1"] {
  color: var(--color-text-heading, var(--color-primary-1, #204F37)) !important;
}

/* Citizen language-selection / page-based-input cards — vendor sets
 * `.selection-card-wrapper` to `width: calc(100% - 219px); margin: 16px 0 0`
 * (the 219px reserved for an old desktop sidebar that's now collapsed
 * to ~48px). The wrapper sat flush-left with a 219px empty band on the
 * right and only top-aligned, so the inner `.card` read as off-center
 * both horizontally and vertically (egovernments/CCRS#519). Drop the
 * sidebar reservation and turn the wrapper into a flex centering
 * container — same affordance as the login surface. */
.selection-card-wrapper {
  width: 100% !important;
  padding: 0 !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  /* viewport minus 56px topbar minus ~70px footer */
  min-height: calc(100vh - 130px) !important;
}
.selection-card-wrapper .card {
  margin-left: auto !important;
  margin-right: auto !important;
}

/* Sidebar drawer bg — vendor wires `.digit-msb-sidebar.dark` to
 * `--color-digitv2-header-sidenav` (defaults to #0B4B66, MDMS sets it to
 * #204D56 blue-teal on Nai Pepea), but the topbar uses
 * `--color-header-bg` which MDMS sets to #204F37 (kenya-green). The
 * drawer therefore reads off-brand against the topbar/footer palette on
 * BOTH desktop and mobile. Route the drawer (and the
 * `.digit-msb-sidebar-bottom` Logout area) through `--color-sidebar-bg`
 * (which MDMS also sets to the green) so the two surfaces match. */
.digit-msb-sidebar.dark,
.digit-msb-sidebar-bottom.dark,
.digit-msb-sidebar.dark .digit-msb-sidebar-bottom,
/* Desktop static sidebars use different selectors (`.digit-sidebar`,
 * `.citizen .sidebar`, `.employee .sidebar`) but read from the same
 * `--color-digitv2-header-sidenav` var. Recolor them all here. */
.digit-sidebar,
.citizen .sidebar,
.employee .sidebar {
  background-color: var(--color-sidebar-bg, var(--color-header-bg, var(--color-primary-1, #204F37))) !important;
}

/* ────────────────────────────────────────────────────────────────────────
 * Mobile / narrow-viewport responsiveness
 * ────────────────────────────────────────────────────────────────────────
 * Vendor digit-ui was originally tuned for desktop municipal-employee
 * surfaces; on a phone-sized viewport (<= 600px) several fixed-width and
 * fixed-flex layouts crowd or wrap awkwardly. These media queries tighten
 * the citizen + employee flows for mobile without touching desktop. */
@media (max-width: 600px) {
  /* Inbox Filter / Search popup — vendor's PopUp wrapper sits at 91%
   * width but the inner Filter form (`.popup-module > .digit-search-wrapper`)
   * has a 480px fixed width that overflows the modal, clipping the
   * complaint-subtype dropdown and the "ES_COMMON_SEARCH_BY" header on
   * mobile. Make the modal go fullscreen on phones and force every
   * inner container to fill the row. */
  .digit-popup-overlay .digit-popup-wrapper {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: 100% !important;
    max-height: 100% !important;
    border-radius: 0 !important;
    margin: 0 !important;
    top: 50% !important;
    left: 50% !important;
  }
  .digit-popup-wrapper .popup-module,
  .digit-popup-wrapper .digit-search-wrapper,
  .digit-popup-wrapper .digit-search-wrapper > div,
  .digit-popup-wrapper .popup-label,
  .digit-popup-wrapper .digit-label-field-pair {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }
  /* Stack the LabelFieldPair (label on top, field below) so the two-
   * column desktop layout doesn't crush dropdowns at narrow widths. */
  .digit-popup-wrapper .digit-label-field-pair {
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 4px !important;
  }
  /* Header row — flex so the "Search by" title doesn't get crammed
   * against the close-X. */
  .digit-popup-wrapper .popup-label .header {
    flex: 1 1 0 !important;
    min-width: 0 !important;
    overflow-wrap: anywhere !important;
  }
  /* Filter / Search form layout — vendor renders the form fields in a
   * `.digit-search-field-wrapper` grid with three fixed 80px columns on
   * mobile, so each dropdown / radio gets crushed and labels wrap
   * char-by-char. Collapse the grid to a single column at full width. */
  .digit-popup-wrapper .digit-search-field-wrapper,
  .digit-popup-wrapper .digit-search-field-wrapper.inbox,
  .digit-popup-wrapper .digit-search-field-wrapper.vertical-gap {
    grid-template-columns: 1fr !important;
    gap: 16px !important;
  }
  /* Each grid cell child should also span the row so dropdowns aren't
   * clipped to half-width. */
  .digit-popup-wrapper .digit-search-field-wrapper > * {
    width: 100% !important;
    max-width: 100% !important;
    grid-column: 1 / -1 !important;
  }
  /* Filter / Search popup action-bar — `.digit-action-bar-wrap` is
   * `position:fixed; bottom:0; height:128px`, which floats over the
   * scrollable form content and hides the last few status checkboxes
   * behind the Clear All / Apply buttons. Reserve scroll space at the
   * bottom of `.digit-popup-children-wrap` so all form content is
   * reachable. */
  .digit-popup-wrapper .digit-popup-children-wrap {
    padding-bottom: 144px !important;
  }
  /* Also: when Clear All and Apply stack vertically the parent
   * `.digit-search-button-wrapper.inbox` has display: block so the two
   * buttons sit flush. Switch to flex-column with a gap so there's
   * breathing room between them. */
  .digit-popup-wrapper .digit-search-button-wrapper.inbox,
  .digit-popup-wrapper .digit-search-button-wrapper {
    display: flex !important;
    flex-direction: column !important;
    gap: 8px !important;
  }
  /* Match the Clear All height to the Apply submit-bar (40px) so the
   * stacked pair looks balanced. The `.large` button variant inflates
   * the inner H2's vertical margins (16.6px each side), pushing the
   * button to 71px tall — squash both. */
  .digit-popup-wrapper .digit-search-button-wrapper .digit-button-secondary,
  .digit-popup-wrapper .digit-search-button-wrapper .digit-button-secondary.large {
    height: 40px !important;
    min-height: 40px !important;
    padding: 8px 28px !important;
  }
  .digit-popup-wrapper .digit-search-button-wrapper .digit-button-secondary .digit-button-label,
  .digit-popup-wrapper .digit-search-button-wrapper .digit-button-secondary.large .digit-button-label {
    margin: 0 !important;
    line-height: 1 !important;
  }

  /* Inside the filter popup, the checkbox row visually starts ~23px in
   * from the Status label because the (opacity:0) input still takes
   * 16px of layout space before the visible square. Position the input
   * absolutely so the visible square sits flush at the container's
   * left edge — same place the labels above it start. */
  .digit-popup-wrapper .digit-checkbox-container > div > input.input,
  .digit-popup-wrapper .digit-checkbox-container > div > input.input-emp {
    position: absolute !important;
    width: 24px !important;
    height: 24px !important;
    left: 0 !important;
    top: 0 !important;
  }
  .digit-popup-wrapper .digit-checkbox-container > div {
    position: relative !important;
    width: 24px !important;
  }

  /* Submit-bar / "Next" / "Submit" CTA — vendor sets `min-width: 15rem`
   * (240px) which on a 360px viewport leaves the button visibly cramped
   * with awkward side-margins. Let it stretch full width with side
   * padding so it matches the form card. */
  .digit-submit-bar,
  button.digit-submit-bar,
  button[class*="submit-bar"],
  .digit-button-primary {
    min-width: 0 !important;
    width: 100% !important;
  }

  /* My Complaints empty-state copy — vendor's
   * `.pgr-citizen-wrapper .applications-list-container p { line-height: 0 !important }`
   * is intended to tighten the date/badge stacking inside complaint
   * list cards, but on the empty-state `<p>` (a 2-line paragraph
   * "You haven't logged any complaints yet.\nStart with one, make a
   * change.") it collapses both lines into the same baseline so the
   * two render on top of each other as garbled text. Restore normal
   * line-height on the empty-state card. */
  .pgr-citizen-wrapper .applications-list-container .employeeCard p,
  .pgr-citizen-wrapper .applications-list-container .empty-results-section p {
    line-height: 1.5 !important;
  }

  /* Action bar on multi-step forms — vendor lays out
   * `.digit-action-bar-wrap` as a flex row with NEXT and BACK side-by-
   * side. On 320–360px viewports BACK steals 200px and crushes NEXT
   * down to a 56px wide pill that ellipses its label ("NEX…" or
   * empty). Stack the buttons vertically (NEXT on top, BACK below) so
   * each one gets full row width. */
  .digit-action-bar-wrap {
    flex-direction: column !important;
    align-items: stretch !important;
  }
  .digit-action-bar-wrap > button,
  .digit-action-bar-wrap > .digit-button-secondary,
  .digit-action-bar-wrap > .digit-submit-bar {
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    /* BACK button ships with `margin-left: 4rem` to space it from NEXT
     * in the desktop row layout. In our stacked layout that pushes the
     * 300px-wide button past the viewport right edge — zero the inline
     * margin so each row aligns flush with the action-bar. */
    margin: 0 !important;
  }
  /* Bare-text Save/Submit `<button>` (the unclassed CTA shim) — drop
   * the desktop-only 180px max-width so it stretches with the row. */
  button:not([class]):not(:has(> svg)):not(:has(> img)) {
    max-width: 100% !important;
    width: 100% !important;
    margin-right: 0 !important;
  }

  /* Card rows w/ label+value — vendor renders these as a two-column
   * flex row at fixed widths, which breaks values mid-word and stacks
   * labels of adjacent rows on top of each other on narrow viewports.
   * Seen on citizen Complaint Summary, employee Employee Details, etc.
   * Stack vertically anywhere `.row` lives inside an `*-data-table`. */
  [class*="data-table"] .row,
  .digit-viewcard-field-pair {
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: 4px !important;
    height: auto !important;
  }
  [class*="data-table"] .row > * {
    width: 100% !important;
    max-width: 100% !important;
  }
  /* Status pill cells (`.sla-cell-success`, `.sla-cell-error`, etc.)
   * inherited the row-child 100% width and stretched into a full-width
   * bar instead of a pill. Force them back to inline-block + auto width
   * so the green/red/yellow chip hugs its label. */
  [class*="data-table"] .row [class*="sla-cell"],
  [class*="data-table"] .row [class*="status-cell"],
  [class*="data-table"] .row [class*="-pill"],
  [class*="data-table"] .row [class*="-badge"] {
    display: inline-block !important;
    width: auto !important;
    max-width: 100% !important;
  }

  /* Page-level horizontal padding — page-headers / Back-link hugged the
   * left edge of the viewport while content cards used 16px gutters,
   * making the breadcrumb feel disconnected. Match. */
  .digit-back-link,
  .complaint-summary > h1,
  .complaint-summary > h2 {
    padding-left: 16px !important;
    padding-right: 16px !important;
  }

  /* Privacy-checkbox row — already gets a positive margin-top via the
   * non-mobile rule above; on phones, the surrounding card uses tighter
   * gutters so the row's auto margin (default browser) makes it look
   * misaligned with the form fields above. Pull it back into the gutter. */
  .digit-privacy-checkbox,
  .digit-privacy-checkbox-align {
    flex-wrap: wrap;
  }

  /* Card max-width / margin tweaks — on mobile prefer no horizontal
   * margin so the card uses the full screen width minus the existing
   * 16px page padding. */
  .digit-card-component,
  .card {
    margin-left: 0 !important;
    margin-right: 0 !important;
  }

  /* Employee landing-page module cards — vendor sets `max-width: 30rem`
   * (480px) which on a 360px viewport overflows the right edge, hiding
   * "Active Employees" / "CONFIGURE_MASTER" off-screen. Constrain. */
  .digit-card-component.digit-landing-page-card {
    max-width: 100% !important;
    width: 100% !important;
    min-width: 0 !important;
  }
  .digit-home-moduleCardWrapper,
  .digit-landing-page-wrapper,
  .homeWrapper {
    max-width: 100% !important;
    overflow-x: hidden !important;
  }

  /* Employee header bar — the topbar can have multiple logos / brand
   * elements that overlap on a narrow viewport. Tighten gap. */
  .digit-employee-header,
  .digit-topbar {
    padding-left: 12px !important;
    padding-right: 12px !important;
  }
  /* Vendor renders both `.digit-header-img-ulb-wrapper-mobileview` and
   * `.digit-topbar-ulb-mobileview` simultaneously on the employee
   * surface, producing two stacked NCCG logos in the header. The
   * wrapper version covers the same role; hide the redundant topbar
   * variant on mobile. */
  .digit-topbar .digit-topbar-ulb-mobileview {
    display: none !important;
  }

  /* Citizen page top padding — vendor sets `.main.center-container`
   * `padding-top: 88px` for the fixed header (~78px tall on mobile).
   * Just clear the header (78px → use 80 for a hair of breathing room)
   * and drop the cumulative downstream margins that compounded below
   * it. Selector is scoped to the page-level `.main.center-container`
   * to avoid inflating nested `.center-container.back-wrapper` inside
   * the navbar, which uses the same class. */
  .main.center-container.citizen-home-container {
    padding-top: 80px !important;
  }
  .user-profile.citizen > section {
    margin-top: 0 !important;
  }
  .main.center-container.citizen-home-container .digit-back-link {
    padding-top: 0 !important;
  }

  /* Citizen surface horizontal padding — page wrapper had a 24px left
   * inset; trim so cards align flush with the edge gutter. */
  .user-profile.citizen {
    margin: 0 4px !important;
  }

  /* Employee Edit Profile — vendor sets `.user-profile.employee
   * { margin-top: 6rem; margin-left: 4.5rem }` to position the card
   * within the desktop sidebar layout. On mobile that produces a 96px
   * top gap and a 72px left inset that crops the card to ~210px wide.
   * Reset to: clear the 56px topbar with 8px breathing (= 64px), and
   * use a small horizontal gutter. */
  .user-profile.employee {
    margin: 64px 8px 0 !important;
  }

  /* Citizen Edit Profile labels — `digit-ui-health-css` ships a stray
   * `.user-profile { margin-top: 6rem; margin-left: 3.5rem }` that leaks
   * into the citizen profile page (since the labels carry the
   * `.user-profile` class), creating a 96px gap above each label and a
   * 56px left indent. On mobile that pushes Name / Gender / Email /
   * etc. into a sparse, ragged layout. Reset to sensible spacing
   * scoped to citizen surface to avoid disturbing health-module pages. */
  .user-profile.citizen .digit-card-label.user-profile,
  .user-profile.citizen .user-profile {
    margin-top: 0 !important;
    margin-left: 0 !important;
  }

  /* "Powered by DIGIT" footer — vendor pins `.employee .citizen-home-footer`
   * to `position: fixed; bottom: 0`, so on mobile (where the page is taller
   * than the viewport) the footer covers form fields below it (Gender,
   * Edit Profile, etc.). Un-fix it on phones so it sits at the end of
   * content and the full form is reachable. */
  .citizen-home-footer,
  .employee .citizen-home-footer {
    position: static !important;
  }

  /* Sidebar drawer position — vendor's `.digit-msb-sidebar` is
   * `position:fixed; top:0` with z-index below the topbar's, so the
   * drawer paints from y=0 BEHIND the topbar (which is z:9999), and the
   * drawer's `height: 93%` leaves a gap at the bottom. Push the drawer
   * down past the topbar (~64px) and stretch it to the viewport bottom
   * so it reads as a proper full-height sidebar. */
  .digit-msb-sidebar {
    /* Topbar is 56px tall on mobile (was 64-78px on larger viewports);
     * pin the drawer flush against it. */
    top: 56px !important;
    height: calc(100vh - 56px) !important;
    max-height: calc(100vh - 56px) !important;
  }
  .digit-employee-sidemenu,
  .digit-employee-sidemenu > *:first-child,
  .digit-side-bar,
  .digit-side-bar > *:first-child,
  .citizen .sidebar,
  .employee .sidebar {
    margin-top: 0 !important;
    padding-top: 0 !important;
  }

  /* Sidebar Logout button — the actual structure is
   * `.digit-msb-sidebar-bottom > button.digit-button-secondary > .icon-label-container > h2.digit-button-label`,
   * and the `.digit-button-label` h2 inherits yellow primary-2
   * (`--color-button-secondary-text` resolves to brand yellow on
   * Nairobi), which on the white button bg reads almost invisibly.
   * Force the label + svg to text-primary so it's legible. */
  .digit-msb-sidebar-bottom .digit-button-secondary .digit-button-label,
  .digit-msb-sidebar-bottom .digit-button-secondary,
  .digit-msb-sidebar-bottom .digit-button-secondary .icon-label-container {
    color: var(--color-text-primary, #0B0C0C) !important;
  }
  .digit-msb-sidebar-bottom .digit-button-secondary svg,
  .digit-msb-sidebar-bottom .digit-button-secondary svg path {
    fill: var(--color-text-primary, #0B0C0C) !important;
    color: var(--color-text-primary, #0B0C0C) !important;
  }

  /* Employee main shell — the desktop layout reserves 60px on the left
   * for the static sidebar inside `.main.digit-home-main`, plus 12px
   * on `.ground-container`, plus 16px on `.digit-landing-page-wrapper`.
   * On mobile the sidebar is collapsed into a hamburger so reserving
   * 88px of left gutter wastes ~26% of a 360px viewport. Zero them. */
  .main.digit-home-main {
    margin-left: 0 !important;
  }
  .ground-container.digit-home-ground {
    margin-left: 0 !important;
    margin-right: 0 !important;
  }
  .digit-landing-page-wrapper {
    margin-left: 16px !important;
    margin-right: 16px !important;
  }
}

/* ======================================================================
 * Unified input / dropdown / textarea chrome.
 *
 * Convergence target — every text input, textarea, native select, v2
 * Select trigger, and vendor digit-* dropdown wrapper across citizen +
 * employee + workbench surfaces shares this look:
 *   • 1px solid `var(--color-border)` (light gray) — no dark/black
 *   • 6px radius — no boxy 0-radius
 *   • 44px height (textarea = auto, min 88px)
 *   • surface bg, no shadows
 *   • hover/focus → brand border
 *
 * OTP boxes (`.v2-otp-box`), the citizen login phone input
 * (`.v2-login-phone-input` / `#login-mobile`), the legacy employee
 * sandbox OTP (`.sandbox-otp-input`), and the inner display elements
 * inside dropdowns (`.digit-dropdown-employee-select-wrap--elipses`,
 * `.digit-employee-select-wrap--elipses`) are intentionally excluded
 * because they have their own purpose-built chrome.
 * ==================================================================== */

input[type="text"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
input[type="number"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
input[type="tel"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
input[type="email"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
input[type="password"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input),
input[type="search"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input),
input[type="url"]:not(.v2-otp-box):not(.sandbox-otp-input),
input[type="date"]:not(.v2-otp-box):not(.sandbox-otp-input),
textarea:not(.v2-otp-skip),
select,
button[role="combobox"],
.digit-text-input-field,
.digit-text-input,
.digit-employeeCard-input,
.digit-employeeCard-inputError,
.digit-employee-card-textarea-field,
.digit-employeeCard-input-textarea,
.digit-textarea-master,
.digit-dropdown-employee-select-wrap,
.digit-dropdown-master,
.digit-dropdown-master-active,
.digit-dropdown-select-wrap,
.digit-multiselectdropdown-wrap,
.digit-multi-dropdown-wrap,
.digit-select {
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 6px !important;
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  box-shadow: none !important;
  transition: border-color 0.15s ease-out !important;
}

/* Standard 44px height for inputs + dropdown wrappers. Textareas opt
 * out (handled below). */
input[type="text"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
input[type="number"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
input[type="tel"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
input[type="email"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input),
input[type="password"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input),
input[type="search"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input),
input[type="url"]:not(.v2-otp-box):not(.sandbox-otp-input),
input[type="date"]:not(.v2-otp-box):not(.sandbox-otp-input),
select,
button[role="combobox"],
.digit-text-input-field,
.digit-text-input,
.digit-employeeCard-input,
.digit-employeeCard-inputError,
.digit-dropdown-employee-select-wrap,
.digit-dropdown-master,
.digit-dropdown-master-active,
.digit-dropdown-select-wrap,
.digit-multiselectdropdown-wrap,
.digit-multi-dropdown-wrap,
.digit-select {
  height: 44px !important;
  min-height: 44px !important;
  padding-left: 12px !important;
  padding-right: 12px !important;
  font-size: 0.875rem !important;
  line-height: 1.25 !important;
}

/* Textareas — same border/radius treatment, but auto-grow vertically
 * with a sensible minimum. */
textarea:not(.v2-otp-skip),
.digit-employee-card-textarea-field,
.digit-employeeCard-input-textarea,
.digit-textarea-master {
  height: auto !important;
  min-height: 88px !important;
  padding: 10px 12px !important;
  font-size: 0.875rem !important;
  line-height: 1.4 !important;
  resize: vertical !important;
}

/* Inner display elements inside dropdown wrappers — the wrapper
 * already carries the visible chrome, so the input child should be
 * borderless and transparent. */
.digit-dropdown-employee-select-wrap--elipses,
.digit-employee-select-wrap--elipses,
.employee-select-wrap--elipses,
.digit-dropdown-employee-select-wrap > input,
.digit-multiselectdropdown-wrap > input,
.digit-multi-dropdown-wrap > input {
  border: 0 !important;
  background: transparent !important;
  height: auto !important;
  min-height: 0 !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  box-shadow: none !important;
}

/* Vendor `.digit-text-input-field` wrapper — already shows the
 * visible 1px border + 6px radius from the unified rule above.
 * Its inner `<input>` (often `.digit-employeeCard-input`) gets the
 * SAME chrome from the rule, producing a visible double-border in
 * the search filters (Complaint No, Mobile No, etc.). The wrapper
 * is the canonical border-bearer; the inner input flexes inside it
 * with no chrome of its own.
 *
 * The `:not()` chain on the inner-input selectors mirrors the
 * unified rule above to win the specificity tie — without it the
 * unified `input[type="text"]:not(...)` (specificity 71) would
 * stamp the inner input with a 1px border again.
 */
.digit-text-input-field,
.digit-text-input-field.prefix,
.text-input,
.text-input.mdms-search-input {
  display: flex !important;
  align-items: center !important;
  overflow: hidden !important;
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  padding: 0 !important;
}
/* `.text-input` (Workbench MDMS search wrappers) carries a 1px
 * border + 6px radius from the unified rule, so its inner input
 * (often `.employee-card-input`, no `digit-` prefix) needs to be
 * stripped — same pattern as .digit-text-input-field above. */
.text-input input[type="text"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input),
.text-input input.employee-card-input,
.text-input input.digit-employeeCard-input {
  flex: 1 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  height: 100% !important;
  min-height: 0 !important;
  padding: 0 12px !important;
  outline: none !important;
}
/* Add `.employee-card-input` to the unified selector list it was
 * missing — same chrome as `.digit-employeeCard-input` (the camelCase
 * variant). Single rule below assigns the wrapper styling. */
.employee-card-input {
  border: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 6px !important;
  background-color: var(--v2-surface-color, var(--color-surface, #ffffff)) !important;
  height: 44px !important;
  min-height: 44px !important;
  padding: 0 12px !important;
}
.digit-text-input-field input[type="text"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
.digit-text-input-field input[type="number"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
.digit-text-input-field input[type="tel"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses),
.digit-text-input-field input[type="email"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input),
.digit-text-input-field input[type="password"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input),
.digit-text-input-field input[type="search"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input),
.digit-text-input-field input.digit-employeeCard-input,
.digit-text-input-field input.digit-employeeCard-inputError {
  flex: 1 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  box-shadow: none !important;
  height: 100% !important;
  min-height: 0 !important;
  padding: 0 12px !important;
  outline: none !important;
}
/* Prefix button — yellow tint + 1px right separator, no own border
 * or radius. */
.digit-text-input-field .digit-prefix,
.digit-text-input-field button.digit-prefix {
  background-color: var(--color-primary-selected-bg, #FFF4D7) !important;
  color: var(--color-text-primary, #0B0C0C) !important;
  border: 0 !important;
  border-right: 1px solid var(--color-border, #d6d5d4) !important;
  border-radius: 0 !important;
  padding: 0 14px !important;
  font-weight: 600 !important;
  height: 100% !important;
  display: flex !important;
  align-items: center !important;
  flex-shrink: 0 !important;
  box-shadow: none !important;
}

/* Hover — brand border */
input[type="text"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses):hover,
input[type="number"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):hover,
input[type="tel"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):hover,
input[type="email"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):hover,
input[type="password"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input):hover,
input[type="search"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):hover,
input[type="url"]:not(.v2-otp-box):not(.sandbox-otp-input):hover,
input[type="date"]:not(.v2-otp-box):not(.sandbox-otp-input):hover,
textarea:not(.v2-otp-skip):hover,
select:hover,
button[role="combobox"]:hover,
.digit-text-input-field:hover,
.digit-text-input:hover,
.digit-employeeCard-input:hover,
.digit-employeeCard-inputError:hover,
.digit-employee-card-textarea-field:hover,
.digit-employeeCard-input-textarea:hover,
.digit-textarea-master:hover,
.digit-dropdown-employee-select-wrap:hover,
.digit-dropdown-master:hover,
.digit-dropdown-master-active:hover,
.digit-dropdown-select-wrap:hover,
.digit-multiselectdropdown-wrap:hover,
.digit-multi-dropdown-wrap:hover,
.digit-select:hover {
  border-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}

/* Focus — brand border, no native outline */
input[type="text"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses):focus,
input[type="text"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input):not(.digit-dropdown-employee-select-wrap--elipses):not(.digit-employee-select-wrap--elipses):not(.employee-select-wrap--elipses):focus-visible,
input[type="number"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):focus,
input[type="number"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):focus-visible,
input[type="tel"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):focus,
input[type="tel"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):focus-visible,
input[type="email"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):focus,
input[type="email"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):focus-visible,
input[type="password"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input):focus,
input[type="password"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.v2-login-password-input):not(.sandbox-otp-input):focus-visible,
input[type="search"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):focus,
input[type="search"]:not(.v2-otp-box):not(.v2-login-phone-input):not(.sandbox-otp-input):focus-visible,
input[type="url"]:not(.v2-otp-box):not(.sandbox-otp-input):focus,
input[type="date"]:not(.v2-otp-box):not(.sandbox-otp-input):focus,
textarea:not(.v2-otp-skip):focus,
textarea:not(.v2-otp-skip):focus-visible,
select:focus,
select:focus-visible,
button[role="combobox"]:focus,
button[role="combobox"]:focus-visible,
.digit-text-input-field:focus,
.digit-text-input:focus,
.digit-employeeCard-input:focus,
.digit-employeeCard-input:focus-visible,
.digit-employeeCard-inputError:focus,
.digit-employee-card-textarea-field:focus,
.digit-employeeCard-input-textarea:focus,
.digit-textarea-master:focus,
.digit-dropdown-employee-select-wrap:focus-within,
.digit-dropdown-master:focus-within,
.digit-dropdown-master-active:focus-within,
.digit-dropdown-select-wrap:focus-within,
.digit-multiselectdropdown-wrap:focus-within,
.digit-multi-dropdown-wrap:focus-within,
.digit-select:focus-within {
  outline: none !important;
  border-color: var(--color-primary-1, var(--color-primary-main, #c84c0e)) !important;
}

/* Citizen layout — with the v2 sidebar now `position: fixed` (so the
 * page footer can flow next to it instead of below the row), the
 * main content needs left-padding equal to the sidebar width so it
 * doesn't underlap the fixed sidebar. Scoped via `:has()` to ONLY
 * the routes that render the sidebar — the citizen login / OTP
 * surfaces don't mount it (logged-out), so without this guard the
 * login card was pushed 260px to the right of viewport center. */
.center-container.citizen-home-container:has(> aside.v2-scope) {
  padding-left: 260px !important;
  /* row height is now driven by main content, not the sidebar; let
   * it shrink to fit. */
  align-items: flex-start !important;
}
/* Same `:has()` guard for the few citizen routes where the URL
 * convention says citizen but DIGIT's outer body wrapper is
 * `<div class="employee">` (e.g. /citizen/user/profile,
 * /citizen/user/language-selection). The earlier rule was
 * `.citizen .center-container...` which silently missed these and
 * left the edit-profile content underlapping the fixed sidebar. */
@media (max-width: 47.99rem) {
  /* On mobile the v2 sidebar isn't rendered (useIsDesktop check
   * gates it), so don't reserve the 260px gutter. */
  .center-container.citizen-home-container {
    padding-left: 0 !important;
  }
}

/* Topbars (citizen + employee) opt OUT of the unified form-control
 * chrome above. The citizen topbar uses `.navbar` (not
 * `.digit-topbar`), so we cover both selectors. `revert` walks
 * back through the cascade so topbar dropdowns/inputs keep their
 * pre-PR-100 vendor styling. */
.digit-topbar input,
.digit-topbar textarea,
.digit-topbar select,
.digit-topbar button[role="combobox"],
.digit-topbar .digit-text-input-field,
.digit-topbar .digit-text-input,
.digit-topbar .digit-employeeCard-input,
.digit-topbar .digit-employeeCard-inputError,
.digit-topbar .digit-employee-card-textarea-field,
.digit-topbar .digit-employeeCard-input-textarea,
.digit-topbar .digit-textarea-master,
.digit-topbar .digit-dropdown-employee-select-wrap,
.digit-topbar .digit-dropdown-master,
.digit-topbar .digit-dropdown-master-active,
.digit-topbar .digit-dropdown-select-wrap,
.digit-topbar .digit-multiselectdropdown-wrap,
.digit-topbar .digit-multi-dropdown-wrap,
.digit-topbar .digit-select,
.digit-topbar .employee-select-wrap--elipses,
.navbar input,
.navbar textarea,
.navbar select,
.navbar button[role="combobox"],
.navbar .digit-text-input-field,
.navbar .digit-text-input,
.navbar .digit-employeeCard-input,
.navbar .digit-dropdown-employee-select-wrap,
.navbar .digit-dropdown-master,
.navbar .digit-dropdown-master-active,
.navbar .digit-dropdown-select-wrap,
.navbar .digit-multiselectdropdown-wrap,
.navbar .digit-multi-dropdown-wrap,
.navbar .digit-select,
.navbar .employee-select-wrap--elipses,
header.digit-header input,
header.digit-header .digit-dropdown-employee-select-wrap,
header.digit-header .digit-dropdown-master {
  background-color: revert !important;
  border: revert !important;
  border-radius: revert !important;
  height: revert !important;
  min-height: revert !important;
  padding-left: revert !important;
  padding-right: revert !important;
  padding-top: revert !important;
  padding-bottom: revert !important;
  font-size: revert !important;
  line-height: revert !important;
  box-shadow: revert !important;
  color: revert !important;
  transition: revert !important;
}
.digit-topbar input:hover,
.digit-topbar select:hover,
.digit-topbar button[role="combobox"]:hover,
.digit-topbar .digit-dropdown-employee-select-wrap:hover,
.digit-topbar .digit-dropdown-master:hover,
.digit-topbar .digit-dropdown-master-active:hover,
.digit-topbar input:focus,
.digit-topbar select:focus,
.digit-topbar button[role="combobox"]:focus,
.digit-topbar .digit-dropdown-employee-select-wrap:focus-within,
.digit-topbar .digit-dropdown-master:focus-within,
.navbar input:hover,
.navbar select:hover,
.navbar button[role="combobox"]:hover,
.navbar .digit-dropdown-employee-select-wrap:hover,
.navbar .digit-dropdown-master:hover,
.navbar input:focus,
.navbar select:focus,
.navbar .digit-dropdown-employee-select-wrap:focus-within {
  border-color: revert !important;
}
