/* ============================================================
   CASHLESS DESIGN SYSTEM  v1
   Zero dependencies. No CDN, no framework, no webfont fetch.
   ============================================================ */

/* ---------- 1. TOKENS ---------- */
:root{
  /* surface ramp - near-black with a cool cast, not flat #000 */
  --s-0:#07090c; --s-1:#0b0e13; --s-2:#11151c; --s-3:#171c25; --s-4:#1f2530;
  --line:#232a36; --line-2:#2e3745;

  /* ink */
  --ink:#e9edf4; --ink-2:#a4aec0; --ink-3:#6b7688; --ink-4:#454e5e;

  /* brand: signal green (heritage nod) + plasma cyan */
  --a:#3ddc84; --a-2:#2bb96b; --a-dim:rgba(61,220,132,.12); --a-line:rgba(61,220,132,.32);
  --b:#22d3ee; --b-dim:rgba(34,211,238,.10);
  --warn:#fbbf24; --warn-dim:rgba(251,191,36,.12);
  --bad:#f4557a;  --bad-dim:rgba(244,85,122,.12);

  --grad: linear-gradient(135deg,var(--a) 0%, var(--b) 100%);

  /* type */
  --sans:ui-sans-serif,-apple-system,"Segoe UI",Inter,Roboto,"Helvetica Neue",Arial,sans-serif;
  --mono:ui-monospace,"SF Mono","Cascadia Code","JetBrains Mono",Menlo,Consolas,monospace;

  /* geometry */
  --r:12px; --r-lg:18px; --r-sm:8px;
  --pad:clamp(16px,4vw,28px);
  --shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px -12px rgba(0,0,0,.6);
  --glow:0 0 0 1px var(--a-line),0 0 32px -8px rgba(61,220,132,.35);
  --ease:cubic-bezier(.22,.61,.36,1);
}
:root[data-theme="light"]{
  --s-0:#f6f7f9; --s-1:#fff; --s-2:#fff; --s-3:#f1f3f6; --s-4:#e7eaef;
  --line:#e2e6ec; --line-2:#cfd6e0;
  --ink:#0d1117; --ink-2:#4a5567; --ink-3:#6f7b8d; --ink-4:#9aa5b5;
  --a:#0f9d58; --a-2:#0b7a44; --a-dim:rgba(15,157,88,.10); --a-line:rgba(15,157,88,.28);
  --b:#0891b2; --shadow:0 1px 2px rgba(16,24,40,.06),0 8px 24px -12px rgba(16,24,40,.18);
  --glow:0 0 0 1px var(--a-line),0 0 24px -10px rgba(15,157,88,.35);
}

/* ---------- 2. RESET ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0; background:var(--s-0); color:var(--ink);
  font:15px/1.55 var(--sans);
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  min-height:100dvh;
}
/* ambient field - pure CSS, no images */
body::before{
  content:""; position:fixed; inset:0; z-index:-1; pointer-events:none;
  background:
    radial-gradient(60rem 40rem at 12% -10%, rgba(61,220,132,.07), transparent 60%),
    radial-gradient(50rem 36rem at 92% 4%, rgba(34,211,238,.06), transparent 60%);
}
img,svg{max-width:100%;height:auto;display:block}
a{color:var(--a);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3,h4{margin:0;line-height:1.2;letter-spacing:-.02em;font-weight:650}
h1{font-size:clamp(24px,3.4vw,34px)}
h2{font-size:clamp(19px,2.2vw,23px)}
h3{font-size:16px}
p{margin:0 0 1em}
small{font-size:12.5px;color:var(--ink-3)}
code,kbd{font-family:var(--mono);font-size:.92em}
::selection{background:var(--a);color:#05210f}
:focus-visible{outline:2px solid var(--a);outline-offset:2px;border-radius:4px}

/* ---------- 3. LAYOUT ---------- */
.wrap{width:min(1180px,100% - 2*var(--pad));margin-inline:auto}
.wrap-sm{width:min(560px,100% - 2*var(--pad));margin-inline:auto}
.wrap-md{width:min(860px,100% - 2*var(--pad));margin-inline:auto}
.stack>*+*{margin-top:var(--gap,16px)}
.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.row-between{display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.grid{display:grid;gap:14px}
.g-2{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr))}
.g-3{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr))}
.g-4{grid-template-columns:repeat(auto-fit,minmax(min(100%,160px),1fr))}
.spacer{flex:1}
.mt{margin-top:22px}.mb{margin-bottom:22px}
.center{text-align:center}
.hidden,[hidden]{display:none !important}

