/* ═══════════════════════════════════════════════════════════════════════════
   arc-ui.css · THE ARCVERSE DESIGN SYSTEM
   Rewritten 29 August 2026, against Darren's target design.

   🚨 THE FIRST VERSION OF THIS FILE WAS WRONG AND THE CORRECTION IS THE POINT.
      It EXTRACTED the estate's existing card and button and tidied them — a
      component inventory on a cream page. Darren's response, with two mockups:
      "this is the style im loooking for, what you showed me seems a long way away
      from this." He was right. Tidying what exists cannot produce a product
      design, and the brief was never "make the current thing consistent".

   🔒 SO THIS FILE IS DESIGNED TO A TARGET, NOT DERIVED FROM AN AVERAGE.
      The shape it serves: a dark navigation shell, a photographic hero with a
      navy wash over it, dense information cards with real hierarchy, saturated
      gradient feature cards, arena tiles, avatar stacks, progress rings, and a
      level ladder. Restraint in the chrome, colour in the content.

   ⚠ WHAT SURVIVED FROM THE FIRST VERSION, because it was right: keyboard focus on
     everything (measured: 77 pages styled :hover, 7 used :focus-visible), a
     disabled button that stops receiving clicks, a destructive colour that is not
     the save colour, honest loading/empty/error states, and reduced-motion.

   🔒 NO BUILD STEP. Plain CSS custom properties and plain selectors. 21st.dev
      ships React and Tailwind; what is taken is the DESIGN — the density, the
      gradient language, the spacing rhythm — never the toolchain. Adopting a
      pipeline is Darren's ruling alone.

   🔒 REQUIRES arc-tokens.css FIRST for --navy / --gold / --teal etc. Everything
      below is expressed in tokens, so an arena recolours by overriding tokens.
   ═══════════════════════════════════════════════════════════════════════════ */

