/* ../tokens/dossier-classified.css */
/*
  dossier-classified — tokens.

  ── The voice ───────────────────────────────────────────────────────────────

  A private investigator's case file, not a Victorian broadsheet. The previous
  pairing led with UnifrakturMaguntia (blackletter), which is the wrong genre:
  blackletter reads as newspaper masthead and occult, while an investigation
  file reads as typewriter carbon, ruled forms, ballpoint annotation and a
  rubber stamp.

  Three faces, each with one job:

    --eac-dos-display    Playfair Display. The subject's name and the section
                         headings. A high-contrast editorial serif — this is
                         the "noir" half, and the only place the page is
                         allowed to be beautiful rather than bureaucratic.
    --eac-dos-typewriter Courier Prime. Everything a typist would have typed:
                         labels, values, notes, captions, metadata.
    --eac-dos-stamp-face Archivo Black. The status stamp and the case number,
                         and nothing else. A stamp is ink pressed through a
                         die, so it is heavy, tight and unapologetic.

  ── The one rule that keeps being broken ────────────────────────────────────

  Every colour here is measured against the surface it is used on. The old
  stamp was `--eac-dos-stamp-red` at `opacity: .8`, which resolves to #a15f5d
  on paper — 4.33:1, passing only because it happened to be large text. Opacity
  is not a colour, so there is no faded variant here: where a lighter red is
  wanted, --eac-dos-stamp-ghost is a real colour with a known ratio.

  Measured against --eac-dos-paper (#f4efe4, L 0.866):

    --eac-dos-ink          19.0:1
    --eac-dos-ink-soft      6.5:1
    --eac-dos-stamp-red     7.3:1
    --eac-dos-ballpoint     9.0:1
    --eac-dos-rule          1.8:1   hairlines only, never text
*/

@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;0,900;1,400;1,700&family=Courier+Prime:ital,wght@0,400;0,700;1,400&family=Archivo+Black&display=swap');

:root {
  /* ── Surfaces: desk → folder → sheet ─────────────────────────────────── */
  /* The stack the old tokens declared and never built. --eac-dos-manila was
     defined from the first commit and used by nothing; the folder is what
     makes the sheet read as a FILE rather than a page with a dark margin. */
  --eac-dos-bg-desk: #14120f;
  --eac-dos-bg-accent: #1e1b16;
  --eac-dos-manila: #d8bd8a;
  --eac-dos-manila-shade: #c2a877;
  --eac-dos-paper: #f4efe4;
  --eac-dos-paper-shade: #e9e2d2;

  /* ── Inks ────────────────────────────────────────────────────────────── */
  --eac-dos-ink: #161310;
  --eac-dos-ink-soft: #5b5347;
  --eac-dos-rule: #b9ae99;
  --eac-dos-rule-soft: #d5cbb6;
  /* The second pen. A file that has been through someone's hands has two
     inks in it — typed black and annotated blue. */
  --eac-dos-ballpoint: #2f3f6b;
  --eac-dos-redact: #14110d;

  /* ── Stamps ──────────────────────────────────────────────────────────── */
  --eac-dos-stamp-red: #8a2f2a;
  --eac-dos-stamp-ghost: #b98a80;
  --eac-dos-stamp-green: #3c5e45;

  /* ── Faces ───────────────────────────────────────────────────────────── */
  --eac-dos-display: 'Playfair Display', 'Libre Caslon Text', Georgia, serif;
  --eac-dos-typewriter: 'Courier Prime', 'Courier New', Courier, monospace;
  --eac-dos-stamp-face: 'Archivo Black', 'Helvetica Neue', Impact, sans-serif;
  /* Retained so Silex pages published against the old token set keep a face
     rather than falling back to the browser default. Do not use in new CSS. */
  --eac-dos-gothic: var(--eac-dos-display);

  /* ── Measure ─────────────────────────────────────────────────────────── */
  --eac-dos-sheet-max: 940px;
  --eac-dos-gap: 2.75rem;
  --eac-dos-border: var(--eac-dos-ink);
}


/* dossier/css/eac-dossier-chrome.css */
/*
  Chrome — the file itself, and the vocabulary every section shares.

  Everything in here is structure the sections assume but none of them owned
  before: the desk/folder/sheet stack, the heading system, the ruled form line,
  the stamp, and the two repeating content shapes (an index of rows, a wall of
  plates). Previously `.eac-dossier-file` existed only as a class name emitted
  by render.ts with its rules living in the ArtDirect route — so a page
  published from Silex got the sections with no file around them.
*/

/* ── Desk → folder → sheet ──────────────────────────────────────────────── */

.eac-dossier-folder {
  background: var(--eac-dos-bg-desk);
  padding: 2.5rem 1.5rem 5rem;
  min-height: 100%;
}

.eac-dossier-file {
  position: relative;
  max-width: var(--eac-dos-sheet-max);
  margin: 0 auto;
  /* The manila folder: a band of card stock the sheet sits on, visible as an
     edge on three sides and as the tab above. */
  background: var(--eac-dos-manila);
  padding: 0 10px 14px;
  border-radius: 2px 6px 2px 2px;
  box-shadow:
    0 1px 0 var(--eac-dos-manila-shade),
    0 26px 60px rgba(0, 0, 0, 0.55);
  font-family: var(--eac-dos-typewriter);
  color: var(--eac-dos-ink);
  line-height: 1.5;
}

/* The index tab. Carries the case number, which is the one piece of pure
   apparatus on the page — it says "this is a file" faster than any wording. */