/* ---------- 4. TOP BAR ---------- */
.topbar{
  position:sticky;top:0;z-index:50;
  background:color-mix(in srgb,var(--s-1) 82%,transparent);
  backdrop-filter:blur(14px) saturate(1.4);
  border-bottom:1px solid var(--line);
}
.topbar-in{display:flex;align-items:center;gap:18px;height:58px}
.brand{display:flex;align-items:center;gap:10px;font-weight:680;letter-spacing:-.02em;color:var(--ink);font-size:16px}
.brand:hover{text-decoration:none}
.brand .mark{width:26px;height:26px;flex:0 0 26px}
.brand .dot{color:var(--a)}
.navlinks{display:flex;gap:2px;margin-left:auto;align-items:center;flex-wrap:wrap}
.navlinks a{
  color:var(--ink-2);padding:7px 12px;border-radius:var(--r-sm);font-size:13.5px;font-weight:500;
  transition:background .16s var(--ease),color .16s var(--ease);
}
.navlinks a:hover{background:var(--s-3);color:var(--ink);text-decoration:none}
.navlinks a[aria-current]{background:var(--a-dim);color:var(--a);box-shadow:inset 0 0 0 1px var(--a-line)}

/* icon sizing - must come before the component overrides below */
.ico{width:22px;height:22px;flex:0 0 22px}
.note .i{width:18px;height:18px;flex:0 0 18px}
.btn svg{width:16px;height:16px;flex:0 0 16px}
.card-hd .ico{width:24px;height:24px;flex:0 0 24px;color:var(--ink-3)}

/* ---------- 5. SURFACES ---------- */
.card{
  background:linear-gradient(180deg,var(--s-2),var(--s-1));
  border:1px solid var(--line);border-radius:var(--r-lg);
  padding:var(--pad);box-shadow:var(--shadow);
}
.card-tight{padding:16px}
.card-hd{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}
.card-hd h2,.card-hd h3{margin:0}
.panel{background:var(--s-1);border:1px solid var(--line);border-radius:var(--r);padding:16px}
.divide{height:1px;background:var(--line);margin:20px 0;border:0}

/* interactive tile */
.tile{
  position:relative;display:block;overflow:hidden;
  background:linear-gradient(180deg,var(--s-2),var(--s-1));
  border:1px solid var(--line);border-radius:var(--r-lg);padding:20px;
  color:inherit;transition:transform .22s var(--ease),border-color .22s var(--ease),box-shadow .22s var(--ease);
}
.tile::after{
  content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  background:radial-gradient(28rem 20rem at var(--mx,50%) var(--my,0%),rgba(61,220,132,.10),transparent 55%);
  opacity:0;transition:opacity .3s var(--ease);
}
.tile:hover{transform:translateY(-3px);border-color:var(--a-line);box-shadow:var(--glow);text-decoration:none}
.tile:hover::after{opacity:1}
.tile .ico{width:34px;height:34px;margin-bottom:12px;color:var(--a)}
.tile .t{font-weight:640;font-size:15.5px;letter-spacing:-.01em}
.tile .d{color:var(--ink-3);font-size:13px;margin-top:4px;line-height:1.45}
.tile .go{margin-top:14px;font-size:12px;color:var(--a);font-family:var(--mono);opacity:.75}

/* ---------- 6. STAT ---------- */
.stat{background:var(--s-1);border:1px solid var(--line);border-radius:var(--r);padding:16px 18px}
.stat .k{font-size:11px;text-transform:uppercase;letter-spacing:.09em;color:var(--ink-3);font-weight:600}
.stat .v{font-family:var(--mono);font-size:clamp(22px,3vw,30px);font-weight:600;margin-top:6px;
         font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.stat .v.pos{color:var(--a)} .stat .v.neg{color:var(--bad)}
.stat .s{font-size:12px;color:var(--ink-3);margin-top:2px}

/* ---------- 7. FORMS ---------- */
label{display:block;font-size:12.5px;font-weight:600;color:var(--ink-2);margin-bottom:6px;letter-spacing:.01em}
input[type=text],input[type=password],input[type=email],input[type=tel],input[type=number],
input[type=date],input[type=search],input[type=file],select,textarea{
  width:100%;padding:11px 13px;background:var(--s-0);color:var(--ink);
  border:1px solid var(--line-2);border-radius:var(--r-sm);
  font:inherit;font-size:14.5px;transition:border-color .16s var(--ease),box-shadow .16s var(--ease),background .16s;
}
input::placeholder,textarea::placeholder{color:var(--ink-4)}
input:focus,select:focus,textarea:focus{
  outline:none;border-color:var(--a);box-shadow:0 0 0 3px var(--a-dim);background:var(--s-1);
}
input[type=file]{padding:9px 12px;color:var(--ink-2);cursor:pointer}
input[type=file]::file-selector-button{
  font:inherit;font-size:13px;font-weight:600;margin-right:12px;padding:6px 12px;cursor:pointer;
  background:var(--s-3);color:var(--ink);border:1px solid var(--line-2);border-radius:6px;
}
select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--ink-3) 50%),linear-gradient(135deg,var(--ink-3) 50%,transparent 50%);
  background-position:calc(100% - 18px) 52%,calc(100% - 13px) 52%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:38px}
