/* ==========================================================================
   FONT-ONE-SIZE.CSS  —  one text size, everywhere, and smaller than before.
   --------------------------------------------------------------------------
   Author: Sharmila Parthiban.  14 Sep 2026.
   (instruction of 14 Sep 2026: "make font size small over all one size".)

   WHAT THIS DOES. Every piece of text on the site renders at ONE size —
   --fs-one, 0.875rem / 14px — instead of the nine-step scale the site was
   built on. Body copy, table cells, form labels, chips and headings all land
   on the same number. Headings stay legible as headings because they keep
   their WEIGHT and spacing; only the size stops varying.

   WHY A SEPARATE SHEET AND NOT AN EDIT TO tokens.css. tokens.css and
   prototype-app.css are on _Layout's DO-NOT-EDIT list, and the type scale is
   spread across roughly 400 declarations in fifteen loaded stylesheets —
   including two minified ones (mdwds.min.css, md-gov.css) that nobody should
   be hand-patching. Layering the decision the way brand.css and theme.css are
   layered means the whole change is this file plus one <link>, and the rollback
   is deleting that line. Nothing upstream is touched, so a later change to the
   scale is not silently fighting a local edit.

   WHY !important, WHICH IS NOT THE HOUSE STYLE. The rule has to beat plain
   element selectors in sheets that load after it AND the raw px/rem values in
   the minified files, and "one size everywhere" is only true if it wins
   everywhere — a scale that holds on most of the page and not in the tables is
   worse than either option. This is the one file in the project that gets to
   say so, and it says so about exactly one property.

   IT LOADS AFTER RenderSectionAsync("Styles"), unlike brand.css. brand.css
   deliberately sits BEFORE the section so a page can still win for its own
   page; this cannot allow that, or the pages with their own stylesheet
   (home-landing, signin-lanes, login, map, users) would each keep their own
   sizes and the instruction would hold everywhere except the screens a visitor
   sees first.

   THE READER'S OWN CONTROLS STILL WORK. The value is in REM, and rem resolves
   against the font-size on <html> — which font-switch.css computes as
   calc(100% * var(--font-scale)). So the A- / A / A+ resizer and a raised
   browser default both still scale this, in proportion, exactly as they scaled
   the nine-step scale. A hard px here would have silently taken that away, and
   with it the accessibility escape hatch for the smaller size.

   WHY 14px AND NOT SMALLER. tokens.css names 13px its "legal fine print
   floor". Going below that for BODY text on a government form — one that asks
   property owners and licence holders to read refusal reasons and fee notices
   — is not a size choice, it is a legibility one. 14px is a real reduction
   from the 16px body default and stays above the floor the project already
   set. One number, on the next line, if that judgement is revisited.
   ========================================================================== */

:root {
    /*  THE ONE NUMBER. Change this and the whole site follows. */
    --fs-one: 0.875rem;   /* 14px at the default root size */

    /*  The nine-step scale, collapsed. Every --fs-* token is re-pointed at the
        single value rather than deleted, because custom properties are resolved
        where they are USED: re-valuing them here reaches the places a selector
        cannot, in particular the ::before / ::after rules that size a glyph off
        a token (.th-sort::after, the chip and status marks). Deleting them
        instead would have left those falling back to the browser default. */
    --fs-4xs: var(--fs-one);
    --fs-3xs: var(--fs-one);
    --fs-2xs: var(--fs-one);
    --fs-xs: var(--fs-one);
    --fs-sm: var(--fs-one);
    --fs-md: var(--fs-one);
    --fs-lg: var(--fs-one);
    --fs-xl: var(--fs-one);
    --fs-2xl: var(--fs-one);
}

/* --------------------------------------------------------------------------
   THE BLANKET RULE — every element, then the exclusions that have to exist.
   Descendant-of-body rather than a bare *, so nothing here touches <html>:
   that element carries the calc() the resizer drives, and overriding it would
   turn the reader's stored size choice into a no-op.
   -------------------------------------------------------------------------- */
body,
body *:not([class*="fa-"]):not(.fa):not(.fas):not(.far):not(.fal):not(.fab):not(svg):not(.font-switch__a--small):not(.font-switch__a--medium):not(.font-switch__a--large) {
    font-size: var(--fs-one) !important;
}

/* --------------------------------------------------------------------------
   WHY THE ICON FONTS ARE EXEMPT, since an exemption in a rule called
   "one size" needs a reason.

   Font Awesome draws its glyphs as TEXT: .fa-solid renders a character from an
   icon font, so its font-size is not typography, it is the icon's WIDTH AND
   HEIGHT. Forcing 14px on it does not make the icons consistent with the
   copy, it shrinks every icon on the site to 14px and breaks the fa-2x /
   fa-lg modifiers the buttons and lane headers use for deliberate sizing —
   .lane__icon in the sign-in lanes is exactly that. The [class*="fa-"] match
   covers the icons and their size modifiers together, and svg is excluded for
   the same reason for the few inline SVG icons.

   The three "A" glyphs in the font switcher are excluded because their whole
   job is to PREVIEW the relative step in em. Flattening them would leave a
   size control whose three buttons look identical.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   HEADINGS KEEP THEIR JOB WITHOUT KEEPING THEIR SIZE.
   With the scale collapsed, an <h2> and a <p> are the same size, and on a
   long form that genuinely does read as one undifferentiated block. Weight
   and letter-spacing carry the hierarchy instead — they cost no size
   variation, which is the thing that was asked to stop varying. h1 and h2
   also keep a little more space above them so a section still visibly starts.
   -------------------------------------------------------------------------- */
h1, h2, h3, h4, h5, h6 {
    font-weight: var(--fw-bold, 700) !important;
    line-height: 1.3;
}

h1, h2 {
    letter-spacing: .01em;
}

/*  Uppercase eyebrows and table headers already used weight + letter-spacing
    rather than size to stand out, so they need nothing here — noted so the
    next reader does not add it. */
