/* ============================================================================
   ReqDeck — shared theme
   Design tokens + shell chrome (header, app-switcher, nav, chips, buttons,
   modal, toast, unlock panel, client badge).

   Loaded by every app. App-specific CSS stays inline in each app's own file.
   Never hardcode a hex value below the :root block.
   ========================================================================== */

:root{
  --bg:#0e1216; --bg2:#12171d; --panel:#161d24; --panel2:#1b232c;
  --line:#26303b; --line2:#324050;
  --text:#dce6ee; --dim:#7f8fa0; --faint:#54626f;
  --amber:#ffb224; --amber-dim:#8a6413;
  --teal:#35d4bd; --red:#ff5f56; --green:#57d97e; --blue:#5aa7ff; --violet:#b48bff;
  --orange:#ff8a3d;
  --mono:'IBM Plex Mono',ui-monospace,monospace;
  --disp:'Archivo',sans-serif;
}

/* readability modes — toggled by core.js, persisted per client */
.t-bright{ --text:#eaf2f9; --dim:#9dabbb; --faint:#6d7c8b; }
.t-sans  { --body:var(--disp); }

*{box-sizing:border-box;margin:0;padding:0}
html{scrollbar-color:var(--line2) var(--bg)}
body{
  background:var(--bg); color:var(--text); font:14px/1.5 var(--mono); min-height:100vh;
  background-image:
    radial-gradient(1200px 500px at 80% -10%, rgba(255,178,36,.05), transparent 60%),
    radial-gradient(900px 400px at 0% 110%, rgba(53,212,189,.04), transparent 60%),
    repeating-linear-gradient(0deg, transparent 0 2px, rgba(255,255,255,.006) 2px 4px);
}
a{color:var(--blue)}

/* ---------- header ---------- */
header{
  display:flex; align-items:center; gap:20px; flex-wrap:wrap;
  padding:18px 28px 14px; border-bottom:1px solid var(--line);
  background:linear-gradient(180deg, rgba(255,178,36,.03), transparent);
}
.wordmark{font-family:var(--disp); font-weight:850; font-stretch:118%; font-size:21px; letter-spacing:.02em}
.wordmark .rx{color:var(--amber)}
.wordmark small{display:block; font:600 10px/1 var(--mono); color:var(--faint); letter-spacing:.34em; margin-top:4px}

/* ---------- client badge — the anti-mixup control ----------
   Always visible. Demo clients are teal, real clients amber. If you can see
   this badge you know whose candidate data is on screen.                     */
.clientbadge{
  display:inline-flex; align-items:center; gap:7px; margin-left:2px;
  font:700 10px var(--mono); letter-spacing:.16em; text-transform:uppercase;
  border:1px solid var(--amber-dim); background:rgba(255,178,36,.09);
  color:var(--amber); border-radius:3px; padding:6px 10px; white-space:nowrap;
}
.clientbadge.demo{ border-color:rgba(53,212,189,.4); background:rgba(53,212,189,.08); color:var(--teal) }
.clientbadge .sw{ font-size:9px; color:var(--faint); letter-spacing:.1em }
.clientbadge:hover .sw{ color:var(--text) }

/* ---------- app switcher ---------- */
.appsw{display:flex; gap:6px; margin-left:14px; flex-wrap:wrap}
.appsw a{font:600 10px var(--mono); letter-spacing:.14em; text-decoration:none; color:var(--dim); border:1px solid var(--line); border-radius:3px; padding:5px 9px}
.appsw a:hover{color:var(--text); border-color:var(--line2)}
.appsw a.on{color:var(--amber); border-color:var(--amber-dim); background:rgba(255,178,36,.06)}
.appsw a.locked{color:var(--faint); border-style:dashed; cursor:help}
.appsw a.locked:hover{color:var(--dim); border-color:var(--line)}

/* ---------- header stats ---------- */
.statstrip{display:flex; gap:26px; margin-left:auto}
.stat{text-align:right}
.stat b{font-family:var(--disp); font-weight:800; font-size:22px; display:block; letter-spacing:.01em}
.stat span{font-size:10px; color:var(--dim); letter-spacing:.18em; text-transform:uppercase}
.stat.hot b, .stat.mine b{color:var(--amber)}
.stat.new b{color:var(--teal)}
.stat.due b{color:var(--red)}

/* ---------- toolbar ---------- */
nav{display:flex; align-items:center; gap:8px; padding:12px 28px; border-bottom:1px solid var(--line); flex-wrap:wrap; position:sticky; top:0; background:var(--bg); z-index:5}
.fchip{
  font:600 11px var(--mono); letter-spacing:.08em; text-transform:uppercase;
  color:var(--dim); background:none; border:1px solid var(--line); border-radius:3px;
  padding:6px 11px; cursor:pointer; transition:all .15s;
}
.fchip:hover{color:var(--text); border-color:var(--line2)}
.fchip.on{color:var(--amber); border-color:var(--amber-dim); background:rgba(255,178,36,.06)}
.fchip .n{color:var(--faint); margin-left:5px}
.fchip.on .n{color:var(--amber-dim)}
.fdiv{width:1px; height:19px; background:var(--line); margin:0 3px; flex:none}
.spacer{flex:1}
.sortlbl{font-size:10px; color:var(--faint); letter-spacing:.14em; text-transform:uppercase}

input[type=text], input[type=search], input[type=number], textarea{
  font:13px var(--mono); color:var(--text); background:var(--panel2);
  border:1px solid var(--line2); border-radius:3px; padding:7px 11px; outline:none;
}
input:focus, textarea:focus{border-color:var(--amber)}
select{
  font:12px var(--mono); color:var(--text); background:var(--panel2);
  border:1px solid var(--line2); border-radius:3px; padding:6px 9px; outline:none; cursor:pointer;
}
select:focus{border-color:var(--amber)}
.btn{
  font:600 11px var(--mono); letter-spacing:.1em; text-transform:uppercase;
  color:var(--text); background:var(--panel2); border:1px solid var(--line2);
  border-radius:3px; padding:7px 12px; cursor:pointer; transition:all .15s;
}
.btn:hover{border-color:var(--amber); color:var(--amber)}
.btn:disabled{opacity:.4; cursor:not-allowed}
.btn.danger:hover{border-color:var(--red); color:var(--red)}

main{padding:20px 28px 90px; max-width:1560px; margin:0 auto}

/* ---------- toast ---------- */
#dcToast{
  position:fixed; left:50%; bottom:28px; transform:translateX(-50%) translateY(14px);
  background:var(--panel2); border:1px solid var(--line2); border-radius:4px;
  padding:10px 18px; font:600 12px var(--mono); color:var(--text);
  opacity:0; pointer-events:none; transition:all .2s; z-index:200;
}
#dcToast.show{opacity:1; transform:translateX(-50%)}
#dcToast.err{border-color:var(--red); color:var(--red)}

