:root{--bg:#f3f5f8;--fg:#1b2330;--mut:#6b7686;--card:#fff;--line:#e3e7ee;--acc:#0b6bcb;--on-acc:#fff;--ok:#117a43;--err:#b42318;--bar:56px}
@media(prefers-color-scheme:dark){:root{--bg:#0e131a;--fg:#e8edf4;--mut:#8f9bad;--card:#171f2a;--line:#2a3544;--acc:#4da3ff;--on-acc:#06121f;--ok:#4cc38a;--err:#ff7a70}}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;overscroll-behavior-y:none;min-height:100dvh}
header{position:sticky;top:0;z-index:6;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 16px;padding-top:max(6px,env(safe-area-inset-top));background:var(--card);border-bottom:1px solid var(--line)}
header b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.acts,nav.pages{display:flex;align-items:center;gap:2px}
header .pages{flex:1;justify-content:flex-end}
nav a,nav .link,nav .more,.acts a,.acts .link{display:inline-flex;align-items:center;justify-content:center;gap:2px;min-width:44px;height:44px;border-radius:12px;color:var(--mut);background:none;border:0;font:inherit;cursor:pointer;text-decoration:none;padding:0 6px}
nav a:hover,nav .link:hover,nav .more:hover,.acts a:hover,.acts .link:hover{background:var(--bg);color:var(--fg)}
nav a.on{color:var(--acc);background:color-mix(in srgb,var(--acc) 14%,transparent)}
nav .lang small{font-size:.65rem;font-weight:700}nav .lang svg{width:20px;height:20px}
nav .lbl,nav .more{display:none}
a{color:var(--acc)}
main{max-width:1100px;margin:0 auto;padding:16px;padding-left:max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right))}
h1{font-size:1.5rem;margin:.4em 0;line-height:1.25}h2{font-size:1.15rem}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px;margin:12px 0}.narrow{max-width:460px}
label{display:block;margin:12px 0;font-size:.9rem;color:var(--mut)}label input,label select{display:block;width:100%;margin-top:4px}
input,select{padding:11px 12px;min-height:46px;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--fg);font:inherit;max-width:100%}
input:focus,select:focus{outline:2px solid color-mix(in srgb,var(--acc) 55%,transparent);outline-offset:1px}
.chk{display:flex;gap:10px;align-items:flex-start;color:var(--fg)}.chk input{width:22px;height:22px;min-height:0;margin:2px 0 0;flex:none}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;background:var(--acc);color:var(--on-acc);border:0;border-radius:12px;padding:10px 18px;font:inherit;font-weight:600;cursor:pointer;margin:6px 0;text-decoration:none}
.btn.ghost{background:none;color:var(--acc);border:1px solid var(--acc)}.btn svg{width:20px;height:20px}
.btn:active{filter:brightness(.92)}
.link{color:var(--acc);background:none;border:0;font:inherit;cursor:pointer;padding:0}
td .link{min-height:38px;padding:6px 14px;border:1px solid var(--line);border-radius:10px;background:var(--bg);white-space:nowrap}
.acts .lang small{font-size:.65rem;font-weight:700}.acts .lang svg{width:20px;height:20px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin:12px 0}
.stat{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px}.stat span{display:block;color:var(--mut);font-size:.85rem}.stat b{font-size:1.35rem;overflow-wrap:anywhere}
.tablewrap{overflow-x:auto}table{border-collapse:collapse;width:100%;background:var(--card);border:1px solid var(--line);border-radius:10px}
th,td{padding:9px 10px;border-bottom:1px solid var(--line);text-align:left;font-size:.9rem;white-space:nowrap}th{color:var(--mut);font-weight:600}
.muted{color:var(--mut)}.err{color:var(--err)}.ok{color:var(--ok)}.inl{display:inline}.row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
code{background:var(--bg);padding:2px 6px;border-radius:4px;overflow-wrap:anywhere}#lnk{width:100%;margin:6px 0}
#board{height:calc(100dvh - 260px);min-height:320px;background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden;touch-action:none;cursor:grab}
#board svg{width:100%;height:100%;display:block}.node rect{fill:var(--bg);stroke:var(--line);stroke-width:1.5}.node.sus rect{stroke:var(--err)}.node.hit rect{stroke:var(--acc);stroke-width:3}
.node text{fill:var(--fg);font-size:12px;pointer-events:none}.node .s{fill:var(--mut);font-size:10.5px}.lnk{fill:none;stroke:var(--line);stroke-width:1.5}