.eac-dos-tab {
  display: inline-block;
  margin: 0 0 10px 22px;
  padding: 0.5rem 1.7rem 0.55rem;
  /* A shade darker than the folder it sits on, or it is manila on manila and
     reads as nothing but floating text. #161310 on #c2a877 is 7.9:1. */
  background: var(--eac-dos-manila-shade);
  border-radius: 0 0 4px 4px;
  font-family: var(--eac-dos-stamp-face);
  font-size: 0.76rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--eac-dos-ink);
}

.eac-dos-sheet {
  background: var(--eac-dos-paper);
  padding: 3rem 3.25rem 3.5rem;
  border: 1px solid var(--eac-dos-manila-shade);
  /* Faint horizontal fibre — newsprint, not a flat fill. Cheap: one gradient,
     no image request. */
  background-image: repeating-linear-gradient(
    to bottom,
    rgba(22, 19, 16, 0.016) 0 2px,
    transparent 2px 4px
  );
}

@media (max-width: 720px) {
  .eac-dossier-folder { padding: 0 0 3rem; }
  .eac-dossier-file { border-radius: 0; padding: 0 5px 8px; }
  .eac-dos-sheet { padding: 2rem 1.25rem 2.5rem; }
  .eac-dos-tab { margin-left: 12px; }
}

/* ── Headings ───────────────────────────────────────────────────────────── */
/*
  Two parts: a monospace kicker (the bureaucracy) above an editorial serif
  heading (the noir). The kicker is opt-IN via `data-kicker` — the old
  `content: 'SUBJECT FILE: '` fired by DEFAULT and had to be switched off with
  `.eac-dos-title-plain`, which is how two headings ended up reading
  "SUBJECT FILE: ASSOCIATES & INFORMANTS".
*/

.eac-dos-section {
  margin: 0 0 var(--eac-dos-gap);
}

.eac-dos-section:last-child { margin-bottom: 0; }

.eac-dos-section-title {
  font-family: var(--eac-dos-display);
  font-weight: 700;
  font-size: clamp(1.5rem, 1.1rem + 1.6vw, 2.1rem);
  line-height: 1.1;
  letter-spacing: -0.01em;
  text-transform: none;
  color: var(--eac-dos-ink);
  margin: 0 0 1.25rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid var(--eac-dos-ink);
}

.eac-dos-section-title[data-kicker]::before {
  content: attr(data-kicker);
  display: block;
  font-family: var(--eac-dos-typewriter);
  font-weight: 700;
  font-size: 0.7rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
  margin-bottom: 0.45rem;
}

/* Retained: Silex pages published before this rewrite carry the class. It is
   now a no-op, because the prefix it used to suppress is gone. */
.eac-dos-title-plain { }

.eac-dos-count {
  font-family: var(--eac-dos-typewriter);
  font-size: 0.72rem;
  font-weight: 400;
  letter-spacing: 0.12em;
  color: var(--eac-dos-ink-soft);
  float: right;
  padding-top: 0.75rem;
}

/* ── The form line ──────────────────────────────────────────────────────── */
/*
  A ruled blank is how an unfilled field looks on a real form, and it is honest:
  the old template printed "—" for an absent occupation and the literal words
  "Location withheld" for an absent city, on pages where neither had ever been
  entered. A blank rule says "not filled in" without claiming a reason.
*/

.eac-dos-form-row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0 0.75rem;
  margin-bottom: 0.7rem;
  font-size: 0.94rem;
}

.eac-dos-label {
  flex: 0 0 auto;
  width: 8.5rem;
  font-weight: 700;
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
}

.eac-dos-value {
  flex: 1 1 12rem;
  min-width: 0;
  border-bottom: 1px solid var(--eac-dos-rule);
  padding-bottom: 3px;
  color: var(--eac-dos-ink);
}

.eac-dos-value:empty::after,
.eac-dos-value[data-blank]::after {
  content: '';
  display: inline-block;
  min-height: 1.15em;
}

/* An annotation in the second pen. */
.eac-dos-annotation {
  font-family: var(--eac-dos-typewriter);
  color: var(--eac-dos-ballpoint);
}

/* ── Stamps ─────────────────────────────────────────────────────────────── */

.eac-dos-stamp {
  position: absolute;
  top: 1.1rem;
  /* Far enough out to cross the sheet's own margin — a stamp is pressed onto
     a page, it does not sit politely inside the text column. Bounded by the
     sheet padding so it never escapes the folder. */
  right: -2.6rem;
  z-index: 10;
  font-family: var(--eac-dos-stamp-face);
  font-size: clamp(1.05rem, 0.8rem + 1vw, 1.45rem);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  /* A real colour, not an opacity. See the tokens file. */
  color: var(--eac-dos-stamp-red);
  border: 3px double var(--eac-dos-stamp-red);
  padding: 0.3rem 0.9rem;
  transform: rotate(-6deg);
  pointer-events: none;
  background: transparent;
}

.eac-dos-stamp[data-state='claimed'],
.eac-dos-stamp[data-state='verified'] {
  color: var(--eac-dos-stamp-green);
  border-color: var(--eac-dos-stamp-green);
}

@media (max-width: 720px) {
  .eac-dos-stamp {
    position: static;
    display: inline-block;
    transform: rotate(-2deg);
    margin-bottom: 1.25rem;
  }
}

/* ── An index of rows ───────────────────────────────────────────────────── */
/*
  Shared by dispatches, movements, the service record and filed activity. Rows
  in a file are numbered, ruled and dated on the right — the shape is the same
  whether the row is an article, an appearance or a post held somewhere else.
*/

.eac-dos-index {
  list-style: none;
  margin: 0;
  padding: 0;
  counter-reset: dos-row;
}

.eac-dos-row {
  counter-increment: dos-row;
  display: grid;
  grid-template-columns: 2.6rem 1fr auto;
  gap: 0 1rem;
  align-items: baseline;
  padding: 0.85rem 0;
  border-bottom: 1px solid var(--eac-dos-rule-soft);
}

