/* Base layout, tokens, and shared component styles. Loaded first. */

:root{
  --bg:#eef3f8; --surface:#fff; --surface-2:#f8fafc; --border:#dbe3ee;
  --text:#0f172a; --muted:#64748b;
  --accent:#2563eb; --accent-d:#1d4ed8; --accent-soft:#eff6ff;
  --ok:#16a34a; --warn:#d97706; --crit:#dc2626;
  --r:12px; --r-sm:8px;
  --sh:0 1px 2px rgba(15,23,42,.04),0 8px 22px rgba(15,23,42,.045);
  --sh-lg:0 16px 42px rgba(15,23,42,.10);
  --ring:0 0 0 3px rgba(37,99,235,.16);
  --sidebar-w:248px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
html{scrollbar-gutter:stable}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Inter,sans-serif;
  background:
    linear-gradient(180deg,#f8fbff 0,#eef3f8 280px,#eef3f8 100%);
  color:var(--text);font-size:14px;line-height:1.5;-webkit-text-size-adjust:100%;
  -webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
.muted{color:var(--muted)}
code{background:#eef2f7;border:1px solid #e2e8f0;padding:1px 6px;border-radius:6px;font-size:12px}

/* ── layout ───────────────────────────────────────────── */
.app{display:flex;min-height:100vh}
.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:rgba(255,255,255,.92);
  border-right:1px solid var(--border);padding:18px 12px;display:flex;flex-direction:column;
  position:sticky;top:0;height:100vh}
.content{flex:1;min-width:0;padding:28px;max-width:1440px;margin:0 auto;width:100%;
  padding-bottom:calc(24px + env(safe-area-inset-bottom,0px))}
.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 18px;border-bottom:1px solid var(--border);margin-bottom:14px}
.brand-logo{width:38px;height:38px;border-radius:11px;display:grid;place-items:center;color:#fff;font-size:18px;
  background:linear-gradient(135deg,#2563eb,#14b8a6)}
.brand-name{font-weight:700;font-size:15px}
.brand-ver{font-size:11px;color:var(--muted)}
.nav{display:flex;flex-direction:column;gap:2px;flex:1}
.nav-item{padding:10px 12px;border-radius:10px;color:#334155;font-weight:600;
  transition:background .12s,color .12s,border-color .12s;border:1px solid transparent}
.nav-item:hover{background:#f8fafc;border-color:#e2e8f0;text-decoration:none;color:var(--text)}
.nav-item.is-active{background:#eff6ff;color:#1d4ed8;border-color:#bfdbfe;
  box-shadow:0 6px 16px rgba(37,99,235,.08)}
.logout{margin-top:8px}

.menu-toggle{display:none;position:fixed;top:12px;left:12px;z-index:40;width:44px;height:44px;
  border:1px solid var(--border);background:var(--surface);border-radius:var(--r-sm);font-size:20px;box-shadow:var(--sh);cursor:pointer}
.scrim{display:none}
.mobile-tabbar{display:none}
/* Кнопка свернуть в шапке сайдбара. */
.sidebar-collapse{margin-left:auto;border:none;background:none;color:var(--muted);
  font-size:20px;line-height:1;cursor:pointer;padding:2px 8px;border-radius:6px}
.sidebar-collapse:hover{background:#f1f5f9;color:var(--text)}
/* Десктоп: сворачивание сайдбара. На мобильном работает off-canvas (ниже). */
@media (min-width:861px){
  body.nav-collapsed .sidebar{display:none}
  body.nav-collapsed .menu-toggle{display:block}
  body.nav-collapsed .content{padding-left:64px}
}

/* ── hero ─────────────────────────────────────────────── */
.hero{display:flex;justify-content:space-between;align-items:center;gap:16px;
  background:#fff;border:1px solid var(--border);border-radius:16px;
  padding:18px 22px;box-shadow:var(--sh);margin-bottom:20px}
.hero-main{display:flex;align-items:center;gap:14px}
.hero-logo{width:44px;height:44px;border-radius:11px;display:grid;place-items:center;font-size:22px;background:#eff6ff}
.hero-title{font-size:20px;font-weight:700}
.hero-sub{color:var(--muted);font-size:13px}
.hero-stats{display:flex;gap:14px;flex-wrap:wrap}
.hero-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.stat{text-align:center;padding:6px 14px;border-radius:var(--r-sm);background:#f4f4f5}
.stat span{display:block;font-size:20px;font-weight:700}
.stat small{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:0}

/* ── dashboard header ─────────────────────────────────── */
.dash-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;
  flex-wrap:wrap;margin:2px 0 18px}
.eyebrow{color:#0f766e;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:0}
.dash-title{font-size:30px;font-weight:800;margin:4px 0 0;letter-spacing:0}
.dash-sub{color:var(--muted);font-size:13px;font-weight:500}
.dash-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.dash-action{min-height:38px;padding:7px 12px;font-size:13px;background:#fff}

/* ── dashboard filters ────────────────────────────────── */
.dash-filters{display:flex;flex-direction:column;gap:14px;margin-bottom:18px;
  background:rgba(255,255,255,.82);border:1px solid var(--border);border-radius:16px;
  padding:14px;box-shadow:var(--sh)}
.filterrow{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.filterrow .input{font-size:14px}
.filterrow select.input{min-width:140px;flex:0 0 auto}
.filterrow input[type=search]{flex:1 1 240px;min-width:200px}

/* ── stat cards row ───────────────────────────────────── */
.statcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin-bottom:18px}
.statcard{background:var(--surface);border:1px solid var(--border);border-radius:14px;
  padding:16px 18px;box-shadow:var(--sh);display:flex;flex-direction:column;gap:8px;
  border-left:0;position:relative;overflow:hidden;transition:transform .12s,box-shadow .12s,border-color .12s}
.statcard::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--sc,#cbd5e1)}
.statcard:hover{transform:translateY(-2px);box-shadow:var(--sh-lg)}
.statcard-lbl{color:var(--muted);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:0}
.statcard-val{font-size:34px;font-weight:850;line-height:1;color:var(--text)}
.statcard-accent{--sc:var(--accent)}.statcard-accent .statcard-val{color:var(--accent)}
.statcard-info{--sc:#0ea5e9}.statcard-info .statcard-val{color:#0369a1}
.statcard-crit{--sc:var(--crit)}.statcard-crit .statcard-val{color:var(--crit)}
.statcard-warn{--sc:var(--warn)}.statcard-warn .statcard-val{color:#b45309}
.statcard-ok{--sc:var(--ok)}.statcard-ok .statcard-val{color:var(--ok)}
.statcard-domain{--sc:#7c3aed}.statcard-domain .statcard-val{color:#6d28d9}

/* ── filter bar ───────────────────────────────────────── */
.filterbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:16px}
.input{padding:9px 12px;border:1px solid var(--border);border-radius:var(--r-sm);background:var(--surface);
  font-size:16px;color:var(--text);min-height:42px;transition:border-color .12s,box-shadow .12s}
.input:focus,.input:focus-visible{outline:none;border-color:var(--accent);box-shadow:var(--ring)}
/* Единый вид селектов: свой шеврон, ровные отступы (и для multiple size=1). */
select.input{appearance:none;-webkit-appearance:none;-moz-appearance:none;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='none' stroke='%2371717a' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round' d='M1 1.5l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center;padding-right:32px;cursor:pointer}
.filterbar .input{font-size:14px}
.filterbar input[type=search]{flex:1;min-width:200px}
.check{display:flex;flex-direction:row;align-items:center;gap:7px;color:var(--text);font-size:14px;
  font-weight:500;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-sm);
  padding:0 14px;min-height:42px;cursor:pointer;white-space:nowrap}
.check input{width:16px;height:16px;margin:0;cursor:pointer;accent-color:var(--accent)}

/* ── cards ────────────────────────────────────────────── */
.list-meta{color:var(--muted);font-size:13px;margin-bottom:10px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:14px}
.card{background:var(--surface);border:1px solid var(--border);border-left:0;
  border-radius:16px;padding:15px 16px;box-shadow:var(--sh);position:relative;overflow:hidden;
  transition:box-shadow .15s,transform .1s,border-color .12s;contain:layout style paint}
.card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--kc,#cbd5e1)}
.card:hover{transform:translateY(-1px)}
/* Стадия канбана — заметный бейдж с цветной точкой стадии. */
.kanban-tag{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:700;
  padding:5px 12px;border-radius:9px;line-height:1;border:1px solid transparent}
.kanban-tag::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--kc,#94a3b8);flex:0 0 auto}
/* Вся карточка/строка кликабельна: растянутая ссылка-подложка. */
.card-stretch,.row-stretch{position:absolute;inset:0;z-index:0;border-radius:inherit}
.card:hover,.brow:hover{border-color:#bfdbfe;box-shadow:0 10px 28px rgba(15,23,42,.09)}
.card-clickable,.brow-clickable{cursor:pointer}
/* Интерактивные элементы поверх подложки. */
.card-title a,.brow-title a,.pill-problem{position:relative;z-index:1}
.card.urg-warning{--kc:var(--warn)}
.card.urg-critical{--kc:var(--crit)}
.card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.card-title{font-weight:600;font-size:15px}
.card-domain{color:var(--muted);font-size:13px;margin:4px 0 12px;background:#f8fafc;border:1px solid #edf2f7;
  border-radius:9px;padding:7px 9px;word-break:break-all}
.card-foot{display:flex;flex-wrap:wrap;gap:10px;font-size:12px;color:var(--muted);border-top:1px solid var(--border);padding-top:10px}
.clicks{color:var(--accent);font-weight:600}
.pill{font-size:11px;padding:1px 6px;border-radius:6px;margin-left:6px}
.pill-high{background:#fef3c7;color:#92400e}
.card-partners{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px;position:relative;z-index:1}
.card-partners .pill{margin-left:0}
.pill-partner{background:#ede9fe;color:#5b21b6;font-weight:600}
.pill-problem{background:#fee2e2;color:#991b1b;font-weight:600}
.pill-problem:hover{background:#fecaca;text-decoration:none}
.card.has-problem{--kc:var(--crit)}
.urg-badge{font-size:11px;font-weight:700;padding:3px 9px;border-radius:20px;white-space:nowrap}
.urg-badge.urg-ok{background:#dcfce7;color:#166534}
.urg-badge.urg-warning{background:#fef9c3;color:#854d0e}
.urg-badge.urg-critical{background:#fee2e2;color:#991b1b}

/* status / type pills */
.pill-active{background:#dcfce7;color:#166534}
.pill-development{background:#dbeafe;color:#1d4ed8}
.pill-content{background:#f3e8ff;color:#6b21a8}
.pill-filtered{background:#fee2e2;color:#b91c1c}
.pill-type{background:#e0f2fe;color:#0369a1}
.pill-slot{background:#fae8ff;color:#a21caf}
.crit-text{color:var(--crit);font-weight:600}

/* card action footer */
.card-actions{display:flex;gap:8px;margin-top:12px}
.card-actions .btn,.brow-actions .btn{width:auto;padding:7px 12px;min-height:36px;font-size:13px}
.card-actions form,.brow-actions form{margin:0}

/* ── view toggle (pills) ──────────────────────────────── */
.viewtoggle{display:inline-flex;gap:6px;background:#f8fafc;border:1px solid var(--border);border-radius:12px;padding:4px}
.vt-btn{display:inline-flex;align-items:center;gap:5px;padding:9px 16px;font-size:14px;color:var(--muted);
  cursor:pointer;background:transparent;font-weight:700;margin:0;border:1px solid transparent;
  border-radius:10px;transition:background .12s,color .12s,border-color .12s}
.vt-btn:hover{background:#fafafe}
.vt-btn input{display:none}
/* Подсветка активного вида следует за выбранной радиокнопкой, а не за
   серверным классом — иначе после HTMX-смены вида (меняется только
   #brand-list) подсветка зависала на старой кнопке. */
.vt-btn:has(input:checked),.vt-btn.is-active{background:#fff;color:var(--accent);border-color:#dbeafe;box-shadow:0 1px 4px rgba(15,23,42,.06)}

/* ── list view (rows) ─────────────────────────────────── */
.blist{display:flex;flex-direction:column;gap:8px}
.brow{position:relative;display:flex;align-items:center;gap:14px;background:var(--surface);border:1px solid var(--border);
  border-left:0;border-radius:14px;padding:13px 16px;box-shadow:var(--sh);overflow:hidden;contain:layout style paint}
.brow::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--kc,#cbd5e1)}
.brow.urg-warning{--kc:var(--warn)}
.brow.urg-critical,.brow.has-problem{--kc:var(--crit)}
.brow-avatar{flex:0 0 38px;width:38px;height:38px;border-radius:10px;display:grid;place-items:center;
  font-weight:700;font-size:16px;background:#eef2ff;color:var(--accent)}
.brow-main{flex:1;min-width:0}
.brow-title{font-weight:600;font-size:15px;display:flex;align-items:center;flex-wrap:wrap;gap:2px}
.brow-id{font-size:12px;font-weight:400;margin-left:4px}
.brow-sub{color:var(--muted);font-size:12px;margin-top:3px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.brow-dot{opacity:.5}
.brow-deadline{flex:0 0 auto;text-align:right;min-width:96px}
.brow-days{font-size:11px;margin-top:4px}
.brow-actions{flex:0 0 auto;display:flex;gap:8px;align-items:center}

/* ── kanban board ─────────────────────────────────────── */
.kanban{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(240px,1fr);gap:12px;
  overflow-x:auto;padding-bottom:8px;align-items:start}
.kcol{background:var(--kbg,#f4f4f5);border:1px solid var(--border);border-radius:var(--r);
  display:flex;flex-direction:column;min-height:120px}
.kcol-head{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:11px 14px;font-weight:700;font-size:13px;color:var(--kacc,#333);
  border-bottom:2px solid var(--kacc,var(--border));border-top-left-radius:var(--r);border-top-right-radius:var(--r)}
.kcount{background:var(--kacc,#999);color:#fff;font-size:11px;font-weight:700;
  min-width:20px;height:20px;padding:0 6px;border-radius:10px;display:grid;place-items:center}
.kcol-body{padding:10px;display:flex;flex-direction:column;gap:10px;min-height:80px;flex:1}
.kcard{border-radius:11px;overflow:hidden;cursor:grab;box-shadow:0 1px 3px rgba(0,0,0,.1);
  border:1px solid var(--kacc,var(--border));contain:layout style paint}
.kcard:active{cursor:grabbing}
.kcard-head{background:var(--kacc,#475569);color:#fff;padding:9px 13px;display:flex;align-items:center;
  justify-content:space-between;gap:8px}
.kcard-name{font-weight:700;font-size:14px;color:#fff}
.kcard-id{font-size:12px;font-weight:600;opacity:.85}
.kcard-body{background:var(--kbg,#f4f4f5);padding:10px 13px}
@supports (background:color-mix(in srgb,red,blue)){.kcard-body{background:color-mix(in srgb,var(--kacc) 9%,#fff)}}
.kcard-domain{font-size:12px;color:#334155;margin-bottom:9px;word-break:break-all}
.kcard-foot{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:11px}
.kcard-foot .pill{margin-left:0}
.kcard-geo{color:var(--muted);font-size:11px}
.kcard-open{display:block;margin-top:9px;padding-top:8px;text-align:center;font-weight:600;font-size:13px;
  color:var(--kacc,var(--accent));border-top:1px solid rgba(0,0,0,.08)}
.kcard-open:hover{text-decoration:underline}
.kempty{border:1px dashed var(--border);border-radius:var(--r-sm);padding:22px 10px;text-align:center;
  color:var(--muted);font-size:12px}
.kcol-body:has(.kcard) .kempty{display:none}
.kdrag{opacity:.4}

/* ── pager ────────────────────────────────────────────── */
.pager{display:flex;gap:6px;flex-wrap:wrap;margin-top:18px}
.page{min-width:38px;height:38px;border:1px solid var(--border);background:var(--surface);border-radius:var(--r-sm);cursor:pointer;font-size:13px}
.page.is-active{background:var(--accent);color:#fff;border-color:var(--accent)}
.empty{padding:48px 40px;text-align:center;color:var(--muted);background:var(--surface);
  border:1px dashed #d4d4d8;border-radius:16px;font-size:14px}

/* ── buttons ──────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 16px;border-radius:var(--r-sm);
  border:1px solid var(--border);background:var(--surface);font-size:14px;font-weight:600;cursor:pointer;min-height:44px;
  transition:background .12s,border-color .12s,box-shadow .12s,transform .06s}
.btn:hover{border-color:#cbd5e1;background:#fafafe}
.btn:active{transform:translateY(1px)}
.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent);
  box-shadow:0 1px 2px rgba(79,70,229,.2)}
.btn-primary:hover{background:var(--accent-d);border-color:var(--accent-d)}
.btn-ghost{width:100%;color:var(--muted)}
.btn-block{width:100%}

/* ── login ────────────────────────────────────────────── */
.login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px;
  background:linear-gradient(135deg,#eef2ff 0%,#f6f7fb 45%,#faf5ff 100%)}
.login-card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--border);
  border-radius:18px;padding:36px 32px;box-shadow:var(--sh-lg);text-align:center}
.login-logo{width:60px;height:60px;border-radius:16px;display:grid;place-items:center;font-size:30px;
  margin:0 auto 14px;background:linear-gradient(135deg,#4f46e5,#8b5cf6);color:#fff}
.login-card h1{margin:0;font-size:22px}
.login-form{display:flex;flex-direction:column;gap:12px;margin-top:18px}
.alert{padding:10px 12px;border-radius:var(--r-sm);font-size:13px;margin:14px 0;text-align:left}
.alert-err{background:#fee2e2;color:#991b1b}
.alert-ok{background:#dcfce7;color:#166534}

/* ── forms ────────────────────────────────────────────── */
.form-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;
  padding:20px 22px;box-shadow:var(--sh);margin-bottom:20px}
.form-card h3{margin:22px 0 12px;font-size:15px;padding-bottom:6px;border-bottom:1px solid var(--border)}
.form-card h3:first-child{margin-top:0}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
label{display:flex;flex-direction:column;gap:5px;font-size:13px;color:var(--muted);font-weight:500}
label .input,label input,label select,label textarea{font-size:14px}
.form-card .input{width:100%}
textarea.input{resize:vertical;font-family:inherit}
.form-actions{margin-top:22px;display:flex;gap:10px;flex-wrap:wrap}
.btn-danger{background:#fff;color:var(--crit);border-color:#fecaca}
.btn-danger:hover{background:var(--crit);color:#fff}

.geo-row{position:relative;background:#f8fafc;border:1px solid var(--border);
  border-radius:12px;padding:14px;margin-bottom:12px}
.geo-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.geo-grid label{gap:4px;font-size:12px}
.geo-row .input{min-height:40px;width:100%}
/* ГЕО + URL в одной ячейке-паре: код узкий, URL широкий */
.geo-grid label:nth-child(3){grid-column:1}
.geo-grid label:nth-child(4){grid-column:2}
.geo-row-actions{position:absolute;top:8px;right:8px;display:flex;gap:4px;z-index:2}
.geo-action-btn{width:26px;height:26px;border-radius:6px;
  border:1px solid var(--border);background:#fff;color:var(--muted);cursor:pointer;
  font-size:10px;display:inline-flex;align-items:center;justify-content:center;
  transition:background .12s,color .12s,border-color .12s;padding:0}
.geo-action-btn:hover{background:var(--surface-2);color:var(--text);border-color:var(--muted)}
.geo-del-btn:hover{background:var(--crit);color:#fff;border-color:var(--crit)}

.geo-hints{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.geo-hint-pill{font-size:10px;font-weight:700;padding:2px 6px;border-radius:4px;
  background:var(--accent-soft);color:var(--accent);border:1px solid #cfe7ff;
  cursor:pointer;transition:background .1s,color .1s,transform .1s}
.geo-hint-pill:hover{background:var(--accent);color:#fff;transform:translateY(-0.5px)}
.geo-hint-pill:active{transform:translateY(0.5px)}
.geo-hint-pill.is-active{background:var(--ok);color:#fff;border-color:var(--ok)}

.geo-row.is-invalid-geo{border-color:var(--warn);background:linear-gradient(180deg,#fff,#fffdf5)}
.geo-row.is-invalid-geo .geo-code{border-color:var(--warn);box-shadow:0 0 0 2px rgba(255,159,10,0.15)}

.geo-url-label{display:flex;align-items:center;gap:6px}
.geo-url-link{text-decoration:none;font-size:12px;opacity:0.75;transition:opacity 0.1s}
.geo-url-link:hover{opacity:1}

.input-group{display:flex;position:relative;width:100%}
.input-group .input{flex:1;border-top-right-radius:0;border-bottom-right-radius:0}
.input-group .btn-copy{border-top-left-radius:0;border-bottom-left-radius:0;
  border-left:none;min-height:40px;padding:0 10px;background:#f8fafc;
  color:var(--muted);flex-shrink:0;border:1px solid var(--border);border-left:none;
  border-radius:0 8px 8px 0;cursor:pointer;display:inline-flex;align-items:center;
  justify-content:center;font-size:13px;transition:background .12s,color .12s}
.input-group .btn-copy:hover{background:#f1f5f9;color:var(--text)}
.input-group .btn-copy.copied{background:var(--ok);color:#fff;border-color:var(--ok)}

@media(max-width:560px){.geo-grid{grid-template-columns:1fr}
  .geo-grid label:nth-child(3),.geo-grid label:nth-child(4){grid-column:1}}
@media(min-width:992px){
  .geo-grid{grid-template-columns:1.5fr 1.5fr 1fr 2fr 1.2fr 2fr}
  .geo-grid label:nth-child(3),.geo-grid label:nth-child(4){grid-column:auto}
  .geo-row{padding:14px 20px}
  .geo-row-head{margin-bottom:6px}
}

/* ── tables ───────────────────────────────────────────── */
.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:12px;background:#fff}
.tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:560px}
.tbl th{text-align:left;padding:10px 12px;background:#f8fafc;border-bottom:1px solid var(--border);
  color:var(--muted);font-weight:800;white-space:nowrap;font-size:12px;text-transform:uppercase;letter-spacing:0}
.tbl td{padding:10px 12px;border-bottom:1px solid #f1f5f9}
.tbl tbody tr{transition:background .1s}
.tbl tbody tr:hover{background:#fafafe}
.tbl tr:last-child td{border-bottom:none}

/* ── chart grid (analytics) ───────────────────────────── */
.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:20px}
.chart-card{margin-bottom:0}
.chart-card h3{margin-top:0;border-bottom:none;padding-bottom:0;font-size:14px}
.chart-box{position:relative;height:220px}
@media(max-width:860px){.chart-grid{grid-template-columns:1fr}}

/* ── Заметки / бортовой журнал ─────────────────────────── */
.notes-box{margin-top:6px}
.notes-form{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:stretch;margin-bottom:10px}
.note-input{width:100%;min-height:58px;line-height:1.45;resize:vertical}
.note-submit{min-width:112px;min-height:58px}
.notes-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.note-item{background:#f8fafc;border:1px solid var(--border);border-radius:10px;
  padding:8px 11px;display:flex;align-items:flex-start;gap:10px}
.note-body{font-size:14px;white-space:pre-wrap;word-break:break-word;flex:1;padding-top:1px}
/* Кружок-галочка как в Apple Notes */
.note-check{flex:0 0 auto;width:20px;height:20px;border-radius:50%;border:2px solid #cbd5e1;
  background:#fff;color:#fff;cursor:pointer;font-size:12px;line-height:1;display:grid;place-items:center;
  transition:background .12s,border-color .12s}
.note-check:hover{border-color:var(--accent)}
.note-check.on{background:var(--ok);border-color:var(--ok)}
.note-done .note-body{color:var(--muted);text-decoration:line-through}
.note-del{flex:0 0 auto;border:none;background:none;color:#cbd5e1;cursor:pointer;font-size:13px;padding:0 2px;line-height:1}
.note-del:hover{color:var(--crit)}
/* Аккордеон заметок под элементами (офферы/потоки) */
.notes-acc{margin-top:8px}
.notes-acc>summary{cursor:pointer;font-size:12px;color:var(--accent);list-style:none}
.notes-acc>summary::-webkit-details-marker{display:none}
.quicknotes{padding:16px 18px;margin-bottom:16px;border-color:#cfe0f5}
.quicknotes-summary{cursor:pointer;font-weight:700;list-style:none;display:flex;align-items:center;gap:8px}
.quicknotes-summary::-webkit-details-marker{display:none}
.quicknotes-hint{font-weight:500;font-size:12px;margin-left:auto}

/* Форма добавления партнёрки — карточка */
.add-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;
  padding:16px 18px;box-shadow:var(--sh);margin-bottom:18px}
.add-card .toolbar{margin-bottom:0}

/* ── планшет/мобайл: сайдбар → выезжающий drawer ────────── */
@media (max-width:860px){
  .menu-toggle{display:block}
  .content{padding:64px 16px 24px}
  .sidebar{position:fixed;left:0;top:0;z-index:50;transform:translateX(-100%);
    transition:transform .22s ease;box-shadow:0 0 40px rgba(0,0,0,.18)}
  body.nav-open .sidebar{transform:translateX(0)}
  body.nav-open .scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:45}
  .hero{flex-direction:column;align-items:flex-start}
  .hero-stats{width:100%}
  .hero-stats .stat{flex:1 1 calc(50% - 8px);min-width:0}
  .hero-actions{width:100%;justify-content:flex-start}
  .cards{grid-template-columns:1fr}
  /* формы в одну колонку — иначе 2-3 поля впритык */
  .grid-2,.grid-3{grid-template-columns:1fr}
  /* 16px у всех полей ввода → iOS не зумит при фокусе */
  .filterbar .input,.filterrow .input,label .input,label input,label select,label textarea{font-size:16px}
  .filterbar input[type=search],.filterrow input[type=search]{min-width:0;width:100%}
  .filterbar,.filterrow{gap:8px}
  .dash-actions{width:100%;justify-content:flex-start}
  .dash-action{width:auto;min-height:40px}
  /* статкарты: 2 в ряд на планшете, 1 на узком */
  .statcards{grid-template-columns:repeat(2,1fr);gap:10px}
  .statcard{padding:14px 16px}
  .statcard-val{font-size:28px}
  /* канбан горизонтальный скролл */
  .kanban{grid-auto-columns:minmax(220px,280px)}
  /* список: строки вертикально */
  .brow{flex-wrap:wrap;gap:8px}
  .brow-deadline{min-width:auto;text-align:left}
  .brow-actions{width:100%;justify-content:flex-end}
  /* таблицы: горизонтальный скролл (уже есть .table-wrap), уменьшим шрифт */
  .tbl{font-size:12px;min-width:480px}
  .tbl th,.tbl td{padding:7px 8px}
  .mobile-cards{border:0;background:transparent;overflow:visible}
  .mobile-cards .tbl{min-width:0;border-collapse:separate;border-spacing:0;width:100%}
  .mobile-cards .tbl thead{display:none}
  .mobile-cards .tbl tbody{display:flex;flex-direction:column;gap:10px}
  .mobile-cards .tbl tr{display:block;background:#fff;border:1px solid var(--border);
    border-radius:15px;box-shadow:var(--sh);padding:10px 11px}
  .mobile-cards .tbl tr:hover{background:#fff}
  .mobile-cards .tbl td{display:grid;grid-template-columns:88px minmax(0,1fr);
    align-items:flex-start;gap:12px;border:0;padding:7px 0;font-size:13.5px;
    min-width:0;overflow:hidden;overflow-wrap:anywhere;word-break:break-word}
  .mobile-cards .tbl td::before{content:attr(data-label);flex:0 0 88px;color:#94a3b8;
    font-size:11px;font-weight:800;text-transform:uppercase;line-height:1.25;padding-top:2px}
  .mobile-cards .tbl td:first-child{padding-top:2px}
  .mobile-cards .tbl td:last-child{padding-bottom:2px}
  .mobile-cards .tbl td:not([data-label])::before,
  .mobile-cards .tbl td[data-label=""]::before{display:none}
  .mobile-cards .tbl td>*{min-width:0}
  .mobile-cards .tbl td code{word-break:break-all}
  .mobile-cards .tbl td .btn{min-height:38px}
  .mobile-cards .tbl td.mobile-actions{display:flex;justify-content:flex-start;
    flex-wrap:wrap;gap:7px;padding-top:10px;border-top:1px solid #eef2f7}
  .mobile-cards .tbl td.mobile-actions::before{display:none}
  .mobile-cards .tbl td.mobile-actions form{display:inline-flex!important}
  .mobile-cards .tbl td.mobile-primary{display:block;text-align:left}
  .mobile-cards .tbl td.mobile-primary::before{display:none}
  .mobile-cards .tbl td.mobile-primary a,
  .mobile-cards .tbl td.mobile-primary b{font-size:15px;font-weight:800}
  /* фильтры дашборда: селекты на всю ширину */
  .filterrow select.input{flex:1 1 calc(50% - 4px);min-width:0}
  /* viewtoggle компактнее */
  .viewtoggle{width:100%;justify-content:center}
  .vt-btn{flex:1;justify-content:center;padding:9px 10px;font-size:13px}
  /* toolbar: кнопки шире */
  .toolbar{gap:8px}
  .toolbar .input{flex:1 1 100%;min-width:0;max-width:none!important}
  .toolbar .btn{flex:0 0 auto}
  .add-card .toolbar .btn{width:100%;flex:1 1 100%}
  /* партнёрки: компактнее */
  .pbody{padding:10px 12px}
}

/* ── маленькие телефоны ─────────────────────────────────── */
@media (max-width:480px){
  body{font-size:13.5px}
  .content{padding:60px 12px 20px}
  .hero{padding:14px}
  .hero-title{font-size:18px}
  .hero-stats{gap:8px}
  .hero-actions{flex-direction:column}
  .hero-actions .btn{width:100%}
  .stat{flex:1 1 calc(50% - 8px);padding:8px 6px}
  .stat span{font-size:18px}
  /* статкарты: 1 в ряд на маленьком экране */
  .statcards{grid-template-columns:1fr;gap:8px}
  .statcard{padding:12px 14px;flex-direction:row;align-items:center;justify-content:space-between}
  .statcard-val{font-size:24px}
  .dash-title{font-size:22px}
  .dash-head{margin:0 0 12px}
  .dash-actions .dash-sub{width:100%}
  .form-card{padding:16px 14px}
  .login-card{padding:24px 18px}
  .form-actions>.btn,.login-form .btn,.notes-form .btn{width:100%;min-height:48px}
  .tbl .btn,summary.btn,.toolbar .btn,.card-actions .btn,.brow-actions .btn,.note-del{width:auto}
  .card-actions .btn{width:auto;min-height:40px}
  .geo-row{gap:6px}
  .geo-row .input,.geo-row .geo-url{flex:1 1 100%;min-width:0}
  .pnode>summary{flex-wrap:wrap;gap:6px;padding:12px 14px}
  /* навигация: крупнее для тач */
  .nav-item{padding:12px 14px;font-size:15px}
  /* пагинация: крупнее */
  .page{min-width:44px;height:44px;font-size:14px}
  /* канбан карточки */
  .kcard-head{padding:8px 10px}
  .kcard-body{padding:8px 10px}
  .kcard-name{font-size:13px}
}

/* ── iPhone 15 Pro / компактный мобильный режим ─────────── */
@media (max-width:430px){
  body{background:#f4f7fb}
  .menu-toggle{top:calc(10px + env(safe-area-inset-top,0px));left:12px;
    width:48px;height:48px;border-radius:14px}
  .content{padding:
    calc(66px + env(safe-area-inset-top,0px))
    max(10px,env(safe-area-inset-right,0px))
    calc(18px + env(safe-area-inset-bottom,0px))
    max(10px,env(safe-area-inset-left,0px))}
  .sidebar{width:min(86vw,320px);flex-basis:min(86vw,320px);
    padding:calc(18px + env(safe-area-inset-top,0px)) 12px calc(14px + env(safe-area-inset-bottom,0px))}
  .brand{padding-bottom:14px;margin-bottom:10px}
  .nav{gap:4px}
  .nav-item{min-height:46px;display:flex;align-items:center}

  .dash-head{gap:8px;margin-bottom:10px}
  .dash-title{font-size:24px}
  .eyebrow{font-size:11px}
  .dash-sub{font-size:12px}
  .dash-actions{gap:6px}
  .dash-action{flex:1 1 calc(50% - 3px);min-height:44px}

  .quicknotes{padding:13px 12px;border-radius:16px;margin-bottom:12px;
    box-shadow:0 8px 22px rgba(15,23,42,.06)}
  .quicknotes-summary{font-size:15px}
  .quicknotes-hint{display:none}
  .notes-box{margin-top:8px}
  .notes-form{grid-template-columns:1fr;gap:8px;margin-bottom:12px}
  .note-input{font-size:16px;min-height:98px;border-radius:14px;padding:12px 13px;
    background:#fff}
  .note-submit{width:100%;min-height:50px;border-radius:14px;font-size:15px}
  .notes-list{gap:8px}
  .note-item{border-radius:14px;padding:10px 10px;gap:9px;background:#fff}
  .note-body{font-size:14.5px;line-height:1.42}
  .note-check{width:28px;height:28px;border-width:2px;font-size:14px}
  .note-del{width:32px;height:32px;border-radius:10px;background:#f8fafc;color:#94a3b8}

  .dash-filters{padding:10px;border-radius:16px;gap:10px;margin-bottom:12px}
  .filterrow{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  .filterrow input[type=search]{grid-column:1 / -1;width:100%;min-width:0}
  .filterrow select.input{width:100%;min-width:0;flex:auto}
  .filterrow .check{grid-column:1 / -1;justify-content:flex-start}
  .viewtoggle{border-radius:14px}
  .vt-btn{min-height:42px;padding:8px 6px;font-size:12.5px}

  .statcards{grid-template-columns:1fr 1fr}
  .statcard{min-height:72px;padding:11px 12px;display:block}
  .statcard-lbl{font-size:10px;line-height:1.2}
  .statcard-val{font-size:25px;margin-top:6px}

  .cards{gap:10px}
  .card{border-radius:15px;padding:13px 13px 12px}
  .card-title{font-size:15px}
  .card-domain{margin-bottom:10px;padding:8px;border-radius:11px}
  .card-foot{gap:7px}
  .brow{border-radius:15px;padding:12px 12px}

  .form-card{border-radius:16px;padding:14px 12px}
  .table-wrap{border-radius:14px}

  .pnode>summary{align-items:flex-start}
  .pn-avatar{width:36px;height:36px;flex-basis:36px;border-radius:10px}
  .pn-name{font-size:15px}
  .pn-preview{width:100%}
  .pn-preview-label{min-width:42px}
  .pn-chip{max-width:140px}
  .cnode{padding:11px 10px}
  .cnode>summary{min-height:40px}
  .cnode-del .btn{min-height:34px}
  .geo-pill{display:block;width:100%;padding:8px 10px;margin:6px 0}
  .geo-pill>summary{display:flex;justify-content:space-between;gap:8px}

  /* Command Palette mobile adaptations */
  .command-backdrop{padding-top:0;align-items:stretch}
  .command-palette{width:100vw;height:100vh;border-radius:0;border:0;display:flex;flex-direction:column;background:#ffffff}
  .command-input-wrap{padding:12px 14px;border-bottom:1px solid #edf2f6}
  .command-input-wrap kbd{display:none}
  .command-close-btn{display:block;margin-left:auto}
  .command-results{flex:1;max-height:none;padding:10px}
  .command-footer{border-top:1px solid #edf2f6;padding:10px 14px}
}

@media (max-width:380px){
  .statcards{grid-template-columns:1fr}
  .filterrow{grid-template-columns:1fr}
}

/* ГЕО-инпуты (list="geo-codes"): ввод капсом без инлайн-стиля в каждой строке. */
input[list="geo-codes"]{text-transform:uppercase}
