/* =====================================================================
   wc-crt.css  --  "Manic Modem CRT" theme for WinServer 10 web client
   ---------------------------------------------------------------------
   Manic Modem BBS                                  created 2026-09-17

   WHAT THIS IS
   A phosphor-CRT reskin that restyles the STOCK WinServer class names.
   No stock template or stylesheet is modified. This file is pulled in
   by http\template\YourBizHeader.htm, which is an optional slot that
   pageheader.inc already checks for (lines 171-173) -- so there is
   nothing to re-merge when WinServer is updated.

   WHY IT LIVES IN http\public\css\
   Two reasons:
     1. Browsers can only fetch assets from the /public tree before a
        login completes. Everything outside /public forces auth.
     2. Files pulled in with @include are run through the WCT macro
        processor, and WCT delimits macros with @...@ -- which would
        collide with CSS @import / @media / @keyframes. A <link> tag
        fetches this file directly, so CSS @-rules are safe here.

   LOAD ORDER
   pageheader.inc is included INSIDE <body>, after the stock
   <link> tags in <head>. So these rules land later in source order and
   win at equal specificity. No !important needed except where the stock
   templates use inline style="" attributes.

   EDITING
   Change the tokens in the :root block below; everything derives from
   them. To back the theme out entirely, delete or rename
   http\template\YourBizHeader.htm -- the stock look returns instantly.
   ===================================================================== */

:root{
  --r-box:  6px;   /* containers: cards, panels, dialogs */
  --r-ctl:  3px;   /* controls: buttons, inputs, chips, tabs, scrollbar thumbs */
  --r-pill: 999px; /* status badges only */
  /* ground -- neutrals carry a green bias so panels read as part of the
     phosphor world rather than generic dark-mode grey */
  --void:       #070b09;
  --panel:      #0d1411;
  --panel-2:    #121b17;
  --panel-3:    #16211c;
  --rule:       #1c2b24;
  --rule-lit:   #274034;

  /* phosphor -- pulled back from the classic #00ff41, which vibrates
     against near-black and is unpleasant to read a message thread in */
  --phosphor:      #4df08a;
  --phosphor-dim:  #2a9d5c;
  --phosphor-deep: #1b6b3d;

  /* amber is the second phosphor: attention only. it is the one hue
     allowed to compete with the green */
  --amber:     #ffb454;
  --amber-dim: #a8732c;
  --alert:     #ff6b5e;
  --gutter:    16px;     /* one left/right inset for every pane, list and banner */

  --text:       #b9d6c6;
  --text-dim:   #6d8a7c;
  --text-faint: #3f574c;

  --glow:       0 0 6px rgba(77,240,138,.30);
  --glow-amber: 0 0 6px rgba(255,180,84,.30);

  /* System stacks, deliberately. WinServer sends a Content-Security-Policy
     of default-src 'self', which blocks webfonts from Google Fonts or any
     other external host -- the request fails silently and you get the
     fallback anyway. These stacks resolve to Cascadia Mono or Consolas on
     Windows and SF Mono on macOS, which are good faces and cost no request.
     To use a webfont, self-host it: drop the .woff2 under
     http\public\fonts\ and add an @font-face here pointing at
     /public/fonts/... -- same-origin, so CSP allows it. */
  --mono: ui-monospace, "Cascadia Mono", "Cascadia Code", Consolas,
          "SFMono-Regular", Menlo, "DejaVu Sans Mono", monospace;
  --sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI",
          Roboto, "Helvetica Neue", Arial, sans-serif;
}

/* ---------------------------------------------------------------
   1. base -- stock sets body/td/h1-h3 to black-on-white explicitly,
      so each one has to be answered explicitly here
   --------------------------------------------------------------- */

html, body{
  background: var(--void);
  color: var(--text);
  font-family: var(--mono);
  font-size: 13px;
  line-height: 1.6;
  margin: 0;
  padding: 0;
  /* wc-crt-standalone.css gives body a centred 720px card
     (max-width:720px; margin:0 auto). The forced-login page --
     errors\custom\NotLoggedIn.htm, what you get hitting any private URL
     while logged out -- links that sheet in <head> and then pulls in the
     login form, which links THIS sheet later in <body>. Later, equal
     specificity: the margin:0 above wins, the max-width has nothing to
     answer it, so a 720px column sits pinned to the left of the viewport
     and the login card centres inside that instead of on screen.
     Answer the max-width too. */
  max-width: none;
  -webkit-font-smoothing: antialiased;
}

td, th, tr, div, span, p, li, dd, dt, label{
  color: var(--text);
  font-family: var(--mono);
}

/* ...but never inside preformatted text.

   The rule above exists to drag stock markup onto the theme font, and
   `span` is in the list because stock templates wrap half their text in
   one. The door score boards are preformatted ANSI: the converter emits
   the board inside a <pre> and colours it with a <span> per attribute
   run. Those spans matched the rule, so every board rendered in a
   PROPORTIONAL font -- the <pre> kept its monospace stack, but nothing
   inside it did, and a fixed-column layout in a proportional font lines
   up nowhere.

   It looked like the doors had written sloppy bulletins. They had not:
   bordelo's source puts every "$" at column 39 and the converter
   reproduces all ten of them at column 39. The damage was here.

   `inherit` rather than a font stack on purpose -- whatever the <pre>
   is set to should win, which lets the converter keep choosing its own
   stack (DOORS\*.html ships one in its <style>) without this sheet
   having to agree with it. `pre` itself is not in the list above, so it
   keeps its monospace and there is nothing to undo there.

   Same hazard for any other preformatted thing the theme meets -- a
   message body, a file_id.diz, a log dump. */
pre *{
  font-family: inherit;
}

h1, h2, h3, h4{
  font-family: var(--mono);
  font-weight: 600;
  color: var(--phosphor);
  text-shadow: var(--glow);
  margin: .6em 0 .4em;
}
h1{ font-size: 20px; }
h2{ font-size: 17px; }
h3{ font-size: 15px; }
h1.negro{ background: transparent; color: var(--phosphor); }

a{ color: var(--phosphor-dim); text-decoration: none; }
a:hover{ color: var(--phosphor); text-decoration: underline; }
a:focus-visible{ outline: 2px solid var(--amber); outline-offset: 2px; }

hr{ border: 0; border-top: 1px solid var(--rule); margin: 12px 0; }

/* the wrapper div pageheader.inc puts this theme inside -- it must not
   introduce a box of its own */
#YourBizHeader{ display: contents; }

/* frames: the gaps between framesets default to white */
frameset, frame{ border-color: var(--rule) !important; }
.frames{ border-color: var(--rule) !important; }
.bar{ background-color: var(--phosphor-deep); }

/* Scrollbars. Several of these panes scroll (the area list container is
   overflow:auto), and a default light scrollbar is very loud against the
   void. Firefox uses scrollbar-color; Chromium uses the ::-webkit rules. */
*{
  scrollbar-width: thin;
  scrollbar-color: var(--rule-lit) var(--void);
}
::-webkit-scrollbar{ width: 10px; height: 10px; }
::-webkit-scrollbar-track{ background: var(--void); }
::-webkit-scrollbar-corner{ background: var(--void); }
::-webkit-scrollbar-thumb{
  background: var(--rule-lit);
  border-radius: var(--r-ctl);
  border: 2px solid var(--void);
}
::-webkit-scrollbar-thumb:hover{ background: var(--phosphor-deep); }

/* ---------------------------------------------------------------
   2. form controls -- stock never styles these, so without this block
      every input renders as a white box on the dark ground
   --------------------------------------------------------------- */

input, select, textarea, button{
  font-family: var(--mono);
  font-size: 13px;
  color: var(--phosphor);
  background: var(--void);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-ctl);
  padding: 6px 9px;
}
input::placeholder, textarea::placeholder{ color: var(--text-faint); }
input:focus, select:focus, textarea:focus{
  outline: none;
  border-color: var(--phosphor-dim);
  box-shadow: 0 0 0 2px rgba(77,240,138,.14);
}
input[type="checkbox"], input[type="radio"]{
  accent-color: var(--phosphor-dim);
  padding: 0;
}
input[type="submit"], input[type="button"], input[type="reset"], button{
  cursor: pointer;
  color: var(--phosphor);
  background: var(--panel-2);
  font-weight: 500;
  letter-spacing: .04em;
}
input[type="submit"]:hover, input[type="button"]:hover,
input[type="reset"]:hover, button:hover{
  background: var(--phosphor-deep);
  border-color: var(--phosphor-dim);
  color: #eafff2;
}
input[type="file"]{ color: var(--text-dim); background: transparent; border: 0; padding: 0; }

/* ---------------------------------------------------------------
   3. pageheader.inc
   --------------------------------------------------------------- */

.pageheaderBar{
  width: 100%;
  border: 0;
  border-bottom: 1px solid var(--rule);
  border-collapse: collapse;

  /* Metrics, so the bar measures the same in both rendering modes.

     html,body above sets 13px/1.6. A stock client page has no DOCTYPE
     and renders in quirks mode, where a table does not inherit font
     properties from body at all -- the bar starts fresh at 16px and
     line-height:normal, which is what these two declarations restate.
     On a page that HAS a DOCTYPE the bar inherits instead, and the
     unitless 1.6 comes down as a RATIO: the 10px header chips resolve
     to a 16px line box and the row renders 28px tall against 23px on
     every stock page.

     Measured on /client?who.wcn (quirks): 16px / normal. So writing
     them explicitly changes nothing there and lines up every
     standards-mode page that includes pageheader.inc --
     public\telnet\default.wct and DOORS\highscores.wct today.

     Do not fold these into the block above as shorthand; the point is
     that they are the quirks-mode defaults, stated. */
  font-size: 16px;
  line-height: normal;
  background: var(--void);
}
.pageheaderBar td, .pageheaderBar th{ padding: 9px 12px; vertical-align: middle; }

.pageheaderTitle{
  font-family: var(--mono);
  font-weight: 600;
  font-size: 15px;
  color: var(--phosphor);
  text-shadow: var(--glow);
  background: transparent;
  text-decoration: none;
}
/* Rule 1: the bar carries the mark beside the name, like every other
   masthead. td only - the stock <tr> shares the class name. Same data
   URI as .crt-mark; master artwork in http\public\graphics. */
td.pageheaderTitle::before{
  content: "";
  display: inline-block;
  width: 22px;
  height: 19px;
  margin-right: 9px;
  vertical-align: -4px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 99 84'%3E%3Cpath d='M37.5,0L54.5,30.4L64,15.3L93.3,64.1L72.6,64.1L62.2,47.7L52.5,64.1L0,64.1Z' fill='%231b6b3d'/%3E%3Cpath d='M42.5,19L59.5,49.4L69,34.3L98.3,83.1L77.6,83.1L67.2,66.7L57.5,83.1L5,83.1Z' fill='%234df08a'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
  filter: drop-shadow(0 0 4px rgba(77,240,138,.28));
}
/* NOTE THE CAPITAL H IN pageHeaderGotoMenu. pageheadermenu.inc emits
   class="pageHeaderGotoMenu" -- it is the one class in the whole
   page header that is not all-lowercase after "page". Every stock
   client page ships without a DOCTYPE and so renders in quirks mode,
   where class selectors match case-INsensitively (constraint 3 in
   THEME.md section 5), which is why the lowercase spelling alone has
   always appeared to work.

   It stops working the moment the header is included on a page that
   HAS a DOCTYPE. public\telnet\default.wct is the first such page:
   standards mode, case-sensitive matching, so the select fell through
   to the generic input/select/textarea/button rule and rendered 13px
   instead of 11px. Both spellings are listed so the rule holds in
   either mode. Do not "tidy" the duplicate away.

   The other six header classes are genuinely lowercase and need no
   twin -- verified against pageheader.inc and pageheadermenu.inc. */
.pageheaderUserInfo, .pageheaderGotoMenu, .pageHeaderGotoMenu{
  font-family: var(--mono);
  font-size: 11px;
  color: var(--text-dim);
  background: transparent;
  font-weight: 400;
}
.pageheaderTime{
  font-family: var(--mono);
  font-size: 11px;
  color: var(--text-faint);
  background: transparent;
  font-weight: 400;
}
.pageheaderEvent{
  font-family: var(--mono);
  font-size: 11px;
  color: var(--amber);
  text-shadow: var(--glow-amber);
  background: transparent;
}
/* Rule 3: the system event is a chip hanging from the bar, not a second
   band under it. Still a table cell in stock markup; inline-block is
   enough to stop it spanning. */
.pageheaderEvent td{
  display: inline-block;
  margin: 0 0 8px 12px;
  padding: 1px 10px;
  border: 1px solid rgba(255,180,84,.45);
  border-radius: var(--r-pill);
  font-size: 10.5px;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: var(--amber);
}

/* Rule 3, the other half: a notice the theme itself raises sits INSIDE the
   title cell as a chip. Drawn by YourBizHeader.htm when NewMail is set. */
.crt-chip{
  display: inline-block;
  margin-left: 12px;
  padding: 1px 9px;
  vertical-align: 2px;
  font: 600 10px var(--mono);
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--amber);
  border: 1px solid rgba(255,180,84,.45);
  border-radius: var(--r-pill);
  text-decoration: none;
  text-shadow: none;
}
.crt-chip:hover{ color: var(--void); background: var(--amber); border-color: var(--amber); text-decoration: none; }