textarea{min-height:110px;resize:vertical;font-family:var(--mono);font-size:13px}
.field{margin-bottom:16px}
.hint{font-size:12px;color:var(--ink-3);margin-top:6px}
fieldset{border:1px solid var(--line);border-radius:var(--r);padding:16px;margin:0 0 16px}
legend{padding:0 8px;font-size:12px;font-weight:650;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3)}

/* mono input for IDs / card numbers */
.mono-in{font-family:var(--mono);letter-spacing:.06em;font-size:16px}

/* ---------- 8. BUTTONS ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:11px 18px;border-radius:var(--r-sm);border:1px solid transparent;
  font:inherit;font-size:14px;font-weight:620;letter-spacing:.005em;cursor:pointer;
  transition:transform .12s var(--ease),filter .16s var(--ease),background .16s var(--ease),border-color .16s;
  background:var(--s-3);color:var(--ink);border-color:var(--line-2);
  text-decoration:none;white-space:nowrap;
}
.btn:hover{filter:brightness(1.14);text-decoration:none}
.btn:active{transform:translateY(1px)}
.btn:disabled,.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed;transform:none}
.btn-p{background:var(--grad);color:#04180d;border:0;box-shadow:0 4px 18px -8px rgba(61,220,132,.6)}
.btn-p:hover{filter:brightness(1.08)}
.btn-ghost{background:transparent;border-color:var(--line-2);color:var(--ink-2)}
.btn-ghost:hover{color:var(--ink);border-color:var(--a-line);background:var(--a-dim)}
.btn-danger{background:var(--bad-dim);color:var(--bad);border-color:rgba(244,85,122,.3)}
.btn-sm{padding:7px 12px;font-size:12.5px}
.btn-lg{padding:14px 26px;font-size:15px}
.btn-block{width:100%}
.btn-row{display:flex;gap:10px;flex-wrap:wrap}

/* ---------- 9. TABLE ---------- */
.tbl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r);background:var(--s-1)}
table{width:100%;border-collapse:collapse;font-size:13.5px}
thead th{
  position:sticky;top:0;background:var(--s-3);text-align:left;
  padding:11px 14px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--ink-3);font-weight:650;border-bottom:1px solid var(--line);white-space:nowrap;
}
tbody td{padding:11px 14px;border-bottom:1px solid var(--line);vertical-align:middle}
tbody tr:last-child td{border-bottom:0}
tbody tr{transition:background .12s}
tbody tr:hover{background:var(--s-2)}
td.num,th.num{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}
td.id{font-family:var(--mono);font-size:12.5px;color:var(--ink-2)}

/* ---------- 10. FEEDBACK ---------- */
.note{
  display:flex;gap:11px;align-items:flex-start;
  padding:13px 15px;border-radius:var(--r);font-size:13.5px;line-height:1.5;
  border:1px solid var(--line);background:var(--s-2);margin-bottom:16px;
}
.note .i{flex:0 0 18px;margin-top:1px}
.note-ok{background:var(--a-dim);border-color:var(--a-line);color:var(--a)}
.note-err{background:var(--bad-dim);border-color:rgba(244,85,122,.3);color:var(--bad)}
.note-warn{background:var(--warn-dim);border-color:rgba(251,191,36,.3);color:var(--warn)}
.note-info{background:var(--b-dim);border-color:rgba(34,211,238,.28);color:var(--b)}

.badge{
  display:inline-flex;align-items:center;gap:5px;padding:3px 9px;border-radius:999px;
  font-size:11px;font-weight:650;letter-spacing:.03em;text-transform:uppercase;
  background:var(--s-3);color:var(--ink-2);border:1px solid var(--line-2);
}
.badge-ok{background:var(--a-dim);color:var(--a);border-color:var(--a-line)}
.badge-bad{background:var(--bad-dim);color:var(--bad);border-color:rgba(244,85,122,.3)}
.badge-warn{background:var(--warn-dim);color:var(--warn);border-color:rgba(251,191,36,.3)}
.badge::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}

