/* The label face.
 *
 * One style runs through this app in ~80 places: small, dim, and until this
 * file existed, uppercase and letter-spaced. It is the CRM's column headers,
 * the tracker's Gross / Net,
 * the live-call form's field labels, every other table's headers, the kanban
 * column labels, the calendar's weekdays. Until now it wore the body face.
 * Under Arsenal and Arsenal Dark it wears Noto Sans Caucasian Albanian
 * (--font-label) — named for a historic script, but shipping the standard Noto
 * latin subsets, which is what these labels render in.
 *
 * WHY THIS IS ONE FILE AND ONE RULE, rather than a font-family line added to
 * each of those ~80 declarations: this list *is* the definition of "the label
 * style". Scattered across twenty stylesheets it would be invisible, and the
 * next person to add a label would have no way to know what to match. Here it
 * is greppable, and reverting the whole idea is deleting one file.
 *
 * WHY IT IS SCOPED TO THE TWO ARSENAL APPEARANCES rather than driven purely by
 * the token: most of these selectors do not currently declare a font-family at
 * all — they inherit. Setting one unconditionally would pin them to the body
 * face everywhere, which is *usually* what they already inherit but is not
 * guaranteed for a label nested inside a display-face container. Scoping means
 * Classic, Ivory, Jarvis and Windows 2000 have provably zero rules applied.
 *
 * Load order matters: this must come after every component and page stylesheet
 * (several of them set font-family on these same selectors at equal
 * specificity, so the later rule wins) and before the theme flourish files,
 * which are scoped higher and must keep winning. See index.html.
 *
 * DELIBERATELY NOT INCLUDED — pills, badges, status chips and tags. They share
 * that treatment but they are not headers: .status-pill,
 * .team-role-badge, .cp-msg-status, .notes-knockout-pill, .modal-tier-pill,
 * .carrier-card-stub, .cal-appt-external-badge and friends stay on the body
 * face, where a second face inside a coloured chip would only muddy it.
 * Also excluded: the Settings theme-preview tiles, which hardcode their own
 * type on purpose so each tile shows its own appearance. */

:root[data-theme="arsenal"] :is(
  /* Tables — column headers */
  .crm-table th,
  .costs-table th,
  .admin-table th,
  .audit-table thead th,
  .pop-table th,
  .modal-tier-table thead th,
  .import-preview-tbl th,
  .import-review-tbl th,
  .import-map-head,

  /* Stat blocks and charts */
  .stat-label,
  .kpi-label,
  .chart-donut-cap,
  .chart-panel-label,

  /* Forms and detail panels */
  .form-label,
  .cp-field-label,
  .cp-subsection-label,
  .cp-quotes-k,
  .sms-composer-label,
  .cp-msg-reply-head,
  .sms-vars-cheatsheet summary,
  .cp-msg-sim summary,

  /* Kanban */
  .column-label,
  .kanban-metric-label,
  .kanban-date-label,

  /* Calendar */
  .cal-weekday,
  .cal-appt-date,
  .cal-source-filters-label,

  /* Carriers */
  .carrier-product-faces-label,
  .comp-cat-hdr,
  .agent-info-label,
  .build-corner,
  .build-weight-hdr,
  .contact-role,
  .contact-label,

  /* Notes / live-call form */
  .notes-subheading,
  .notes-quote-grid-header,
  .notes-knockout-subhead,
  .notes-tips-h,
  .notes-tips-health-label,
  .notes-hx-group-head,
  .notes-condition-meds-head,
  .pn-row-head,
  .notes-engine-title,
  .notes-engine-tier,
  .notes-engine-class,
  .notes-engine-conf-label,
  .notes-engine-conf-band,
  .notes-engine-sub,

  /* Team */
  .team-period-label,
  .team-pending-self h3,
  .team-section-title,
  .team-my-contrib-rank-label,
  .team-my-contrib-stats span,
  .team-lb-col-header,
  .team-field span,
  .team-field-label,

  /* Everything else */
  .admin-section-title,
  .settings-section-label,
  .states-section-label,
  .research-suggest-group-title,
  .modal-section-title,
  .import-panel-head,
  .edit-menu-section-title,
  .forecast-output-title
),
:root[data-theme="arsenal-dark"] :is(
  .crm-table th,
  .costs-table th,
  .admin-table th,
  .audit-table thead th,
  .pop-table th,
  .modal-tier-table thead th,
  .import-preview-tbl th,
  .import-review-tbl th,
  .import-map-head,

  .stat-label,
  .kpi-label,
  .chart-donut-cap,
  .chart-panel-label,

  .form-label,
  .cp-field-label,
  .cp-subsection-label,
  .cp-quotes-k,
  .sms-composer-label,
  .cp-msg-reply-head,
  .sms-vars-cheatsheet summary,
  .cp-msg-sim summary,

  .column-label,
  .kanban-metric-label,
  .kanban-date-label,

  .cal-weekday,
  .cal-appt-date,
  .cal-source-filters-label,

  .carrier-product-faces-label,
  .comp-cat-hdr,
  .agent-info-label,
  .build-corner,
  .build-weight-hdr,
  .contact-role,
  .contact-label,

  .notes-subheading,
  .notes-quote-grid-header,
  .notes-knockout-subhead,
  .notes-tips-h,
  .notes-tips-health-label,
  .notes-hx-group-head,
  .notes-condition-meds-head,
  .pn-row-head,
  .notes-engine-title,
  .notes-engine-tier,
  .notes-engine-class,
  .notes-engine-conf-label,
  .notes-engine-conf-band,
  .notes-engine-sub,

  .team-period-label,
  .team-pending-self h3,
  .team-section-title,
  .team-my-contrib-rank-label,
  .team-my-contrib-stats span,
  .team-lb-col-header,
  .team-field span,
  .team-field-label,

  .admin-section-title,
  .settings-section-label,
  .states-section-label,
  .research-suggest-group-title,
  .modal-section-title,
  .import-panel-head,
  .edit-menu-section-title,
  .forecast-output-title
) {
  font-family: var(--font-label);

  /* Not uppercase. Every one of these labels is written in title case at the
     source — 'Product Line', 'Draft Date', 'Gross', 'Mon' — and was only being
     shouted by CSS, so dropping the transform gets the words back as written
     rather than needing any of them re-typed.

     The tracking goes with it. Letter-spacing exists to stop uppercase runs
     from setting too tight; on lowercase it just pulls the words apart. It is
     set rather than removed because the rules this overrides carry 0.06–0.08em
     of their own, and something has to beat them. */
  text-transform: none;
  letter-spacing: 0.01em;

  /* No font-weight here on purpose. The face is regular-only upstream, so
     asking for 600 buys a browser-synthesised bold rather than a drawn one;
     each rule's existing weight is left to do whatever it already did. */
}
