/* ═══════════════════════════════════════════════════════════════════════════════════════════
   fs-staff-type.css — THE STAFF PORTAL'S TYPE LAYER.            WO-STAFFTYPE-0902 · ruling 81
   ───────────────────────────────────────────────────────────────────────────────────────────
   Ruling 81 (founder, 2 Sep), refining 79: Atlassian's own faces are proprietary and may not be
   used. Their TYPE SYSTEM is the inspiration, built from properly-licensed parents —
   Inter (the parent of Atlassian Sans) for headings AND body, one family, weight-led hierarchy,
   and JetBrains Mono (the parent of Atlassian Mono) for code, IDs and timestamps.
   Both SIL OFL 1.1, both free for commercial use, both already self-hosted on this estate.

   ── TWO CLASSES, TWO TIERS, AND THE ROLLBACK IS A WORD ─────────────────────────────────────
     <body class="fs-staff">                  → THE FACE ONLY. Inter and JetBrains Mono replace
                                                Sora and ui-monospace; every size, weight and
                                                tracking the portal has today is left alone.
                                                This is exactly ruling 79.
     <body class="fs-staff fs-type-ladder">   → THE FACE + ATLASSIAN'S PUBLISHED LADDER. Every
                                                heading, body, small and code element lands on
                                                Atlassian's token table. This is ruling 81 in
                                                full, and it is what ships.
   Deleting `fs-type-ladder` softens the change to the face alone; deleting `fs-staff` reverts
   the whole thing. Nothing else has to move either way.

   ── FIVE THINGS THIS FILE IS, AND MUST STAY ────────────────────────────────────────────────
     1. THE ONLY new stylesheet, loaded LAST, so it wins on document order. There is not one
        !important in it, and there must never be one — check before you add.
     2. SCOPED TO .fs-staff, every rule, no exceptions. Mission Control, the member face and
        the marketing site never load it, and if they did it would still change nothing outside
        that class. Ruling 77's byte-fidelity MC extraction survives untouched.
     3. SHELL-AGNOSTIC in its CORE. Rules select ELEMENTS inside the scope, plus this file's own
        .fst-* utilities. Shell v2 (STAFFCHROME-REWORK) can rename every class in the portal and
        this file still lands. The one exception is the marked CURRENT-SHELL BRIDGE at the
        bottom: three selectors, dated, deletable.
     4. SELF-HOSTED. Zero external font requests (estate law, WO-WPFONTS). The @font-face blocks
        below are the staff face's ONLY font source, because the include-line patch deletes the
        three fonts.googleapis.com <link> tags this portal used to carry.
     5. SPECIFICITY BY DESIGN, NOT BY ACCIDENT. The ladder selectors are written
        `.fs-staff.fs-type-ladder <element>` = (0,2,1) deliberately: the staff shell's own
        component rules are (0,2,1) too (`.union .uh h3`, `.panel .ph h3`, `.nowt h4` …), so the
        ladder ties them and wins on document order — without escalating to !important, and
        while still yielding to anything genuinely more specific or inline.

   ── MEASURED ON fsmc-s2, 2026-09-02 (read-only SSH), NOT INHERITED ─────────────────────────
     · /assets/fonts/inter/inter-{400,500,600,700,800}.woff2 — 48,256 B each, all five
       BYTE-IDENTICAL (sha256 3100e775e8616cd2…): ONE variable file, wght axis 100–900,
       518 glyphs. The estate's per-weight @font-face pattern (WO-FT1, _chrome.css) pins the
       axis per declaration; this file copies that pattern exactly.
     · /assets/fonts/jetbrains_mono/jetbrains_mono-{400,700,800}.woff2 — 31,432 B each,
       byte-identical (sha256 83c005d49d8a6a50…), variable wght axis 400–800, 394 glyphs.
       ALREADY on the box and ALREADY in private_html/data/fonts/fonts.manifest.json as
       family_key "jetbrains_mono", licence OFL-1.1, curated #47. The manifest delta is ZERO;
       what was missing was only an @font-face naming it, which is these two lines.
     · Inter's shipped GSUB features are exactly: calt ccmp dnom frac locl numr pnum tnum.
       There is NO cv05, NO cv08, NO ss03 in the estate's subset — see DEAD FEATURES below.
   ═══════════════════════════════════════════════════════════════════════════════════════════ */


