/* ============================================================================
   ADMIN TYPE — one scale for every staff page              2026-08-16
   ----------------------------------------------------------------------------
   Caleb: "i want you to do the exact same thing to all admin pages. every single
   one and clean them up and make sure its consistent just like everything you
   did for client."

   This is the admin twin of css/client-type.css and it works the same way, for
   the same reason. THE STANDARD IS NOT INVENTED HERE — every value is lifted
   from css/admin-console.css §4, which is the scale the owner console already
   runs on. This file's only job is to make the other twenty-eight pages speak
   it too.

     ROLE            SIZE   WEIGHT  TRACK  COLOUR     (source in admin-console)
     Page title      26px   600     0      #1A2130    .nx-h1
     Page sub        14px   400     0      #77808F    .nx-sub
     Section title   20px   600     0      #1A2130    (step between h1 and card)
     Card title      17px   600     0      #1A2130    .nx-card__title
     Card sub        13px   400     0      #A2AAB6    .nx-card__sub
     Row name        15px   600     0      #1A2130
     Body            14.5px 400     0      #2C3341    body:is(.pm-admin-console,.pm-assistant-console)
     Meta            13.5px 400     0      #77808F    .pmpf__tab
     Micro label     12.5px 600     .05em  #77808F    .nx-stats__label (caps)
     Stat XL         29px   700     0      #1A2130    .nx-stats__num

   THE AUDIT — measured across all 28 pages, not assumed
   admin-console.css already names 272 classes, but the pages carry **287 more**
   that it never reaches, and the numbers say why:

     · font-family declarations:  Inter 71,  Nunito 0
     · font-weight >= 700 declarations: 263

   Nunito reaches these pages ONLY through the `body:is(.pm-admin-console,.pm-assistant-console)` rule, so
   every one of those 71 Inter declarations overrides it on the exact elements
   people read most — titles, names, labels, counts. And 263 bold declarations on
   small furniture is the same "very thick" problem the family pages had.

   The commonest uncovered suffixes were `__title` (39), `__name` (11), `__h`
   (10), `__label` (8), `__count` (5), `__num` (5) — which is why §2 targets the
   naming pattern rather than listing 287 selectors that would rot on the
   twenty-ninth page. Same reasoning as client-type.css §8b, which held up across
   every family page.

   SCOPE: `body:is(.pm-admin-console,.pm-assistant-console)` only. Family and child views are untouched —
   they have their own sheet.

   TYPOGRAPHY ONLY. Family, size, weight, tracking, colour. No layout, no
   spacing, no component chrome. Nothing here can move a box.

   REVERT: remove this file's <link> from the admin pages. Every rule it
   overrides is still underneath, untouched.
   ============================================================================ */

/* ── 1) THE FACE ────────────────────────────────────────────────────────────
   Overrides the 71 explicit Inter declarations inside the page content. The
   rail, the top bar and monospace are deliberately excluded: the rail is shared
   chrome that already renders identically everywhere, and code/IDs must stay
   monospace or they become unreadable. */
html body:is(.pm-admin-console,.pm-assistant-console) :is(.nx-shell, .nx-main, main, .pmar-main, .adp, .ado) *:not(
  :is(code, pre, kbd, samp, .material-icons, [class*="icon"], [class*="mono"], [class*="__id"])
){
  font-family:"Nunito", ui-rounded, system-ui, -apple-system, sans-serif !important;
}

/* ── 2) THE WEIGHT PASS — the actual source of "bulky" ──────────────────────
   263 declarations at 700+ across these pages, nearly all of it small furniture:
   buttons, labels, chips, counts, status pills. The console sets that same
   furniture at 600. Weight only — sizes are left alone because those differences
   are usually deliberate.

   NUMBERS ARE EXCLUDED and stay at 700. A stat should be the heaviest thing in
   its card; that is admin-console.css's own rule (.nx-stats__num is 29/700) and
   flattening it would remove real hierarchy rather than noise. */
/* The word list is generated from the classes that survived the harness, in two
   shapes: a handful of words that are ALWAYS furniture and safe as a bare
   substring (chip, pill, badge, flag), and the rest matched only as `__word`
   or `-word` so a container like `.admin-table` is never caught — setting a
   weight on a wrapper would drag its body copy bold with it. */