#pageheaderBreak{ display: none; }
#pageGoto, #pageGotoItem{
  border: 1px solid var(--rule-lit);
  background: var(--panel-2);
  color: var(--text);
  border-radius: var(--r-ctl);
}

/* ---------------------------------------------------------------
   4. buttons -- .pagebutton and .pageheaderButton a
      stock uses 2px outset/inset bevels; replaced with a flat chip
   --------------------------------------------------------------- */

.pagebutton,
.pageheaderButton a{
  display: inline-block;
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .04em;
  color: var(--phosphor);
  background: var(--panel-2);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-ctl);
  padding: 5px 11px;
  text-decoration: none;
  white-space: nowrap;
  transition: background .12s ease, border-color .12s ease, color .12s ease;
}
/* NOTE -- the stock sheets restate the WHOLE property set in their :hover
   rules (templates.css .pagebutton:hover and .pageheaderButton a:hover both
   set font-family Arial, font-size 8pt, font-weight Bold, and the latter
   also border: 2px inset). Those hover selectors are (0,2,0) / (0,3,1) and
   beat the base rules above, so any property NOT restated here reverts on
   hover -- the type would swap to Arial 8pt and the border would jump to
   2px inset. Every hover rule in this file therefore repeats the full
   typographic and box set, not just the colours. */
.pagebutton:hover,
.pageheaderButton a:hover{
  background: var(--phosphor-deep);
  color: #eafff2;
  text-shadow: var(--glow);
  text-decoration: none;
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .04em;
  border: 1px solid var(--phosphor-dim);
  border-radius: var(--r-ctl);
  padding: 5px 11px;
}
.pageheaderButton td{ background: transparent; color: var(--text); padding: 6px 4px; }
.fdisabled{
  background: var(--panel-2);
  color: var(--text-faint);
  border: 1px solid var(--rule);
  border-radius: var(--r-ctl);
  font-family: var(--mono);
  font-size: 11px;
}

/* ---------------------------------------------------------------
   5. list tables -- message index, file lists, conference lists
   --------------------------------------------------------------- */

.tablelist, .msglisttable, .msglistbuttons, .uploadTable, .fileinfoTable{
  /* stock gives these width="96%" inside <center>: 2% gutters, the same
     ones the Who table keeps. 100% here had the message and file lists
     touching the frame edges while Who did not - John, 2026-09-20. */
  width: calc(100% - 2 * var(--gutter));
  margin: 0 var(--gutter);
  border: 0;
  border-collapse: collapse;
  background: transparent;
}


/* ONE GUTTER. Stock lays every client page out in width="96%" tables,
   centred, so the inset was 2% of whatever the container was: 22px on
   a full page, 6px in the 320px areas frame, and the sysop pane was
   not even centred. John counted three different margins on the same
   banner. --gutter is the one inset: the 96% tables that are direct
   children of the page, the Who table, the list tables above, the
   sysop/personal pane and the high-scores wrap all use it. */
:is(body, center, #layoutMain) > table[width="96%"], table.whoTable{
  width: calc(100% - 2 * var(--gutter));
  margin-left: var(--gutter);
  margin-right: var(--gutter);
}
.hsWrap{ padding: 2px var(--gutter) 32px; }
.tabletitle, .msglisthdr, .inboxheader{
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .09em;
  text-transform: uppercase;
  text-align: left;
  color: var(--phosphor-dim);
  background: var(--void);
  border-bottom: 1px solid var(--rule-lit);
  padding: 8px 12px;
  white-space: nowrap;
}

.msglist, .msglisth, .msglisthdr1, .msgback, .shade1, .threadparent{
  font-family: var(--mono);
  font-size: 12px;
  color: var(--text);
  background: transparent;
  border-bottom: 1px solid var(--rule);
  padding: 8px 12px;
  vertical-align: top;
}
.msglistl, .shade2, .threadchild, .msgconfname2{
  font-family: var(--mono);
  font-size: 12px;
  color: var(--text);
  background: var(--panel-2);
  border-bottom: 1px solid var(--rule);
  padding: 8px 12px;
  vertical-align: top;
}
.threadtable{ background: var(--panel); font-family: var(--mono); font-size: 12px; color: var(--text); }

tr:hover > .msglist,
tr:hover > .msglistl,
tr:hover > .shade1,
tr:hover > .shade2{ background: var(--panel-3); }

/* THE INBOX USES DIFFERENT CLASS NAMES.
   The rules above cover the conference message index. HTML-INBOX is a
   separate WCX and emits its own vocabulary -- msglistrow / msglistrowl /
   msglistrowh on the <tr>, msglistcol on the <td> -- together with its own
   inline <style> block:

     .msglistrow, .msglistrowl { background:#EEEEEE; color:Black }
     .msglistrowh              { background:silver }

   .msglistcol was already transparent here, so that #EEEEEE showed through
   every cell: a light grey band straight across each message row. The fill
   is on the <tr>, so it has to be answered on the <tr>.

   !important IS REQUIRED, and not because of specificity. The inbox also
   ships:

     function mailListHover(ob,evt){
       if (evt.type=="mouseover") ob.style.background = "yellow";
       if (evt.type=="mouseout")  ob.style.background = "";
     }

   ...wired to onmouseover/onmouseout on every row. That writes an INLINE
   background, which outranks any stylesheet rule at any specificity, so
   pointing at a message flashed it bright yellow. An !important author
   declaration is the one thing that does outrank an inline style. The
   hover affordance is then given back below, on the cells. */
tr.msglistrow, tr.msglistrowl, tr.msglistrowh{
  background: transparent !important;
  border-bottom: 1px solid var(--rule);
}
tr.msglistrowl > .msglistcol{ background: var(--panel-2); }
/* stock paints the "h" row silver -- it is the highlighted/current row */
tr.msglistrowh > .msglistcol{ background: var(--panel-3); color: var(--phosphor); }

tr.msglistrow:hover  > .msglistcol,
tr.msglistrowl:hover > .msglistcol,
tr.msglistrowh:hover > .msglistcol{ background: var(--panel-3); }

.msglistpvt{
  font-family: var(--mono);
  font-size: 12px;
  color: var(--alert);
  background: transparent;
  border-bottom: 1px solid var(--rule);
  padding: 8px 12px;
}
/* Position marker in the message list ("No New Messages", last-read line).
   Stock paints it solid red; it is a divider, not an alert, and it spans the
   full table width -- a solid fill reads as a warning slab. Tinted band with
   hairlines instead. */
.msglistmarker{
  background: rgba(255,180,84,.09);
  color: var(--amber);
  border-top: 1px solid var(--amber-dim);
  border-bottom: 1px solid var(--amber-dim);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .1em;
  text-transform: uppercase;
  text-align: center;
  padding: 5px 8px;
}
.msglistmarker b{ color: var(--amber); font-weight: 500; }

/* The inbox and message lists: stock marks every cell nowrap and gives the
   subject cell width="55%", so one long subject pushes the 96% table past
   the frame and it scrolls sideways, touching both edges - while Who, with
   short cells, keeps its 2% gutters. Only the subject wraps, and its 55%
   hint is dropped so it takes what is left after the short columns; the
   date and the address columns keep the stock nowrap - an address is
   never split. (Letting the addresses wrap, tried first, either broke
   them mid-word or grew the table again; 2026-09-20.) The id repeats per
   row in stock markup - invalid HTML, fine as a selector. */
body td#msglistIcons{
  white-space: normal;
  overflow-wrap: anywhere;
  width: auto;
}
.msgconfname, .msggroup{ font-family: var(--mono); font-weight: 600; color: var(--text); font-size: 12px; }

/* Selected group / conference.
   Stock marks the active group with .msggroup2 and paints it gray. Show it
   as brighter and heavier type instead of a filled block -- same for
   .msgconfname2. No background, so the list stays on the void. */
.msggroup2, .msgconfname2{
  font-family: var(--mono);
  font-size: 12px;
  font-weight: 700;
  background: transparent;
  color: var(--phosphor);
  text-shadow: var(--glow);
}
.msggroup2 a, .msgconfname2 a{ color: var(--phosphor); font-weight: 700; }

/* The group links in the conference list get focus after you click one, and
   a 2px amber outline there reads as a painted selection box. In THIS list
   the indicator is weight + brightness instead. Both :focus and
   :focus-visible are matched, so it also shows after a mouse click, which is
   what actually communicates "this group is open" -- the template does not
   mark the expanded group with a class of its own.

   The amber ring is kept everywhere else (buttons, toolbar items, form
   controls) where a type change alone would not be a clear focus signal. */
.msggroup a:focus,
.msggroup a:focus-visible,
.msgconfname a:focus,
.msgconfname a:focus-visible,
.areaListDivider a:focus,
.areaListDivider a:focus-visible{
  outline: none;
  color: var(--phosphor);
  font-weight: 700;
  text-shadow: var(--glow);
}
.msgconfnum, .msgmainmenu{ font-family: var(--mono); font-size: 11px; color: var(--text-dim); }
.msgcount{
  font-family: var(--mono); font-size: 12px;
  text-align: right;
  font-variant-numeric: tabular-nums;
  color: var(--text-dim);
}
td.inboxTitle{ color: var(--phosphor); font-family: var(--mono); }
.inboxbreak{
  background: var(--void);
  color: var(--phosphor-dim);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .09em;
  text-transform: uppercase;
  text-align: center;
  padding: 6px;
  border-top: 1px solid var(--rule);
  border-bottom: 1px solid var(--rule);
}

/* ---------------------------------------------------------------
   6. message read / compose
   --------------------------------------------------------------- */

.msghead, .msgheadp, .msgheadmenu{
  font-family: var(--mono);
  font-size: 12px;
  background: var(--void);
  color: var(--text-dim);
  padding: 9px 12px;
  border-bottom: 1px solid var(--rule);
  font-weight: 400;
}
.msgheadp{ text-align: right; color: var(--phosphor-dim); }
.msgbody, .messagebody{
  font-family: var(--sans);
  font-size: 13px;
  line-height: 1.7;
  background: var(--panel);
  color: var(--text);
  padding: 14px 12px;
  margin: 0;
}
.messagebodysmall{
  font-family: var(--sans);
  font-size: 12px;
  background: var(--panel);
  color: var(--text-dim);
  margin: 8px;
}

/* ---------------------------------------------------------------
   7. file records
   --------------------------------------------------------------- */

.fname{ font-family: var(--mono); font-size: 12px; font-weight: 600; color: var(--text); }
.fvalue{ font-family: var(--mono); font-size: 12px; color: var(--text-dim); }
.fname_red, .fvalue_red{ font-family: var(--mono); font-size: 12px; font-weight: 600; color: var(--alert); }
.ffixed{ font-family: var(--mono); font-size: 12px; color: var(--text); }
.specialnote{ color: var(--amber); font-family: var(--mono); font-size: 12px; font-weight: 500; }

.uploadTable{ background: transparent; border: 1px solid var(--rule); margin: 12px; }
.uploadTable td{ padding: 8px 10px; border-bottom: 1px solid var(--rule); }
.uploadTitle, .fileinfoTable{
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .09em;
  text-transform: uppercase;
  color: var(--phosphor-dim);
  background: var(--void);
  padding: 8px 10px;
}
.fileinfoTable{
  text-transform: none;
  letter-spacing: 0;
  font-size: 12px;
  color: var(--text);
  background: transparent;
  border: 1px solid var(--rule);
}
.tableModifyFile, .tableMoveFile, .tableShowFile,
.tableViewFile, .tablePersonal{
  background: var(--panel);
  border: 1px solid var(--rule);
  border-radius: var(--r-box);
}

/* ---------------------------------------------------------------
   8. status boxes -- semantic colour, kept separate from the accent
   --------------------------------------------------------------- */

#BigBoxDisplay, #NoteDisplay, #ErrorDisplay, #ResultDisplay, .BBSName{
  font-family: var(--mono);
  font-size: 13px;
  font-weight: 500;
  text-align: center;
  padding: 16px;
  margin: 14px 10%;
  border-radius: var(--r-box);
  border: 1px solid;
}
#BigBoxDisplay{ color: var(--text);     border-color: var(--rule-lit);    background: var(--panel); }
#ResultDisplay{ color: var(--phosphor); border-color: var(--phosphor-deep); background: rgba(77,240,138,.05); }
#NoteDisplay  { color: var(--amber);    border-color: var(--amber-dim);   background: rgba(255,180,84,.05); }
#ErrorDisplay { color: var(--alert);    border-color: #6e2a25;            background: rgba(255,107,94,.06); }
#WarningDisplay{
  margin: 10px;
  padding: 12px;
  background: rgba(255,180,84,.06);
  border: 1px solid var(--amber-dim);
  border-radius: var(--r-box);
  color: var(--amber);
  font-family: var(--mono);
  font-size: 12px;
}
.BBSName{
  color: var(--phosphor);
  background: transparent;
  border-color: var(--phosphor-deep);
  text-shadow: var(--glow);
  font-size: 20px;
  font-weight: 600;
}

