/* Шрифты из своей раздачи (§11.7): те же файлы, что у витрины, под /admin/. */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('./fonts/manrope-cyrillic.woff2') format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('./fonts/manrope-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext: расширенная латиница и знак рубля ₽ (U+20BD) — Google кладёт его сюда. */
@font-face {
  font-family: 'Manrope';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('./fonts/manrope-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700 900;
  font-display: swap;
  src: url('./fonts/unbounded-cyrillic.woff2') format('woff2');
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700 900;
  font-display: swap;
  src: url('./fonts/unbounded-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext: расширенная латиница и знак рубля ₽ (U+20BD) — Google кладёт его сюда. */
@font-face {
  font-family: 'Unbounded';
  font-style: normal;
  font-weight: 700 900;
  font-display: swap;
  src: url('./fonts/unbounded-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

:root, .dark {
  /*
   * color-scheme на корне красит нативные виджеты — календари, селекты,
   * скроллбары — в тон темы. Раньше это делалось утилитой на каждом
   * date-инпуте, и с приходом светлой темы такие точечные прибивки
   * стали бы врать: тёмный календарь на белой странице.
   */
  color-scheme: dark;
  --bg: #131017;
  --fg: #F1EDF5;

  --card: #201A29;
  --card-hover: #2B2337;

  --card-fg: #F1EDF5;

  --muted: #282133;
  --muted-fg: #9C94AB;

  --primary: #8A66FF;
  --primary-hover: #9D80FF;

  --border: rgba(255, 255, 255, .08);

  --ok: #4FD39B;
  --warn: #F2C14E;
  --danger: #FF7A88;
  --info: #38BDF8;

  --primary-solid: #7A55F3;
  --primary-ink: #B39DFF;
  --primary-soft: rgba(138, 102, 255, .18);
  --ok-ink: #4FD39B;
  --ok-soft: rgba(79, 211, 155, .14);
  --warn-ink: #F2C14E;
  --warn-soft: rgba(242, 193, 78, .16);
  --danger-ink: #FF7A88;
  --danger-soft: rgba(255, 122, 136, .14);
  --line-strong: rgba(255, 255, 255, .14);
  --buyer: #5CC3F5;
  --seller: #F0A35E;
  --staff: #B69CFF;

  /*
   * Ряды графиков главной (30.09). Свои токены, а не цифровая палитра Tailwind:
   * шесть статей дохода и «прочее» должны различаться друг от друга и читаться
   * на карточке обеих тем. На тёмной — цвета макета владельца; на светлой те же
   * оттенки темнее, у каждого контраст с белой карточкой не ниже 3:1 (сторож
   * главная-показ.spec считает его по этим значениям). --grid — линии сетки.
   */
  --chart-1: #4FD39B;
  --chart-2: #38BDF8;
  --chart-3: #F2C14E;
  --chart-4: #C86BFF;
  --chart-5: #E0904B;
  --chart-6: #FF7A88;
  --chart-7: #9C94AB;
  --grid: rgba(255, 255, 255, .06);

  /*
   * Тени в два слоя: мягкий отброс вниз даёт карточке высоту, волосяная
   * светлая кромка сверху — объём. Без кромки тёмная карточка на тёмном
   * фоне читается дыркой, а не поверхностью.
   */
  --shadow-card: 0 1px 0 0 rgba(255, 255, 255, .045) inset, 0 10px 28px -14px rgba(0, 0, 0, .55);
  --shadow-pop: 0 1px 0 0 rgba(255, 255, 255, .06) inset, 0 18px 48px -16px rgba(0, 0, 0, .65);
}

/*
 * Светлая тема. Не негатив тёмной, а та же гамма при дневном свете:
 * бумажно-сиреневый фон, белые карточки, фиолетовый чуть глубже — на
 * белом исходный #8A66FF недобирает контраста. Семантические цвета
 * темнее своих тёмных собратьев по той же причине: #4FD39B на белом
 * почти не читается, #189A66 — читается.
 */
:root:not(.dark) {
  color-scheme: light;
  --bg: #F6F3F8;
  --fg: #201927;
  --card: #FFFFFF;
  --card-hover: #F3EEF8;
  --card-fg: #201927;
  --muted: #EDE7F4;
  --muted-fg: #6E6579;
  --primary: #6B45E8;
  --primary-hover: #5A38D0;
  --border: rgba(27, 22, 32, .1);
  --ok: #189A66;
  --warn: #A8760A;
  --danger: #D6404F;
  --info: #0B7FBF;
  --primary-solid: #6B45E8;
  --primary-ink: #5A38D0;
  --primary-soft: rgba(107, 69, 232, .10);
  --ok-ink: #0F7A50;
  --ok-soft: rgba(24, 154, 102, .14);
  --warn-ink: #7A5300;
  --warn-soft: rgba(168, 118, 10, .16);
  --danger-ink: #B3202F;
  --danger-soft: rgba(214, 64, 79, .12);
  --line-strong: rgba(27, 22, 32, .18);
  --buyer: #095F91;
  --seller: #964C00;
  --staff: #5B35D5;
  --chart-1: #189A66;
  --chart-2: #0B7FBF;
  --chart-3: #A8760A;
  --chart-4: #9B3FD0;
  --chart-5: #B5601A;
  --chart-6: #D6404F;
  --chart-7: #6E6579;
  --grid: rgba(27, 22, 32, .07);
  --shadow-card: 0 1px 2px rgba(27, 22, 32, .05), 0 10px 28px -18px rgba(27, 22, 32, .18);
  --shadow-pop: 0 18px 48px -16px rgba(27, 22, 32, .28);
}

/* Админка Keron (admin.rpgkeron.net): тёмный камень и золото, как сайт. Без встроенных стилей (политика CSP: style-src 'self'). */
* { box-sizing: border-box; }
html { color-scheme: dark; }
body { margin: 0; background: var(--night); color: var(--cream); font: 400 15px/1.55 "Manrope", "Segoe UI", system-ui, sans-serif; padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); }
a { color: var(--gold); }
h1, h2, h3 { font-family: "Oswald", "Arial Narrow", sans-serif; letter-spacing: .03em; margin: 0 0 12px; }
h1 { font-size: 26px; color: var(--gold); } h2 { font-size: 21px; margin-top: 28px; } h3 { font-size: 17px; margin-top: 22px; }
.muted { color: var(--ash); } .small { font-size: 13px; } .nowrap { white-space: nowrap; } .mono { font-family: ui-monospace, Consolas, monospace; font-size: 13px; word-break: break-all; }
.center { min-height: 100vh; display: grid; place-items: center; padding: 16px; }
.card { background: var(--stone); border: 1px solid var(--seam); border-radius: var(--radius); padding: 22px; }
.login { width: min(420px, 100%); }
.shell { display: grid; grid-template-columns: 220px 1fr; min-height: 100vh; }
.side { background: var(--stone); border-right: 1px solid var(--seam); padding: 18px 14px; display: flex; flex-direction: column; gap: 4px; position: sticky; top: 0; height: 100vh; }
.side .brand { font: 700 20px/1 "Oswald", sans-serif; color: var(--gold); letter-spacing: .06em; margin: 4px 8px 16px; }
.side a.nav { display: block; padding: 9px 12px; border-radius: 8px; color: var(--ash); text-decoration: none; font-weight: 600; }
.side a.nav:hover { color: var(--cream); background: var(--stone2); } .side a.nav.on { color: var(--gold); background: var(--stone2); }
.side .who { margin-top: auto; padding: 10px 8px; font-size: 13px; color: var(--ash); }
.content { padding: 24px clamp(14px, 3vw, 36px) 60px; min-width: 0; }
.grid { display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }
.stat { background: var(--stone); border: 1px solid var(--seam); border-radius: var(--radius); padding: 16px; }
.stat small { color: var(--ash); text-transform: uppercase; letter-spacing: .07em; font-size: 11px; }
.stat b { display: block; font: 700 26px/1.2 "Oswald", sans-serif; color: var(--gold); margin-top: 2px; }
.stat span { color: var(--ash); font-size: 13px; }
.bars { display: flex; align-items: flex-end; gap: 6px; height: 150px; padding: 10px 6px 0; background: var(--stone); border: 1px solid var(--seam); border-radius: var(--radius); }
.bar { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; height: 100%; min-width: 0; font-size: 10px; color: var(--ash); }
.bar i { display: block; width: 100%; background: linear-gradient(var(--gold), var(--bronze)); border-radius: 3px 3px 0 0; min-height: 2px; }
.bar em { font-style: normal; margin-top: 4px; white-space: nowrap; }
.tablewrap { overflow-x: auto; background: var(--stone); border: 1px solid var(--seam); border-radius: var(--radius); }
table { width: 100%; border-collapse: collapse; }
th, td { padding: 9px 12px; text-align: left; border-bottom: 1px solid var(--seam); vertical-align: top; }
th { color: var(--ash); font-size: 11px; text-transform: uppercase; letter-spacing: .07em; white-space: nowrap; }
tr:last-child td { border-bottom: 0; }
td.num, th.num { text-align: right; white-space: nowrap; }
.tag { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 700; border: 1px solid var(--seam); white-space: nowrap; }
.tag.new { color: var(--gold); border-color: var(--bronze); } .tag.processing { color: #8cc8ff; border-color: #3a6a9a; } .tag.paid, .tag.success { color: var(--ok); border-color: #3a7a3a; }
.tag.rejected, .tag.failed, .tag.fail { color: #ff9a8a; border-color: var(--crimson); } .tag.cancelled, .tag.expired { color: var(--ash); }
.row { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin: 12px 0; }
input, select, textarea { font: inherit; color: var(--cream); background: var(--night); border: 1px solid var(--seam); border-radius: 8px; padding: 9px 12px; min-height: 40px; }
input:focus, select:focus { outline: none; border-color: var(--gold); box-shadow: 0 0 0 2px rgba(255, 212, 71, .22); }
label { display: grid; gap: 5px; font-weight: 600; font-size: 13px; color: var(--ash); }
form.stack { display: grid; gap: 14px; max-width: 440px; }
button { font: inherit; font-weight: 700; cursor: pointer; border: 0; border-radius: 8px; padding: 9px 16px; min-height: 40px; color: #2a1800; background: linear-gradient(#ffd447, #e99a12); }
button:hover { filter: brightness(1.07); } button:disabled { filter: grayscale(.7) brightness(.7); cursor: not-allowed; }
button.ghost { background: transparent; color: var(--cream); box-shadow: inset 0 0 0 1px var(--seam); } button.ghost:hover { box-shadow: inset 0 0 0 1px var(--bronze); }
button.danger { background: transparent; color: #ff9a8a; box-shadow: inset 0 0 0 1px var(--crimson); }
button.small { min-height: 32px; padding: 4px 11px; font-size: 13px; }
.err { padding: 9px 13px; border-radius: 8px; background: rgba(180, 35, 26, .18); border: 1px solid var(--crimson); color: #ffb4a8; margin: 0; }
.ok { padding: 9px 13px; border-radius: 8px; background: rgba(111, 211, 111, .1); border: 1px solid rgba(111, 211, 111, .45); color: var(--ok); margin: 0; }
.warn { padding: 9px 13px; border-radius: 8px; background: rgba(233, 154, 18, .12); border: 1px solid var(--bronze); color: var(--gold); margin: 0; }
.secret { padding: 12px; border-radius: 8px; background: var(--night); border: 1px dashed var(--bronze); color: var(--gold); font: 600 15px/1.6 ui-monospace, Consolas, monospace; word-break: break-all; white-space: pre-wrap; }
.pager { display: flex; gap: 10px; align-items: center; margin: 12px 0; }
.veil { position: fixed; inset: 0; background: rgba(0, 0, 0, .72); display: grid; place-items: center; padding: 16px; z-index: 10; }
.modal { width: min(460px, 100%); max-height: 90vh; overflow: auto; }
.cols2 { display: grid; gap: 18px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
@media (max-width: 800px) { .shell { grid-template-columns: 1fr; } .side { position: static; height: auto; flex-direction: row; flex-wrap: wrap; border-right: 0; border-bottom: 1px solid var(--seam); } .side .brand { width: 100%; } .side .who { margin: 0; width: 100%; } }

/* Layout adapted from Testik App.tsx, Users.tsx and Dashboard.tsx. */
:root{--night:var(--bg);--stone:var(--card);--stone2:var(--muted);--seam:var(--border);--gold:var(--primary-ink);--bronze:var(--primary);--crimson:var(--danger);--cream:var(--fg);--ash:var(--muted-fg);--radius:16px}
html{color-scheme:inherit}body{font:500 14px/1.55 Manrope,system-ui,sans-serif}h1,h2,h3{font-family:Manrope,system-ui,sans-serif;letter-spacing:-.025em;color:var(--fg)}h1{font-size:28px;font-weight:800;margin:0}h2{font-size:17px;margin:0 0 16px}h3{font-size:15px}a{text-decoration:none;color:var(--primary-ink)}button{background:var(--primary-solid);color:white;background-image:none;font-size:13px}button:focus-visible,a:focus-visible{outline:2px solid var(--primary-ink);outline-offset:3px}button.danger{color:var(--danger-ink)}.err{color:var(--danger-ink);background:var(--danger-soft)}.warn{color:var(--warn-ink);background:var(--warn-soft);border-color:var(--warn)}.shell{grid-template-columns:244px minmax(0,1fr)}.side{padding:24px 14px 16px;gap:3px;overflow-y:auto}.side .brand{font:800 18px Unbounded,Manrope,sans-serif;color:var(--fg);display:flex;align-items:center;gap:12px;margin:0 8px 24px;letter-spacing:-.04em}.brand small{font:600 8px Manrope;letter-spacing:.1em;display:block;color:var(--muted-fg);margin-top:6px}.brandmark{width:36px;height:36px;display:grid;place-items:center;border-radius:11px;background:var(--primary-solid);color:white}.navgroup{color:var(--muted-fg);font-size:10px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;padding:16px 12px 5px}.side a.nav{display:flex;align-items:center;gap:11px;font-size:13px;padding:10px 12px;border-radius:10px}.side a.nav.on{background:var(--primary-soft);color:var(--primary-ink)}.navicon{font-size:18px;width:18px;text-align:center;font-family:system-ui}.side .who{display:flex;align-items:center;gap:10px;padding-top:26px}.who small{display:block;font-size:11px}.avatar{display:inline-grid;place-items:center;width:35px;height:35px;border-radius:11px;background:var(--primary-soft);color:var(--primary-ink);font-weight:800;flex-shrink:0}.workspace{min-width:0}.topbar{height:76px;padding:0 32px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:16px;background:var(--card)}.breadcrumb{color:var(--muted-fg);font-size:12px;white-space:nowrap}.global-search{margin-left:auto;width:min(340px,40%)}.global-search input{width:100%;font-size:12px;background:var(--bg);min-height:36px}.secure-badge{font-size:11px;color:var(--ok-ink);background:var(--ok-soft);padding:5px 8px;border-radius:6px}.theme-button{min-width:36px;padding:6px}.content{padding:28px 32px 60px;max-width:1800px;margin:auto}.pagehead{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:25px}.pagehead p{margin:7px 0 0}.eyebrow{font-size:9px;letter-spacing:.16em;font-weight:800;color:var(--muted-fg);margin:0 0 8px!important}.queues{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:22px}.queue{display:flex;justify-content:space-between;align-items:center;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:16px 18px;color:var(--primary-ink)}.queue strong{display:block;font-size:25px;color:var(--fg);margin-top:5px}.grid{gap:16px}.kpis{grid-template-columns:repeat(4,minmax(0,1fr));margin:0 0 24px}.stat{padding:20px;border-radius:16px;box-shadow:var(--shadow-card);border:1px solid var(--border)}.stat b{font:800 29px/1.3 Manrope;color:var(--fg);margin:10px 0 7px}.stat small{font-size:10px;letter-spacing:.05em}.stat span{font-size:11px}.cols2{margin:24px 0;gap:20px;grid-template-columns:repeat(2,minmax(0,1fr))}.card{box-shadow:var(--shadow-card);border-color:var(--border)}.sectionhead{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:18px}.sectionhead h2{margin:0}.sectionhead a{font-size:12px}.chart-card{overflow:hidden}.bars{height:180px;padding:0;background:transparent;border:0;gap:5px;align-items:stretch}.bar{padding-top:4px}.bar i{min-height:0;background:var(--primary);border-radius:3px 3px 0 0;opacity:.85}.bar em{font-size:9px}.tablewrap{border:1px solid var(--border);box-shadow:var(--shadow-card)}.card .tablewrap{border:0;box-shadow:none;margin:0 -10px}.tablewrap table{font-size:12px}th,td{padding:15px 16px;vertical-align:middle}th{font-size:10px;background:var(--bg);font-weight:800}tbody tr:hover{background:var(--card-hover)}.tag{border:0;border-radius:6px;font-size:10px;padding:4px 8px}.tag.success,.tag.paid{color:var(--ok-ink);background:var(--ok-soft)}.tag.new,.tag.created{color:var(--warn-ink);background:var(--warn-soft)}.tag.failed,.tag.fail,.tag.rejected{color:var(--danger-ink);background:var(--danger-soft)}.tag.processing{color:var(--primary-ink);background:var(--primary-soft)}.activity-row{display:flex;gap:10px;padding:13px 0;border-bottom:1px solid var(--border);font-size:12px}.activity-row:last-child{border:0}.activity-row small{display:block;margin-top:5px;font-size:10px}.activity-dot{width:7px;height:7px;margin-top:6px;background:var(--primary);border-radius:50%;flex-shrink:0}.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:end;padding:16px;background:var(--card);border:1px solid var(--border);border-radius:14px;margin-bottom:18px}.filters input[type=search]{flex:1;min-width:190px}.filters input,.filters select{font-size:12px}.filters label{font-size:10px}.player-link{display:flex;gap:10px;align-items:center;color:var(--fg);font-weight:800}.player-link small{display:block;font-size:10px;font-weight:500}.count-badge{background:var(--primary-soft);color:var(--primary-ink);padding:6px 12px;border-radius:8px;font-size:12px}.tabs{display:flex;gap:5px;border-bottom:1px solid var(--border);margin:25px 0 18px;padding-bottom:10px;flex-wrap:wrap}.tabs .active{color:var(--primary-ink);background:var(--primary-soft)}.details p{overflow-wrap:anywhere}.login h1{font-size:24px}.login{padding:32px;border-top:3px solid var(--primary)}.mobile-menu{display:none}.pager{font-size:12px;justify-content:space-between;margin-top:18px}input:focus,select:focus{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-soft)}[hidden]{display:none!important}
@media(max-width:1150px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}.cols2{grid-template-columns:1fr}.topbar{padding:0 20px}.content{padding:24px 20px}.queue{padding:14px;gap:8px}.queue .small{font-size:10px}}
@media(max-width:800px){.shell{display:block}.side{display:none;position:fixed;left:0;top:76px;bottom:0;width:244px;height:calc(100vh - 76px);z-index:8;flex-direction:column;border-right:1px solid var(--border);background:var(--card)}.menu-open .side{display:flex}.side .who{margin-top:auto;width:auto}.mobile-menu{display:block}.topbar{position:sticky;top:0;z-index:9;gap:10px}.breadcrumb{display:none}.global-search{width:auto;flex:1}.content{padding:20px 14px}.queues{grid-template-columns:1fr}.queue strong{display:inline-block;margin:0 0 0 14px;font-size:20px}.pagehead{align-items:start;flex-direction:column;gap:8px}.pagehead .row{margin:0}h1{font-size:24px}.stat{padding:16px}.stat b{font-size:24px}.filters>*{max-width:100%}.pager{flex-wrap:wrap}.bar em{font-size:8px}}
html.dark{color-scheme:dark}html:not(.dark){color-scheme:light}