/* ---------- modal ---------- */
.dcmodal{
  position:fixed; inset:0; background:rgba(6,9,12,.78); z-index:150;
  display:none; align-items:flex-start; justify-content:center; padding:60px 20px; overflow:auto;
}
.dcmodal.show{display:flex}
.dcmodal .sheet{
  background:var(--panel); border:1px solid var(--line2); border-radius:6px;
  width:100%; max-width:720px; padding:22px 24px;
}
.dcmodal h2{font-family:var(--disp); font-weight:800; font-size:18px; margin-bottom:4px}
.dcmodal .sub{color:var(--dim); font-size:12px; margin-bottom:16px}
.dcmodal .foot{display:flex; gap:8px; justify-content:flex-end; margin-top:20px}

/* ---------- fatal screen ----------
   Shown when ?c= is missing or the client fails to load. Never render an app
   in a half-configured state — an empty board is indistinguishable from a
   client with zero open reqs, and that ambiguity is how you work the wrong
   client's pipeline for an hour.                                            */
.dcfatal{max-width:660px; margin:14vh auto; padding:0 24px}
.dcfatal h1{font-family:var(--disp); font-weight:850; font-size:26px; margin-bottom:10px}
.dcfatal h1 .rx{color:var(--red)}
.dcfatal p{color:var(--dim); line-height:1.7; margin-bottom:14px}
.dcfatal code{background:var(--panel2); border:1px solid var(--line); border-radius:3px; padding:2px 6px; color:var(--amber)}
.dcfatal ul{list-style:none; margin:18px 0}
.dcfatal li{padding:9px 0; border-top:1px solid var(--line)}
.dcfatal li a{text-decoration:none; font-weight:600}
.dcfatal li span{color:var(--faint); font-size:11px; display:block; margin-top:2px}

/* ---------- tier lock panel ----------
   A locked app tells you exactly which artifact unlocks it. Never a blank
   page, never a crash.                                                       */
.dclock{
  max-width:620px; margin:12vh auto; text-align:center; padding:0 24px;
}
.dclock .ico{font-size:34px; display:block; margin-bottom:14px; opacity:.55}
.dclock h2{font-family:var(--disp); font-weight:800; font-size:21px; margin-bottom:10px}
.dclock p{color:var(--dim); line-height:1.7; margin-bottom:8px}
.dclock .need{
  display:inline-block; margin:16px 0 20px; padding:12px 18px;
  border:1px dashed var(--line2); border-radius:4px; background:var(--panel);
  color:var(--amber); font-size:12.5px;
}

/* ---------- warning banners ---------- */
.dcbanner{
  padding:9px 28px; font:600 11px var(--mono); letter-spacing:.06em;
  border-bottom:1px solid var(--line);
}
.dcbanner.demo{ background:rgba(53,212,189,.08); color:var(--teal); border-bottom-color:rgba(53,212,189,.3) }
.dcbanner.warn{ background:rgba(255,178,36,.08); color:var(--amber); border-bottom-color:var(--amber-dim) }
.dcbanner.err { background:rgba(255,95,86,.09);  color:var(--red);   border-bottom-color:rgba(255,95,86,.4) }

/* ---------- selftest harness ---------- */
#dcSelftest{padding:24px 28px; font-size:13px}
#dcSelftest h1{font-family:var(--disp); font-size:20px; margin-bottom:14px}
#dcSelftest .tcase{padding:5px 0; border-top:1px solid var(--line)}
#dcSelftest .pass{color:var(--green)}
#dcSelftest .fail{color:var(--red); font-weight:700}
#dcSelftest .sum{margin:16px 0; font-family:var(--disp); font-size:17px; font-weight:800}
