/* ─────────────────────────────────────────────────────────────────────────
   admin-nav.css - the left-hand sidebar navigation (see js/admin-nav.js).

   Self-contained: it does not depend on dashboard.css, and it out-specifies
   the old horizontal-nav rules that are still in many pages' own <style>
   (".dash-nav-link { padding:10px 18px; border-bottom:3px solid ... }",
   ".dash-nav-link.active { border-bottom-color: ... }") by scoping every
   link rule under ".side-nav .sn-groups".

   Colours follow the page's --brand / --brand-dark tokens with PP-green
   fallbacks, so org colour theming (org-branding.js) still applies.

   --an-hh  is the green header's measured height, kept current by the JS.
   --an-w   is the sidebar's current width (240px, or the 64px rail).
   ───────────────────────────────────────────────────────────────────────── */

:root {
  --an-full: 240px;
  --an-rail: 64px;
  --an-hh: 72px;
  --an-w: 0px;
  --an-bg: var(--brand-dark, #1B4332);
}
@media (min-width: 900px) {
  body.has-admin-nav { --an-w: var(--an-full); }
  body.has-admin-nav.an-collapsed { --an-w: var(--an-rail); }
}
.an-no-anim *, .an-no-anim *::before, .an-no-anim *::after { transition: none !important; }

/* ---- Page layout: content to the right of the fixed sidebar ------------ */
.an-host {
  padding-left: var(--an-w);
  transition: padding-left 0.2s ease;
}
/* The green header stays full width over the sidebar's column. */
.an-host > .an-header {
  margin-left: calc(-1 * var(--an-w));
  transition: margin-left 0.2s ease;
}

/* ---- Hamburger (mobile only) ------------------------------------------- */
.sn-hamburger {
  display: none; flex: 0 0 auto; width: 40px; height: 40px; margin: 0 -4px 0 0; padding: 0;
  align-items: center; justify-content: center; border-radius: 8px; cursor: pointer;
  background: rgba(255,255,255,0.12); border: 1px solid rgba(255,255,255,0.28); color: #fff;
}
.sn-hamburger svg { width: 22px; height: 22px; }
.sn-hamburger:focus-visible { outline: 2px solid #FCD34D; outline-offset: 2px; }

/* ---- The sidebar -------------------------------------------------------- */
.side-nav {
  position: fixed; left: 0; top: var(--an-hh); bottom: 0;
  width: var(--an-full); box-sizing: border-box;
  background: var(--an-bg); color: #fff;
  font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
  overflow-y: auto; overflow-x: hidden; overscroll-behavior: contain;
  scrollbar-width: thin; scrollbar-color: rgba(255,255,255,0.25) transparent;
  transition: width 0.2s ease;
  z-index: 50;
}
.side-nav *, .side-nav *::before, .side-nav *::after { box-sizing: border-box; }
.sn-top {
  display: flex; align-items: center; justify-content: flex-end; gap: 8px;
  padding: 10px 10px 8px; border-bottom: 1px solid rgba(255,255,255,0.1);
}
.sn-drawer-title {
  display: none; flex: 1; padding-left: 10px;
  font-size: 0.75rem; font-weight: 800; letter-spacing: 0.09em; text-transform: uppercase;
  color: rgba(255,255,255,0.6);
}
.side-nav .sn-iconbtn {
  display: inline-flex; align-items: center; gap: 6px; height: 30px; margin: 0; padding: 0 10px;
  border-radius: 7px; cursor: pointer; font: inherit; font-size: 0.75rem; font-weight: 600;
  background: transparent; color: rgba(255,255,255,0.7); border: 1px solid rgba(255,255,255,0.18);
  transition: background 0.15s, color 0.15s;
}
.side-nav .sn-iconbtn:hover { background: rgba(255,255,255,0.08); color: #fff; }
.side-nav .sn-iconbtn:focus-visible,
.side-nav .sn-group-head:focus-visible,
.side-nav .sn-groups .dash-nav-link:focus-visible { outline: 2px solid #FCD34D; outline-offset: -2px; }
.side-nav .sn-iconbtn svg { width: 16px; height: 16px; flex-shrink: 0; transition: transform 0.2s ease; }
.side-nav .sn-close { display: none; }

.side-nav .sn-groups { display: block; padding: 4px 0 18px; margin: 0; background: none; }
.side-nav .sn-group-head {
  display: flex; align-items: center; gap: 8px; width: 100%; margin: 0;
  background: none; border: 0; border-radius: 0; cursor: pointer; text-align: left; font: inherit;
  font-size: 0.66rem; font-weight: 800; letter-spacing: 0.09em; text-transform: uppercase;
  color: rgba(255,255,255,0.55); padding: 14px 20px 6px;
}
.side-nav .sn-group-head:hover { color: #fff; }
.sn-group-label { flex: 1; }
.sn-caret { width: 14px; height: 14px; flex-shrink: 0; transform: rotate(-90deg); transition: transform 0.18s ease; }
.sn-group.is-open .sn-caret { transform: rotate(0deg); }
.sn-group:not(.is-open) .sn-group-links { display: none; }
.sn-group.is-empty { display: none; }
/* Roll-up badge: a closed group still shows how many items need attention. */
.sn-group-badge {
  display: none; align-items: center; justify-content: center;
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px;
  background: #EF4444; color: #fff; font-size: 0.68rem; font-weight: 800; letter-spacing: 0; line-height: 1;
}
.sn-group:not(.is-open) .sn-group-badge.has-count { display: inline-flex; }

/* Links. Scoped under .side-nav .sn-groups to beat each page's own
   .dash-nav-link / .dash-nav-link.active / :visited rules. */
.side-nav .sn-groups .dash-nav-link,
.side-nav .sn-groups .dash-nav-link:link,
.side-nav .sn-groups .dash-nav-link:visited {
  display: flex; align-items: center; gap: 10px; position: relative;
  margin: 1px 10px; padding: 8px 10px; border: 0; border-radius: 8px;
  background: transparent; color: rgba(255,255,255,0.78); text-decoration: none;
  font-size: 0.8125rem; font-weight: 600; line-height: 1.2; white-space: nowrap;
  transition: background 0.15s ease, color 0.15s ease;
}
.side-nav .sn-groups .dash-nav-link:hover { color: #fff; background: rgba(255,255,255,0.08); border: 0; }
.side-nav .sn-groups .dash-nav-link.hidden { display: none; }
.side-nav .sn-groups .dash-nav-link.active,
.side-nav .sn-groups .dash-nav-link.active:link,
.side-nav .sn-groups .dash-nav-link.active:visited,
.side-nav .sn-groups .dash-nav-link.active:hover {
  color: var(--an-bg); background: #fff; border: 0; cursor: default;
  box-shadow: 0 1px 4px rgba(0,0,0,0.18);
}
.side-nav .sn-groups .dash-nav-link.active.nav-alert { color: var(--an-bg) !important; }
/* Project sub-links under "Projects" (one per live project). */
.side-nav .sn-sublinks { margin: 0 10px 4px 29px; padding-left: 8px; border-left: 1px solid rgba(255,255,255,0.18); }
.side-nav .sn-sublinks[hidden] { display: none; }
.side-nav .sn-sublink,
.side-nav .sn-sublink:link,
.side-nav .sn-sublink:visited {
  display: flex; align-items: center; gap: 7px; padding: 5px 8px; border-radius: 6px; color: rgba(255,255,255,0.72);
  text-decoration: none; font-size: 0.76rem; font-weight: 600; line-height: 1.25;
}
.side-nav .sn-subname { min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* Live = green dot; completed = hollow grey dot and a quieter name. Live ones are listed first. */
.side-nav .sn-dot { flex: 0 0 auto; width: 7px; height: 7px; border-radius: 50%; background: #52D99A; }
.side-nav .sn-sublink.is-done .sn-dot { background: transparent; box-shadow: inset 0 0 0 1.5px rgba(255,255,255,0.5); }
.side-nav .sn-sublink.is-done { color: rgba(255,255,255,0.5); }
.side-nav .sn-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.side-nav .sn-sublink:hover { color: #fff; background: rgba(255,255,255,0.08); }
.side-nav .sn-sublink:focus-visible { outline: 2px solid #FCD34D; outline-offset: -2px; }
.side-nav .sn-sublink.active,
.side-nav .sn-sublink.active:visited { color: #fff; background: rgba(255,255,255,0.16); }
.side-nav.is-arranging .sn-sublinks { display: none; }
.side-nav .dash-nav-icon { width: 17px; height: 17px; flex-shrink: 0; }
.side-nav .dash-nav-label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.side-nav .sn-groups .dash-nav-link.nav-alert .nav-alert-badge { margin-left: auto; flex-shrink: 0; }

/* ---- Group accent colours ------------------------------------------------
   One soft colour per group (the 2026 brand palette, softened), used on the
   group heading, its icons and a thin stripe down the group's left edge, and
   again as a strip under the green header of every page in that group. All
   five are light tints, so they clear 7:1 on the dark sidebar. The active
   link stays a white pill with dark text and icon: a tint on white would not
   be readable. Keyed on the group's id, so a link dragged into another group
   takes that group's colour. */
:root {
  --an-c-insights: #EAD96B;
  --an-c-people: #F4A6BE;
  --an-c-engagement: #F5A586;
  --an-c-delivery: #8FD9B6;
  --an-c-platform: #FAF2E2;
}
.sn-group[data-group="insights"] { --sn-accent: var(--an-c-insights); }
.sn-group[data-group="people"] { --sn-accent: var(--an-c-people); }
.sn-group[data-group="engagement"] { --sn-accent: var(--an-c-engagement); }
.sn-group[data-group="delivery"] { --sn-accent: var(--an-c-delivery); }
.sn-group[data-group="platform"] { --sn-accent: var(--an-c-platform); }
body[data-an-group="insights"] { --an-page-accent: var(--an-c-insights); }
body[data-an-group="people"] { --an-page-accent: var(--an-c-people); }
body[data-an-group="engagement"] { --an-page-accent: var(--an-c-engagement); }
body[data-an-group="delivery"] { --an-page-accent: var(--an-c-delivery); }
body[data-an-group="platform"] { --an-page-accent: var(--an-c-platform); }

.side-nav .sn-group-head { color: var(--sn-accent, rgba(255,255,255,0.55)); }
.side-nav .sn-group-links { box-shadow: inset 3px 0 0 var(--sn-accent, transparent); }
.side-nav .sn-groups .dash-nav-link .dash-nav-icon { color: var(--sn-accent, currentColor); }
.side-nav .sn-groups .dash-nav-link.active .dash-nav-icon { color: inherit; }
/* The strip under the header, in the colour of the current page's group. */
body[data-an-group] .an-host > .an-header { border-bottom: 4px solid var(--an-page-accent, transparent); }

/* ---- Arrange mode (superadmins) ------------------------------------------ */
.side-nav .sn-arrange[hidden], .sn-arrange-bar[hidden] { display: none; }
.sn-arrange-bar {
  padding: 10px 12px 12px; border-bottom: 1px solid rgba(255,255,255,0.1);
  background: rgba(0,0,0,0.18); font-size: 0.75rem; line-height: 1.4; color: rgba(255,255,255,0.82);
}
.sn-arrange-bar p { margin: 0 0 8px; }
.sn-arrange-actions { display: flex; flex-wrap: wrap; gap: 6px; }
.side-nav .sn-arrange-actions .sn-iconbtn.is-primary { background: #fff; color: var(--an-bg); border-color: #fff; }
.side-nav .sn-arrange-actions .sn-iconbtn:disabled { opacity: 0.55; cursor: default; }
.sn-arrange-msg { margin-top: 8px; min-height: 1em; color: #FCD34D; }
.side-nav.is-arranging .sn-group .sn-group-links { display: block; min-height: 14px; padding-bottom: 4px; }
.side-nav.is-arranging .sn-group.is-empty { display: block; }
.side-nav.is-arranging .sn-caret, .side-nav.is-arranging .sn-group-badge { display: none !important; }
.side-nav.is-arranging .sn-group-head,
.side-nav.is-arranging .sn-groups .dash-nav-link,
.side-nav.is-arranging .sn-groups .dash-nav-link.active { cursor: grab; }
.side-nav.is-arranging .sn-groups .dash-nav-link { outline: 1px dashed rgba(255,255,255,0.22); outline-offset: -1px; }
.side-nav .is-dragging { opacity: 0.4; }
.side-nav .sn-drop-before { box-shadow: 0 -3px 0 #FCD34D; }
.side-nav .sn-drop-after { box-shadow: 0 3px 0 #FCD34D; }
.side-nav .sn-group-links.sn-drop-into { background: rgba(252,211,77,0.14); }
.sn-mv { display: inline-flex; gap: 2px; margin-left: auto; flex-shrink: 0; }
.side-nav .sn-mv [role="button"] {
  width: 22px; height: 22px; margin: 0; padding: 0; border-radius: 5px; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.22); color: #fff;
  font: inherit; font-size: 0.7rem; line-height: 1;
}
.side-nav .sn-groups .dash-nav-link.active .sn-mv [role="button"] { background: rgba(0,0,0,0.06); border-color: rgba(0,0,0,0.2); color: var(--an-bg); }
.side-nav .sn-mv [role="button"]:hover { background: rgba(255,255,255,0.22); }
.side-nav .sn-mv [role="button"]:focus-visible { outline: 2px solid #FCD34D; outline-offset: 1px; }

/* ---- Collapsed icon rail (desktop only) -------------------------------- */
@media (min-width: 900px) {
  body.an-collapsed .side-nav { width: var(--an-rail); }
  body.an-collapsed .sn-top { justify-content: center; padding: 10px 0 8px; }
  body.an-collapsed .sn-collapse-text { display: none; }
  body.an-collapsed .side-nav .sn-sublinks { display: none; }
  body.an-collapsed .side-nav .sn-arrange { display: none; }
  body.an-collapsed .side-nav .sn-collapse { padding: 0; width: 36px; justify-content: center; }
  body.an-collapsed .side-nav .sn-collapse svg { transform: rotate(180deg); }
  /* Every visible icon shows in the rail - open/closed only applies when expanded. */
  body.an-collapsed .sn-group .sn-group-links { display: block; }
  body.an-collapsed .side-nav .sn-group-head {
    width: calc(100% - 32px); height: 1px; padding: 0; margin: 10px 16px;
    background: rgba(255,255,255,0.18); pointer-events: none; overflow: hidden;
  }
  body.an-collapsed .sn-group.is-first-visible .sn-group-head { margin-top: 6px; background: transparent; }
  body.an-collapsed .side-nav .sn-group-head > * { display: none; }
  body.an-collapsed .sn-group .sn-group-badge.has-count { display: none; }
  body.an-collapsed .side-nav .sn-groups .dash-nav-link { justify-content: center; margin: 2px 10px; padding: 10px 0; }
  body.an-collapsed .side-nav .dash-nav-label { display: none; }
  body.an-collapsed .side-nav .dash-nav-icon { width: 19px; height: 19px; }
  body.an-collapsed .side-nav .sn-groups .dash-nav-link.nav-alert .nav-alert-badge {
    position: absolute; top: 2px; right: 3px; margin: 0;
    min-width: 17px; height: 17px; padding: 0 4px; font-size: 0.62rem;
    box-shadow: 0 0 0 2px var(--an-bg);
  }
}

/* ---- Tooltip: one fixed element on <body>, never the title attribute --- */
.sn-tip {
  position: fixed; z-index: 600; pointer-events: none; left: 0; top: 0;
  background: #111827; color: #fff; font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
  font-size: 0.78rem; font-weight: 600; line-height: 1.3;
  padding: 6px 10px; border-radius: 6px; white-space: nowrap;
  box-shadow: 0 4px 14px rgba(0,0,0,0.25); opacity: 0; transform: translateX(-4px);
  transition: opacity 0.12s, transform 0.12s;
}
.sn-tip.is-on { opacity: 1; transform: none; }
.sn-tip::before {
  content: ""; position: absolute; left: -5px; top: 50%; margin-top: -5px;
  border: 5px solid transparent; border-left: 0; border-right-color: #111827;
}

/* ---- Mobile drawer ------------------------------------------------------ */
.sn-scrim { display: none; }
@media (max-width: 899px) {
  .sn-hamburger { display: inline-flex; }
  .side-nav {
    top: 0; bottom: 0; width: 280px; max-width: 86vw;
    z-index: 300; transform: translateX(-102%); visibility: hidden;
    transition: transform 0.22s ease, visibility 0s linear 0.22s;
    box-shadow: 4px 0 24px rgba(0,0,0,0.3);
  }
  body.sn-drawer-open .side-nav { transform: none; visibility: visible; transition: transform 0.22s ease; }
  body.sn-drawer-open { overflow: hidden; }
  .sn-drawer-title { display: block; }
  .side-nav .sn-collapse { display: none; }
  .side-nav .sn-close { display: inline-flex; padding: 0; width: 34px; justify-content: center; }
  .sn-scrim {
    display: block; position: fixed; inset: 0; z-index: 250;
    background: rgba(15,23,42,0.5); opacity: 0; pointer-events: none; transition: opacity 0.2s;
  }
  body.sn-drawer-open .sn-scrim { opacity: 1; pointer-events: auto; }
}

/* ---- Phone header: let the header wrap ----------------------------------
   Several admin headers are a single non-wrapping flex row (logo, title,
   funder logo, user, sign out) that was already wider than a 390px phone
   before the sidebar existed; the hamburger adds one more item. Wrapping
   keeps everything on screen instead of pushing the page sideways. */
@media (max-width: 899px) {
  body.has-admin-nav .an-header { flex-wrap: wrap; row-gap: 8px; }
}

/* ---- Convention insights-only viewer: no staff navigation at all ------- */
body.insights-only .side-nav,
body.insights-only .sn-hamburger,
body.insights-only .sn-scrim { display: none !important; }
body.insights-only .an-host { padding-left: 0; }
body.insights-only .an-host > .an-header { margin-left: 0; }

/* ---- Print: content only, full width ----------------------------------- */
@media print {
  .side-nav, .sn-hamburger, .sn-scrim, .sn-tip { display: none !important; }
  .an-host { padding-left: 0 !important; }
  .an-host > .an-header { margin-left: 0 !important; }
}

/* ---- "View as" preview (see js/view-as.js) ------------------------------ */
/* Anything marked superadmin-only stays hidden while previewing someone who
   is not a superadmin, whatever the page's own script reveals. */
body.view-as-limited .superadmin-only { display: none !important; }
.va-bar {
  position: fixed; left: 50%; bottom: 16px; transform: translateX(-50%);
  z-index: 9000; display: flex; align-items: center; gap: 12px;
  max-width: calc(100vw - 32px); padding: 8px 10px 8px 16px;
  background: #78350F; color: #FEF3C7; border-radius: 999px;
  font-size: 0.875rem; font-weight: 600; box-shadow: 0 6px 20px rgba(0,0,0,0.25);
}
.va-exit {
  background: #FEF3C7; color: #78350F; border: none; border-radius: 999px;
  padding: 5px 14px; font-size: 0.8125rem; font-weight: 700; cursor: pointer;
}
.va-exit:hover { background: #FDE68A; }
@media print { .va-bar { display: none; } }
