/* css/modules/cc.css: the .cc-* module — client contacts and client notes.
   Load order is core.css, then every modules/*.css alphabetically; no selector
   in this file appears in any other (asserted in tests/css-split-check.js).
   `.reg-err` is deliberately NOT restated here: the refusal box belongs to
   css/modules/reg.css and this screen reuses it, because a second copy of that
   rule would let the alphabet decide which one wins. */

/* ==========================================================================
   CLIENT CONTACTS & CLIENT NOTES   prefix: cc-
   --------------------------------------------------------------------------
   TWO HATCHES, and both of them mean the same thing: nobody has checked.

   · A contact NOBODY HAS EVER CONFIRMED (NF.contactStale → stale:null,
     known:false) is neither fresh nor stale, so it is neither green nor amber.
     It is HATCHED, exactly as .cmp-pill--indet and .adb-chip--never are, and
     for the same reason: a hatch reads as "no answer here" rather than as a
     grade on a scale, and a green tick on a number nobody has checked is what
     puts a driver at a gate ringing a dead line.

   · An AI NOTE NOBODY HAS CHECKED is the same claim about a different kind of
     record — a machine sentence sitting in a client's file, which the next
     person will read as something somebody verified unless the screen says
     otherwise. So it carries the SAME hatch, on the whole card rather than a
     chip, plus its provenance in plain sight. Once a person checks it the hatch
     goes and a solid border replaces it — but the "AI-authored" chip stays,
     because a check records who read it, not who wrote it.

   The hatch is deliberately the same 135° repeating gradient used by the two
   modules above. Three places drawing "unknown" three different ways is how a
   reader learns to read one of them as a decoration.
   ========================================================================== */

/* THE IDENTITY BANNER — the same component as .adb-actor on #/locations, and
   the values here are ITS values, deliberately. The two had drifted (12.5px vs
   13px label; 5px 8px vs 8px 11px on the select) and a dispatcher who sees both
   screens in one morning should not be able to tell them apart. They are two
   blocks rather than one shared class because css/core.css is the only file
   that could legally own a shared .actorbar and a four-declaration saving is
   not worth putting every screen in the app in the blast radius.

   Both fixes are the same as adb.css's, for the same measured reasons: .card
   declares no padding, so this one computed to 0px and sat flush against its
   border; and with no flex-grow on either child the sentence ran to its
   max-content on one line, leaving 883px of dead space to the right of its ink
   at 2560px (38.9% of the card). Growing the box would not have moved the ink —
   the line ends where the words end — so the bar stops at a readable measure
   and the sentence wraps inside it, beside the name it qualifies. */
.cc-actor{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap;
  padding:14px 18px;margin-bottom:14px;max-width:900px}