.eac-dos-row:first-child { border-top: 1px solid var(--eac-dos-rule-soft); }

.eac-dos-row::before {
  content: counter(dos-row, decimal-leading-zero);
  font-family: var(--eac-dos-typewriter);
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  color: var(--eac-dos-ink-soft);
}

.eac-dos-row-main { min-width: 0; }

.eac-dos-row-title {
  font-family: var(--eac-dos-display);
  font-size: 1.08rem;
  font-weight: 700;
  line-height: 1.3;
  margin: 0;
}

.eac-dos-row-title a {
  color: var(--eac-dos-ink);
  text-decoration: none;
  border-bottom: 1px solid var(--eac-dos-rule);
}

.eac-dos-row-title a:hover,
.eac-dos-row-title a:focus-visible {
  color: var(--eac-dos-stamp-red);
  border-bottom-color: var(--eac-dos-stamp-red);
}

.eac-dos-row-blurb {
  margin: 0.3rem 0 0;
  font-size: 0.88rem;
  line-height: 1.5;
  color: var(--eac-dos-ink-soft);
}

.eac-dos-row-meta {
  margin: 0.35rem 0 0;
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
  display: flex;
  flex-wrap: wrap;
  gap: 0 0.75rem;
}

.eac-dos-row-stamp {
  font-family: var(--eac-dos-typewriter);
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
  white-space: nowrap;
  text-align: right;
}

.eac-dos-row-flag {
  display: inline-block;
  font-family: var(--eac-dos-stamp-face);
  font-size: 0.6rem;
  letter-spacing: 0.14em;
  color: var(--eac-dos-stamp-red);
  border: 1px solid var(--eac-dos-stamp-red);
  padding: 0 0.35rem;
  vertical-align: 0.1em;
  margin-left: 0.5rem;
}

@media (max-width: 560px) {
  .eac-dos-row {
    grid-template-columns: 2.2rem 1fr;
  }
  .eac-dos-row-stamp {
    grid-column: 2;
    text-align: left;
    margin-top: 0.35rem;
  }
}

/* ── A wall of plates ───────────────────────────────────────────────────── */
/*
  Shared by the work, the galleries and the store.

  The thumbnails stay grayscale: a contact sheet of evidence prints is the
  whole conceit, and a uniform grid is what makes the page read as a file. The
  colour lives one click away — see the lightbox below — so nothing is lost,
  it is just not the first thing. That is the ONE place this template is
  allowed to alter an artist's work, and it is reversible by the viewer.
*/

.eac-dos-plates {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  gap: 1.75rem 1.5rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.eac-dos-plate { margin: 0; min-width: 0; }

.eac-dos-plate-frame {
  display: block;
  position: relative;
  background: #fff;
  padding: 7px;
  border: 1px solid var(--eac-dos-rule);
  box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.18);
  text-decoration: none;
}

.eac-dos-plate-frame img {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  filter: grayscale(100%) contrast(112%);
  transition: filter 0.25s ease;
}

.eac-dos-plate-frame:hover img,
.eac-dos-plate-frame:focus-visible img {
  filter: grayscale(55%) contrast(104%);
}

/* The corner tab that says "print, mounted" rather than "image, cropped". */
.eac-dos-plate-frame::after {
  content: '';
  position: absolute;
  right: -1px;
  bottom: -1px;
  border-width: 0 0 14px 14px;
  border-style: solid;
  border-color: transparent transparent var(--eac-dos-paper-shade) transparent;
}

.eac-dos-plate-caption {
  margin-top: 0.6rem;
  font-family: var(--eac-dos-typewriter);
  font-size: 0.8rem;
  line-height: 1.4;
  color: var(--eac-dos-ink);
}

.eac-dos-plate-caption b {
  display: block;
  font-weight: 700;
}

.eac-dos-plate-ref {
  display: block;
  font-size: 0.68rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
  margin-bottom: 0.15rem;
}

/* ── Lightbox ───────────────────────────────────────────────────────────── */
/*
  `:target` rather than a script, deliberately. This template is rendered three
  ways — server-side into a React page, published static from Silex, and
  previewed inside the Silex canvas — and only one of those is going to run a
  bundle. CSS-only state is the same posture as the pens library.

  The trigger is a real anchor to a real fragment, so the full-size view is
  linkable, survives a reload, and the back button closes it.
*/

.eac-dos-lightbox {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 3vmin;
  background: rgba(12, 10, 8, 0.94);
}

.eac-dos-lightbox:target { display: flex; }

.eac-dos-lightbox img {
  max-width: 100%;
  max-height: 84vh;
  object-fit: contain;
  /* Full colour. The grid is the file; this is the work. */
  filter: none;
  background: #fff;
  padding: 10px;
  box-shadow: 0 20px 70px rgba(0, 0, 0, 0.7);
}

.eac-dos-lightbox-caption {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 1.5rem;
  text-align: center;
  font-family: var(--eac-dos-typewriter);
  font-size: 0.85rem;
  letter-spacing: 0.06em;
  color: var(--eac-dos-paper);
  padding: 0 3vmin;
}

/* Covers the backdrop, so a click anywhere outside the plate closes it. */
.eac-dos-lightbox-close {
  position: absolute;
  inset: 0;
  display: block;
  text-indent: -9999px;
  overflow: hidden;
}

.eac-dos-lightbox-x {
  position: absolute;
  top: 1.25rem;
  right: 1.5rem;
  z-index: 2;
  font-family: var(--eac-dos-stamp-face);
  font-size: 0.75rem;
  letter-spacing: 0.16em;
  color: var(--eac-dos-paper);
  border: 1px solid var(--eac-dos-paper);
  padding: 0.35rem 0.7rem;
  text-decoration: none;
}

