/* ============================================================
   Каса Web Admin — modern theme layer
   Built on tokens.css. Keeps the brand DNA (Manrope, mono
   numerals, warm ink) and refreshes it: a soft greige canvas,
   white cards with low warm shadows, an emerald signature
   accent, a rich chart palette, and a warm light/dark theme
   swapped via [data-theme] on <html>.
   ============================================================ */

:root {
  /* canvas + surfaces */
  --app-bg:      #f4f2ed;
  --card:        #ffffff;
  --card-2:      #faf9f6;
  --hair:        #e8e5de;
  --hair-2:      #dcd8cf;
  --hair-strong: #cbc6ba;

  /* text */
  --text:   #16140f;
  --text-2: #57534a;
  --text-3: #8b867a;
  --text-4: #b4afa2;
  --on-ink: #ffffff;

  /* signature accent — emerald, the "live money" hue */
  --acc:        #15a35a;
  --acc-2:      #11854a;
  --acc-soft:   #e3f3ea;
  --acc-text:   #0f7a43;

  /* ink action (kept from brand) */
  --ink-btn:    #16140f;
  --ink-btn-h:  #2e2a22;

  /* semantic (status only) */
  --pos:  #15a35a;  --pos-soft:  #e3f3ea;
  --warn: #c2820a;  --warn-soft: #f8edd2;
  --dang: #c2402a;  --dang-soft: #f7e2dc;
  --info: #2e5aa8;  --info-soft: #e2eaf6;

  /* data-viz palette */
  --c1: #15a35a;  --c1s: #d6efe0;  /* emerald  */
  --c2: #3a6fc7;  --c2s: #dde7f7;  /* blue     */
  --c3: #d98a1e;  --c3s: #f8e8ce;  /* amber    */
  --c4: #7c5cdb;  --c4s: #e7e0fa;  /* violet   */
  --c5: #c2532e;  --c5s: #f6e0d6;  /* terracotta */
  --c6: #0e9aa0;  --c6s: #d3eef0;  /* teal     */

  /* elevation */
  --sh-card: 0 1px 2px rgba(22,20,15,.04), 0 5px 18px rgba(22,20,15,.055);
  --sh-card-h: 0 2px 4px rgba(22,20,15,.06), 0 12px 30px rgba(22,20,15,.10);
  --sh-pop:  0 10px 34px rgba(22,20,15,.14), 0 2px 8px rgba(22,20,15,.08);
  --sh-drawer: -24px 0 60px rgba(22,20,15,.16);

  --r-card: 18px;
}

html[data-theme="dark"] {
  --app-bg:      #14120f;
  --card:        #1f1c17;
  --card-2:      #262219;
  --hair:        #322d26;
  --hair-2:      #3c372e;
  --hair-strong: #4d473c;

  --text:   #f3efe6;
  --text-2: #bbb4a6;
  --text-3: #8b8376;
  --text-4: #635c50;
  --on-ink: #14120f;

  --acc:      #2ec27e;
  --acc-2:    #34d089;
  --acc-soft: #182a20;
  --acc-text: #4cd592;

  --ink-btn:    #f3efe6;   /* inverted: light button on dark */
  --ink-btn-h:  #e4dccd;

  --pos:  #2ec27e;  --pos-soft:  #182a20;
  --warn: #e0a93b;  --warn-soft: #2c2413;
  --dang: #e07659;  --dang-soft: #2e1c16;
  --info: #6f9be0;  --info-soft: #172234;

  --c1: #2ec27e;  --c1s: #1c3327;
  --c2: #6f9be0;  --c2s: #1a2638;
  --c3: #e0a93b;  --c3s: #322713;
  --c4: #a98ef0;  --c4s: #261f3a;
  --c5: #e0825e;  --c5s: #321e17;
  --c6: #3fc6cc;  --c6s: #15302f;

  --sh-card: 0 1px 2px rgba(0,0,0,.4), 0 6px 22px rgba(0,0,0,.38);
  --sh-card-h: 0 2px 6px rgba(0,0,0,.5), 0 14px 34px rgba(0,0,0,.5);
  --sh-pop:  0 14px 44px rgba(0,0,0,.55), 0 3px 10px rgba(0,0,0,.4);
  --sh-drawer: -24px 0 70px rgba(0,0,0,.5);
}

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html, body { margin: 0; padding: 0; height: 100%; }
body {
  font-family: var(--font-sans);
  background: var(--app-bg);
  color: var(--text);
  -webkit-font-smoothing: antialiased;
  font-feature-settings: 'cv11', 'ss01';
  transition: background .3s, color .3s;
}
button { font-family: inherit; cursor: pointer; border: none; background: none; padding: 0; color: inherit; }
input, textarea, select { font-family: inherit; color: inherit; }
img { display: block; max-width: 100%; }
::-webkit-scrollbar { width: 11px; height: 11px; }
::-webkit-scrollbar-thumb { background: var(--hair-strong); border-radius: 6px; border: 3px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: var(--text-4); background-clip: padding-box; }
::-webkit-scrollbar-track { background: transparent; }
.num { font-family: var(--font-mono); font-variant-numeric: tabular-nums; letter-spacing: -0.01em; }
.eyebrow { font: var(--t-label); color: var(--text-3); text-transform: uppercase; letter-spacing: 0.07em; font-size: 11px; }

