/* ============================================================================
   THE UPPERCASE VOICE — one sheet, every surface.

   Celina, 6 Aug 2026, ruling:
     "UPPER CASE LOCK is for design. Follow exact format for official documents
      like Visas, Passports etc. Everything else should be UPPER CASE. the
      sentance case dotted around the site … lose the premium feel."

   The rule lived only in crew-ui.css, which just ELEVEN surfaces load. The other
   twenty-one — copyright, sync, ingest, travel, tour, inbox, shell, index — had
   no uppercase voice at all. That is the "sentence case dotted around the site":
   not drift within a page, whole pages that never got the treatment.

   The carve-outs below are CORRECTNESS, not taste, and they are the same three
   crew-ui.css has always carried. They win via !important + specificity.
   ============================================================================ */

body { text-transform: uppercase; letter-spacing: .026em; }

/* form controls reset text-transform in the UA sheet, so <button> does NOT
   inherit body uppercase — target it explicitly. */
button { text-transform: uppercase; }

/* --- CARVE-OUT (a): live user input is NEVER transformed, and placeholders
   read exactly as typed. Typing lowercase and seeing caps is a lie about what
   will be saved. --- */
input, select, textarea, option, optgroup {
  text-transform: none !important; letter-spacing: normal !important;
}
input::placeholder, textarea::placeholder {
  text-transform: none !important; letter-spacing: normal !important;
}

/* --- CARVE-OUT (b): OFFICIAL DOCUMENT COPY — passport, visa, ID — rendered
   EXACTLY as written. This is the one her ruling names outright: a passport
   name is a legal string, not a design surface. --- */
.keepcase, .keepcase * { text-transform: none !important; }

/* --- CARVE-OUT (c): emails and URLs shown as text. Case can be meaningful and
   lowercase reads correct. Anchored links are auto-exempt; free-text spans take
   .keepcase / .lower / .email / .url. The two cross-surface nav link classes are
   excluded from the exemption — the nav is chrome, not content (her 3 Aug note,
   "still see sentance case on nav bar"). --- */
a[href^="mailto:"]:not(.rollon-xnav__link):not(.rollon-strip__link),
a[href^="http:"]:not(.rollon-xnav__link):not(.rollon-strip__link),
a[href^="https:"]:not(.rollon-xnav__link):not(.rollon-strip__link),
a[href^="tel:"]:not(.rollon-xnav__link):not(.rollon-strip__link),
.lower, .email, .url { text-transform: none !important; }

/* --- CARVE-OUT (d): OUTGOING CORRESPONDENCE IS NEVER SHOUTED.

   Celina, 18 Aug 2026, about to send an invoice to EMMMA:
     "the UPPER case rule should not be applied to emails."

   She is right and it is the same principle as carve-out (b), not a new one. Her
   6 Aug ruling was "UPPER CASE LOCK is for DESIGN", and an email is not design:
   it is a letter leaving the building with her name on it. A client reading
   "PLEASE FIND ATTACHED INVOICE INV-0042" is being shouted at by their own
   supplier, and every complaint she has made about the site reading amateur has
   been about exactly this kind of mismatch between chrome and content.

   THE TRAP THIS FIXES IS SPECIFICALLY A PREVIEW ONE, and it is worse than a
   cosmetic bug. text-transform changes what is PAINTED and never what is stored,
   so the invoice email preview showed her SHOUTING COPY while the bytes queued
   for send were correctly sentence case. The preview was lying in both
   directions: it is the one surface whose whole job is to show her exactly what
   the recipient will get, and it was the one surface guaranteed not to.

   Applies to anything carrying .emailcopy — the compose preview, a rendered
   template, a queued message body. NOT to the chrome around it: the SEND button,
   the panel heading and the field labels stay UPPER, because those are design. */
.emailcopy, .emailcopy * { text-transform: none !important; letter-spacing: normal !important; }

