/* Testing Engine — продуктовый интерфейс: тёмный сайдбар + светлая рабочая область. */
:root{
  --bg:#f3f4f7; --surface:#fff; --surface-2:#fafbfd;
  --border:#e7e9f1; --border-strong:#d6dae6;
  --ink:#171a23; --ink-2:#5b6072; --ink-3:#8a8fa2;
  --side:#1b1f2e; --side-2:#12151f; --side-ink:#9aa0b6; --side-line:rgba(255,255,255,.07);
  --accent:#4f6ef2; --accent-d:#3a55d9; --accent-soft:#edf0fe;
  --green:#0f9d6b; --green-soft:#e6f6ef;
  --amber:#c47d09; --amber-soft:#fbf1da;
  --red:#dd3b3b; --red-soft:#fcebeb;
  --r:11px; --r-sm:8px;
  --sh-sm:0 1px 2px rgba(20,22,35,.06);
  --sh:0 6px 20px -8px rgba(20,22,35,.18),0 1px 3px rgba(20,22,35,.05);
  --sh-lg:0 22px 48px -22px rgba(20,22,35,.40);
  --sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --mono:ui-monospace,"SF Mono","JetBrains Mono",Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased}
a{color:var(--accent-d);text-decoration:none}
a:hover{text-decoration:underline}
h1{font-size:1.7rem;font-weight:700;letter-spacing:-.025em;margin:0 0 4px}
h2{font-size:1.18rem;font-weight:650;letter-spacing:-.015em;margin:1.8em 0 .7em}
h3{margin:0 0 .35em;font-size:1.02rem;font-weight:650}
.ic{width:18px;height:18px;flex:none}

/* ---------- App layout (admin sidebar) ---------- */
.layout{display:flex;min-height:100vh}
.sidebar{width:250px;flex:none;background:linear-gradient(180deg,var(--side),var(--side-2));
  color:var(--side-ink);display:flex;flex-direction:column;padding:18px 14px;position:sticky;top:0;height:100vh}