/* debug helper -- stock renders this on pink */
#ShowVars, #ShowVars pre{
  background: var(--panel-2);
  color: var(--text);
  border: 1px solid var(--rule);
  font-family: var(--mono);
  font-size: 11px;
}

/* The page footer.

   pageFooter.inc emits two things in this order: the YourBizFooter.htm
   slot if that file exists, then copyright.inc in #ssicr. The theme fills
   the first and suppresses the second -- YourBizFooter.htm sets
   SkipCopyRight -- so on a client page the board's own line is the whole
   footer.

   The vendor credit is not dropped, it is moved. Sysop's decision,
   2026-09-19: recognise Santronics once, properly, on the public front
   page where visitors see it, with a link to santronics.com, rather than
   in small type under all 38 client pages. Deleting the SET in
   YourBizFooter.htm brings #ssicr back here, which is why its rules are
   kept below. */
#YourBizFooter{
  margin: 18px 0 2px;
  text-align: center;
  font-family: var(--mono);
  font-size: 12px;
  color: var(--text-dim);
}
#YourBizFooter .bizName{ color: var(--text-dim); }

/* santronics copyright footer -- suppressed on client pages, see above */
#ssicr a{ color: var(--text-faint); font-family: var(--mono); }
#ssicr a:hover{ color: var(--text-dim); }

/* ---------------------------------------------------------------
   9. login form -- classes emitted by /public/js/wclogin.js and by
      http\public\PrintLoginForm.wct
   --------------------------------------------------------------- */

.wclogin, #wcLoginBox, .wcLoginBox{
  background: var(--panel);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-box);
  color: var(--text);
  font-family: var(--mono);
}

.crt-login{
  max-width: 380px;
  margin: 8vh auto 0;
  padding: 30px 26px 26px;
  background: var(--panel);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-box);
  box-shadow: inset 0 0 60px rgba(0,0,0,.5);
  text-align: center;
}
/* NOTE: this class is deliberately NOT called "bbsname". These pages ship
   without a DOCTYPE, so browsers render them in quirks mode, where class
   selectors match case-INSENSITIVELY -- ".bbsname" would collide with the
   stock ".BBSName" rule above and inherit its border, padding and margin. */
/* THE MARK.
   Two stylised M's, one offset from the other: Manic, for Manicouagan on
   Quebec's Cote-Nord where the BBS started in 1993, and Modem for the
   medium -- the profile doubling as the hills of the region, which is
   why the two peaks are unequal. Vectorised from the production raster
   and recoloured from navy/blue on white to phosphor-deep/phosphor on
   nothing. Master artwork and the full derivation, including why the
   (-5,-19) offset between the two copies is preserved exactly:
   http\public\graphics\manicmodem-crt.svg

   Inline data: URI rather than an <img> to that .svg, because
   config\mime_types.cfg has no image/svg+xml entry -- wcWEB would serve
   it with the wrong content type. The CSP permits data: in img-src. */
.crt-mark{
  width: 62px;
  height: 53px;
  margin: 0 auto 12px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 99 84'%3E%3Cpath d='M37.5,0L54.5,30.4L64,15.3L93.3,64.1L72.6,64.1L62.2,47.7L52.5,64.1L0,64.1Z' fill='%231b6b3d'/%3E%3Cpath d='M42.5,19L59.5,49.4L69,34.3L98.3,83.1L77.6,83.1L67.2,66.7L57.5,83.1L5,83.1Z' fill='%234df08a'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
  filter: drop-shadow(0 0 7px rgba(77,240,138,.30));
}

.crt-login .crt-name{
  font-family: var(--mono);
  font-size: 22px;
  font-weight: 600;
  color: var(--phosphor);
  text-shadow: var(--glow);
  /* The product subline used to sit under this and carry the gap to
     the form. It was dropped 2026-09-19 -- the Santronics credit
     belongs on the public front page and nowhere else, sysop's call --
     so the spacing moved up here. See the board-name section of
     theme\README.md. */
  margin: 0 0 24px;
}
.crt-login .field{ text-align: left; margin-bottom: 12px; }
.crt-login label{
  display: block;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--text-dim);
  margin-bottom: 4px;
}
.crt-login input[type="text"],
.crt-login input[type="password"]{ width: 100%; box-sizing: border-box; }
.crt-login .actions{ display: flex; gap: 8px; justify-content: center; margin-top: 18px; flex-wrap: wrap; }
.crt-login .links{
  margin-top: 18px;
  font-family: var(--mono);
  font-size: 11px;
  color: var(--text-faint);
}
.crt-login .links a{ color: var(--phosphor-dim); }
.crt-login .caret::after{
  content: "_";
  color: var(--phosphor);
  animation: crtblink 1.1s step-end infinite;
}
@keyframes crtblink{ 50%{ opacity: 0; } }

/* ---------------------------------------------------------------
   10. small screens -- the stock tables are fixed-width, so allow
       them to scroll rather than blow out the page
   --------------------------------------------------------------- */

@media (max-width: 640px){
  .pageheaderBar td{ padding: 6px 8px; }
  .pagebutton, .pageheaderButton a{ padding: 5px 8px; font-size: 10px; }
  #BigBoxDisplay, #NoteDisplay, #ErrorDisplay, #ResultDisplay, .BBSName{ margin: 12px; }
  .crt-login{ margin-top: 4vh; }
}

@media (prefers-reduced-motion: reduce){
  .crt-login .caret::after{ animation: none; }
  .pagebutton, .pageheaderButton a,
  input, select, textarea, button{ transition: none !important; }
}

/* =====================================================================
   11. THE OTHER STOCK STYLESHEETS
   ---------------------------------------------------------------------
   templates.css is only one of six. The client pages also load
   layout.css, buttons.css, mailclient.css, whoclient.css,
   personalclient.css and sysopclient.css -- each with its own hardcoded
   light palette. Everything below answers those.
   ===================================================================== */

/* --- layout.css ------------------------------------------------------
   Sets body to #333333 and, worse, #layoutMain to cream (#FFFACD).
   Used by whos_online, message_inbox, personalclient, sysopclient, chat. */

#layoutMain{ background-color: var(--void); height: auto; }
#layoutHeader, #layoutFooter, #layoutMenu, #layoutContent{ background-color: transparent; }
#layoutMenu{ border-right: 1px solid var(--rule); }

/* --- mailclient.css: the compose form -------------------------------- */

.newmsg{
  background: var(--panel);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-box);
  color: var(--text);
  font-family: var(--mono);
  font-size: 12px;
}
.newmsg_title{
  background: var(--void);
  color: var(--phosphor-dim);
  border: 0;
  border-bottom: 1px solid var(--rule-lit);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .09em;
  text-transform: uppercase;
  padding: 8px 12px;
}
.newmsg_head{
  background: var(--panel-2);
  color: var(--text-dim);
  border: 0;
  border-bottom: 1px solid var(--rule);
  font-family: var(--mono);
  font-size: 12px;
}
.newmsg_text{
  background: var(--void);
  color: var(--text);
  font-family: var(--sans);
  font-size: 13px;
  line-height: 1.7;
}
.newmsg_attr, .newmsg_fvalue, .newmsg_cb{
  color: var(--text-dim); font-family: var(--mono); font-size: 12px;
}
.newmsg_fname{ color: var(--text); font-family: var(--mono); font-size: 12px; font-weight: 600; }
.newmsg_fname_red, .newmsg_fvalue_red{ color: var(--alert); font-family: var(--mono); font-size: 12px; }
.newmsg_btn_post{
  background: var(--panel-2); color: var(--phosphor);
  border: 1px solid var(--rule-lit); border-radius: var(--r-ctl);
  font-family: var(--mono); font-size: 11px; font-weight: 500;
  padding: 5px 11px;
}
.newmsg_btn_post:hover{ background: var(--phosphor-deep); color: #eafff2; }
.newmsg_pvtmsg{
  background: transparent; color: var(--alert);
  border: 1px solid currentColor; border-radius: var(--r-pill);
  font-family: var(--mono); font-size: 10px;
  letter-spacing: .09em; text-transform: uppercase;
  font-weight: 500; padding: 2px 8px;
}
.newmsg_pubmsg{
  background: transparent; color: var(--phosphor-dim);
  border: 1px solid currentColor; border-radius: var(--r-pill);
  font-family: var(--mono); font-size: 10px;
  letter-spacing: .09em; text-transform: uppercase;
  font-weight: 500; padding: 2px 8px;
}
.newmsg_to_cc{ background: var(--panel-2); color: var(--text-dim); padding: 2px 6px; }

/* --- whoclient.css: who's online ------------------------------------- */

.whoTable, table.whoTable{
  border: 1px solid var(--rule);
  border-collapse: collapse;
  background: transparent;
}
.whotable .whoHeader, .whoHeader, .whotable tr.whoHeader th{
  background: var(--void);
  color: var(--phosphor-dim);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .09em;
  text-transform: uppercase;
  text-align: left;
  padding: 8px 10px;
  border-bottom: 1px solid var(--rule-lit);
}
.whoText, .whoIcons{
  color: var(--text);
  font-family: var(--mono);
  font-size: 12px;
  padding: 7px 10px;
  border-bottom: 1px solid var(--rule);
}
.whoOptions{
  background-color: var(--panel-2);
  border: 1px solid var(--rule);
  border-radius: var(--r-box);
}
.whoOptions th{ color: var(--text-dim); font-weight: 400; font-family: var(--mono); font-size: 11px; }
#whoOptions td.whoRefreshError{
  background: rgba(255,107,94,.12);
  color: var(--alert);
  font-family: var(--mono);
  text-align: center;
}
.whoIM{
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-ctl);
  background: var(--panel-2);
  color: var(--text);
}
.whoMoreInfo{ color: var(--phosphor-dim); font-family: var(--mono); font-size: 11px; }

/* --- personalclient.css + sysopclient.css ---------------------------- */

div.propertyPage, div.sysopPage{
  background: var(--panel);
  color: var(--text);
  border: 1px solid var(--rule);
  border-radius: var(--r-box);
  font-family: var(--mono);
  font-size: 13px;
}
table.propertyPage, table.sysopPage,
table.propertyPageNoBorder, table.sysopPageNoBorder{
  color: var(--text);
  border-color: var(--rule);
  background: transparent;
}
.propertyPageTitle, .sysopPageTitle{
  color: var(--phosphor);
  font-family: var(--mono);
  font-weight: 600;
  text-shadow: var(--glow);
}
.error{
  color: var(--alert);
  background: rgba(255,107,94,.06);
  border: 1px solid #6e2a25;
  border-radius: var(--r-box);
  font-family: var(--mono);
  font-size: 13px;
}

/* the left-hand property/sysop menu -- stock is cyan tiles with an
   outset bevel and a pink hover */
.btnMenu{ font-family: var(--mono); font-size: 12px; }

/* The pane banner (SYSOP / ADMINISTRATION, PERSONAL / ACCOUNT SETTINGS)
   sits in table.btnMenuLogo, width="96%" but not centred, so it hugged
   the left edge while the Who banner - in a centred 96% table - sits 2%
   in. The buttons under it are .btnMenu at width 90% / margin 5%; give
   the banner the same, so heading and buttons share one left edge and
   the pane gets its gutter. John, 2026-09-20. */
table.btnMenuLogo{ width: calc(100% - 2 * var(--gutter)); margin: 0 var(--gutter); }
.btnMenu{ width: calc(100% - 2 * var(--gutter)); margin-left: var(--gutter); margin-right: var(--gutter); }
/* the blanket element rule near the top (td, div, li ... { font-family: var(--sans) })
   matches the li and its inner div directly, and a matching rule beats the
   inherited mono above. Name them, or the buttons stay in bold sans. */
