/* Supplied expanded purple menu and compact blue icon rail.
   Existing DOM and actions are retained, including the native mobile drawer. */
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) {
  --menu-surface:#fff; --menu-ink:#374151; --menu-muted:#6b7280;
  --menu-hover:#f6f4f8; --menu-selected:#f5f3f7; --menu-active:#7c3aed; --menu-line:#e9e1f0; --menu-shadow:0 5px 18px rgb(126 34 206 / .09);
  background:var(--menu-surface)!important; border:1px solid var(--menu-line)!important;
  border-radius:18px!important; box-shadow:var(--menu-shadow)!important;
  color:var(--menu-ink); transition:transform 180ms ease-out,opacity 180ms ease-out!important;
}
.dark :is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) {
  --menu-surface:#18161d; --menu-ink:#e9e5ee; --menu-muted:#b5adbe;
  --menu-hover:#25212c; --menu-selected:#282330; --menu-active:#c4b5fd; --menu-line:#3a3045; --menu-shadow:0 5px 18px rgb(0 0 0 / .18);
}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) nav {gap:8px!important}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) nav :is(a,button) {
  min-height:40px; border-radius:8px!important; border:0!important;
  padding:9px 12px!important; gap:10px!important; background:none; background-image:none;
  color:var(--menu-ink)!important; box-shadow:none; font-weight:600;
  transition:transform 180ms ease-out,opacity 180ms ease-out,color 180ms ease-out!important;
}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) nav :is(a,button) :is(span,svg) {color:inherit!important}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) nav :is(a,button) svg {flex-shrink:0; width:22px; height:22px}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) nav :is(a,button):hover {
  background:var(--menu-hover)!important; box-shadow:inset 0 1px 3px rgb(126 34 206 / .08); transform:translateX(1px);
}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) nav :is(a,button):is([aria-current="page"],[aria-pressed="true"]) {
  background:var(--menu-selected)!important; color:var(--menu-active)!important;
  box-shadow:inset 0 0 0 1px var(--menu-line)!important;
}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) :is(a,button):focus-visible {
  outline:2px solid var(--color-accent-500,#2879ed)!important; outline-offset:2px!important;
}
/* Quick Search becomes an <input> in place; it has no border-radius of its
   own (the pill shape lives on its wrapper), so an outline on the input
   itself is a hard-cornered rectangle inside a pill (founder-reported
   "purple rectangle", audit #19). Ring the wrapper instead, following its
   own radius, and suppress the input's own outline. */
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) div:has(>input:focus-visible) {
  box-shadow:0 0 0 2px var(--color-accent-500,#2879ed)!important;
}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) input:focus-visible {
  outline:none!important;
}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) [aria-label="Quick Search"] {
  background:var(--menu-surface)!important; border:1px solid var(--menu-line)!important;
  border-radius:12px!important; color:var(--menu-muted)!important;
}
/* Compact rail uses the reference's separated, square icon cells. */
aside[class*="justify-between"][class*="shrink-0"]:has(button[aria-label="Expand sidebar"]) {
  width:64px!important; padding:10px 8px!important; border-color:#d1d5db!important;
  border-radius:16px!important; box-shadow:0 5px 14px rgb(0 0 0 / .12)!important;
}
aside[class*="justify-between"][class*="shrink-0"]:has(button[aria-label="Expand sidebar"]) nav :is(a,button) {
  width:46px!important; min-height:50px!important; padding:12px!important;
  border-radius:12px!important; justify-content:center; gap:0!important;
}
aside[class*="justify-between"][class*="shrink-0"]:has(button[aria-label="Expand sidebar"]) nav a[aria-current="page"] {
  background:var(--menu-surface)!important; color:#3b82f6!important;
  box-shadow:0 3px 10px rgb(0 0 0 / .12)!important; outline:1px solid var(--menu-line);
}
aside[class*="justify-between"][class*="shrink-0"]:has(button[aria-label="Expand sidebar"]) nav a:is(:hover,[aria-current="page"]) svg {transform:scale(1.12)}
.shell > .sidebar {margin:12px;height:calc(100vh - 24px);top:12px;padding:24px 12px}
.shell > .sidebar nav a {font-size:12px}
@media(max-width:850px){.shell > .sidebar{height:auto;position:static;margin:10px;padding:14px}.shell > .sidebar nav a{min-height:40px;padding:8px 12px!important}}
@media(prefers-reduced-motion:reduce){
 :is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar),
 :is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) * {animation:none!important;transition:none!important}
}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) nav a > span:first-child {gap:12px!important}
aside[class*="justify-between"][class*="shrink-0"]:has(button[aria-label="Expand sidebar"]) nav a > span:first-child {gap:0!important}
aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]) nav a[aria-current="page"] [class*="bg-"] {background:transparent!important;color:inherit!important}
/* AI chat had no desktop collapse handler. Its local rail retains search,
   account, theme, and action icons; expand restores repository threads. */