/* ── 1 · THE FACES ──────────────────────────────────────────────────────────────────────────
   Same shape as public_html/assets/fonts/_chrome.css (WO-FT1): one declaration per weight,
   font-display:swap, self-hosted woff2. Declared here rather than by editing _chrome.css,
   because _chrome.css is Mission Control's generated chrome asset and ruling 77 forbids
   touching it. An @font-face changes nothing until a font-family names it, so these are inert
   on any page that does not also carry .fs-staff.
   SIL OFL 1.1 licence text travels with the fonts:
     /assets/fonts/inter/OFL.txt   ·   /assets/fonts/jetbrains_mono/OFL.txt                  */

@font-face{font-family:"Inter";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/inter/inter-400.woff2) format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/inter/inter-500.woff2) format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:600;font-display:swap;src:url(/assets/fonts/inter/inter-600.woff2) format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/inter/inter-700.woff2) format("woff2")}
@font-face{font-family:"Inter";font-style:normal;font-weight:800;font-display:swap;src:url(/assets/fonts/inter/inter-800.woff2) format("woff2")}

@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/jetbrains_mono/jetbrains_mono-400.woff2) format("woff2")}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:700;font-display:swap;src:url(/assets/fonts/jetbrains_mono/jetbrains_mono-700.woff2) format("woff2")}


/* ═══ TIER 1 · THE FACE ═════════════════════════════════════════════════════════════════════
   Fallback chains are Atlassian's product-UI chains verbatim, so that on a cold load before the
   woff2 lands the staff portal degrades exactly the way an Atlassian product does.
   Re-pointing the TOKENS does almost all of the work: the staff shell writes
   `font-family:var(--display)` and `var(--body)` in 134 places, so two token lines swap the
   face across the whole portal without one element selector.
   The ladder is expressed in rem, as Atlassian expresses it — deliberately, so a person who
   raises their browser's base size raises the whole portal. MEASURED: the staff shell sets no
   html{font-size}, so 1rem = 16px and every px figure in the comments holds.               */