/* ---------- мобильная версия ---------- */
@media(max-width:700px){
  body{padding-bottom:calc(var(--bar) + env(safe-area-inset-bottom) + 8px)}
  header{padding:6px 12px;padding-top:max(6px,env(safe-area-inset-top))}
  main{padding:12px;padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right))}
  h1{font-size:1.3rem}
  /* нижняя панель */
  header .pages,nav.pages{position:fixed;left:0;right:0;bottom:0;z-index:7;flex:none;justify-content:space-around;height:calc(var(--bar) + env(safe-area-inset-bottom));padding:0 4px env(safe-area-inset-bottom);background:var(--card);border-top:1px solid var(--line)}
  nav.pages a,nav.pages .more{flex:1;max-width:96px;height:var(--bar);border-radius:0;min-width:0}
  nav.pages a svg,nav.pages .more svg{width:26px;height:26px}
  nav.pages .more{display:inline-flex}
  nav.pages .xtra{display:none}
  nav.pages.open .xtra{display:flex}
  nav.pages.open{flex-wrap:wrap}
  /* выезжающее меню «Ещё» */
  nav.pages.open::before{content:"";position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:-1}
  nav.pages.open .xtra{position:fixed;left:12px;right:12px;width:auto;max-width:none;height:52px;justify-content:flex-start;gap:14px;padding:0 16px;background:var(--card);border:1px solid var(--line);border-radius:0;color:var(--fg);z-index:1}
  nav.pages.open .xtra .lbl{display:inline;font-size:1rem}
  nav.pages.open .xtra:nth-of-type(5){bottom:calc(var(--bar) + env(safe-area-inset-bottom) + 4*52px + 8px);border-radius:14px 14px 0 0}
  nav.pages.open .xtra:nth-of-type(6){bottom:calc(var(--bar) + env(safe-area-inset-bottom) + 3*52px + 8px)}
  nav.pages.open .xtra:nth-of-type(7){bottom:calc(var(--bar) + env(safe-area-inset-bottom) + 2*52px + 8px)}
  nav.pages.open .xtra:nth-of-type(8){bottom:calc(var(--bar) + env(safe-area-inset-bottom) + 52px + 8px);border-radius:0 0 14px 14px}
  /* формы и кнопки */
  .narrow{max-width:none}.card{padding:14px}
  .btn{width:100%}.row .btn{flex:1 1 140px}
  .row{gap:8px}.row input{flex:1 1 140px}
  form.row.card{align-items:stretch}form.row.card b{width:100%}
  .grid{grid-template-columns:1fr 1fr;gap:10px}.stat{padding:12px}.stat b{font-size:1.15rem}
  input,select{font-size:16px}
  /* таблицы -> карточки */
  .tablewrap{overflow:visible}
  table,tbody,tr,td{display:block;width:100%}table{background:none;border:0}
  tr:has(th){display:none}
  tr{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:6px 14px;margin:0 0 10px}
  td{display:flex;justify-content:space-between;align-items:center;gap:14px;white-space:normal;text-align:right;border-bottom:1px solid var(--line);padding:9px 0;overflow-wrap:anywhere}
  td:last-child{border-bottom:0}
  td[data-label]::before{content:attr(data-label);color:var(--mut);font-size:.8rem;text-align:left;flex:none}
  td input[type=checkbox]{width:24px;height:24px;margin:0}
  td:empty{display:none}
  #board{height:calc(100dvh - 300px - env(safe-area-inset-bottom))}
}
@media(max-width:360px){.grid{grid-template-columns:1fr}}