.cc-actor label{font-weight:800;font-size:13px;display:flex;align-items:center;gap:8px}
.cc-actor select{padding:8px 11px;border:1px solid var(--line);border-radius:9px;
  font-family:var(--font);font-weight:700;font-size:13px;background:#fff}
.cc-actor span{flex:1 1 300px;color:var(--muted);font-weight:700;font-size:12px;line-height:1.55}

/* Unpadded .card, like the bar above it — a padded bar over a flush filter row
   reads as a mistake rather than as a fix. */
.cc-filters{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  padding:14px 18px;margin-bottom:14px}
.cc-filters label{display:flex;align-items:center;gap:8px;font-weight:800;font-size:12.5px}
.cc-filters input[type=text],.cc-filters input:not([type]){padding:6px 9px;border:1px solid var(--line);border-radius:8px;font:inherit;min-width:260px}
.cc-cb{font-weight:700;color:var(--muted)}

.cc-lead{padding:16px 18px;margin-bottom:14px}
.cc-tot{display:flex;flex-wrap:wrap;gap:16px;margin:6px 0 2px}
.cc-tot__i{display:inline-flex;align-items:center;font-weight:800;font-size:12.5px}
.cc-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px;vertical-align:-1px}
.cc-dot--ok{background:var(--ok)}
.cc-dot--old{background:var(--orange)}
.cc-dot--never{background:var(--red)}
.cc-dot--ai{background:#7a6520}

.cc-note{margin:6px 0 0;color:var(--muted);font-weight:600;font-size:12px;line-height:1.55}
.cc-none{color:var(--muted);font-weight:700;font-size:12.5px}
.cc-sub{display:block;color:var(--muted);font-weight:600;font-size:11px;margin-top:2px}
/* "At no delivery location" is a fact about the person, not a warning — but
   it is an absence, so it is toned as one rather than as ordinary detail. */
.cc-sub--un{font-style:italic}
.cc-sub a{color:var(--blue);font-weight:700}
.cc-empty{padding:22px}
.cc-empty b{font-size:14px}
.cc-back{background:none;border:0;padding:0 0 10px;color:var(--blue);font:inherit;font-weight:800;cursor:pointer}

#cc-clients tbody tr{cursor:pointer}

.cc-head__t{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cc-head__t h2{margin:0;font-size:19px}

/* ---- currency chips: three states, three renderings ---------------------- */
.cc-chip{display:inline-block;padding:2px 8px;border-radius:6px;font-size:11px;
  font-weight:800;line-height:1.6;white-space:nowrap}
.cc-chip--ok{background:rgba(31,157,85,.12);color:#14663a;border:1px solid rgba(31,157,85,.35)}
.cc-chip--old{background:rgba(245,138,42,.14);color:#8a4a05;border:1px solid rgba(245,138,42,.45)}
/* Never confirmed — HATCHED, never a flat fill and never green. */
.cc-chip--never{color:#5b2b00;border:1px dashed var(--red);
  background:repeating-linear-gradient(135deg,rgba(242,60,0,.10) 0 5px,rgba(242,60,0,.02) 5px 10px)}
.cc-chip--none{background:#eef1f6;color:var(--muted);border:1px solid var(--line)}
.cc-chip--arch{background:#eef1f6;color:var(--muted);border:1px solid var(--line)}
/* A client that is not on the register at all — a third answer, not "archived". */
.cc-chip--gone{color:#5b2b00;border:1px dashed var(--red);
  background:repeating-linear-gradient(135deg,rgba(242,60,0,.10) 0 5px,rgba(242,60,0,.02) 5px 10px)}
.cc-chip--human{background:rgba(37,82,164,.10);color:#1b3f7d;border:1px solid rgba(37,82,164,.32)}
/* AI, unchecked — the same hatch the never-confirmed chip carries. */
.cc-chip--ai{background:repeating-linear-gradient(135deg,#f4f2ea,#f4f2ea 5px,#eae6d8 5px,#eae6d8 10px);
  color:#7a6520;border:1px dashed #c9b877}
.cc-chip--aiok{background:rgba(31,157,85,.10);color:#14663a;border:1px solid rgba(31,157,85,.32)}

/* ---- how to reach somebody ----------------------------------------------- */
.cc-reach{min-width:230px}
.cc-r{display:block;font-weight:700;font-size:12px;margin-bottom:2px}
.cc-pref{display:block;color:var(--muted);font-weight:700;font-size:11px;margin-top:3px}
/* "Nobody has said how to reach this contact" is not "ring the mobile" — it is
   an absence, and it is toned as one rather than left looking like a setting. */
.cc-pref--un{color:#8a4a05}
.cc-acts{white-space:nowrap}
.cc-acts .btn{margin-right:6px}

/* ---- the add forms -------------------------------------------------------- */
.cc-add{border-top:1px dashed var(--line);margin-top:14px;padding-top:6px}
.cc-add__row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.cc-add__row input,.cc-add__row select{padding:7px 9px;border:1px solid var(--line);border-radius:8px;font:inherit;min-width:170px}
#cc-n-body{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font:inherit;margin-bottom:8px}

/* ---- a note --------------------------------------------------------------- */
.cc-nt{border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:12px;background:#fff}
.cc-nt__hd{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.cc-nt__when{margin-left:auto;color:var(--muted);font-weight:700;font-size:11.5px}
.cc-nt__body{margin:0;font-weight:600;font-size:13.5px;line-height:1.6}
/* UNVERIFIED AI — hatched card, dashed border. Never a flat fill, and never
   plain prose sitting alongside a note a person wrote. */
.cc-nt--unver{border:1px dashed #c9b877;
  background:repeating-linear-gradient(135deg,#faf9f4,#faf9f4 6px,#f2efe3 6px,#f2efe3 12px)}
.cc-nt--ai .cc-nt__body{font-style:italic}
.cc-prov{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;margin:10px 0 0;
  font-size:11.5px;font-weight:700}
.cc-prov dt{color:var(--muted);text-transform:uppercase;letter-spacing:.4px}
.cc-prov dd{margin:0;color:var(--ink);font-weight:600}