/* ---------- 11. EMPTY / LOADING ---------- */
.empty{text-align:center;padding:48px 20px;color:var(--ink-3)}
.empty .ico{width:44px;height:44px;margin:0 auto 14px;color:var(--ink-4)}
.empty h3{color:var(--ink-2);margin-bottom:6px}
.spin{width:17px;height:17px;border:2px solid var(--line-2);border-top-color:var(--a);border-radius:50%;
      animation:spin .7s linear infinite;display:inline-block}
@keyframes spin{to{transform:rotate(360deg)}}
.skel{background:linear-gradient(90deg,var(--s-2) 25%,var(--s-3) 50%,var(--s-2) 75%);
      background-size:200% 100%;animation:sk 1.4s ease infinite;border-radius:6px;height:1em}
@keyframes sk{to{background-position:-200% 0}}

/* ---------- 12. STEPPER ---------- */
.steps{display:flex;align-items:center;gap:0;margin-bottom:26px;overflow-x:auto;padding-bottom:4px}
.step{display:flex;align-items:center;gap:9px;color:var(--ink-4);font-size:13px;font-weight:600;white-space:nowrap}
.step .n{width:25px;height:25px;flex:0 0 25px;border-radius:50%;display:grid;place-items:center;
         border:1px solid var(--line-2);font-family:var(--mono);font-size:11.5px;background:var(--s-1)}
.step[data-on] {color:var(--a)}
.step[data-on] .n{border-color:var(--a);background:var(--a-dim);color:var(--a)}
.step[data-done]{color:var(--ink-2)}
.step[data-done] .n{background:var(--a);border-color:var(--a);color:#04180d}
.step-bar{flex:1;height:1px;background:var(--line-2);margin:0 12px;min-width:22px}

/* ---------- 13. SELECTABLE GRID ---------- */
.pickgrid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(min(100%,168px),1fr))}
.pick{
  cursor:pointer;text-align:left;padding:16px;border-radius:var(--r);
  background:var(--s-1);border:1px solid var(--line);color:var(--ink);
  font:inherit;transition:all .18s var(--ease);position:relative;
}
.pick:hover{border-color:var(--a-line);background:var(--s-2);transform:translateY(-2px)}
.pick[aria-pressed=true]{border-color:var(--a);background:var(--a-dim);box-shadow:var(--glow)}
.pick .n{font-weight:640;font-size:14.5px}
.pick .m{font-size:12px;color:var(--ink-3);margin-top:3px;font-family:var(--mono)}

/* ---------- 14. BIG READOUT ---------- */
.readout{text-align:center;padding:30px 20px}
.readout .lbl{font-size:11.5px;text-transform:uppercase;letter-spacing:.12em;color:var(--ink-3);font-weight:650}
.readout .amt{
  font-family:var(--mono);font-size:clamp(40px,9vw,68px);font-weight:600;line-height:1;
  letter-spacing:-.035em;margin:12px 0 6px;font-variant-numeric:tabular-nums;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;
}
.readout .amt.neg{background:none;color:var(--bad);-webkit-text-fill-color:var(--bad)}
.readout .meta{font-size:13px;color:var(--ink-3)}

/* ---------- 15. FOOTER ---------- */
.foot{border-top:1px solid var(--line);margin-top:56px;padding:22px 0 34px;color:var(--ink-4);font-size:12px}
.foot .row-between{align-items:center}
.foot a{color:var(--ink-3)}
.foot a:hover{color:var(--a)}

/* ---------- 16. UTIL ---------- */
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.muted{color:var(--ink-3)}
.dim{color:var(--ink-2)}
.accent{color:var(--a)}
.up{text-transform:uppercase;letter-spacing:.08em;font-size:11px;font-weight:650;color:var(--ink-3)}
.nowrap{white-space:nowrap}
.reveal{opacity:0;transform:translateY(10px);animation:rv .5s var(--ease) forwards}
@keyframes rv{to{opacity:1;transform:none}}
.theme-btn{background:none;border:1px solid var(--line-2);color:var(--ink-3);width:32px;height:32px;
           border-radius:var(--r-sm);cursor:pointer;display:grid;place-items:center;transition:all .16s}
.theme-btn:hover{color:var(--a);border-color:var(--a-line)}

@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms !important;transition-duration:.01ms !important}}
@media print{.topbar,.foot,.btn{display:none}body{background:#fff;color:#000}}