.btnMenu li, .btnMenu a, .btnMenu div{ font-family: var(--mono); }
.btnMenu li{
  background-color: var(--panel-2);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-ctl);
  text-align: left;
  padding: 2px 10px;
}
.btnMenu a{ color: var(--text); }
.btnMenu li.btnItemSelected,
.btnMenu a.btnItemSelected{
  color: var(--void);
  background-color: var(--phosphor-dim);
  font-weight: 600;
}
.btnMenu li:hover{ background-color: var(--phosphor-deep); }
.btnMenu li:hover a{ color: #eafff2; }

/* personalclient.css and sysopclient.css both end with an UNSCOPED rule:
       .btnMenu li:hover, a.btnItemSelected:hover, a:hover
       { color: black; background-color: pink; }
   That a:hover hits every link on those pages. Answered explicitly. */
a:hover, a.btnItemSelected:hover{
  color: var(--phosphor);
  background-color: transparent;
}
.btnMenu a.btnItemSelected:hover{ color: var(--void); background-color: var(--phosphor); }

/* --- buttons.css: the icon/button strips ----------------------------- */

/* Menu buttons sit on the panel with no chip of their own. Giving each one
   a background and border made a row of ragged boxes, because every anchor
   shrink-wraps a label of different length. Resting state is now just icon
   + label; the highlight appears on hover only. */
.item, .itemgif, .itembright, .itemNewMail, .item_red, .item_GREEN{
  color: var(--phosphor);
  background: transparent;
  border: 0;
  border-radius: var(--r-ctl);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  text-decoration: none;
  padding: 3px 6px;
}

/* Inside the menu table, let each button fill its cell so the hover
   highlight is a uniform block instead of tracking the label width. */
.buttontable a.item,
.buttontable a.itemgif,
.buttontable a.itemNewMail{
  display: block;
  padding: 4px 7px;
}

/* ...except the "Jump to:" strip, which is the one cell in any buttontable
   that holds many anchors instead of one. file_listing.htm:44 opens a single
   <td colspan>, drops a "Jump to:" label in it and lets a script write 36
   A-Z links after it -- so display:block above turned a 22px toolbar row into
   a 733px column of full-width links. Measured before the fix: 36 anchors,
   display:block, 949px wide, stacked 20px apart.

   Scoped by td[colspan] because that attribute appears in no other
   .buttontable cell in the stock templates -- every real toolbar cell is
   <td width="1%" nowrap> with exactly one anchor in it, so those keep the
   fill-the-cell behaviour above. (Attribute names match case-insensitively
   in HTML, so COLSPAN would match too.)

   white-space is reset because stock sets nowrap on table.buttontable and on
   its cells: 36 chips do not fit the ~630px listing frame on one line, and
   without this they run off the edge instead of wrapping. */
.buttontable td[colspan]{
  white-space: normal;
  padding: 6px 8px;
}
.buttontable td[colspan] a.item,
.buttontable td[colspan] a.itemgif,
.buttontable td[colspan] a.itemNewMail{
  display: inline-block;
  min-width: 1.7em;
  margin: 1px;
  padding: 2px 3px;
  text-align: center;
}
/* The label is a <b class="item">, so it inherits the link colour. Make it
   read as a caption instead -- same treatment as the search form's labels. */
.buttontable td[colspan] > b.item{
  margin-right: 8px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--phosphor-dim);
  background: transparent;
}

/* Full property set restated -- see the note above .pagebutton:hover.
   Without font-family/font-size/font-weight here, stock .item:hover
   (0,2,0) wins and the label jumps from 11px mono to 8pt Arial. */
.item:hover, .itemgif:hover, .itembright:hover,
.itemNewMail:hover, .item_red:hover{
  color: #eafff2;
  background: var(--phosphor-deep);
  border: 0;
  border-radius: var(--r-ctl);
  text-decoration: none;
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
}
.itemNewMail{ color: var(--amber); border-color: var(--amber-dim); }
.item_red{ color: var(--alert); border-color: #6e2a25; }
/* The label inside each menu button. The emitting page styles it inline as
   #btnText { display:inline; padding:5pt; vertical-align:middle } -- an ID,
   so specificity (1,0,0) beats any class rule here and it has to be matched
   by ID. 5pt all round is far too loose once the button fills its cell. */
#btnText{
  display: inline;
  padding: 0 0 0 5px;
  vertical-align: middle;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .02em;
}
#btnImage{ vertical-align: middle; }

.itemoff, .disabled, .disabled_GREEN, .disabled_RED{
  color: var(--text-faint);
  background: transparent;
  border: 1px solid var(--rule);
  border-radius: var(--r-ctl);
  font-family: var(--mono);
  font-size: 11px;
  padding: 4px 9px;
}
.highlight{
  color: var(--void); background: var(--amber);
  font-family: var(--mono); font-size: 11px; font-weight: 600;
  border-radius: var(--r-ctl);
}
.buttontable, .buttontable_GREEN{
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--rule);
  color: var(--text);
  font-family: var(--mono);
  font-size: 11px;
  padding: 6px 4px;
}
.itemgifrow, .itemgifrow1{
  background: var(--void);
  color: var(--phosphor-dim);
  font-family: var(--mono);
  font-size: 11px;
  text-align: left;
}
.niceButton, a.niceButton{
  color: var(--phosphor);
  background: var(--panel-2);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-ctl);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  text-decoration: none;
  padding: 4px 9px;
}
/* stock a.niceButton:hover sets border:inset and Arial 8pt -- restate the
   full set or it jumps on hover */
a.niceButton:hover{
  border: 1px solid var(--phosphor-dim);
  border-radius: var(--r-ctl);
  color: #eafff2;
  background: var(--phosphor-deep);
  text-decoration: none;
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  padding: 4px 9px;
}
.btnClose{ background: var(--panel-2); color: var(--phosphor); font-family: var(--mono); font-size: 11px; }
.btnHelpClose{ background: var(--panel-2); color: var(--text-dim); font-family: var(--mono); font-size: 11px; }

/* .hideit is deliberately invisible in stock (green text on green).
   Keep it invisible, in this palette. */
.hideit{ color: var(--void); background: var(--void); border: 0; }

/* --- assorted list / preview classes --------------------------------- */

.msgitem, .filerow, .recentMail, .msglistcol{
  font-family: var(--mono);
  font-size: 12px;
  color: var(--text);
  background: transparent;
  border-bottom: 1px solid var(--rule);
}
.newmsg_checkboxes{ margin-top: 2px; }
.confLink{ color: var(--phosphor-dim); font-family: var(--mono); font-weight: 600; }
.confLink:hover{ color: var(--phosphor); }
/* MISLEADING NAME: areaListDivider / msgThreadListDivider are not divider
   rules, they are the scrollable CONTAINERS that wrap the conference and
   thread lists (overflow:auto, ~300px wide). Stock sets no background on
   them at all -- they inherit the page. Giving them a fill painted a light
   slab behind the whole list and wrecked the text contrast.
   Keep them transparent; a hairline gives the separation the name implies. */
.areaListDivider, .msgThreadListDivider,
#areaListDivider, #msgThreadListDivider{
  background: transparent;
  border: 0;
  border-top: 1px solid var(--rule);
}
.tdPreview, .wcpreview{
  background: var(--panel-2);
  color: var(--text-dim);
  font-family: var(--sans);
  font-size: 12px;
  border-top: 1px solid var(--rule);
  padding: 6px 12px;
}
.suggestBox{
  background: var(--panel);
  border: 1px solid var(--rule-lit);
  color: var(--text);
  font-family: var(--mono);
  font-size: 12px;
}
.tablesortbtn{ color: var(--phosphor-dim); font-family: var(--mono); cursor: pointer; }
.AccordionPanelTab{
  background: var(--void);
  color: var(--phosphor-dim);
  border-bottom: 1px solid var(--rule-lit);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .09em;
  text-transform: uppercase;
  padding: 7px 10px;
  cursor: pointer;
}

/* =====================================================================
   12. SIGNUP, ERROR AND UPLOAD PAGES
   SignupPage.css, errors.css, BigButtons.css. Note BigButtons.css
   carries a SECOND unscoped "a:hover" (white on blue) -- the a:hover
   rule in section 11 answers that one too, by source order.
   ===================================================================== */

/* --- SignupPage.css --------------------------------------------------- */

div.ruler{
  background: var(--rule-lit);
  height: 1px;
  margin: 18px 20% 14px;
  font-size: 0;
}
.prmTitle{
  background: var(--void);
  color: var(--phosphor-dim);
  border: 0;
  border-bottom: 1px solid var(--rule-lit);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .09em;
  text-transform: uppercase;
  padding: 8px 12px;
}
.divStatus{
  background: rgba(255,107,94,.08);
  color: var(--alert);
  border: 1px solid #6e2a25;
  border-radius: var(--r-ctl);
  font-family: var(--mono);
  font-size: 12px;
  padding: 7px 10px;
}
.btn_submit, .btnHome{
  background: var(--panel-2);
  color: var(--phosphor);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-ctl);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  padding: 6px 12px;
  cursor: pointer;
}
.btn_submit:hover, .btnHome:hover{
  background: var(--phosphor-deep);
  border-color: var(--phosphor-dim);
  color: #eafff2;
}
table.formSignup{
  background: var(--panel);
  color: var(--text);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-box);
  border-collapse: collapse;
  font-family: var(--mono);
  font-size: 13px;
}

/* Rule 3: a card is its own edge. The stock signup form rules off its
   prose and its captcha with <hr> and underlines its title row. */
table.formSignup hr{ display: none; }
table.formSignup td.prmTitle{ border-bottom: 0; }
table.formSignup td{ padding: 8px 10px; border-bottom: 1px solid var(--rule); }

/* --- errors.css ------------------------------------------------------- */

.ErrorBody{ font-family: var(--mono); font-size: 13px; color: var(--text); margin: 2%; }
.ErrorBox{
  background-color: var(--panel);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-box);
  margin: 2%;
  padding: 4px;
}
.ErrorMsg{
  font-family: var(--mono);
  font-size: 18px;
  font-weight: 600;
  color: var(--phosphor);
  text-shadow: var(--glow);
}
.ErrorMsg2{
  width: auto;
  border: 1px solid #6e2a25;
  border-radius: var(--r-box);
  padding: 14px;
  margin: 10px 10%;
  text-align: center;
  color: var(--alert);
  background: rgba(255,107,94,.06);
  font-family: var(--mono);
  font-size: 13px;
  font-weight: 500;
}
.ErrorText{ font-family: var(--mono); font-size: 13px; color: var(--text-dim); }
a.ErrorLink{
  color: var(--phosphor);
  background: var(--panel-2);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-ctl);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 500;
  padding: 5px 11px;
  text-decoration: none;
}
a.ErrorLink:hover, a.ErrorLink:active{
  color: #eafff2;
  background: var(--phosphor-deep);
  border-color: var(--phosphor-dim);
}
.ErrorLogo{ margin: 1%; opacity: .75; }

/* --- misc one-offs across the remaining templates --------------------- */

.notice, .warning{
  font-family: var(--mono);
  font-size: 12px;
  color: var(--amber);
  background: rgba(255,180,84,.05);
  border: 1px solid var(--amber-dim);
  border-radius: var(--r-box);
  padding: 10px 12px;
}
.pagetitle, .wcChatTitle, .statsCaption{
  font-family: var(--mono);
  font-weight: 600;
  color: var(--phosphor);
  text-shadow: var(--glow);
}
.statsItem, .queidx, .quetime, .queFileAge{
  font-family: var(--mono);
  font-size: 12px;
  color: var(--text-dim);
  font-variant-numeric: tabular-nums;
}
.divChatApplet{ background: var(--panel); border: 1px solid var(--rule); border-radius: var(--r-box); }
.myFiles, .newArea, .properties, .basic{
  font-family: var(--mono);
  font-size: 12px;
  color: var(--text);
  background: transparent;
}

/* wcSMTP mail-queue viewer (sysop tool, wcsmq.htm) */
.quetable{ width: 100%; border-collapse: collapse; background: transparent; }
.queTitleBar{
  background: var(--void); color: var(--phosphor-dim);
  font-family: var(--mono); font-size: 11px;
  letter-spacing: .09em; text-transform: uppercase;
  padding: 8px 10px; border-bottom: 1px solid var(--rule-lit);
}
.querow, .querowTop{ background: transparent; border-bottom: 1px solid var(--rule); }
.querow2{ background: var(--panel-2); border-bottom: 1px solid var(--rule); }
.querow td, .querow2 td, .querowTop td{
  font-family: var(--mono); font-size: 12px; color: var(--text); padding: 7px 10px;
}
.questatus{ font-family: var(--mono); font-size: 11px; color: var(--amber); }
.quecmdKill{ color: var(--alert); }
.quecmdRetry{ color: var(--phosphor-dim); }
.queBtnLink, .quecmd{ color: var(--phosphor-dim); font-family: var(--mono); font-size: 11px; }
.QUEINTRO, .quedesc{ font-family: var(--mono); font-size: 12px; color: var(--text-dim); }

/* =====================================================================
   13. SPECIFICITY GUARDS
   ---------------------------------------------------------------------
   Several stock client templates carry their own inline <style> block,
   and some of those rules are element+class (0,1,1) -- which beats a
   plain class selector (0,1,0) no matter how late this file loads. Each
   selector below is matched at equal-or-greater specificity.

   "MATCH IT AND LET SOURCE ORDER DECIDE" IS NOT ENOUGH.
   That was the original rule here and it is wrong for the file client.
   file_listmenu.inc emits its <style> block from inside <body>, and it
   is included twice per page -- so the stock block lands AFTER the
   theme's <link>, not before it, and at equal specificity stock wins.
   The symptom was table.buttontable#tbAnch, the 630x771 file-list body,
   rendering as a silver slab with phosphor text on it.

   So the three selectors that collide with a body-emitted block are
   prefixed with `body` to reach (0,1,2) and win outright, order or no
   order. Anything that only ever appears in <head> can stay matched at
   equal specificity.

   Found by enumerating live cssRules across every frame of
   /client?message.wcn and /client?file.wcn rather than by guessing.
   If a future update adds another, re-run that scan.

     topmenu   body                 background: blue
     areas     .bar                 background: silver
     areas     table.buttontable    background: silver
     index     div.notice           #33FF66 on black
     index     h3                   color: blue
     index     .tableTitle          lightsteelblue on black
     index     div.confLink         background: silver
     body      div.notice           #33FF66 on black
     body      h3                   color: blue
   ===================================================================== */

/* (0,1,2) -- see the note above: the stock rule is emitted from <body>. */
body table.buttontable,
body table.buttontable_GREEN{
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--rule);
  color: var(--text);
  font-family: var(--mono);
  font-size: 11px;
}

