/* ============================================================
   contact.css — renders the contact address.

   The address appears NOWHERE in the page markup. It is drawn
   entirely from `content:` on pseudo-elements here, in four
   chunks that are each meaningless alone, with every character
   written as a CSS unicode escape. So:

     • the HTML source contains no address and no at-sign at all;
     • this stylesheet contains no readable substring of it
       either — a harvester would have to fetch the CSS, decode
       the escapes, resolve which rules apply to which element,
       and concatenate them in painted order;
     • generated content is not part of the DOM text, so
       `textContent` / `innerText` scraping comes back empty
       even in a headless browser that ran the CSS.

   The cost, and it is the same cost an image would carry: the
   address cannot be selected or copied, and there is no mailto
   link, because either one would put it back in the document
   for anything to read. A visitor reads it and types it.

   Chunk order is load-bearing — .u before .d, ::before before
   ::after — because that is the only place the full string
   exists. Editing the address means editing all four.
   ============================================================ */

.eaddr {
  font-family: var(--mono);
  font-size: .95em;
  color: var(--ink);
  white-space: nowrap;
  /* Nothing here is selectable anyway; say so rather than letting a
     drag across the paragraph look like it caught the address. */
  user-select: none;
}

.eaddr .u::before { content: "\000061\000064\00006D\000069\00006E"; }
.eaddr .u::after  { content: "\000040"; }
.eaddr .d::before { content: "\000071\000075\000069\00007A\000073\000065\000061\000072\000063\000068\000065\000072"; }
.eaddr .d::after  { content: "\00002E\000063\00006F\00006D"; }