/* --- CARVE-OUT (f): LONG TEXT READS AS WRITTEN.

   Celina, 18 Aug, ruling after finding the review rows unreadable:
     "Design elements (buttons etc) upper case but long text or data can be written sentance"

   This is the GENERAL CASE the carve-outs above were each approximating. Every one of them says the
   same thing in a different costume: the uppercase voice is for the INTERFACE, never for content. A
   passport is content. An email is content. A paragraph is content.

   MEASURED WHEN SHE REPORTED IT: whole sentences were being uppercased across 295 writer-correction
   rows, 221 lyric rows and 100 deal notes. All-caps prose is slower to read for anyone and materially
   harder with ADHD, so a 40-word note in caps is not a style choice, it is a wall. Her word for it
   was "screaming", and it was literal.

   The class is applied by assets/prose-case.js, which decides per CONTAINER and never per string:
   mixed case down one column reads as a bug rather than as a voice. Chrome is untouched at any
   length; buttons, chips, labels, headers and nav all keep the shout. */
.prosecase, .prosecase * { text-transform: none !important; letter-spacing: normal !important; }

/* --- CARVE-OUT (e): NAMES AND TITLES, AS WRITTEN.

   Celina, 6 Aug 2026, amending her own earlier ruling:
     "Song Titles should stay in the case that they are written on the file or
      from previous entries. Passports, Visas, Song Titles and Artists should not
      use the UPPER CASE rule."

   This REVERSES the 5 Aug position, where a proposal to exempt titles and names
   was rejected. It is now settled the other way, and it draws a cleaner line than
   the old one did:

       CHROME IS UPPERCASE. DATA KEEPS ITS CASE.

   A button, a column head, a status pill, a nav link — those are design, and the
   lock owns them. A song title, an artist or writer name, a person's legal name —
   those are the record itself. `Wednesday's Child [EP]` is how the file is named
   and how the split sheet reads; WEDNESDAY'S CHILD [EP] is a different string,
   and on a cue sheet or a registration that difference is a correctness problem,
   not a taste one. It sits under the same clause as the passport for exactly that
   reason.

   `.keepcase` still covers passport / visa / ID. These are its siblings, named
   for what they are so a render site declares its intent rather than borrowing
   the ID exemption. --- */
.songtitle, .artistname, .personname, .writername, .companyname,
.songtitle *, .artistname *, .personname *, .writername *, .companyname * {
  text-transform: none !important;
}

/* STRUCTURAL, so a render site cannot be missed by forgetting to tag it.
   On every record surface the card's own heading IS the record — the song title
   on copyright/sync, the person's name on a directory card — and `.ttl` / `.art`
   are the title and artist cells of the song tables. Verified against these
   pages: neither class is ever used for chrome, and the column headers are
   <th>/.hcell, which stay uppercase. */
.ttl, .art,
.pcard > .hdrrow > h2,
.tp > h3,
.shp-t, .shp-a,
.rec-title, .recname {
  text-transform: none !important;
}

/* --- CARVE-OUT (d): QUOTED CORRESPONDENCE — an inbound email body, reproduced
   verbatim. Celina, 6 Aug 2026, on the inbox board: "amend the design so super
   easy on the eye."

   This sits under the SAME clause as the passport: her ruling exempts anything
   reproduced in its exact format, and someone else's sentence is exactly that.
   Uppercasing it is a misquote — and unreadable at length, because all-caps
   removes the ascender/descender shape the eye reads words by. A paragraph of
   it is fine on a button and punishing across 373 cards.

   The card's FURNITURE stays uppercase: subject, sender, status pill, labels,
   every control. Only the quoted body reads as it was written. --- */
.asread, .asread * { text-transform: none !important; letter-spacing: normal !important; }

/* small runs need a touch more tracking to stay legible in all-caps. */
.hint, .foot, .pagefoot, .muted, .note { letter-spacing: .05em; }


