/* ============================================================
   uncorrelated-wordmark.css — per-pairing ratios.

   LANDED 18 Aug 2026 (Phase 1 §3). Approved as proposed; the
   three items below were ratified, not left open. Verify any
   future edit against assets/wordmark/_lockup-probe.html —
   19 assertions, measured under a hostile * { margin: 0 } reset.

   What is wrong with the file today
   ---------------------------------
   It declares ONE global ratio (--unc-event-ratio:0.977) and
   reaches AltsOps' 1.000 by overriding font-size inside
   .evlock--sans. So a new city that writes <div class="evlock">
   and nothing else silently inherits LONDON's ratio, renders
   plausibly, and is wrong. The doctrine is per-pairing; the code
   is "London default plus exceptions."

   The change, in one sentence
   --------------------------
   Remove the default. A ratio must be named per pairing, and a
   mark with no city class computes its city at zero — visibly
   broken instead of plausibly wrong. Same convention as the
   London deploy page: fail closed, never fail green.

   Blast radius — measured, not assumed
   ------------------------------------
   .evlock is referenced in 4 files in the evidence set:
     assets/wordmark/uncorrelated-wordmark.css  (definition, 12)
     assets/wordmark/_export-sheet.html         (8 — the PNG source)
     00-brand-system/Wordmark Implementation Spec (7 — docs)
     00-brand-system/README.md                  (1 — docs)
   No deliverable, package, tearsheet or template uses .evlock —
   they set their own .evmark / .lock / .et-lock classes. The live
   London page hardcodes font-size:.977em and is unaffected.
   So the only file that must be edited alongside this one is
   _export-sheet.html: every block in it needs a city class added
   before the PNGs are re-exported.

   Three things to approve
   -----------------------
   1. Fail closed (city at zero) rather than defaulting to 1.000.
      1.000 would be safer to ship and worse to trust: a wrong
      mark that looks right is the failure this pass exists to end.
   2. .evlock--sans keeps face and colour but loses its font-size
      override; its 1.000 becomes explicit as a ratio token.
   3. City colour is its own role, not an accent variant —
      matching --acc-london-city in colors_and_type.css.
   ============================================================ */

/* ---- fonts · SELF-HOSTED, paths relative to this file ----
   GAP CLOSED 3 September 2026. This block previously named
   ../fonts/Inter-900-latin.woff2 and ../fonts/Inter-400-latin.woff2, and NO
   .woff2 file existed anywhere in sites/ or deploy/. Every rule below had been
   silently falling back to system-ui since it was written — the wordmark was
   not Inter on any page that did not separately load the Google CDN.

   All four faces are SIL OFL 1.1; see ../fonts/OFL.txt and ../fonts/README.md.
   VARIABLE fonts, ranges declared. Never pin an instance in the @font-face
   src: a pinned Archivo returns a STATIC face and silently kills
   font-variation-settings, so the expansion vanishes and the mark still looks
   deliberate. Verify by RENDER, not by class name.

   font-display:block on every mark face — a flash of fallback IS a wrong mark.
   Use swap for reading text only, never for the lockup. */
@font-face{font-family:'Inter';src:url('../fonts/Inter-variable-latin.woff2') format('woff2');
  font-weight:100 900;font-style:normal;font-display:block}
@font-face{font-family:'Bodoni Moda';src:url('../fonts/BodoniModa-variable-latin.woff2') format('woff2');
  font-weight:400 900;font-style:normal;font-display:block}
@font-face{font-family:'Cinzel Decorative';src:url('../fonts/CinzelDecorative-700-latin.woff2') format('woff2');
  font-weight:700;font-style:normal;font-display:block}
/* Archivo · width axis 62-125 MUST be declared here or font-stretch/
   font-variation-settings have nothing to vary. Weight range narrowed to
   400-900 on 3 Sep 2026 (Claude Design): we render 600 and 700 only. */
@font-face{font-family:'Archivo';src:url('../fonts/Archivo-variable-latin.woff2') format('woff2');
  font-weight:400 900;font-stretch:62% 125%;font-style:normal;font-display:block}
/* Tenor Sans · Beverly Hills. SINGLE weight, no axes — there is nothing to vary
   and nothing heavier to fall back on. */