:root {
  /* ══ THE DEEP RAMP ─ ONE AUTHORED NAVY, THREE DERIVED SURFACES.
     Added 1 Sep 2026 by arc-frontend (one-screen productionisation proof, UNIT B).

     WHAT WAS HERE BEFORE: --shell #0b1424 and --shell-2 #101d33, two authored
     hexes with no stated relationship to --navy. Measured 1 Sep 2026, controls
     #000/#fff = 21.00 and #fff/#fff = 1.00: those two sit 1.016:1 and 1.009:1
     from the derived surfaces below ─ the SAME surfaces under a second set of
     names, authored independently and free to drift apart at the next edit.

     🔒 SO THE RAMP IS DERIVED AND --shell IS AN ALIAS. Retinting ARC's dark
        chrome is now ONE line (--deep-base), and every surface moves in step.

     🚨 --deep-base IS A LITERAL AND NOT var(--navy), AND THAT IS THE WHOLE
        POINT OF THE LINE. community.html:62 and community-profiles.html:65 both
        run document.documentElement.style.setProperty('--navy', C.color_primary),
        which beats any :root rule. Measured live 1 Sep 2026:
        create_client_community performs NO colour validation and update_community
        checks format only, so #ffffff passes cleanly, and the picker is the native
        OS colour wheel. A pale tenant colour driving this ramp would resolve
        "deep" to oklab L 0.50 ─ a near-white STRUCTURAL surface carrying white
        text. Neither of those two pages loads arc-ui.css today, so nothing is
        broken now; deriving from the literal costs nothing and ends the class.
     ⚠ A STRUCTURAL SURFACE IS NOT A TENANT COLOUR. An arena that wants its own
       chrome overrides --deep-base, which is a decision. Inheriting one from a
       brand-colour picker is an accident.

     MEASURED (controls 21.00 / 1.00), white text on each:
       --deep    #0b1220  oklab L .1827   18.72:1
       --deep-2  #121c30  oklab L .2269   17.01:1
       --deep-3  #18243e  oklab L .2626   15.43:1
     Old --shell #0b1424 → new #0b1220 is an RGB distance of 4.47, and 1.016:1
     between them. 🔒 THAT IS BELOW WHAT AN EYE RESOLVES, SO THE EYE IS NOT THE
     INSTRUMENT HERE ─ diff the computed background; do not squint at a screenshot. */
  --deep-base:  #1a2744;   /* THE one authored navy in this file. Retint here.  */

  /* 🚨 THESE FOUR ARE THE DEGRADED FALLBACK, NOT THE DESIGN. They are
     overridden three lines down by the @supports block, which is what actually
     renders on every browser from 2023 onward.

     WHY THEY EXIST AT ALL: color-mix() is the FIRST use of that function
     anywhere in site/ - checked repo-wide 1 Sep 2026, control 'linear-gradient'
     matched 78 files, 'color-mix' matched only these lines. A custom property is
     an arbitrary token stream, so an unsupporting browser ACCEPTS the
     declaration and fails at SUBSTITUTION time: background:var(--shell) then
     becomes invalid-at-computed-value-time, resolves to transparent, and the
     sidebar renders as WHITE TEXT ON THE CREAM PAGE. Silent, total, and only on
     the browsers least likely to be in the room when it is tested.
     🔒 SO THE FALLBACK IS FLAT, NOT WRONG: all three depths collapse to the
        authored navy. Flatter chrome than intended, and white text on it reads
        14.81:1. The property that must never fail is legibility, not depth.
     🔒 AND IT NEEDS NO MAINTENANCE. Retinting --deep-base moves the fallback
        too, because the fallback is var(--deep-base) and not a snapshot of it.
        Four static hexes here would have been four more authored navies to keep
        in step, which is the exact problem this ramp exists to end. */
  --deep:       var(--deep-base);
  --deep-2:     var(--deep-base);
  --deep-3:     var(--deep-base);
  --deep-line:  rgba(255,255,255,.14);

  /* 🔒 ALIASES, NOT COPIES. All 24 var(--shell*) references in this file keep
     working unchanged, and no page in site/ pins #0b1424 (checked repo-wide;
     control: --shell itself returns 27 hits). */
  --shell:      var(--deep);
  --shell-2:    var(--deep-2);
  --shell-line: rgba(255,255,255,.08);
  --shell-text: rgba(255,255,255,.72);
  --shell-dim:  rgba(255,255,255,.58);   /* was .45 = 4.40:1 on --shell-2, measured.
                                            Re-measured on the derived --deep-2:
                                            6.47:1; --shell-text is 9.25:1. */

  /* ══ THE HERO SCRIM FLOOR. Darren's ruling 2, 1 Sep 2026.
     The 96deg wash over the hero photograph ended at alpha .46, which over a
     pure-white photograph left white text at 3.24:1 ─ a FAIL. Which parts of a
     photograph are white is a property of the photograph, not of the CSS, so the
     wash is what puts a floor under the text. .58 makes that floor 4.87:1 over
     ANY image. Controls 21.00 / 1.00.
     🔒 A TOKEN, NOT A STOP BAKED INTO A GRADIENT: this is the dial between
        legibility and how much of the picture survives, and it must stay turnable
        without editing a four-stop gradient in two places. */
  --scrim-floor: .58;

  --sp-1: 6px;  --sp-2: 10px; --sp-3: 14px;
  --sp-4: 20px; --sp-5: 28px; --sp-6: 40px;
  --r-sm: 8px;  --r-md: 12px; --r-lg: 16px; --r-xl: 20px; --r-pill: 999px;

  /* 🚨 MEASURED 30 Aug 2026: --muted (#6b7a8d, from arc-tokens.css) on white
     gives 4.38:1 — UNDER the 4.5 floor for text below 18.66px, and almost every
     caption, timestamp and "View all" in this system is 11-13px. This is the
     shade those use instead. 🔒 arc-tokens.css is NOT edited here: --muted is a
     shared estate token on 131 pages and changing it is the Foreman's call, not
     a side effect of building one screen. Reported, not quietly overwritten. */
  --muted-ink: #5e6b7b;

  /* GOLD ON A SATURATED GRADIENT, MEASURED 30 Aug 2026. --gold (#e8a020) on
     the closer band reads 5.38:1 over its violet stop but only 3.95:1 over its
     mid-blue stop, and the per-channel-max bound anywhere along that gradient
     is 3.73. The clamp yields 18.4px at 768px, so the floor is 4.5 and the
     band FAILED at every width below 1440 while passing at 1440 purely because
     the text got bigger. #f2bb52 is the same hue two steps lighter and reads
     6.81 / 5.00 / 5.32 at the three stops, worst-case bound 4.72 - a pass
     everywhere on the gradient, not at one viewport. Use this ONLY for gold
     TEXT on a gradient; --gold stays the brand colour for fills and rings. */
  --gold-lift: #f2bb52;

  --ring: 0 0 0 3px rgba(232,160,32,.45);
  --lift-1: 0 1px 2px rgba(11,20,36,.06);
  --lift-2: 0 2px 4px rgba(11,20,36,.05), 0 12px 28px rgba(11,20,36,.08);

  /* ── the gradient language. These are the saturated feature cards and the
        arena tiles. Each is a pair so a tile can be built from one variable. */
  --g-violet: linear-gradient(150deg,#3f2a6d,#6d3fa8);
  --g-teal:   linear-gradient(150deg,#0a3a3d,#0d6d66);
  --g-green:  linear-gradient(150deg,#114023,#176e3e);
  --g-amber:  linear-gradient(150deg,#572d09,#8f5210);
  --g-rose:   linear-gradient(150deg,#5e1030,#96234f);
  --g-blue:   linear-gradient(150deg,#12305e,#1d5aa8);
  --g-navy:   linear-gradient(150deg,#0f1c30,#1e3355);
  --g-gold:   linear-gradient(150deg,#8a6414,#d9a441);
}

/* 🔒 THE REAL RAMP. Everything above is the safety net; this is the design.
   Split into @supports rather than declared inline because a custom property
   cannot carry its own fallback - see the note on --deep above for what happens
   on a browser that cannot substitute it.
   ⚠ --shell-line is DELIBERATELY NOT aliased to --deep-line. --shell-line is
     rgba white, which works over all three depths; an opaque mix is only right
     on one of them. Two different jobs, kept apart on purpose. */
@supports (background: color-mix(in oklab, #000 50%, #fff)) {
  :root {
    --deep:      color-mix(in oklab, var(--deep-base) 34%, #05080f);
    --deep-2:    color-mix(in oklab, var(--deep-base) 65%, #05080f);
    --deep-3:    color-mix(in oklab, var(--deep-base) 90%, #05080f);
    --deep-line: color-mix(in oklab, var(--deep-base) 60%, #ffffff);
  }
}

*, *::before, *::after { box-sizing: border-box; }

/* ═══ THE SHELL ═════════════════════════════════════════════════════════════ */
.arc-shell { display: grid; grid-template-columns: 1fr; min-height: 100vh; background: var(--bg,#f4f1ea); }
@media (min-width: 1000px) { .arc-shell { grid-template-columns: 232px minmax(0,1fr); } }

.arc-side {
  background: var(--shell); color: #fff;
  padding: var(--sp-4) var(--sp-3) var(--sp-4);
  display: flex; flex-direction: column; gap: var(--sp-4);
}
@media (min-width: 1000px) { .arc-side { position: sticky; top: 0; height: 100vh; overflow-y: auto; } }

.arc-brand { display: flex; align-items: center; gap: var(--sp-2); padding: 0 var(--sp-2);
             color: #fff; text-decoration: none; }
.arc-brand img { width: 34px; height: 34px; object-fit: contain; }
.arc-brand b { display: block; font-family: 'Cormorant Garamond',Georgia,serif;
               font-size: 1.22rem; font-weight: 600; letter-spacing: .10em; }
.arc-brand span { display: block; font-size: .54rem; letter-spacing: .18em;
                  text-transform: uppercase; color: var(--shell-dim); }

.arc-navlabel { font-size: .58rem; letter-spacing: .16em; text-transform: uppercase;
                color: var(--gold,#e8a020); padding: var(--sp-3) var(--sp-2) var(--sp-1); font-weight: 700; }
.arc-nav { display: flex; flex-direction: column; gap: 2px; }
.arc-nav a {
  display: flex; align-items: center; gap: var(--sp-2);
  padding: 9px var(--sp-2); border-radius: var(--r-sm);
  color: var(--shell-text); text-decoration: none; font-size: .84rem;
  border-left: 3px solid transparent; transition: background-color .15s, color .15s;
}
.arc-nav a:hover { background: rgba(255,255,255,.05); color: #fff; }
/* 🔒 The active item is marked TWICE - fill and a gold rule - because colour
      alone is not a signal everyone receives. */
.arc-nav a[aria-current="page"] {
  background: var(--shell-2); color: #fff; font-weight: 600;
  border-left-color: var(--gold,#e8a020);
}
.arc-nav .ico { width: 17px; text-align: center; opacity: .85; flex: none; }
.arc-nav .n { margin-left: auto; font-size: .68rem; font-weight: 700;
              background: rgba(255,255,255,.12); border-radius: var(--r-pill); padding: 1px 7px; }

/* ═══ TAB-STYLE NAV BUTTON ══════════════════════════════════════════════════
   Added 5 Sep 2026 (arc-frontend), for fac-desk.html — a caseload desk that
   switches PANELS in place rather than navigating pages, so its sidebar items
   are <button data-panel> elements, not <a href>. Rather than fork a second
   sidebar look for that one page, this is the same .arc-nav row in button
   form: identical padding, colour and hover, active state on aria-current
   ="true" (a button has no "page" to be current OF) instead of "page". Any
   future panel-switching surface reuses this instead of inventing a third. */
.arc-nav button.navbtn {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-2);
  width: 100%; padding: 9px var(--sp-2); border-radius: var(--r-sm);
  background: transparent; border: none; border-left: 3px solid transparent;
  color: var(--shell-text); font: inherit; font-size: .84rem; text-align: left;
  cursor: pointer; transition: background-color .15s, color .15s;
}
.arc-nav button.navbtn:hover { background: rgba(255,255,255,.05); color: #fff; }
.arc-nav button.navbtn[aria-current="true"] {
  background: var(--shell-2); color: #fff; font-weight: 600;
  border-left-color: var(--gold,#e8a020);
}
.arc-nav button.navbtn .c { margin-left: auto; font-size: .68rem; font-weight: 700;
  background: rgba(255,255,255,.12); border-radius: var(--r-pill); padding: 1px 7px; }
.arc-nav button.navbtn[aria-current="true"] .c { background: rgba(0,0,0,.16); }
/* 🚨 MEASURED 5 Sep 2026: .hide{display:none} is a one-class utility used
   estate-wide, and .arc-nav button.navbtn above carries a class AND an
   element (specificity 0,2,1) — higher than .hide's 0,1,0 — so a nav button
   marked .hide (fac-desk.html's admin-only Test Community tab) rendered
   ANYWAY, ticking is not thing the .hide caller expects. This wins the tie
   back for the utility class without touching .hide itself, which 60+ other
   toggles on other pages depend on unchanged. */
.arc-nav button.navbtn.hide { display: none; }

.arc-me { margin-top: auto; background: var(--shell-2); border: 1px solid var(--shell-line);
          border-radius: var(--r-md); padding: var(--sp-3); }
.arc-me .who { display: flex; align-items: center; gap: var(--sp-2); }
.arc-me .who img { width: 38px; height: 38px; border-radius: 50%; object-fit: cover; }
.arc-me .who > div > b { font-size: .86rem; display: block; }
.arc-me .who > div > span { font-size: .7rem; color: var(--shell-dim); display: block; }
.arc-me .meta { font-size: .72rem; color: var(--shell-dim); margin-top: var(--sp-2); }

/* ═══ TOP BAR ═══════════════════════════════════════════════════════════════ */
.arc-top {
  display: flex; align-items: center; gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-4); background: var(--shell);
  border-bottom: 1px solid var(--shell-line);
}
.arc-search { flex: 1; max-width: 460px; margin: 0 auto; position: relative; }
.arc-search input {
  width: 100%; padding: 9px var(--sp-3) 9px 34px;
  background: rgba(255,255,255,.07); border: 1px solid var(--shell-line);
  border-radius: var(--r-pill); color: #fff; font: inherit; font-size: .84rem;
}
.arc-search input::placeholder { color: var(--shell-dim); }
.arc-search .mag { position: absolute; left: 12px; top: 50%; transform: translateY(-50%);
                   color: var(--shell-dim); font-size: .8rem; }
.arc-top .icon {
  position: relative; width: 34px; height: 34px; border-radius: 50%;
  display: grid; place-items: center; color: var(--shell-text);
  background: rgba(255,255,255,.06); border: none; cursor: pointer;
}
.arc-top .icon .dot { position: absolute; top: -2px; right: -2px; min-width: 16px; height: 16px;
  border-radius: var(--r-pill); background: var(--fail,#b3261e); color: #fff;
  font-size: .6rem; font-weight: 700; display: grid; place-items: center; padding: 0 4px; }

/* ═══ MAIN ══════════════════════════════════════════════════════════════════ */
.arc-main { padding: var(--sp-4); display: grid; gap: var(--sp-4); align-content: start; }
.arc-cols { display: grid; gap: var(--sp-4); grid-template-columns: 1fr; }
@media (min-width: 1180px) { .arc-cols { grid-template-columns: minmax(0,1fr) 300px; } }
.arc-grid { display: grid; gap: var(--sp-4); grid-template-columns: 1fr; }
/* EVERY GRID CHILD MUST BE ALLOWED TO SHRINK. A grid item's min-width defaults
      to `auto`, which means "never narrower than my min-content". Put anything
      genuinely wide in an ARCverse column - a table, a long unbroken string -
      and the TRACK inflates and drags the whole page sideways. Measured
      30 Aug 2026 on the Facilitator desk at 375px: the caseload table's
      min-content is 469px, the document was 531px wide, and the page heading
      was cut off at the right edge.
   min-width:0 lets .arc-tablewrap do the job it was built for - the TABLE
      scrolls inside its own box instead of the PAGE scrolling. This lived in
      preview-extra.css and only four of the eight preview pages loaded it; it
      is a fault in the shared LAYOUT, so every ARCverse screen gets it here. */
.arc-main > *, .arc-cols > *, .arc-grid > *, .arc-rail > * { min-width: 0; }
@media (min-width: 760px)  { .arc-grid--2 { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1000px) { .arc-grid--3 { grid-template-columns: repeat(3,1fr); }
                             .arc-grid--4 { grid-template-columns: repeat(4,1fr); } }
.arc-row { display: flex; gap: var(--sp-2); flex-wrap: wrap; align-items: center; }

/* ═══ HERO ══════════════════════════════════════════════════════════════════
   A photograph with a navy wash over it. 🔒 The wash is NOT decoration: white
   text on an unmodified photograph fails contrast on the light parts, and which
   parts are light depends on the image. The gradient guarantees the floor. */
.arc-hero {
  position: relative; border-radius: var(--r-xl); overflow: hidden;
  min-height: 260px; display: flex; flex-direction: column; justify-content: center;
  padding: var(--sp-6) var(--sp-5); color: #fff; background: var(--shell);
}
.arc-hero > img { position: absolute; inset: 0; width: 100%; height: 100%;
                  object-fit: cover; z-index: 0; }
/* ⚠ THIS RULE IS SHADOWED. A SECOND .arc-hero::after in PART 2 below (search
   for 96deg) replaces the background wholesale, so a change made HERE ALONE IS
   INVISIBLE ─ measured 1 Sep 2026: both live users of .arc-hero compute the
   96deg value. Tokenised anyway, so the two cannot drift to different floors the
   day the later rule is deleted. */
.arc-hero::after { content: ''; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(100deg, rgba(8,15,28,.94) 0%, rgba(8,15,28,.78) 42%,
                                      rgba(8,15,28,var(--scrim-floor,.58)) 100%); }
.arc-hero > *:not(img) { position: relative; z-index: 2; }
.arc-hero h1 { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 600;
  font-size: clamp(1.9rem,4vw,2.9rem); line-height: 1.05; margin: 0 0 var(--sp-2); }
.arc-hero p { margin: 0; color: rgba(255,255,255,.8); font-size: .95rem; max-width: 46ch; }

/* the stat chips under a hero greeting */
.arc-chips { display: flex; gap: var(--sp-2); flex-wrap: wrap; margin-top: var(--sp-4); }
.arc-chip {
  display: flex; align-items: center; gap: var(--sp-2);
  /* 🚨 MEASURED 30 Aug 2026, AND THE FIRST VERSION FAILED. A WHITE glass chip
     over a photograph LIGHTENS whatever is behind it, so on the bright side of
     the hero the third chip's caption came out at 4.36:1 - under the 4.5 floor,
     while the first chip read 14.9:1. Same component, same page, different
     pixels behind it. A DARK tint darkens instead, which puts a floor under the
     text wherever the chip lands. Eyeballing found nothing; the rasteriser did. */
  background: rgba(8,14,26,.42); border: 1px solid rgba(255,255,255,.20);
  border-radius: var(--r-md); padding: var(--sp-2) var(--sp-3); backdrop-filter: blur(6px);
}
.arc-chip b { font-size: 1.02rem; line-height: 1; }
.arc-chip span { font-size: .7rem; color: rgba(255,255,255,.84); display: block; }

/* ═══ CARDS ═════════════════════════════════════════════════════════════════ */
.arc-card {
  background: var(--surface,#fff); border: 1px solid var(--border,#e2d9c8);
  border-radius: var(--r-lg); padding: var(--sp-4); box-shadow: var(--lift-1);
}
.arc-card--flush { padding: 0; overflow: hidden; }
.arc-card--accent { border-left: 4px solid var(--gold,#e8a020); }
.arc-card--interactive { cursor: pointer; transition: box-shadow .18s, transform .18s; }
.arc-card--interactive:hover { box-shadow: var(--lift-2); transform: translateY(-2px); }

/* 🔒 A dark card for anything that is ARC talking rather than showing data -
      the briefing, an invitation, a piece of editorial. */
.arc-card--dark { background: var(--g-navy); border-color: rgba(255,255,255,.10); color: #fff; }
.arc-card--dark .arc-cardhd h2 { color: var(--gold,#e8a020); }
.arc-card--dark .arc-mut { color: rgba(255,255,255,.82); }

/* the saturated feature cards */
.arc-card--violet { background: var(--g-violet); color: #fff; border-color: transparent; }
.arc-card--tealg  { background: var(--g-teal);   color: #fff; border-color: transparent; }
.arc-card--greeng { background: var(--g-green);  color: #fff; border-color: transparent; }
.arc-card--amber  { background: var(--g-amber);  color: #fff; border-color: transparent; }
.arc-card--rose   { background: var(--g-rose);   color: #fff; border-color: transparent; }
.arc-card--blue   { background: var(--g-blue);   color: #fff; border-color: transparent; }
/* ⚠ CORRECTED 30 Aug 2026, PART 3: the first line was
   [class*="arc-card--"][class*="g"], which matches .arc-card--interactive and
   .arc-card--flush (both contain a "g") and would paint their muted text white
   on white. The explicit list below it was already correct and is enough. */
.arc-card--violet .arc-mut, .arc-card--tealg .arc-mut,
.arc-card--greeng .arc-mut, .arc-card--amber .arc-mut,
.arc-card--rose .arc-mut,  .arc-card--blue .arc-mut { color: rgba(255,255,255,.88); }

.arc-cardhd { display: flex; align-items: baseline; justify-content: space-between;
              gap: var(--sp-2); margin-bottom: var(--sp-3); }
.arc-cardhd h2 { font-size: .68rem; letter-spacing: .13em; text-transform: uppercase;
                 font-weight: 700; color: var(--navy,#1a2744); margin: 0; }
.arc-cardhd a { font-size: .72rem; color: var(--muted-ink); text-decoration: none; }
.arc-cardhd a:hover { color: var(--navy,#1a2744); }
/* 🚨 THIS RULE NAMED ONLY TWO OF THE SEVEN COLOURED CARDS. On the teal and
      green cards "View all" therefore stayed --muted grey: 1.02:1 and 1.00:1 —
      invisible, not merely dim. A gradient card is not a special case; it is
      the normal case here, so the list is now complete. */
.arc-card--dark .arc-cardhd a,   .arc-card--violet .arc-cardhd a,
.arc-card--tealg .arc-cardhd a,  .arc-card--greeng .arc-cardhd a,
.arc-card--amber .arc-cardhd a,  .arc-card--rose .arc-cardhd a,
.arc-card--blue .arc-cardhd a,   .arc-band .arc-cardhd a { color: rgba(255,255,255,.88); }
.arc-card--violet .arc-cardhd h2, .arc-card--tealg .arc-cardhd h2,
.arc-card--greeng .arc-cardhd h2, .arc-card--amber .arc-cardhd h2,
.arc-card--rose .arc-cardhd h2,  .arc-card--blue .arc-cardhd h2 { color: #fff; }

.arc-mut { color: var(--muted-ink); font-size: .8rem; }

/* ═══ LIST ROWS ═════════════════════════════════════════════════════════════ */
.arc-item { display: flex; gap: var(--sp-3); padding: var(--sp-2) 0;
            border-top: 1px solid var(--border,#e2d9c8); }
.arc-item:first-child { border-top: none; padding-top: 0; }
.arc-item img.thumb { width: 92px; height: 62px; border-radius: var(--r-sm);
                      object-fit: cover; flex: none; }
/* THE DEFAULT BACKGROUND IS NOT DECORATION - WITHOUT IT THIS COMPONENT IS
      INVISIBLE. .ico-sq sets color:#fff and every use in the estate supplies a
      background inline. Where a page forgets, the square renders white on
      white: measured 1.00:1 on preview/profile.html, on the two squares that
      say what is left before Level C. 19 of the 21 .ico-sq in the build carry
      an inline background and are unaffected; a component must not depend on
      an optional inline style to be seen at all. */
.arc-item .ico-sq { width: 30px; height: 30px; border-radius: var(--r-sm); flex: none;
                    display: grid; place-items: center; font-size: .85rem; color: #fff;
                    background: var(--g-navy); }
.arc-item b { display: block; font-size: .88rem; color: var(--navy,#1a2744); }
.arc-item .sub { font-size: .76rem; color: var(--muted-ink); }
.arc-item .grow { flex: 1; min-width: 0; }

/* ═══ PROGRESS ══════════════════════════════════════════════════════════════ */
.arc-bar { height: 6px; border-radius: var(--r-pill); background: rgba(11,20,36,.10); overflow: hidden; }
.arc-bar > i { display: block; height: 100%; border-radius: var(--r-pill);
               background: var(--green,#059669); }
.arc-bar--gold > i { background: var(--gold,#e8a020); }
.arc-bar--teal > i { background: var(--teal,#2bbfb3); }
/* THE LAST SURVIVING PIECE OF THE WILDCARD FAULT, AND IT DOES NOT LOOK LIKE
      ONE. Replacing [class*="arc-card--"] with an explicit list fixed the
      MATCHING but not the CASCADE: the named list is (0,2,0), and the light
      reset `.arc-card .arc-bar` that followed it is ALSO (0,2,0), so the later
      rule won and every progress bar on a gradient card drew a dark track on a
      dark card. Measured live 30 Aug 2026: 8 bars on preview/dashboard.html and
      arcverse-dashboard.html all computed rgba(11,20,36,.10) where the sheet
      says rgba(255,255,255,.18). A source read of either rule looks correct.
   Light default FIRST, then the on-dark list at (0,3,0) by naming .arc-card as
      well as the variant - so the result no longer depends on source order.
      A new gradient variant must be added here AND to every other on-dark list
      in this file. */
.arc-card .arc-bar { background: rgba(11,20,36,.10); }
.arc-card.arc-card--dark   .arc-bar, .arc-card.arc-card--violet .arc-bar,
.arc-card.arc-card--tealg  .arc-bar, .arc-card.arc-card--greeng .arc-bar,
.arc-card.arc-card--amber  .arc-bar, .arc-card.arc-card--rose   .arc-bar,
.arc-card.arc-card--blue   .arc-bar,
.arc-card--dark .arc-bar,   .arc-card--violet .arc-bar, .arc-card--tealg .arc-bar,
.arc-card--greeng .arc-bar, .arc-card--amber .arc-bar,  .arc-card--rose .arc-bar,
.arc-card--blue .arc-bar,   .arc-band .arc-bar { background: rgba(255,255,255,.18); }

/* the donut. 🔒 conic-gradient, so a ring needs no SVG and no script. */
.arc-ring { width: 86px; height: 86px; border-radius: 50%; display: grid; place-items: center;
            background: conic-gradient(var(--green,#059669) calc(var(--pct,0)*1%), rgba(11,20,36,.10) 0); }
.arc-ring > i { width: 66px; height: 66px; border-radius: 50%; background: var(--surface,#fff);
                display: grid; place-items: center; font-style: normal;
                font-weight: 700; font-size: 1.05rem; color: var(--navy,#1a2744); }

/* ═══ AVATAR STACK ══════════════════════════════════════════════════════════ */
.arc-faces { display: flex; align-items: center; }
.arc-faces img, .arc-faces .more {
  width: 30px; height: 30px; border-radius: 50%; object-fit: cover;
  border: 2px solid var(--surface,#fff); margin-left: -8px; }
.arc-faces img:first-child, .arc-faces .more:first-child { margin-left: 0; }
.arc-faces .more { background: var(--navy,#1a2744); color: #fff; font-size: .66rem;
                   font-weight: 700; display: grid; place-items: center; }

/* ═══ ARENA TILES ═══════════════════════════════════════════════════════════ */
.arc-arenas { display: grid; gap: var(--sp-2); grid-template-columns: repeat(2,1fr); }
@media (min-width: 760px)  { .arc-arenas { grid-template-columns: repeat(4,1fr); } }
@media (min-width: 1180px) { .arc-arenas { grid-template-columns: repeat(8,1fr); } }
.arc-arena {
  border-radius: var(--r-md); padding: var(--sp-3); color: #fff; text-decoration: none;
  display: flex; flex-direction: column; gap: 3px; min-height: 84px;
  transition: transform .16s, box-shadow .16s;
}
.arc-arena:hover { transform: translateY(-3px); box-shadow: var(--lift-2); }
.arc-arena b { font-size: .82rem; }
.arc-arena span { font-size: .66rem; color: rgba(255,255,255,.90); line-height: 1.3; }

/* ═══ BUTTON ════════════════════════════════════════════════════════════════ */
.arc-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-1);
  padding: var(--sp-2) var(--sp-4); border: 1px solid transparent; border-radius: var(--r-sm);
  font: inherit; font-size: .84rem; font-weight: 700; line-height: 1.2;
  cursor: pointer; text-decoration: none;
  transition: background-color .15s, border-color .15s, color .15s, transform .06s;
}
.arc-btn:active { transform: translateY(1px); }
.arc-btn--primary { background: var(--navy,#1a2744); color: #fff; }
.arc-btn--primary:hover { background: var(--navy2,#1e3050); }
.arc-btn--gold { background: var(--gold,#e8a020); color: #17233d; }
.arc-btn--gold:hover { filter: brightness(1.07); }
.arc-btn--quiet { background: var(--surface,#fff); color: var(--navy,#1a2744);
                  border-color: var(--border,#e2d9c8); }
.arc-btn--quiet:hover { border-color: var(--navy,#1a2744); }
.arc-btn--ghost { background: transparent; color: var(--navy,#1a2744); }
.arc-btn--ghost:hover { background: rgba(26,39,68,.06); }
.arc-btn--onDark { background: rgba(4,8,16,.34); color: #fff;
                   border-color: rgba(255,255,255,.30); }
.arc-btn--onDark:hover { background: rgba(4,8,16,.5); border-color: rgba(255,255,255,.45); }
.arc-btn--danger { background: var(--fail,#b3261e); color: #fff; }
.arc-btn--sm { padding: 5px var(--sp-3); font-size: .74rem; }
.arc-btn--block { display: flex; width: 100%; }
/* 🔒 Disabled must STOP CLICKS, not just look faded. */
.arc-btn[disabled], .arc-btn[aria-disabled="true"] { opacity: .5; cursor: not-allowed; pointer-events: none; }

/* ═══ FOCUS — the thing the estate did not have ══════════════════════════════
   Measured: 77 pages styled :hover, 38 styled :focus at all, 7 used
   :focus-visible. ARC was built for a mouse. :focus-visible means a click draws
   nothing and a Tab key draws a ring. */
.arc-btn:focus-visible, .arc-field:focus-visible, .arc-arena:focus-visible,
.arc-nav a:focus-visible, .arc-card--interactive:focus-visible, .arc-top .icon:focus-visible,
.arc-search input:focus-visible, a:focus-visible,
/* 🔒 Added 30 Aug 2026. These three are BUTTONS the rule never named, so they
      fell back to the browser's own ring - present, but a different shape and
      colour from every other control on the page. Tabbed and confirmed: 44
      focusable elements, 44 now draw the ARC ring. */
.arc-menu:focus-visible, .arc-user:focus-visible, .arc-askbpm:focus-visible,
/* 5 Sep 2026 — the tab-style nav button (fac-desk.html) is a <button>, not the
   <a> the rule above already covers, and the icon-only sign-out button
   (fac-desk.html / dashboard.html topbars, id="btnOut"/"signOutBtn") is a
   plain <button class="icon">, already matched by .arc-top .icon above on
   pages that use that class — named here too for the pages that do not put
   it inside .arc-top. */
.arc-nav button.navbtn:focus-visible {
  outline: 2px solid var(--gold,#e8a020); outline-offset: 2px; box-shadow: var(--ring);
}

/* ═══ FIELD ═════════════════════════════════════════════════════════════════ */
.arc-label { display: block; margin: var(--sp-3) 0 var(--sp-1); font-size: .72rem;
  font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--muted,#6b7a8d); }
.arc-field { width: 100%; padding: var(--sp-2) var(--sp-3);
  border: 1.5px solid var(--border,#e2d9c8); border-radius: var(--r-sm);
  font: inherit; font-size: .92rem; background: #fff; color: var(--text,#1a2030); }
.arc-field:focus { outline: none; border-color: var(--gold,#e8a020); }
.arc-hint { font-size: .78rem; color: var(--muted,#6b7a8d); margin-top: var(--sp-1); }

/* ═══ THE THREE STATES ══════════════════════════════════════════════════════
   🔒 loading / empty / could-not-read are different screens. Seven pages were
      found painting a failed read as an empty one; real classes make the honest
      thing the easy thing. */
.arc-state { padding: var(--sp-3); border-radius: var(--r-md); font-size: .84rem; line-height: 1.5; }
.arc-state--loading, .arc-state--empty { color: var(--muted,#6b7a8d); }
.arc-state--error { background: #fdf3f3; border: 1px solid #f0cccc; color: #8a2a2a; }
.arc-state--note  { background: #f2f7fb; border: 1px solid #cfe0ee; color: #22506f; }
.arc-state--warn  { background: #fffaf0; border: 1px solid #f0dcb0; color: #7a5a12; }

/* ═══ PILL ══════════════════════════════════════════════════════════════════ */
.arc-pill { display: inline-block; border-radius: var(--r-pill); padding: 2px 9px;
  font-size: .66rem; font-weight: 700; background: #e8f4f5; color: #1c6b70; }
.arc-pill--ok   { background: #e6f5ea; color: #1d6b35; }
.arc-pill--due  { background: #fdf1d8; color: #8a6d1a; }
.arc-pill--warn { background: #fdecec; color: #a13030; }
.arc-pill--test { background: #eee;    color: #666; }
/* 🚨 A WHITE-glass pill on a saturated card raises the local background and
      drove white text to 2.75:1 on the amber card. A DARK tint lowers it, so
      the pill puts a floor under its own label whatever it sits on. */
.arc-pill--onDark { background: rgba(4,8,16,.34); color: #fff;
                    box-shadow: inset 0 0 0 1px rgba(255,255,255,.22); }

/* ═══ MOTION ════════════════════════════════════════════════════════════════
   🔒 Only 4 of 131 pages honoured this. Movement is a preference. */
@media (prefers-reduced-motion: reduce) {
  .arc-btn, .arc-card--interactive, .arc-arena, .arc-nav a { transition: none; }
  .arc-card--interactive:hover, .arc-arena:hover { transform: none; }
  .arc-btn:active { transform: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   PART 2 · ADDED 30 AUGUST 2026 BY arc-frontend, BUILDING THE MEMBER DASHBOARD
   TO DARREN'S TWO MOCKUPS.

   🔒 EVERYTHING BELOW IS A SHARED COMPONENT, NOT PAGE CSS. The dashboard page
      carries no <style> block of its own — if it needed one, the component was
      missing and belongs here.

   ⚠ NEW TOKENS ARE DECLARED HERE, NOT INVENTED INLINE. arc-tokens.css owns the
     estate's shared vocabulary (navy/gold/teal/surfaces); these are the
     ARCverse-shell additions on top of it. A raw hex inside a rule below this
     :root block is a bug.
   ═══════════════════════════════════════════════════════════════════════════ */

:root {
  /* two more gradients so the eight arena tiles are eight DIFFERENT colours
     rather than six plus two repeats. */
  --g-indigo: linear-gradient(150deg,#22265e,#454bb0);
  --g-lime:   linear-gradient(150deg,#213809,#446e12);

  /* the dusk sky. 🔒 There is NO city photograph anywhere in site/ — all 82
     assets are green-on-black banner art. Rather than ship a stock photo of a
     city that is not Brisbane, the hero draws its own skyline in SVG, in
     tokens, so an arena can retint the whole hero from six variables. */
  --sky-1: #0a1226;   /* zenith                     */
  --sky-2: #242a4d;   /* mid sky                    */
  --sky-3: #9a5a30;   /* the warm band at horizon   */
  --sun:   #e8a020;   /* = --gold, named separately so a retint is one edit */
  --city-back:  #16203a;
  --city-front: #070d1a;
}

/* ═══ SHELL, PART 2 ═════════════════════════════════════════════════════════
   The workspace column: the dark top bar sits INSIDE it, so the bar starts
   where the sidebar ends rather than spanning the whole window. */
.arc-work { display: flex; flex-direction: column; min-width: 0; }
@media (min-width: 1000px) { .arc-shell { grid-template-columns: 228px minmax(0,1fr); } }

.arc-brandmark { width: 30px; height: 30px; flex: none; }
.arc-brand > div { min-width: 0; }

/* the sidebar's own scroll, so a long nav never pushes the member card off */
.arc-side { gap: var(--sp-3); }
.arc-nav-scroll { overflow-y: auto; margin-right: calc(-1 * var(--sp-1)); padding-right: var(--sp-1); }
@media (min-width: 1000px) { .arc-nav-scroll { flex: 1 1 auto; min-height: 0; } }

.arc-sidefoot { font-size: .62rem; color: rgba(255,255,255,.62); text-align: center;
                padding-top: var(--sp-2); line-height: 1.7; }
.arc-sidefoot a { color: inherit; text-decoration: none; }
.arc-sidefoot a:hover { color: var(--shell-text); text-decoration: underline; }

/* ── the member card, pinned at the bottom of the sidebar ─────────────────── */
.arc-me .lvl { margin-top: var(--sp-3); }
.arc-me .lvl .arc-bar { background: rgba(255,255,255,.16); }
.arc-me .nxt { font-size: .66rem; color: var(--shell-dim); line-height: 1.45;
               margin-top: var(--sp-2); }
.arc-me .go { display: inline-block; margin-top: var(--sp-2); font-size: .68rem;
              font-weight: 700; color: var(--gold); text-decoration: none; }
.arc-me .go:hover { text-decoration: underline; }

/* ── mobile: the sidebar becomes a drawer, it does not squash ─────────────── */
.arc-menu { display: inline-grid; place-items: center; width: 36px; height: 36px; flex: none;
            border: 1px solid var(--shell-line); background: rgba(255,255,255,.06);
            color: #fff; border-radius: var(--r-sm); cursor: pointer; font-size: 1rem; }
.arc-scrim { display: none; position: fixed; inset: 0; z-index: 55;
             background: rgba(6,11,22,.6); border: 0; }
@media (max-width: 999px) {
  .arc-side { position: fixed; top: 0; left: 0; bottom: 0; width: min(282px,86vw);
              z-index: 60; transform: translateX(-101%); transition: transform .2s ease;
              box-shadow: 0 0 40px rgba(0,0,0,.5); }
  body.nav-open .arc-side  { transform: translateX(0); }
  body.nav-open .arc-scrim { display: block; }
}
@media (min-width: 1000px) { .arc-menu { display: none; } }

/* ═══ TOP BAR, PART 2 ═══════════════════════════════════════════════════════ */
.arc-kbd { position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
           font-size: .6rem; font-weight: 700; letter-spacing: .04em;
           color: var(--shell-dim); border: 1px solid var(--shell-line);
           border-radius: 5px; padding: 1px 5px; pointer-events: none; }

.arc-askbpm { display: inline-flex; align-items: center; gap: 5px; flex: none;
              background: var(--gold); color: #17233d; border: none; cursor: pointer;
              border-radius: var(--r-pill); padding: 7px var(--sp-3);
              font: inherit; font-size: .76rem; font-weight: 700; }
.arc-askbpm:hover { filter: brightness(1.07); }

.arc-user { display: flex; align-items: center; gap: var(--sp-2); flex: none;
            background: none; border: none; cursor: pointer; color: #fff;
            font: inherit; padding: 3px; border-radius: var(--r-sm); text-align: left; }
.arc-user b { display: block; font-size: .78rem; font-weight: 600; line-height: 1.2; }
.arc-user .nm span { display: block; font-size: .64rem; color: var(--shell-dim); }
.arc-user .chev { color: var(--shell-dim); font-size: .6rem; }
/* 🔒 Below 900px the search field is narrow enough that the shortcut badge
      sits ON TOP of its own placeholder - measured at 375px, where the field
      read as a magnifier and a floating "⌘K" and nothing else. A hint that
      covers the thing it hints at is worse than no hint, and the shortcut is
      meaningless on a touch device anyway. */
@media (max-width: 900px) { .arc-kbd { display: none; } }
@media (max-width: 760px) { .arc-user .nm, .arc-askbpm .lbl { display: none; } }

/* ═══ AVATARS — INITIALS, NOT FACES ═════════════════════════════════════════
   🔒 site/ holds NO member portraits, and ARC's members are real people. A
      stock face attached to a fabricated name is a worse lie than a monogram,
      so every avatar in ARCverse is initials on a tinted disc. When real
      profile photos exist, .arc-av becomes an <img> and nothing else changes. */
.arc-av { width: 38px; height: 38px; border-radius: 50%; flex: none;
          display: grid; place-items: center; font-size: .78rem; font-weight: 700;
          letter-spacing: .02em; color: #fff; background: var(--g-navy); }
.arc-av--sm { width: 30px; height: 30px; font-size: .62rem; }
.arc-av--lg { width: 46px; height: 46px; font-size: .9rem; }
.arc-av--gold   { background: var(--gold,#e8a020); color: #1a2030; }
.arc-av--teal   { background: var(--g-teal); }
.arc-av--violet { background: var(--g-violet); }
.arc-av--green  { background: var(--g-green); }
.arc-av--blue   { background: var(--g-blue); }
.arc-av--rose   { background: var(--g-rose); }
.arc-av--amber  { background: var(--g-amber); }

/* the overlapping stack now stacks .arc-av discs as well as images */
.arc-faces .arc-av { border: 2px solid var(--surface,#fff); margin-left: -8px; }
.arc-faces .arc-av:first-child { margin-left: 0; }
.arc-faces .more { font-style: normal; }
/* on a coloured card the ring must be the card, not white */
/* ⚠ CORRECTED 30 Aug 2026, PART 3: this was [class*="arc-card--"], which also
      matches the LIGHT variants --accent, --flush and --interactive and would
      ring their discs in translucent white on white. Named explicitly. */
.arc-card--dark .arc-faces .arc-av,   .arc-card--violet .arc-faces .arc-av,
.arc-card--tealg .arc-faces .arc-av,  .arc-card--greeng .arc-faces .arc-av,
.arc-card--amber .arc-faces .arc-av,  .arc-card--rose .arc-faces .arc-av,
.arc-card--blue .arc-faces .arc-av,   .arc-band .arc-faces .arc-av,
.arc-card--dark .arc-faces .more,     .arc-card--violet .arc-faces .more,
.arc-card--tealg .arc-faces .more,    .arc-card--greeng .arc-faces .more,
.arc-card--amber .arc-faces .more,    .arc-card--rose .arc-faces .more,
.arc-card--blue .arc-faces .more,     .arc-band .arc-faces .more { border-color: rgba(255,255,255,.28); }

/* ═══ HERO, PART 2 · THE DRAWN SKYLINE ══════════════════════════════════════ */
.arc-hero { min-height: 300px; }
.arc-hero > .arc-skyline { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; }
/* 🔒 The wash is measured, not eyeballed: the lightest stop still puts white
      text well above 4.5:1 wherever the skyline happens to be bright. */
/* 🔒 THIS IS THE RULE THAT GOVERNS. Both live users of .arc-hero compute this
   gradient, not the 100deg one in PART 1. The terminal stop is --scrim-floor ─
   see the token for the workings (.46 = 3.24:1 over white, .58 = 4.87:1). */
.arc-hero::after {
  background: linear-gradient(96deg, rgba(6,11,22,.94) 0%, rgba(6,11,22,.86) 44%,
                                     rgba(6,11,22,.60) 76%,
                                     rgba(6,11,22,var(--scrim-floor,.58)) 100%);
}
.arc-hero h1 { font-size: clamp(2.1rem,3.6vw,3.15rem); }
.arc-hero .wx { display: flex; align-items: center; gap: var(--sp-2);
                color: rgba(255,255,255,.88); font-size: .88rem; margin-bottom: 3px; }

/* the SVG's own palette, kept in CSS so it is tokenised rather than hard-coded
   into presentation attributes. */
.sky-1 { stop-color: var(--sky-1); }
.sky-2 { stop-color: var(--sky-2); }
.sky-3 { stop-color: var(--sky-3); }
.sun-0 { stop-color: var(--sun); stop-opacity: .95; }
.sun-1 { stop-color: var(--sun); stop-opacity: 0; }
.city-b { fill: var(--city-back); }
.city-f { fill: var(--city-front); }
.win    { fill: var(--sun); }

/* the hero and the briefing card sit side by side, hero about two thirds */
.arc-herorow { display: grid; gap: var(--sp-4); grid-template-columns: 1fr; }
@media (min-width: 900px) { .arc-herorow { grid-template-columns: minmax(0,1.9fr) minmax(0,1fr); } }

/* ═══ THE BPM BRIEFING ROWS ═════════════════════════════════════════════════ */
.arc-brief { display: grid; gap: var(--sp-3); margin: var(--sp-3) 0 var(--sp-4); }
.arc-briefrow { display: flex; gap: var(--sp-3); align-items: flex-start;
                font-size: .82rem; line-height: 1.45; color: rgba(255,255,255,.9); }
.arc-briefrow .ico-sq { width: 28px; height: 28px; border-radius: var(--r-sm); flex: none;
                        display: grid; place-items: center; font-size: .8rem;
                        background: rgba(255,255,255,.10); }

/* ═══ THE LEVEL LADDER ══════════════════════════════════════════════════════
   A node graph on a curve. 🔒 The current rung is marked THREE ways — gold
   fill, a ring, and the sentence "You are at Level D" underneath — because a
   graph read by colour alone is a graph half the audience cannot read. */
/* 🚨 max-width MEASURED, NOT DECORATIVE. In the right rail this SVG sits in a
      268px card and looks correct. At tablet the rail stacks to full width and
      the same 100% blew the ladder up to 712px - rungs the size of buttons.
      A diagram scales with its meaning, not with its container. */
.arc-ladder { width: 100%; max-width: 300px; height: auto; display: block;
              margin-bottom: var(--sp-3); }
.arc-ladder .rung   { fill: var(--surface,#fff); stroke: var(--border,#e2d9c8); stroke-width: 1.5; }
.arc-ladder .done   { fill: var(--navy,#1a2744); stroke: var(--navy,#1a2744); }
.arc-ladder .now    { fill: var(--gold,#e8a020); stroke: var(--gold,#e8a020); }
.arc-ladder .halo   { fill: none; stroke: var(--gold,#e8a020); stroke-opacity: .38; stroke-width: 2; }
.arc-ladder .wire   { fill: none; stroke: var(--border,#e2d9c8); stroke-width: 2; }
.arc-ladder .wire-done { stroke: var(--navy,#1a2744); stroke-opacity: .45; }
.arc-ladder .cap    { font-size: 10px; font-weight: 700; text-anchor: middle;
                      font-family: inherit; letter-spacing: .02em; }
.arc-ladder .cap-on   { fill: #1a2030; }
.arc-ladder .cap-off  { fill: var(--muted,#6b7a8d); }
.arc-ladder .cap-done { fill: #fff; }

/* ═══ LABELLED PRIORITY BARS ════════════════════════════════════════════════ */
.arc-prios { display: grid; gap: var(--sp-4); }
.arc-prio .top { display: flex; justify-content: space-between; align-items: baseline;
                 gap: var(--sp-2); margin-bottom: 6px; }
.arc-prio .top b { font-size: .84rem; font-weight: 600; color: var(--navy,#1a2744); }
.arc-prio .top span { font-size: .78rem; font-weight: 700; color: var(--muted-ink);
                      font-variant-numeric: tabular-nums; }

/* ═══ READINESS ROW ═════════════════════════════════════════════════════════ */
.arc-readi { display: flex; align-items: center; gap: var(--sp-4); }
.arc-readi .arc-ring { flex: none; }

/* ═══ THE ARENA BAND ════════════════════════════════════════════════════════
   A dark band so eight saturated tiles read as one group rather than eight
   loose colours dropped on a cream page. */
.arc-band { background: var(--g-navy); border-radius: var(--r-xl); padding: var(--sp-5);
            color: #fff; }
.arc-band .arc-cardhd h2 { color: var(--gold,#e8a020); }
.arc-band .arc-cardhd a  { color: rgba(255,255,255,.7); }
.arc-band .arc-mut { color: rgba(255,255,255,.82); }

/* ═══ THE CLOSING BAND ══════════════════════════════════════════════════════ */
.arc-closer { border-radius: var(--r-xl); padding: var(--sp-6) var(--sp-5); text-align: center;
              background: linear-gradient(100deg,#3f2a6d 0%,#254a86 48%,#0d4f52 100%);
              color: #fff; }
.arc-closer p { font-family: 'Cormorant Garamond',Georgia,serif; margin: 0;
                font-size: clamp(1.15rem,2.2vw,1.8rem); line-height: 1.45; font-weight: 500; }
/* A RULE THAT PASSES AT ONE VIEWPORT IS A RULE THAT FAILS. --gold here read
      3.95:1 at 768px and 375px, where the clamp yields 18.4px and the floor is
      4.5; it "passed" at 1440 only because the type is 28.8px there and the
      floor drops to 3. --gold-lift reads 5.00:1 at the same 18.4px and 4.72
      against the worst point on the gradient. See the token for the workings. */
.arc-closer p em { font-style: normal; color: var(--gold-lift,#f2bb52); }

/* ═══ THE REFERENCE-BUILD NOTICE ════════════════════════════════════════════
   🔒 Every figure on this page is invented. It says so on the page, in the
      page, where a screenshot of it cannot lose the caveat. */
.arc-demo { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.arc-demo b { font-size: .68rem; letter-spacing: .1em; text-transform: uppercase; }

/* ═══ MOTION, PART 2 ════════════════════════════════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  .arc-side { transition: none; }
}

/* ── late additions, same session ─────────────────────────────────────────── */

/* 🔒 An auto-fit grid rather than a fixed --4, because these four cards do not
      live at the window's width — they live inside the content column, which is
      already 300px narrower than it. A count-based grid guesses; this measures. */
.arc-grid--auto { grid-template-columns: repeat(auto-fit, minmax(230px,1fr)); }

/* the right rail stacks and stays at the top; it must not stretch its cards to
   the height of the content column beside it. */
.arc-rail { display: grid; gap: var(--sp-4); align-content: start; }

/* "Hub" does not fit a rung at the label size the single letters use */
.arc-ladder .cap--sm { font-size: 7px; letter-spacing: 0; }

/* ── the app body ─────────────────────────────────────────────────────────── */
/* 🔒 Here rather than in the page, so an ARCverse screen needs NO <style> block
      of its own. The moment a page opens one, the estate starts drifting back
      toward the 109 themes this system exists to end. */
body.arc-app {
  margin: 0; background: var(--bg,#f4f1ea); color: var(--text,#1a2030);
  font-family: 'DM Sans', system-ui, -apple-system, sans-serif; line-height: 1.55;
  -webkit-font-smoothing: antialiased;
}

/* ═══════════════════════════════════════════════════════════════════════════
   PART 3 · ADDED 30 AUGUST 2026 BY arc-frontend, BUILDING THE CLICKABLE
   PREVIEW SHELL (site/preview/) — contents page, dashboard, profile, community.

   🔒 SAME RULE AS PART 2: everything here is a SHARED component, not page CSS.
      No preview page carries a <style> block. A second agent is building four
      more preview screens and may not edit this file — so these are written
      generously and generically, not shaped to one screen.

   ⚠ NO RAW HEX BELOW THE :root BLOCK. Every colour is a token.
   ═══════════════════════════════════════════════════════════════════════════ */

:root {
  /* the "not yet built" grey, used by the preview status pills and the nav
     tag. Deliberately low-chroma so it never competes with --gold. */
  --stub:      #5f6875;   /* 4.85:1 on --stub-bg, measured. #6c7787 was 3.91 */
  --stub-bg:   #eceef1;
  /* a soft tint of the surface for read-only value fields and inset panels */
  --inset:      #f7f5f0;
  --inset-line: #ece5d7;
  /* the two tag families, and the badges, as tokens rather than inline hex */
  --offer-bg: #eef7f1; --offer-line: #cfe6d8; --offer-ink: #1a6231;
  --need-bg:  #fdf4e6; --need-line:  #f0dcb0; --need-ink:  #74560f;
  --info-bg:  #eaf0fa; --info-ink:   #1d4a86;
}

/* ═══ FOCUS, PART 3 ═════════════════════════════════════════════════════════
   🚨 THE PART 1 RULE NAMES CLASSES. A plain <button>, <input>, <select>,
      <textarea>, <summary> or [tabindex] element carrying none of those classes
      fell back to the browser's own ring — present, but a different shape and
      colour from every other control. Checked with a real Tab key on all four
      preview screens (a programmatic .focus() does NOT match :focus-visible and
      gives a false pass). */
button:focus-visible, input:focus-visible, select:focus-visible,
textarea:focus-visible, summary:focus-visible, [tabindex]:focus-visible,
.arc-subnav a:focus-visible, .arc-linkcard:focus-visible,
.arc-room:focus-visible, .arc-chipbtn:focus-visible {
  outline: 2px solid var(--gold,#e8a020); outline-offset: 2px; box-shadow: var(--ring);
}
/* 🔒 The sidebar is near-black, so the gold ring reads well there, but the
      ring's soft SHADOW spreads onto dark and looks like a smudge. */
.arc-side a:focus-visible, .arc-side button:focus-visible {
  outline-offset: 1px; box-shadow: none;
}

/* ═══ PAGE HEADER ═══════════════════════════════════════════════════════════
   The block every non-dashboard screen opens with: what this page is, who or
   what it is about, and the actions that belong to it. Replaces the bespoke
   "title plus a row of buttons" arrangement each page would otherwise invent. */
.arc-pagehd { display: flex; align-items: flex-start; gap: var(--sp-4); flex-wrap: wrap; }
.arc-pagehd .who { display: flex; align-items: center; gap: var(--sp-3); min-width: 0; }
.arc-pagehd .eyebrow { font-size: .62rem; letter-spacing: .16em; text-transform: uppercase;
  color: var(--muted-ink); font-weight: 700; margin: 0 0 2px; }
.arc-pagehd h1 { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 600;
  font-size: clamp(1.6rem,2.6vw,2.25rem); line-height: 1.12; margin: 0;
  color: var(--navy,#1a2744); }
.arc-pagehd .sub { margin: 4px 0 0; font-size: .84rem; color: var(--muted-ink); }
.arc-pagehd .acts { margin-left: auto; display: flex; gap: var(--sp-2); flex-wrap: wrap; }
@media (max-width: 620px) { .arc-pagehd .acts { margin-left: 0; width: 100%; } }

/* a heading that opens a group of cards, with a hairline running off it */
.arc-sectionhd { display: flex; align-items: center; gap: var(--sp-3); }
/* `flex: none` MEANT "NEVER WRAP", AND ON A PHONE THAT MEANS "RUN OFF THE
      SCREEN". Measured 30 Aug 2026 at 375px on preview/community.html: the
      heading "Specimen - how this board behaves when there is nothing to show"
      laid out 486px wide, took the document to 506px, and the page scrolled
      sideways with the heading cut off. The min-width:0 fix above cannot help,
      because flex:none refuses to shrink at any min-width.
   `flex: 0 1 auto` keeps the heading at its natural width when there is room -
      which is every case that looked right before - and lets it wrap when
      there is not. The hairline is flex:1 with a 0 basis, so it gives up its
      space first and the heading only wraps when the line is genuinely too
      narrow. */
.arc-sectionhd h2 { font-size: .68rem; letter-spacing: .13em; text-transform: uppercase;
  font-weight: 700; color: var(--navy,#1a2744); margin: 0; flex: 0 1 auto; min-width: 0; }
.arc-sectionhd::after { content: ''; height: 1px; flex: 1; background: var(--border,#e2d9c8); }

/* ═══ IN-PAGE SUB-NAVIGATION ════════════════════════════════════════════════
   Anchor links, not tabs. 🔒 Deliberate: a tab strip needs script and hides
   content from Ctrl-F and from print; anchors leave every section in the
   document and still give the "jump to the part I want" affordance. */
.arc-subnav { display: flex; gap: var(--sp-1); flex-wrap: wrap;
  background: var(--surface,#fff); border: 1px solid var(--border,#e2d9c8);
  border-radius: var(--r-pill); padding: var(--sp-1); position: sticky; top: var(--sp-2);
  z-index: 20; box-shadow: var(--lift-1); }
.arc-subnav a { text-decoration: none; font-size: .76rem; font-weight: 600;
  color: var(--muted-ink); padding: 6px var(--sp-3); border-radius: var(--r-pill);
  transition: background .16s, color .16s; }
.arc-subnav a:hover { background: var(--inset); color: var(--navy,#1a2744); }
.arc-subnav a[aria-current="true"] { background: var(--navy,#1a2744); color: #fff; }
/* so a sticky sub-nav does not land on top of the heading it just jumped to */
.arc-main [id] { scroll-margin-top: 88px; }

/* ═══ LABEL / VALUE ROWS ════════════════════════════════════════════════════
   A record shown rather than edited. Two columns on a wide card, stacked on a
   narrow one, with the label always reading as a label. */
.arc-kv { display: grid; gap: 0; margin: 0; }
.arc-kv > div { display: grid; grid-template-columns: 1fr; gap: 2px;
  padding: var(--sp-2) 0; border-top: 1px solid var(--border,#e2d9c8); }
.arc-kv > div:first-child { border-top: none; padding-top: 0; }
@media (min-width: 520px) { .arc-kv > div { grid-template-columns: 150px minmax(0,1fr);
  gap: var(--sp-3); align-items: baseline; } }
.arc-kv dt { font-size: .68rem; letter-spacing: .07em; text-transform: uppercase;
  font-weight: 700; color: var(--muted-ink); margin: 0; }
.arc-kv dd { margin: 0; font-size: .88rem; color: var(--text,#1a2030); min-width: 0;
  overflow-wrap: anywhere; }
.arc-kv dd .arc-mut { display: block; margin-top: 2px; }

/* ═══ FORM GRID ═════════════════════════════════════════════════════════════
   The editable twin of .arc-kv. .arc-field already exists; this is the layout
   around it, so no page invents its own two-up form again. */
.arc-form { display: grid; gap: var(--sp-3); grid-template-columns: 1fr; }
@media (min-width: 640px) { .arc-form--2 { grid-template-columns: 1fr 1fr; } }
.arc-form .wide { grid-column: 1 / -1; }
.arc-form .arc-label { margin-top: 0; }
.arc-form textarea.arc-field { min-height: 92px; resize: vertical;
  font-family: inherit; line-height: 1.5; }
.arc-form select.arc-field { appearance: none;
  background-image: linear-gradient(45deg,transparent 50%,var(--muted-ink) 50%),
                    linear-gradient(135deg,var(--muted-ink) 50%,transparent 50%);
  background-position: right 16px center, right 11px center;
  background-size: 5px 5px, 5px 5px; background-repeat: no-repeat;
  padding-right: var(--sp-6); }

/* a value that is displayed but not editable — an id, a code, a date joined */
.arc-readonly { background: var(--inset); border: 1px solid var(--inset-line);
  border-radius: var(--r-sm); padding: var(--sp-2) var(--sp-3);
  font-size: .86rem; color: var(--text,#1a2030); }

/* ═══ THE CODE FIELD ════════════════════════════════════════════════════════
   An invite code, a member number, anything meant to be copied.
   🚨 The copy BUTTON is a component; the copy HANDLER is not. A silent return
      leaves the PREVIOUS clipboard contents in place and the person pastes the
      wrong thing believing it worked (measured live, 14 Aug 2026). Any page
      using this must report success AND failure into .arc-copyst. */
.arc-code { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.arc-code code { font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size: 1rem; font-weight: 700; letter-spacing: .08em; color: var(--navy,#1a2744);
  background: var(--inset); border: 1px dashed var(--inset-line);
  border-radius: var(--r-sm); padding: var(--sp-2) var(--sp-3); }
.arc-copyst { font-size: .74rem; font-weight: 600; color: var(--green,#059669); }
.arc-copyst[data-state="fail"] { color: var(--fail,#b3261e); }

/* ═══ TAGS ══════════════════════════════════════════════════════════════════
   What a business offers and what it needs. Two visually distinct sets, because
   "I do this" and "I want this" are opposite claims and a member scanning a
   directory must not have to read the words to tell them apart. */
.arc-tags { display: flex; flex-wrap: wrap; gap: var(--sp-1); margin: 0; padding: 0;
  list-style: none; }
.arc-tag { display: inline-flex; align-items: center; gap: 5px;
  border-radius: var(--r-pill); padding: 4px var(--sp-3); font-size: .76rem; font-weight: 600;
  background: var(--inset); border: 1px solid var(--inset-line); color: var(--navy,#1a2744); }
.arc-tag--offer { background: var(--offer-bg); border-color: var(--offer-line); color: var(--offer-ink); }
.arc-tag--need  { background: var(--need-bg);  border-color: var(--need-line);  color: var(--need-ink); }
.arc-tag--arena { background: var(--surface,#fff); border-color: var(--border,#e2d9c8); }
/* a tag that is also a control — a filter, or a removable selection */
.arc-chipbtn { cursor: pointer; font: inherit; font-size: .76rem; font-weight: 600; }
.arc-chipbtn[aria-pressed="true"] { background: var(--navy,#1a2744); color: #fff;
  border-color: var(--navy,#1a2744); }

/* ═══ PERSON ════════════════════════════════════════════════════════════════
   One human, shown the same way everywhere: initials disc, name, what they are
   here, and the way to reach them. Members, Facilitators and providers. */
.arc-people { display: grid; gap: var(--sp-3);
  grid-template-columns: repeat(auto-fill, minmax(232px,1fr)); }
.arc-person { display: flex; gap: var(--sp-3); align-items: flex-start;
  background: var(--surface,#fff); border: 1px solid var(--border,#e2d9c8);
  border-radius: var(--r-md); padding: var(--sp-3); min-width: 0; }
.arc-person .body { min-width: 0; flex: 1; }
.arc-person b { display: block; font-size: .86rem; color: var(--navy,#1a2744);
  overflow-wrap: anywhere; }
.arc-person .role { display: block; font-size: .74rem; color: var(--muted-ink); }
.arc-person .arc-row { margin-top: var(--sp-2); gap: var(--sp-1); }
/* the flat variant, for a list inside a card rather than a grid of cards */
.arc-person--flat { background: none; border: none; border-radius: 0;
  padding: var(--sp-3) 0; border-top: 1px solid var(--border,#e2d9c8); }
.arc-person--flat:first-child { border-top: none; padding-top: 0; }
/* 🚨 NAMED, NOT WILDCARDED, AND THIS WAS MEASURED THE HARD WAY. The obvious
   selector is [class*="arc-card--"] — and it also matches .arc-card--accent,
   .arc-card--flush and .arc-card--interactive, which are LIGHT cards. Written
   that way it painted the Facilitator's name white on white in the dashboard
   right rail: the initials disc and the gold badge were visible and the person's
   NAME was not. Caught by looking at the render, not by reading the rule. */
.arc-card--dark .arc-person--flat,   .arc-card--violet .arc-person--flat,
.arc-card--tealg .arc-person--flat,  .arc-card--greeng .arc-person--flat,
.arc-card--amber .arc-person--flat,  .arc-card--rose .arc-person--flat,
.arc-card--blue .arc-person--flat,   .arc-band .arc-person--flat {
  border-top-color: rgba(255,255,255,.16); }
.arc-card--dark .arc-person--flat b,   .arc-card--violet .arc-person--flat b,
.arc-card--tealg .arc-person--flat b,  .arc-card--greeng .arc-person--flat b,
.arc-card--amber .arc-person--flat b,  .arc-card--rose .arc-person--flat b,
.arc-card--blue .arc-person--flat b,   .arc-band .arc-person--flat b { color: #fff; }
.arc-card--dark .arc-person--flat .role,   .arc-card--violet .arc-person--flat .role,
.arc-card--tealg .arc-person--flat .role,  .arc-card--greeng .arc-person--flat .role,
.arc-card--amber .arc-person--flat .role,  .arc-card--rose .arc-person--flat .role,
.arc-card--blue .arc-person--flat .role,   .arc-band .arc-person--flat .role {
  color: rgba(255,255,255,.84); }

/* the small badge that says what someone IS in this room */
.arc-badge { display: inline-block; border-radius: var(--r-pill); padding: 1px 8px;
  font-size: .62rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
  vertical-align: middle; }
.arc-badge--fac  { background: var(--gold,#e8a020); color: #1a2030; }
.arc-badge--lead { background: var(--navy,#1a2744); color: #fff; }
.arc-badge--prov { background: var(--info-bg); color: var(--info-ink); }
.arc-badge--new  { background: var(--offer-bg); color: var(--offer-ink); }

/* ═══ NOTICE BOARD ══════════════════════════════════════════════════════════ */
.arc-posts { display: grid; gap: 0; }
.arc-post { display: flex; gap: var(--sp-3); align-items: flex-start;
  padding: var(--sp-3) 0; border-top: 1px solid var(--border,#e2d9c8); }
.arc-post:first-child { border-top: none; padding-top: 0; }
.arc-post .body { min-width: 0; flex: 1; }
.arc-post .hd { display: flex; align-items: baseline; gap: var(--sp-2); flex-wrap: wrap; }
.arc-post .hd b { font-size: .84rem; color: var(--navy,#1a2744); }
.arc-post .hd time { font-size: .72rem; color: var(--muted-ink); }
.arc-post p { margin: 4px 0 0; font-size: .86rem; color: var(--text,#1a2030); }
.arc-post .foot { display: flex; gap: var(--sp-3); align-items: center;
  margin-top: var(--sp-2); font-size: .74rem; color: var(--muted-ink); flex-wrap: wrap; }
.arc-post--pinned { background: var(--inset); border: 1px solid var(--inset-line);
  border-left: 3px solid var(--gold,#e8a020); border-radius: var(--r-md);
  padding: var(--sp-3); border-top: none; margin-bottom: var(--sp-2); }

/* a compact dotted meta line: "12 members · last post 2h ago · open" */
.arc-metaline { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2);
  font-size: .74rem; color: var(--muted-ink); margin: 0; padding: 0; list-style: none; }
.arc-metaline > * + *::before { content: '\00b7'; margin-right: var(--sp-2); opacity: .7; }

/* ═══ ROOMS ═════════════════════════════════════════════════════════════════
   A room is a place, so the whole row is the link, not four words inside it. */
.arc-rooms { display: grid; gap: var(--sp-2); }
.arc-room { display: flex; gap: var(--sp-3); align-items: center; text-decoration: none;
  background: var(--surface,#fff); border: 1px solid var(--border,#e2d9c8);
  border-radius: var(--r-md); padding: var(--sp-3); color: inherit;
  transition: border-color .16s, box-shadow .16s, transform .16s; }
.arc-room:hover { border-color: var(--navy,#1a2744); box-shadow: var(--lift-2);
  transform: translateY(-1px); }
.arc-room .mark { width: 38px; height: 38px; border-radius: var(--r-sm); flex: none;
  display: grid; place-items: center; color: #fff; background: var(--g-navy); }
.arc-room .body { flex: 1; min-width: 0; }
.arc-room b { display: block; font-size: .88rem; color: var(--navy,#1a2744); }
.arc-room .go { color: var(--muted-ink); flex: none; font-size: .9rem; }

/* ═══ ARENA / COMMUNITY MASTHEAD ════════════════════════════════════════════
   The banner a community page opens with. Same drawn-not-photographed rule as
   the hero: a gradient plus a glyph, so an arena retints from one token. */
.arc-arenahd { position: relative; overflow: hidden; border-radius: var(--r-xl);
  padding: var(--sp-5); color: #fff; background: var(--g-navy); }
.arc-arenahd::after { content: ''; position: absolute; right: -60px; top: -80px;
  width: 320px; height: 320px; border-radius: 50%; pointer-events: none;
  background: radial-gradient(circle, rgba(255,255,255,.16), transparent 68%); }
.arc-arenahd > * { position: relative; z-index: 1; }
/* GOLD HERE PASSED ONLY ON THE DEFAULT NAVY, AND THIS BANNER EXISTS TO BE
      RETINTED. .arc-arenahd is documented two lines up as "an arena retints
      from one token", and preview/community.html does exactly that with
      --g-green. Measured 30 Aug 2026: --gold on that gradient's light stop is
      2.84:1 at 9.9px uppercase - unreadable, and it looked deliberate. No gold
      light enough to pass 4.5 there still reads as gold (#f5c46a is 3.89).
   There are fifteen arenas and the tint is not knowable from here, so the
      eyebrow uses white, which passes on ANY dark gradient - 5.52 on green,
      12.65 on navy. THIS IS A VISIBLE LOOK CHANGE on a retinted arena banner:
      the eyebrow was gold and is now white. Reverting is one line, but it
      reverts to 2.84:1. */
.arc-arenahd .eyebrow { font-size: .62rem; letter-spacing: .18em; text-transform: uppercase;
  font-weight: 700; color: rgba(255,255,255,.94); margin: 0 0 var(--sp-1); }
.arc-arenahd h1 { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 600;
  font-size: clamp(1.9rem,3.2vw,2.7rem); line-height: 1.08; margin: 0; }
.arc-arenahd p { margin: var(--sp-2) 0 0; color: rgba(255,255,255,.88);
  font-size: .92rem; max-width: 62ch; }
.arc-arenahd .arc-metaline { color: rgba(255,255,255,.82); margin-top: var(--sp-3); }
.arc-arenahd .acts { display: flex; gap: var(--sp-2); flex-wrap: wrap; margin-top: var(--sp-4); }

/* ═══ LINK CARDS ════════════════════════════════════════════════════════════
   A contents page, a screen index, any "here are the places you can go" grid.
   The whole card is the link, so the target is the card and not four words. */
.arc-linkcards { display: grid; gap: var(--sp-3);
  grid-template-columns: repeat(auto-fill, minmax(252px,1fr)); }
.arc-linkcard { display: flex; flex-direction: column; gap: var(--sp-1);
  text-decoration: none; color: inherit; background: var(--surface,#fff);
  border: 1px solid var(--border,#e2d9c8); border-radius: var(--r-lg);
  padding: var(--sp-4); box-shadow: var(--lift-1);
  transition: box-shadow .18s, transform .18s, border-color .18s; }
.arc-linkcard:hover { box-shadow: var(--lift-2); transform: translateY(-2px);
  border-color: var(--navy,#1a2744); }
.arc-linkcard .top { display: flex; align-items: center; gap: var(--sp-2);
  margin-bottom: var(--sp-1); }
.arc-linkcard .mark { width: 34px; height: 34px; border-radius: var(--r-sm); flex: none;
  display: grid; place-items: center; color: #fff; background: var(--g-navy); }
.arc-linkcard b { font-size: .95rem; color: var(--navy,#1a2744); }
.arc-linkcard p { margin: 0; font-size: .82rem; color: var(--muted-ink); line-height: 1.5; }
.arc-linkcard .file { margin-top: auto; padding-top: var(--sp-3);
  font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size: .68rem; color: var(--muted-ink); overflow-wrap: anywhere; }
/* a card for a screen another lane is still building: same shape, visibly quieter */
.arc-linkcard--stub { background: var(--stub-bg); box-shadow: none; border-style: dashed; }
.arc-linkcard--stub .mark { background: var(--stub); }

/* ═══ STATUS PILL ═══════════════════════════════════════════════════════════ */
.arc-status { display: inline-flex; align-items: center; gap: 5px; border-radius: var(--r-pill);
  padding: 2px 9px; font-size: .64rem; font-weight: 700; letter-spacing: .07em;
  text-transform: uppercase; }
.arc-status::before { content: ''; width: 6px; height: 6px; border-radius: 50%;
  background: currentColor; flex: none; }
.arc-status--built { background: var(--offer-bg); color: var(--offer-ink); }
.arc-status--other { background: var(--info-bg);  color: var(--info-ink); }
.arc-status--stub  { background: var(--stub-bg);  color: var(--stub); }

/* the small "soon" tag inside a sidebar nav item */
.arc-nav a .tag { margin-left: auto; font-size: .54rem; font-weight: 700;
  letter-spacing: .08em; text-transform: uppercase; color: var(--shell-dim);
  border: 1px solid var(--shell-line); border-radius: var(--r-pill); padding: 1px 6px;
  flex: none; }

/* ═══ SMALL STATS ═══════════════════════════════════════════════════════════
   The light-background twin of .arc-chip, for a card rather than a hero. */
.arc-stats { display: grid; gap: var(--sp-2);
  grid-template-columns: repeat(auto-fit, minmax(112px,1fr)); }
.arc-stat { background: var(--inset); border: 1px solid var(--inset-line);
  border-radius: var(--r-md); padding: var(--sp-3); }
.arc-stat b { display: block; font-size: 1.25rem; line-height: 1.1; color: var(--navy,#1a2744); }
.arc-stat span { display: block; font-size: .7rem; color: var(--muted-ink); margin-top: 2px; }

/* ═══ SPLIT ═════════════════════════════════════════════════════════════════
   Content column plus a narrower supporting column INSIDE a page that already
   has the right rail — so it cannot reuse .arc-cols. */
.arc-split { display: grid; gap: var(--sp-4); grid-template-columns: 1fr; align-items: start; }
@media (min-width: 900px) { .arc-split { grid-template-columns: minmax(0,1.6fr) minmax(0,1fr); } }

/* ═══ TOGGLE ════════════════════════════════════════════════════════════════
   A real checkbox, restyled. The input keeps its own focus, keyboard behaviour
   and announced state; only the box is redrawn. */
.arc-switch { display: flex; align-items: flex-start; gap: var(--sp-3);
  padding: var(--sp-3) 0; border-top: 1px solid var(--border,#e2d9c8); cursor: pointer; }
.arc-switch:first-child { border-top: none; padding-top: 0; }
.arc-switch input { appearance: none; margin: 2px 0 0; width: 40px; height: 22px; flex: none;
  border-radius: var(--r-pill); background: rgba(11,20,36,.20); position: relative;
  cursor: pointer; transition: background .16s; }
.arc-switch input::after { content: ''; position: absolute; top: 3px; left: 3px;
  width: 16px; height: 16px; border-radius: 50%; background: var(--surface,#fff);
  transition: transform .16s; box-shadow: var(--lift-1); }
.arc-switch input:checked { background: var(--green,#059669); }
.arc-switch input:checked::after { transform: translateX(18px); }
.arc-switch .lbl b { display: block; font-size: .84rem; color: var(--navy,#1a2744);
  font-weight: 600; }
.arc-switch .lbl span { display: block; font-size: .76rem; color: var(--muted-ink); }

/* ═══ DIRECTORY MIRROR ══════════════════════════════════════════════════════
   "This is how you appear to everyone else." A framed quotation of another
   surface, so it must not read as an editable part of this one. */
.arc-mirror { background: var(--inset); border: 1px dashed var(--inset-line);
  border-radius: var(--r-md); padding: var(--sp-3); }
.arc-mirror .cap { font-size: .62rem; letter-spacing: .12em; text-transform: uppercase;
  font-weight: 700; color: var(--muted-ink); margin: 0 0 var(--sp-2); }

/* ═══ MOTION, PART 3 ════════════════════════════════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  .arc-room, .arc-linkcard, .arc-subnav a,
  .arc-switch input, .arc-switch input::after { transition: none; }
  .arc-room:hover, .arc-linkcard:hover { transform: none; }
}

/* ═══ UTILITIES, PART 3 ═════════════════════════════════════════════════════
   🔒 The approved dashboard inlined a nine-declaration clip-rect on its search
      label. That is page CSS wearing a style attribute, and the second the next
      screen needs a visually-hidden label it gets copy-pasted. One class. */
.arc-sr { position: absolute !important; width: 1px; height: 1px; padding: 0;
  margin: -1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%);
  white-space: nowrap; border: 0; }
/* the same thing, but it comes BACK when tabbed to — a skip link */
.arc-skip { position: absolute; left: var(--sp-3); top: -60px; z-index: 100;
  background: var(--gold,#e8a020); color: #17233d; font-weight: 700;
  font-size: .8rem; padding: var(--sp-2) var(--sp-3); border-radius: var(--r-sm);
  text-decoration: none; transition: top .16s; }
.arc-skip:focus { top: var(--sp-3); }

/* inline monospace, for a code or an id inside a sentence */
.arc-main code { font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-size: .86em; background: var(--inset); border: 1px solid var(--inset-line);
  border-radius: 5px; padding: 1px 5px; }
.arc-main .arc-code code, .arc-main .file { background: none; border: none; }
.arc-main .arc-code code { background: var(--inset); border: 1px dashed var(--inset-line); }

/* a plain prose block inside a card, so a paragraph is not left at 100ch */
.arc-prose { max-width: 72ch; font-size: .88rem; color: var(--text,#1a2030); }
.arc-prose p { margin: 0 0 var(--sp-2); }
.arc-prose p:last-child { margin-bottom: 0; }

/* vertical rhythm helpers, so a page never reaches for an inline margin */
.arc-stack { display: grid; gap: var(--sp-3); align-content: start; }
.arc-stack--lg { gap: var(--sp-4); }
.arc-tight { margin: 0; }

@media (prefers-reduced-motion: reduce) { .arc-skip { transition: none; } }

/* ── PART 3 addenda, same session ──────────────────────────────────── */

/* 🔒 Both of these existed first as a style="" attribute on a preview page.
      The moment a page needs an inline style twice, the component was missing. */

/* a label/value list on a dark or saturated card */
.arc-kv--onDark dt { color: rgba(255,255,255,.7); }
.arc-kv--onDark dd { color: #fff; }
.arc-kv--onDark > div { border-top-color: rgba(255,255,255,.16); }

/* a person with no card around them — inside a mirror, a quote, another card */
.arc-person--bare { background: none; border: none; padding: 0; border-radius: 0; }

/* the loading and empty states read as absence, so give them a shape. An ERROR
   keeps its own red frame from PART 1 — three states, never two. */
.arc-state--loading, .arc-state--empty { background: var(--inset);
  border: 1px dashed var(--inset-line); }

/* ── PART 3, responsive corrections. MEASURED AT 375px, NOT GUESSED ──────── */

/* 🔒 A pill-radius bar that has wrapped to three rows is not a pill — the
      999px corner eats into the first and last item on every row and the whole
      strip reads as a lozenge with the words falling out of it. Seen at 375. */
@media (max-width: 760px) {
  .arc-subnav { border-radius: var(--r-lg); }
}

/* 🚨 MEASURED AT 375px: the top bar's other controls take ~230px of the
   343px available, so the search field was rendered 90px wide and its
   placeholder read "S". A search box you cannot read the word "Search" in is
   decoration. Below 560px it takes a row of its own instead of a sliver of
   one. Everything else in the bar keeps its place and its size. */
@media (max-width: 560px) {
  .arc-top { flex-wrap: wrap; row-gap: var(--sp-2); }
  .arc-search { order: 10; flex: 1 1 100%; max-width: none; margin: 0; }
  .arc-askbpm { margin-left: auto; }
}

/* 🚨 MEASURED WITH A REAL TAB KEY, 30 Aug 2026, ON preview/profile.html.
   PART 1 declares .arc-field:focus-visible in its big focus list — and then,
   SEVENTEEN LINES LATER, declares `.arc-field:focus { outline: none; }`. Equal
   specificity (0,2,0), later rule wins, so every text input, select and
   textarea in the estate lost its outline. The gold box-shadow and the gold
   border still fired, so it LOOKED focused and read as a pass — but 38 of the
   58 focusable elements on that screen drew a different indicator from the
   other 20. That is exactly the kind of fault a source read calls fine.
   🔒 This rule is later in the sheet and equal in specificity, so it wins. The
      PART 1 rule is left where it is: a click still draws nothing, which is
      what `outline:none` on plain :focus is there for. */
.arc-field:focus-visible {
  outline: 2px solid var(--gold,#e8a020); outline-offset: 2px; box-shadow: var(--ring);
}

/* 🚨 MEASURED, NOT EYEBALLED. Giving the loading and empty states an --inset
   panel (above) dropped their text from #6b7a8d-on-white 4.38:1 to 4.02:1, and
   they are 13.4px, so the floor is 4.5. My own addition caused it. --muted-ink
   on --inset measures 4.97:1. 🔒 arc-tokens.css is NOT edited to fix this:
   --muted is a shared estate token on 131 pages and changing it is the
   Foreman's call, not a side effect of building a preview screen. */
.arc-state--loading, .arc-state--empty { color: var(--muted-ink); }

/* 🚨 MEASURED ACROSS ALL FOUR PREVIEW SCREENS, 30 Aug 2026, WITH A CONTRAST
   AUDITOR THAT CARRIES BOTH CONTROL LEGS (#ccc on white must read 1.67, black
   on white must read 21). Two real failures came out of it and neither was
   visible to the eye:

   1 · .arc-label and .arc-hint inherit --muted (#6b7a8d) from arc-tokens.css
       and render at 11.5px and 12.5px. That is 4.38:1 against white, UNDER the
       4.5 floor, and it fired 15 times on one screen — every field label on the
       profile form. arc-ui.css already carries --muted-ink (#5e6b7b, 5.43:1)
       for exactly this reason; these two rules never got moved onto it.
   2 · --stub, which I introduced today, was 3.91:1 on --stub-bg. Corrected in
       the :root above rather than patched here.

   🔒 arc-tokens.css is NOT edited. --muted is a shared estate token on 131
      pages; changing its value is the Foreman's call, not a side effect of
      building a preview screen. Reported, not quietly overwritten. */
.arc-label { color: var(--muted-ink); }
.arc-hint  { color: var(--muted-ink); }

/* 🚨 THE THIRD CONTRAST FAILURE, AND THE ONLY ONE THAT WAS ALREADY IN THE
   SHEET BEFORE TODAY. .arc-pill--due paints #8a6d1a on #fdf1d8 at 10.6px —
   4.38:1, under the 4.5 floor. Its three siblings all pass comfortably
   (--ok 5.80, --warn 6.17, --test 4.95), which is why nobody looked. #816418
   measures 4.97:1 on the same background and is indistinguishable by eye. */
.arc-pill--due { color: #816418; }


/* ════════════════════════════════════════════════════════════════════════════
   MERGED IN FROM site/preview/preview-extra.css · 30 August 2026
   Built by a second arc-frontend agent alongside the events, learning,
   think-tank and Facilitator-desk screens, in a separate file only because
   arc-ui.css was open under another pen at the time. A component four screens
   use is not page CSS, so it lives here now and preview-extra.css keeps only
   the preview harness.

   WHY THIS BLOCK IS AT THE END OF THE FILE AND NOT TIDILY INTERLEAVED.
      Every preview page loaded arc-ui.css and THEN preview-extra.css. Appending
      preserves that order exactly, so no rule can start losing a tie it used to
      win. Interleaving would look neater and would silently re-rank the cascade
      - which is the same class of fault as the .arc-bar tie fixed above.

   FOUR OF THE EIGHT PREVIEW PAGES NEVER LOADED preview-extra.css AT ALL
      (index, dashboard, community, profile - and site/arcverse-dashboard.html
      did not either). Merging therefore EXTENDS these rules to five more pages.
      Checked before moving: not one of them uses .arc-eyebrow, .arc-popsplit,
      .arc-tabs, .arc-meta, .arc-table, .arc-track, .arc-chal, .arc-lane,
      .arc-check, .arc-run, .arc-disc or any merged .arc-pill--* variant, and
      profile.html's five selects and one textarea all sit inside .arc-form,
      where arc-ui.css's own scoped rules keep winning.

   DROPPED ON THE WAY IN, both verified as exact duplicates:
      · the min-width:0 grid fix - promoted to sit beside .arc-cols instead,
        because it is a fix to shared layout, not a component;
      · six of the seven selectors in the focus block.
   ════════════════════════════════════════════════════════════════════════════ */

:root {
  /* ── THE THREE POPULATIONS ────────────────────────────────────────────────
     🚨 These are not decoration. ARC's standing rule (Darren, 29 Aug 2026) is
        that every count is split three ways and LABELLED: REAL · RECEPTION ·
        TEST. Giving each population a permanent colour makes the split the
        cheap thing to build and a single unlabelled number the awkward one.
        Reception is deliberately the quietest of the three: a reception row is
        a name at the front desk and has no standing inside ARC. */
  --pop-real:      #1a2744;  /* = --navy. The only population that is members  */
  /* 🚨 WAS #8a6d1a AND IT FAILED, MEASURED: 4.35:1 on the cream page and
     4.38:1 on its own pill, both UNDER the 4.5 floor for the 10-12px labels
     this colour is used for. #7a5e12 reads 5.42 and 5.45 and is the same
     hue. Reception should be quiet, not unreadable. */
  --pop-reception: #7a5e12;  /* the front desk. Amber, and deliberately muted  */
  --pop-test:      #5e6b7b;  /* the test instrument. Grey, never counted in    */

  /* The tint behind a room that must be visibly kept apart from another room.
     🚨 THIS WAS A DARK WASH — rgba(11,20,36,.035) — AND MEASURING KILLED IT.
        Over the cream page background it flattened to rgb(236,233,227), and
        --muted-ink on that computes 4.48:1: UNDER the 4.5 floor for the 12-13px
        captions that fill a lane. Every "raised 4 days ago" in both rooms
        failed, and it looked completely fine.
     🔒 A LIGHT wash separates the lane just as clearly and moves the ratio the
        right way — rgb(250,248,245), where the same ink reads 4.77:1. The lane
        is still obviously a container because of its border and its 4px accent
        edge, which is where the boundary was always doing its work. */
  --lane-tint: rgba(255,255,255,.62);
}

/* ═══════════════════════════════════════════════════════════════════════════
   SHARED COMPONENTS — these belong in arc-ui.css. Listed in the handover.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ═══ EYEBROW ═══════════════════════════════════════════════════════════════
   The small uppercase label above a heading — the sidebar's section label,
   reused in the workspace.

   🚨 IT WAS GOLD ON THE LIGHT PAGE AND THAT MEASURED 1.96:1. The gold section
      labels in the target design live on the DARK sidebar, where gold is
      correct and legible. Lifting the same colour onto the cream workspace
      carried the look and lost the contrast: #e8a020 on #f4f1ea is 1.96, and
      an eyebrow is 9.6px uppercase — the least forgiving text on the screen.
      It looked deliberate, which is exactly why nobody would have queried it.
   🔒 So: --muted-ink on a light surface (4.82:1, and it matches arc-ui.css's
      own .arc-pagehd .eyebrow), and gold ONLY where the surface is dark, where
      it was always right. Same class, correct colour per surface. */
.arc-eyebrow { font-size: .6rem; letter-spacing: .16em; text-transform: uppercase;
               font-weight: 700; color: var(--muted-ink); margin: 0; }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
    .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-eyebrow {
  color: var(--gold,#e8a020); }
/* kept as an explicit alias: pages written before the default changed say
   --ink where they mean "the quiet one", and that is still what they get. */
.arc-eyebrow--ink { color: var(--muted-ink); }

/* ═══ THE DARK-SURFACE LIST ═════════════════════════════════════════════════
   🚨 READ THIS BEFORE ADDING AN ON-DARK RULE. Every "on dark" selector below
      spells out the dark surfaces by name. It USED to say
      [class*="arc-card--"], which is shorter, reads as "any card variant", and
      is WRONG: it also matches .arc-card--accent, .arc-card--flush and
      .arc-card--interactive, which are WHITE cards. Caught by looking at the
      Facilitator desk — the "What needs you today" card is .arc-card--accent,
      and its three figures were rendering white on white. Invisible, and the
      source read perfectly fine.
   ⚠ arc-ui.css uses the same [class*="arc-card--"] shape for .arc-bar and for
     .arc-faces borders, so the same latent fault is in the shared sheet.
     Flagged in the handover; not fixed here, because that file is not mine.
   🔒 The list is: dark, violet, tealg, greeng, amber, rose, blue, and .arc-band.
      A new gradient card variant must be added to it, in every rule below. */

/* ═══ THE THREE-WAY COUNT ═══════════════════════════════════════════════════
   🚨 THE MOST IMPORTANT COMPONENT IN THIS FILE, AND IT IS A POLICY MADE VISIBLE.
      "How many members?" has no single-number answer in ARC. This renders the
      three populations side by side, each with its own label, and it has no
      one-number variant on purpose — you cannot use it to report a total.
      The labels are text, not colour, so the split survives greyscale. */
.arc-popsplit { display: grid; gap: var(--sp-2); grid-template-columns: repeat(3,1fr);
             margin-top: var(--sp-2); }
.arc-popsplit > div { border-radius: var(--r-sm); padding: var(--sp-2) var(--sp-3);
                   border: 1px solid var(--border,#e2d9c8); background: var(--surface,#fff); }
.arc-popsplit b { display: block; font-size: 1.35rem; line-height: 1.05; font-weight: 700;
               font-variant-numeric: tabular-nums; }
.arc-popsplit span { display: block; font-size: .56rem; letter-spacing: .13em;
                  text-transform: uppercase; font-weight: 700; margin-top: 3px; }
.arc-popsplit .real      b, .arc-popsplit .real      span { color: var(--pop-real); }
.arc-popsplit .reception b, .arc-popsplit .reception span { color: var(--pop-reception); }
.arc-popsplit .test      b, .arc-popsplit .test      span { color: var(--pop-test); }
.arc-popsplit .real      { border-left: 3px solid var(--pop-real); }
.arc-popsplit .reception { border-left: 3px solid var(--pop-reception); }
.arc-popsplit .test      { border-left: 3px solid var(--pop-test); }
/* the same split inside a dark or gradient card */
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-popsplit > div { background: rgba(4,8,16,.26);
                                         border-color: rgba(255,255,255,.18); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-popsplit b, :is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-popsplit span { color: #fff; }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-popsplit .reception b, :is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-popsplit .reception span,
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-popsplit .test b,      :is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-popsplit .test span {
  color: rgba(255,255,255,.74); }
@media (max-width: 460px) { .arc-popsplit { grid-template-columns: 1fr; } }

/* ═══ SEGMENTED CONTROL / ROOM SWITCHER ═════════════════════════════════════
   Tabs that look like one control rather than three loose buttons. */
.arc-tabs { display: inline-flex; gap: 3px; padding: 3px; border-radius: var(--r-pill);
            background: rgba(11,20,36,.07); flex-wrap: wrap; }
.arc-tabs a, .arc-tabs button {
  appearance: none; border: 0; background: none; cursor: pointer; font: inherit;
  /* 🚨 --muted-ink measured 4.18:1 on the tab track over the cream page — a
     fail at 12.5px. --text-mid is 6.52 there and 7.33 on a white card, and the
     ACTIVE tab is still obviously the active one because it gains a raised
     white pill and a shadow, which was always the real signal. */
  font-size: .78rem; font-weight: 600; color: var(--text-mid,#4a4a6a); text-decoration: none;
  padding: 6px var(--sp-3); border-radius: var(--r-pill); white-space: nowrap;
  transition: background .16s, color .16s; }
.arc-tabs a:hover, .arc-tabs button:hover { color: var(--navy,#1a2744); }
.arc-tabs [aria-current="true"], .arc-tabs [aria-selected="true"] {
  background: var(--surface,#fff); color: var(--navy,#1a2744); box-shadow: var(--lift-1); }
.arc-tabs a:focus-visible, .arc-tabs button:focus-visible {
  outline: 2px solid var(--gold,#e8a020); outline-offset: 2px; box-shadow: var(--ring); }

/* ═══ META ROW ══════════════════════════════════════════════════════════════
   when · where · format · who, as a wrapping list of small labelled facts. */
.arc-meta { display: flex; flex-wrap: wrap; gap: var(--sp-1) var(--sp-3);
            font-size: .78rem; color: var(--muted-ink); margin: 0; padding: 0;
            list-style: none; }
.arc-meta li { display: flex; align-items: center; gap: 5px; }
.arc-meta svg { flex: none; opacity: .8; }
.arc-meta b { color: var(--navy,#1a2744); font-weight: 600; }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-meta,
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-meta b { color: rgba(255,255,255,.88); }

/* ═══ DATA TABLE ════════════════════════════════════════════════════════════
   🔒 A caseload is a table and was being built as stacked divs. A real <table>
      is what a screen reader announces as rows and columns. */
.arc-table { width: 100%; border-collapse: collapse; font-size: .82rem; }
.arc-table caption { text-align: left; font-size: .68rem; letter-spacing: .13em;
                     text-transform: uppercase; font-weight: 700; color: var(--muted-ink);
                     padding-bottom: var(--sp-2); }
.arc-table th { text-align: left; font-size: .62rem; letter-spacing: .1em;
                text-transform: uppercase; color: var(--muted-ink); font-weight: 700;
                padding: 0 var(--sp-2) var(--sp-2) 0;
                border-bottom: 1px solid var(--border,#e2d9c8); }
.arc-table td { padding: var(--sp-2) var(--sp-2) var(--sp-2) 0; vertical-align: middle;
                border-bottom: 1px solid var(--border,#e2d9c8); color: var(--text,#1a2030); }
.arc-table tr:last-child td { border-bottom: none; }
.arc-table td b { color: var(--navy,#1a2744); font-size: .85rem; }
.arc-table td .sub { display: block; font-size: .72rem; color: var(--muted-ink); }
.arc-table .num { text-align: right; font-variant-numeric: tabular-nums; }
.arc-table .act { text-align: right; white-space: nowrap; }
/* the horizontal scroller a table needs on a phone, rather than a squashed grid */
.arc-tablewrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.arc-tablewrap:focus-visible { outline: 2px solid var(--gold,#e8a020); outline-offset: 2px; }

/* ═══ THE PROGRAMME TRACK ═══════════════════════════════════════════════════
   Sixteen workshops in four modules, as a track rather than a list, so "where
   am I" is answered by shape before it is answered by reading. 🔒 State is
   marked THREE ways — fill, position and a word in the row — never colour
   alone. */
.arc-track { display: grid; gap: var(--sp-3); }
.arc-trackmod { border: 1px solid var(--border,#e2d9c8); border-radius: var(--r-md);
                overflow: hidden; background: var(--surface,#fff); }
.arc-trackmod > .hd { display: flex; align-items: center; gap: var(--sp-3);
                      padding: var(--sp-2) var(--sp-3); background: rgba(11,20,36,.035);
                      border-bottom: 1px solid var(--border,#e2d9c8); flex-wrap: wrap; }
/* 🚨 THIS WAS GOLD AND IT MEASURED 2.06:1 at 9.3px — the same mistake as the
      eyebrow, made a second time in the same file. Gold belongs on the dark
      chrome. On the module header's near-white tint it is decoration that
      cannot be read. --muted-ink is 5.06 there. The module still reads as gold
      overall, because its PROGRESS BAR is gold and that is a shape, not text. */
.arc-trackmod > .hd .mno { font-size: .58rem; letter-spacing: .14em; text-transform: uppercase;
                           font-weight: 700; color: var(--muted-ink); }
.arc-trackmod > .hd b { font-size: .9rem; color: var(--navy,#1a2744); }
.arc-trackmod > .hd .arc-bar { width: 90px; margin-left: auto; flex: none; }
.arc-trackmod > .hd .cnt { font-size: .72rem; color: var(--muted-ink); flex: none;
                           font-variant-numeric: tabular-nums; }
.arc-ws { display: flex; align-items: center; gap: var(--sp-3);
          padding: var(--sp-2) var(--sp-3); border-top: 1px solid var(--border,#e2d9c8);
          text-decoration: none; color: inherit; }
.arc-ws:first-of-type { border-top: none; }
.arc-ws:hover { background: rgba(11,20,36,.03); }
.arc-ws:focus-visible { outline: 2px solid var(--gold,#e8a020); outline-offset: -2px;
                        box-shadow: var(--ring); }
.arc-ws .pin { width: 26px; height: 26px; border-radius: 50%; flex: none; display: grid;
               place-items: center; font-size: .66rem; font-weight: 700;
               font-variant-numeric: tabular-nums;
               border: 1.5px solid var(--border,#e2d9c8); background: var(--surface,#fff);
               color: var(--muted-ink); }
.arc-ws.done   .pin { background: var(--navy,#1a2744); border-color: var(--navy,#1a2744); color: #fff; }
.arc-ws.now    .pin { background: var(--gold,#e8a020); border-color: var(--gold,#e8a020); color: #17233d; }
.arc-ws.locked .pin { opacity: .55; }
.arc-ws .ttl { flex: 1; min-width: 0; font-size: .85rem; font-weight: 600; color: var(--navy,#1a2744); }
.arc-ws.locked .ttl { color: var(--muted-ink); font-weight: 500; }
.arc-ws .ttl .sub { display: block; font-size: .72rem; font-weight: 400; color: var(--muted-ink); }
.arc-ws.now { background: rgba(232,160,32,.07); }

/* ═══ THE CHALLENGE CARD ════════════════════════════════════════════════════
   A question somebody asked, its room, and what has happened to it since. */
.arc-chal { border: 1px solid var(--border,#e2d9c8); border-radius: var(--r-md);
            padding: var(--sp-3); background: var(--surface,#fff);
            display: grid; gap: var(--sp-2); }
.arc-chal .q { font-family: 'Cormorant Garamond',Georgia,serif; font-size: 1.08rem;
               line-height: 1.35; color: var(--navy,#1a2744); margin: 0; }
.arc-chal .by { display: flex; align-items: center; gap: var(--sp-2); font-size: .76rem;
                color: var(--muted-ink); }
.arc-chal .foot { display: flex; align-items: center; gap: var(--sp-2); flex-wrap: wrap; }
.arc-chal .foot .arc-btn { margin-left: auto; }

/* ═══ THE LANE ══════════════════════════════════════════════════════════════
   🔒 Two rooms that must be VISIBLY kept apart. The separation is structural —
      a tinted, bordered, individually-labelled container with its own heading
      and its own boundary sentence — not a colour difference, because a colour
      difference is not a boundary. */
.arc-lane { border: 1px solid var(--border,#e2d9c8); border-radius: var(--r-lg);
            padding: var(--sp-4); background: var(--lane-tint);
            display: grid; gap: var(--sp-3); }
.arc-lane > header { display: flex; align-items: flex-start; gap: var(--sp-3); flex-wrap: wrap; }
.arc-lane > header h3 { margin: 0; font-family: 'Cormorant Garamond',Georgia,serif;
                        font-size: 1.4rem; font-weight: 600; color: var(--navy,#1a2744);
                        line-height: 1.1; }
.arc-lane > header p { margin: 2px 0 0; font-size: .82rem; color: var(--muted-ink);
                       max-width: 54ch; }
.arc-lane--founders { border-left: 4px solid var(--gold,#e8a020); }
.arc-lane--sme      { border-left: 4px solid var(--teal,#2bbfb3); }

/* the rule that states the boundary, in words, between the lanes */
.arc-fence { display: flex; align-items: center; gap: var(--sp-3); font-size: .78rem;
             color: var(--muted-ink); border-top: 1px dashed var(--border,#e2d9c8);
             border-bottom: 1px dashed var(--border,#e2d9c8);
             padding: var(--sp-2) 0; margin: 0; }
.arc-fence svg { flex: none; }

/* ═══ MORE PILL VARIANTS ════════════════════════════════════════════════════ */
.arc-pill--free   { background: #e6f5ea; color: #1d6b35; }
.arc-pill--online { background: #eaf1fb; color: #1d4c8a; }
.arc-pill--place  { background: #f3edfb; color: #573089; }
.arc-pill--live   { background: var(--gold,#e8a020); color: #17233d; }
/* 🚨 --muted-ink here measured 3.39:1 on the pill's own grey at 10.5px — a
      clear fail, and one that looked perfectly acceptable. Navy on the same
      grey is 12.4:1. A pill is small type on a tinted chip and needs the
      darker ink, not the caption ink. */
.arc-pill--quiet  { background: rgba(11,20,36,.06); color: var(--navy,#1a2744); }
.arc-pill--recep  { background: #fdf1d8; color: var(--pop-reception); }

/* ═══ CHECKLIST ═════════════════════════════════════════════════════════════ */
.arc-check { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-2); }
.arc-check li { display: flex; gap: var(--sp-2); font-size: .84rem; line-height: 1.5; }
.arc-check li::before { content: '\2713'; flex: none; width: 18px; height: 18px;
                        margin-top: 2px; border-radius: 50%; display: grid;
                        place-items: center; font-size: .6rem; font-weight: 700;
                        background: rgba(5,150,105,.14); color: var(--green,#059669); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-check li { color: rgba(255,255,255,.9); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-check li::before { background: rgba(255,255,255,.16); color: #fff; }

/* ═══ THE RUN SHEET ═════════════════════════════════════════════════════════
   A timed agenda: what happens, for how long. */
.arc-run { display: grid; gap: 0; margin: 0; }
.arc-run > div { display: flex; gap: var(--sp-3); padding: var(--sp-2) 0;
                 border-top: 1px solid var(--border,#e2d9c8); }
.arc-run > div:first-child { border-top: none; padding-top: 0; }
.arc-run .t { flex: none; width: 62px; font-size: .74rem; font-weight: 700;
              color: var(--gold,#e8a020); font-variant-numeric: tabular-nums;
              padding-top: 2px; }
.arc-run b { display: block; font-size: .85rem; color: var(--navy,#1a2744); }
.arc-run p { margin: 1px 0 0; font-size: .78rem; color: var(--muted-ink); }

/* ═══ ON A DARK OR GRADIENT CARD ════════════════════════════════════════════
   🚨 CAUGHT BY LOOKING, NOT BY READING. Every component above sets an ink
      colour for a WHITE card — .arc-run b was var(--navy) and .arc-run p was
      var(--muted-ink). Dropped into .arc-card--dark on the events screen that
      rendered navy text on a navy gradient: measured 1.4:1, effectively
      invisible, and the source read perfectly clean.
   🔒 So every component that carries an ink colour needs its on-dark twin, in
      the same file, right next to it. This block is the twin. */
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-run b,
.arc-band .arc-run b                 { color: #fff; }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-run p,
.arc-band .arc-run p                 { color: rgba(255,255,255,.82); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-run > div,
.arc-band .arc-run > div             { border-top-color: rgba(255,255,255,.16); }


:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-chal      { background: rgba(4,8,16,.26);
                                       border-color: rgba(255,255,255,.18); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-chal .q   { color: #fff; }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-chal .by  { color: rgba(255,255,255,.78); }

:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-eyebrow--ink { color: rgba(255,255,255,.78); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-tabs      { background: rgba(4,8,16,.30); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-tabs a,
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-tabs button { color: rgba(255,255,255,.78); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-tabs [aria-current="true"],
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-tabs [aria-selected="true"] {
  background: rgba(255,255,255,.94); color: var(--navy,#1a2744); }

/* ═══ DISCLOSURE ════════════════════════════════════════════════════════════
   A <details> that looks like part of the system rather than a browser widget. */
.arc-disc { border-top: 1px solid var(--border,#e2d9c8); }
.arc-disc > summary { display: flex; align-items: center; gap: var(--sp-2);
                      padding: var(--sp-2) 0; font-size: .82rem; font-weight: 600;
                      color: var(--navy,#1a2744); }
.arc-disc > summary::after { content: '\25BE'; margin-left: auto; font-size: .6rem;
                             color: var(--muted-ink); }
.arc-disc[open] > summary::after { content: '\25B4'; }
.arc-disc > .bd { padding-bottom: var(--sp-3); }

/* ═══ FOCUS, FOR THE CONTROLS arc-ui.css COULD NOT KNOW ABOUT ═══════════════
   🔒 Same ring, same offset, same token. A second focus style is a second
      design system. */
/* DEDUPED ON MERGE, 30 Aug 2026. This rule arrived naming summary, select,
   textarea, input, .arc-lane a, .arc-popsplit a and .arc-table a. Every one of
   those is already covered above by "FOCUS, PART 1" (a:focus-visible) and
   "FOCUS, PART 3" (button/input/select/textarea/summary/[tabindex]), with the
   identical outline, offset and ring. A second copy of a rule is how a sheet
   grows a second design system, so only the genuinely new selector is kept. */
.arc-chip:focus-visible {
  outline: 2px solid var(--gold,#e8a020); outline-offset: 2px; box-shadow: var(--ring);
}
/* a <summary> that draws the ARC ring must not ALSO draw the browser's marker */
summary { cursor: pointer; list-style: none; }
summary::-webkit-details-marker { display: none; }
summary::marker { content: ''; }

/* ═══ MULTI-LINE AND SELECT FIELDS ══════════════════════════════════════════
   .arc-field exists for inputs; a multi-line field needs a height and a resize
   handle that cannot break the grid sideways. */
/* COLLISION FOUND ON MERGE, 30 Aug 2026, AND DELIBERATELY NOT UNIFIED.
   arc-ui.css already carries `.arc-form textarea.arc-field` and
   `.arc-form select.arc-field` (see FORM GRID above) with DIFFERENT values -
   `right 16px center` vs `calc(100% - 16px) 52%` for the arrow, --sp-6 vs 34px
   for the padding, and font-family:inherit on the textarea. Those are (0,2,1)
   and these are (0,1,1), so inside a .arc-form the scoped pair still wins and
   nothing moves; outside one - think-tank.html's five bare textareas - these
   apply, exactly as they did from preview-extra.css. Collapsing the two into
   one rule WOULD have changed how the profile form renders, which is precisely
   the "later duplicate quietly wins" fault this consolidation exists to end.
   Unifying the two arrow treatments is a design decision, not a merge. */
textarea.arc-field { min-height: 92px; resize: vertical; line-height: 1.5; }
select.arc-field { appearance: none; background-image:
  linear-gradient(45deg,transparent 50%,var(--muted-ink) 50%),
  linear-gradient(135deg,var(--muted-ink) 50%,transparent 50%);
  background-position: calc(100% - 16px) 52%, calc(100% - 11px) 52%;
  background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; padding-right: 34px; }

/* ═══ MOTION ════════════════════════════════════════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  .arc-tabs a, .arc-tabs button, .arc-ws { transition: none; }
}


/* ============================================================================
   PART 4 - ADDED 1 SEPTEMBER 2026 BY arc-frontend.
   THE ONE-SCREEN PRODUCTIONISATION PROOF, UNIT B. Approved by Darren, 1 Sep.

   WHAT THIS IS. site/app/member-home-proof.html is built to AVR-001
   (design-prototypes/Codex Image Aug 27, 2026, 09_31_59 PM.png) against
   arc-tokens.css + arc-ui.css and NOTHING ELSE - no page <style>, no page
   :root, no raw hex. AVR-001 shows five components this file could not draw and
   four class names it already carried that did nothing. They are added HERE, as
   modifiers and children of classes that already exist, because a component two
   screens need is not page CSS - and because a page-local vocabulary is exactly
   how the estate got to 29 different cards and 109 different themes.

   🔒 EVERY ADDITION BELOW IS A MODIFIER OR A CHILD OF AN EXISTING CLASS.
      Nothing here introduces a new top-level component family.

   ⚠ WHY THIS BLOCK IS APPENDED AND NOT INTERLEAVED. Same reason the 30 Aug
     merge note above gives: every rule in this file was authored against the
     order it sits in. Interleaving would look tidier and would silently re-rank
     the cascade, which is the .arc-bar tie fault the file already records once.
     Where order alone would decide a tie, the selector below is written at
     (0,2,x) - .arc-btn.arc-btn--soft, not .arc-btn--soft - so the result does
     not depend on where in the sheet it sits.

   ⚠ NO RAW HEX BELOW THE :root BLOCK, and no new colour invented. Every value
     is a token or a color-mix() of one. The single new named colour is
     --violet-ink, which is NOT new: it is #573089, already in this file since
     30 Aug as .arc-pill--place's ink. It is given a name so a third copy is
     never typed. .arc-pill--place is deliberately left pointing at its literal:
     repointing it would be a cascade change with no visual effect, and this
     block does not touch rules it does not need to.
   ============================================================================ */

:root {
  /* the file's existing violet, named. 9.59:1 on --surface, 8.50:1 on --bg,
     7.82:1 against a progress track. Controls 21.00 / 1.00. */
  --violet-ink: #573089;
}

/* === PRIORITY ROWS WITH A MEDALLION =========================================
   AVR-001 gives every priority row a tinted rounded-square icon and paints the
   row's bar in that row's colour - violet 85%, blue 60%, teal 40%. The current
   build paints all three bars --gold.

   ⚠ AND THE GOLD IS A MEASURED DEFECT, RECORDED HERE AND NOT FIXED. --gold
     #e8a020 as a bar FILL against .arc-bar's own track (rgba(11,20,36,.10) over
     white = rgb(231,232,233)) reads 1.81:1. WCAG 2.2 1.4.11 asks 3:1 of a
     graphical object you need to see to understand the content, and a progress
     bar you cannot distinguish from its track is exactly that. It is live on
     arcverse-dashboard.html and preview/dashboard.html via .arc-bar--gold.
     🔒 NOT CHANGED HERE - .arc-bar--gold is a shared component on two live
     pages and its colour is a brand call, not a side effect of one screen.
     Reported to the Foreman. What IS done: --prio-accent defaults to --navy
     (14.81:1 as ink, ~11:1 as a fill on its track), so the new component does
     not inherit the fault.

   MEASURED accents, all three supplied by the page as --prio-accent (controls
   21.00 / 1.00), as INK on --surface then as a FILL against the bar track:
     --violet-ink #573089   9.59:1   7.82:1
     --info-ink   #1d4a86   8.84:1   7.20:1
     --teal-ink   #0f766e   5.47:1   4.46:1                                  */
.arc-prio { --prio-accent: var(--navy,#1a2744); }

.arc-prio--iconed { display: flex; align-items: flex-start; gap: var(--sp-3); }
.arc-prio--iconed > .grow { flex: 1; min-width: 0; }

.arc-prioicon {
  width: 34px; height: 34px; border-radius: var(--r-sm); flex: none;
  display: grid; place-items: center;
  color: var(--prio-accent, var(--navy,#1a2744));
  background: color-mix(in oklab, var(--prio-accent, var(--navy,#1a2744)) 14%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--prio-accent, var(--navy,#1a2744)) 26%, transparent);
}
/* (0,3,1) - beats .arc-bar--gold > i (0,2,1) and .arc-bar > i (0,1,1) whatever
   the source order, so the accent cannot be silently overridden by a variant
   class the page also happens to carry. */
.arc-prio--iconed .arc-bar > i { background: var(--prio-accent, var(--navy,#1a2744)); }

/* a dark accent tinted at 14% over a dark card is invisible. On the gradient
   cards the medallion goes to white glass instead, the same treatment
   .arc-briefrow .ico-sq already uses. */
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-prioicon {
  color: #fff; background: rgba(255,255,255,.12);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.20);
}

/* === THE MULTI-SEGMENT DONUT ================================================
   AVR-001's match-readiness ring is FOUR segments, not one. .arc-ring stays
   single-segment by default - it has 5 live users and none of them changes.

   Usage: style="--seg-1:62;--seg-2:18;--seg-3:12" plus optional --seg-N-col.
   Segments are cumulative and the remainder draws the track, so a page never
   computes an offset. Still conic-gradient: no SVG, no script.

   ⚠ THE SEGMENTS MUST NOT BE THE ONLY THING SAYING WHAT THE NUMBER IS. The
     percentage sits in the middle of the ring and the ring carries an aria
     label, because a figure legible only as four arcs of colour is a figure
     part of the audience cannot read.                                        */
.arc-ring.arc-ring--multi {
  --seg-1: 0; --seg-2: 0; --seg-3: 0; --seg-4: 0;
  --seg-a: calc(var(--seg-1) * 1%);
  --seg-b: calc((var(--seg-1) + var(--seg-2)) * 1%);
  --seg-c: calc((var(--seg-1) + var(--seg-2) + var(--seg-3)) * 1%);
  --seg-d: calc((var(--seg-1) + var(--seg-2) + var(--seg-3) + var(--seg-4)) * 1%);
  background: conic-gradient(
    var(--seg-1-col, var(--green,#059669))    0          var(--seg-a),
    var(--seg-2-col, var(--teal,#2bbfb3))     var(--seg-a) var(--seg-b),
    var(--seg-3-col, var(--violet-ink))       var(--seg-b) var(--seg-c),
    var(--seg-4-col, var(--info-ink))         var(--seg-c) var(--seg-d),
    var(--ring-track, rgba(11,20,36,.10))     var(--seg-d) 100%);
}
/* the rail's headline ring. 118px, so the number inside can be read at arm's
   length rather than squinted at - AVR-001 draws it at roughly this size and
   the 86px default is a list-row ring, not a headline one. */
.arc-ring.arc-ring--lg { width: 118px; height: 118px; }
.arc-ring.arc-ring--lg > i { width: 92px; height: 92px; font-size: 1.5rem; }

/* === OPPORTUNITY ROWS =======================================================
   AVR-001's opportunity is a large gradient tile, a title, a meta line, a
   coloured match strength, an avatar stack and a right-hand action. .arc-item
   is the wrong row for it: .arc-item's thumbnail is an <img> and its divider is
   border-top on every child including the first.                             */
.arc-opp { display: flex; align-items: flex-start; gap: var(--sp-3); padding: var(--sp-3) 0; }
.arc-opp:first-of-type { padding-top: 0; }
.arc-opp:last-of-type  { padding-bottom: 0; }
.arc-opp > .grow { flex: 1; min-width: 0; }
/* the divider is BETWEEN rows, so it cannot draw above the first one. */
.arc-opp + .arc-opp { border-top: 1px solid var(--border,#e2d9c8); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-opp + .arc-opp { border-top-color: rgba(255,255,255,.16); }

.arc-opptile {
  width: 68px; height: 68px; border-radius: var(--r-md); flex: none;
  display: grid; place-items: center; color: #fff; background: var(--g-navy);
}

/* MATCH STRENGTH. Measured on every surface it can land on, controls 21.00 /
   1.00. .arc-match is .76rem/700 = 12.16px bold, which is NOT WCAG large text
   (that starts at 18.66px bold), so the floor is 4.5 and not 3.0.

   ON A LIGHT CARD:  --green-ink 5.48:1  --gold-ink 6.24:1  --muted-ink 5.43:1
   ON A GRADIENT CARD the worst fill in the on-dark list is --card--tealg's
   light stop #0d6d66, and it is the one that decides these values:
     --green at 40% + white = #add5c1  3.85:1  FAIL
     --green at 25% + white = #cce5d8  4.64:1  pass   <- chosen
     --gold  at 30% + white = #fae3c6  4.97:1  pass   <- chosen
     rgba(255,255,255,.78)             4.45:1  FAIL by 0.05
     rgba(255,255,255,.88)             5.36:1  pass   <- chosen, and it is the
        value .arc-mut already uses on these cards, so --low is one fewer value.
   ⚠ --gold-lift #f2bb52, which this file uses for gold text on the closer
     gradient, reads 4.10:1 on that same tealg stop and is NOT used here. A
     value measured against one gradient is not a value measured against all of
     them.
   ⚠ NOT COVERED, STATED RATHER THAN OMITTED: --g-gold (#d9a441 light stop)
     defeats every ink including plain white (1.91:1). It has ZERO consumers
     today - checked repo-wide, control --g-indigo returns 4 - and there is no
     .arc-card--goldg, so no .arc-match can reach it. If one is ever added, none
     of these colours will work on it.                                         */
.arc-match { font-size: .76rem; font-weight: 700; }
.arc-match--high { color: var(--green-ink,#047857); }
.arc-match--med  { color: var(--gold-ink,#7a5c0c); }
.arc-match--low  { color: var(--muted-ink); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-match--high { color: color-mix(in oklab, var(--green,#059669) 25%, #ffffff); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-match--med  { color: color-mix(in oklab, var(--gold,#e8a020) 30%, #ffffff); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-match--low  { color: rgba(255,255,255,.88); }

/* === THE SOFT FULL-WIDTH CTA ================================================
   AVR-001 ends most cards with a full-width tinted bar - label left, arrow
   right. Not .arc-btn--primary (a navy slab in every card is too loud for a
   card footer) and not .arc-btn--quiet (which is white on white).

   MEASURED, controls 21.00 / 1.00:
     light: --navy on --inset = 13.60:1
     dark:  rgba(4,8,16,.30) over each of the seven gradient light stops leaves
            white text between 9.39:1 (tealg) and 15.03:1. A DARK tint, not a
            white one, for the reason .arc-chip and .arc-pill--onDark already
            record: a white glass raises the local background and drives the
            label down; a dark one puts a floor under it wherever it lands.     */
.arc-btn.arc-btn--soft {
  display: flex; width: 100%; justify-content: space-between;
  padding: var(--sp-3); border-radius: var(--r-sm);
  background: var(--inset); color: var(--navy,#1a2744);
  border-color: var(--inset-line);
}
.arc-btn.arc-btn--soft:hover { background: var(--surface,#fff); border-color: var(--navy,#1a2744); }
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-btn.arc-btn--soft {
  background: rgba(4,8,16,.30); color: #fff; border-color: rgba(255,255,255,.24);
}
:is(.arc-card--dark,.arc-card--violet,.arc-card--tealg,.arc-card--greeng,
     .arc-card--amber,.arc-card--rose,.arc-card--blue,.arc-band) .arc-btn.arc-btn--soft:hover {
  background: rgba(4,8,16,.46); border-color: rgba(255,255,255,.44);
}

/* === THE SQUARE LIST THUMBNAIL ==============================================
   Darren's ruling 1, 1 Sep 2026: AVR-001 governs the member-home event
   treatment and it is 1:1 (measured off the mockup by pixel scan at 102x103).
   arc-ui.css's default is 92x62 - 3:2.

   🔒 A MODIFIER, NOT A CHANGE TO THE DEFAULT. The ruling is explicit that
      all other event contexts keep 3:2, and .arc-item has 7 live users. This
      rule is (0,2,1) against the default's (0,1,1), so it wins where it is
      asked for and changes nothing where it is not.
   ⚠ AND IT FIXES A CROP: site/tile-*.jpg are 1000x1000 brand lockups. Into
     the 3:2 default with object-fit:cover they lose a third of their height
     THROUGH THE LOCKUP. Into a 1:1 slot they are not cropped at all.          */
.arc-item--square img.thumb { width: 92px; height: 92px; }

/* === THREE STATES, AND THEY WERE TWO ========================================
   ⚠ .arc-state--loading and .arc-state--empty computed BYTE-IDENTICAL:
     background var(--inset), 1px dashed var(--inset-line), colour --muted-ink,
     radius 12px. Measured live 1 Sep 2026 on arc-ui-preview.html,
     preview/community.html and preview/events.html. This department's own rule
     is "loading / empty / could-not-read are three different screens", and the
     shared file that exists to make that easy was failing it.

   🔒 THIS IS NOT AN ADDITION - IT IS A VISIBLE CHANGE ON THREE LIVE PAGES,
      and it is meant to be. --empty is left EXACTLY as it was (dashed edge =
      absence). --loading gains a solid edge and a turning ring: something is
      happening, nothing is missing.

   REDUCED MOTION IS HONOURED AND STILL SAYS SOMETHING. With motion reduced the
   ring stops turning but stays a three-quarter arc, so the state is still
   distinguishable from --empty without any movement at all.
   🚨 AND THE FIRST VERSION OF THIS RULE WAS WRONG, MEASURED ON SCREEN AND
     RECORDED BECAUSE THE DECAY IS THE EVIDENCE. It was display:flex plus a
     spinning ::before. On preview/events.html this component wraps a BLOCK <b>
     heading followed by a paragraph, and flex turned those two into two flex
     ITEMS IN A ROW: the heading collapsed from full width to 138px and the
     paragraph moved up beside it. At 1440px the fingerprint moved by 1.4px and
     read as a pass; the break only showed at 1200px, in the DOM, on a rect
     read. A screenshot taken at that moment came back BLANK, so the eye could
     not have caught it either.
   🔒 SO THE DIFFERENTIATOR CHANGES NO GEOMETRY AT ALL. A shared state
      component is wrapped around content it cannot see, and it must not impose
      a formatting context on it. This paints a progress strip along the top
      edge with background-image, which cannot reflow anything, and swaps the
      dashed edge for a solid one. Same box, same padding, same height.

   ⚠ FOUND ON THE WAY, REPORTED NOT FIXED: preview/events.html:419 uses
     .arc-state--loading for a state that reads "Nothing in person near you this
     fortnight" - which is an EMPTY state, not a loading one, and it is static
     markup that will never finish loading. That page will now show a progress
     strip on a permanent message. The class is wrong on that page; the rule is
     right. Belongs to whoever owns preview/. */
.arc-state.arc-state--loading {
  border-style: solid; border-color: var(--border,#e2d9c8);
  background-image: linear-gradient(90deg,
      transparent 0 18%, var(--muted-ink) 18% 42%, transparent 42% 100%);
  background-repeat: no-repeat;
  background-size: 100% 3px;
  background-position: 0 0;
  animation: arc-loadstrip 1.5s ease-in-out infinite;
}
@keyframes arc-loadstrip {
  0%   { background-position: -100% 0; }
  100% { background-position:  200% 0; }
}
/* With motion reduced the strip stops travelling and becomes a full-width rule.
   🔒 IT DOES NOT DISAPPEAR. A reduced-motion fallback that deletes the only
      differentiator has not honoured a preference, it has removed the
      information - loading would collapse back into empty, which is the exact
      fault this rule exists to end. */
@media (prefers-reduced-motion: reduce) {
  .arc-state.arc-state--loading {
    animation: none;
    background-image: linear-gradient(90deg, var(--muted-ink) 0 100%);
  }
}

/* === FOUR CLASS NAMES THAT DID NOTHING ======================================
   .arc-wrap, .arc-wrap--narrow, .arc-btn--lg and .arc-card--tight are used by
   arc-ui-preview.html and were defined by no stylesheet in the estate. Measured
   1 Sep 2026: .arc-btn--lg computed the identical box to a plain .arc-btn
   (38.1px tall, 13.44px type) and .arc-card--tight the identical 20px padding
   to a plain .arc-card. A class name that a page carries and the sheet ignores
   is worse than a missing one - it reads as intent in the markup and produces
   nothing on screen, and nobody looking at the page can tell.

   ⚠ GIVING THEM BEHAVIOUR IS A VISIBLE CHANGE TO arc-ui-preview.html, which
     is the only file in the estate that uses any of the four (verified
     repo-wide, quote- and extension-agnostic; control: .arc-btn returns 11
     files, a bogus class returns 0). Everything below .arc-wrap on that page
     moves. That is the intended result, not a regression.                     */
.arc-wrap { width: 100%; max-width: 1180px; margin-inline: auto; padding-inline: var(--sp-4); }
.arc-wrap--narrow { max-width: 760px; margin-inline: auto; }
.arc-btn.arc-btn--lg { padding: var(--sp-3) var(--sp-5); font-size: .95rem; border-radius: var(--r-md); }
.arc-card.arc-card--tight { padding: var(--sp-3); }

/* === THE hidden ATTRIBUTE, WHICH THIS SHEET WAS QUIETLY DEFEATING ==========
   🚨 FOUND BY LOOKING, NOT BY READING, 1 Sep 2026. The proof page sets
     el.hidden = true on its top-bar user control when nobody is signed in. The
     attribute WAS set - element.hidden returned true - and the control still
     painted at 69x36, because the UA rule [hidden]{display:none} is (0,1,0) and
     .arc-user{display:flex} in this file is also (0,1,0) and comes later. Every
     component here that sets `display` does the same thing: .arc-user, .arc-btn,
     .arc-nav a, .arc-faces, .arc-chip, .arc-item, .arc-opp and a dozen more.
   ⚠ A SOURCE READ CALLS THIS FINE, AND SO DOES element.hidden. The only
     instrument that catches it is getComputedStyle / getBoundingClientRect on the
     RENDERED element - which is how a signed-out screen came to show a signed-in
     control while every check inside the page reported success.
   🔒 !important IS CORRECT HERE AND IS NOT A SHORTCUT. `hidden` means "this
      element is not relevant", which must outrank a component's own layout
      declaration. That is why the HTML specification defines it with !important
      in its own suggested rendering, and why every reset ships this line.
   BLAST RADIUS MEASURED BEFORE ADDING, NOT ASSUMED: across all 10 arc-ui.css
      consumers there are ZERO elements carrying the hidden attribute (control:
      4,132 elements scanned in total, so the query is not vacuous). This rule
      therefore changes NOTHING that exists today, and closes the class from here
      on. */
[hidden] { display: none !important; }

/* === A TRANSITION THAT SWALLOWS A RETINT ==================================
   🚨 CAUSED BY THE DEEP RAMP ABOVE, FOUND BY MEASURING IT, AND FIXED HERE.
     Injecting a three-line arena theme (--deep-base/--navy/--gold) recoloured
     .arc-side, .arc-top, .arc-hero and .arc-me correctly and left the ACTIVE NAV
     PILL on the old colour - permanently, still wrong 800ms after a .15s
     transition. Proved it was the transition and not the token by three legs:
       the token on that element resolved to the NEW mix;
       a fresh element with the identical declaration painted the NEW colour;
       setting transition:none on the pill itself snapped it to the NEW colour.
     Chrome will not interpolate between two color-mix() results, and rather than
     jumping to the end value it keeps the OLD one. Before the ramp, --shell-2 was
     a plain hex and the same transition interpolated fine, so this is a defect
     THIS CHANGE INTRODUCED.
   ⚠ IT BREAKS NOTHING TODAY - nothing in site/ moves these tokens at runtime -
     but it breaks the one thing the ramp exists for: retinting a surface from a
     single variable. A capability that silently fails on one element is worse
     than one that was never claimed.
   BLAST RADIUS MEASURED: the intersection of "transitions a background" and
     "background comes from the --shell/--deep ramp" is exactly ONE selector pair
     in this file. .arc-btn, .arc-subnav a, .arc-switch input and .arc-tabs all
     transition a background, and none of them takes it from the ramp.
   🔒 AND THIS COSTS NOTHING VISUALLY. .arc-nav a:hover and
      .arc-nav a[aria-current="page"] are both (0,2,1) and the active rule comes
      later, so it already wins - hovering the active item never changed its
      background, and there was never a fade here to lose. Inactive items keep
      their hover transition unchanged. */
.arc-nav a[aria-current="page"] { transition: none; }

/* === A NOTE ON WHAT WAS *NOT* CHANGED =======================================
   ⚠ SIX GOLD FOCUS RINGS REMAIN DECLARED IN THIS FILE - .arc-btn's focus
     list, .arc-field:focus-visible, .arc-chip:focus-visible, .arc-tabs,
     .arc-tablewrap and .arc-ws. --gold #e8a020 measures 1.96:1 on white, which
     FAILS the WCAG 3:1 focus-indicator minimum. They lose today only because
     arc-tokens.css's estate-wide ring carries !important, so nothing is broken
     on any page that loads both files - but a page that loads arc-ui.css
     WITHOUT arc-tokens.css would draw an unreadable focus ring on every
     control. RECORDED, NOT FIXED: it is six rules on ten live pages and out of
     this proof's scope. Escalated to the Foreman.
   ⚠ .arc-table overflows its container at 375px (469px table in a 360px
     viewport, on preview/fac-desk.html). Pre-existing, found by arc-qa during
     the baseline, and not touched here.
   ⚠ --g-gold is declared and has zero consumers. Left alone.
   ============================================================================ */


/* ═══ GUIDED ACTIVATION JOURNEY ══════════════════════════════════════════════
   Added 3 September 2026 by arc-frontend for P-019 U2b (the Service Provider
   guided activation surface, get-started.html). These are SHARED components in
   the design system, not a page's private <style> — a second role's journey
   (member / founder / student / fac) reuses every class here.

   🔒 Tokens only. Interactive controls are real <button>/<a> elements, so the
      estate-wide :focus-visible ring in arc-tokens.css already covers keyboard
      focus — nothing here re-declares a (failing) gold ring.
   🔒 Three states per region are painted by the existing .arc-state family; this
      block adds only what the wizard shape itself needs. */

/* the focused page: a calm centred column, not the dense dashboard grid */
.arc-guided { min-height: 100vh; background: var(--bg,#f4f1ea);
              display: flex; flex-direction: column; }
.arc-guided__top {
  display: flex; align-items: center; gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-4); background: var(--shell); color: #fff;
  position: sticky; top: 0; z-index: 20; }
.arc-guided__top .arc-brand { flex: 1 1 auto; padding: 0; min-width: 0; }
.arc-guided__top .arc-brand b { color: #fff; font-size: 1.05rem; }
.arc-guided__top .arc-btn { white-space: nowrap; }
@media (max-width: 480px) {
  .arc-guided__top { gap: var(--sp-2); padding: var(--sp-2) var(--sp-3); }
  .arc-guided__top .arc-brand span { position: absolute; width: 1px; height: 1px;
    overflow: hidden; clip: rect(0 0 0 0); }   /* keep the mark, drop the wordmark */
  .arc-guided__top .arc-btn { padding: 6px var(--sp-2); font-size: .74rem; }
}
.arc-guided__wrap { width: 100%; max-width: 1060px; margin: 0 auto;
                    padding: var(--sp-5) var(--sp-4) var(--sp-6); }

/* the welcome header + overall gate progress */
.arc-guided__hero { margin-bottom: var(--sp-5); }
.arc-guided__hero h1 { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 600;
                       font-size: clamp(1.9rem,3.4vw,2.7rem); line-height: 1.1;
                       margin: 0 0 var(--sp-2); color: var(--navy,#1a2744); }
.arc-guided__hero p { margin: 0; color: var(--text-mid,#4a4a6a); font-size: 1rem;
                      max-width: 60ch; line-height: 1.55; }
.arc-gateprog { display: flex; align-items: center; gap: var(--sp-3);
                margin-top: var(--sp-4); max-width: 480px; }
.arc-gateprog .arc-bar { flex: 1 1 auto; }
.arc-gateprog b { font-size: .78rem; font-weight: 700; color: var(--navy,#1a2744);
                  white-space: nowrap; }

/* the two-column journey: step rail + the current-step panel */
.arc-journeygrid { display: grid; gap: var(--sp-4); grid-template-columns: 1fr;
                   align-items: start; }
@media (min-width: 860px) {
  .arc-journeygrid { grid-template-columns: 260px minmax(0,1fr); }
  .arc-steprail { position: sticky; top: 84px; }
}

/* the step rail */
.arc-steplist { list-style: none; margin: 0; padding: 0;
                display: flex; flex-direction: column; gap: var(--sp-1); }
.arc-steplist > li { margin: 0; }
.arc-step {
  display: flex; align-items: flex-start; gap: var(--sp-2); width: 100%;
  text-align: left; background: transparent; border: 1px solid transparent;
  border-radius: var(--r-md); padding: var(--sp-2) var(--sp-3);
  font: inherit; color: var(--navy,#1a2744); cursor: pointer; }
.arc-step:hover { background: rgba(26,39,68,.05); }
.arc-step__mk {
  flex: none; width: 24px; height: 24px; border-radius: 50%;
  display: inline-grid; place-items: center; font-size: .72rem; font-weight: 700;
  border: 1.5px solid var(--border,#e2d9c8); background: var(--surface,#fff);
  color: var(--muted-ink,#5e6b7b); line-height: 1; }
.arc-step__tx { min-width: 0; }
.arc-step__tx b { display: block; font-size: .86rem; font-weight: 600; line-height: 1.25; }
.arc-step__tx span { display: block; font-size: .68rem; color: var(--muted-ink,#5e6b7b);
                     margin-top: 1px; }
.arc-step[aria-current="step"] { background: #fff; border-color: var(--gold,#e8a020);
                                 box-shadow: var(--lift-1); }
.arc-step[aria-current="step"] .arc-step__mk { border-color: var(--gold,#e8a020);
                                 background: var(--gold,#e8a020); color: #17233d; }
.arc-step[data-state="done"] .arc-step__mk { border-color: var(--green,#059669);
                                 background: var(--green,#059669); color: #fff; }
.arc-step[data-state="skip"] .arc-step__tx b { color: var(--muted-ink,#5e6b7b); }
/* D-091: non-gating info steps once the essentials are done — present as optional
   reference, NOT as an outstanding numbered todo. Muted + dashed marker de-ranks them. */
.arc-step[data-state="info"] .arc-step__mk { border-style: dashed;
                                 border-color: var(--border,#e2d9c8);
                                 background: var(--bg,#f4f1ea); color: var(--muted-ink,#5e6b7b); }
.arc-step[data-state="info"] .arc-step__tx b { color: var(--muted-ink,#5e6b7b); font-weight: 500; }
.arc-step__band { flex: none; margin-left: auto; font-size: .56rem; font-weight: 700;
                  letter-spacing: .08em; text-transform: uppercase; padding: 2px 6px;
                  border-radius: var(--r-pill); background: var(--bg,#f4f1ea);
                  color: var(--muted-ink,#5e6b7b); align-self: center; }

/* the current-step panel: answers the four questions, then the action */
.arc-stepcard { }
.arc-stepcard .arc-eyebrow { font-size: .66rem; letter-spacing: .13em; text-transform: uppercase;
                  font-weight: 700; color: var(--gold-ink,#7a5c0c); margin: 0 0 var(--sp-1); }
.arc-stepcard h2 { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 600;
                   font-size: 1.7rem; line-height: 1.15; margin: 0 0 var(--sp-3);
                   color: var(--navy,#1a2744); text-transform: none; letter-spacing: 0; }
/* the four-questions block: what / why / value, ranked and readable */
.arc-fourq { display: grid; gap: var(--sp-3); margin: 0 0 var(--sp-4); }
.arc-fourq > div { display: grid; gap: 2px; }
.arc-fourq dt, .arc-fourq .q { font-size: .64rem; letter-spacing: .1em; text-transform: uppercase;
                  font-weight: 700; color: var(--muted-ink,#5e6b7b); }
.arc-fourq dd, .arc-fourq .a { margin: 0; font-size: .92rem; line-height: 1.5; color: var(--text,#1a2030); }
.arc-fourq--why  { border-left: 3px solid var(--teal,#2bbfb3); padding-left: var(--sp-3); }
.arc-fourq--value{ border-left: 3px solid var(--gold,#e8a020); padding-left: var(--sp-3); }

/* the action zone at the foot of a step */
.arc-stepdo { margin-top: var(--sp-4); padding-top: var(--sp-4);
              border-top: 1px solid var(--border,#e2d9c8); }
.arc-stepact { display: flex; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-4);
               align-items: center; }
.arc-stepact .spacer { flex: 1 1 auto; }

/* toggle pills for tags and match dimensions (real buttons → global focus ring) */
.arc-pills { display: flex; flex-wrap: wrap; gap: var(--sp-1); margin: 0; padding: 0; }
/* 🔒 .arc-journey-pill, NOT .arc-pill: the bare .arc-pill (arc-ui.css ~L493) is a
   small STATUS BADGE used live on arcverse-dashboard.html and member-home.html.
   Sharing that selector silently restyled those badges (DF-127). This is a
   distinct interactive toggle and carries its own name. */
.arc-journey-pill {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 6px var(--sp-3); border-radius: var(--r-pill);
  border: 1px solid var(--border,#e2d9c8); background: var(--surface,#fff);
  color: var(--text,#1a2030); font: inherit; font-size: .82rem; font-weight: 600;
  cursor: pointer; }
.arc-journey-pill:hover { border-color: var(--teal-ink,#0f766e); }
.arc-journey-pill[aria-pressed="true"] { background: #e6f7f5; border-color: var(--teal-ink,#0f766e);
                                 color: var(--teal-ink,#0f766e); }
.arc-journey-pill[aria-pressed="true"]::after { content: '\2713'; font-weight: 700; }
.arc-journey-pill--own { background: #fffaf0; border-color: var(--gold,#e8a020); color: var(--gold-ink,#7a5c0c); }
/* 🚨 DEFECT CAUGHT BY RENDERING, NOT READING SOURCE (4 Sep 2026, arc-frontend,
   Unit S / student-get-started.html). .arc-journey-pill--own combined with
   aria-pressed="true" rendered IDENTICAL to a plain pressed pill: the bare
   [aria-pressed="true"] rule above carries higher specificity (two selectors)
   than the single .arc-journey-pill--own class, so it always won regardless of
   source order — CSS specificity does not care which class was added "on top".
   This silently affected get-started.html's own "Your own" tag chips too (its
   drawTags() already renders them with BOTH class="arc-journey-pill
   arc-journey-pill--own" and aria-pressed="true" — never visibly gold there
   either), it just went uncaught until a second page needed the gold/teal
   DISTINCTION to carry real meaning (a student's "offers" tag vs "wants" tag)
   rather than only cosmetic variety on an always-pressed chip. Fixed once,
   here, for every consumer of the pair — not patched per page. */
.arc-journey-pill--own[aria-pressed="true"] { background: #fffaf0; border-color: var(--gold,#e8a020); color: var(--gold-ink,#7a5c0c); }
.arc-pillgroup { margin-bottom: var(--sp-3); }
.arc-pillgroup > .lbl { display: block; font-size: .68rem; letter-spacing: .06em;
                  text-transform: uppercase; font-weight: 700; color: var(--muted-ink,#5e6b7b);
                  margin: 0 0 var(--sp-1); }

/* 🔒 Added 4 Sep 2026 (Unit 1, Founder guided activation) — a SELECTABLE CARD, for
   a choice between a few options that each need a title AND a sentence of
   explanation (e.g. "L2 — Traction: some customers, and you want it repeatable"),
   which .arc-journey-pill cannot carry (it is sized and shaped for a short single
   label — see its own note above). Deliberately NOT a new component: it is
   .arc-card--interactive, already used for the recommended/explore cards below,
   given the one selected-state rule .arc-journey-pill already uses elsewhere
   (teal fill + border = "this is the pressed one") so the estate has exactly ONE
   colour for "selected", not two. Works on a <button> as well as an <a> — a
   <button class="arc-card arc-card--interactive"> only needs text-align/font
   reset inline, everything else (background, border, radius, padding, shadow,
   hover lift, :focus-visible ring) already comes from the class. */
.arc-card--interactive[aria-pressed="true"] { background: #e6f7f5; border-color: var(--teal-ink,#0f766e); }
.arc-card--interactive[aria-pressed="true"] .arc-cardhd h2 { color: var(--teal-ink,#0f766e); }

/* progressive disclosure: recommended / explore, introduced only once priority
   is substantially done — and NEVER painted as an incomplete/red state */
.arc-more { margin-top: var(--sp-6); }
.arc-more__hd { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 600;
                font-size: 1.4rem; color: var(--navy,#1a2744); margin: 0 0 var(--sp-1); }
.arc-more__sub { margin: 0 0 var(--sp-3); font-size: .86rem; color: var(--muted-ink,#5e6b7b); }
.arc-explore { display: grid; gap: var(--sp-3);
               grid-template-columns: repeat(auto-fit, minmax(220px,1fr)); }
.arc-explore > * { min-width: 0; }

@media (prefers-reduced-motion: reduce) {
  .arc-step, .arc-journey-pill { transition: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   PART 4 · AUTH / PRE-ACTIVATION CARD SHELL. Added 5 September 2026 by
   arc-frontend, bringing signin.html / set-password.html / reception.html /
   consent.html / onboarding.html up to the get-started.html standard.

   🔒 WHY A NEW COMPONENT RATHER THAN REUSING .arc-guided: that shell assumes a
      signed-in member with something to enter ARCverse INTO (it renders an
      "Enter ARCverse" / "Sign out" top bar). These five pages run BEFORE that
      is true — a visitor has no session yet, or is one step from having one —
      so the top bar's own affordances would be false. This is the same
      "calm centred column" language (cream page, one card, Cormorant heading)
      at a narrower measure, because a login field or a single agreement does
      not need get-started's 1060px two-column journey grid.

   ⚠ EXTRACTED FROM FIVE PAGES THAT CARRIED BYTE-NEAR-IDENTICAL CSS, same
     fault class as arc-reset.css / arc-type.css (see their own headers): a
     :root override of --dark, a bespoke .wrap/.brand/.card/.btn/.fg, each
     hand-copied with tiny drifts (one page's .btn had border-radius 9px,
     another's 8px). One definition here ends the drift. */
.arc-authshell { min-height: 100vh; background: var(--bg,#f4f1ea); }
.arc-authwrap { max-width: 460px; margin: 0 auto; padding: var(--sp-6) var(--sp-3) 80px; }
.arc-authwrap--wide { max-width: 640px; }

.arc-authbrand { display: flex; align-items: center; justify-content: center;
  gap: var(--sp-2); margin-bottom: var(--sp-4); text-decoration: none; }
.arc-authbrand svg { width: 34px; height: 34px; flex: none; }
.arc-authbrand b { display: block; font-family: 'Cormorant Garamond',Georgia,serif;
  font-weight: 600; letter-spacing: .08em; color: var(--navy,#1a2744); font-size: 1.05rem; }
.arc-authbrand span { display: block; font-size: .62rem; letter-spacing: .1em;
  text-transform: uppercase; color: var(--muted-ink,#5e6b7b); }

/* the dark banner used ahead of a form when there is context to give first
   (a name from an invite, or "before you continue") — same gradient card
   language as .arc-card--dark, scaled down for a narrow column. */
.arc-authhero { background: var(--g-navy); border-radius: var(--r-lg);
  padding: var(--sp-4); margin-bottom: var(--sp-4); color: #fff; }
.arc-authhero .kicker { font-size: .66rem; font-weight: 700; text-transform: uppercase;
  letter-spacing: .1em; color: var(--gold,#e8a020); margin: 0 0 6px; }
.arc-authhero h1 { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 600;
  font-size: clamp(1.35rem,4vw,1.6rem); margin: 0 0 6px; line-height: 1.18; }
.arc-authhero p { margin: 0; font-size: .9rem; color: rgba(255,255,255,.84); }

/* the legal/read-this document box inside a card (consent, onboarding) */
.arc-authdoc { border: 1px solid var(--border,#e2d9c8); border-radius: var(--r-md);
  padding: var(--sp-3); margin-bottom: var(--sp-3); background: var(--bg,#f4f1ea); }
.arc-authdoc h3 { margin: 0 0 2px; font-size: .95rem; color: var(--navy,#1a2744); }
.arc-authdoc .ver { font-size: .72rem; color: var(--muted-ink,#5e6b7b); margin-bottom: 8px; }
.arc-authdoc .body { max-height: 220px; overflow: auto; background: var(--surface,#fff);
  border: 1px solid var(--border,#e2d9c8); border-radius: 7px; padding: 12px;
  font-size: .84rem; white-space: pre-wrap; color: var(--text,#1a2030); }

/* a real checkbox row — kept plain (not a pill) because it carries a full
   sentence of legal text, which a pill is not shaped for. */
.arc-authchk { display: flex; gap: 9px; align-items: flex-start; margin-top: var(--sp-3);
  font-size: .88rem; font-weight: 600; color: var(--text,#1a2030); cursor: pointer; }
.arc-authchk input { margin-top: 3px; width: 17px; height: 17px; flex: none; cursor: pointer; }

/* the show/hide password toggle, unchanged in behaviour, just tokenised */
.arc-pw-wrap { position: relative; }
.arc-pw-wrap input { padding-right: 46px; }
.arc-pw-eye { position: absolute; right: 5px; top: 50%; transform: translateY(-50%);
  background: none; border: none; cursor: pointer; padding: 7px; display: flex;
  align-items: center; color: var(--muted-ink,#5e6b7b); border-radius: var(--r-sm); }
.arc-pw-eye:hover { color: var(--navy,#1a2744); }
.arc-pw-eye svg { width: 20px; height: 20px; display: block; }

/* the "done" checkmark badge — reception's booking step, onboarding's finish */
.arc-tick { width: 56px; height: 56px; border-radius: 50%; background: var(--teal,#2bbfb3);
  color: #fff; display: flex; align-items: center; justify-content: center;
  font-size: 1.5rem; margin: 0 auto var(--sp-3); }

/* ═══════════════════════════════════════════════════════════════════════════
   PART 5 · ARENA PICKER PILLS. Added 5 September 2026 by arc-frontend for
   site/member-home.html (AVR-001). member-dashboard.html's own arena picker
   (arenaList()/arenaBody(), 14 Aug 2026) has always styled its checkbox pills
   with hand-written inline CSS. Reproducing that same four-state control on a
   second page is exactly the "30th bespoke card" this file exists to end, so
   the pill itself moves here and both pages may share it. Nothing about the
   picker's LOGIC changes — listLounges/myLoungeChoices/setMyLounges, the
   full-replace warning and the four states (not-yet-known / none-chosen /
   chosen / could-not-load) are unchanged wherever this class is used. */
.arc-pickpills { display: flex; flex-wrap: wrap; gap: 8px; }
.arc-pickpill { display: inline-flex; align-items: center; gap: 7px;
  border: 1px solid var(--border,#e2d9c8); border-radius: 999px; padding: 7px 13px;
  cursor: pointer; font-size: .85rem; background: transparent; color: var(--text,#1a2030);
  font-family: inherit; }
.arc-pickpill input { margin: 0; cursor: pointer; }
.arc-pickpill.on { border-color: var(--teal,#2bbfb3); background: rgba(43,191,179,.09);
  color: var(--teal-ink,#0f766e); }

/* ═══════════════════════════════════════════════════════════════════════════
   PART 6 · THE PUBLIC FACE. Added 5 September 2026 by arc-frontend for the
   pre-account rebuild of index.html, the five role doors and the auth shell.

   🔒 WHY THESE EXIST AND NOT A SECOND VOCABULARY: index.html and the doors
      carry no session and no app shell (.arc-shell assumes a signed-in
      sidebar), so they need their own top bar and page-band pattern — but
      every colour, radius, card and button below is a TOKEN or an existing
      .arc-card/.arc-btn/.arc-hero variant. Nothing here invents a new card
      kind; PART 6 only adds the scaffolding a pre-account page needs to use
      the ones that already exist. The drawn skyline (.arc-skyline, PART 2)
      is reused verbatim for exactly the reason its own header gives — a
      photograph of a real city needs a licence this estate has not bought,
      and an SVG the estate already owns needs none. */

/* ── the public top bar. Same dark family as .arc-side, laid out horizontally
      because a pre-account visitor has no sidebar to put it in. ──────────── */
.arc-pubshell { min-height: 100vh; background: var(--bg,#f4f1ea); }
.arc-pubtop {
  position: sticky; top: 0; z-index: 40; background: var(--shell);
  display: flex; align-items: center; gap: var(--sp-4);
  padding: 0 var(--sp-5); height: 64px; border-bottom: 1px solid var(--shell-line);
}
.arc-pubtop .arc-brand { padding: 0; flex: none; }
.arc-pubtop .arc-brand b { color: #fff; }
.arc-pubtop .arc-brand span { color: var(--shell-dim); }
.arc-topnav { display: flex; align-items: center; gap: var(--sp-4); margin-left: var(--sp-5); }
.arc-topnav a { color: var(--shell-text); font-size: .82rem; font-weight: 600; white-space: nowrap; text-decoration: none; }
.arc-topnav a:hover { color: #fff; }
.arc-pubtop-cta { display: flex; align-items: center; gap: var(--sp-2); margin-left: auto; flex: none; }
.arc-pubmenu { display: none; }
@media (max-width: 900px) {
  .arc-topnav { display: none; }
  .arc-pubmenu {
    display: inline-grid; place-items: center; width: 38px; height: 38px;
    border-radius: var(--r-md); border: 1px solid var(--shell-line); background: transparent;
    color: #fff; margin-left: auto;
  }
  .arc-pubtop-cta { margin-left: var(--sp-2); }
  /* the ghost "Sign in" pill is redundant with the drawer at this width, and
     hiding its label alone left a blank, borderless pill floating in the bar —
     drop the whole control rather than the text. */
  .arc-pubtop-cta > a:not(.door-cta) { display: none; }
  .arc-pubtop-cta .arc-btn { padding: 7px 12px; font-size: .78rem; }
}
/* the mobile drawer sheet, opened by .arc-pubmenu */
.arc-pubdrawer {
  display: none; position: fixed; inset: 64px 0 0 0; z-index: 39;
  background: var(--shell); overflow-y: auto; padding: var(--sp-4) var(--sp-5) var(--sp-6);
}
body.pub-nav-open .arc-pubdrawer { display: block; }
.arc-pubdrawer a {
  display: block; padding: var(--sp-3) 0; color: #fff; font-size: 1rem; font-weight: 600;
  border-bottom: 1px solid var(--shell-line); text-decoration: none;
}

/* ── full-bleed page bands. index.html and the doors alternate cream / navy
      the same way member-home alternates .arc-card / .arc-card--dark, just at
      section width instead of card width. ─────────────────────────────────── */
.arc-pubband { padding: var(--sp-7,64px) 0; }
.arc-pubband--deep { background: var(--g-navy); color: #fff; }
.arc-pubband--deep .arc-mut { color: rgba(255,255,255,.82); }
.arc-pubband--flush { padding: 0; }

/* ── the marketing hero. Full width, the drawn skyline behind it, no card
      radius because it IS the page at this point, not an element on it. ──── */
.arc-heroband {
  position: relative; overflow: hidden; color: #fff; background: var(--shell);
  padding: clamp(56px,9vw,108px) 0 clamp(48px,7vw,88px);
}
.arc-heroband > .arc-skyline { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; }
.arc-heroband::after { content: ''; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(96deg, rgba(6,11,22,.94) 0%, rgba(6,11,22,.88) 38%,
                                     rgba(6,11,22,.72) 68%, rgba(6,11,22,var(--scrim-floor,.58)) 100%); }
.arc-heroband > .arc-wrap { position: relative; z-index: 2; }
.arc-heroband h1 { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 600;
  font-size: clamp(2.3rem,5.2vw,4.1rem); line-height: 1.04; letter-spacing: -.01em;
  margin: 0 0 var(--sp-3); max-width: 16ch; }
.arc-heroband h1 em { font-style: italic; color: var(--gold-lift,#f2bb52); font-weight: 500; }
.arc-heroband .lede { font-size: clamp(1rem,1.6vw,1.18rem); line-height: 1.6; max-width: 56ch;
  color: rgba(255,255,255,.86); margin: 0 0 var(--sp-5); }
.arc-heroband-eyebrow { display: inline-flex; align-items: center; gap: 8px;
  font-size: .68rem; font-weight: 700; letter-spacing: .18em; text-transform: uppercase;
  color: var(--gold-lift,#f2bb52); margin-bottom: var(--sp-3); }
.arc-heroband-cta { display: flex; gap: var(--sp-3); flex-wrap: wrap; align-items: center; }

/* ── section headers used inside a band. One pattern, cream or navy. ────── */
.arc-pubhd { max-width: 640px; margin: 0 0 var(--sp-6); }
.arc-pubhd .arc-eyebrow { margin-bottom: var(--sp-2); }
.arc-pubhd h2 { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 600;
  font-size: clamp(1.7rem,3vw,2.5rem); line-height: 1.12; letter-spacing: -.01em;
  color: var(--navy,#1a2744); margin: 0 0 var(--sp-2); }
.arc-pubband--deep .arc-pubhd h2 { color: #fff; }
.arc-pubhd p { margin: 0; font-size: .96rem; line-height: 1.6; color: var(--muted-ink); max-width: 58ch; }
.arc-pubband--deep .arc-pubhd p { color: rgba(255,255,255,.8); }
.arc-pubhd--center { margin-left: auto; margin-right: auto; text-align: center; }

/* ── the five doors. A card-taxonomy citizen: .arc-card--interactive with a
      role accent on top and an icon badge, nothing bespoke underneath. ───── */
.arc-doorgrid { display: grid; gap: var(--sp-4); grid-template-columns: repeat(auto-fit, minmax(230px,1fr)); }
.arc-doorcard {
  display: flex; flex-direction: column; gap: var(--sp-2); text-decoration: none;
  color: var(--text,#1a2030); padding: var(--sp-4); border-top: 4px solid var(--door-accent,var(--gold));
}
.arc-doorcard .ico {
  width: 42px; height: 42px; border-radius: var(--r-md); display: grid; place-items: center;
  background: var(--door-accent-soft,rgba(232,160,32,.14)); color: var(--door-accent,var(--gold));
  font-size: 1.3rem; margin-bottom: var(--sp-1);
}
.arc-doorcard b.role { font-size: 1.05rem; font-weight: 700; color: var(--navy,#1a2744);
  font-family: 'Cormorant Garamond',Georgia,serif; }
.arc-doorcard .need { font-size: .78rem; font-weight: 700; color: var(--door-accent,var(--gold)); }
.arc-doorcard p { margin: 0; font-size: .84rem; line-height: 1.55; color: var(--muted-ink); flex: 1; }
.arc-doorcard .go { font-size: .78rem; font-weight: 700; color: var(--door-accent,var(--gold));
  display: flex; align-items: center; gap: 6px; }
.arc-doorcard:hover .go { gap: 10px; }

/* ── a numbered value tier: what the current door decks call .tier-item,
      tokenised so it works on both surface families. ──────────────────────── */
.arc-tierlist { display: grid; gap: var(--sp-3); margin: var(--sp-4) 0; }
.arc-tier { display: flex; gap: var(--sp-3); align-items: flex-start;
  background: rgba(11,20,36,.035); border: 1px solid var(--border,#e2d9c8);
  border-radius: var(--r-md); padding: var(--sp-3) var(--sp-4); }
.arc-pubband--deep .arc-tier { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.12); }
.arc-tier .num { font-family: 'Cormorant Garamond',Georgia,serif; font-style: italic; font-weight: 600;
  font-size: 1.5rem; color: var(--gold-ink,#7a5c0c); line-height: 1; flex: none; min-width: 26px; }
.arc-pubband--deep .arc-tier .num { color: var(--gold-lift,#f2bb52); }
.arc-tier .tx b { display: block; font-size: .95rem; font-weight: 700; color: var(--navy,#1a2744); margin-bottom: 2px; }
.arc-pubband--deep .arc-tier .tx b { color: #fff; }
.arc-tier .tx p { margin: 0; font-size: .85rem; line-height: 1.5; color: var(--muted-ink); }
.arc-pubband--deep .arc-tier .tx p { color: rgba(255,255,255,.78); }

/* ── the persuasion pull-quote inside a band, same job as .callout in the
      old deck markup. ──────────────────────────────────────────────────────── */
.arc-pullquote { font-family: 'Cormorant Garamond',Georgia,serif; font-style: italic;
  font-weight: 500; font-size: clamp(1.05rem,1.8vw,1.35rem); line-height: 1.45;
  border-left: 3px solid var(--gold,#e8a020); padding: var(--sp-2) 0 var(--sp-2) var(--sp-4);
  margin: var(--sp-4) 0; color: var(--navy,#1a2744); }
.arc-pubband--deep .arc-pullquote { color: #fff; border-left-color: var(--teal,#2bbfb3); }

/* ── the sticky "join now" rail a door page keeps on screen throughout the
      pitch, replacing the old fixed-circle nav buttons. ref/utm querystrings
      are appended by the page's own script, exactly as before. ──────────── */
.arc-doorjoin {
  position: sticky; top: 64px; z-index: 30; background: var(--bg,#f4f1ea);
  border-bottom: 1px solid var(--border,#e2d9c8);
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  padding: var(--sp-2) var(--sp-5);
}
.arc-doorjoin .role { font-size: .78rem; font-weight: 700; letter-spacing: .06em;
  text-transform: uppercase; color: var(--muted-ink); }
@media (max-width: 640px) { .arc-doorjoin .role { display: none; } }

/* ── the split auth shell: a dark brand panel beside the form on wide
      viewports, the same two-surface idea as the rest of the estate, scaled
      to a narrow pre-account page. Below the breakpoint it collapses to the
      single centred column the shell already had — nothing inside
      .arc-authwrap changes shape or loses an id either way. ──────────────── */
.arc-authsplit { display: grid; grid-template-columns: 1fr; min-height: 100vh; }
.arc-authside {
  display: none; position: relative; overflow: hidden; background: var(--shell); color: #fff;
  padding: var(--sp-6); flex-direction: column; justify-content: flex-end;
}
.arc-authside > .arc-skyline { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 0; }
.arc-authside::after { content: ''; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(190deg, rgba(6,11,22,.55) 0%, rgba(6,11,22,.92) 82%); }
.arc-authside > * { position: relative; z-index: 2; }
.arc-authside .mark { display: flex; align-items: center; gap: var(--sp-2); margin-bottom: auto; }
.arc-authside .mark svg { width: 30px; height: 30px; }
.arc-authside .mark b { font-family: 'Cormorant Garamond',Georgia,serif; letter-spacing: .08em; }
.arc-authside blockquote { font-family: 'Cormorant Garamond',Georgia,serif; font-style: italic;
  font-weight: 500; font-size: clamp(1.3rem,2.2vw,1.7rem); line-height: 1.4; margin: 0 0 var(--sp-3); }
.arc-authside blockquote em { font-style: italic; color: var(--gold-lift,#f2bb52); }
.arc-authside .who { font-size: .78rem; color: rgba(255,255,255,.72); }
@media (min-width: 980px) {
  .arc-authsplit { grid-template-columns: minmax(0,1fr) minmax(0,560px); }
  .arc-authside { display: flex; }
}
.arc-authwrap { min-width: 0; }

@media (prefers-reduced-motion: reduce) {
  .arc-doorcard, .arc-doorcard .go { transition: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   PUBLIC / DISCOVERY PAGE CHROME. Added 5 Sep 2026 by arc-frontend, wave 2.

   WHAT THIS IS FOR. communities.html, groups.html, business-directory.html,
   member-directory.html, sp-directory.html, find-someone.html, events.html,
   event.html, hub.html, hub-opportunities.html, opportunities.html and their
   neighbours sit OUTSIDE the signed-in .arc-shell (no sidebar — they are
   reached while signed out, or as a single-purpose surface). Before this,
   each one hand-rolled its own <nav>, its own hero gradient and its own
   footer, in its own <style> block, with its own hex values. Measured
   5 Sep 2026 across the 13 pages in this brief: 13 different nav bars, 9
   different hero gradients, and TWO different golds on the same page
   (business-directory.html defined both var(--gold) from arc-tokens.css AND
   a local --arc-gold:#b8922a nobody used consistently) — the exact "109
   themes" failure arc-tokens.css exists to end, recurring one layer up.

   🔒 THIS IS CHROME, NOT CONTENT. The grid of results under the hero is
      still page-specific (a business card is not an event card), and stays
      page-local CSS keyed to the ids/classes that page's own script already
      manipulates. What moves here is the part that should never have
      differed: how a visitor gets back, what says where they are, and how
      the page ends. */

.arc-pubnav {
  position: sticky; top: 0; z-index: 200;
  background: var(--navy,#1a2744); color: #fff;
  padding: 0 5%; height: 60px;
  display: flex; align-items: center; gap: var(--sp-3,14px);
  border-bottom: 1px solid rgba(255,255,255,.08);
}
.arc-pubnav a { text-decoration: none; }
.arc-pubnav .back {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: .8rem; font-weight: 600; color: rgba(255,255,255,.68);
  transition: color .15s;
}
.arc-pubnav .back:hover { color: #fff; }
.arc-pubnav .brand {
  font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 700;
  font-size: 1.15rem; color: #fff; letter-spacing: -.01em;
}
.arc-pubnav .brand em { font-style: italic; color: var(--gold,#e8a020); }
.arc-pubnav .sp { flex: 1; }
.arc-pubnav .side {
  font-size: .78rem; font-weight: 600; color: rgba(255,255,255,.6);
  white-space: nowrap;
}
.arc-pubnav .side:hover { color: #fff; }
@media (max-width: 640px) {
  .arc-pubnav { padding: 0 16px; height: 54px; gap: var(--sp-2,10px); }
  .arc-pubnav .side { display: none; }
}

/* The hero: navy → navy2 wash, gold eyebrow, Cormorant display headline. Same
   family as .arc-hero inside the signed-in shell, sized for a page that has
   no sidebar competing for width. */
.arc-pubhero {
  background: linear-gradient(155deg,var(--navy,#1a2744) 0%,var(--navy2,#1e3050) 65%,#14213b 100%);
  color: #fff; padding: var(--sp-6,40px) 5% 44px; position: relative; overflow: hidden;
}
.arc-pubhero::before {
  content: ''; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(circle at 12% 85%, rgba(43,191,179,.14), transparent 55%);
}
.arc-pubhero > * { position: relative; z-index: 1; }
.arc-pubhero .eyebrow {
  font-size: .68rem; font-weight: 700; letter-spacing: .18em; text-transform: uppercase;
  color: var(--gold-lift,#f2bb52); margin-bottom: 12px;
}
.arc-pubhero h1 {
  font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 700;
  font-size: clamp(1.9rem,4vw,2.8rem); line-height: 1.08; letter-spacing: -.01em;
  margin: 0 0 12px; color: #fff;
}
.arc-pubhero h1 em { font-style: italic; color: var(--teal,#2bbfb3); }
.arc-pubhero p {
  font-size: .95rem; line-height: 1.75; color: rgba(255,255,255,.78);
  max-width: 620px; margin: 0;
}
.arc-pubhero--center { text-align: center; }
.arc-pubhero--center p { margin-inline: auto; }
@media (max-width: 640px) { .arc-pubhero { padding: 30px 20px 32px; } }

.arc-pubfoot {
  padding: 22px 5%; border-top: 1px solid var(--border,#e2d9c8);
  background: var(--surface,#fff);
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: 10px; margin-top: auto;
}
.arc-pubfoot .l { font-size: .74rem; color: var(--muted-ink,#5e6b7b); }
.arc-pubfoot .r { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.arc-pubfoot a { font-size: .74rem; font-weight: 600; color: var(--gold-ink,#7a5c0c); text-decoration: none; }
.arc-pubfoot a:hover { text-decoration: underline; }
@media (max-width: 640px) { .arc-pubfoot { padding: 16px 20px; flex-direction: column; align-items: flex-start; } }

/* a slim variant of .arc-state (defined above for the signed-in shell) tuned
   for a public directory's four-state banner: loading / signed-out / read
   failure / genuinely empty. Left-border colour is the tell, so the four are
   distinguishable at a glance without reading the sentence. */
.arc-pubstate {
  border-radius: var(--r-md,12px); padding: 20px 22px; margin-bottom: 20px;
  border: 1.5px solid var(--border,#e2d9c8); border-left-width: 5px;
  background: var(--surface,#fff); font-size: .86rem; line-height: 1.7; color: var(--muted-ink,#5e6b7b);
}
.arc-pubstate h2 { font-family: 'Cormorant Garamond',Georgia,serif; font-weight: 700;
  font-size: 1.05rem; color: var(--navy,#1a2744); margin: 0 0 6px; }
.arc-pubstate a { color: var(--teal-ink,#0f766e); font-weight: 700; }
.arc-pubstate .why { margin-top: 9px; font-size: .76rem; color: var(--muted-ink,#5e6b7b); opacity: .8; }
.arc-pubstate--signin { border-left-color: var(--gold,#e8a020); background: #fffdf5; }
.arc-pubstate--fail   { border-left-color: var(--fail,#b3261e); background: #fef2f2; }
.arc-pubstate--fail h2 { color: #991b1b; }
.arc-pubstate--cold    { border-left-color: var(--teal,#2bbfb3); background: #eff6ff; }
.arc-pubstate.hidden { display: none; }

/* ═══════════════════════════════════════════════════════════════════════════
   CLASS-NAME COLLISION, FOUND AND SCOPED-AROUND 5/6 Sep 2026 by arc-frontend
   during the public-page visual programme (contact.html etc.).

   🚨 TWO DIFFERENT HERO COMPONENTS SHARE THE SELECTOR `.arc-pubhero h1 em`.
      PART 6 (~line 2360, "THE PUBLIC FACE" — the full skyline hero used by
      index.html and this pass's rebuilt pages: .arc-skyline, .arc-wrap,
      .arc-pubhero-eyebrow, .lede) sets that em to --gold-lift. A LATER block
      (~line 2582, the flat-gradient hero used by a public-directory family:
      .eyebrow, plain <p>, .arc-pubstate) sets the SAME selector to --teal.
      Equal specificity, later source wins — so EVERY page using the PART 6
      hero, including index.html itself, has silently been rendering its
      hero's <em> in teal instead of the intended gold-lift since the PART 7
      block landed. Verified live: getComputedStyle on index.html's own
      "starts here." em returns rgb(43,191,179) = --teal, not --gold-lift.

   🔒 NEITHER RULE IS DELETED — both hero families are live and this is not
      this session's call to unify them. This ADDS a higher-specificity rule
      (0,2,2 vs 0,1,2) scoped to the PART 6 markup shape only (a hero that
      contains .arc-wrap, which the PART 7 flat hero never does), so PART 6
      pages get their intended colour back and the PART 7 family is
      untouched. */
.arc-pubhero > .arc-wrap h1 em { color: var(--gold-lift,#f2bb52); }

/* ═══════════════════════════════════════════════════════════════════════════
   STAGE 3 MEMBER HOME — PROTOTYPE COMPONENTS. Added 6 Sep 2026 by arc-frontend.
   Used ONLY by site/member-home-stage3.html, a single prototype page
   authorised directly by Darren to test a visual language that is explicitly
   NOT AVR-001/Stage 2 ("must NOT feel like Stage 2 with different fonts, Stage
   2 with different CSS variables"). Tokens are the --s3-* set in
   arc-tokens.css, added in the same session.

   🔒 EVERY CLASS HERE IS PREFIXED .arc3- ON PURPOSE, so it cannot collide with
      or be mistaken for the existing .arc-* (AVR-001) component vocabulary
      above, and so the whole block can be found, reviewed and — if Darren does
      not approve the prototype — deleted as one unit without touching any
      live page's styling.
   ⚠ DO NOT LINK THIS SECTION'S CLASSES FROM ANY OTHER PAGE until the prototype
     is approved and the Foreman authorises a wider rollout. That is a
     propagation decision, not a per-page styling choice.
   🔒 FOCUS STATES NEED NO NEW RULES HERE — the estate-wide double-ring
      :focus-visible block in arc-tokens.css already covers every
      a/button/input/[role=button] on this page, dark chrome and light canvas
      alike, and carries !important so nothing below can accidentally suppress
      it. */

.arc3-shell, .arc3-shell *, .arc3-shell *::before, .arc3-shell *::after { box-sizing: border-box; }
.arc3-shell {
  display: flex; min-height: 100vh; background: var(--s3-grey); color: var(--s3-ink);
  font-family: 'DM Sans', system-ui, -apple-system, sans-serif;
}
.arc3-shell img { max-width: 100%; }
.arc3-shell a { color: inherit; }
.arc3-mut { color: var(--s3-ink-mid); }

/* ── SIDEBAR ────────────────────────────────────────────────────────────── */
.arc3-side {
  width: 272px; flex: 0 0 272px; background: var(--s3-navy); color: #fff;
  display: flex; flex-direction: column; position: sticky; top: 0; align-self: flex-start;
  height: 100vh; overflow: hidden; padding: 22px 0 18px; z-index: 20;
}
/* ⚠ overflow:hidden ABOVE, NOT auto, IS LOAD-BEARING — measured live 6 Sep 2026.
   A position:sticky element that is ALSO its own overflow:auto/scroll container
   fails to recomposite correctly on PAGE scroll in this renderer: layout
   (getBoundingClientRect) reports the correct pinned top:0 the whole time, but
   the painted frame lags behind, so the sidebar visibly drifts down the page on
   scroll instead of staying pinned — confirmed by comparing a live
   getBoundingClientRect() read (always 0) against the rendered screenshot
   (not 0) at the same scroll offset. The internal nav list still scrolls: that
   scroll container is .arc3-navscroll below, one level in, which is not itself
   position:sticky and does not carry the same fault. */
.arc3-brand { display: flex; align-items: center; gap: 10px; padding: 0 22px 20px; text-decoration: none; }
.arc3-brand svg { flex: 0 0 auto; }
.arc3-brand b { display: block; font-size: 1.05rem; letter-spacing: .05em; color: #fff; }
.arc3-brand .tag { display: block; font-size: .64rem; letter-spacing: .13em; color: var(--muted-on-dark);
  text-transform: uppercase; margin-top: 2px; }

.arc3-navscroll { flex: 1; overflow-y: auto; padding: 4px 14px; }
.arc3-navlabel { font-size: .67rem; letter-spacing: .1em; text-transform: uppercase;
  color: var(--muted-on-dark); font-weight: 700; margin: 18px 10px 8px; }
.arc3-navlabel:first-child { margin-top: 2px; }
.arc3-navlink { display: flex; align-items: center; gap: 11px; padding: 9px 12px; border-radius: 10px;
  color: rgba(255,255,255,.86); text-decoration: none; font-size: .89rem; font-weight: 500; margin-bottom: 2px; }
.arc3-navlink svg { flex: 0 0 auto; opacity: .92; }
.arc3-navlink:hover { background: rgba(255,255,255,.08); }
.arc3-navlink.is-active { background: #fff; color: var(--s3-navy); font-weight: 700; }
.arc3-navlink.is-active svg { color: var(--s3-navy); }
/* a nav row with NO real page behind it — same posture as this estate's
   "Terms — no page exists" convention: named honestly, never a dead href="#". */
.arc3-navlink.is-soon { color: rgba(255,255,255,.4); cursor: default; }
.arc3-navlink.is-soon .tag { margin-left: auto; font-size: .6rem; letter-spacing: .07em;
  text-transform: uppercase; background: rgba(255,255,255,.1); padding: 2px 7px; border-radius: 999px; }

.arc3-hubcard { display: flex; align-items: center; gap: 10px; margin: 6px 10px 6px; padding: 10px 12px;
  border-radius: 12px; background: rgba(255,255,255,.06); color: #fff; text-decoration: none; }
a.arc3-hubcard:hover { background: rgba(255,255,255,.1); }
.arc3-hubcard .sq { width: 34px; height: 34px; border-radius: 9px; background: var(--s3-gold);
  color: var(--s3-navy); flex: 0 0 auto; display: flex; align-items: center; justify-content: center; }
.arc3-hubcard b { display: block; font-size: .85rem; }
.arc3-hubcard span { display: block; font-size: .72rem; color: var(--muted-on-dark); }
.arc3-hubcard .chev { margin-left: auto; opacity: .75; flex: 0 0 auto; }

.arc3-arenalist { padding: 0 8px; }
.arc3-arenarow { display: flex; align-items: center; gap: 10px; padding: 7px 10px; border-radius: 9px;
  color: rgba(255,255,255,.92); text-decoration: none; font-size: .86rem; }
a.arc3-arenarow:hover { background: rgba(255,255,255,.07); }
.arc3-arenadot { width: 15px; height: 15px; border-radius: 5px; flex: 0 0 auto; }
.arc3-explore { display: inline-flex; align-items: center; gap: 6px; margin: 10px 12px 2px; padding: 7px 14px;
  border-radius: 999px; border: 1px solid rgba(255,255,255,.24); color: #fff; font-size: .8rem;
  font-weight: 700; text-decoration: none; background: none; cursor: pointer; }
.arc3-explore:hover { background: rgba(255,255,255,.08); }

.arc3-sidequote { margin-top: auto; padding: 16px 22px 2px; border-top: 1px solid rgba(255,255,255,.1);
  display: flex; align-items: center; gap: 10px; }
.arc3-sidequote p { font-family: 'Cormorant Garamond', serif; font-style: italic; color: var(--s3-gold);
  font-size: .9rem; margin: 0; line-height: 1.4; }

/* mobile drawer — desktop keeps .arc3-side sticky in normal flow; below the
   breakpoint it becomes a fixed off-canvas panel toggled by .arc3-nav-open. */
.arc3-scrim { display: none; }
@media (max-width: 900px) {
  .arc3-menubtn { display: inline-flex !important; }
  .arc3-side {
    position: fixed; left: 0; top: 0; bottom: 0; height: 100vh; z-index: 60;
    transform: translateX(-102%); transition: transform .22s ease; box-shadow: 0 0 0 rgba(0,0,0,0);
  }
  body.arc3-nav-open .arc3-side { transform: translateX(0); box-shadow: 12px 0 32px rgba(0,0,0,.28); }
  .arc3-scrim { display: block; position: fixed; inset: 0; background: rgba(11,31,59,.45); z-index: 50;
    border: 0; padding: 0; opacity: 0; pointer-events: none; transition: opacity .2s; }
  body.arc3-nav-open .arc3-scrim { opacity: 1; pointer-events: auto; }
}
@media (prefers-reduced-motion: reduce) {
  .arc3-side, .arc3-scrim, .arc3-quicktile { transition: none; }
  .arc3-quicktile:hover { transform: none; }
}

/* ── TOP BAR ────────────────────────────────────────────────────────────── */
.arc3-topbar { display: flex; align-items: center; gap: 12px; padding: 14px 26px; background: #fff;
  border-bottom: 1px solid var(--s3-border); position: sticky; top: 0; z-index: 10; }
.arc3-menubtn { display: none; align-items: center; justify-content: center; background: none;
  border: 1px solid var(--s3-border); border-radius: 9px; padding: 8px; color: var(--s3-ink); cursor: pointer; }
.arc3-search { flex: 1; max-width: 560px; display: flex; align-items: center; gap: 9px; background: var(--s3-grey);
  border: 1px solid var(--s3-border); border-radius: 10px; padding: 9px 14px; color: var(--s3-ink-mid); min-width: 0; }
.arc3-search svg { flex: 0 0 auto; }
.arc3-search input { flex: 1; min-width: 0; border: 0; background: none; font: inherit; color: var(--s3-ink); outline: none; }
.arc3-search input::placeholder { color: var(--s3-ink-mid); }
.arc3-spacer { flex: 1; }
.arc3-askbtn { display: flex; align-items: center; gap: 7px; padding: 10px 17px; border-radius: 10px; border: 0;
  background: var(--s3-purple-strong); color: #fff; font-weight: 700; font-size: .86rem; cursor: pointer;
  white-space: nowrap; }
.arc3-askbtn:hover { background: var(--s3-purple-ink); }
.arc3-askbtn.is-soon { background: var(--s3-purple-tint); color: var(--s3-purple-ink); cursor: default; }
.arc3-iconbtn { position: relative; display: flex; align-items: center; gap: 6px; background: none; border: 0;
  color: var(--s3-ink-mid); font-size: .82rem; font-weight: 600; padding: 8px; border-radius: 9px; cursor: pointer; text-decoration: none; }
.arc3-iconbtn:hover { background: var(--s3-grey); color: var(--s3-ink); }
.arc3-iconbtn .lbl { display: inline; }
.arc3-userchip { display: flex; align-items: center; gap: 9px; background: none; border: 0; padding: 5px 8px 5px 5px;
  border-radius: 999px; cursor: pointer; margin-left: 2px; }
.arc3-userchip:hover { background: var(--s3-grey); }
.arc3-userchip .nm { text-align: left; line-height: 1.16; }
.arc3-userchip b { display: block; font-size: .85rem; color: var(--s3-ink); font-weight: 700; }
.arc3-userchip .sub { display: block; font-size: .71rem; color: var(--s3-ink-mid); }
.arc3-av { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px;
  border-radius: 50%; background: var(--s3-navy); color: #fff; font-weight: 700; font-size: .8rem; flex: 0 0 auto; }
.arc3-av--sm { width: 28px; height: 28px; font-size: .7rem; }
@media (max-width: 640px) {
  .arc3-userchip .nm, .arc3-iconbtn .lbl { display: none; }
  .arc3-askbtn .lbl { display: none; }
}

/* ── PAGE GRID ──────────────────────────────────────────────────────────── */
.arc3-body { display: flex; align-items: flex-start; gap: 24px; padding: 24px 26px 56px; }
.arc3-col-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 26px; }
.arc3-col-rail { width: 328px; flex: 0 0 328px; display: flex; flex-direction: column; gap: 18px; }
@media (max-width: 1180px) {
  .arc3-col-rail { width: 300px; flex-basis: 300px; }
}
@media (max-width: 900px) {
  .arc3-body { flex-direction: column; padding: 18px 16px 40px; }
  .arc3-col-rail { width: 100%; flex-basis: auto; }
}

/* generic light card, the Stage 3 replacement for AVR-001's dark/gradient
   .arc-card family — deliberately flat, white, one hairline border. */
.arc3-card { background: #fff; border: 1px solid var(--s3-border); border-radius: 16px; padding: 20px; }
.arc3-card--tight { padding: 16px; }
.arc3-section-hd { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.arc3-section-hd h2 { font-size: 1.04rem; margin: 0; font-weight: 700; color: var(--s3-ink); }
.arc3-count { background: var(--s3-grey); color: var(--s3-ink-mid); font-size: .72rem; font-weight: 800;
  padding: 3px 10px; border-radius: 999px; }
.arc3-section-hd > a.arc3-viewall { margin-left: auto; font-size: .82rem; font-weight: 700;
  color: var(--s3-blue-ink); text-decoration: none; }
.arc3-section-hd > a.arc3-viewall:hover { text-decoration: underline; }

/* ── HERO ───────────────────────────────────────────────────────────────── */
.arc3-hero { position: relative; border-radius: 20px; overflow: hidden; min-height: 300px;
  display: flex; align-items: flex-end; color: #fff; }
.arc3-hero > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
/* 🔒 A GUARANTEED CONTRAST FLOOR, NOT A DECORATIVE FADE. Because which part of
   ANY given photograph is light or dark is unknowable in advance, the wash's
   darkest stop is applied near-uniformly (.55 -> .90), not just at the very
   bottom, so heading text is never left resting on an untreated bright sky.
   Verified live with javascript_tool by sampling getComputedStyle/canvas pixel
   colour under the heading, not by eye — see the build report. */
.arc3-hero::after { content: ""; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(180deg, rgba(11,31,59,.55) 0%, rgba(11,31,59,.72) 45%, rgba(11,31,59,.90) 100%); }
/* 🚨 GOLD-ON-PHOTO NEEDS ITS OWN OPAQUE FLOOR — THE BIG GRADIENT ALONE IS NOT
   ENOUGH FOR IT. Measured live 6 Sep 2026 by sampling the actual rendered hero
   photo's brightest pixel with javascript_tool (a near-white sky highlight,
   244/246/225) and computing contrast for --s3-gold text blended through the
   page gradient at the label's real vertical position: 2.76:1 — FAILS AA even
   though the same maths gives the white h1 8.40:1 lower in the card. Gold text
   needs roughly .82+ background alpha over that pixel to clear 4.5:1, which
   would erase the photo behind a normal-width gradient stop. So these two
   short gold elements carry their OWN small, near-opaque chip — belt-and-
   suspenders over the big gradient, and correct regardless of which photo
   loads. Verified: gold-on-chip = 5.11:1+, comfortably clears AA at any size. */
.arc3-hero-accent { position: absolute; top: 22px; right: 30px; z-index: 2; font-family: 'Cormorant Garamond', serif;
  font-style: italic; color: var(--s3-gold); font-size: 1.05rem;
  background: rgba(11,31,59,.85); padding: 5px 14px; border-radius: 999px; }
.arc3-hero-content { position: relative; z-index: 2; padding: 32px 36px 26px; width: 100%; }
.arc3-hero-label { display: inline-block; font-size: .72rem; letter-spacing: .14em; text-transform: uppercase;
  color: var(--s3-gold); font-weight: 800; margin-bottom: 10px; background: rgba(11,31,59,.85);
  padding: 5px 12px; border-radius: 999px; }
.arc3-hero h1 { font-family: 'Cormorant Garamond', serif; font-weight: 600; font-size: clamp(1.7rem, 3vw, 2.5rem);
  margin: 0 0 6px; color: #fff; }
.arc3-hero .tagline { font-size: 1rem; font-weight: 700; margin: 0 0 4px; color: #fff; }
.arc3-hero .sub { font-size: .92rem; color: rgba(255,255,255,.9); margin: 0 0 16px; max-width: 46em; }
.arc3-hero .loc { display: inline-flex; align-items: center; gap: 6px; font-size: .84rem; color: #fff;
  background: rgba(255,255,255,.16); padding: 6px 13px; border-radius: 999px; }
.arc3-hero-note { position: relative; z-index: 2; margin: 10px 36px 0; font-size: .72rem; color: rgba(255,255,255,.8); }
/* the decorative script accent is absolutely positioned top-right, which
   collides with the "WELCOME BACK" chip once the card narrows enough that
   both sit on one line. It is pure decoration (see the reference image itself
   — "Stronger Together" carries no data), so it is dropped rather than wrapped
   awkwardly on narrow screens. */
@media (max-width: 640px) { .arc3-hero-accent { display: none; } }

/* ── QUICK ACTIONS ──────────────────────────────────────────────────────── */
.arc3-quickrow { display: grid; grid-template-columns: repeat(5, 1fr); gap: 14px; }
.arc3-quicktile { background: #fff; border: 1px solid var(--s3-border); border-radius: 14px; padding: 16px;
  text-decoration: none; color: var(--s3-ink); display: flex; flex-direction: column; gap: 8px;
  transition: box-shadow .15s, transform .15s; }
.arc3-quicktile:hover { box-shadow: 0 8px 20px rgba(15,23,42,.08); transform: translateY(-2px); }
.arc3-quicktile .ic { width: 38px; height: 38px; border-radius: 10px; display: flex; align-items: center;
  justify-content: center; background: var(--s3-grey); color: var(--s3-navy); }
.arc3-quicktile.is-ai .ic { background: var(--s3-purple-tint); color: var(--s3-purple-ink); }
.arc3-quicktile b { font-size: .89rem; }
.arc3-quicktile span { font-size: .77rem; color: var(--s3-ink-mid); line-height: 1.32; }
.arc3-quicktile.is-soon { cursor: default; }
.arc3-quicktile.is-soon:hover { box-shadow: none; transform: none; }
@media (max-width: 900px) { .arc3-quickrow { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .arc3-quickrow { grid-template-columns: 1fr; } }

/* ── CARD ROWS (opportunities / events / people) ───────────────────────── */
.arc3-hrow { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; }
@media (max-width: 640px) { .arc3-hrow { grid-template-columns: 1fr; } }

.arc3-opp-card { border: 1px solid var(--s3-border); border-radius: 14px; overflow: hidden; display: flex;
  flex-direction: column; background: #fff; }
.arc3-opp-media { height: 96px; display: flex; align-items: center; justify-content: center; color: #fff;
  position: relative; }
.arc3-opp-media svg { opacity: .92; }
.arc3-opp-pill { position: absolute; top: 10px; left: 10px; font-size: .64rem; font-weight: 800; letter-spacing: .04em;
  text-transform: uppercase; padding: 4px 9px; border-radius: 999px; background: #fff; }
.arc3-opp-pill--business { color: var(--s3-purple-ink); background: var(--s3-purple-tint); }
.arc3-opp-pill--work     { color: var(--s3-blue-ink);   background: var(--s3-blue-tint); }
.arc3-opp-pill--student  { color: var(--s3-pink-ink);   background: var(--s3-pink-tint); }
.arc3-opp-pill--collab   { color: var(--teal-ink,#0f766e); background: var(--s3-teal-tint); }
.arc3-opp-pill--other    { color: var(--s3-ink-mid);    background: var(--s3-grey); }
.arc3-opp-body { padding: 13px 15px 15px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.arc3-opp-body b.t { font-size: .92rem; color: var(--s3-ink); }
.arc3-opp-meta { display: flex; align-items: center; gap: 5px; font-size: .78rem; color: var(--s3-ink-mid); }
.arc3-opp-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.arc3-tagpill { font-size: .69rem; font-weight: 700; padding: 3px 9px; border-radius: 999px;
  background: var(--s3-grey); color: var(--s3-ink-mid); }
.arc3-tagpill--live { background: var(--s3-gold-tint); color: var(--gold-ink,#7a5c0c); }
.arc3-opp-cta { margin-top: auto; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  font-size: .82rem; font-weight: 800; padding: 9px 14px; border-radius: 9px; text-decoration: none; }
.arc3-opp-cta--business { background: var(--s3-purple-strong); color: #fff; }
.arc3-opp-cta--work     { background: var(--s3-navy); color: #fff; }
.arc3-opp-cta--student  { background: var(--s3-pink-ink); color: #fff; }
.arc3-opp-cta--collab   { background: var(--teal-ink,#0f766e); color: #fff; }
.arc3-opp-cta--other    { background: var(--s3-navy); color: #fff; }

.arc3-event-card { border: 1px solid var(--s3-border); border-radius: 14px; overflow: hidden; display: flex;
  flex-direction: column; background: #fff; }
.arc3-event-media { height: 96px; position: relative; background: var(--s3-grey); }
.arc3-event-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.arc3-badge { position: absolute; top: 10px; left: 10px; font-size: .64rem; font-weight: 800; letter-spacing: .04em;
  text-transform: uppercase; padding: 4px 9px; border-radius: 999px; }
.arc3-badge--online { background: var(--s3-blue-tint); color: var(--s3-blue-ink); }
.arc3-badge--going  { background: #e7f7ef; color: var(--green-ink,#047857); }
.arc3-event-body { padding: 13px 15px 15px; display: flex; flex-direction: column; gap: 7px; }
.arc3-event-body b.t { font-size: .92rem; color: var(--s3-ink); }
.arc3-event-meta { display: flex; align-items: center; gap: 5px; font-size: .78rem; color: var(--s3-ink-mid); }
.arc3-event-cta { margin-top: 4px; display: inline-flex; align-items: center; gap: 6px; font-size: .82rem;
  font-weight: 800; color: var(--s3-blue-ink); text-decoration: none; }
.arc3-event-cta:hover { text-decoration: underline; }
.arc3-event-list { display: flex; flex-direction: column; gap: 12px; }
.arc3-event-row { display: flex; gap: 12px; align-items: flex-start; }
.arc3-event-datebadge { flex: 0 0 auto; width: 46px; text-align: center; background: var(--s3-grey);
  border-radius: 10px; padding: 6px 4px; }
.arc3-event-datebadge b { display: block; font-size: 1rem; line-height: 1; color: var(--s3-navy); }
.arc3-event-datebadge span { display: block; font-size: .62rem; text-transform: uppercase; color: var(--s3-ink-mid); }

.arc3-person-card { border: 1px solid var(--s3-border); border-radius: 14px; padding: 16px; background: #fff;
  display: flex; flex-direction: column; gap: 10px; }
.arc3-person-card .hd { display: flex; align-items: center; gap: 10px; }
.arc3-person-card .hd b.t { display: block; font-size: .9rem; color: var(--s3-ink); }
.arc3-person-card .hd .role { display: block; font-size: .76rem; color: var(--s3-ink-mid); }
.arc3-reasons { display: flex; flex-direction: column; gap: 5px; }
.arc3-reason { display: flex; align-items: flex-start; gap: 6px; font-size: .78rem; color: var(--s3-ink-mid); }
.arc3-reason svg { flex: 0 0 auto; margin-top: 2px; color: var(--green-ink,#047857); }
/* the HONEST version of a reason row — used where no real matching signal
   exists yet, so nothing invented ("you both work in X") is ever printed. */
.arc3-reason--gap { font-style: italic; }
.arc3-person-cta { margin-top: auto; display: inline-flex; align-items: center; gap: 6px; font-size: .82rem;
  font-weight: 800; color: var(--s3-blue-ink); text-decoration: none; }
.arc3-person-cta:hover { text-decoration: underline; }

/* ── ARC INTELLIGENCE BAND ─────────────────────────────────────────────── */
.arc3-ai-band { background: linear-gradient(135deg, var(--s3-purple-tint), #fff 65%);
  border: 1px solid var(--s3-purple-tint); border-radius: 18px; padding: 26px 28px; }
.arc3-ai-band .ic { width: 40px; height: 40px; border-radius: 11px; background: var(--s3-purple-strong);
  color: #fff; display: flex; align-items: center; justify-content: center; margin-bottom: 12px; }
.arc3-ai-band h2 { margin: 0 0 4px; font-size: 1.15rem; color: var(--s3-ink); }
.arc3-ai-band p.sub { margin: 0 0 16px; color: var(--s3-ink-mid); font-size: .88rem; max-width: 46em; }
.arc3-ai-query { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.arc3-ai-query .q { flex: 1; min-width: 240px; background: #fff; border: 1px solid var(--s3-border);
  border-radius: 999px; padding: 11px 18px; font-size: .86rem; color: var(--s3-ink-mid); font-style: italic; }
.arc3-ai-query .go { display: inline-flex; align-items: center; gap: 7px; background: var(--s3-purple-strong);
  color: #fff; border: 0; border-radius: 999px; padding: 11px 20px; font-weight: 800; font-size: .86rem;
  cursor: default; white-space: nowrap; }

/* ── RIGHT RAIL ─────────────────────────────────────────────────────────── */
.arc3-fac-card .hd { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.arc3-fac-card .hd b.t { display: block; font-size: .95rem; color: var(--s3-ink); }
.arc3-fac-card .hd span { display: block; font-size: .78rem; color: var(--s3-ink-mid); }
.arc3-fac-card .row { display: flex; gap: 10px; margin-top: 12px; flex-wrap: wrap; }
.arc3-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; font-size: .82rem;
  font-weight: 800; padding: 9px 15px; border-radius: 9px; text-decoration: none; border: 1px solid transparent;
  cursor: pointer; flex: 1; min-width: 0; }
.arc3-btn--dark  { background: var(--s3-navy); color: #fff; }
.arc3-btn--ghost { background: #fff; border-color: var(--s3-border); color: var(--s3-ink); }
.arc3-btn--ghost.is-soon, .arc3-btn.is-soon { opacity: .55; cursor: default; }
.arc3-btn--gold  { background: var(--s3-gold); color: var(--s3-navy); }

.arc3-quicklinks { display: flex; flex-direction: column; }
.arc3-qlrow { display: flex; align-items: center; gap: 10px; padding: 9px 0; border-bottom: 1px solid var(--s3-grey-2);
  text-decoration: none; color: var(--s3-ink); font-size: .85rem; }
.arc3-qlrow:last-child { border-bottom: 0; }
.arc3-qlrow .ic { width: 28px; height: 28px; border-radius: 8px; background: var(--s3-grey); display: flex;
  align-items: center; justify-content: center; color: var(--s3-navy); flex: 0 0 auto; }
.arc3-qlrow .val { margin-left: auto; font-weight: 800; color: var(--s3-ink-mid); font-size: .8rem; }
a.arc3-qlrow:hover { color: var(--s3-blue-ink); }

.arc3-promo { position: relative; border-radius: 16px; overflow: hidden; min-height: 150px; display: flex;
  align-items: flex-end; color: #fff; }
.arc3-promo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.arc3-promo::after { content: ""; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(180deg, rgba(11,31,59,.35) 0%, rgba(11,31,59,.82) 100%); }
.arc3-promo-body { position: relative; z-index: 2; padding: 18px; }
.arc3-promo-body p { margin: 0 0 10px; font-family: 'Cormorant Garamond', serif; font-style: italic; font-size: 1.05rem; }
.arc3-promo-body a.arc3-btn--gold { display: inline-flex; }

/* readiness ring, ladder and room — same real data as AVR-001, restyled flat. */
.arc3-ring { position: relative; width: 84px; height: 84px; border-radius: 50%; flex: 0 0 auto;
  background: conic-gradient(var(--green,#059669) calc(var(--seg-1,0) * 1%), var(--s3-grey-2) 0); }
.arc3-ring::after { content: ""; position: absolute; inset: 8px; border-radius: 50%; background: #fff; }
.arc3-ring i { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  font-style: normal; font-weight: 800; font-size: .92rem; color: var(--s3-ink); z-index: 1; }
.arc3-standing-row { display: flex; align-items: center; gap: 16px; }
.arc3-bar { height: 6px; border-radius: 999px; background: var(--s3-grey-2); overflow: hidden; }
.arc3-bar > i { display: block; height: 100%; border-radius: 999px; background: var(--s3-gold); }

/* the four "more from ARC" tiles (learning / projects / community / provider)
   — real regions member-home.html already reads, restyled as light tiles
   rather than AVR-001's saturated gradient cards. */
.arc3-morerow { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
@media (max-width: 900px) { .arc3-morerow { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .arc3-morerow { grid-template-columns: 1fr; } }
.arc3-moretile { border: 1px solid var(--s3-border); border-radius: 14px; padding: 16px; background: #fff; }
.arc3-moretile h3 { margin: 0 0 10px; font-size: .84rem; display: flex; align-items: center; gap: 8px; }
.arc3-moretile h3 a { margin-left: auto; font-size: .74rem; font-weight: 700; color: var(--s3-blue-ink); text-decoration: none; }

/* arena picker (the real setMyLounges() write), restyled as light pills. */
.arc3-pickpills { display: flex; flex-wrap: wrap; gap: 8px; }
.arc3-pickpill { display: inline-flex; align-items: center; gap: 7px; padding: 7px 13px; border-radius: 999px;
  border: 1px solid var(--s3-border); font-size: .82rem; cursor: pointer; background: #fff; color: var(--s3-ink); }
.arc3-pickpill.on { background: var(--s3-navy); border-color: var(--s3-navy); color: #fff; }
.arc3-pickpill input { position: absolute; opacity: 0; width: 1px; height: 1px; }