.sidebar .brand{display:block;font-weight:750;font-size:1.12rem;letter-spacing:-.03em;color:#fff;padding:8px 10px 18px}
.sidebar .brand:hover{text-decoration:none}
.side-nav{display:flex;flex-direction:column;gap:3px;flex:1}
.side-nav a{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:9px;
  color:var(--side-ink);font-size:.92rem;font-weight:500;transition:background .14s,color .14s}
.side-nav a .ic{opacity:.85}
.side-nav a:hover{background:rgba(255,255,255,.06);color:#fff;text-decoration:none}
.side-nav a.active{background:var(--accent);color:#fff;box-shadow:0 6px 16px -6px rgba(79,110,242,.7)}
.side-nav a.active .ic{opacity:1}
.side-sep{height:1px;background:var(--side-line);margin:8px 10px}
.side-bottom{padding:4px 8px;margin-top:auto}
.side-user{display:flex;align-items:center;gap:10px;padding:12px 8px 4px;border-top:1px solid var(--side-line)}
.avatar{width:34px;height:34px;flex:none;border-radius:50%;background:var(--accent);color:#fff;
  display:flex;align-items:center;justify-content:center;font-weight:650;font-size:.95rem}
.who{display:flex;flex-direction:column;min-width:0;flex:1}
.who strong{color:#eceef6;font-size:.85rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.who span{color:var(--side-ink);font-size:.72rem;font-family:var(--mono);text-transform:uppercase;letter-spacing:.04em}
.logout-form button{background:none;border:none;color:var(--side-ink);cursor:pointer;padding:6px;border-radius:7px;display:flex}
.logout-form button:hover{background:rgba(255,255,255,.08);color:#fff}

.content{flex:1;min-width:0;display:flex;flex-direction:column}
.content-inner{width:100%;max-width:1120px;margin:0 auto;padding:40px 46px 64px}
/* Банк вопросов — двухпанельный (дерево+таблица) макет, ему тесно в общем лимите
   ширины страниц-форм: на широких экранах внутри 1120px оставалось много пустого
   поля по бокам. Расширяем только для страниц с деревом банка, остальные формы
   не трогаем. */
.content-inner:has(.bank-layout){max-width:1600px}

/* ---------- Take layout (testee top-bar) ---------- */
.take-layout{min-height:100vh;display:flex;flex-direction:column}
.take-bar{display:flex;align-items:center;justify-content:space-between;padding:14px 28px;
  background:var(--surface);border-bottom:1px solid var(--border);box-shadow:var(--sh-sm);position:sticky;top:0;z-index:20}
.take-brand{font-weight:750;font-size:1.12rem;letter-spacing:-.03em;color:var(--ink)}
.take-right{display:flex;align-items:center;gap:14px}
.take-user{font-size:.88rem;font-weight:500;color:var(--ink-2)}
.take-content{flex:1;display:flex;flex-direction:column}
.take-inner{width:100%;max-width:900px;margin:0 auto;padding:36px 28px 64px}
.take-bar .logout-form button{color:var(--ink-2);display:flex;align-items:center;gap:6px;font-size:.85rem}
.take-bar .logout-form button:hover{color:var(--ink);background:var(--surface-2)}
.take-bar .btn.small{display:inline-flex;align-items:center;gap:6px}

/* ---------- Auth (login/register) ---------- */
.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(1200px 600px at 50% -10%,#eef1fb 0,var(--bg) 60%)}
.auth-content{flex:none}
.auth-inner{max-width:400px;padding:0}
.auth-brand{text-align:center;font-weight:750;font-size:1.45rem;letter-spacing:-.03em;margin-bottom:22px;color:var(--ink)}
.auth-lang{text-align:center;margin-bottom:20px}

/* ---------- Language switcher ---------- */
.lang-form{display:inline-flex;align-items:center}
.lang-sw{display:inline-flex;align-items:center;gap:5px;flex-direction:row;font-size:.82rem;font-weight:500;color:var(--side-ink);cursor:pointer}
.lang-sw .ic{width:16px;height:16px;opacity:.7}
.lang-sw select{background:transparent;border:none;color:inherit;font:inherit;cursor:pointer;padding:2px 4px;outline:none;-webkit-appearance:none;appearance:none}
.lang-sw select option{background:var(--surface);color:var(--ink)}
.lang-go{background:none;border:none;color:inherit;cursor:pointer;font-size:.85rem;padding:2px 4px;opacity:.6;transition:opacity .14s}
.lang-go:hover{opacity:1}
/* Светлая тема для auth/take */
.auth-lang .lang-sw,.take-bar .lang-sw{color:var(--ink-2)}
.auth-lang .lang-sw select,.take-bar .lang-sw select{color:var(--ink-2)}

/* ---------- Page header ---------- */
.page-head{margin-bottom:26px}
.eyebrow{font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:var(--accent-d);font-weight:600}
.page-head p.sub{color:var(--ink-2);margin:.25em 0 0;font-size:.95rem}

/* ---------- Cards / panels ---------- */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:26px;box-shadow:var(--sh)}
.card.narrow{box-shadow:var(--sh-lg)}
.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:20px 22px;margin-bottom:20px;box-shadow:var(--sh-sm)}
.panel>summary{cursor:pointer;font-weight:600;font-size:.95rem;list-style:none;display:flex;align-items:center;gap:8px}
.panel>summary::-webkit-details-marker{display:none}
.panel>summary::before{content:"+";font-family:var(--mono);color:var(--accent);font-weight:700}
.panel[open]>summary::before{content:"\2013"}

/* ---------- Share panel ---------- */
.share-panel{margin-top:24px}
.share-panel h3{margin:0 0 4px}
.share-panel .sub{margin:0 0 14px}
.share-row{display:flex;gap:10px;align-items:center}
.share-input{flex:1;font-family:var(--mono);font-size:.88rem;background:var(--surface-2);color:var(--ink-2);cursor:text}

/* ---------- Welcome box (testee) ---------- */
.welcome-box{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:32px;text-align:center}
.welcome-box p{margin:.4em 0}

/* ---------- Stat cards ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:18px}
.stat-card{display:flex;flex-direction:column;gap:14px;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r);padding:22px;box-shadow:var(--sh-sm);transition:transform .16s,box-shadow .16s,border-color .16s;
  color:var(--ink);animation:rise .45s ease both}
.stat-card:nth-child(2){animation-delay:.06s}
.stat-card:nth-child(3){animation-delay:.12s}
.stat-card:nth-child(4){animation-delay:.18s}
.stat-card:hover{transform:translateY(-3px);box-shadow:var(--sh);border-color:var(--border-strong);text-decoration:none}
.stat-ic{width:42px;height:42px;border-radius:11px;display:flex;align-items:center;justify-content:center}
.stat-ic .ic{width:21px;height:21px}
.stat-ic.blue{background:var(--accent-soft);color:var(--accent-d)}
.stat-ic.green{background:var(--green-soft);color:var(--green)}
.stat-ic.amber{background:var(--amber-soft);color:var(--amber)}
.stat-num{font-size:2.5rem;font-weight:750;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.stat-label{font-size:.78rem;color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;font-weight:600}

/* ---------- Quick start ---------- */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:6px}
.step{position:relative;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-sm);padding:18px 18px 20px}
.step .n{width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;
  justify-content:center;font-weight:700;font-size:.85rem;font-family:var(--mono);margin-bottom:10px}
.step h4{margin:0 0 4px;font-size:.98rem}
.step p{margin:0 0 12px;color:var(--ink-2);font-size:.86rem}

/* ---------- Help steps ---------- */
.help-steps{display:flex;flex-direction:column;gap:18px}
.help-step{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:22px 26px;box-shadow:var(--sh-sm)}
.help-step h3{color:var(--accent-d);font-size:1.02rem;margin-bottom:6px}
.help-step p{margin:0;color:var(--ink-2);font-size:.92rem;line-height:1.6}

/* ---------- Forms ---------- */
.form{display:flex;flex-direction:column;gap:15px}
.form.wide{max-width:740px}
label{display:flex;flex-direction:column;gap:6px;font-size:.8rem;color:var(--ink-2);font-weight:600}
label.ck{flex-direction:row;align-items:center;gap:9px;font-weight:500;font-size:.92rem;color:var(--ink);padding:3px 0}
input[type=text],input[type=email],input[type=password],input[type=number],select,textarea{
  font:inherit;padding:10px 12px;border:1px solid var(--border-strong);border-radius:var(--r-sm);
  background:var(--surface);color:var(--ink);width:100%;transition:border-color .14s,box-shadow .14s}
/* Без явного цвета у option браузер смешивает стиль select с системной темой
   попапа (особенно в тёмном режиме Windows) и рисует часть пунктов вразнобой. */
select option{background:var(--surface);color:var(--ink)}
textarea{resize:vertical}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:15px}
.row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:15px}
fieldset{border:1px solid var(--border);border-radius:var(--r-sm);padding:16px 18px;margin:0}
legend{font-size:.78rem;font-weight:700;padding:0 7px;color:var(--accent-d);text-transform:uppercase;letter-spacing:.05em}
.bar{display:flex;gap:11px;align-items:center;flex-wrap:wrap;margin-bottom:22px}
.bar input,.bar select{width:auto}