html body:is(.pm-admin-console,.pm-assistant-console) :is(
  [class*="btn"],
  [class*="chip"],
  [class*="pill"],
  [class*="badge"],
  [class*="flag"],
  [class*="eyebrow"],
  [class*="kicker"],
  [class*="__btn"], [class*="-btn"],
  [class*="__cta"], [class*="-cta"],
  [class*="__label"], [class*="-label"],
  [class*="__filter"], [class*="-filter"],
  [class*="__tab"], [class*="-tab"],
  [class*="__status"], [class*="-status"],
  [class*="__count"], [class*="-count"],
  [class*="__cat"], [class*="-cat"],
  [class*="__name"], [class*="-name"],
  [class*="__sub"], [class*="-sub"],
  [class*="__meta"], [class*="-meta"],
  [class*="__who"], [class*="-who"],
  [class*="__client"], [class*="-client"],
  [class*="__day"], [class*="-day"],
  [class*="__time"], [class*="-time"],
  [class*="__role"], [class*="-role"],
  [class*="__tier"], [class*="-tier"],
  [class*="__item"], [class*="-item"],
  [class*="__del"], [class*="-del"],
  [class*="__slot"], [class*="-slot"],
  [class*="__proposed"], [class*="-proposed"],
  [class*="__email"], [class*="-email"],
  [class*="__back"], [class*="-back"],
  [class*="__head"], [class*="-head"],
  [class*="__date"], [class*="-date"],
  [class*="__type"], [class*="-type"],
  [class*="__rank"], [class*="-rank"],
  [class*="__cell"], [class*="-cell"],
  [class*="__link"], [class*="-link"],
  [class*="__dot"], [class*="-dot"],
  [class*="__cost"], [class*="-cost"],
  [class*="__overdue"], [class*="-overdue"],
  [class*="__greeting"], [class*="-greeting"],
  [class*="__vis"], [class*="-vis"],
  [class*="__ed"], [class*="-ed"],
  [class*="__n"], [class*="-n"],
  [class*="__t"], [class*="-t"],
  [class*="__av"], [class*="-av"]
):not([class*="num"]):not([class*="value"]):not([class*="amount"]):not([class*="price"]):not([class*="total"]):not([class*="avatar"]):not([class*="icon"]):not([class*="logo"]):not([class*="-h1"]):not([class*="__h1"]):not([class*="nx-notif"]):not([class*="pmac"]){
  font-weight:600 !important;
  letter-spacing:0 !important;
}
/* Body copy in the same cards drops to reading weight. A description is not
   furniture and should never have been bold. */
html body:is(.pm-admin-console,.pm-assistant-console) :is(
  [class*="__desc"], [class*="__body"], [class*="__text"], [class*="__note"], [class*="__blurb"]
){
  font-weight:400 !important;
}

/* ── 3) TITLES — the 39 `__title` classes plus the `__h` shorthand ──────────
   These are card and panel headings scattered across every page at anything
   from 14px/800 to 22px/700. One step: the console's 17/600. Sizes are set
   here (unlike §2) because a heading's size IS the hierarchy, and these were
   the classes disagreeing with each other page to page. */
/* 2026-08-17 - `:not([class*="pmcal"])` added. This rule is for CARD AND PANEL
   headings, but `.pmcal-event__title` also matches `[class*="__title"]`, so it
   was forcing 17px/Nunito/line-height-1.3 onto every calendar tile - which is
   exactly the "huge text in the calendar entries" Caleb kept reporting, and why
   setting a smaller size inside the calendar had no effect (this selector is
   more specific AND !important).
   A calendar chip is not a heading. The calendar owns its own type again. */
/* 2026-08-28 — and the notification panel AND the quickbar, for the same reason
   as the calendar. `.pmac-gear__hd` contains `__h` and was being forced to 17px,
   making "Alerts & settings" the largest text in either popover; `.pmac__tip`
   contains `__t` and was forced to weight 600, so the alert rows sat bolder than
   the page links beside them. The quickbar owns its own type in
   admin-console.css; `pmac` is its namespace and nothing else uses the prefix.
   above. `.nx-notif-item__title` matched `[class*="__title"]` and was forced to
   17px/600, which is why the bell's list towered over the gear menu beside it
   (whose labels are plain spans and so were never caught). The panel owns its
   own scale in admin-console.css. */
html body:is(.pm-admin-console,.pm-assistant-console) :is([class*="__title"], [class*="__h"]):not([class*="__h1"]):not(.nx-h1):not([class*="pmcal"]):not([class*="nx-notif"]):not([class*="pmac"]){
  font-family:"Nunito", ui-rounded, system-ui, -apple-system, sans-serif !important;
  font-size:17px !important;
  font-weight:600 !important;
  letter-spacing:0 !important;
  line-height:1.3 !important;
  color:#1A2130 !important;
}

/* ── 4) PAGE TITLE + SUB — the top block, same as every console page ────────
   admin-console.css already styles `.nx-h1` / `.nx-sub`; this catches the pages
   that named their own. Colour is opt-outable via --pmat-h1 for the same reason
   the client sheet needed it: a shared sheet cannot know that one page puts its
   title on a dark bar, and on the client side that mistake blacked out a heading
   on navy. */