@font-face{font-family:'Tenor Sans';src:url('../fonts/TenorSans-400-latin.woff2') format('woff2');
  font-weight:400;font-style:normal;font-display:block}

:root{
  /* ---- inks ---- */
  --unc-ink:#08080A;          /* wordmark on light — matches --ink-mark */
  --unc-paper:#FFFFFF;        /* wordmark on dark */
  --unc-miami:#0CC0DF;        /* U-Alts hyphen */
  --unc-grey-dark:#9AA0A8;    /* location line on dark */
  --unc-grey-light:#585D63;   /* location line on light */

  /* ---- city colours — a ROLE, not an accent variant ----
     The city word carries its own hex. It is not the accent's
     lighter sibling: London's live page declares --acc-lt:#D9987F
     for text and --city:#CE8B72 for the mark, separately. Sans
     cities carry no colour at all — they inherit the wordmark. */
  --unc-city-london:#CE8B72;        /* London on dark */
  --unc-city-london-print:#8E4E38;  /* London on light / in print */
  --unc-rosewood:#B0674F;           /* rosewood RULES and dividers only */

  /* Sans cities DO take their event accent — corrected 19 Aug 2026.
     The former `color:inherit` rendered Cayman, Puerto Rico and
     AltsOps NYC monochrome; every shipped page does the opposite.
     One token per city, mirroring the ratified conference accent in
     colors_and_type.css (var() first so a page that loads the system
     gets the live token, hex second so the kit stands alone).
     A city with no ratified accent gets NO token — see .evlock--altsops. */
  --unc-city-pr:var(--acc-pr,#C9A84C);          /* = --acc-pr */
  --unc-city-cayman:var(--acc-cayman,#009E59);  /* = --acc-cayman */
  --unc-city-altsops:var(--acc-altsops,#FFFFFF); /* = --acc-altsops · ratified white */

  /* Light-surface steps. A city's dark-surface accent is NOT reusable on white:
     gold and kelly both fail 4.5:1 there. One token per city that has a
     ratified step; a city without one keeps color:inherit and prints in ink.
     Fail closed, exactly as the ratios do. */
  --unc-city-pr-print:var(--acc-pr-print,#8A6F22);       /* PR on WHITE · kit-ratified
                                                            contrast step · ratified
                                                            Peter Murrugarra, 3 Sep 2026 */
  --unc-city-cayman-light:var(--acc-cayman-light,#007542); /* Cayman on WHITE · taken from
                                                            the templates/cayman-2026
                                                            rate-card slide · NOT
                                                            kit-ratified — confirm with
                                                            Peter */

  /* ============================================================
     RATIOS — measured per pairing, never inherited.

     Inter's d-ascender is 0.73375em. Each city's face is scaled
     so its FLAT cap lands on it. Round caps overshoot by design;
     do not correct that out.

     A ratio is measured for ONE face at ONE weight. Change the
     face and the number is void — do not carry it across.
     ============================================================ */
  --unc-inter-ascender:0.73375em;   /* the derivation constant, stated once */

  --unc-ratio-london:0.977;   /* Bodoni Moda 700 — measured. 0.978 appears in
                                 four comparison tables; it is a rounding of
                                 this number, not a second value. */
  --unc-ratio-altsops:1.000;  /* Inter 900, peer weight — same face, so 1:1 */
  --unc-ratio-cayman:1.068;   /* Cayman · Archivo Expanded wdth 118 / wght 700 ·
                                 flat cap 0.687 (OS/2 sCapHeight 686/1000, glyph-outline
                                 bbox and render all agree) against Inter 900 d-ascender
                                 0.73375 · validated by reproducing Bodoni 0.977 and
                                 Cinzel 1.022 · corroborated by Newport's Archivo 500
                                 landing on the same figure, as cap invariance predicts
                                 (+0.09% across the wdth axis) ·
                                 ratified Peter Murrugarra, 3 Sep 2026.
                                 SUPERSEDES 1.000, which was never derived: it came from
                                 a deck cover that sets "Cayman" and "2026" as two lines
                                 of the SAME size and carries no "uncorrelated." beside
                                 the city at all. That cover establishes the FACE and
                                 says nothing about the PAIRING. */
  --unc-ratio-pr:1.022;       /* Puerto Rico · Cinzel Decorative Bold · cap-height
                                 matched to Inter's ascender · ratified Peter Murrugarra,
                                 3 Sep 2026. SUPERSEDES the 19 Aug value of 1.000 and the
                                 comment that read "the Cinzel 1.022 kit is retired" —
                                 that retirement was itself withdrawn. Face and ratio are
                                 a PAIRING: never change one without the other, or the
                                 mark ships at the wrong proportion and looks deliberate. */
  --unc-ratio-bh:1.048;       /* Beverly Hills · Tenor Sans 400, CAPITALS, +.14em ·
                                 flat cap 0.700 — rendered E/I/T and OS/2 sCapHeight
                                 700/1000 agree to three places, the cleanest
                                 corroboration of the five · against Inter 900
                                 d-ascender 0.73375 · ratified Peter Murrugarra,
                                 3 Sep 2026. Event date is MAY 2027, not 2026.
                                 Set in CAPS, so every glyph in the city word is a cap
                                 and there is no lowercase to reason about. The
                                 flat/round rule still governs the DERIVATION: measure
                                 E, I or T. O, C and G overshoot a uniform +1.71% —
                                 ordinary optical overshoot, NOT a swash. Do not
                                 correct it out. */

  /* --unc-ratio-newport: OPEN. Do not fill this until the face is
     chosen. Round one (Libre Caslon Display, 1.044) was rejected;
     round two proposes Archivo 500 caps at 1.068. Leaving the token
     absent means a Newport mark cannot be built by accident. */

  /* ---- sales-tier descriptor (Tier 2) ----
     Inter 600, caps, +.14em, at 0.32 x the CITY size, never below
     11px. That floor sets the Tier-2 minimum at a 34px wordmark;
     below it you do not shrink the descriptor, you switch to
     Tier 1. Stated here so it is not rediscovered per city. */
  --unc-descriptor-ratio:0.32;
  --unc-descriptor-floor:11px;
}

/* ---- 1 · company wordmark ---- */
.unc-wordmark{
  font-family:'Inter',system-ui,sans-serif;
  font-weight:900;
  letter-spacing:-.03em;
  line-height:1;
  text-transform:none;          /* guard against inherited utility classes */
  font-feature-settings:normal;
  white-space:nowrap;
  color:var(--unc-paper);
}
.unc-wordmark--ink{color:var(--unc-ink)}
a.unc-wordmark,a .unc-wordmark{color:inherit;text-decoration:none}
/* The period is part of the mark. It takes the mark's colour.
   There is deliberately no dot rule here — do not add one. */

/* ---- 2 · U-Alts wordmark (custom hyphen, em-scaled) ---- */
.ualts{font-family:'Inter',system-ui,sans-serif;font-weight:900;letter-spacing:-.03em;line-height:1;white-space:nowrap;text-transform:none;color:var(--unc-paper);display:inline-block}
.ualts--ink{color:var(--unc-ink)}
.ualts .hy{display:inline-block;width:.342em;height:.151em;background:var(--unc-miami);vertical-align:.252em;margin:0 .03em 0 .08em}
.ualts-endorse{font-family:'Inter',system-ui,sans-serif;font-weight:800;letter-spacing:-.01em;white-space:nowrap}
/* .ualts is inline-block, NOT flex: vertical-align has no effect on
   a flex item and the dash drops to the baseline, reading "U_Alts". */

/* ============================================================
   3 · EVENT LOCKUP

   A city class is REQUIRED. .evlock alone sets no ratio, so the
   city computes to zero and the omission is visible immediately.
   ============================================================ */
.evlock{
  display:flex;
  align-items:center;
  gap:calc(var(--wm) * .60);    /* gap on the CONTAINER, never margins on the
                                   children — a host-page * { margin:0 } reset
                                   silently collapses margins to zero while
                                   every colour and ratio still checks out. */
  color:var(--unc-paper);
  --wm:44px;
  --unc-event-ratio:0;          /* NO DEFAULT. Fail closed. */
  /* The lockup wraps before it overflows. Corrected 19 Aug 2026: the
     degradation ladder was documented in MARK SIZE and implemented in
     VIEWPORT WIDTH, so a lockup that outgrew its own container never
     degraded — the London hero rendered 394px inside a 312px column and
     scrolled the document. Both halves stay nowrap individually; the
     break falls in the 0.60em gap, which becomes the row gap. Nothing
     here reads the window, so this holds in a nav, a card or a modal. */
  flex-wrap:wrap;
  max-width:100%;
}
.evlock .wm{font-family:'Inter',system-ui,sans-serif;font-weight:900;letter-spacing:-.03em;line-height:1;font-size:var(--wm);white-space:nowrap}
.evlock .city{line-height:1;font-size:calc(var(--wm) * var(--unc-event-ratio));white-space:nowrap}
.evlock .loc{font-family:'Inter',system-ui,sans-serif;font-weight:600;font-size:14px;letter-spacing:.14em;text-transform:uppercase;color:var(--unc-grey-dark);white-space:nowrap}
.evlock--ink{color:var(--unc-ink)}
.evlock--ink .loc{color:var(--unc-grey-light)}

/* --fit: scale the mark to the room it has instead of wrapping. Driven by
   the lockup's OWN inline size, not the window. --unc-lockup-em is the
   lockup's natural width in --wm units (≈ 13.6 for "uncorrelated." plus a
   city and year; measure per string if it is much longer).
   The variant claims its full inline size itself — width:100% + stretch.
   Without that, a shrink-to-fit box (a flex item, an inline-block, a float)
   resolves inline-size containment as if it were EMPTY, so 100cqi is 0 and
   the whole mark renders at font-size 0. Do not remove those two lines. */
.evlock--fit{container-type:inline-size;--unc-lockup-em:13.6;width:100%;align-self:stretch}
.evlock--fit .wm{font-size:min(var(--wm),calc(100cqi / var(--unc-lockup-em)))}
.evlock--fit .city{font-size:calc(min(var(--wm),calc(100cqi / var(--unc-lockup-em))) * var(--unc-event-ratio))}

/* --sm: the mark-size step in the ladder, declared rather than guessed at
   from the viewport. Bodoni needs 800 below a 30px wordmark, so any London
   lockup set under --wm:30px carries it — nav and footer marks permanently. */
.evlock--sm.evlock--london .city{font-weight:800}

/* --xs: the SECOND mark-size step, and the one that carries a per-face FLOOR.
   Set it on any lockup whose --wm is under 20px. It implies --sm; the London
   rule is repeated here so a mark that carries only --xs still gets the weight
   bump rather than silently losing it.

   PUERTO RICO'S FLOOR IS 20px, and it is not London's. 15px is a BODONI
   number: London's Bodoni survives to 15px with the bump above. Cinzel
   Decorative does not — its terminals fill and its joins close below 20px, so
   between 20px and 15px the old single ladder rendered a visibly degraded
   Puerto Rico mark that PASSED the check. THE FLOOR IS PER FACE, exactly as
   the ratio is; one ladder for all serifs is the same class of error as one
   ratio for all faces.

   Below the floor PR drops to Inter 900 at --unc-ratio-altsops (1.000). Do NOT
   bump Cinzel's weight: it is a display face and no heavier cut fixes the
   joins. Ratified Peter Murrugarra, 3 Sep 2026. */
.evlock--xs.evlock--london .city{font-weight:800}
.evlock--xs.evlock--pr{--unc-event-ratio:var(--unc-ratio-altsops)}
.evlock--xs.evlock--pr .city{font-family:'Inter',system-ui,sans-serif;font-weight:900;
  letter-spacing:-.035em}

/* The vertical rule survives in STACKED and 4:1 BANNER forms only,
   where the halves drift far enough apart that it does structural
   work. It was removed from the single line (Option C, 13 Aug). */
.evlock--ruled{gap:0}
.evlock--ruled .div{width:2px;align-self:stretch;background:currentColor;opacity:.28;margin:0 calc(var(--wm)*.59) 0 calc(var(--wm)*.45)}

/* ---- per-city classes: face + ratio + colour, together ----
   One class per pairing. Adding a city means adding a ratio token
   and a class here — two deliberate acts, neither inheritable. */

/* London — the serif seat. The only one. */
.evlock--london{--unc-event-ratio:var(--unc-ratio-london)}
.evlock--london .city{font-family:'Bodoni Moda',serif;font-weight:700;letter-spacing:-.015em;color:var(--unc-city-london)}
.evlock--london.evlock--ink .city{color:var(--unc-city-london-print)}

/* Sans cities — Inter both halves, city in the EVENT ACCENT.
   Same grammar as London: only the city and year take colour, never
   the period. --unc-city is set by the per-city class below; a city
   class that sets no --unc-city falls back to the wordmark's colour,
   so an unratified city cannot borrow another city's accent. */
.evlock--sans .city{font-family:'Inter',system-ui,sans-serif;font-weight:900;letter-spacing:-.035em;color:var(--unc-city,inherit)}
/* NEVER MEASURE A SWASHED OR ROUND CAPITAL when deriving a ratio.
   Cinzel Decorative's 'H' is a SWASH standing 35.8% above its flat cap
   (0.9775em vs 0.7200em); 'U' stands 25% above. Measuring 'H' yields a Puerto
   Rico ratio of 0.750 instead of 1.022 — a mark 27% wrong that looks
   deliberate. Measure E, I or T.
   A SWASH IS NOT OVERSHOOT. Tenor Sans's round caps overshoot a uniform +1.71%,
   which is ordinary optical behaviour and must not be corrected out. Cinzel's
   H is a different phenomenon, not a larger amount of the same one.
   The ratio is a property of the FACE, not of the city string: a leading round
   or swashed capital then overshoots the ascender line, and that is intended.
   Do not re-derive per city name. Measured 3 Sep 2026. */

/* PUERTO RICO — Cinzel Decorative Bold. Ratified Peter Murrugarra, 3 Sep 2026.
   Sentence case IN THE MARKUP: Cinzel has no lowercase, so uppercasing the
   source renders identically and corrupts the accessible name. No
   text-transform here, deliberately.
   Georgia fallback ALWAYS — Cinzel is a webfont and email clients and some
   CMSes will not load it.
   Cinzel sets the EVENT NAME ONLY: never body, never logistics, never the
   "u." favicon, which stays Inter. */
.evlock--pr .city{font-family:'Cinzel Decorative',Georgia,'Times New Roman',serif;
  font-weight:700;color:var(--unc-city,inherit)}
/* CAYMAN — Archivo Expanded. Ratified Peter Murrugarra, 3 Sep 2026.
   MUST be the variable font with the axes NAMED. Naming 'Archivo' alone yields
   the DEFAULT width and the expansion is silently lost — this has already
   shipped broken once and been repaired as an export defect. */
.evlock--cayman .city{font-family:'Archivo',system-ui,sans-serif;font-weight:700;
  font-variation-settings:'wdth' 118,'wght' 700;letter-spacing:-.02em;
  color:var(--unc-city,inherit)}
/* BEVERLY HILLS — Tenor Sans 400, CAPITALS, +.14em. Ratified Peter Murrugarra,
   3 Sep 2026. Event date MAY 2027.
   SINGLE-WEIGHT FACE. There is no heavier cut, so below the floor drop to Inter
   900 at 1.000 — never bump the weight. A synthesised faux bold is banned on a
   mark. text-transform is deliberate here, unlike Cinzel: Tenor Sans has a
   lowercase and the mark does not use it. */
.evlock--bh .city{font-family:'Tenor Sans',system-ui,sans-serif;font-weight:400;
  text-transform:uppercase;letter-spacing:.14em;color:var(--unc-city,inherit)}
.evlock--bh{--unc-event-ratio:var(--unc-ratio-bh);--unc-city:var(--acc-bh,#E8A620)}
.evlock--xs.evlock--bh{--unc-event-ratio:var(--unc-ratio-altsops)}
.evlock--xs.evlock--bh .city{font-family:'Inter',system-ui,sans-serif;font-weight:900;
  text-transform:none;letter-spacing:-.035em}

/* On light, a city with no ratified light step falls back to ink. This is the
   fail-closed default and it stays: a city may not borrow its dark accent onto
   white, because gold and kelly both fail 4.5:1 there.
   GAP CLOSED for PR and Cayman below (was: "needs --acc-pr-print /
   --acc-cayman-print, as London has"). AltsOps still has none — its accent is
   white, which has no meaning on paper, so AltsOps prints in ink by design.
   Equal specificity to the rules below, so SOURCE ORDER decides: keep this
   first. */
.evlock--sans.evlock--ink .city{color:inherit}
.evlock--pr.evlock--ink .city{color:var(--unc-city-pr-print)}
.evlock--cayman.evlock--ink .city{color:var(--unc-city-cayman-light)}
/* AltsOps NYC — Inter 900. Its face declaration is stated HERE rather than left
   to .evlock--sans, corrected 3 Sep 2026 after a render check.
   WHY: every other city now carries its own face rule, so a lockup written as
   class="evlock evlock--altsops" — the obvious spelling, and the one a new card
   copies from its neighbours — matched NO face rule at all and computed to
   Inter 400. Not broken enough to look broken: the right family at the wrong
   weight, on the one city whose whole identity is the weight.
   .evlock--sans still exists and still works; AltsOps no longer depends on it. */
.evlock--altsops .city{font-family:'Inter',system-ui,sans-serif;font-weight:900;
  letter-spacing:-.035em;color:var(--unc-city,inherit)}
.evlock--altsops{--unc-event-ratio:var(--unc-ratio-altsops);--unc-city:var(--unc-city-altsops)}
/* AltsOps NYC's accent IS white, #FFFFFF — ratified 3 Sep 2026. It is not an
   absence and it is not "monochrome by omission": white is the thing that
   distinguishes AltsOps from every other event in the series, and the built
   deck carries it on every slide. Stated here so it survives a refactor.
   GAP CLOSED (was: "AltsOps NYC has no accent token"). That absence got filled
   wrongly twice — #C9A84C, which is Puerto Rico's gold, and --text-1 #F5F4F1,
   a text role rather than an accent role. --acc-mgs belongs to Manager Growth
   Summit NYC and must NOT be reused here. */
.evlock--cayman {--unc-event-ratio:var(--unc-ratio-cayman);--unc-city:var(--unc-city-cayman)}
.evlock--pr     {--unc-event-ratio:var(--unc-ratio-pr);--unc-city:var(--unc-city-pr)}
/* .evlock--newport — deliberately absent until the face is chosen. */

/* ---- degradation ladder ----
   When space runs out, drop in this order:
   venue -> date -> year -> the serif itself. */
@media (max-width:900px){.evlock .loc .venue{display:none}}
@media (max-width:600px){.evlock .loc{display:none}}
@media (max-width:380px){
  .evlock--london .city{font-weight:800}           /* Bodoni needs 800 below 30px */
}
/* Below a 15px wordmark, drop the serif entirely: add .evlock--sans
   alongside .evlock--london rather than scaling Bodoni further.

   THE FLOOR IS PER FACE, exactly as the ratio is. 15px is a BODONI number:
   London's Bodoni survives to 15px with the weight bump above. Cinzel
   Decorative does NOT — its terminals fill and its joins close below 20px, so
   between 20px and 15px the old single ladder rendered a visibly degraded
   Puerto Rico mark that PASSED the check.

   PUERTO RICO FLOOR = 20px on --wm. Below it, drop to Inter 900 at
   --unc-ratio-altsops (1.000). Do NOT bump Cinzel's weight: it is a display
   face and no heavier cut fixes the joins.

   MECHANISM NOTE — --wm is an inline custom property, so it cannot be
   media-queried. The floor is therefore DECLARED, via .evlock--xs above, the
   same way .evlock--sm declares the 30px step. That class is the mechanism;
   this media query is only a backstop for a small mark whose author forgot it.
   Its 380px is the ladder's existing breakpoint, inherited from the Bodoni
   branch — it is NOT a measured Cinzel number, and it is a VIEWPORT number
   standing in for a MARK-SIZE one. Set .evlock--xs and do not rely on it. */
@media (max-width:380px){
  .evlock--pr .city{font-family:'Inter',system-ui,sans-serif;font-weight:900;
    letter-spacing:-.035em;font-size:calc(var(--wm) * var(--unc-ratio-altsops,1))}
}

/* ---- accessible name ----
   The gap is layout, not a text node, so the name concatenates to
   "uncorrelated.London 2026" unless set. Put
   aria-label="Uncorrelated London 2026" on the lockup wrapper and
   aria-hidden on any decorative rule. */
.unc-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