/* ---------- App shell ---------- */
.admin { display: grid; grid-template-columns: 256px 1fr; height: 100vh; overflow: hidden; }

/* ---------- Sidebar ---------- */
.side {
  background: var(--card);
  border-right: 1px solid var(--hair);
  display: flex; flex-direction: column;
  padding: 16px 14px 14px;
  gap: 2px; overflow-y: auto;
}
.side .brand { display: flex; align-items: center; gap: 12px; padding: 6px 8px 16px; }
.side .brand .mark {
  width: 42px; height: 42px; border-radius: 13px;
  background: var(--ink-btn); color: var(--on-ink);
  display: grid; place-items: center;
  font-weight: 800; font-size: 21px; letter-spacing: -0.02em; flex-shrink: 0;
}
.side .brand .name { font-size: 17px; font-weight: 800; letter-spacing: -0.02em; }
.side .brand .ver { font-size: 11px; color: var(--text-3); font-family: var(--font-mono); margin-top: 1px; }

.group-label { font: var(--t-label); color: var(--text-4); text-transform: uppercase; letter-spacing: 0.08em; font-size: 10.5px; padding: 16px 12px 7px; }
.nav-item {
  position: relative;
  display: flex; align-items: center; gap: 12px;
  padding: 10px 12px; border-radius: 12px;
  color: var(--text-2); font-size: 14px; font-weight: 600;
  transition: background .14s, color .14s; text-align: left; width: 100%;
}
.nav-item:hover { background: var(--card-2); color: var(--text); }
html[data-theme="dark"] .nav-item:hover { background: var(--surface-dark, var(--card-2)); }
.nav-item.active { background: var(--ink-btn); color: var(--on-ink); }
.nav-item.active svg { stroke-width: 2; }
.nav-item .count {
  margin-left: auto; font-family: var(--font-mono); font-size: 11px; font-weight: 600;
  background: var(--card-2); color: var(--text-3);
  padding: 1px 8px; border-radius: 999px; min-width: 24px; text-align: center;
}
.nav-item:hover .count { background: var(--app-bg); }
.nav-item.active .count { background: rgba(255,255,255,.16); color: var(--on-ink); }
html[data-theme="dark"] .nav-item.active .count { background: rgba(0,0,0,.22); }
.side .spacer { flex: 1; min-height: 12px; }

.dps-card {
  margin-top: 8px; padding: 13px 14px;
  background: var(--card-2); border: 1px solid var(--hair); border-radius: 14px;
}
.dps-card .row { display: flex; align-items: center; justify-content: space-between; }
.live-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--pos); box-shadow: 0 0 0 0 var(--pos); animation: pulse 2s infinite; }
@keyframes pulse { 0%{box-shadow:0 0 0 0 color-mix(in oklab, var(--pos) 55%, transparent);} 70%{box-shadow:0 0 0 7px transparent;} 100%{box-shadow:0 0 0 0 transparent;} }