/* --- CARVE-OUT (g): A GRID CELL HOLDS DATA. ITS HEADER IS CHROME.

   Celina, 18 Aug: "Names and Data can be in Sentance Case." / "DESIGN pieces UPPER." / "Songs should
   not be in UPPER unless written in upper."

   MEASURED on the Directory the moment she said it: 108 of 165 visible data cells were being
   uppercased. Not titles, not headings, DATA: "G major" read G MAJOR, "117.0", "27 May 2024",
   "mood: sexy". A key signature and a mood tag are values, not design.

   WHY CARVE-OUT (f) COULD NEVER CATCH THIS, and it is the lesson of the day: (f) un-shouts long runs,
   and a key signature is SEVEN characters. Length is the wrong axis. It was never about how long the
   text is, it is about WHAT THE THING IS. So this rule is structural rather than metric: in a data
   grid the VALUES are data and the COLUMN HEADERS are chrome, and that holds on every surface with a
   table whether or not anyone remembered to tag it.

   NOT A DATA-INTEGRITY BUG, and worth recording so nobody panics next time: text-transform changes
   what is PAINTED and never what is stored, and assets/view-export.js contains ZERO textContent reads
   because it exports from the data. So no CSV, cue sheet or registration ever carried the shouted
   form. Her WEDNESDAY'S CHILD [EP] concern is real for anything that reads the SCREEN; nothing does.

   CHROME INSIDE A CELL KEEPS ITS VOICE. A status pill, a chip, a button or an action verb that lives
   in a cell is still design and is excluded below, so the rule does not quietly soften the interface
   the way carve-out (f) was guarded against. --- */
td, .cell, .rc-fval, td *, .cell *, .rc-fval * { text-transform: none !important; }
/* ...but anything that is CHROME wearing a cell's clothes stays UPPER. .cpill is the renderer's
   pill (grid-page/field-types) and had slipped through this list - her morning screenshot,
   23 Aug: the STATUS pills read lowercase in the grid while the card said PAID. */
td button, td .chip, td .pill, td .cpill, td .btn, td .tbtn, td .bbtn, td .rowedit, td [role="button"],
.cell button, .cell .chip, .cell .pill, .cell .cpill, .cell .btn, .cell [role="button"] { text-transform: uppercase !important; }
/* Column headers are the design of the table, not its contents. */
th, .hcell { text-transform: uppercase !important; }

/* --- CARVE-OUT (h): THE RECORD CARD IS THE RECORD. ------------------------------------------

   Celina, 26 Aug 2026: "somewhere along the line all my directory records were changed to UPPER -
   I only asked for design of the app to be upper not all my records."

   NOTHING WAS CHANGED, and that is worth saying first because it is the frightening reading.
   Checked in her data the moment she said it: `Emma Ruchefsky` is stored exactly like that, and
   only 143 of 13,067 people are stored in caps - names that genuinely are, like EMMMA and FKJ.
   text-transform paints; it never writes. Her records are untouched.

   WHAT WAS ACTUALLY WRONG. Carve-out (g) settled this for the GRID - "in a data grid the VALUES are
   data and the COLUMN HEADERS are chrome" - and exempted td / .cell / .rc-fval. The record CARD
   renders neither: its heading is #rtitle and its values are .fv. So the one surface that is
   nothing BUT a record was the one surface still shouting it. Measured on her own card: the DOM
   read "Emma Ruchefsky (ID)" and the screen read "EMMA RUCHEFSKY (ID)".

   This is (g) again, applied to the shape it missed, and it is structural for the same reason:
   not because a name is long, but because of WHAT THE THING IS.

   CHROME INSIDE THE CARD KEEPS ITS VOICE, exactly as it does inside a cell - the section headings,
   the pills, the desk controls and every button stay UPPER, because those are design. --- */
#rtitle, #rsubtitle, .rfield .fv, .rfield .fv *,
.rgc .fv, .rgc .fv *, .rgc #rtitle, .rgc #rsubtitle {
  text-transform: none !important;
}
/* ...but anything that is CHROME wearing a value's clothes stays UPPER — the same guard carve-out
   (g) needed the day a status pill slipped through it. */
.rfield .fv button, .rfield .fv .chip, .rfield .fv .pill, .rfield .fv .cpill,
.rfield .fv .spchip, .rfield .fv .ctl-b, .rfield .fv [role="button"], .rfield .fv .invlk,
.rgc .fv button, .rgc .fv .chip, .rgc .fv .pill, .rgc .fv .cpill,
.rgc .fv .spchip, .rgc .fv .ctl-b, .rgc .fv [role="button"], .rgc .fv .invlk {
  text-transform: uppercase !important;
}