/* ---------- Buttons ---------- */
.btn,button.btn{font:inherit;font-weight:600;font-size:.9rem;cursor:pointer;padding:10px 18px;border-radius:var(--r-sm);
  border:1px solid var(--border-strong);background:var(--surface);color:var(--ink);transition:.14s;display:inline-flex;align-items:center;gap:8px}
.btn:hover{background:#f1f2f6;text-decoration:none;border-color:var(--ink-3)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 8px 18px -8px rgba(79,110,242,.6)}
.btn.primary:hover{background:var(--accent-d);border-color:var(--accent-d)}
.btn.small{padding:6px 13px;font-size:.82rem}
button.link{background:none;border:none;color:var(--accent-d);cursor:pointer;font:inherit;font-size:.88rem;font-weight:500;padding:0}
button.link:hover{text-decoration:underline}
button.link.danger,.danger{color:var(--red)}
.inline{display:inline}
form.inline{display:inline;margin-left:12px}

/* ---------- Tables ---------- */
.grid{width:100%;border-collapse:separate;border-spacing:0;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--r);overflow:hidden;box-shadow:var(--sh-sm)}
.grid th{text-align:left;font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);
  font-weight:700;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--surface-2)}
.grid td{padding:13px 16px;border-bottom:1px solid var(--border);font-size:.9rem;vertical-align:middle}
.grid tr:last-child td{border-bottom:none}
.grid tbody tr:hover td{background:var(--surface-2)}
.actions{white-space:nowrap;text-align:right}
.rowbad td{background:var(--red-soft) !important}