/* ---------- Main + topbar ---------- */
.main { display: flex; flex-direction: column; overflow: hidden; background: var(--app-bg); min-width: 0; }
.topbar {
  height: 66px; flex-shrink: 0; border-bottom: 1px solid var(--hair);
  display: flex; align-items: center; gap: 14px; padding: 0 26px; background: var(--app-bg);
}
.loc-switch {
  display: flex; align-items: center; gap: 9px; padding: 8px 13px; border-radius: 11px;
  background: var(--card); border: 1px solid var(--hair); font-size: 13px; font-weight: 700;
  box-shadow: var(--sh-card); transition: border-color .14s;
  white-space: nowrap; flex-shrink: 0;
}
.loc-switch:hover { border-color: var(--hair-strong); }
.topbar .search {
  flex: 1; max-width: 420px; min-width: 0; display: flex; align-items: center; gap: 10px;
  background: var(--card); border: 1px solid var(--hair); border-radius: 11px;
  padding: 9px 13px; box-shadow: var(--sh-card); transition: border-color .15s;
}
.topbar .search input { min-width: 0; }
.topbar .search:focus-within { border-color: var(--acc); }
.topbar .search input { flex: 1; border: none; background: none; outline: none; font-size: 13.5px; }
.topbar .search input::placeholder { color: var(--text-3); }
.kbd { font-family: var(--font-mono); font-size: 11px; color: var(--text-3); padding: 2px 7px; background: var(--app-bg); border: 1px solid var(--hair); border-radius: 6px; }
.icon-btn {
  width: 40px; height: 40px; border-radius: 11px; display: grid; place-items: center;
  color: var(--text-2); position: relative; transition: background .14s, color .14s; flex-shrink: 0;
}
.icon-btn:hover { background: var(--card); color: var(--text); }
.icon-btn .badge { position: absolute; top: 9px; right: 9px; width: 7px; height: 7px; border-radius: 50%; background: var(--dang); border: 2px solid var(--app-bg); }
/* ---------- User menu (header dropdown) ---------- */
.user-menu { position: relative; flex-shrink: 0; }
.user-chip { display: flex; align-items: center; gap: 10px; padding: 4px 10px 4px 4px; border-radius: 999px; background: var(--card); border: 1px solid var(--hair); box-shadow: var(--sh-card); flex-shrink: 0; cursor: pointer; list-style: none; transition: border-color .14s; }
.user-chip::-webkit-details-marker { display: none; }
.user-chip::marker { content: ""; }
.user-chip:hover { border-color: var(--hair-strong); }
.uc-meta { line-height: 1.2; }
.uc-name { font-size: 13px; font-weight: 700; white-space: nowrap; }
.uc-role { font-size: 11px; color: var(--text-3); white-space: nowrap; }
.uc-caret { color: var(--text-3); transition: transform .18s ease; margin-left: 1px; }
.user-menu[open] .uc-caret { transform: rotate(180deg); }