.fs-staff{
  /* the two families */
  --fss-body:    "Inter", ui-sans-serif, -apple-system, BlinkMacSystemFont,
                 "Segoe UI", Ubuntu, "Helvetica Neue", sans-serif;
  --fss-display: var(--fss-body);          /* deliberately identical: there is no display face */
  --fss-mono:    "JetBrains Mono", ui-monospace, Menlo, "Segoe UI Mono",
                 "Ubuntu Mono", monospace;

  /* re-point every inherited token the staff shell and the extracted MC bundle read, INSIDE
     this scope only. --display and --body are the staff shell's own names
     (private_html/_staff_ui.php, fs_staff_ui_css() :167-168); the rest are the MC/Tailwind
     token names the ruling-77 extraction carries. */
  --display: var(--fss-display);
  --body:    var(--fss-body);
  --fs-display: var(--fss-display);
  --fs-body: var(--fss-body);
  --font-family-primary: var(--fss-body);
  --font-sans: var(--fss-body);
  --font-mono: var(--fss-mono);
  --default-font-family: var(--fss-body);
  --default-mono-font-family: var(--fss-mono);

  /* ── Atlassian's published ladder, as tokens. Available to every surface whether or not
        the ladder tier below is switched on. ── */
  --fst-h-xxl-size:2rem;      --fst-h-xxl-lh:2.25rem;    /* 32 / 36 */
  --fst-h-xl-size:1.75rem;    --fst-h-xl-lh:2rem;        /* 28 / 32 */
  --fst-h-l-size:1.5rem;      --fst-h-l-lh:1.75rem;      /* 24 / 28 */
  --fst-h-m-size:1.25rem;     --fst-h-m-lh:1.5rem;       /* 20 / 24 */
  --fst-h-s-size:1rem;        --fst-h-s-lh:1.25rem;      /* 16 / 20 */
  --fst-h-xs-size:.875rem;    --fst-h-xs-lh:1.25rem;     /* 14 / 20 */
  --fst-h-xxs-size:.75rem;    --fst-h-xxs-lh:1rem;       /* 12 / 16 */
  --fst-body-l-size:1rem;     --fst-body-l-lh:1.5rem;    /* 16 / 24 */
  --fst-body-size:.875rem;    --fst-body-lh:1.25rem;     /* 14 / 20 */
  --fst-body-s-size:.75rem;   --fst-body-s-lh:1rem;      /* 12 / 16 */
  --fst-code-size:.75rem;     --fst-code-lh:1.25rem;     /* 12 / 20 */
  --fst-metric-l-size:1.75rem;--fst-metric-l-lh:2rem;    /* 28 / 32 */
  --fst-metric-m-size:1.5rem; --fst-metric-m-lh:1.75rem; /* 24 / 28 */
  --fst-metric-s-size:1rem;   --fst-metric-s-lh:1.25rem; /* 16 / 20 */
  --fst-weight-heading:700;   /* Atlassian's heading tokens are Bold, the whole ladder */
  --fst-weight-body:400;
  --fst-weight-medium:500;
  --fst-floor:.75rem;         /* 12px — Atlassian raised its own floor from 11px. Never below. */

  /* Atlassian ships no tracking scale. Sweeping their entire design-system CSS returns
     `normal` and a single -0.008em. So: normal, everywhere. The token exists only so that
     nobody re-invents a tracking system later. */
  --fst-tracking:normal;

  font-family: var(--fss-body);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* DEAD FEATURES — DO NOT UNCOMMENT WITHOUT RE-SUBSETTING INTER FIRST.
   The recon recommended Inter's cv05 / cv08 / ss03 to close the gap to Atlassian Sans's letter
   disambiguation (l vs I vs 1). MEASURED 2026-09-02 with fontTools against the estate's own
   inter-400.woff2: the shipped subset's GSUB carries only calt ccmp dnom frac locl numr pnum
   tnum. Those three features DO NOT EXIST in this file, so the declaration would be inert CSS
   that reads like a shipped feature. Left here, disabled, with the condition for turning it on:
       font-feature-settings: "cv05" 1, "cv08" 1, "ss03" 1;
   → OWED: re-subset Inter from rsms.me/inter (upstream carries cv01–cv13, ss01–ss04), re-stamp
     private_html/data/fonts/fonts.manifest.json, regenerate _chrome.css. That is a
     public_html + manifest job, outside this lane's lock. Until it lands, this stays commented. */

/* THE ICON FIREBREAK — not boilerplate. The MC bundle the staff shell extracted carries
   !important font-family declarations for Font Awesome, lucide and Phosphor-Duotone. Re-pointing
   --font-family-primary inside the scope is safe and intended; an icon family inheriting a text
   face turns every glyph into a letter. `revert` hands each of these back to the icon library's
   own rule. Their !important already beats this file; this rule exists so that a future edit
   which drops that !important still cannot break the icons. */
.fs-staff .fa,.fs-staff .fas,.fs-staff .far,.fs-staff .fal,.fs-staff .fab,
.fs-staff [class*="fa-"],.fs-staff .lucide,.fs-staff [class*="lucide-"],
.fs-staff [class*="ph-"],.fs-staff .material-icons,.fs-staff .material-symbols-outlined{
  font-family: revert;
}


/* ═══ TIER 2 · THE LADDER ═══════════════════════════════════════════════════════════════════
   Everything below needs BOTH classes on <body>. Remove `fs-type-ladder` and the portal keeps
   its current sizes in the new face.                                                        */

/* the scope element itself carries the base body token — (0,2,0) beats the shell's
   `body{font:400 14px/1.5 var(--body)}` at (0,0,1) with no !important */
.fs-staff.fs-type-ladder{
  font-size: var(--fst-body-size);
  line-height: var(--fst-body-lh);
  font-weight: var(--fst-weight-body);
  letter-spacing: var(--fst-tracking);
}

/* ── headings: one family, weight-led, no tracking ──────────────────────────────────────────
   h1 lands on Atlassian's heading.large (24/28) — which is also the size the staff portal's
   page titles already use, so the face and the weight change and the layout does not. */
.fs-staff.fs-type-ladder h1,.fs-staff.fs-type-ladder h2,.fs-staff.fs-type-ladder h3,
.fs-staff.fs-type-ladder h4,.fs-staff.fs-type-ladder h5,.fs-staff.fs-type-ladder h6{
  font-family: var(--fss-display);
  font-weight: var(--fst-weight-heading);
  letter-spacing: var(--fst-tracking);
  font-variant-numeric: tabular-nums;
}
.fs-staff.fs-type-ladder h1{ font-size:var(--fst-h-l-size);   line-height:var(--fst-h-l-lh); }
.fs-staff.fs-type-ladder h2{ font-size:var(--fst-h-m-size);   line-height:var(--fst-h-m-lh); }
.fs-staff.fs-type-ladder h3{ font-size:var(--fst-h-s-size);   line-height:var(--fst-h-s-lh); }
.fs-staff.fs-type-ladder h4{ font-size:var(--fst-h-xs-size);  line-height:var(--fst-h-xs-lh); }
.fs-staff.fs-type-ladder h5,.fs-staff.fs-type-ladder h6{
  font-size:var(--fst-h-xxs-size); line-height:var(--fst-h-xxs-lh); }

/* ── body, small, and the 12px floor ────────────────────────────────────────────────────────
   Atlassian raised its own floor from 11px to 12px for accessibility and ruling 81 adopts that
   floor. Every semantic small-text element lands ON the floor, never under it. */
.fs-staff.fs-type-ladder p,.fs-staff.fs-type-ladder li{
  font-family: var(--fss-body);
  font-size: var(--fst-body-size); line-height: var(--fst-body-lh);
  letter-spacing: var(--fst-tracking);
  /* NO font-weight here, deliberately. In a weight-led system the weight IS the hierarchy:
     a <p> holding a person's name at 700 is the surface's emphasis, not body copy, and
     flattening every paragraph to 400 would destroy exactly the hierarchy ruling 81 wants.
     The ladder governs FAMILY, SIZE, LINE-HEIGHT and TRACKING on body elements; the base
     weight comes from the scope rule above and any surface may out-weigh it. Headings are
     the one place weight IS part of the token — Atlassian's heading ladder is Bold. */
}
.fs-staff.fs-type-ladder dd,.fs-staff.fs-type-ladder dt,
.fs-staff.fs-type-ladder td,.fs-staff.fs-type-ladder th,
.fs-staff.fs-type-ladder input,.fs-staff.fs-type-ladder select,
.fs-staff.fs-type-ladder textarea,.fs-staff.fs-type-ladder label{
  font-family: var(--fss-body); letter-spacing: var(--fst-tracking);
}
.fs-staff.fs-type-ladder small,.fs-staff.fs-type-ladder figcaption,
.fs-staff.fs-type-ladder caption,.fs-staff.fs-type-ladder legend{
  font-family: var(--fss-body);
  font-size: var(--fst-body-s-size); line-height: var(--fst-body-s-lh);
  letter-spacing: var(--fst-tracking);   /* weight left to the surface — see the note above */
}

/* ── numbers ────────────────────────────────────────────────────────────────────────────────
   Ruling 81: tabular numerals in queue tables. Inter's shipped subset DOES carry `tnum`
   (measured), so this is a live feature and not a hopeful one. Applied to every table and to
   the time/data elements, so a column of figures never shifts width as it updates. */
.fs-staff.fs-type-ladder table,.fs-staff.fs-type-ladder time,
.fs-staff.fs-type-ladder data,.fs-staff.fs-type-ladder meter,
.fs-staff.fs-type-ladder progress{ font-variant-numeric: tabular-nums; }

/* ── code, IDs, timestamps ──────────────────────────────────────────────────────────────────
   Atlassian's font.code token: Regular, 12px, 20px line-height. JetBrains Mono is a monospace,
   so its figures are tabular by construction; the declaration is stated anyway so that a
   fallback face (ui-monospace → Menlo) still lines its columns up. */
.fs-staff.fs-type-ladder code,.fs-staff.fs-type-ladder kbd,.fs-staff.fs-type-ladder samp,
.fs-staff.fs-type-ladder pre,.fs-staff.fs-type-ladder tt{
  font-family: var(--fss-mono);
  font-size: var(--fst-code-size); line-height: var(--fst-code-lh);
  font-weight: var(--fst-weight-body); letter-spacing: var(--fst-tracking);
  font-variant-numeric: tabular-nums;
}
.fs-staff.fs-type-ladder pre code{ font-size:inherit; line-height:inherit; }


/* ═══ THIS FILE'S OWN UTILITIES ═════════════════════════════════════════════════════════════
   Written at (0,3,0) so they outrank the element ladder above on the same element. These are
   the opt-ins a surface uses when the semantic element is not enough — and they are the whole
   reason the ladder is not a straitjacket: a hero that wants 28px asks for .fst-h-xl.        */

.fs-staff.fs-type-ladder .fst-h-xxl{ font-size:var(--fst-h-xxl-size); line-height:var(--fst-h-xxl-lh); font-weight:var(--fst-weight-heading); font-family:var(--fss-display); letter-spacing:var(--fst-tracking); }
.fs-staff.fs-type-ladder .fst-h-xl { font-size:var(--fst-h-xl-size);  line-height:var(--fst-h-xl-lh);  font-weight:var(--fst-weight-heading); font-family:var(--fss-display); letter-spacing:var(--fst-tracking); }
.fs-staff.fs-type-ladder .fst-h-l  { font-size:var(--fst-h-l-size);   line-height:var(--fst-h-l-lh);   font-weight:var(--fst-weight-heading); font-family:var(--fss-display); letter-spacing:var(--fst-tracking); }
.fs-staff.fs-type-ladder .fst-body-l{ font-size:var(--fst-body-l-size); line-height:var(--fst-body-l-lh); font-weight:var(--fst-weight-body); }
.fs-staff.fs-type-ladder .fst-body { font-size:var(--fst-body-size);  line-height:var(--fst-body-lh);  font-weight:var(--fst-weight-body); }
.fs-staff.fs-type-ladder .fst-small{ font-size:var(--fst-body-s-size);line-height:var(--fst-body-s-lh);font-weight:var(--fst-weight-body); }

/* Uppercase micro-labels — the ONE place tracking is legibility and not decoration, because
   capitals set solid are hard to read. They sit ON the 12px floor, never under it. This is the
   class the shell's remaining 10.5px letterspaced eyebrows should be re-marked with. */
.fs-staff.fs-type-ladder .fst-label{
  font-family: var(--fss-body);
  font-size: var(--fst-floor); line-height:1rem;
  font-weight: var(--fst-weight-heading);
  letter-spacing:.06em; text-transform:uppercase;
}

/* Metrics — Atlassian's font.metric tokens. Bold, tabular, on the ladder. */
.fs-staff.fs-type-ladder .fst-metric-l{ font-size:var(--fst-metric-l-size); line-height:var(--fst-metric-l-lh); font-weight:var(--fst-weight-heading); font-family:var(--fss-display); letter-spacing:var(--fst-tracking); font-variant-numeric:tabular-nums; }
.fs-staff.fs-type-ladder .fst-metric-m{ font-size:var(--fst-metric-m-size); line-height:var(--fst-metric-m-lh); font-weight:var(--fst-weight-heading); font-family:var(--fss-display); letter-spacing:var(--fst-tracking); font-variant-numeric:tabular-nums; }
.fs-staff.fs-type-ladder .fst-metric-s{ font-size:var(--fst-metric-s-size); line-height:var(--fst-metric-s-lh); font-weight:var(--fst-weight-heading); font-family:var(--fss-display); letter-spacing:var(--fst-tracking); font-variant-numeric:tabular-nums; }
.fs-staff.fs-type-ladder .fst-num{ font-variant-numeric: tabular-nums; }
.fs-staff.fs-type-ladder .fst-mono{
  font-family: var(--fss-mono);
  font-size: var(--fst-code-size); line-height: var(--fst-code-lh);
  font-weight: var(--fst-weight-body); font-variant-numeric: tabular-nums;
}


/* ═══ CURRENT-SHELL BRIDGE — dated 2026-09-02, DELETE AFTER SHELL v2 ════════════════════════
   Everything above this line is element-scoped or this file's own, and survives any shell.
   These three selectors are the exception, and they earn it: the staff portal's IDs, evidence
   rows and money figures are marked with the CURRENT shell's own classes, and ruling 81 asks
   for mono on exactly those. Without this block the portal would ship a mono face that nothing
   in it actually uses.
   MEASURED in the live shell CSS (private_html/_staff_ui.php, fs_staff_ui_css()):
       .mono     { font-family: ui-monospace,SFMono-Regular,Menlo,monospace }
       .evid dd  { font-family: ui-monospace,SFMono-Regular,Menlo,monospace }
       .money    { font-family: ui-monospace,SFMono-Regular,Menlo,monospace }
   .mono and .evid dd carry IDs, function names and hashes → the full code token.
   .money carries currency figures inside running copy → face and tabular figures only, because
   dropping a money figure to 12px inside a 14px line would look like a mistake.
   When STAFFCHROME-REWORK lands shell v2, re-mark those spans with .fst-mono / .fst-num and
   delete this whole block. Nothing else in this file knows a shell class name.              */

.fs-staff.fs-type-ladder .mono,.fs-staff.fs-type-ladder .evid dd{
  font-family: var(--fss-mono);
  font-size: var(--fst-code-size); line-height: var(--fst-code-lh);
  font-weight: var(--fst-weight-body);
  font-variant-numeric: tabular-nums;
}
.fs-staff .money{
  font-family: var(--fss-mono);
  font-variant-numeric: tabular-nums;
}