/* ---------- Tags / chips ---------- */
.tag{display:inline-block;font-family:var(--mono);font-size:.68rem;padding:3px 9px;border-radius:20px;
  text-transform:uppercase;letter-spacing:.03em;font-weight:600}
.tag.green{background:var(--green-soft);color:var(--green)}
.tag.red{background:var(--red-soft);color:var(--red)}
.tag.gray{background:#eef0f4;color:var(--ink-2)}
/* ---------- Банк вопросов: дерево + результаты ---------- */
.bank-layout{display:flex;gap:22px;align-items:flex-start;margin-top:16px}
.bank-tree{flex:0 0 230px;min-width:160px;max-width:60vw;display:flex;flex-direction:column;gap:2px;padding:14px;
  border:1px solid var(--border-strong);border-radius:var(--r-sm);background:var(--surface);
  max-height:75vh;overflow:auto;position:sticky;top:16px;resize:horizontal}
.tree-block{display:flex;flex-direction:column;margin-top:4px}
.tree-block-head{display:flex;align-items:center;gap:2px}
.tree-block-head .tree-node{flex:1;min-width:0}
.tree-toggle{flex:0 0 auto;width:32px;height:32px;display:flex;align-items:center;justify-content:center;
  background:none;border:none;color:var(--ink-3);cursor:pointer;border-radius:7px;padding:0}
.tree-toggle:hover{background:var(--surface-2);color:var(--ink)}
.tree-toggle::before{content:"▾";display:inline-block;font-size:1.05rem;line-height:1;transition:transform .12s}
.tree-block:not(.expanded) .tree-toggle::before{transform:rotate(-90deg)}
.tree-block:not(.expanded) .tree-types{display:none}
.tree-node{display:block;padding:6px 9px;border-radius:7px;font-size:.86rem;font-weight:500;
  color:var(--ink-2);transition:background .12s,color .12s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tree-node:hover{background:var(--surface-2);color:var(--ink);text-decoration:none}
.tree-node.active{background:var(--accent);color:#fff}
.tree-types{display:flex;flex-direction:column;gap:1px;margin-left:12px;border-left:1px solid var(--border-strong);padding-left:8px}
.tree-subnode{font-size:.8rem;font-weight:450;padding:4px 9px}
.bank-results{flex:1;min-width:0}
/* table-layout:fixed + colgroup (в PHP) — колонки не "гуляют" от ширины контента,
   а колонке "Вопрос" всегда достаётся большая часть места, поэтому перенос текста
   идёт по пробелам, а не посреди слова (overflow-wrap — только аварийный случай
   для одного слишком длинного "слова" без пробелов, не общее правило переноса). */
.bank-table{table-layout:fixed}
.bank-table td{overflow-wrap:break-word}
.bank-filters{display:flex;gap:9px;margin-bottom:14px;flex-wrap:wrap}
.bank-filters input[type=text]{flex:1;min-width:180px}
.bank-filters select{width:auto}
.sort-link{color:var(--ink-2);font-weight:600;white-space:nowrap}
.sort-link:hover{color:var(--accent-d);text-decoration:none}
.sort-link.active{color:var(--accent-d)}
.bank-count{margin:10px 0 0;font-size:.82rem}
.pager{display:flex;align-items:center;gap:4px;margin-top:10px;flex-wrap:wrap}
.pager-link,.pager-current{min-width:30px;text-align:center;padding:5px 8px;border-radius:7px;font-size:.84rem;font-weight:600}
.pager-link{color:var(--ink-2);border:1px solid var(--border-strong)}
.pager-link:hover{border-color:var(--accent);color:var(--accent-d);text-decoration:none}
.pager-current{background:var(--ink);color:#fff}
.pager-gap{color:var(--ink-3);padding:0 2px}
@media (max-width:860px){
  .bank-layout{flex-direction:column}
  .bank-tree{flex-basis:auto;width:100%;max-width:none;position:static;max-height:none;resize:none}
  .tree-types{margin-left:8px}
}

/* ---------- Flash ---------- */
.flash{padding:12px 16px;border-radius:var(--r-sm);margin-bottom:18px;font-size:.9rem;font-weight:500;border:1px solid;display:flex;gap:8px}
.flash.error{background:var(--red-soft);border-color:#f2c4c4;color:#a72020}
.flash.ok{background:var(--green-soft);border-color:#bce6d3;color:#0a7350}
.flash.info{background:#eef0f4;border-color:var(--border-strong);color:var(--ink-2)}

.muted{color:var(--ink-3)}
.back{font-size:.84rem;color:var(--ink-2);display:inline-flex;align-items:center;gap:5px;margin-bottom:14px;font-weight:500}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:18px}
.test-card{display:flex;flex-direction:column;gap:9px;animation:rise .4s ease both}
.test-card .btn{margin-top:auto;justify-content:center}
@keyframes rise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---------- Selection / option rows ---------- */
.sel-row{display:grid;grid-template-columns:1fr 90px auto auto;gap:11px;align-items:center;margin-bottom:9px}
.opt-row{display:grid;grid-template-columns:30px 1fr;gap:9px;align-items:center;margin-bottom:7px}
.opt-row .mark{display:flex;justify-content:center}

/* ---------- Review ---------- */
.review{padding-left:1.2em}
.review li{margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--border)}
.q-prompt{font-weight:600}
.q-ans{font-family:var(--mono);font-size:.85rem;color:var(--ink-2);margin:5px 0}
.q-mark.ok{color:var(--green);font-weight:600}.q-mark.no{color:var(--red);font-weight:600}
.q-grade input{width:90px;display:inline-block}

/* ---------- Runner (take.js) ---------- */
.loader{font-family:var(--mono);color:var(--ink-3);padding:60px;text-align:center}
.run-head{position:sticky;top:0;z-index:10;display:flex;justify-content:space-between;align-items:center;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:14px 20px;margin-bottom:18px;box-shadow:var(--sh)}
.run-head h2{margin:0}
.timer{font-family:var(--mono);font-size:1.35rem;font-weight:700;padding:6px 14px;border-radius:var(--r-sm);background:var(--ink);color:#fff;font-variant-numeric:tabular-nums}
.timer.warn{background:var(--amber)}
.timer.danger{background:var(--red);animation:pulse 1s infinite}
@keyframes pulse{50%{opacity:.55}}
.q-block{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:20px 22px;margin-bottom:15px;box-shadow:var(--sh-sm)}
.q-block .q-no{font-family:var(--mono);font-size:.72rem;color:var(--accent-d);text-transform:uppercase;letter-spacing:.05em;font-weight:600}
.q-block .q-text{font-weight:600;margin:5px 0 14px;font-size:1.02rem}
.opt{display:flex;align-items:center;gap:11px;padding:11px 14px;border:1px solid var(--border);border-radius:var(--r-sm);margin-bottom:8px;cursor:pointer;transition:.12s}
.opt:hover{border-color:var(--border-strong);background:var(--surface-2)}
.opt input{width:auto;margin:0}
.opt.sel{border-color:var(--accent);background:var(--accent-soft)}
.scale{display:flex;gap:9px;flex-wrap:wrap}
.scale label{flex-direction:column;align-items:center;border:1px solid var(--border);border-radius:var(--r-sm);padding:9px 16px;cursor:pointer;font-family:var(--mono);font-weight:600}
.scale label.sel{border-color:var(--accent);background:var(--accent-soft)}
.save-state{font-family:var(--mono);font-size:.72rem;color:var(--green);height:14px;font-weight:600}
.result-box{text-align:center;padding:48px 24px}
.result-box .big{font-size:3.4rem;font-weight:750;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.result-box .verdict{display:inline-block;margin-top:14px;padding:7px 20px;border-radius:24px;font-weight:600}
.verdict.pass{background:var(--green-soft);color:var(--green)}
.verdict.fail{background:var(--red-soft);color:var(--red)}
.verdict.wait{background:#eef0f4;color:var(--ink-2)}

/* ---------- Responsive ---------- */
@media (max-width:820px){
  .sidebar{width:64px;padding:16px 8px}
  .sidebar .brand{font-size:0;padding:8px 4px 14px}
  .sidebar .brand::after{content:"☰";font-size:1.3rem;color:var(--accent)}
  .side-nav a span,.who,.side-bottom{display:none}
  .side-nav a{justify-content:center;padding:11px}
  .side-user{justify-content:center}
  .content-inner{padding:26px 18px 50px}
  .stat-grid,.row2,.row3,.steps{grid-template-columns:1fr}
  .take-bar{padding:12px 16px}
  .take-inner{padding:24px 16px 50px}
  .share-row{flex-direction:column}
}