/* Same block, same problem: `.bar { background: silver }` and
   `.tablesortbtn { color: yellow; border: 1px solid black }`. The sort
   button is a live control in the file-list header, so it keeps a border
   -- just not a black one on silver. */
body .bar{ background-color: var(--phosphor-deep); }
body .tablesortbtn{
  color: var(--phosphor-dim);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-ctl);
  background: transparent;
  font-family: var(--mono);
  cursor: pointer;
}
body .tablesortbtn:hover{ color: var(--phosphor); border-color: var(--phosphor-deep); }

/* sysop_page_general.htm:3-29 does the same thing -- its <style> is part
   of the page body loaded into the sysop content pane, so it also lands
   after this file:

     table.stats   { background: white }              (0,1,1)
     .statsCaption { background: silver; color: Blue } (0,1,0)

   The theme already had .statsCaption, but only at (0,1,0) and earlier in
   the file, so stock won on both count and order: a white 530x190 table
   under a silver caption bar with blue text. Prefixed the same way.
   `table.stats td, th` in that block is (0,1,2), so the cell rules below
   are written to reach (0,1,3). */
body table.stats{
  background: transparent;
  border: 1px solid var(--rule);
  font-family: var(--mono);
  font-size: 12px;
}
body table.stats td,
body table.stats th{
  border: 1px solid var(--rule);
  padding: 6px 10px;
}
body .statsCaption{
  background: var(--void);
  color: var(--phosphor-dim);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  border-bottom: 1px solid var(--rule-lit);
  text-shadow: none;
}
body .statsItem{ color: var(--text-dim); font-weight: 600; }

div.notice{
  color: var(--amber);
  background: rgba(255,180,84,.05);
  border: 1px solid var(--amber-dim);
  border-top-width: 1px;
  border-bottom-width: 1px;
  border-radius: var(--r-box);
  font-family: var(--mono);
  font-size: 12px;
  margin-left: 10%;
  margin-right: 10%;
  padding: 12px;
  text-align: center;
}
div.notice h3{
  color: var(--phosphor);
  font-family: var(--mono);
  text-shadow: var(--glow);
  margin-top: 0;
}

div.confLink{
  background: var(--panel-2);
  color: var(--phosphor-dim);
  border: 1px solid var(--rule);
  border-radius: var(--r-ctl);
  font-family: var(--mono);
}

/* .tableTitle vs the stock .tabletitle -- these pages run in quirks mode
   where class matching is case-insensitive, but spell it out so the rule
   also holds if a DOCTYPE is ever added. */
.tableTitle, table .tableTitle{
  background: var(--void);
  color: var(--phosphor-dim);
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .09em;
  text-transform: uppercase;
  border-bottom: 1px solid var(--rule-lit);
  padding: 8px 12px;
}

td.bar, div.bar, .bar{ background-color: var(--phosphor-deep); }

/* frameset gaps and per-frame bodies */
body.image{ background: var(--void); color: var(--text); }

/* =====================================================================
   14. STOCK GIF ARTWORK
   ---------------------------------------------------------------------
   The client banners (c-msg.gif, c-file.gif, ...) and the 16x16 toolbar
   icons are 1990s raster art on a light palette -- they fight the theme
   and cannot be restyled, only replaced or filtered. Tinting them to the
   phosphor is reversible and needs no new artwork.

   grayscale flattens the original hues, sepia+hue-rotate re-tints toward
   green, saturate brings it back up. Drop this block to restore the
   original artwork.

   THIS IS THE FLOOR, NOT THE FINISH. It originally listed only
   /graphics/ and /js/images/, which left all 100 icons in http\images\
   untouched -- a raw red X and a saturated yellow NEW! badge sat in the
   inbox looking exactly like 1996. /images/ is listed here so anything
   14b and 14c have not redrawn is at least in the right hue; the
   redrawn ones set filter:none and win on source order.
   ===================================================================== */

img[src*="/graphics/"],
img[src*="/js/images/"],
img[src*="/images/"]{
  filter: grayscale(1) sepia(1) hue-rotate(75deg) saturate(2.4) brightness(.92);
}

/* =====================================================================
   14b. REPLACED ARTWORK
   ---------------------------------------------------------------------
   The client banners and toolbar icons are 1990s GIFs -- a script-type
   "Messaging" wordmark with an envelope, and Windows 95 era 16px icons.
   Filtering them green only made them tinted-tacky, so these are drawn
   from scratch as line art and swapped in with CSS content: url().

   WHY DATA URIs AND NOT .svg FILES
   config\mime_types.cfg has no image/svg+xml entry, so a .svg served by
   wcWEB would get the wrong content type. Data URIs need no MIME change
   and keep the whole theme portable as a single file. The CSP allows
   them: img-src includes data:.

   Each rule also sets filter:none so the tint in 14 above does not
   re-tint artwork that is already phosphor green, and pins width/height
   so the swap causes no reflow.

   TO RESTORE THE ORIGINAL ARTWORK
   Delete this block. The stock GIFs come back (tinted by 14).
   ===================================================================== */

/* --- client banners (211x50) ----------------------------------------- */

img[src*="c-msg.gif"], img[src*="c-file.gif"], img[src*="c-who.gif"],
img[src*="c-per.gif"], img[src*="c-chat.gif"], img[src*="c-sysop.gif"]{
  filter: none;
  width: 211px;
  height: 50px;
}

img[src*="c-msg.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 211 50'%3E%3Crect x='0' y='9' width='3' height='31' fill='%234df08a'/%3E%3Ctext x='13' y='26' font-family='Consolas,Menlo,monospace' font-size='15' font-weight='600' letter-spacing='2.5' fill='%234df08a'%3EMESSAGING%3C/text%3E%3Ctext x='14' y='39' font-family='Consolas,Menlo,monospace' font-size='8' letter-spacing='1.6' fill='%236d8a7c'%3ECONFERENCES / MAIL%3C/text%3E%3C/svg%3E");
}
img[src*="c-file.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 211 50'%3E%3Crect x='0' y='9' width='3' height='31' fill='%234df08a'/%3E%3Ctext x='13' y='26' font-family='Consolas,Menlo,monospace' font-size='15' font-weight='600' letter-spacing='2.5' fill='%234df08a'%3EFILE LIBRARY%3C/text%3E%3Ctext x='14' y='39' font-family='Consolas,Menlo,monospace' font-size='8' letter-spacing='1.6' fill='%236d8a7c'%3EBROWSE / UPLOAD%3C/text%3E%3C/svg%3E");
}
img[src*="c-who.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 211 50'%3E%3Crect x='0' y='9' width='3' height='31' fill='%234df08a'/%3E%3Ctext x='13' y='26' font-family='Consolas,Menlo,monospace' font-size='15' font-weight='600' letter-spacing='2.5' fill='%234df08a'%3EWHO IS ONLINE%3C/text%3E%3Ctext x='14' y='39' font-family='Consolas,Menlo,monospace' font-size='8' letter-spacing='1.6' fill='%236d8a7c'%3ENODE ACTIVITY%3C/text%3E%3C/svg%3E");
}
img[src*="c-per.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 211 50'%3E%3Crect x='0' y='9' width='3' height='31' fill='%234df08a'/%3E%3Ctext x='13' y='26' font-family='Consolas,Menlo,monospace' font-size='15' font-weight='600' letter-spacing='2.5' fill='%234df08a'%3EPERSONAL%3C/text%3E%3Ctext x='14' y='39' font-family='Consolas,Menlo,monospace' font-size='8' letter-spacing='1.6' fill='%236d8a7c'%3EACCOUNT SETTINGS%3C/text%3E%3C/svg%3E");
}
img[src*="c-chat.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 211 50'%3E%3Crect x='0' y='9' width='3' height='31' fill='%234df08a'/%3E%3Ctext x='13' y='26' font-family='Consolas,Menlo,monospace' font-size='15' font-weight='600' letter-spacing='2.5' fill='%234df08a'%3ECHAT%3C/text%3E%3Ctext x='14' y='39' font-family='Consolas,Menlo,monospace' font-size='8' letter-spacing='1.6' fill='%236d8a7c'%3ELIVE CHANNELS%3C/text%3E%3C/svg%3E");
}
img[src*="c-sysop.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 211 50'%3E%3Crect x='0' y='9' width='3' height='31' fill='%23ffb454'/%3E%3Ctext x='13' y='26' font-family='Consolas,Menlo,monospace' font-size='15' font-weight='600' letter-spacing='2.5' fill='%23ffb454'%3ESYSOP%3C/text%3E%3Ctext x='14' y='39' font-family='Consolas,Menlo,monospace' font-size='8' letter-spacing='1.6' fill='%23a8732c'%3EADMINISTRATION%3C/text%3E%3C/svg%3E");
}


/* --- pane banners for pages stock never gave one: chat, terminal, high
   scores. Same artwork as the six swaps above, as a block with a
   background rather than an <img> swap, because there is no stock image
   to swap and a phantom <img src> would 404 in the log. The <span> inside
   keeps the heading text for readers that do not draw images. */
.crt-banner{
  display: block;
  width: 211px;
  height: 50px;
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 0;
  background-repeat: no-repeat;
  background-position: left center;
  background-size: contain;
  position: relative;
}
.crt-banner > span{ position: absolute; left: -9999px; }
.crt-banner-chat{ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 211 50'%3E%3Crect x='0' y='9' width='3' height='31' fill='%234df08a'/%3E%3Ctext x='13' y='26' font-family='Consolas,Menlo,monospace' font-size='15' font-weight='600' letter-spacing='2.5' fill='%234df08a'%3ECHAT%3C/text%3E%3Ctext x='14' y='39' font-family='Consolas,Menlo,monospace' font-size='8' letter-spacing='1.6' fill='%236d8a7c'%3ELIVE CONVERSATION%3C/text%3E%3C/svg%3E"); }
.crt-banner-terminal{ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 211 50'%3E%3Crect x='0' y='9' width='3' height='31' fill='%234df08a'/%3E%3Ctext x='13' y='26' font-family='Consolas,Menlo,monospace' font-size='15' font-weight='600' letter-spacing='2.5' fill='%234df08a'%3ETERMINAL%3C/text%3E%3Ctext x='14' y='39' font-family='Consolas,Menlo,monospace' font-size='8' letter-spacing='1.6' fill='%236d8a7c'%3EANSI OVER TELNET%3C/text%3E%3C/svg%3E"); }
.crt-banner-scores{ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 211 50'%3E%3Crect x='0' y='9' width='3' height='31' fill='%234df08a'/%3E%3Ctext x='13' y='26' font-family='Consolas,Menlo,monospace' font-size='15' font-weight='600' letter-spacing='2.5' fill='%234df08a'%3EHIGH SCORES%3C/text%3E%3Ctext x='14' y='39' font-family='Consolas,Menlo,monospace' font-size='8' letter-spacing='1.6' fill='%236d8a7c'%3EDOOR GAMES%3C/text%3E%3C/svg%3E"); }
h1.crt-banner{ margin: 0 0 14px; }
.crt-pane-head{ padding: 2px var(--gutter) 0; }

/* --- toolbar icons (16x16 line art) ---------------------------------- */

img[src*="hammer.gif"], img[src*="noframes.gif"], img[src*="threadmode.gif"],
img[src*="edit.gif"], img[src*="mailinbox.gif"], img[src*="icon_folder_hot.gif"],
img[src*="uploadfile.gif"]{
  filter: none;
  width: 16px;
  height: 16px;
  vertical-align: -3px;
}

/* Options -- sliders, not a hammer */
img[src*="hammer.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round'%3E%3Cpath d='M2 4.5h7M12.5 4.5h1.5M2 11.5h3.5M9 11.5h5'/%3E%3Ccircle cx='10.7' cy='4.5' r='1.7'/%3E%3Ccircle cx='7.2' cy='11.5' r='1.7'/%3E%3C/svg%3E");
}
/* No frames -- one maximized pane */
img[src*="noframes.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linejoin='round'%3E%3Crect x='2' y='3' width='12' height='10' rx='1.2'/%3E%3Cpath d='M2 6h12'/%3E%3C/svg%3E");
}
/* Thread -- a reply tree */
img[src*="threadmode.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round'%3E%3Cpath d='M4 4v7.5'/%3E%3Cpath d='M4 7.5h4.5M4 11.5h7'/%3E%3Ccircle cx='4' cy='3' r='1.3'/%3E%3C/svg%3E");
}
/* Create new -- pencil */
img[src*="edit.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linejoin='round'%3E%3Cpath d='M11.3 2.2l2.5 2.5L6 12.5l-3.2.7.7-3.2z'/%3E%3Cpath d='M10 3.5l2.5 2.5'/%3E%3C/svg%3E");
}
/* Inbox -- tray with an inbound arrow */
img[src*="mailinbox.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 9.5v3a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-3'/%3E%3Cpath d='M2 9.5h3l1 2h4l1-2h3'/%3E%3Cpath d='M8 2v5.5M5.8 5.3L8 7.5l2.2-2.2'/%3E%3C/svg%3E");
}
/* Recent -- clock */
img[src*="icon_folder_hot.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round'%3E%3Ccircle cx='8' cy='8' r='5.6'/%3E%3Cpath d='M8 4.6V8l2.3 1.6'/%3E%3C/svg%3E");
}
/* Upload -- tray with an outbound arrow */
img[src*="uploadfile.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 9.5v3a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-3'/%3E%3Cpath d='M8 10V2.5M5.8 4.7L8 2.5l2.2 2.2'/%3E%3C/svg%3E");
}