.xalen-ai-rail > div:first-child > div:first-child {flex-direction:column-reverse!important;gap:12px!important}
.xalen-ai-rail > div:first-child > div:first-child > button[data-rac] > span:nth-child(2),
.xalen-ai-rail [aria-label="Quick Search"] > span > span,
.xalen-ai-rail [aria-label="Quick Search"] kbd,
.xalen-ai-rail nav a > span,
.xalen-ai-rail > div:first-child > div:last-child > div,
.xalen-ai-rail > div:nth-child(2) > div:last-child {display:none!important}
.xalen-ai-rail [aria-label="Quick Search"] {justify-content:center;padding:12px!important;width:46px!important}
.xalen-ai-rail [aria-label="Quick Search"] > span {justify-content:center}
aside[class*="justify-between"][class*="shrink-0"]:has(button[aria-label="Expand sidebar"]) nav a:hover {background:var(--menu-surface)!important;color:#3b82f6!important;box-shadow:0 3px 10px rgb(0 0 0 / .1)!important}
aside[class*="justify-between"][class*="shrink-0"]:has(button[aria-label="Expand sidebar"]) :is(a,button):focus-visible {outline-color:var(--color-accent-500,#2879ed)!important}
:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) nav a[aria-current="page"] :is(span,svg) {color:var(--menu-active)!important}
aside[class*="justify-between"][class*="shrink-0"]:has(button[aria-label="Expand sidebar"]) nav a[aria-current="page"] :is(span,svg) {color:#3b82f6!important}
@media(max-width:600px){
 .shell:has(> #workspace) > .sidebar nav {gap:0!important}
 .shell:has(> #workspace) > .sidebar nav a {padding:8px!important;gap:6px!important;font-size:11px!important}
 .shell:has(> #workspace) > .sidebar nav a svg {width:18px!important;height:18px!important}
}
/* Repository threads retain their 32px connector rhythm and text inset. */
aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]) nav a:not([aria-label]) {
  min-height:30px!important;height:30px;padding:5px 8px 5px 36px!important;gap:10px!important;
}

:is(aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]), .shell > .sidebar) nav :is(a,button):active {transform:translateY(1px)}
/* Keep every navigation item reachable in short windows. One sidebar scroll
   surface avoids trapping the wheel in a shrinking primary-navigation list. */
aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]) {
  overflow-y:auto!important;
  overscroll-behavior-y:auto;
  scrollbar-width:thin;
}
aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]) > div {
  flex-shrink:0;
}
aside[class*="justify-between"][class*="shrink-0"]:not([aria-label]) > div[class*="overflow-y-auto"] {
  overflow-y:visible!important;
}

/* The captured template ships a breadcrumb above the page header that belongs to
   the source demo, not to Vedika: a xalen mark, the words "Xalen team", and the
   fixture persona "Aarav". It renders on Home and on all four analytics source
   pages. xalen is being retired as a name, so this is removed rather than
   relabelled.

   Hidden in CSS, not deleted from the markup and not removed from the DOM. The
   node is React-owned - the page hydrates (the router prefetches its own routes
   on load) and a client re-render would put deleted markup straight back, with a
   flash of the vendor breadcrumb on the way. A stylesheet is the one layer React
   never reconciles, so this holds across every re-render. Same reasoning the
   navigation adapter records for the fixture badges, which it hides rather than
   removes.

   `display:none` rather than `visibility:hidden` so it also leaves the
   accessibility tree: a screen reader should not announce another company's
   team name either. */
nav[aria-label="Breadcrumb"] {
  display: none !important;
}

/* The captured template ships a breadcrumb above the page header that belongs to
   the source demo, not to Vedika: a xalen mark, the words "Xalen team", and the
   fixture persona "Aarav". It renders on Home and on all four analytics source
   pages. xalen is being retired as a name, so this is removed rather than
   relabelled.

   Hidden in CSS, not deleted from the markup and not removed from the DOM. The
   node is React-owned - the page hydrates (the router prefetches its own routes
   on load) and a client re-render would put deleted markup straight back, with a
   flash of the vendor breadcrumb on the way. A stylesheet is the one layer React
   never reconciles, so this holds across every re-render. Same reasoning the
   navigation adapter records for the fixture badges, which it hides rather than
   removes.

   `display:none` rather than `visibility:hidden` so it also leaves the
   accessibility tree: a screen reader should not announce another company's
   team name either. */
nav[aria-label="Breadcrumb"] {
  display: none !important;
}