.eac-dos-lightbox figure { margin: 0; position: relative; z-index: 1; }

/* ── Buttons ────────────────────────────────────────────────────────────── */

.eac-dos-btn {
  display: inline-block;
  padding: 0.55rem 1.1rem;
  font-family: var(--eac-dos-typewriter);
  font-weight: 700;
  font-size: 0.75rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--eac-dos-ink);
  border: 1.5px solid var(--eac-dos-ink);
  background: transparent;
  transition: background 0.18s, color 0.18s;
}

.eac-dos-btn:hover,
.eac-dos-btn:focus-visible {
  background: var(--eac-dos-ink);
  color: var(--eac-dos-paper);
}

.eac-dos-btn-quiet {
  border-color: var(--eac-dos-rule);
  color: var(--eac-dos-ink-soft);
}

.eac-dos-btn-quiet:hover,
.eac-dos-btn-quiet:focus-visible {
  background: var(--eac-dos-ink-soft);
  color: var(--eac-dos-paper);
}

.eac-dos-empty {
  font-family: var(--eac-dos-typewriter);
  font-size: 0.85rem;
  color: var(--eac-dos-ink-soft);
  border: 1px dashed var(--eac-dos-rule);
  padding: 1rem 1.15rem;
}

:where(.eac-dossier-file) :focus-visible {
  outline: 2px solid var(--eac-dos-ballpoint);
  outline-offset: 2px;
}

/* Visually hidden, still announced. */
.eac-dos-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* ── Owner controls ─────────────────────────────────────────────────────── */
/*
  Only the owner sees this, and it sits ON the folder rather than in the sheet:
  it is about the file, not part of it.
*/

.eac-dos-owner {
  max-width: var(--eac-dos-sheet-max);
  margin: 0 auto 0.75rem;
  font-family: var(--eac-dos-typewriter);
  text-align: right;
}

.eac-dos-owner-toggle {
  font-family: var(--eac-dos-typewriter);
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--eac-dos-manila);
  background: transparent;
  border: 1px solid var(--eac-dos-manila-shade);
  padding: 0.4rem 0.9rem;
  cursor: pointer;
}

.eac-dos-owner-toggle:hover,
.eac-dos-owner-toggle:focus-visible {
  color: var(--eac-dos-bg-desk);
  background: var(--eac-dos-manila);
}

.eac-dos-owner-panel {
  margin-top: 0.6rem;
  padding: 1rem 1.15rem;
  text-align: left;
  background: var(--eac-dos-paper);
  border: 1px solid var(--eac-dos-manila-shade);
}

.eac-dos-owner-row {
  display: flex;
  align-items: flex-start;
  gap: 0.65rem;
  padding: 0.45rem 0;
  cursor: pointer;
  font-size: 0.85rem;
  color: var(--eac-dos-ink);
}

.eac-dos-owner-row input { margin-top: 0.25rem; accent-color: var(--eac-dos-stamp-red); }

.eac-dos-owner-row b {
  display: block;
  font-weight: 700;
}

.eac-dos-owner-row span span {
  display: block;
  font-size: 0.78rem;
  color: var(--eac-dos-ink-soft);
}

.eac-dos-owner-error {
  margin: 0.6rem 0 0;
  font-size: 0.8rem;
  color: var(--eac-dos-stamp-red);
}


/* dossier/css/eac-dossier-nav.css */
/*
  Nav — the archive bar above the file.

  The search field is now a real GET form. It was previously a bare <input>
  with no form, no name and no handler: a control that looked operable, invited
  a query, and swallowed it on every dossier in the directory.
*/

.eac-dossier-nav {
  position: sticky;
  top: 0;
  z-index: 100;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1.5rem;
  padding: 0.9rem 2rem;
  background: var(--eac-dos-bg-desk);
  border-bottom: 1px solid var(--eac-dos-stamp-red);
  font-family: var(--eac-dos-typewriter);
  color: var(--eac-dos-paper);
}

.eac-dossier-nav-brand {
  display: flex;
  align-items: baseline;
  gap: 0.6rem;
  font-family: var(--eac-dos-display);
  font-weight: 700;
  font-size: 1.35rem;
  letter-spacing: 0.01em;
  color: var(--eac-dos-paper);
  text-decoration: none;
}

.eac-dossier-nav-brand::before {
  content: '◆';
  font-family: var(--eac-dos-typewriter);
  font-size: 0.7rem;
  color: var(--eac-dos-stamp-ghost);
}

.eac-dossier-nav-controls {
  display: flex;
  gap: 1.25rem;
  align-items: center;
}

.eac-dossier-nav-search {
  display: flex;
  align-items: stretch;
  border: 1px solid #4a443a;
  background: #1e1b16;
}

.eac-dossier-nav-search input {
  width: 190px;
  padding: 0.42rem 0.75rem;
  border: 0;
  background: transparent;
  color: var(--eac-dos-paper);
  font-family: var(--eac-dos-typewriter);
  font-size: 0.82rem;
}

/* The browser default placeholder grey on #1e1b16 does not clear 4.5:1. */
.eac-dossier-nav-search input::placeholder {
  color: #9c9384;
  opacity: 1;
}

.eac-dossier-nav-search input:focus {
  outline: none;
}

.eac-dossier-nav-search:focus-within {
  border-color: var(--eac-dos-stamp-ghost);
}

.eac-dossier-nav-search button {
  padding: 0 0.8rem;
  border: 0;
  border-left: 1px solid #4a443a;
  background: transparent;
  color: var(--eac-dos-stamp-ghost);
  font-family: var(--eac-dos-typewriter);
  font-size: 0.72rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  cursor: pointer;
}