/* --- frame lock toggle ------------------------------------------------
   NOT decoration. message_conferences.htm and file_areas.htm both emit:

     document.writeln('<a href="#" onclick="toggleResize();">
        <img id="resizeGif" src="/images/noresize.gif"
             title="Click to resize frames"></a>');

   ...and toggleResize() swaps the src to report state:

     img.src = t.noResize ? "/images/noresize.gif" : "/images/resize.gif";

   noresize.gif = splitters LOCKED (the small red pin head)
   resize.gif   = splitters DRAGGABLE

   So it needs two distinct glyphs, one per state. Amber for pinned,
   because it is a state that is currently ON; dim green for the neutral
   draggable state.

   NOTE ON THE SELECTORS: a *= match on "resize.gif" would also catch
   "noresize.gif". $= is used so each state matches only itself --
   "/images/noresize.gif" does not end with "/resize.gif".
   ---------------------------------------------------------------------*/

img#resizeGif,
img[src$="/noresize.gif"],
img[src$="/resize.gif"]{
  filter: none;
  width: 14px;
  height: 14px;
  cursor: pointer;
  vertical-align: -2px;
  opacity: .85;
  transition: opacity .12s ease, transform .12s ease;
}
img#resizeGif:hover,
img[src$="/noresize.gif"]:hover,
img[src$="/resize.gif"]:hover{ opacity: 1; transform: scale(1.15); }

/* LOCKED -- a pushpin, keeping the original red-pin-head metaphor */
img[src$="/noresize.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Ccircle cx='7' cy='5' r='3.1' fill='%23ffb454'/%3E%3Ccircle cx='7' cy='5' r='5' fill='none' stroke='%23a8732c' stroke-width='1'/%3E%3Cpath d='M7 10v3' stroke='%23ffb454' stroke-width='1.4' stroke-linecap='round'/%3E%3C/svg%3E");
}

/* DRAGGABLE -- horizontal resize arrows */
img[src$="/resize.gif"]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14' fill='none' stroke='%232a9d5c' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1.8 7h10.4'/%3E%3Cpath d='M4.3 4.5L1.8 7l2.5 2.5'/%3E%3Cpath d='M9.7 4.5L12.2 7l-2.5 2.5'/%3E%3C/svg%3E");
}

/* icons brighten with their button rather than sitting static */
/* =====================================================================
   14c. REPLACED ARTWORK -- http\images\ (the 100-icon set)
   ---------------------------------------------------------------------
   14b covered the six client banners and seven toolbar icons. It missed
   the rest of http\images\, and section 14 above only tinted /graphics/
   and /js/images/ -- so every other icon rendered as raw 1996 artwork:
   a red X, a saturated yellow "NEW!" badge, orange envelopes. Section 14
   now also tints /images/ as a floor, and the icons below are redrawn.

   CONVENTIONS
     16x16 viewBox, fill:none, stroke-width 1.3, round caps and joins.
     --phosphor   #4df08a  default
     --amber      #ffb454  attention / unread / state-is-on
     --alert      #ff6b5e  destructive only (delete, junk)
     --text-faint #3f574c  disabled twins

   DISABLED TWINS ARE NOT DECORATION
     message_indexmenu.inc:11 and file_listmenu.inc:62-64 pick between
     apageup.gif (enabled) and dpageup.gif (disabled) to report whether
     paging is available -- that is what the a/d prefix means. The
     *_disabled.gif pairs work the same way. Both states need their own
     glyph or the control stops reporting, same trap as the resize pin
     in 14b. Disabled is drawn faint, not hidden.

   SELECTORS USE $= WITH THE i FLAG
     *= bleeds across names: "pageup.gif" is a substring of apageup.gif
     and dpageup.gif, and "resize.gif" of "noresize.gif". $= on the full
     "/name.gif" keeps each rule to one file. The i flag covers
     NextPage.gif / PrevPage.gif, whose capitalisation on disk does not
     match every template's spelling of them.
   ===================================================================== */

/* --- shared box: every icon below is 16x16 line art, untinted -------- */
img[src$="/msgdelete.gif" i], img[src$="/msgmark.gif" i],
img[src$="/msgjunk.gif" i],   img[src$="/delete.gif" i],
img[src$="/reply.gif" i],     img[src$="/forward.gif" i],
img[src$="/print.gif" i],     img[src$="/attach.gif" i],
img[src$="/create_new.gif" i],img[src$="/write.gif" i],
img[src$="/nowrite.gif" i],   img[src$="/pencil.gif" i],
img[src$="/snoop.gif" i],     img[src$="/search.gif" i],
img[src$="/spyglass.gif" i],  img[src$="/zoomin.gif" i],
img[src$="/zoomout.gif" i],   img[src$="/logoff.gif" i],
img[src$="/homeicon.gif" i],  img[src$="/home.gif" i],
img[src$="/helpbook.gif" i],  img[src$="/refresh.gif" i],
img[src$="/user.gif" i],      img[src$="/userinfo.gif" i],
img[src$="/users.gif" i],     img[src$="/forums.gif" i],
img[src$="/frames.gif" i],    img[src$="/flatmode.gif" i],
img[src$="/execute.gif" i],   img[src$="/back.gif" i],
img[src$="/redarrow.gif" i],  img[src$="/mail.gif" i],
img[src$="/mail_icon.gif" i], img[src$="/mails1.gif" i],
img[src$="/inbox.gif" i],     img[src$="/pvtmsg.gif" i],
img[src$="/newpvtmsg.gif" i], img[src$="/oldpvtmsg.gif" i],
img[src$="/mailques.gif" i],  img[src$="/lock.gif" i],
img[src$="/unlock.gif" i],    img[src$="/secure.gif" i],
img[src$="/icon_folder_locked.gif" i],
img[src$="/apagetop.gif" i],  img[src$="/apageup.gif" i],
img[src$="/apagedown.gif" i], img[src$="/apagebottom.gif" i],
img[src$="/dpagetop.gif" i],  img[src$="/dpageup.gif" i],
img[src$="/dpagedown.gif" i], img[src$="/dpagebottom.gif" i],
img[src$="/next.gif" i],      img[src$="/previous.gif" i],
img[src$="/pageup.gif" i],    img[src$="/pagedown.gif" i],
img[src$="/next_disabled.gif" i],   img[src$="/previous_disabled.gif" i],
img[src$="/pageup_disabled.gif" i], img[src$="/pagedown_disabled.gif" i],
img[src$="/nextpage.gif" i],  img[src$="/prevpage.gif" i],
img[src$="/watched_y.gif" i], img[src$="/watched_n.gif" i]{
  filter: none;
  width: 16px;
  height: 16px;
  vertical-align: -3px;
}

/* --- message actions ------------------------------------------------- */

/* delete checked -- stock was a red X; destructive keeps the alert hue */
img[src$="/msgdelete.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23ff6b5e' stroke-width='1.7' stroke-linecap='round'%3E%3Cpath d='M4.2 4.2l7.6 7.6M11.8 4.2l-7.6 7.6'/%3E%3C/svg%3E");
}
/* delete -- trash can */
img[src$="/delete.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23ff6b5e' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.6 4.4h10.8'/%3E%3Cpath d='M6.2 4.4V2.9h3.6v1.5'/%3E%3Cpath d='M4 4.4l.7 8.2a1 1 0 0 0 1 .9h4.6a1 1 0 0 0 1-.9l.7-8.2'/%3E%3Cpath d='M6.6 6.9v4.1M9.4 6.9v4.1'/%3E%3C/svg%3E");
}
/* mark as received -- envelope plus an amber check */
img[src$="/msgmark.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1.4' y='3.2' width='10.2' height='7.6' rx='1'/%3E%3Cpath d='M1.4 4.1l5.1 3.6 5.1-3.6'/%3E%3Cpath d='M9.5 11.5l2 2 3.1-4.2' stroke='%23ffb454' stroke-width='1.6'/%3E%3C/svg%3E");
}
/* junk -- envelope struck through */
img[src$="/msgjunk.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1.4' y='3.2' width='10.2' height='7.6' rx='1'/%3E%3Cpath d='M1.4 4.1l5.1 3.6 5.1-3.6'/%3E%3Ccircle cx='11.7' cy='11.4' r='3.3' stroke='%23ff6b5e'/%3E%3Cpath d='M9.4 9.1l4.6 4.6' stroke='%23ff6b5e'/%3E%3C/svg%3E");
}
/* reply -- arrow turning back */
img[src$="/reply.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6.1 3.6L2.3 7.2l3.8 3.6'/%3E%3Cpath d='M2.3 7.2h5.9a5.4 5.4 0 0 1 5.4 5.4v.8'/%3E%3C/svg%3E");
}
/* forward -- the same arrow, mirrored */
img[src$="/forward.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.9 3.6l3.8 3.6-3.8 3.6'/%3E%3Cpath d='M13.7 7.2H7.8a5.4 5.4 0 0 0-5.4 5.4v.8'/%3E%3C/svg%3E");
}
/* print */
img[src$="/print.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.6 6V2.7h6.8V6'/%3E%3Cpath d='M4.6 11.6H2.6a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h10.8a1 1 0 0 1 1 1v3.6a1 1 0 0 1-1 1h-2'/%3E%3Crect x='4.6' y='9.6' width='6.8' height='4' rx='.6'/%3E%3C/svg%3E");
}
/* attach -- paperclip */
img[src$="/attach.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12.4 7.4l-5.1 5.1a2.9 2.9 0 0 1-4.1-4.1l5.5-5.5a1.9 1.9 0 0 1 2.7 2.7l-5.4 5.4a1 1 0 0 1-1.4-1.4l4.8-4.8'/%3E%3C/svg%3E");
}
/* create new -- page with a plus */
img[src$="/create_new.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 2.2H4.4a1 1 0 0 0-1 1v9.6a1 1 0 0 0 1 1h7.2a1 1 0 0 0 1-1V5.8z'/%3E%3Cpath d='M9 2.2v3.6h3.6'/%3E%3Cpath d='M8 8.4v3.2M6.4 10h3.2'/%3E%3C/svg%3E");
}
/* write / pencil -- pencil over a ruled line */
img[src$="/write.gif" i], img[src$="/pencil.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10.8 1.7l2.5 2.5-7 7-3.3.8.8-3.3z'/%3E%3Cpath d='M9.6 2.9l2.5 2.5'/%3E%3Cpath d='M2.4 14.3h11.2'/%3E%3C/svg%3E");
}
/* no write -- the same pencil, faint and struck out */
img[src$="/nowrite.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%233f574c' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10.8 1.7l2.5 2.5-7 7-3.3.8.8-3.3z'/%3E%3Cpath d='M2.4 14.3h11.2'/%3E%3Cpath d='M2.2 2.2l11.6 11.6' stroke='%23ff6b5e'/%3E%3C/svg%3E");
}

/* --- mail state ------------------------------------------------------- */

/* sealed envelope -- an unread private message */
img[src$="/newpvtmsg.gif" i], img[src$="/pvtmsg.gif" i],
img[src$="/mail.gif" i], img[src$="/mail_icon.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1.6' y='3.4' width='12.8' height='9.2' rx='1'/%3E%3Cpath d='M1.6 4.4L8 9l6.4-4.6'/%3E%3C/svg%3E");
}
/* opened envelope, dimmed -- already read */
img[src$="/oldpvtmsg.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%232a9d5c' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1.6 7.2L8 2.6l6.4 4.6v5.4a1 1 0 0 1-1 1H2.6a1 1 0 0 1-1-1z'/%3E%3Cpath d='M1.6 7.2L8 11.4l6.4-4.2'/%3E%3C/svg%3E");
}
/* a stack of mail */
img[src$="/mails1.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1.4' y='4.8' width='11' height='8' rx='1'/%3E%3Cpath d='M1.4 5.7l5.5 3.9 5.5-3.9'/%3E%3Cpath d='M4.2 3h8.4a1 1 0 0 1 1 1v6.6'/%3E%3C/svg%3E");
}
/* inbox tray */
img[src$="/inbox.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1.8 9.4v3a1 1 0 0 0 1 1h10.4a1 1 0 0 0 1-1v-3'/%3E%3Cpath d='M1.8 9.4h3.2l1 2h4l1-2h3.2'/%3E%3Cpath d='M8 2v5.4M5.8 5.2L8 7.4l2.2-2.2'/%3E%3C/svg%3E");
}
/* mail question -- envelope with a query */
img[src$="/mailques.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1.4' y='3.2' width='10.2' height='7.6' rx='1'/%3E%3Cpath d='M1.4 4.1l5.1 3.6 5.1-3.6'/%3E%3Cpath d='M10.5 10.6a1.6 1.6 0 1 1 1.8 1.6v1' stroke='%23ffb454'/%3E%3Cpath d='M12.3 14.3v.1' stroke='%23ffb454' stroke-width='1.6'/%3E%3C/svg%3E");
}

