/* Дизайн портала (токены, оболочка, компоненты) — общий для chz и chzsale.
   Вынесено из templates/base.html 29.09.2026 без изменений. */
:root{
  --bg:#eef1f5; --panel:#ffffff; --ink:#111827; --muted:#6b7280; --line:#e5e7eb;
  --brand:#111827; --accent:#f5d90a; --accent-ink:#111827;
  --blue:#2563eb; --sidebar:#0f172a; --sidebar-ink:#cbd5e1; --sidebar-active:#1e293b;
  /* семантические статусы (отдельно от брендового акцента) — §56 */
  --ok:#059669; --warn:#d97706; --danger:#dc2626; --info:#2563eb;
  /* шкала отступов (§63) */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-6:24px; --sp-8:32px; --sp-12:48px;
  /* типографика (§64) */
  --fs-title:20px; --fs-section:15px; --fs-body:14px; --fs-secondary:13px; --fs-caption:12px;
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font:14px/1.5 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--ink)}
a{color:var(--blue);text-decoration:none}
a:hover{text-decoration:underline}
.layout{display:grid;grid-template-columns:230px 1fr;height:100vh;overflow:hidden}
/* sidebar — статичный, футер всегда внизу */
aside{background:var(--sidebar);color:var(--sidebar-ink);display:flex;flex-direction:column;padding:14px 12px;gap:4px;height:100vh}
aside .brand{color:#fff;font-weight:700;font-size:15px;padding:8px 10px 14px;display:flex;gap:8px;align-items:center}
aside nav a{display:flex;align-items:center;gap:10px;color:var(--sidebar-ink);padding:9px 12px;border-radius:8px;font-weight:500}
aside nav a:hover{background:var(--sidebar-active);text-decoration:none;color:#fff}
aside nav a.active{background:var(--sidebar-active);color:#fff}
aside nav a.disabled{opacity:.45;pointer-events:none}
/* группы навигации (Apple HIG §4): заголовок-разделитель + сворачивание */
.nav-group{margin-bottom:2px}
.nav-label{width:100%;display:flex;align-items:center;justify-content:space-between;
  background:none;border:none;cursor:pointer;color:#64748b;font-weight:600;
  font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;
  padding:10px 12px 4px;font-family:inherit}
.nav-label:hover{color:#94a3b8}
.nav-chev{width:13px;height:13px;transition:transform .15s;opacity:.7}
.nav-group.collapsed .nav-chev{transform:rotate(-90deg)}
.nav-group.collapsed .nav-items{display:none}
.nav-items{display:flex;flex-direction:column;gap:2px}
aside .spacer{flex:1}
aside .env{font-size:11px;color:#64748b;padding:8px 12px;border-top:1px solid #1e293b;margin-top:8px}
/* main — прокручивается только контент, шапка и меню статичны */
.main{display:flex;flex-direction:column;min-width:0;height:100vh;overflow:hidden}
header.top{background:var(--panel);border-bottom:1px solid var(--line);padding:12px 22px;display:flex;align-items:center;gap:14px;flex:0 0 auto}
header.top h1{font-size:16px;margin:0;font-weight:650}
header.top .right{margin-left:auto;display:flex;align-items:center;gap:14px;color:var(--muted)}
.content{padding:20px 22px;min-width:0;flex:1 1 auto;overflow:auto}
/* режим встраивания во фрейм (?embed=1): без сайдбара и шапки */
body.embed .layout{grid-template-columns:1fr}
body.embed aside,body.embed header.top{display:none}
body.embed #topIssues{display:none}   /* плашку «Не заполнено» уже показывает страница-хозяин */
body.embed .content{padding:14px 16px}
/* во фрейме рабочего стола содержимое тянется на всю ширину рабочей области */
body.embed .content > div[style*="max-width"]{max-width:none !important}
body.embed .nf,body.embed .ni,body.embed .settings-scope{max-width:none !important}
/* подменю раздела «Настройки»: Подключение / Ключи / Лог */
.subnav{display:flex;gap:4px;margin-bottom:18px;border-bottom:1px solid var(--line)}
.subnav a{padding:9px 16px;color:var(--muted);font-weight:600;border:1px solid transparent;border-bottom:none;border-radius:8px 8px 0 0;margin-bottom:-1px}
.subnav a:hover{color:var(--ink);text-decoration:none;background:var(--panel)}
.subnav a.active{color:var(--ink);background:var(--panel);border-color:var(--line)}
/* раздел «Настройки»: единый размер колонки и единый вид карточек/заголовков */
.settings-scope{max-width:940px}
.settings-scope .subnav{max-width:none}
.settings-scope .card{max-width:none !important;overflow-x:auto}
.settings-scope .card h3{font-size:14px !important;font-weight:650 !important}
.settings-scope .card>b:first-child,
.settings-scope .card>div:first-child>b:first-child{font-size:14px;font-weight:650}
/* components */
.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px 18px;margin-bottom:16px}
table{width:100%;border-collapse:collapse}
th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top}
th{color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.04em}
.badge{display:inline-block;padding:1px 8px;border-radius:20px;font-size:11px;font-weight:600;white-space:nowrap}
/* бейджи-баннеры (display:block) переносят текст, чтобы не распирать карточку */
.badge[style*="display:block"]{white-space:normal}
.b-new{background:#eef2ff;color:#3730a3}.b-progress{background:#fff7ed;color:#9a3412}
.b-done{background:#ecfdf5;color:#065f46}.b-error{background:#fef2f2;color:#991b1b}
.b-gray{background:#f1f5f9;color:#475569}
.muted{color:var(--muted)}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}
.btn{background:var(--accent);color:var(--accent-ink);border:none;padding:8px 16px;border-radius:8px;font-weight:600;cursor:pointer}
.btn:hover{filter:brightness(.96)}
/* заблокированное действие: читаемый серый на белом (без «размытия» opacity) */
.btn:disabled,.btn.is-off,.btn[disabled]{background:#e2e8f0;color:#334155;cursor:not-allowed;filter:none;opacity:1}
.btn:disabled:hover,.btn.is-off:hover,.btn[disabled]:hover{filter:none}
.btn:disabled svg.lucide,.btn.is-off svg.lucide,.btn[disabled] svg.lucide{opacity:.9}
/* система кнопок (§60): одна первичная на экран, остальные — вторичные/третичные/опасные */
.btn-secondary{background:#e5e7eb;color:#374151}
.btn-secondary:hover{filter:brightness(.97)}
/* дозагрузка крипто-хвостов (_crypto_tails.html): строка-приёмник файла в стиле списков HIG */
.ct{margin-top:10px}
.ct-drop{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px dashed var(--line);border-radius:12px;background:var(--panel);cursor:pointer;transition:border-color .15s,background .15s}
.ct-drop:hover,.ct-drop:focus-visible,.ct-drop.over{border-color:#0071e3;background:color-mix(in srgb,#0071e3 5%,transparent);outline:none}
.ct.busy .ct-drop{opacity:.6;cursor:progress}
.ct-ic{flex:0 0 32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,#0071e3 12%,transparent);color:#0071e3}
.ct-ic svg{width:17px;height:17px}
.ct-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.ct-t{font-size:13px;font-weight:600}
.ct-s{font-size:12px;color:var(--muted);line-height:1.35}
.ct-btn{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:980px;background:color-mix(in srgb,#0071e3 12%,transparent);color:#0071e3;font-size:12.5px;font-weight:500;white-space:nowrap}
.ct-btn svg{width:14px;height:14px}
/* компактно — хвосты не нужны для нанесения: строка без рамки-приёмника и без пояснения */
.ct-compact .ct-drop{border-style:solid;border-color:transparent;padding:6px 0;background:none}
.ct-compact .ct-drop:hover,.ct-compact .ct-drop:focus-visible,.ct-compact .ct-drop.over{border-color:#0071e3;padding:6px 8px}
.ct-compact .ct-ic{flex-basis:24px;height:24px;border-radius:6px}
.ct-compact .ct-ic svg{width:14px;height:14px}
.ct-compact .ct-s{display:none}
.ct-compact .ct-t{font-weight:500}
.ct-compact .ct-btn{background:none;padding:4px 6px}
.ct-msg{display:flex;gap:6px;align-items:flex-start;font-size:12.5px;padding:0 4px}
.ct-msg:not(:empty){margin-top:6px}
.ct-msg svg{width:15px;height:15px;flex:0 0 auto;margin-top:1px}
.ct-ok{color:var(--ok)} .ct-err{color:var(--danger)} .ct-warn{color:var(--warn)} .ct-wait{color:var(--muted)}
.ct-wait svg{animation:ct-spin 1s linear infinite}
@keyframes ct-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.ct-wait svg{animation:none}}
@media (hover:none){.ct-dnd{display:none}}
@media (max-width:560px){.ct-drop{flex-wrap:wrap;align-items:flex-start}.ct-txt{flex:1 1 calc(100% - 44px)}.ct-btn{margin-left:44px}}
/* блок «Продажа» (_sale.html) */
.sale-msg{display:flex;gap:6px;align-items:flex-start;padding:5px 8px;border-radius:8px;margin-top:4px}
.sale-err{background:color-mix(in srgb,var(--danger) 10%,transparent);color:var(--danger)}
.sale-warn{background:color-mix(in srgb,var(--warn) 12%,transparent);color:var(--warn)}
.sale-ok{background:color-mix(in srgb,var(--ok) 10%,transparent);color:var(--ok)}
.sale-lines th{font-weight:600;font-size:12px;color:var(--muted);text-align:center}
.sale-grid label{min-width:0;display:flex;flex-direction:column;gap:3px}
.sale-grid input,.sale-grid select{box-sizing:border-box;width:100%;max-width:100%}
.sale-lines td,.sale-lines th{padding:6px 6px}
.sale-lines select{max-width:150px}
.sale-lines input{max-width:96px;box-sizing:border-box}
.btn-tertiary{background:none;color:var(--blue)}
.btn-tertiary:hover{background:#eff6ff;filter:none}
.btn-danger{background:#fee2e2;color:#b91c1c}
/* доступность (§65): видимый фокус с клавиатуры, крупные hit-области у ссылок-иконок */
a:focus-visible,button:focus-visible,.btn:focus-visible,input:focus-visible,
select:focus-visible,textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible{
  outline:2px solid var(--blue);outline-offset:2px;border-radius:6px}
/* скелетон загрузки (§58): вместо глобального спиннера — контурная заглушка */
.skeleton{background:linear-gradient(90deg,#eef1f5 25%,#e2e8f0 37%,#eef1f5 63%);
  background-size:400% 100%;animation:skel 1.4s ease infinite;border-radius:6px;color:transparent!important}
@keyframes skel{0%{background-position:100% 0}100%{background-position:-100% 0}}
/* уважать системную настройку «уменьшить движение» */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition-duration:.01ms !important;animation-duration:.01ms !important;
    scroll-behavior:auto !important}
  .skeleton{animation:none}
}
select,input[type=file]{padding:7px 8px;border:1px solid var(--line);border-radius:8px;background:#fff;font:inherit}
/* Иконки Lucide — единственный источник иконок в интерфейсе */
svg.lucide{width:1em;height:1em;vertical-align:-0.14em;display:inline-block;flex:none;stroke-width:2}
aside nav a svg.lucide,aside .brand svg.lucide{width:17px;height:17px}
.btn svg.lucide{vertical-align:-0.15em}
/* переключатель ключа в шапке — гибкая ширина */
#keySwitch{min-width:240px;max-width:520px}
.hdr-search input::placeholder{color:var(--muted)}
/* поиск живёт только в шапке — держим его видимым; прячем лишь на узких телефонах */
@media (max-width:768px){ .hdr-search{display:none !important} }

/* ===== Карточка ошибки ЧЗ с подсветкой и решением ===== */
.errcard{border:1px solid;border-left-width:4px;border-radius:9px;padding:9px 12px;margin:6px 0;font-size:12.5px}
.errcard--error{background:#fef2f2;border-color:#fecaca;border-left-color:#dc2626;color:#7f1d1d}
.errcard--warning{background:#fffbeb;border-color:#fde68a;border-left-color:#d97706;color:#78350f}
.errcard--info{background:#eff6ff;border-color:#bfdbfe;border-left-color:#2563eb;color:#1e3a8a}
.errcard__head{display:flex;align-items:center;gap:7px;font-weight:700}
.errcard__head svg.lucide{flex:none}
.errcard__body{margin:4px 0 0;opacity:.92}
.errcard__fix{display:flex;gap:7px;align-items:flex-start;margin-top:7px;padding:7px 9px;
  background:rgba(255,255,255,.6);border-radius:7px}
.errcard__fix svg.lucide{flex:none;margin-top:2px;color:#b45309}
.errcard__fix b{font-weight:700}
.errcard__tech{margin-top:6px}
.errcard__tech summary{cursor:pointer;color:var(--muted);font-size:11.5px}
.errcard__tech .mono{white-space:pre-wrap;font-size:11px;margin-top:4px;opacity:.85}

/* ================= Адаптив под разные разрешения ================= */
/* большие мониторы — чуть шире боковая панель */
@media (min-width:1800px){ .layout{grid-template-columns:250px 1fr} }
/* компактный десктоп/маленькое окно — сужаем боковую панель и шапку */
@media (max-width:1280px){
  .layout{grid-template-columns:208px 1fr}
  header.top{padding:12px 16px;gap:10px}
  #keySwitch{min-width:180px;max-width:320px}
}
/* планшет/узкое окно — боковая панель только иконками */
@media (max-width:1024px){
  .layout{grid-template-columns:60px 1fr}
  aside{padding:12px 6px;align-items:center}
  aside .brand{justify-content:center;padding:6px 0 12px}
  aside nav{width:100%}
  aside nav a{justify-content:center;gap:0;padding:11px 0}
  aside .lbl,aside .env{display:none}
  /* иконочный режим: скрыть заголовки групп, все пункты видимы */
  .nav-label{display:none}
  .nav-group{display:contents}
  .nav-items{display:contents !important}
  #keySwitch{min-width:150px;max-width:260px}
}
/* мобильные/очень узкие — верхняя панель + вертикальная прокрутка страницы */
@media (max-width:720px){
  html,body{height:auto}
  .layout{grid-template-columns:1fr;grid-template-rows:auto 1fr;height:auto;min-height:100dvh;overflow:visible}
  aside{flex-direction:row;height:auto;align-items:center;gap:2px;padding:6px 8px;overflow-x:auto}
  aside .brand,aside .spacer,aside .env{display:none}
  aside nav{display:flex;flex-direction:row;width:auto;gap:2px}
  aside nav a{padding:9px 12px}
  .main{height:auto;min-height:0;overflow:visible}
  header.top{flex-wrap:wrap;height:auto;padding:10px 14px;gap:8px}
  header.top h1{width:100%;font-size:15px}
  header.top .right{width:100%;flex-wrap:wrap;gap:8px 10px}
  .keylabel{display:none}
  #keySwitch{flex:1 1 180px;min-width:0;max-width:none}
  .content{padding:14px;overflow:visible}
}