/* ---------- профиль ---------- */
.phead{display:flex;align-items:center;gap:14px;margin:6px 0 14px}.phead h1{margin:0;font-size:1.3rem}
.avatar{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;flex:none;font-weight:700;font-size:1.25rem;color:var(--on-acc);background:linear-gradient(135deg,var(--acc),color-mix(in srgb,var(--acc) 55%,#7c3aed))}
.cardpreview{position:relative;max-width:360px;aspect-ratio:1.586;border-radius:20px;padding:20px;margin:0 0 16px;display:flex;flex-direction:column;justify-content:flex-end;gap:6px;color:#fff;overflow:hidden;
  background:linear-gradient(135deg,#0b6bcb,#5b3fd0 70%);box-shadow:0 10px 24px rgba(11,60,140,.28)}
.cardpreview::after{content:"";position:absolute;right:-40px;top:-40px;width:160px;height:160px;border-radius:50%;background:rgba(255,255,255,.12)}
.chip{position:absolute;left:20px;top:22px;width:42px;height:32px;border-radius:7px;background:linear-gradient(135deg,#f6d77a,#c99a2e)}
.cnum{font:600 clamp(1.05rem,5.4vw,1.4rem)/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.08em}
.cname{font-size:.85rem;letter-spacing:.1em;opacity:.9;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(max-width:480px){.two{grid-template-columns:1fr;gap:0}}
.card h2{margin:4px 0 0;font-size:1rem}.hint{font-size:.85rem;color:var(--mut);margin:10px 0}
.btn.danger{color:var(--err);border-color:var(--err)}
.toast{position:sticky;top:8px;z-index:4;padding:12px 14px;border-radius:12px;margin:0 0 12px;font-weight:600;transition:opacity .4s,transform .4s;box-shadow:0 4px 14px rgba(0,0,0,.12)}
.toast.ok{background:color-mix(in srgb,var(--ok) 16%,var(--card));color:var(--ok);border:1px solid var(--ok)}
.toast.err{background:color-mix(in srgb,var(--err) 12%,var(--card));color:var(--err);border:1px solid var(--err)}
.toast.gone{opacity:0;transform:translateY(-8px);pointer-events:none}

/* ---------- сканер карты ---------- */
.noscroll{overflow:hidden}
.scanner{position:fixed;inset:0;z-index:50;background:#000;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff}
.scanner[hidden]{display:none}
.scanner video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.scanner .frame{position:relative;width:min(92vw,520px);aspect-ratio:1.9;border-radius:18px;box-shadow:0 0 0 100vmax rgba(0,0,0,.55)}
.frame i{position:absolute;width:30px;height:30px;border:4px solid #fff;border-radius:6px}
.frame i:nth-child(1){left:-2px;top:-2px;border-right:0;border-bottom:0}.frame i:nth-child(2){right:-2px;top:-2px;border-left:0;border-bottom:0}
.frame i:nth-child(3){left:-2px;bottom:-2px;border-right:0;border-top:0}.frame i:nth-child(4){right:-2px;bottom:-2px;border-left:0;border-top:0}
.smsg{position:absolute;left:16px;right:16px;top:max(24px,env(safe-area-inset-top));text-align:center;font-weight:600;text-shadow:0 1px 6px #000}
.sbar{position:absolute;left:16px;right:16px;bottom:calc(36px + env(safe-area-inset-bottom));display:flex;gap:10px}
.sbar .btn{flex:1;background:#fff;color:#111;border:0}.sbar .btn.ghost{background:rgba(255,255,255,.18);color:#fff;border:1px solid rgba(255,255,255,.5)}
.spriv{position:absolute;left:16px;right:16px;bottom:calc(14px + env(safe-area-inset-bottom));text-align:center;font-size:.72rem;opacity:.8}