/* --- chrome ----------------------------------------------------------- */

/* snoop / search -- magnifier */
img[src$="/snoop.gif" i], img[src$="/search.gif" i], img[src$="/spyglass.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round'%3E%3Ccircle cx='7' cy='7' r='4.4'/%3E%3Cpath d='M10.2 10.2l3.6 3.6'/%3E%3C/svg%3E");
}
img[src$="/zoomin.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round'%3E%3Ccircle cx='7' cy='7' r='4.4'/%3E%3Cpath d='M10.2 10.2l3.6 3.6'/%3E%3Cpath d='M4.9 7h4.2M7 4.9v4.2'/%3E%3C/svg%3E");
}
img[src$="/zoomout.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round'%3E%3Ccircle cx='7' cy='7' r='4.4'/%3E%3Cpath d='M10.2 10.2l3.6 3.6'/%3E%3Cpath d='M4.9 7h4.2'/%3E%3C/svg%3E");
}
/* log off -- out through the door. amber: it ends the session */
img[src$="/logoff.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23ffb454' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6.4 2.6H3.4a1 1 0 0 0-1 1v8.8a1 1 0 0 0 1 1h3'/%3E%3Cpath d='M10.2 5.2L13 8l-2.8 2.8'/%3E%3Cpath d='M13 8H6.4'/%3E%3C/svg%3E");
}
/* home */
img[src$="/homeicon.gif" i], img[src$="/home.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.2 7.6L8 2.6l5.8 5'/%3E%3Cpath d='M3.7 7.8v5a1 1 0 0 0 1 1h6.6a1 1 0 0 0 1-1v-5'/%3E%3C/svg%3E");
}
/* help -- open book */
img[src$="/helpbook.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M8 4.4C6.6 3.1 4.6 2.7 2.2 2.9v9.2c2.4-.2 4.4.2 5.8 1.5 1.4-1.3 3.4-1.7 5.8-1.5V2.9c-2.4-.2-4.4.2-5.8 1.5z'/%3E%3Cpath d='M8 4.4v9.2'/%3E%3C/svg%3E");
}
/* refresh */
img[src$="/refresh.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13.3 8a5.3 5.3 0 1 1-1.6-3.8'/%3E%3Cpath d='M13.5 2.2v3.4h-3.4'/%3E%3C/svg%3E");
}
/* one user */
img[src$="/user.gif" i], img[src$="/userinfo.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round'%3E%3Ccircle cx='8' cy='5.4' r='2.7'/%3E%3Cpath d='M3 13.4a5 5 0 0 1 10 0'/%3E%3C/svg%3E");
}
/* several users */
img[src$="/users.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round'%3E%3Ccircle cx='6.2' cy='5.6' r='2.4'/%3E%3Cpath d='M2 13.2a4.2 4.2 0 0 1 8.4 0'/%3E%3Cpath d='M10.6 3.7a2.4 2.4 0 0 1 0 3.8'/%3E%3Cpath d='M11.6 9.5a4.2 4.2 0 0 1 2.4 3.7'/%3E%3C/svg%3E");
}
/* forums -- two speech bubbles */
img[src$="/forums.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1.6 3.6a1 1 0 0 1 1-1h7.2a1 1 0 0 1 1 1v3.8a1 1 0 0 1-1 1H5.4L2.8 10.6V8.4h-.2a1 1 0 0 1-1-1z'/%3E%3Cpath d='M12.6 5.6a1 1 0 0 1 1 1v3.8a1 1 0 0 1-1 1v2.2l-2.6-2.2'/%3E%3C/svg%3E");
}
/* frames -- a split pane */
img[src$="/frames.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linejoin='round'%3E%3Crect x='1.8' y='2.8' width='12.4' height='10.4' rx='1.2'/%3E%3Cpath d='M6.6 2.8v10.4'/%3E%3C/svg%3E");
}
/* flat mode -- a plain list */
img[src$="/flatmode.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round'%3E%3Cpath d='M2.4 4.4h11.2M2.4 8h11.2M2.4 11.6h11.2'/%3E%3C/svg%3E");
}
/* execute -- run */
img[src$="/execute.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linejoin='round'%3E%3Ccircle cx='8' cy='8' r='5.8'/%3E%3Cpath d='M6.6 5.5l4.2 2.5-4.2 2.5z'/%3E%3C/svg%3E");
}
img[src$="/back.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M13.2 8H3.2'/%3E%3Cpath d='M6.8 4.4L3.2 8l3.6 3.6'/%3E%3C/svg%3E");
}
img[src$="/redarrow.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23ffb454' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.8 8h9.6'/%3E%3Cpath d='M8.8 4.4L12.4 8l-3.6 3.6'/%3E%3C/svg%3E");
}

/* --- locks ------------------------------------------------------------ */
img[src$="/lock.gif" i], img[src$="/secure.gif" i],
img[src$="/icon_folder_locked.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23ffb454' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3.2' y='7' width='9.6' height='6.6' rx='1.2'/%3E%3Cpath d='M5.4 7V5.2a2.6 2.6 0 0 1 5.2 0V7'/%3E%3C/svg%3E");
}
img[src$="/unlock.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%232a9d5c' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3.2' y='7' width='9.6' height='6.6' rx='1.2'/%3E%3Cpath d='M5.4 7V5.2a2.6 2.6 0 0 1 5.1-.6'/%3E%3C/svg%3E");
}

/* --- watch / favourite toggle -----------------------------------------
   recentmail.htm:116-120 writes these two src values from script, so
   both states need a glyph -- same rule as the resize pin in 14b.
   ---------------------------------------------------------------------- */
img[src$="/watched_y.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 1.8l1.9 3.9 4.3.6-3.1 3 .7 4.3L8 11.6l-3.8 2 .7-4.3-3.1-3 4.3-.6z' fill='%23ffb454' stroke='%23ffb454' stroke-width='1.1' stroke-linejoin='round'/%3E%3C/svg%3E");
}
img[src$="/watched_n.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 1.8l1.9 3.9 4.3.6-3.1 3 .7 4.3L8 11.6l-3.8 2 .7-4.3-3.1-3 4.3-.6z' fill='none' stroke='%232a9d5c' stroke-width='1.2' stroke-linejoin='round'/%3E%3C/svg%3E");
}

/* --- paging ------------------------------------------------------------ */

img[src$="/apagetop.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.2 2.8h9.6'/%3E%3Cpath d='M3.8 11.4L8 7.2l4.2 4.2'/%3E%3C/svg%3E");
}
img[src$="/dpagetop.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%233f574c' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.2 2.8h9.6'/%3E%3Cpath d='M3.8 11.4L8 7.2l4.2 4.2'/%3E%3C/svg%3E");
}
img[src$="/apagebottom.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.2 13.2h9.6'/%3E%3Cpath d='M3.8 4.6L8 8.8l4.2-4.2'/%3E%3C/svg%3E");
}
img[src$="/dpagebottom.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%233f574c' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.2 13.2h9.6'/%3E%3Cpath d='M3.8 4.6L8 8.8l4.2-4.2'/%3E%3C/svg%3E");
}
img[src$="/apageup.gif" i], img[src$="/pageup.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.6 10.2L8 5.8l4.4 4.4'/%3E%3C/svg%3E");
}
img[src$="/dpageup.gif" i], img[src$="/pageup_disabled.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%233f574c' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.6 10.2L8 5.8l4.4 4.4'/%3E%3C/svg%3E");
}
img[src$="/apagedown.gif" i], img[src$="/pagedown.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.6 5.8L8 10.2l4.4-4.4'/%3E%3C/svg%3E");
}
img[src$="/dpagedown.gif" i], img[src$="/pagedown_disabled.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%233f574c' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.6 5.8L8 10.2l4.4-4.4'/%3E%3C/svg%3E");
}
img[src$="/next.gif" i], img[src$="/nextpage.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 3.6L10.4 8 6 12.4'/%3E%3C/svg%3E");
}
img[src$="/next_disabled.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%233f574c' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 3.6L10.4 8 6 12.4'/%3E%3C/svg%3E");
}
img[src$="/previous.gif" i], img[src$="/prevpage.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%234df08a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 3.6L5.6 8l4.4 4.4'/%3E%3C/svg%3E");
}
img[src$="/previous_disabled.gif" i]{
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%233f574c' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 3.6L5.6 8l4.4 4.4'/%3E%3C/svg%3E");
}

/* --- the two that are not 16x16 ---------------------------------------
   hotnewmail.gif is 17x15 and new.gif is 32x16. They keep their own box
   so the swap causes no row-height shift.
   ---------------------------------------------------------------------- */

/* new mail waiting -- envelope with an amber pip */
img[src$="/hotnewmail.gif" i], img[src$="/flashnewmail.gif" i]{
  filter: none;
  width: 17px;
  height: 15px;
  vertical-align: -3px;
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 15' fill='none' stroke='%234df08a' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1.1' y='2.6' width='11.4' height='9.2' rx='1'/%3E%3Cpath d='M1.1 3.5l5.7 4 5.7-4'/%3E%3Ccircle cx='13.6' cy='3.4' r='2.6' fill='%23ffb454' stroke='none'/%3E%3C/svg%3E");
}

/* the NEW! flag on a message row -- stock is saturated yellow on white,
   the single loudest thing in the inbox. A bordered amber tag carries
   the same unread signal without shouting. Scoped to /images/new.gif so
   it does not catch the different new.gif in /public/graphics/. */
img[src$="/images/new.gif" i]{
  filter: none;
  width: 32px;
  height: 16px;
  vertical-align: -3px;
  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 16'%3E%3Crect x='.8' y='2.8' width='30.4' height='10.4' rx='2.2' fill='none' stroke='%23ffb454' stroke-width='1'/%3E%3Ctext x='16.7' y='11.1' text-anchor='middle' font-family='Consolas,Menlo,monospace' font-size='7.6' font-weight='600' letter-spacing='1.3' fill='%23ffb454'%3ENEW%3C/text%3E%3C/svg%3E");
}

a.item:hover img[src*="/images/"]{ filter: brightness(1.35); }

/* the "powered by" badge is the vendor's mark -- leave it alone, just
   knock it back so it does not glare */
img[src*="poweredby"], img[src*="wcpower"], img[src*="wcLogoTop"]{
  filter: none;
  opacity: .55;
}

/* =====================================================================
   15. INLINE style="" ATTRIBUTES
   ---------------------------------------------------------------------
   An inline style attribute beats every stylesheet rule regardless of
   specificity, so these are the only places !important is warranted.

   whos_online.htm lines 308-311 writes the row highlight inline:

       [SET] ROWCOLOR=
       [IF] USER.NAME = OTHERUSER.NAME  -> style='background:yellow;'
       [IF] NODE = OTHERNODE.NUMBER     -> style='background: #66FFCC;'
       <tr ... [SUB] ROWCOLOR>

   Matching the attribute text avoids overriding a 15 KB template for
   two colours. The i flag is needed because the template writes the hex
   in upper case. If a future update changes those literals, this stops
   matching and the bright row returns -- that is the trade for not
   carrying a full custom copy.
   ===================================================================== */

/* your own node.
   Every .whoText cell is transparent, so whatever lands on the <tr>
   paints the full 948px row. --phosphor-deep filled it solid, which made
   the one row you are least likely to need to read the loudest band on
   the page -- and it did not match the sibling state directly below,
   which is a soft amber tint. Both are now tints of their own hue, which
   is also the idiom .msglistmarker already uses. */
tr[style*="66ffcc" i]{
  background: rgba(77,240,138,.13) !important;
}
tr[style*="66ffcc" i] > td,
tr[style*="66ffcc" i] .whoText,
tr[style*="66ffcc" i] .whoIcons,
tr[style*="66ffcc" i] a{
  color: var(--phosphor) !important;
}

/* another session signed in as you */
tr[style*="background:yellow" i],
tr[style*="background: yellow" i]{
  background: rgba(255,180,84,.14) !important;
}
tr[style*="background:yellow" i] > td,
tr[style*="background: yellow" i] > td{
  color: var(--amber) !important;
}

/* chat.htm:70 and helpwindowframe.htm:21 */
div[style*="background: blue" i], td[style*="background: blue" i]{
  background: var(--panel-2) !important;
  color: var(--phosphor) !important;
}
div[style*="background: yellow" i]{
  background: rgba(255,180,84,.06) !important;
  color: var(--amber) !important;
  border-color: var(--amber-dim) !important;
}

/* LogoutPage.wct:117-119 */
[style*="background:green" i]{
  background: var(--phosphor-deep) !important;
  color: #eafff2 !important;
}
[style*="color:yellow" i]{ color: var(--amber) !important; }

/* personal_page_audio.htm, personal_page_general.htm, wcsmq.htm,
   WebError.htm -- plain red text on a now-dark ground */
[style*="color:red" i], [style*="color: red" i]{ color: var(--alert) !important; }
[style*="color: black" i]{ color: var(--text) !important; }

/* jQuery tipster / cluetip popups used by the file and mail lists */
#tipster-outer, #tipster-inner, #tipster-title,
#cluetip-inner, .cluetip-inner, .ui-tooltip, .wctipster{
  background: var(--panel) !important;
  color: var(--text) !important;
  border: 1px solid var(--rule-lit) !important;
  font-family: var(--mono) !important;
  font-size: 12px !important;
}