.eac-dossier-nav-search button:hover {
  color: var(--eac-dos-paper);
}

.eac-dossier-nav-link {
  color: var(--eac-dos-paper);
  text-decoration: none;
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.16em;
  border-bottom: 1px solid transparent;
}

.eac-dossier-nav-link:hover,
.eac-dossier-nav-link:focus-visible {
  border-bottom-color: var(--eac-dos-stamp-ghost);
}

@media (max-width: 720px) {
  .eac-dossier-nav {
    flex-direction: column;
    align-items: stretch;
    gap: 0.85rem;
    padding: 0.9rem 1.25rem;
  }
  .eac-dossier-nav-controls { justify-content: space-between; }
  .eac-dossier-nav-search { flex: 1 1 auto; }
  .eac-dossier-nav-search input { width: 100%; }
}


/* dossier/css/eac-dossier-identity.css */
/*
  Identity — the top of the sheet.

  The portrait keeps the evidence treatment (grayscale, sepia, clipped,
  slightly off-square). That is period-correct for a surveillance photo and it
  is the ONE image on the page that is about the person rather than by them.
  The work does not get the same treatment at full size; see the lightbox.
*/

.eac-dossier-identity {
  position: relative;
  padding-bottom: 2rem;
  margin-bottom: var(--eac-dos-gap);
  border-bottom: 3px double var(--eac-dos-ink);
  font-family: var(--eac-dos-typewriter);
  color: var(--eac-dos-ink);
}

.eac-dos-header-block {
  display: flex;
  align-items: flex-start;
  gap: 2.5rem;
}

.eac-dos-profile-container {
  position: relative;
  flex: 0 0 auto;
  padding-top: 0.5rem;
}

/* The paperclip. */
.eac-dos-profile-container::before {
  content: '';
  position: absolute;
  top: -10px;
  left: 26px;
  width: 15px;
  height: 46px;
  border: 3px solid #8a8375;
  border-radius: 10px;
  z-index: 10;
  box-shadow: 1px 2px 2px rgba(0, 0, 0, 0.22);
}

.eac-dos-profile-pic {
  display: block;
  width: 190px;
  height: 240px;
  object-fit: cover;
  filter: grayscale(100%) contrast(128%) sepia(22%);
  background: #fff;
  padding: 6px;
  border: 1px solid var(--eac-dos-rule);
  transform: rotate(-1.4deg);
  box-shadow: 1px 3px 8px rgba(0, 0, 0, 0.22);
}

.eac-dos-header-content {
  flex: 1 1 auto;
  min-width: 0;
}

.eac-dos-alias-kicker {
  display: block;
  font-family: var(--eac-dos-typewriter);
  font-weight: 700;
  font-size: 0.7rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
  margin-bottom: 0.35rem;
}

.eac-dos-alias {
  font-family: var(--eac-dos-display);
  font-weight: 900;
  font-size: clamp(2rem, 1.3rem + 3vw, 3.1rem);
  line-height: 1.02;
  letter-spacing: -0.02em;
  margin: 0 0 1.4rem;
  color: var(--eac-dos-ink);
}

.eac-dos-alias-sub {
  display: block;
  font-family: var(--eac-dos-display);
  font-style: italic;
  font-weight: 400;
  font-size: 1.05rem;
  letter-spacing: 0;
  color: var(--eac-dos-ink-soft);
  margin-top: 0.4rem;
}

.eac-dos-bio {
  margin-top: 1.6rem;
  padding: 1.1rem 1.25rem;
  background: var(--eac-dos-paper-shade);
  border-left: 3px solid var(--eac-dos-ink);
  font-size: 0.94rem;
  line-height: 1.62;
}

.eac-dos-bio p { margin: 0 0 0.8rem; }
.eac-dos-bio p:last-child { margin-bottom: 0; }

.eac-dos-bio-head {
  display: block;
  font-weight: 700;
  font-size: 0.7rem;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
  margin-bottom: 0.5rem;
}

.eac-dos-actions {
  margin-top: 1.6rem;
  display: flex;
  gap: 0.75rem;
  flex-wrap: wrap;
}

@media (max-width: 720px) {
  .eac-dos-header-block {
    flex-direction: column;
    gap: 1.5rem;
  }
  .eac-dos-profile-pic { width: 160px; height: 200px; }
}


/* dossier/css/eac-dossier-operations.css */
/*
  Known work — the plate wall.

  Almost everything this section needs is the shared `.eac-dos-plates` grid in
  chrome.css. What is left here is only what is specific to the work: the two
  lines of typed apparatus under each plate, and the note when a piece carries
  details the artist actually wrote.

  The old layout was a vertical stack of 150x100 grayscale thumbnails beside
  DATE / DETAILS rows that populate for nobody — `portfolio` only ever holds a
  url and a title, so every card rendered as one line of text next to a
  postage stamp of a painting.
*/

.eac-dossier-operations { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-plate-note {
  margin: 0.3rem 0 0;
  font-size: 0.78rem;
  line-height: 1.5;
  color: var(--eac-dos-ink-soft);
}

/* Retained for Silex pages published against the previous markup. */
.eac-dos-works-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
  gap: 1.75rem 1.5rem;
}

.eac-dos-work-card { display: block; }

.eac-dos-work-img {
  display: block;
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  filter: grayscale(100%) contrast(112%);
  background: #fff;
  padding: 7px;
  border: 1px solid var(--eac-dos-rule);
}

.eac-dos-work-info h3 {
  font-family: var(--eac-dos-display);
  font-size: 1rem;
  font-weight: 700;
  margin: 0.55rem 0 0.15rem;
}

.eac-dos-work-info p {
  font-size: 0.78rem;
  margin: 0 0 0.15rem;
  color: var(--eac-dos-ink-soft);
}