html body:is(.pm-admin-console,.pm-assistant-console) :is(.nx-h1, .adp-h1, .ado-h1, [class*="__h1"], [class*="-h1"], .as-h1){
  font-family:"Nunito", ui-rounded, system-ui, -apple-system, sans-serif !important;
  font-size:26px !important;
  font-weight:600 !important;
  letter-spacing:0 !important;
  line-height:1.2 !important;
  color:var(--pmat-h1, #1A2130) !important;
}
html body:is(.pm-admin-console,.pm-assistant-console) :is(.nx-sub, .adp-sub, .ado-sub, .as-sub){
  font-family:"Nunito", ui-rounded, system-ui, -apple-system, sans-serif !important;
  font-size:14px !important;
  font-weight:400 !important;
  letter-spacing:0 !important;
  color:var(--pmat-sub, #77808F) !important;
}

/* ── 5) MICRO LABELS — the uppercase captions under numbers ─────────────────
   The console's own: 12.5px / 600 / .05em. Pages ran these from 9px/700 to
   13px/800 with tracking anywhere between .02em and .12em, which is why stat
   blocks never lined up between pages. */
html body:is(.pm-admin-console,.pm-assistant-console) :is(
  .nx-stats__label, [class*="__stat-label"], [class*="__kpi-label"], [class*="__eyebrow"]
){
  font-family:"Nunito", ui-rounded, system-ui, -apple-system, sans-serif !important;
  font-size:12.5px !important;
  font-weight:600 !important;
  letter-spacing:.05em !important;
  text-transform:uppercase !important;
  color:#77808F !important;
}

/* ── 6) READABILITY FLOOR ───────────────────────────────────────────────────
   The family pass found three separate places where text was set so light it
   fell under 3:1 — including a "0" in white on light grey that simply did not
   render to the eye. These are the same washed-out greys, used across the admin
   pages for meta and secondary lines. #94A3B8 on white is 2.6:1; #6B7280 is
   ~4.8:1 and still clearly secondary. Applied only where the page asks for one
   of the known-too-light values. */
html body:is(.pm-admin-console,.pm-assistant-console) [style*="#94A3B8"],
html body:is(.pm-admin-console,.pm-assistant-console) [style*="#9CA3AF"],
html body:is(.pm-admin-console,.pm-assistant-console) [style*="#CBD5E1"]{
  color:#6B7280 !important;
}

/* ── 7) THE RAIL AND TOP BAR STAY PUT ──────────────────────────────────────
   Shared chrome, rendered identically on every admin page, already consistent
   and already owned by admin-console.css. Leaving it alone is the point: it is
   the fixed frame you judge the content against. */

/* ── 8) THE NUMBERS — standardised, not flattened ───────────────────────────
   Numbers are excluded from the weight pass so a stat stays the heaviest thing
   in its card. But the pages had drifted to 800 in places while the console's
   own `.nx-stats__num` is 700, so "heaviest" was inconsistent from page to page.
   This pins them to the console value: still the heaviest element, now the same
   weight everywhere. Sizes untouched. */
html body:is(.pm-admin-console,.pm-assistant-console) :is(
  [class*="num"], [class*="value"], [class*="amount"], [class*="price"], [class*="total"]
):not([class*="label"]):not([class*="title"]){
  font-weight:700 !important;
}

/* ── 9) …EXCEPT INSIDE A TABLE ─────────────────────────────────────────────
   Caleb 2026-08-16, on Financials: "the numbers look very big… I'm kinda hoping
   for something more cleaner, tighten up the typography."

   §8 above is right for a STAT CARD — the number is the hero of its panel and
   should be the heaviest thing in it. It is wrong for a TABLE, where the same
   rule fires on every row: fifty amounts at 700 down a page is not hierarchy,
   it is noise, and it made my own sheet part of the problem Caleb was pointing
   at. A figure in a table row is one of many, so it gets emphasis (600) rather
   than the hero weight.

   Scoped by ANCESTOR rather than by class name, because the class cannot tell
   you whether it is in a card or a grid — only its position can. */
html body:is(.pm-admin-console,.pm-assistant-console) :is(table, [role="table"], [class*="-table"], [class*="__table"]) :is(
  [class*="num"], [class*="value"], [class*="amount"], [class*="price"], [class*="total"]
){
  font-weight:600 !important;
}
/* and table body text sits at reading weight, so the figure is what lifts */
html body:is(.pm-admin-console,.pm-assistant-console) :is(table, [role="table"], [class*="-table"], [class*="__table"]) :is(td, tbody th){
  font-weight:400 !important;
}