/* =====================================================================
   16. THEMED DIALOG
   ---------------------------------------------------------------------
   Native alert() and confirm() draw the browser's own chrome. Nothing can
   style them -- they are the one piece of UI a stylesheet cannot reach --
   so on a phosphor page they land as a grey OS panel. message_create.htm
   fires four of them: three alert() validations and, on every single
   post, confirm("Post Message?").

   This is the replacement. The markup is built by the script in
   YourBizHeader.htm, which also swaps out the stock ValidateFields()
   that calls them.

   It renders INSIDE the current frame, not window.top. The message
   client is a frameset, and a frameset document has no body to attach an
   overlay to.
   ===================================================================== */

.crt-dlg-overlay{
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  background: rgba(3,6,4,.72);
}

.crt-dlg{
  width: 100%;
  max-width: 380px;
  background: var(--panel);
  border: 1px solid var(--rule-lit);
  border-radius: var(--r-box);
  box-shadow: 0 10px 34px rgba(0,0,0,.6), inset 0 0 50px rgba(0,0,0,.35);
  padding: 18px 20px 16px;
  font-family: var(--mono);
  color: var(--text);
}

.crt-dlg-title{
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--phosphor-dim);
  border-bottom: 1px solid var(--rule);
  padding-bottom: 8px;
  margin-bottom: 12px;
}
.crt-dlg-title.is-alert{ color: var(--amber); border-bottom-color: var(--amber-dim); }

.crt-dlg-body{
  font-size: 13px;
  line-height: 1.55;
  color: var(--text);
  margin-bottom: 16px;
  word-wrap: break-word;
  /* Newlines in opts.message survive. build() sets textContent, so without
     this a two-part message (a filename, then what will happen to it)
     collapses onto one line. */
  white-space: pre-line;
}

.crt-dlg-actions{
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}

/* Repeats the full property set in :hover on purpose -- the stock sheets
   do it everywhere and it is the house style here; see section 12. */
.crt-dlg-actions button{
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  padding: 7px 16px;
  border-radius: var(--r-ctl);
  border: 1px solid var(--rule-lit);
  background: var(--panel-2);
  color: var(--text-dim);
  cursor: pointer;
}
.crt-dlg-actions button:hover{
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  padding: 7px 16px;
  border-radius: var(--r-ctl);
  border: 1px solid var(--rule-lit);
  background: var(--panel-3);
  color: var(--text);
  cursor: pointer;
}
.crt-dlg-actions button.crt-dlg-ok{
  border-color: var(--phosphor-deep);
  color: var(--phosphor);
}
.crt-dlg-actions button.crt-dlg-ok:hover{
  border-color: var(--phosphor);
  color: var(--phosphor);
  background: var(--panel-3);
}
.crt-dlg-actions button:focus,
.crt-dlg-actions button:focus-visible{
  outline: 1px solid var(--amber);
  outline-offset: 2px;
}

/* the field the validation complained about */
.crt-field-bad{
  border-color: var(--alert) !important;
  box-shadow: 0 0 6px rgba(255,107,94,.35) !important;
}

/* ---------------------------------------------------------------
   17. SEARCH -- message search form, message search results,
       file search results

   WHY THIS SECTION EXISTS

   message_search_form.htm and message_search.htm both include
   pageheader.inc, so this stylesheet already reaches them and most of
   the page inherits correctly. Two things did not, and both are legacy
   presentational ATTRIBUTES rather than classes, which is why no class
   selector anywhere above was catching them:

     message_search_form.htm:57   <table ... bgcolor="#DDDDDD">
     file_list.inc:72             <tr bgcolor="#dddddd"><th colspan=6>

   A bgcolor attribute is a "presentational hint": the browser maps it
   into the author origin but at the very bottom, below every author
   rule. So ANY author rule that sets background-color on the same
   element wins, with no !important needed. Nothing above set one on a
   bare <table> or <tr>, so the stock grey came through -- a light slab
   under the whole search panel, and a light band above every file-list
   area heading.

   file_list.inc is used by BOTH the file list and file search results,
   so that band was showing in two places.

   The generic de-slab below is deliberately broad (any element with a
   bgcolor attribute) because these are the only two live sites on a
   themed page, and a third one appearing after a WinServer update
   should land dark rather than light. login-noscript.wct also carries
   bgcolor attributes but never loads this sheet, so it is unaffected.
   --------------------------------------------------------------- */

table[bgcolor], tr[bgcolor], td[bgcolor], th[bgcolor]{
  background-color: transparent;
}

/* --- the area band in file listings and file search results ---------
   file_list.inc emits this row once per area when results cross an
   area boundary. Stock opens it <th> and closes it </td>; the parser
   repairs that to a th, so the selector is on th. Styled to match
   .tabletitle -- it is a heading for the rows under it, not a row. */
tr[bgcolor] th{
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .09em;
  text-transform: uppercase;
  text-align: left;
  color: var(--phosphor-dim);
  background: var(--panel-2);
  border-top: 1px solid var(--rule-lit);
  border-bottom: 1px solid var(--rule);
  padding: 9px 12px;
}

/* --- the message search form ----------------------------------------
   Scoped by form name rather than by a class, because the table has no
   class at all. The name is fixed: /public/js and the stock onClick
   handler both look the form up as SearchForm by name, so it cannot be
   renamed and the selector cannot go stale silently.

   Note attribute-value case: the HTML spec matches a small fixed list
   of attributes case-insensitively (align, bgcolor, type, nowrap...).
   "name" is NOT on that list, so form[name="SearchForm"] has to match
   the template's capitalisation exactly. It does. */
form[name="SearchForm"] > table{
  background: var(--panel);
  border: 1px solid var(--rule);
  border-radius: var(--r-box);
  border-collapse: separate;
  border-spacing: 0;
}
form[name="SearchForm"] td{
  padding: 7px 10px;
  vertical-align: middle;
}

/* The left column: "From:", "To:", "Subject:", "Message body:",
   "Listing Page Size:". Stock marks every label in this form with a
   bare <b>, including the two checkbox labels on the right -- so the
   uppercase treatment is scoped to the right-aligned label column and
   the checkbox labels stay sentence case, where shouting would read
   as emphasis that is not there. */
form[name="SearchForm"] b{
  font-family: var(--mono);
  font-weight: 500;
  color: var(--text);
}
form[name="SearchForm"] td[align="right"] b{
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--phosphor-dim);
}

/* The four search fields carry size=50 and no type attribute at all,
   so they are matched by name. Letting them fill the cell beats a
   character count that assumes a proportional 8pt face. */
form[name="SearchForm"] input[name="tarfrom"],
form[name="SearchForm"] input[name="tarto"],
form[name="SearchForm"] input[name="tarsubject"],
form[name="SearchForm"] input[name="tarbody"]{
  width: 100%;
  box-sizing: border-box;
}
form[name="SearchForm"] input[name="tarpagesize"]{
  width: 5em;
  text-align: right;
  font-variant-numeric: tabular-nums;
}
form[name="SearchForm"] input[type="checkbox"]{
  margin: 0 4px 0 10px;
  vertical-align: middle;
}

/* The submit row sits in its own tr with no separator above it. */
form[name="SearchForm"] tr:last-child td{
  border-top: 1px solid var(--rule);
  padding: 12px 10px;
}
form[name="SearchForm"] input[type="submit"]{
  border-color: var(--phosphor-deep);
  margin-right: 8px;
}
form[name="SearchForm"] input[type="submit"]:disabled{
  color: var(--text-faint);
  border-color: var(--rule);
  background: var(--panel-2);
  cursor: default;
}

/* --- empty results, file side ---------------------------------------
   Two blocks share this. file_search.htm wraps the "File Search
   Result: ..." message in div#idFSearch when FSEARCH.TOTAL is 0 --
   stock gives it no styling at all, so it landed as a bare paragraph.
   custom\file_new.htm adds .crt-empty for the same situation on the
   new-files page, which stock never handled.

   Both are an OUTCOME, not an error, so they get the quiet panel with
   a phosphor left rule rather than the amber .warning treatment. That
   distinction matters more since the new-files page became the file
   client's landing page -- see THEME.md section 16. */
#idFSearch, .crt-empty{
  max-width: 640px;
  margin: 18px auto;
  padding: 14px 16px;
  font-family: var(--mono);
  font-size: 13px;
  color: var(--text);
  background: var(--panel);
  border: 1px solid var(--rule);
  border-left: 3px solid var(--phosphor-deep);
  border-radius: var(--r-box);
}
#idFSearch p, .crt-empty p{ margin: 0 0 6px; font-family: var(--mono); }
#idFSearch p:last-child, .crt-empty p:last-child{ margin-bottom: 0; }

/* Checkbox labels sit next to the 11px uppercase field labels, so at the
   inherited 13px they out-weighed the things they belong to. */
form[name="SearchForm"] td b{ font-size: 12px; }

/* An UNCHECKED checkbox is drawn by the browser's own form-control
   renderer, which accent-color does not reach -- it only tints the
   checked mark. In a light color-scheme that is a white box, and on this
   page it was the loudest light element left.

   color-scheme:dark switches the native renderer, so the box is drawn
   dark. It is scoped to the control rather than :root on purpose:
   setting it on :root would also repaint every <select> dropdown and the
   scrollbars, which are already themed by hand above and would then be
   fighting two sources. */
input[type="checkbox"], input[type="radio"]{ color-scheme: dark; }

/* The new-files empty block opens with an h3; the global h3 top margin
   would push it off the panel's own padding. */
.crt-empty > h3:first-child{ margin-top: 0; }

/* Safety net for the recent-mail empty block in custom\recentmail.htm.

   That template decides emptiness with a flag set inside the row loop,
   because RM.MSGS.TOTAL comes back EMPTY rather than 0 and an empty
   value does not compare equal to zero in WCT. The flag is the primary
   mechanism and a FOR-loop test on this server confirms a variable set
   inside a loop survives it -- but a populated LOOP could not be
   exercised without a logged-in session, so this guarantees the block
   can never appear above a list that does have messages in it.

   Message links carry target="body"; the conference heading link does
   not, so this matches only real message rows. */
.recentMail:has(a[target="body"]) .crt-empty{ display: none; }

/* =====================================================================
   18. STOCK <style> BLOCKS EMITTED AFTER THIS SHEET

   pageheader.inc pulls this stylesheet in from inside <body>, which
   normally means we win on source order (see the note at the top of
   section 11). Two stock templates break that assumption by emitting a
   <style> block of their OWN even later in the body:

     message_inbox.htm   pageheader.inc line 71, <style> line 168
     file_list.inc       included further down still, <style> line 21

   At equal specificity the later rule wins, so these beat us. Found by
   sweeping the logged-in client, not by reading the templates -- both
   look inert on the page.

   The inbox one was not cosmetic. Stock says

       .msglistcol { font-family: Arial; font-size: 8pt; color: Black; }

   and our .msglistcol rule is also a single class, so Black won: the
   whole inbox message list rendered black on the void and was, in
   practice, invisible. Measured rgb(0,0,0) on every cell.

   Fix by out-specifying rather than reordering -- a stock @include
   cannot be moved without copying the template. Every .msglistcol is a
   <td>, so an element qualifier is enough to take it to (0,1,1).
   ===================================================================== */

td.msglistcol, th.msglistcol{
  font-family: var(--mono);
  font-size: 12px;
  color: var(--text);
}

/* file_list.inc's block is font-only -- it sets no colour on cells, so
   this one really was cosmetic: Verdana 8pt instead of the theme mono.
   Cells only. The area band's <th> is already carried by the
   tr[bgcolor] th rule in section 17, which is (0,1,2) and beats stock's
   bare th; restating th here would override that band's own type. */
table.tablelist td{
  font-family: var(--mono);
  font-size: 12px;
}

/* =====================================================================
   19. THE FILE-INFO MEDIA PLAYER

   custom\File_Info_MediaWindow.inc replaces stock's two audio branches
   -- an iframe on the wcflash module pointed at a folder that does not
   exist, and a Java applet whose class file is not on disk -- with one
   HTML5 audio element on the same file path the video branch uses.

   A native <audio> control cannot be restyled directly; the browser
   draws it. color-scheme is the lever that works, the same one the
   unchecked checkbox needed in section 12: it tells Chromium to render
   its built-in control dark instead of as a light pill on the void.
   ===================================================================== */

/* Deliberately unscoped: any media element anywhere on the themed site
   should draw its controls dark, not just this one. */
audio, video{
  color-scheme: dark;
}
.crt-audio audio{
  width: 100%;
  max-width: 480px;
  display: block;
  margin: 0 auto;
}

/* The download link under the player. It is there as a tell: the area
   token in the file path could not be verified from outside, because an
   anonymous request 401s before it resolves. If the player ever fails
   to load, this is what says so rather than leaving a dead control. */
.crt-audio-alt{
  margin-top: 8px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: .04em;
}
.crt-audio-alt a{ color: var(--phosphor-dim); }
.crt-audio-alt a:hover{ color: var(--phosphor); }