/* dossier/css/eac-dossier-dispatches.css */
/*
  Dispatches — what this person has written.

  Their blog: `threads` of kind 'post' and 'writing' that they authored,
  anywhere on the network. A dossier that shows an artist's work but not their
  words is only half a file, and until now their writing had no place on this
  template at all.

  Structure is the shared `.eac-dos-index` from chrome.css; what is specific
  here is the lead item, which gets its cover and a longer standfirst — a file
  opens with the most recent filing, not with a flat list.
*/

.eac-dossier-dispatches { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-lead {
  display: grid;
  grid-template-columns: minmax(0, 200px) 1fr;
  gap: 1.5rem;
  padding-bottom: 1.35rem;
  margin-bottom: 0.35rem;
  border-bottom: 1px solid var(--eac-dos-ink);
}

.eac-dos-lead-nocover { grid-template-columns: 1fr; }

.eac-dos-lead-cover {
  display: block;
  width: 100%;
  aspect-ratio: 3 / 2;
  object-fit: cover;
  filter: grayscale(100%) contrast(112%);
  background: #fff;
  padding: 6px;
  border: 1px solid var(--eac-dos-rule);
}

.eac-dos-lead-title {
  font-family: var(--eac-dos-display);
  font-weight: 700;
  font-size: clamp(1.15rem, 0.95rem + 0.9vw, 1.5rem);
  line-height: 1.25;
  margin: 0 0 0.45rem;
}

.eac-dos-lead-title a {
  color: var(--eac-dos-ink);
  text-decoration: none;
  border-bottom: 1px solid var(--eac-dos-rule);
}

.eac-dos-lead-title a:hover,
.eac-dos-lead-title a:focus-visible {
  color: var(--eac-dos-stamp-red);
  border-bottom-color: var(--eac-dos-stamp-red);
}

.eac-dos-lead-standfirst {
  margin: 0 0 0.65rem;
  font-size: 0.92rem;
  line-height: 1.6;
  color: var(--eac-dos-ink-soft);
}

@media (max-width: 560px) {
  .eac-dos-lead { grid-template-columns: 1fr; }
}


/* dossier/css/eac-dossier-movements.css */
/*
  Movements — where this person is appearing.

  Dated threads they are hosting: events, meetings, workshops. Upcoming first
  under one heading, then what has already happened under another, because a
  file records both and a visitor wants the first while a researcher wants the
  second.

  Rows are the shared `.eac-dos-index`. The only thing added here is the date
  block in the left margin, which replaces the row number for dated rows — a
  date IS the index on this section.
*/

.eac-dossier-movements { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-movement-group { margin-bottom: 1.75rem; }
.eac-dos-movement-group:last-child { margin-bottom: 0; }

.eac-dos-movement-head {
  display: block;
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
  padding-bottom: 0.4rem;
  margin-bottom: 0.15rem;
  border-bottom: 1px solid var(--eac-dos-rule);
}

.eac-dos-index-dated { counter-reset: none; }

.eac-dos-index-dated .eac-dos-row {
  grid-template-columns: 4.1rem 1fr auto;
}

.eac-dos-index-dated .eac-dos-row::before { content: none; }

.eac-dos-datemark {
  font-family: var(--eac-dos-typewriter);
  font-size: 0.68rem;
  line-height: 1.25;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-align: center;
  color: var(--eac-dos-ink);
  border: 1px solid var(--eac-dos-rule);
  padding: 0.3rem 0.1rem;
  align-self: start;
}

.eac-dos-datemark b {
  display: block;
  font-family: var(--eac-dos-display);
  font-size: 1.25rem;
  font-weight: 900;
  letter-spacing: -0.02em;
  line-height: 1;
  margin: 0.1rem 0;
}

/* Past appearances read as archived, not as errors. */
.eac-dos-movement-past .eac-dos-datemark {
  color: var(--eac-dos-ink-soft);
  border-style: dashed;
}

@media (max-width: 560px) {
  .eac-dos-index-dated .eac-dos-row { grid-template-columns: 3.6rem 1fr; }
}


/* dossier/css/eac-dossier-exhibits.css */
/*
  Exhibits — this person's gallery pages.

  `user_galleries` (migration 124): a person may keep any number of curated
  gallery pages, and until now none of them were reachable from their network
  profile — they existed only on IFAC. A gallery is a room; this section is the
  list of rooms with a plate on each door.
*/

.eac-dossier-exhibits { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-exhibit-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(215px, 1fr));
  gap: 1.5rem;
  list-style: none;
  margin: 0;
  padding: 0;
}

.eac-dos-exhibit {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: var(--eac-dos-ink);
  border: 1px solid var(--eac-dos-rule);
  background: var(--eac-dos-paper-shade);
  transition: border-color 0.18s;
}

.eac-dos-exhibit:hover,
.eac-dos-exhibit:focus-visible { border-color: var(--eac-dos-ink); }

.eac-dos-exhibit-cover {
  display: block;
  width: 100%;
  aspect-ratio: 5 / 3;
  object-fit: cover;
  filter: grayscale(100%) contrast(112%);
}

.eac-dos-exhibit:hover .eac-dos-exhibit-cover { filter: grayscale(55%); }

/* A gallery with no cover still needs a door. */
.eac-dos-exhibit-blank {
  aspect-ratio: 5 / 3;
  display: flex;
  align-items: center;
  justify-content: center;
  background: repeating-linear-gradient(
    -45deg,
    var(--eac-dos-paper) 0 8px,
    var(--eac-dos-paper-shade) 8px 16px
  );
  font-size: 0.68rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
}

.eac-dos-exhibit-body {
  padding: 0.75rem 0.9rem 0.9rem;
  border-top: 1px solid var(--eac-dos-rule);
}

.eac-dos-exhibit-ref {
  display: block;
  font-size: 0.66rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
}

.eac-dos-exhibit-title {
  font-family: var(--eac-dos-display);
  font-size: 1.04rem;
  font-weight: 700;
  line-height: 1.25;
  margin: 0.2rem 0 0;
}

.eac-dos-exhibit-count {
  display: block;
  margin-top: 0.3rem;
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  color: var(--eac-dos-ink-soft);
}


/* dossier/css/eac-dossier-acquisitions.css */
/*
  Acquisitions — work that is for sale.

  A window onto the person's marketplace store, not a checkout: the dossier
  lists what is listed and sends the visitor to the marketplace to buy. Shown
  only when they have an active store AND have switched the section on
  (`users.profile_sections.store`, migration 105) — the same flag every org
  site already reads, so a person turns their store on once.

  Prices are stated plainly. A "classified" treatment that hides the price
  would be the aesthetic eating the function.
*/

.eac-dossier-acquisitions { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-store-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.75rem;
  padding-bottom: 0.8rem;
  margin-bottom: 1.25rem;
  border-bottom: 1px solid var(--eac-dos-rule);
}

.eac-dos-store-name {
  font-family: var(--eac-dos-display);
  font-size: 1.15rem;
  font-weight: 700;
  margin: 0;
}

.eac-dos-price {
  display: block;
  margin-top: 0.25rem;
  font-family: var(--eac-dos-typewriter);
  font-weight: 700;
  font-size: 0.86rem;
  letter-spacing: 0.06em;
  color: var(--eac-dos-ink);
}

.eac-dos-price-sold {
  color: var(--eac-dos-stamp-red);
  text-transform: uppercase;
  letter-spacing: 0.14em;
  font-size: 0.72rem;
}


/* dossier/css/eac-dossier-record.css */
/*
  Service record — the work history.

  Where they have shown, taught, been collected or held a post. Stored as
  `users.oad_dossier.work_history` rather than in a table of its own: it is
  free-form prose per line with no relations to anything, which is exactly what
  that JSONB column is for, and a table would need a migration to hold strings
  nobody queries.

  A ledger rather than an index: years in the left margin, entry in the body,
  ruled the whole way down.
*/

.eac-dossier-record { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-ledger {
  display: grid;
  grid-template-columns: 6.5rem 1fr;
  gap: 0;
  margin: 0;
}

.eac-dos-ledger dt {
  grid-column: 1;
  padding: 0.8rem 1rem 0.8rem 0;
  border-top: 1px solid var(--eac-dos-rule-soft);
  border-right: 1px solid var(--eac-dos-rule);
  font-size: 0.75rem;
  letter-spacing: 0.1em;
  color: var(--eac-dos-ink-soft);
  white-space: nowrap;
}

.eac-dos-ledger dd {
  grid-column: 2;
  margin: 0;
  padding: 0.8rem 0 0.8rem 1.15rem;
  border-top: 1px solid var(--eac-dos-rule-soft);
}

.eac-dos-ledger-role {
  font-family: var(--eac-dos-display);
  font-size: 1.02rem;
  font-weight: 700;
  line-height: 1.3;
  display: block;
}

.eac-dos-ledger-where {
  display: block;
  font-size: 0.8rem;
  letter-spacing: 0.06em;
  color: var(--eac-dos-ink-soft);
  margin-top: 0.1rem;
}

.eac-dos-ledger-detail {
  margin: 0.35rem 0 0;
  font-size: 0.86rem;
  line-height: 1.55;
  color: var(--eac-dos-ink-soft);
}

@media (max-width: 560px) {
  .eac-dos-ledger { grid-template-columns: 1fr; }
  .eac-dos-ledger dt {
    border-right: 0;
    padding-bottom: 0;
    border-top: 1px solid var(--eac-dos-rule);
  }
  .eac-dos-ledger dd {
    border-top: 0;
    padding: 0.35rem 0 0.8rem;
  }
}


/* dossier/css/eac-dossier-intelligence.css */
/*
  Intelligence — what they are working on and what is coming.

  Two columns on a wide sheet rather than one long stack: these are short
  lists, and side by side they read as a form's two halves.
*/

.eac-dossier-intelligence { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-status-layout {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 2rem;
}

.eac-dos-status-head {
  display: block;
  font-weight: 700;
  font-size: 0.7rem;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
  padding-bottom: 0.4rem;
  margin-bottom: 0.65rem;
  border-bottom: 1px solid var(--eac-dos-rule);
}

.eac-dos-status-list {
  list-style: none;
  padding: 0;
  margin: 0;
}

.eac-dos-status-list li {
  position: relative;
  padding: 0.35rem 0 0.35rem 1.4rem;
  font-size: 0.9rem;
  line-height: 1.55;
}

.eac-dos-status-list li::before {
  content: '›';
  position: absolute;
  left: 0.15rem;
  top: 0.32rem;
  font-weight: 700;
  color: var(--eac-dos-stamp-red);
}


/* dossier/css/eac-dossier-network.css */
/*
  Associates — who they work with, and who they are looking for.

  Solid tag = confirmed. Dashed tag = wanted. The distinction was already
  right; what it lacked was a legible weight and a hit area when the tag is a
  link, which it now is on the activity section.
*/

.eac-dossier-network { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-network-block { margin-bottom: 1.5rem; }
.eac-dos-network-block:last-child { margin-bottom: 0; }

.eac-dos-network-sub {
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
  margin: 0 0 0.6rem;
}

.eac-dos-tags-container {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.eac-dos-tag {
  display: inline-block;
  border: 1px solid var(--eac-dos-ink);
  padding: 0.3rem 0.7rem;
  font-family: var(--eac-dos-typewriter);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--eac-dos-ink);
  background: var(--eac-dos-paper-shade);
  text-decoration: none;
}

a.eac-dos-tag:hover,
a.eac-dos-tag:focus-visible {
  background: var(--eac-dos-ink);
  color: var(--eac-dos-paper);
}

.eac-dos-tag-wanted {
  border-style: dashed;
  border-color: var(--eac-dos-ink-soft);
  color: var(--eac-dos-ink-soft);
  background: transparent;
  font-weight: 400;
}


/* dossier/css/eac-dossier-channels.css */
/*
  Known addresses — where else this person exists.

  This is the section that fixes the template's worst content bug. Every
  profile's `social_links` were being rendered under the heading FINANCIAL
  CHANNELS, with template copy reading "COVERT FUNDING (PATREON)". On the live
  directory that meant E.J. Gold's page listed ejgold.com, Facebook, YouTube
  and Pinterest as ways to send him money.

  A link to a website is a known address. Money is a different section, and it
  now only renders when something in it is actually about money — see
  eac-dossier-funds.css.
*/

.eac-dossier-channels { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-channel-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  gap: 0.6rem 1.5rem;
  list-style: none;
  margin: 0;
  padding: 0;
}

.eac-dos-channel {
  display: flex;
  align-items: baseline;
  gap: 0.6rem;
  padding: 0.45rem 0;
  border-bottom: 1px solid var(--eac-dos-rule-soft);
  font-size: 0.88rem;
}

.eac-dos-channel-label {
  flex: 0 0 auto;
  font-size: 0.68rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
}

.eac-dos-channel a {
  color: var(--eac-dos-ballpoint);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  overflow-wrap: anywhere;
}

.eac-dos-channel a:hover,
.eac-dos-channel a:focus-visible {
  color: var(--eac-dos-stamp-red);
}


/* dossier/css/eac-dossier-funds.css */
/*
  Support — the money.

  Only rendered when the person has entered something that is actually about
  money (a shop, a commission page, a patronage link). Plain social and
  website links go to the channels section instead.
*/

.eac-dossier-funds { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-support-grid {
  display: grid;
  gap: 0.75rem;
}

.eac-dos-support-card {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  padding: 0.95rem 1.15rem;
  border: 1.5px solid var(--eac-dos-ink);
  background: var(--eac-dos-paper-shade);
  color: var(--eac-dos-ink);
  text-decoration: none;
  transition: background 0.18s, color 0.18s;
}

.eac-dos-support-card:hover,
.eac-dos-support-card:focus-visible {
  background: var(--eac-dos-ink);
  color: var(--eac-dos-paper);
}

.eac-dos-support-info {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  min-width: 0;
}

.eac-dos-support-info strong {
  font-family: var(--eac-dos-display);
  font-size: 1.05rem;
  font-weight: 700;
}

.eac-dos-support-info span {
  font-size: 0.78rem;
  letter-spacing: 0.06em;
}

.eac-dos-support-arrow {
  flex: 0 0 auto;
  font-family: var(--eac-dos-typewriter);
  font-size: 1.2rem;
}


/* dossier/css/eac-dossier-activity.css */
/*
  Filed activity — where this person operates across the network.

  This section existed before as a React component that borrowed the network
  section's classes and was rendered OUTSIDE the file, directly on the desk. It
  inherited `color: var(--eac-dos-ink)` — #161310 on #14120f — so the whole
  thing rendered at about 1.07:1 and was invisible on every dossier in the
  directory. It now lives inside the sheet and owns its own rules.
*/

.eac-dossier-activity { font-family: var(--eac-dos-typewriter); color: var(--eac-dos-ink); }

.eac-dos-activity-orgs { margin-bottom: 1.5rem; }

.eac-dos-org-block {
  margin-bottom: 1.4rem;
  padding-left: 0.9rem;
  border-left: 2px solid var(--eac-dos-rule);
}

.eac-dos-org-block:last-child { margin-bottom: 0; }

.eac-dos-org-name {
  font-family: var(--eac-dos-display);
  font-size: 1rem;
  font-weight: 700;
  letter-spacing: 0;
  margin: 0 0 0.5rem;
}

.eac-dos-org-name a {
  color: var(--eac-dos-ink);
  text-decoration: none;
  border-bottom: 1px solid var(--eac-dos-rule);
}

.eac-dos-org-name a:hover,
.eac-dos-org-name a:focus-visible {
  color: var(--eac-dos-stamp-red);
  border-bottom-color: var(--eac-dos-stamp-red);
}

.eac-dos-filings {
  list-style: none;
  margin: 0;
  padding: 0;
}

.eac-dos-filings li {
  display: flex;
  flex-wrap: wrap;
  gap: 0 0.6rem;
  align-items: baseline;
  padding: 0.28rem 0;
  font-size: 0.86rem;
  line-height: 1.5;
}

.eac-dos-filings li::before {
  content: '·';
  color: var(--eac-dos-ink-soft);
}

.eac-dos-filing-date {
  font-size: 0.7rem;
  letter-spacing: 0.1em;
  color: var(--eac-dos-ink-soft);
  margin-left: auto;
  white-space: nowrap;
}

.eac-dos-tally {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
  padding-top: 1rem;
  margin-top: 1.25rem;
  border-top: 1px solid var(--eac-dos-rule);
}

.eac-dos-tally div {
  font-size: 0.68rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--eac-dos-ink-soft);
}

.eac-dos-tally b {
  display: block;
  font-family: var(--eac-dos-display);
  font-size: 1.5rem;
  font-weight: 900;
  letter-spacing: -0.02em;
  color: var(--eac-dos-ink);
}


/* artdirect host */
html, body { margin: 0; background: var(--eac-dos-bg-desk, #14120f); }