.user-pop {
    position: absolute; top: calc(100% + 9px); right: 0; width: 264px; z-index: 75;
    background: var(--card); border: 1px solid var(--hair); border-radius: 15px;
    box-shadow: var(--sh-pop); padding: 8px; overflow: hidden;
    animation: userPop .16s cubic-bezier(.2,.9,.3,1);
}
@keyframes userPop { from { opacity: 0; transform: translateY(-6px); } }
.up-head { display: flex; align-items: center; gap: 11px; padding: 8px 9px 6px; }
.up-id { min-width: 0; }
.up-name { font-size: 13.5px; font-weight: 800; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.up-email { font-size: 11.5px; color: var(--text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.up-role { padding: 0 9px 8px; }
.up-sep { height: 1px; background: var(--hair); margin: 2px 0 6px; }
.up-item { display: flex; align-items: center; gap: 11px; padding: 9px 10px; border-radius: 10px; font-size: 13.5px; font-weight: 600; color: var(--text-2); transition: background .12s, color .12s; }
.up-item:hover { background: var(--card-2); color: var(--text); }
.up-item.danger { color: var(--dang); }
.up-item.danger:hover { background: var(--dang-soft); }
.up-item svg { color: var(--text-4); flex-shrink: 0; }
.up-item:hover svg { color: currentColor; }

.avatar { border-radius: 50%; color: #fff; display: grid; place-items: center; font-weight: 700; flex-shrink: 0; }

/* ---------- Page scaffold ---------- */
.page { flex: 1; overflow: auto; }
.page-inner { padding: 26px 30px 56px; max-width: 1340px; margin: 0 auto; }
/* Узкая центрированная колонка для одиночных форм (создание/приглашение и т.п.). */
.page-narrow { padding: 28px 30px 64px; max-width: 640px; margin: 0 auto; }
@media (max-width: 560px) { .page-narrow { padding: 22px 18px 56px; } }
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 22px; flex-wrap: wrap; }
.page-head h1 { font: var(--t-h1); font-size: 28px; letter-spacing: -0.025em; margin: 0; }
.page-head .sub { color: var(--text-3); font-size: 13.5px; margin-top: 5px; }
.page-head .actions { display: flex; gap: 9px; align-items: center; flex-wrap: wrap; }

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  padding: 10px 15px; border-radius: 11px; font-weight: 700; font-size: 13.5px;
  background: var(--card); color: var(--text); border: 1px solid var(--hair);
  transition: all .14s; white-space: nowrap; box-shadow: var(--sh-card);
}
.btn:hover { border-color: var(--hair-strong); }
.btn.primary { background: var(--ink-btn); color: var(--on-ink); border-color: transparent; }
.btn.primary:hover { background: var(--ink-btn-h); }
.btn.accent { background: var(--acc); color: #fff; border-color: transparent; }
.btn.accent:hover { background: var(--acc-2); }
.btn.ghost { background: transparent; border-color: transparent; box-shadow: none; }
.btn.ghost:hover { background: var(--card); border-color: var(--hair); }
.btn.danger { background: var(--dang); color: #fff; border-color: transparent; }
.btn.sm { padding: 7px 11px; font-size: 12.5px; border-radius: 9px; }
.btn.icon { padding: 9px; }
.btn:disabled { opacity: .4; cursor: not-allowed; }

/* ---------- Chips ---------- */
.chip { display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border-radius: 999px; background: var(--card-2); font-size: 12px; font-weight: 700; color: var(--text-2); border: 1px solid var(--hair); }
.chip .pdot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.chip.pos  { background: var(--pos-soft);  color: var(--pos);  border-color: transparent; }
.chip.warn { background: var(--warn-soft); color: var(--warn); border-color: transparent; }
.chip.dang { background: var(--dang-soft); color: var(--dang); border-color: transparent; }
.chip.info { background: var(--info-soft); color: var(--info); border-color: transparent; }
.chip.acc  { background: var(--acc-soft);  color: var(--acc-text); border-color: transparent; }
.chip.ghost { background: transparent; }

/* ---------- Cards ---------- */
.card { background: var(--card); border: 1px solid var(--hair); border-radius: var(--r-card); padding: 20px; box-shadow: var(--sh-card); }
.card.flat { box-shadow: none; }
.card-h { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 16px; }
.card-h .t { font: var(--t-h3); font-size: 15.5px; }
.card-h .s { font-size: 12px; color: var(--text-3); margin-top: 3px; font-weight: 500; }

/* ---------- KPI ---------- */
.kpi { background: var(--card); border: 1px solid var(--hair); border-radius: var(--r-card); padding: 18px 19px; box-shadow: var(--sh-card); position: relative; overflow: hidden; }
.kpi .top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.kpi .ic { width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; }
.kpi .label { font-size: 12px; font-weight: 700; color: var(--text-3); }
.kpi .val { display: flex; align-items: baseline; gap: 5px; white-space: nowrap; }
.kpi .val .n { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 31px; font-weight: 700; letter-spacing: -0.03em; }
.kpi .val .u { color: var(--text-3); font-size: 15px; font-weight: 600; }
.kpi .delta { margin-top: 11px; font-size: 12px; font-weight: 700; display: flex; align-items: center; gap: 5px; }
.kpi .delta.up { color: var(--pos); }
.kpi .delta.down { color: var(--dang); }
.kpi .delta .muted { color: var(--text-3); font-weight: 500; }
.kpi .spark { position: absolute; right: 0; bottom: 0; left: 0; height: 34px; opacity: .9; }

/* ---------- Table ---------- */
.table-wrap { background: var(--card); border: 1px solid var(--hair); border-radius: var(--r-card); overflow: hidden; box-shadow: var(--sh-card); }
table.tbl { width: 100%; border-collapse: collapse; }
table.tbl th { text-align: left; font-size: 10.5px; font-weight: 800; color: var(--text-3); text-transform: uppercase; letter-spacing: 0.06em; padding: 13px 18px; border-bottom: 1px solid var(--hair); background: var(--card-2); }
table.tbl td { padding: 13px 18px; border-bottom: 1px solid var(--hair); font-size: 13.5px; vertical-align: middle; }
table.tbl tbody tr:last-child td { border-bottom: none; }
table.tbl tbody tr { transition: background .12s; }
table.tbl.rows tbody tr:hover td { background: var(--card-2); cursor: pointer; }
.t-name { font-weight: 700; }
.t-sub { font-size: 12px; color: var(--text-3); margin-top: 2px; }

/* ---------- Inputs ---------- */
.field { width: 100%; background: var(--card-2); border: 1px solid var(--hair); border-radius: 11px; padding: 11px 13px; font-size: 14px; outline: none; transition: all .15s; }
.field:focus { background: var(--card); border-color: var(--acc); }
.field::placeholder { color: var(--text-4); }
.flabel { font-size: 12px; font-weight: 700; color: var(--text-2); margin-bottom: 6px; display: block; }

/* ---------- Toggle ---------- */
.toggle { width: 44px; height: 26px; border-radius: 13px; background: var(--hair-strong); position: relative; transition: background .15s; flex-shrink: 0; }
.toggle.on { background: var(--acc); }
.toggle .knob { position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%; background: #fff; transition: left .18s cubic-bezier(.3,1.3,.5,1); box-shadow: 0 1px 3px rgba(0,0,0,.25); }
.toggle.on .knob { left: 21px; }

/* ---------- Segmented ---------- */
.seg { display: inline-flex; background: var(--card-2); border: 1px solid var(--hair); border-radius: 11px; padding: 3px; gap: 2px; }
.seg button { padding: 7px 14px; font-size: 12.5px; font-weight: 700; border-radius: 8px; color: var(--text-3); transition: all .14s; }
.seg button.active { background: var(--card); color: var(--text); box-shadow: var(--sh-card); }

/* tabs (underline) */
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--hair); margin-bottom: 22px; }
.tab { padding: 11px 14px; font-size: 13.5px; font-weight: 700; color: var(--text-3); position: relative; transition: color .14s; }
.tab:hover { color: var(--text); }
.tab.active { color: var(--text); }
.tab.active::after { content: ''; position: absolute; left: 10px; right: 10px; bottom: -1px; height: 2.5px; background: var(--acc); border-radius: 2px; }

/* ---------- Drawer ---------- */
.scrim { position: fixed; inset: 0; background: rgba(22,20,15,.46); z-index: 60; backdrop-filter: blur(2px); }
@keyframes fade { from { opacity: 0; } }
.drawer { position: fixed; top: 0; right: 0; bottom: 0; width: 480px; max-width: 94vw; background: var(--app-bg); z-index: 61; box-shadow: var(--sh-drawer); display: flex; flex-direction: column; animation: slideIn .3s cubic-bezier(.2,.85,.3,1); }
@keyframes slideIn { from { transform: translateX(60px); } }

/* ---------- Toast ---------- */
.toast { position: fixed; bottom: 26px; left: 50%; transform: translateX(-50%); background: var(--ink-btn); color: var(--on-ink); padding: 12px 16px 12px 12px; border-radius: 12px; font-size: 13.5px; font-weight: 600; display: flex; align-items: center; gap: 10px; z-index: 90; box-shadow: var(--sh-pop); animation: slideUp .26s; }
@keyframes slideUp { from { opacity: 0; transform: translateX(-50%) translateY(12px); } }

/* ---------- Bars / charts helpers ---------- */
.bars { display: flex; align-items: flex-end; gap: 7px; }
.bar-col { flex: 1; height: 100%; display: flex; flex-direction: column; align-items: center; gap: 7px; }
.bar-track { width: 100%; flex: 1; display: flex; align-items: flex-end; justify-content: center; gap: 3px; }
.bar { width: 44%; border-radius: 5px 5px 2px 2px; min-height: 3px; transition: height .3s; }
.bar.ghost { opacity: .28; }

.legend { display: flex; gap: 16px; flex-wrap: wrap; }
.legend .li { display: flex; align-items: center; gap: 7px; font-size: 12px; color: var(--text-2); font-weight: 600; }
.legend .sw { width: 10px; height: 10px; border-radius: 3px; }

.prog { height: 8px; border-radius: 4px; background: var(--card-2); overflow: hidden; }
.prog > span { display: block; height: 100%; border-radius: 4px; }

/* fade-in for page transitions */
/* fill-mode backwards (НЕ both): после анимации transform возвращается к ключевому слову none,
   а не к matrix(1,0,0,1,0,0). Любая матрица (даже единичная) создаёт containing block и ловит
   position:fixed-оверлеи внутри страницы. backwards оставляет только pre-fill кадра from. */
.fade-page { animation: pageIn .28s ease backwards; }
/* Финальный кадр — transform:none (а не translateY(0)!). Любое не-none значение transform
   создаёт containing block, и position:fixed-оверлеи (модалки) ловятся внутри страницы,
   а не вьюпорта — из-за этого затемнялся только контент и шапка модалки пряталась под топбар. */
@keyframes pageIn { from { transform: translateY(7px); } to { transform: none; } }

.empty { text-align: center; color: var(--text-3); padding: 40px; font-size: 14px; }
.divider { height: 1px; background: var(--hair); margin: 0; border: none; }
.mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }

/* ---------- Modal / wizard ---------- */
.modal-scrim { position: fixed; inset: 0; background: rgba(22,20,15,.5); z-index: 70; display: grid; place-items: center; padding: 24px; backdrop-filter: blur(3px); }
.modal { background: var(--app-bg); border: 1px solid var(--hair); border-radius: 22px; width: 660px; max-width: 100%; max-height: 92vh; display: flex; flex-direction: column; box-shadow: var(--sh-pop); overflow: hidden; animation: modalPop .3s cubic-bezier(.18,1.1,.4,1); }
@keyframes modalPop { from { transform: translateY(16px) scale(.985); } }
.modal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 20px 22px 0; }
.modal-head .mt { font-size: 18px; font-weight: 800; letter-spacing: -0.02em; }
.modal-head .ms { font-size: 12.5px; color: var(--text-3); margin-top: 2px; }
.modal-body { padding: 22px; overflow: auto; flex: 1; }
.modal-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 15px 22px; border-top: 1px solid var(--hair); background: var(--card); }

.stepper { display: flex; align-items: center; padding: 16px 22px 2px; }
.stepper .st { display: flex; align-items: center; gap: 8px; }
.stepper .sc { width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center; font-size: 12px; font-weight: 700; font-family: var(--font-mono); background: var(--card-2); color: var(--text-3); border: 1px solid var(--hair); flex-shrink: 0; transition: all .2s; }
.stepper .st.active .sc { background: var(--acc); color: #fff; border-color: transparent; }
.stepper .st.done .sc { background: var(--acc-soft); color: var(--acc-text); border-color: transparent; }
.stepper .sl { font-size: 12px; font-weight: 700; color: var(--text-4); white-space: nowrap; }
.stepper .st.active .sl { color: var(--text); }
.stepper .st.done .sl { color: var(--text-2); }
.stepper .bar { flex: 1; height: 2px; background: var(--hair); margin: 0 9px; border-radius: 2px; min-width: 8px; }
.stepper .bar.done { background: var(--acc); }

/* activation code boxes */
.codebox { display: flex; gap: 8px; position: relative; }
.codebox input.cap { position: absolute; inset: 0; opacity: 0; cursor: text; }
.codebox .cc { width: 46px; height: 58px; border-radius: 12px; background: var(--card-2); border: 1.5px solid var(--hair); display: grid; place-items: center; font-family: var(--font-mono); font-size: 24px; font-weight: 700; transition: all .15s; }
.codebox .cc.filled { border-color: var(--hair-strong); background: var(--card); }
.codebox .cc.cur { border-color: var(--acc); box-shadow: 0 0 0 3px var(--acc-soft); background: var(--card); }
.codebox .dash { display: grid; place-items: center; color: var(--text-4); font-weight: 700; }

/* QR scan viewfinder */
.viewfinder { position: relative; width: 230px; height: 230px; margin: 0 auto; border-radius: 18px; overflow: hidden; background: #0c0b09; }
.viewfinder .corner { position: absolute; width: 28px; height: 28px; border: 3px solid var(--acc); }
.viewfinder .scanline { position: absolute; left: 9%; right: 9%; height: 2px; background: var(--acc); box-shadow: 0 0 14px 3px var(--acc); animation: scan 2.1s ease-in-out infinite; }
@keyframes scan { 0%,100% { top: 12%; } 50% { top: 86%; } }

/* register-screen preview */
.pos-preview { background: var(--ink-btn); color: var(--on-ink); border-radius: 18px; padding: 22px; text-align: center; }
.method-pick { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.method-card { border: 1.5px solid var(--hair); border-radius: 14px; padding: 14px; text-align: center; background: var(--card); transition: all .15s; }
.method-card:hover { border-color: var(--hair-strong); }
.method-card.on { border-color: var(--acc); background: var(--acc-soft); }

/* ---------- Theme toggle icon (CSS-driven by html[data-theme]) ---------- */
.theme-toggle .ti-sun { display: none; }
.theme-toggle .ti-moon { display: inline-block; }
html[data-theme="dark"] .theme-toggle .ti-sun { display: inline-block; }
html[data-theme="dark"] .theme-toggle .ti-moon { display: none; }
