/*
 * Оформление перенесено из прежнего проекта Apps Script без изменений:
 * styles.html (дизайн-система и компоненты), index.html (карточки отчётов
 * и быстрые значения), login.html, admin.html. Шрифт Manrope — локальный,
 * чтобы не зависеть от доступности Google Fonts и не платить лишний запрос.
 */
@import url('/assets/fonts/manrope.css');


/* ===================== из styles.html ===================== */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent; }
html, body { overflow-x: hidden; max-width: 100%; }
/* Ощущение приложения на iOS: без двойного тап-зума и авто-ресайза текста. */
html { touch-action: manipulation; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
:root, [data-theme="light"] {
  --bg:      #F5F1E8;
  --bg2:     #FFFFFF;
  --bg3:     #EDE6D3;
  --txt:     #2D2416;
  --txt2:    #6B5D4A;
  --muted:   #9B8F7A;
  --accent:  #C96442;
  --acc-h:   #B5583A;
  --acc-s:   #F4E4DC;
  --success: #6B8E4E;
  --danger:  #B54848;
  --border:  #D9CFB8;
  --shadow:  rgba(45,36,22,0.10);
  --font:    'Manrope', -apple-system, sans-serif;
  --radius:  14px;
  --radius-s:8px;
  --blur:    0px;
  --sat:     100%;
  --s-hi:    transparent;
  --divider: var(--border);
  --active-bg: var(--accent);
  --active-fg: #fff;
  --active-bd: var(--accent);
  --active-sh: 0 4px 14px rgba(201,100,66,.30);
}
body.dark, [data-theme="dark"] {
  --bg:      #1A1612;
  --bg2:     #242018;
  --bg3:     #2E2920;
  --txt:     #F0EBE0;
  --txt2:    #C4B8A4;
  --muted:   #7A7060;
  --accent:  #E07856;
  --acc-h:   #C96442;
  --acc-s:   #2E1E16;
  --success: #8FB36A;
  --danger:  #D16464;
  --border:  #3A342A;
  --shadow:  rgba(0,0,0,0.35);
  --active-sh: 0 4px 14px rgba(224,120,86,.30);
}
[data-theme="glass-light"] {
  --bg: radial-gradient(120% 85% at 0% 0%, #FBEEE6 0%, rgba(251,238,230,0) 55%),
        radial-gradient(120% 90% at 100% 8%, #ECE7F6 0%, rgba(236,231,246,0) 52%),
        radial-gradient(110% 100% at 50% 120%, #E6F0E4 0%, rgba(230,240,228,0) 55%),
        #F4EEE6;
  --bg2: rgba(255,255,255,.55);
  --bg3: rgba(255,255,255,.40);
  --txt: #241C12;
  --txt2: #5C503E;
  --muted: #857C75;
  --accent: #C96442;
  --acc-h: #B5583A;
  --acc-s: rgba(201,100,66,.14);
  --success: #5E8240;
  --danger: #B54848;
  --border: rgba(255,255,255,.65);
  --shadow: rgba(70,50,30,.14);
  --blur: 22px;
  --sat: 180%;
  --s-hi: rgba(255,255,255,.80);
  --divider: rgba(70,50,30,.18);
  --active-bg: rgba(201,100,66,.50);
  --active-fg: #fff;
  --active-bd: rgba(255,255,255,.55);
  --active-sh: 0 6px 18px rgba(201,100,66,.28);
}
[data-theme="glass-dark"] {
  --bg: #16120E;
  --bg2: rgba(40,34,28,.74);
  --bg3: rgba(34,28,23,.66);
  --txt: #F6F1E9;
  --txt2: #DBD2C4;
  --muted: #A39C93;
  --accent: #E98A66;
  --acc-h: #E07856;
  --acc-s: rgba(233,138,102,.18);
  --success: #92B96E;
  --danger: #E07A7A;
  --border: rgba(255,255,255,.14);
  --shadow: rgba(0,0,0,.45);
  --blur: 18px;
  --sat: 150%;
  --s-hi: rgba(255,255,255,.14);
  --divider: rgba(255,255,255,.16);
  --active-bg: rgba(224,120,86,.42);
  --active-fg: #fff;
  --active-bd: rgba(255,255,255,.28);
  --active-sh: 0 6px 18px rgba(0,0,0,.42);
}
body { font-family: var(--font); font-size: 15px; color: var(--txt); background: var(--bg); min-height: 100vh; -webkit-font-smoothing: antialiased; transition: background .3s, color .3s; }
a { color: inherit; text-decoration: none; }
.app { max-width: 1200px; margin: 0 auto; padding: 16px; min-height: 100vh; display: flex; flex-direction: column; }
.app-header { display:flex; align-items:center; justify-content:space-between; padding:20px 0 24px; border-bottom:1px solid var(--border); margin-bottom:24px; gap:12px; }
.brand-block { flex:1; min-width:0; }
.brand-title { font-size: clamp(18px,5vw,26px); font-weight:800; letter-spacing:-0.02em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.brand-badge { display:inline-block; font-size:11px; font-weight:600; color:var(--accent); background:var(--acc-s); border-radius:20px; padding:2px 10px; margin-top:4px; text-transform:uppercase; letter-spacing:0.02em; }
.header-actions { display:flex; gap:8px; flex-shrink:0; }
.btn-icon { width:40px; height:40px; border-radius:var(--radius-s); border:1px solid var(--border); background:var(--bg2); color:var(--txt2); cursor:pointer; font-size:17px; display:flex; align-items:center; justify-content:center; transition:all .15s; flex-shrink:0; }
.btn-icon:hover, .btn-icon:active { background:var(--acc-s); border-color:var(--accent); color:var(--accent); }
.btn-icon:disabled { opacity:.4; cursor:not-allowed; }
.btn-ghost { display:inline-flex; align-items:center; gap:6px; padding:9px 16px; border-radius:var(--radius-s); border:1px solid var(--border); background:var(--bg2); color:var(--txt2); cursor:pointer; font-size:14px; font-family:var(--font); font-weight:500; transition:all .15s; white-space:nowrap; }
.btn-ghost:hover { background:var(--acc-s); border-color:var(--accent); color:var(--accent); }
.btn-accent { display:inline-flex; align-items:center; gap:6px; padding:9px 18px; border-radius:var(--radius-s); border:none; background:var(--accent); color:#fff; cursor:pointer; font-size:14px; font-family:var(--font); font-weight:600; transition:all .15s; white-space:nowrap; }
.btn-accent:hover { background:var(--acc-h); }
.btn-danger { display:inline-flex; align-items:center; gap:6px; padding:9px 18px; border-radius:var(--radius-s); border:1px solid var(--danger); background:transparent; color:var(--danger); cursor:pointer; font-size:14px; font-family:var(--font); font-weight:600; transition:all .15s; }
.btn-danger:hover { background:rgba(181,72,72,0.08); }
.reports-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(min(100%,290px),1fr)); gap:14px; }
.report-card { display:flex; flex-direction:column; background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius); padding:20px 18px 16px; cursor:pointer; transition:all .18s; box-shadow:0 2px 8px var(--shadow); position:relative; overflow:hidden; min-height:120px; }
.report-card::before { content:''; position:absolute; top:0;left:0;right:0; height:3px; background:var(--accent); opacity:0; transition:opacity .18s; }
.report-card:hover, .report-card:active { transform:translateY(-3px); border-color:var(--accent); box-shadow:0 8px 24px var(--shadow); }
.report-card:hover::before, .report-card:active::before { opacity:1; }
.report-card.admin-card { background:linear-gradient(135deg,var(--acc-s) 0%,var(--bg2) 100%); border-color:var(--accent); }
.report-card.admin-card .report-title { color:var(--accent); }
.report-card.journal-card { background:linear-gradient(135deg,var(--bg3) 0%,var(--bg2) 100%); }
.report-icon { font-size:28px; margin-bottom:12px; line-height:1; }
.report-title { font-size:15px; font-weight:700; margin-bottom:4px; }
.report-description { font-size:12px; color:var(--muted); line-height:1.5; flex:1; }
.report-arrow { position:absolute; right:16px; bottom:14px; font-size:18px; color:var(--accent); opacity:0; transition:all .18s; transform:translateX(-4px); }
.report-card:hover .report-arrow { opacity:1; transform:translateX(0); }
.sync-status { margin-top:auto; padding-top:10px; font-size:11px; font-weight:600; display:flex; align-items:center; gap:5px; }
.sync-status::before { content:''; display:inline-block; width:6px; height:6px; border-radius:50%; background:currentColor; }
.sync-status.fresh { color:var(--success); }
.sync-status.stale, .sync-status.error { color:var(--danger); }
.sync-status.unknown { color:var(--muted); }
.table-wrap { border-radius:var(--radius); border:1px solid var(--border); background:var(--bg2); overflow:hidden; width:100%; }
.data-table { width:100%; border-collapse:collapse; font-size:13px; table-layout:fixed; }
.data-table th { text-align:left; padding:10px 12px; background:var(--bg3); border-bottom:2px solid var(--border); font-weight:700; font-size:11px; color:var(--txt2); text-transform:uppercase; letter-spacing:.04em; overflow:hidden; white-space:nowrap; }
.data-table th.col-num { text-align:right; width:100px; }
.data-table th.sortable { cursor:pointer; user-select:none; }
.data-table th.sortable:hover { background:var(--acc-s); color:var(--accent); }
.sort-icon { margin-left:4px; font-size:10px; opacity:.4; }
.data-table th.sort-asc  .sort-icon::after { content:'↑'; opacity:1; color:var(--accent); }
.data-table th.sort-desc .sort-icon::after { content:'↓'; opacity:1; color:var(--accent); }
.data-table th:not(.sort-asc):not(.sort-desc) .sort-icon::after { content:'↕'; }
.data-table td { padding:9px 12px; border-bottom:1px solid var(--border); vertical-align:middle; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
.data-table td.col-name { white-space:normal; word-break:break-word; overflow-wrap:break-word; text-overflow:unset; }
.data-table td.col-num { text-align:right; font-variant-numeric:tabular-nums; font-weight:500; }
.data-table tr:last-child td { border-bottom:none; }
.data-table tbody tr:hover td { background:var(--bg3); }
.data-table tr.has-children { cursor:pointer; user-select:none; }
.data-table tr.has-children:hover td { background:var(--acc-s); }
.toggle-icon { display:inline-block; width:14px; font-size:10px; color:var(--muted); margin-right:4px; transition:transform 120ms; transform:rotate(0deg); }
.data-table tr.expanded .toggle-icon { transform:rotate(90deg); color:var(--accent); }
.row-year td   { font-weight:800; background:var(--bg3); font-size:14px; }
.row-month td  { font-weight:700; color:var(--txt2); }
.row-parent td { font-weight:700; background:var(--bg3); }
.row-manager td { color:var(--txt); font-weight:600; }
.row-child td  { color:var(--txt2); font-size:12px; }
.indent-1 { padding-left:28px !important; }
.indent-2 { padding-left:52px !important; }
.indent-3 { padding-left:76px !important; }
.filters-bar { display:grid; grid-template-columns:repeat(auto-fit,minmax(0,1fr)); gap:8px 10px; padding:12px; background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius); margin-bottom:14px; align-items:end; overflow:hidden; }
.filter-group { display:flex; flex-direction:column; gap:3px; min-width:0; }
.filter-label { font-size:10px; font-weight:600; text-transform:uppercase; letter-spacing:.04em; color:var(--muted); }
.filter-select { width:100%; padding:7px 10px; font-size:13px; font-family:var(--font); border:1px solid var(--border); background:var(--bg); color:var(--txt); border-radius:var(--radius-s); cursor:pointer; -webkit-appearance:none; appearance:none; background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%239B8F7A' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E"); background-repeat:no-repeat; background-position:right 10px center; padding-right:28px; min-width:0; box-sizing:border-box; }
.filter-actions { grid-column:1/-1; display:flex; gap:8px; margin-top:4px; }
.filter-actions .btn-accent, .filter-actions .btn-ghost { flex:1; justify-content:center; }
.totals-bar { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:14px; }
.total-card { background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius); padding:14px 16px; }
.total-label { font-size:10px; font-weight:600; text-transform:uppercase; letter-spacing:.05em; color:var(--muted); margin-bottom:2px; }
.total-value { font-size:20px; font-weight:700; font-variant-numeric:tabular-nums; letter-spacing:-.01em; line-height:1.2; }
/* Возвраты: приписка под суммой в карточке итога + сворачиваемый блок в отчёте.
   Общие стили — используются дневным и универсальным отчётами и всеми будущими. */
.total-return { font-size:11px; color:var(--danger); font-weight:600; margin-top:4px; min-height:14px; }
.ret-block { border:1px solid var(--danger); border-radius:var(--radius); margin-top:14px; margin-bottom:14px; overflow:hidden; background:var(--bg2); }
.ret-head { display:flex; align-items:center; gap:6px; padding:12px 14px; cursor:pointer; font-weight:700; font-size:14px; color:var(--danger); user-select:none; -webkit-user-select:none; }
.ret-head .toggle-icon { color:var(--danger); }
.ret-block.open .ret-head .toggle-icon { transform:rotate(90deg); }
.ret-sums { margin-left:auto; font-size:12px; font-weight:600; color:var(--danger); font-variant-numeric:tabular-nums; text-align:right; }
.ret-body { display:none; border-top:1px solid var(--border); }
.ret-block.open .ret-body { display:block; }
.ret-body .table-wrap { border:none; border-radius:0; margin:0; }
@media(max-width:599px){ .ret-head{ font-size:13px; padding:10px 12px; } .ret-sums{ font-size:11px; } }
.tree-controls { display:flex; gap:8px; margin-bottom:8px; }
.tree-controls .btn-ghost { flex:1; justify-content:center; padding:6px 12px; font-size:12px; }
.hierarchy-toggle { display:flex; gap:3px; background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius-s); padding:3px; max-width:100%; overflow-x:auto; }
.hier-btn { padding:6px 10px; border:1px solid transparent; background:transparent; color:var(--txt2); font-size:12px; font-family:var(--font); font-weight:500; border-radius:5px; cursor:pointer; white-space:nowrap; flex:1; }
.hier-btn.active { background:var(--active-bg); color:var(--active-fg); }
.state-msg { padding:60px 20px; text-align:center; color:var(--muted); font-size:14px; }
.state-msg.error { color:var(--danger); }
.notice { padding:10px 14px; border-radius:var(--radius-s); font-size:13px; margin-bottom:12px; animation:slide-in .2s ease-out; }
@keyframes slide-in { from { opacity:0; transform:translateY(-6px); } to { opacity:1; transform:translateY(0); } }
.notice.success { background:rgba(107,142,78,.12); color:var(--success); border:1px solid rgba(107,142,78,.3); }
.notice.error   { background:rgba(181,72,72,.10); color:var(--danger);  border:1px solid rgba(181,72,72,.3); }
.app-footer { margin-top:auto; padding-top:20px; padding-bottom:8px; font-size:12px; color:var(--muted); border-top:1px solid var(--border); margin-top:40px; display:flex; align-items:center; justify-content:space-between; gap:8px; flex-wrap:wrap; }
.user-pill { display:inline-flex; align-items:center; gap:6px; background:var(--bg3); border-radius:20px; padding:4px 12px 4px 8px; font-size:12px; color:var(--txt2); font-weight:500; }
.role-pill { display:inline-block; background:var(--acc-s); color:var(--accent); border-radius:10px; padding:1px 8px; font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; margin-left:4px; }
.user-name { font-weight:600; color:var(--txt); }
.user-email { color:var(--muted); margin-left:3px; }
@media (max-width:600px) {
  .app { padding:12px; }
  .app-header { padding:16px 0 20px; margin-bottom:16px; }
  .reports-grid { grid-template-columns:1fr; gap:10px; }
  .report-card { min-height:110px; padding:16px 14px 14px; }
  .totals-bar { gap:8px; }
  .total-card { padding:12px 14px; }
  .total-value { font-size:17px; }
  .filters-bar { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .data-table th.col-num, .data-table td.col-num { width:78px; }
  .data-table td { padding:8px 8px; font-size:12px; }
  .data-table th { padding:8px 8px; }
  .indent-1 { padding-left:16px !important; }
  .indent-2 { padding-left:30px !important; }
  .indent-3 { padding-left:44px !important; }
  .hierarchy-toggle { width:100%; }
  .hier-btn { font-size:11px; padding:7px 6px; }
  .tree-controls .btn-ghost { font-size:11px; }
}

/* ===== Стеклянные темы: матовые поверхности ===== */
:is([data-theme^="glass"],[data-theme^="apple"]) .report-card,
:is([data-theme^="glass"],[data-theme^="apple"]) .total-card,
:is([data-theme^="glass"],[data-theme^="apple"]) .table-wrap,
:is([data-theme^="glass"],[data-theme^="apple"]) .filters-bar,
:is([data-theme^="glass"],[data-theme^="apple"]) .hierarchy-toggle,
:is([data-theme^="glass"],[data-theme^="apple"]) .btn-icon,
:is([data-theme^="glass"],[data-theme^="apple"]) .btn-ghost,
:is([data-theme^="glass"],[data-theme^="apple"]) .user-pill,
:is([data-theme^="glass"],[data-theme^="apple"]) .theme-pop {
  -webkit-backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  backdrop-filter: blur(var(--blur)) saturate(var(--sat));
}
:is([data-theme^="glass"],[data-theme^="apple"]) .report-card,
:is([data-theme^="glass"],[data-theme^="apple"]) .total-card,
:is([data-theme^="glass"],[data-theme^="apple"]) .table-wrap,
:is([data-theme^="glass"],[data-theme^="apple"]) .filters-bar {
  box-shadow: 0 10px 30px var(--shadow), inset 0 1px 0 var(--s-hi);
}
:is([data-theme^="glass"],[data-theme^="apple"]) .data-table th { border-bottom-color: var(--divider); }
:is([data-theme^="glass"],[data-theme^="apple"]) .data-table td { border-bottom-color: var(--divider); }
:is([data-theme^="glass"],[data-theme^="apple"]) .hier-btn.active {
  border:1px solid var(--active-bd);
  box-shadow: var(--active-sh);
  -webkit-backdrop-filter: blur(var(--blur)) saturate(var(--sat));
  backdrop-filter: blur(var(--blur)) saturate(var(--sat));
}
/* Самый нижний уровень иерархии — значения не жирные (подчёркивает ступени) */
.data-table tr.row-child td.col-num { font-weight:400; }

/* ===== Меню выбора темы ===== */
.theme-overlay { position:fixed; inset:0; z-index:1000; display:none; }
.theme-overlay.open { display:block; }
.theme-pop { position:fixed; top:64px; right:16px; width:238px; z-index:1001; border-radius:var(--radius); padding:8px; display:none;
  background:var(--bg2); border:1px solid var(--border);
  box-shadow:0 16px 44px rgba(0,0,0,.22), inset 0 1px 0 var(--s-hi); }
.theme-pop.open { display:block; animation:tp-in .16s ease; }
@keyframes tp-in { from { opacity:0; transform:translateY(-6px); } to { opacity:1; transform:none; } }
.tp-sec { font-size:10.5px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:var(--muted); padding:9px 10px 4px; }
.tp-item { display:flex; align-items:center; gap:11px; padding:10px; border-radius:10px; cursor:pointer; font-weight:600; font-size:14px; color:var(--txt); }
.tp-item .ic { width:18px; text-align:center; font-size:15px; color:var(--txt2); }
.tp-item .ck { margin-left:auto; color:var(--accent); font-weight:800; opacity:0; }
.tp-item.sel { background:var(--bg3); }
.tp-item.sel .ck { opacity:1; }
.tp-item:hover, .tp-item:active { background:var(--bg3); }
.tp-divider { height:1px; background:var(--divider); margin:7px 6px; }
.tp-auto { display:flex; align-items:center; gap:11px; padding:10px; border-radius:10px; cursor:pointer; }
.tp-auto .ic { width:18px; text-align:center; font-size:15px; color:var(--txt2); }
.tp-auto .lbl { font-weight:600; font-size:14px; color:var(--txt); }
.tp-auto .switch { margin-left:auto; width:44px; height:27px; border-radius:14px; background:var(--bg3); border:1px solid var(--border); position:relative; transition:background .2s,border-color .2s; flex:none; }
.tp-auto .switch.on { background:var(--accent); border-color:var(--accent); }
.tp-auto .switch .knob { position:absolute; top:2px; left:2px; width:21px; height:21px; border-radius:50%; background:#fff; transition:transform .2s; box-shadow:0 1px 3px rgba(0,0,0,.35); }
.tp-auto .switch.on .knob { transform:translateX(17px); }
.btn-icon.is-auto { color:var(--accent); border-color:var(--accent); }
#pxLoader{ position:fixed; inset:0; z-index:99999; display:none;
    align-items:center; justify-content:center; padding:24px;
    background:var(--bg); font-family:var(--font);
    -webkit-backdrop-filter:blur(var(--blur)) saturate(var(--sat));
    backdrop-filter:blur(var(--blur)) saturate(var(--sat)); }
  #pxLoader.px-on{ display:flex; }
  #pxLoader .px-inner{ display:flex; flex-direction:column; align-items:center; gap:16px; width:100%; max-width:380px; }

  /* boot: штрихи по кругу (iOS) */
  .px-spokes{ position:relative; width:44px; height:44px; }
  .px-spokes i{ position:absolute; top:0; left:50%; width:4px; height:12px; margin-left:-2px;
    border-radius:3px; background:var(--accent); transform-origin:2px 22px; animation:pxFade 1s linear infinite; }
  .px-spokes i:nth-child(1){ transform:rotate(0deg);   animation-delay:-.875s; }
  .px-spokes i:nth-child(2){ transform:rotate(45deg);  animation-delay:-.75s; }
  .px-spokes i:nth-child(3){ transform:rotate(90deg);  animation-delay:-.625s; }
  .px-spokes i:nth-child(4){ transform:rotate(135deg); animation-delay:-.5s; }
  .px-spokes i:nth-child(5){ transform:rotate(180deg); animation-delay:-.375s; }
  .px-spokes i:nth-child(6){ transform:rotate(225deg); animation-delay:-.25s; }
  .px-spokes i:nth-child(7){ transform:rotate(270deg); animation-delay:-.125s; }
  .px-spokes i:nth-child(8){ transform:rotate(315deg); animation-delay:0s; }
  @keyframes pxFade{ 0%{opacity:1;} 100%{opacity:.15;} }
  .px-cap{ color:var(--muted); font-size:13px; font-weight:600; text-align:center; }

  /* report: скелетон отчёта */
  .px-sk{ border-radius:7px; background:var(--bg3);
    background-image:linear-gradient(90deg, transparent 0%, transparent 35%, rgba(255,255,255,.30) 50%, transparent 65%, transparent 100%);
    background-size:250% 100%; background-repeat:no-repeat; background-position:150% 0;
    animation:pxShimmer 1.4s ease infinite; }
  @keyframes pxShimmer{ to{ background-position:-150% 0; } }
  .px-cards{ display:flex; gap:12px; width:100%; }
  .px-card{ flex:1; background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius); padding:14px; }
  .px-card .px-l1{ height:10px; width:60%; }
  .px-card .px-l2{ height:22px; width:80%; margin-top:12px; }
  .px-rows{ display:flex; flex-direction:column; gap:10px; width:100%; }
  .px-row{ display:flex; align-items:center; gap:12px; }
  .px-row .px-dot{ width:16px; height:16px; border-radius:5px; flex:none; }
  .px-row .px-a{ height:12px; flex:1; }
  .px-row .px-b{ height:12px; width:64px; flex:none; }
  .px-row.px-lvl2{ padding-left:26px; }
  .px-row.px-lvl2 .px-a{ opacity:.7; }
  .px-status{ color:var(--muted); font-size:12.5px; font-weight:600; text-align:center; height:16px; margin-top:2px; }

  /* ── скин «assembly» v4: два коллектора (подача/обратка) по фото ──
     Верхняя балка — подача (редуктор + кран на входе, воздухоотводчик,
     короткие отводы с кранами). Нижняя — обратка (кран + косой фильтр
     + регулятор, длинные отводы: кран → муфта → маховик). Контур:
     подача → муфта на трубе → узел нижнего подключения → радиатор →
     обратка → подъём в нижний коллектор. Поток доходит → термоголовка
     проворачивается → секции прогреваются. Цикл 5.2s. */
  .px-asm{ width:252px; height:140px; }
  .px-asm *{ transform-box:fill-box; }
  .px-asm .ln  { stroke:var(--muted);  }
  .px-asm .acc { stroke:var(--accent); }
  .px-asm .fillb{ fill:var(--bg3); }
  .px-asm .fillm{ fill:var(--muted); }

  /* 1. балки коллекторов — въезжают слева, нижняя чуть позже */
  .px-asm .g-beam{ animation:pxaCol 5.2s ease infinite; }
  .px-asm .g-beam.b2{ animation-delay:.12s; }
  @keyframes pxaCol{
    0%{opacity:0; transform:translateX(-14px);}
    6%,92%{opacity:1; transform:none;}
    100%{opacity:0; transform:none;}
  }
  /* входы: редуктор+кран (подача), кран+фильтр+регулятор (обратка) */
  .px-asm .g-inlet{ transform-origin:center; animation:pxaInlet 5.2s cubic-bezier(.34,1.56,.64,1) infinite; }
  .px-asm .g-inlet.b2{ animation-delay:.12s; }
  @keyframes pxaInlet{
    0%,6%{opacity:0; transform:scale(0);}
    10%,92%{opacity:1; transform:scale(1);}
    100%{opacity:0;}
  }
  /* воздухоотводчики */
  .px-asm .g-vent{ transform-origin:center; animation:pxaVent 5.2s cubic-bezier(.34,1.56,.64,1) infinite; }
  .px-asm .g-vent.b2{ animation-delay:.12s; }
  @keyframes pxaVent{
    0%,8%{opacity:0; transform:scale(0);}
    12%,92%{opacity:1; transform:scale(1);}
    100%{opacity:0;}
  }
  /* отводы: короткие на подаче, длинные на обратке — по очереди */
  .px-asm .asm-out{ transform-origin:top center; animation:pxaAsm 5.2s cubic-bezier(.34,1.56,.64,1) infinite; }
  .px-asm .asm-out.d1{ animation-delay:0s; }
  .px-asm .asm-out.d2{ animation-delay:.10s; }
  .px-asm .asm-out.d3{ animation-delay:.20s; }
  .px-asm .asm-out.d4{ animation-delay:.30s; }
  @keyframes pxaAsm{
    0%,9%{opacity:0; transform:scale(0);}
    15%,92%{opacity:1; transform:scale(1);}
    100%{opacity:0;}
  }

  /* 2. труба подачи: из торца верхней балки вниз и по полу */
  .px-asm .p-sup{ stroke-dasharray:205; animation:pxaSup 5.2s ease infinite; }
  @keyframes pxaSup{
    0%,17%{stroke-dashoffset:205; opacity:1;}
    30%,92%{stroke-dashoffset:0; opacity:1;}
    100%{stroke-dashoffset:0; opacity:0;}
  }
  /* 3. муфта соединительная на подаче */
  .px-asm .g-muf{ transform-origin:center; animation:pxaMuf 5.2s cubic-bezier(.34,1.56,.64,1) infinite; }
  @keyframes pxaMuf{
    0%,28%{opacity:0; transform:scale(0);}
    33%,92%{opacity:1; transform:scale(1);}
    100%{opacity:0;}
  }
  /* 4. обратка: из активного отвода нижней балки вниз и по полу */
  .px-asm .p-ret{ stroke-dasharray:185; animation:pxaRet 5.2s ease infinite; }
  @keyframes pxaRet{
    0%,30%{stroke-dashoffset:185; opacity:1;}
    42%,92%{stroke-dashoffset:0; opacity:1;}
    100%{stroke-dashoffset:0; opacity:0;}
  }
  /* 5. узел нижнего подключения */
  .px-asm .g-unit{ transform-origin:center; animation:pxaUnit 5.2s cubic-bezier(.34,1.56,.64,1) infinite; }
  @keyframes pxaUnit{
    0%,40%{opacity:0; transform:scale(0);}
    46%,92%{opacity:1; transform:scale(1);}
    100%{opacity:0;}
  }
  /* 6. секции радиатора */
  .px-asm .sec{ animation:pxaSec 5.2s cubic-bezier(.34,1.4,.64,1) infinite; }
  .px-asm .sec:nth-child(1){ animation-delay:0s; }
  .px-asm .sec:nth-child(2){ animation-delay:.10s; }
  .px-asm .sec:nth-child(3){ animation-delay:.20s; }
  .px-asm .sec:nth-child(4){ animation-delay:.30s; }
  .px-asm .sec:nth-child(5){ animation-delay:.40s; }
  .px-asm .sec:nth-child(6){ animation-delay:.50s; }
  @keyframes pxaSec{
    0%,44%{opacity:0; transform:translateY(-12px);}
    51%,80%{opacity:1; transform:none;}
    92%{opacity:1;}
    100%{opacity:0;}
  }
  /* 7. термоголовка: появляется... */
  .px-asm .g-head{ transform-origin:left center; animation:pxaHead 5.2s cubic-bezier(.34,1.7,.64,1) infinite; }
  @keyframes pxaHead{
    0%,54%{opacity:0; transform:scale(0);}
    60%,92%{opacity:1; transform:scale(1);}
    100%{opacity:0;}
  }
  /* ...и ПРОВОРАЧИВАЕТСЯ, когда доходит поток */
  .px-asm .head-rot{ transform-origin:center; animation:pxaTurn 5.2s ease infinite; }
  @keyframes pxaTurn{
    0%,63%{transform:rotate(0deg);}
    66%{transform:rotate(-38deg);}
    69.5%{transform:rotate(8deg);}
    72%,100%{transform:rotate(0deg);}
  }
  /* 8. поток по замкнутому контуру */
  .px-asm .flow{ stroke-dasharray:3 8; animation:pxaFlow 5.2s linear infinite; }
  @keyframes pxaFlow{
    0%,60%{opacity:0; stroke-dashoffset:0;}
    63%{opacity:1;}
    90%{opacity:1; stroke-dashoffset:-76;}
    93%,100%{opacity:0; stroke-dashoffset:-76;}
  }
  /* прогрев секций — после поворота термоголовки, от подключения */
  .px-asm .warm{ animation:pxaWarm 5.2s ease infinite; }
  .px-asm .warm:nth-child(1){ animation-delay:.35s; }
  .px-asm .warm:nth-child(2){ animation-delay:.28s; }
  .px-asm .warm:nth-child(3){ animation-delay:.21s; }
  .px-asm .warm:nth-child(4){ animation-delay:.14s; }
  .px-asm .warm:nth-child(5){ animation-delay:.07s; }
  .px-asm .warm:nth-child(6){ animation-delay:0s; }
  @keyframes pxaWarm{
    0%,71%{opacity:0;}
    77%,87%{opacity:.55;}
    92%,100%{opacity:0;}
  }

  @media (prefers-reduced-motion:reduce){ #pxLoader *{ animation-duration:2.4s !important; } }
  /* для .px-asm при reduced-motion — наоборот, замедляем (тайминги
     элементов синхронны, т.к. у всех одинаковая длительность цикла) */
  @media (prefers-reduced-motion:reduce){ #pxLoader .px-asm *{ animation-duration:10.4s !important; } }

/* ===================== из index.html ===================== */
.report-card { padding-bottom: 16px; }
    .report-arrow { position:absolute; right:16px; bottom:14px; font-size:18px; color:var(--accent); opacity:0; transition:all .18s; transform:translateX(-4px); }
    .report-card:hover .report-arrow, .report-card:active .report-arrow { opacity:1; transform:translateX(0); }

    /* ── Иконка и заголовок в одну строку (экономия высоты) ────── */
    .report-head { display:flex; align-items:center; gap:10px; margin-bottom:8px; }
    .report-head .report-icon { font-size:24px; margin-bottom:0; line-height:1; flex:0 0 auto; }
    .report-head .report-title { margin-bottom:0; }

    /* ── Внешние ссылки (плитки на сторонние веб-приложения) ──── */
    .external-card { text-decoration:none; color:inherit; }
    .external-card .report-title { color:var(--accent); }
    .ext-badge {
      position:absolute; top:12px; right:14px; font-size:11px; font-weight:700;
      color:var(--accent); background:var(--acc-s); border-radius:10px;
      padding:1px 8px; letter-spacing:.03em;
    }

    /* ── Быстрые счётчики ─────────────────────────────────────── */
    .quick-stats { margin: 10px 0 6px; min-height: 36px; }
    .qs-period {
      font-size: 10px;
      font-weight: 600;
      color: var(--muted);
      text-transform: uppercase;
      letter-spacing: 0.05em;
      margin-bottom: 6px;
    }
    .qs-chips { display: flex; flex-wrap: wrap; gap: 6px; }
    .qs-chip {
      display: flex;
      flex-direction: column;
      gap: 1px;
      padding: 5px 10px;
      border-radius: 8px;
      flex: 0 0 auto;
    }
    .qs-chip .qs-label {
      font-size: 10px;
      font-weight: 600;
      text-transform: uppercase;
      letter-spacing: 0.04em;
      opacity: 0.75;
    }
    .qs-chip .qs-val {
      font-size: 13px;
      font-weight: 700;
      white-space: nowrap;
    }
    /* цвета чипов — те же что в .notice, для консистентности */
    .qs-chip.qs-success { background: rgba(107,142,78,0.12); color: var(--success); }
    .qs-chip.qs-accent  { background: var(--acc-s);           color: var(--accent);  }
    .qs-chip.qs-danger  { background: rgba(181,72,72,0.10);   color: var(--danger);  }
    /* возвраты — мелкая приписка под фактическим значением (деньги→поступления, товар→отгрузки) */
    .qs-chip .qs-ret { display:block; font-size:10px; font-weight:600; color:var(--danger); margin-top:2px; white-space:nowrap; }
    /* скелетон пока данные грузятся */
    .qs-skeleton {
      height: 36px;
      width: 190px;
      background: var(--bg3);
      border-radius: 8px;
      animation: qs-pulse 1.4s ease-in-out infinite;
    }
    @keyframes qs-pulse { 0%,100%{opacity:.45} 50%{opacity:.9} }

    /* ── Личный фильтр по менеджеру (внизу меню) ──────────────── */
    .mgr-filter { margin-top: 18px; }
    .mgr-filter-bar {
      display:flex; align-items:center; justify-content:space-between; gap:12px;
      background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius);
      padding:14px 16px;
    }
    .mgr-filter-text { font-size:13px; color:var(--txt2); line-height:1.4; }
    .mgr-filter-text b { color:var(--accent); }
    .mgr-filter-text small { display:block; color:var(--muted); font-size:11px; margin-top:2px; }
    .mgr-switch {
      position:relative; flex-shrink:0; width:50px; height:28px; border-radius:16px;
      border:none; cursor:pointer; background:var(--bg3); transition:background .15s; padding:0;
    }
    .mgr-switch.on { background:var(--accent); }
    .mgr-switch::after {
      content:''; position:absolute; top:3px; left:3px; width:22px; height:22px;
      border-radius:50%; background:#fff; transition:transform .15s; box-shadow:0 1px 3px rgba(0,0,0,.3);
    }
    .mgr-switch.on::after { transform:translateX(22px); }

    /* ── Дневная карточка в меню (стрелки + день + суммы) ──────── */
    .dc-nav { display:flex; align-items:center; gap:8px; margin-bottom:8px; }
    .dc-label { flex:1; text-align:center; font-size:12px; font-weight:700; color:var(--txt); }
    .dc-arrow {
      flex-shrink:0; width:30px; height:30px; border:1px solid var(--border);
      background:var(--bg); color:var(--accent); border-radius:8px; font-size:12px; cursor:pointer; padding:0;
    }
    .dc-arrow:disabled { opacity:.35; cursor:default; }
    .dc-figs { display:flex; gap:8px; }
    /* Рамка-плашка вокруг цифр — как у быстрых счётчиков (.qs-chip) остальных отчётов */
    .dc-fig { flex:1; min-width:0; display:flex; flex-direction:column; gap:1px; padding:6px 10px; border-radius:8px; }
    .dc-fig.dc-fig-r { background:rgba(107,142,78,0.12); }
    .dc-fig.dc-fig-s { background:var(--acc-s); }
    .dc-k { font-size:10px; font-weight:600; text-transform:uppercase; letter-spacing:.04em; opacity:.7; }
    .dc-v { font-size:13px; font-weight:700; white-space:nowrap; }
    .dc-v.dc-r { color:var(--success); }
    .dc-v.dc-s { color:var(--accent); }
    .dc-ret { font-size:10px; color:var(--danger); font-weight:600; margin-top:2px; white-space:nowrap; }
  
html, body { height: 100%; }
.login-wrap { min-height:100vh; display:flex; flex-direction:column; align-items:center; justify-content:center; padding:20px; background:var(--bg); }
.login-card { width:100%; max-width:380px; background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius); padding:32px 28px 28px; box-shadow:0 4px 24px var(--shadow); }
.login-logo { width:56px; height:56px; border-radius:14px; overflow:hidden; margin:0 auto 16px; background:var(--acc-s); }
.login-logo img { width:100%; height:100%; object-fit:cover; }
.login-title { font-size:22px; font-weight:800; color:var(--txt); text-align:center; letter-spacing:-0.02em; margin-bottom:4px; }
.login-sub { font-size:13px; color:var(--muted); text-align:center; margin-bottom:24px; }
.login-field { margin-bottom:14px; }
.login-label { display:block; font-size:11px; font-weight:600; color:var(--muted); text-transform:uppercase; letter-spacing:.04em; margin-bottom:6px; }
.login-input { width:100%; padding:11px 14px; border:1px solid var(--border); background:var(--bg); color:var(--txt); border-radius:var(--radius-s); font-size:15px; font-family:var(--font); box-sizing:border-box; transition:border-color .15s; -webkit-appearance:none; }
.login-input:focus { outline:none; border-color:var(--accent); }
.login-input.error { border-color:var(--danger); }
.login-btn { width:100%; padding:13px; background:var(--accent); color:#fff; border:none; border-radius:var(--radius-s); font-size:15px; font-family:var(--font); font-weight:700; cursor:pointer; transition:background .15s; margin-top:6px; }
.login-btn:hover { background:var(--acc-h); }
.login-btn:disabled { opacity:.6; cursor:not-allowed; }
.login-error { background:rgba(181,72,72,.1); color:var(--danger); border:1px solid rgba(181,72,72,.3); border-radius:var(--radius-s); padding:10px 14px; font-size:13px; margin-top:14px; display:none; }
.login-error.visible { display:block; }
.theme-toggle-wrap { position:fixed; top:16px; right:16px; }
.login-footer { margin-top:20px; font-size:11px; color:var(--muted); text-align:center; }

/* ── Шторка «Установить на iPhone» ─────────────────────────────────────── */
.a2hs-trigger { display:none; width:100%; margin-top:16px; padding:11px 14px; background:var(--acc-s); color:var(--accent); border:1px solid transparent; border-radius:var(--radius-s); font-size:13px; font-weight:700; font-family:var(--font); cursor:pointer; text-align:center; -webkit-tap-highlight-color:transparent; transition:filter .15s; }
.a2hs-trigger:hover { filter:brightness(.97); }
.a2hs-trigger .chev { opacity:.55; margin-left:5px; }
.a2hs-overlay { position:fixed; inset:0; background:rgba(0,0,0,.45); opacity:0; visibility:hidden; transition:opacity .25s; z-index:1000; }
.a2hs-overlay.open { opacity:1; visibility:visible; }
.a2hs-sheet { position:fixed; left:0; right:0; bottom:0; z-index:1001; background:var(--bg2); border-top-left-radius:20px; border-top-right-radius:20px; box-shadow:0 -8px 40px var(--shadow); padding:8px 22px calc(24px + env(safe-area-inset-bottom, 0px)); transform:translateY(105%); transition:transform .32s cubic-bezier(.32,.72,0,1); max-width:520px; margin:0 auto; }
.a2hs-sheet.open { transform:translateY(0); }
.a2hs-handle { width:40px; height:5px; border-radius:3px; background:var(--border); margin:8px auto 16px; cursor:grab; }
.a2hs-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:8px; }
.a2hs-title { font-size:18px; font-weight:800; color:var(--txt); letter-spacing:-.01em; }
.a2hs-x { width:32px; height:32px; flex-shrink:0; border:none; background:var(--bg3); color:var(--txt2); border-radius:50%; font-size:13px; cursor:pointer; display:flex; align-items:center; justify-content:center; -webkit-tap-highlight-color:transparent; }
.a2hs-sub { font-size:13px; color:var(--muted); line-height:1.5; margin-bottom:20px; }
.a2hs-steps { list-style:none; margin:0 0 16px; padding:0; display:flex; flex-direction:column; gap:15px; }
.a2hs-step { display:flex; align-items:center; gap:13px; }
.a2hs-num { flex-shrink:0; width:28px; height:28px; border-radius:50%; background:var(--accent); color:#fff; font-size:13px; font-weight:700; display:flex; align-items:center; justify-content:center; }
.a2hs-txt { font-size:14px; color:var(--txt); line-height:1.45; }
.a2hs-ic { display:inline-flex; vertical-align:-4px; margin:0 3px; color:var(--accent); }
.a2hs-note { font-size:12px; color:var(--muted); background:var(--bg3); border-radius:var(--radius-s); padding:11px 13px; line-height:1.5; margin-bottom:18px; }
.a2hs-done { width:100%; padding:13px; background:var(--accent); color:#fff; border:none; border-radius:var(--radius-s); font-size:15px; font-weight:700; font-family:var(--font); cursor:pointer; -webkit-tap-highlight-color:transparent; transition:background .15s; }
.a2hs-done:hover { background:var(--acc-h); }

/* ── Переключение вид-логин / вид-меню + анимация ─────────────── */
#loginView, #menuView { animation: viewfade .32s ease both; }
@keyframes viewfade { from{opacity:0; transform:translateY(8px);} to{opacity:1; transform:none;} }
#menuView[hidden], #loginView[hidden] { display:none !important; }
.theme-toggle-wrap { position:fixed; top:16px; right:16px; z-index:5; }
/* Скелет карточек меню на время загрузки */
.menu-skel { display:flex; flex-direction:column; gap:12px; }
.menu-skel .sk { height:96px; border-radius:var(--radius); background:var(--bg3); animation:qs-pulse 1.4s ease-in-out infinite; }
.menu-skel .sk:nth-child(2){animation-delay:.15s;} .menu-skel .sk:nth-child(3){animation-delay:.3s;}

/* ===================== из login.html ===================== */
html, body { height: 100%; }
.login-wrap { min-height:100vh; display:flex; flex-direction:column; align-items:center; justify-content:center; padding:20px; background:var(--bg); }
.login-card { width:100%; max-width:380px; background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius); padding:32px 28px 28px; box-shadow:0 4px 24px var(--shadow); }
.login-logo { width:56px; height:56px; border-radius:14px; overflow:hidden; margin:0 auto 16px; background:var(--acc-s); }
.login-logo img { width:100%; height:100%; object-fit:cover; }
.login-title { font-size:22px; font-weight:800; color:var(--txt); text-align:center; letter-spacing:-0.02em; margin-bottom:4px; }
.login-sub { font-size:13px; color:var(--muted); text-align:center; margin-bottom:24px; }
.login-field { margin-bottom:14px; }
.login-label { display:block; font-size:11px; font-weight:600; color:var(--muted); text-transform:uppercase; letter-spacing:.04em; margin-bottom:6px; }
.login-input { width:100%; padding:11px 14px; border:1px solid var(--border); background:var(--bg); color:var(--txt); border-radius:var(--radius-s); font-size:15px; font-family:var(--font); box-sizing:border-box; transition:border-color .15s; -webkit-appearance:none; }
.login-input:focus { outline:none; border-color:var(--accent); }
.login-input.error { border-color:var(--danger); }
.login-btn { width:100%; padding:13px; background:var(--accent); color:#fff; border:none; border-radius:var(--radius-s); font-size:15px; font-family:var(--font); font-weight:700; cursor:pointer; transition:background .15s; margin-top:6px; }
.login-btn:hover { background:var(--acc-h); }
.login-btn:disabled { opacity:.6; cursor:not-allowed; }
.login-error { background:rgba(181,72,72,.1); color:var(--danger); border:1px solid rgba(181,72,72,.3); border-radius:var(--radius-s); padding:10px 14px; font-size:13px; margin-top:14px; display:none; }
.login-error.visible { display:block; }
.theme-toggle-wrap { position:fixed; top:16px; right:16px; }
.login-footer { margin-top:20px; font-size:11px; color:var(--muted); text-align:center; }

/* ── Шторка «Установить на iPhone» ─────────────────────────────────────── */
.a2hs-trigger { display:none; width:100%; margin-top:16px; padding:11px 14px; background:var(--acc-s); color:var(--accent); border:1px solid transparent; border-radius:var(--radius-s); font-size:13px; font-weight:700; font-family:var(--font); cursor:pointer; text-align:center; -webkit-tap-highlight-color:transparent; transition:filter .15s; }
.a2hs-trigger:hover { filter:brightness(.97); }
.a2hs-trigger .chev { opacity:.55; margin-left:5px; }
.a2hs-overlay { position:fixed; inset:0; background:rgba(0,0,0,.45); opacity:0; visibility:hidden; transition:opacity .25s; z-index:1000; }
.a2hs-overlay.open { opacity:1; visibility:visible; }
.a2hs-sheet { position:fixed; left:0; right:0; bottom:0; z-index:1001; background:var(--bg2); border-top-left-radius:20px; border-top-right-radius:20px; box-shadow:0 -8px 40px var(--shadow); padding:8px 22px calc(24px + env(safe-area-inset-bottom, 0px)); transform:translateY(105%); transition:transform .32s cubic-bezier(.32,.72,0,1); max-width:520px; margin:0 auto; }
.a2hs-sheet.open { transform:translateY(0); }
.a2hs-handle { width:40px; height:5px; border-radius:3px; background:var(--border); margin:8px auto 16px; cursor:grab; }
.a2hs-head { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:8px; }
.a2hs-title { font-size:18px; font-weight:800; color:var(--txt); letter-spacing:-.01em; }
.a2hs-x { width:32px; height:32px; flex-shrink:0; border:none; background:var(--bg3); color:var(--txt2); border-radius:50%; font-size:13px; cursor:pointer; display:flex; align-items:center; justify-content:center; -webkit-tap-highlight-color:transparent; }
.a2hs-sub { font-size:13px; color:var(--muted); line-height:1.5; margin-bottom:20px; }
.a2hs-steps { list-style:none; margin:0 0 16px; padding:0; display:flex; flex-direction:column; gap:15px; }
.a2hs-step { display:flex; align-items:center; gap:13px; }
.a2hs-num { flex-shrink:0; width:28px; height:28px; border-radius:50%; background:var(--accent); color:#fff; font-size:13px; font-weight:700; display:flex; align-items:center; justify-content:center; }
.a2hs-txt { font-size:14px; color:var(--txt); line-height:1.45; }
.a2hs-ic { display:inline-flex; vertical-align:-4px; margin:0 3px; color:var(--accent); }
.a2hs-note { font-size:12px; color:var(--muted); background:var(--bg3); border-radius:var(--radius-s); padding:11px 13px; line-height:1.5; margin-bottom:18px; }
.a2hs-done { width:100%; padding:13px; background:var(--accent); color:#fff; border:none; border-radius:var(--radius-s); font-size:15px; font-weight:700; font-family:var(--font); cursor:pointer; -webkit-tap-highlight-color:transparent; transition:background .15s; }
.a2hs-done:hover { background:var(--acc-h); }

/* ===================== из admin.html ===================== */
.tabs{display:flex;gap:6px;margin-bottom:18px;border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;}
.tabs::-webkit-scrollbar{display:none;}
.tab{padding:12px 18px;background:transparent;border:none;color:var(--txt2);font-size:15px;line-height:1.2;font-family:var(--font);font-weight:500;cursor:pointer;border-bottom:2px solid transparent;transition:all .12s;white-space:nowrap;flex-shrink:0;-webkit-tap-highlight-color:transparent;}
.tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600;}
.tab:not(.active):hover{color:var(--txt);}
@media(max-width:640px){.tabs{gap:4px;}.tab{padding:13px 16px;font-size:15px;min-height:46px;}}
.tab-content{display:none;}.tab-content.active{display:block;}
.panel{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-bottom:14px;}
.panel h3{margin:0 0 10px;font-size:14px;font-weight:700;color:var(--txt);}
.panel-hint{font-size:12px;color:var(--muted);margin-bottom:14px;line-height:1.5;}
.add-form{display:grid;grid-template-columns:1.2fr 1fr auto auto;gap:8px;align-items:end;}
.form-group{display:flex;flex-direction:column;gap:3px;}
.form-label{font-size:10px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;}
.form-input,.form-select{border:1px solid var(--border);background:var(--bg);color:var(--txt);border-radius:var(--radius-s);padding:8px 10px;font-size:13px;font-family:var(--font);width:100%;}
.form-input:focus,.form-select:focus{outline:none;border-color:var(--accent);}
.users-table{width:100%;border-collapse:collapse;font-size:13px;}
.users-table th{text-align:left;padding:9px 10px;background:var(--bg3);border-bottom:2px solid var(--border);font-size:11px;font-weight:700;color:var(--txt2);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;}
.users-table td{padding:9px 10px;border-bottom:1px solid var(--border);vertical-align:middle;}
.users-table tr:last-child td{border-bottom:none;}
.name-input{border:1px solid transparent;background:transparent;color:var(--txt);border-radius:var(--radius-s);padding:5px 8px;font-size:13px;font-family:var(--font);width:100%;max-width:180px;transition:all .12s;}
.name-input:hover{background:var(--bg3);}.name-input:focus{outline:none;border-color:var(--accent);background:var(--bg);}
.name-input::placeholder{color:var(--muted);font-style:italic;}
.role-select-inline{border:1px solid var(--border);background:var(--bg);color:var(--txt);border-radius:var(--radius-s);padding:5px 8px;font-size:12px;font-family:var(--font);cursor:pointer;}
.added-cell{font-size:12px;color:var(--muted);white-space:nowrap;}
.pwd-status{font-size:11px;}.pwd-status.set{color:var(--success);}.pwd-status.unset{color:var(--danger);}
.row-actions{display:flex;gap:5px;justify-content:flex-end;flex-wrap:nowrap;}
.icon-btn{width:34px;height:34px;border:1px solid var(--border);background:var(--bg);color:var(--txt2);border-radius:var(--radius-s);cursor:pointer;font-size:14px;display:inline-flex;align-items:center;justify-content:center;transition:all .12s;flex-shrink:0;-webkit-tap-highlight-color:transparent;}
.icon-btn:hover{background:var(--acc-s);color:var(--accent);border-color:var(--accent);}
.icon-btn.danger:hover{background:rgba(181,72,72,.1);color:var(--danger);border-color:var(--danger);}
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:9999;display:flex;align-items:center;justify-content:center;padding:20px;}
.modal{background:var(--bg2);border-radius:var(--radius);padding:24px;max-width:380px;width:100%;box-shadow:0 8px 32px rgba(0,0,0,.3);}
.modal h3{margin:0 0 8px;font-size:16px;font-weight:700;}
.modal p{font-size:13px;color:var(--muted);margin-bottom:16px;line-height:1.5;}
.pwd-display{display:flex;align-items:center;gap:8px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-s);padding:12px 14px;margin-bottom:16px;}
.pwd-text{font-family:monospace;font-size:20px;font-weight:700;letter-spacing:.1em;color:var(--txt);flex:1;}
.pwd-copy{padding:6px 12px;background:var(--accent);color:#fff;border:none;border-radius:var(--radius-s);font-size:12px;font-family:var(--font);font-weight:600;cursor:pointer;white-space:nowrap;}
.modal-actions{display:flex;gap:8px;}.modal-actions .btn-ghost{flex:1;justify-content:center;}
.report-row{display:grid;grid-template-columns:auto 1fr auto;gap:14px;padding:14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg2);margin-bottom:10px;align-items:center;}
.r-icon{font-size:22px;}.r-title{font-size:14px;font-weight:700;margin-bottom:2px;}.r-desc{font-size:12px;color:var(--muted);}
.r-id{font-family:monospace;font-size:10px;color:var(--muted);background:var(--bg3);border-radius:3px;padding:1px 5px;margin-top:3px;display:inline-block;}
.order-row{display:grid;grid-template-columns:auto auto 1fr auto;gap:12px;padding:11px 14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg2);margin-bottom:8px;align-items:center;}
.ord-num{font-variant-numeric:tabular-nums;font-size:12px;font-weight:700;color:var(--muted);min-width:18px;text-align:center;}
.ord-title{font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ord-btns{display:inline-flex;gap:6px;}
.ord-btns .icon-btn[disabled]{opacity:.3;cursor:not-allowed;}
.role-chips{display:flex;gap:6px;flex-wrap:wrap;}
.role-chip{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border:1px solid var(--border);border-radius:14px;cursor:pointer;font-size:12px;font-weight:500;color:var(--txt2);transition:all .12s;user-select:none;-webkit-tap-highlight-color:transparent;}
.role-chip:hover{border-color:var(--accent);color:var(--accent);}
.role-chip.checked{background:var(--accent);border-color:var(--accent);color:#fff;}
.role-chip.fixed{background:var(--bg3);color:var(--muted);cursor:not-allowed;}
.role-chip.fixed::after{content:' 🔒';font-size:9px;}
.settings-form{display:flex;flex-direction:column;gap:12px;}
.settings-row{display:flex;flex-direction:column;gap:4px;}
.settings-label{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;}
.settings-input{border:1px solid var(--border);background:var(--bg);color:var(--txt);border-radius:var(--radius-s);padding:9px 12px;font-size:14px;font-family:var(--font);}
.settings-input:focus{outline:none;border-color:var(--accent);}
.settings-hint{font-size:11px;color:var(--muted);margin-top:2px;}
.settings-actions{display:flex;gap:8px;margin-top:4px;}
.schedule-current{display:inline-flex;align-items:center;gap:8px;background:var(--bg3);border-radius:var(--radius-s);padding:10px 16px;font-size:14px;font-weight:600;margin-bottom:14px;}
.schedule-row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;}
.orgs-table{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:14px;}
.orgs-table th{text-align:left;padding:8px 10px;background:var(--bg3);border-bottom:2px solid var(--border);font-size:11px;font-weight:700;color:var(--txt2);text-transform:uppercase;letter-spacing:.04em;}
.orgs-table td{padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:middle;}
.orgs-table tr:last-child td{border-bottom:none;}
.orgs-input{border:1px solid var(--border);background:var(--bg);color:var(--txt);border-radius:var(--radius-s);padding:6px 10px;font-size:13px;font-family:var(--font);width:100%;}
.orgs-input:focus{outline:none;border-color:var(--accent);}
.orgs-add{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:end;}
.danger-card{border:1px solid var(--danger);border-radius:var(--radius);padding:16px;margin-bottom:12px;}
.danger-card h4{font-size:14px;font-weight:700;color:var(--danger);margin-bottom:6px;}
.danger-card p{font-size:13px;color:var(--txt2);margin-bottom:12px;line-height:1.5;}
.confirm-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:99999;display:none;align-items:center;justify-content:center;padding:24px;}
.confirm-overlay.show{display:flex;}
.confirm-box{background:var(--bg2);border-radius:14px;padding:24px;max-width:320px;width:100%;box-shadow:0 8px 40px rgba(0,0,0,.35);}
.confirm-msg{font-size:15px;font-weight:500;color:var(--txt);line-height:1.5;margin-bottom:20px;}
.confirm-btns{display:flex;gap:10px;}
.confirm-ok{flex:1;padding:13px;background:var(--danger);color:#fff;border:none;border-radius:8px;font-size:15px;font-weight:700;cursor:pointer;font-family:var(--font);}
.confirm-cancel{flex:1;padding:13px;background:var(--bg3);color:var(--txt);border:1px solid var(--border);border-radius:8px;font-size:15px;font-weight:600;cursor:pointer;font-family:var(--font);}
@media(max-width:600px){
  .add-form{grid-template-columns:1fr;}.add-form .btn-accent{width:100%;}
  .users-table thead{display:none;}
  .users-table,.users-table tbody,.users-table tr,.users-table td{display:block;width:100%;}
  .users-table tr{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-s);margin-bottom:8px;padding:10px 12px;}
  .users-table td{padding:4px 0;border:none;}
  .name-input{max-width:100%;}.role-select-inline{width:100%;}
  .row-actions{justify-content:flex-start;margin-top:8px;}
  .report-row{grid-template-columns:auto 1fr;}.report-row .role-chips{grid-column:1/-1;}
  .orgs-add{grid-template-columns:1fr;}.schedule-row{flex-direction:column;align-items:stretch;}
}
.ll-url{display:inline-block;font-size:12px;color:var(--accent);word-break:break-all;text-decoration:none;margin-top:2px;}
.ll-url:hover{text-decoration:underline;}
.ll-roles{margin-top:6px;display:flex;gap:5px;flex-wrap:wrap;}
.ll-role{font-size:10px;font-weight:600;color:var(--txt2);background:var(--bg3);border-radius:8px;padding:2px 8px;}
.period-btns{display:inline-flex;gap:4px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-s);padding:3px;}
.period-btn{padding:7px 13px;border:none;background:transparent;color:var(--txt2);border-radius:6px;font-size:12px;font-family:var(--font);font-weight:600;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.period-btn.active{background:var(--accent);color:#fff;}
.seen-ago{font-size:11px;color:var(--muted);margin-top:1px;}
.never{color:var(--muted);font-style:italic;}
.ll-user{display:flex;align-items:flex-start;gap:8px;}
.ll-caret{flex-shrink:0;display:inline-block;width:12px;color:var(--muted);font-size:10px;margin-top:3px;transition:transform .15s;}
.ll-row.clickable{cursor:pointer;}
.ll-row.clickable:hover{background:var(--bg3);}
.ll-row.open .ll-caret{transform:rotate(90deg);color:var(--accent);}
.ll-detail>td{background:var(--bg3);padding:12px 14px!important;border-top:none!important;}
.ll-ev-head{font-size:11px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:8px;}
.ll-events{display:flex;flex-direction:column;gap:6px;max-height:340px;overflow:auto;}
.ll-ev{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 12px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-s);font-size:13px;}
.ll-ev-time{color:var(--txt);font-variant-numeric:tabular-nums;}
.ll-ev-type{font-size:11px;font-weight:700;padding:2px 9px;border-radius:10px;white-space:nowrap;}
.ll-ev-type.in{background:var(--acc-s);color:var(--accent);}
.ll-ev-type.visit{background:var(--bg3);color:var(--txt2);}
@media(max-width:640px){
  .users-table tr.ll-detail{margin-top:-6px;background:transparent;border:none;padding:0;}
  .users-table tr.ll-detail>td{padding:12px!important;border-radius:0 0 var(--radius-s) var(--radius-s);}
  .ll-ev{flex-wrap:wrap;gap:6px;}
}
.hours-chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}
.hour-chip{display:inline-flex;align-items:center;gap:6px;background:var(--acc-s);color:var(--accent);border:1px solid var(--accent);border-radius:14px;padding:6px 6px 6px 14px;font-size:14px;font-weight:700;}
.hour-chip button{border:none;background:transparent;color:var(--accent);cursor:pointer;font-size:13px;line-height:1;padding:3px 6px;border-radius:8px;-webkit-tap-highlight-color:transparent;}
.hour-chip button:hover{background:rgba(201,100,66,.18);}
.hours-empty{color:var(--muted);font-size:13px;margin-bottom:14px;}
.journal-summary{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px;}
.sum-card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;}
.sum-card.success{border-color:var(--success);}
.sum-card.error{border-color:var(--danger);background:rgba(181,72,72,.05);}
.sum-label{font-size:10px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:4px;}
.sum-value{font-size:16px;font-weight:700;color:var(--txt);line-height:1.25;}
.sum-extra{font-size:11px;color:var(--muted);margin-top:2px;}
.sum-card.success .sum-value{color:var(--success);}
.sum-card.error .sum-value{color:var(--danger);}
.log-toolbar{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;align-items:center;}
.filter-chip{padding:6px 12px;border:1px solid var(--border);background:var(--bg);color:var(--txt2);border-radius:16px;font-size:12px;font-family:var(--font);font-weight:500;cursor:pointer;transition:all .12s;-webkit-tap-highlight-color:transparent;}
.filter-chip.active{background:var(--accent);border-color:var(--accent);color:#fff;}
.filter-chip:not(.active):hover{border-color:var(--accent);color:var(--accent);}
.log-meta{flex:1;text-align:right;font-size:11px;color:var(--muted);}
.log-list{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;}
.log-item{display:grid;grid-template-columns:auto 1fr;gap:12px;padding:11px 14px;border-bottom:1px solid var(--border);font-size:13px;align-items:start;}
.log-item:last-child{border-bottom:none;}
.log-item.error{background:rgba(181,72,72,.04);}
.log-item.success{background:rgba(107,142,78,.04);}
.log-time{font-family:monospace;font-size:11px;color:var(--muted);white-space:nowrap;padding-top:1px;}
.log-item.error .log-time{color:var(--danger);}
.log-item.success .log-time{color:var(--success);}
.log-msg{color:var(--txt);line-height:1.45;word-break:break-word;}
.log-item.error .log-msg{color:var(--danger);font-weight:500;}
.log-item.success .log-msg{font-weight:500;}
.log-item.muted .log-msg{color:var(--muted);}
.log-cat{display:inline-block;font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:2px 6px;border-radius:4px;margin-right:5px;vertical-align:2px;}
.log-item.error .log-cat{background:var(--danger);color:#fff;}
.log-item.success .log-cat{background:var(--success);color:#fff;}
.log-item.info .log-cat{background:var(--acc-s);color:var(--accent);}
.log-item.muted .log-cat{display:none;}
@media(max-width:600px){.journal-summary{grid-template-columns:1fr;}.log-item{grid-template-columns:1fr;gap:3px;}}
/* ── Telegram ─────────────────────────────────────────────────────────── */
.tg-state{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px;}
.tg-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;}
.tg-dot.on{background:var(--success);}
.tg-dot.off{background:var(--muted);}
.tg-dot.warn{background:var(--danger);}
.tg-bot{font-size:14px;font-weight:700;color:var(--txt);}
.tg-meta{font-size:12px;color:var(--muted);}
.tg-req{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;padding:12px 0;border-bottom:1px solid var(--border);}
.tg-req:last-child{border-bottom:none;}
.tg-who{font-size:14px;font-weight:600;color:var(--txt);}
.tg-sub{font-size:12px;color:var(--muted);margin-top:2px;line-height:1.5;}
.tg-badge{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:2px 7px;border-radius:4px;margin-left:6px;vertical-align:1px;}
.tg-badge.ok{background:var(--acc-s);color:var(--accent);}
.tg-badge.no{background:var(--danger);color:#fff;}
.tg-badge.mute{background:var(--bg3);color:var(--muted);}
.tg-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap;justify-content:flex-end;}
.tg-actions .form-select{width:auto;min-width:150px;font-size:12px;padding:6px 8px;}
.tg-sched{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;}
.tg-card{border:1px solid var(--border);border-radius:var(--radius-s);padding:14px;background:var(--bg);}
.tg-card h4{margin:0 0 4px;font-size:13px;font-weight:700;color:var(--txt);}
.tg-card .tg-sub{margin-bottom:10px;}
.tg-row{display:flex;align-items:center;gap:8px;margin-bottom:10px;}
.tg-row label{font-size:12px;color:var(--txt2);cursor:pointer;}
.tg-row input[type=time]{border:1px solid var(--border);background:var(--bg2);color:var(--txt);border-radius:var(--radius-s);padding:6px 8px;font-size:13px;font-family:var(--font);}
@media(max-width:600px){.tg-req{grid-template-columns:1fr;}.tg-actions{justify-content:flex-start;}}
/* ===================== дополнения для серверной версии ===================== */
/* Меню выбора оформления: в прежней версии его рисовал скрипт, здесь — сервер. */
.header-actions { position: relative; }
.theme-pop { position:absolute; top:48px; right:0; z-index:50; display:none;
             flex-direction:column; min-width:190px; padding:6px;
             background:var(--bg2); border:1px solid var(--border);
             border-radius:var(--radius); box-shadow:0 12px 32px var(--shadow); }
.theme-pop.open { display:flex; }
.theme-opt { padding:10px 12px; border-radius:var(--radius-s); font-size:14px;
             color:var(--txt2); white-space:nowrap; }
.theme-opt:hover { background:var(--bg3); color:var(--txt); }
.theme-opt.active { color:var(--accent); font-weight:600; }
:is([data-theme^="glass"],[data-theme^="apple"]) .theme-pop { -webkit-backdrop-filter:blur(var(--blur)) saturate(var(--sat));
                                   backdrop-filter:blur(var(--blur)) saturate(var(--sat)); }
.back-link { font-size:13px; color:var(--muted); display:inline-block; margin-bottom:4px; }
.back-link:hover { color:var(--accent); }
.app-footer { margin-top:auto; padding:24px 0 8px; font-size:12px; color:var(--muted); text-align:center; }
.app-footer a { color:var(--muted); text-decoration:underline; }
.flash { padding:12px 14px; border-radius:var(--radius); background:var(--acc-s);
         color:var(--accent); font-size:14px; font-weight:600; margin-bottom:16px; }
.theme-toggle-wrap { position: fixed; top: 16px; right: 16px; z-index: 20; }
.login-foot { margin-top: 18px; font-size: 12px; color: var(--muted); text-align: center; }

/* ── админка ── */
.tab { padding:10px 14px; font-size:14px; font-weight:600; color:var(--muted);
       border-bottom:2px solid transparent; white-space:nowrap; }
.tab.active { color:var(--accent); border-bottom-color:var(--accent); }
.inline-form { display:inline; }
.inline-form select { background:var(--bg3); color:var(--txt); border:1px solid var(--border);
                      border-radius:var(--radius-s); padding:6px 8px; font-size:13px;
                      font-family:var(--font); max-width:180px; }
td.actions { display:flex; gap:6px; flex-wrap:wrap; }
.btn-ghost { padding:6px 10px; font-size:12px; font-weight:600; border-radius:var(--radius-s);
             border:1px solid var(--border); background:var(--bg2); color:var(--txt2);
             cursor:pointer; font-family:var(--font); }
.btn-ghost:hover { border-color:var(--accent); color:var(--accent); }
.btn-ghost.danger:hover { border-color:var(--danger); color:var(--danger); }
.btn-accent { padding:10px 16px; font-size:14px; font-weight:700; border-radius:var(--radius-s);
              border:none; background:var(--accent); color:#fff; cursor:pointer; font-family:var(--font); }
.admin-card-block { margin-top:20px; padding:18px; background:var(--bg2);
                    border:1px solid var(--border); border-radius:var(--radius); }
.admin-card-block h3 { font-size:14px; margin-bottom:12px; }
.add-form { display:flex; gap:8px; flex-wrap:wrap; }
.add-form .form-input { flex:1; min-width:150px; padding:10px 12px; font-size:14px;
                        border:1px solid var(--border); border-radius:var(--radius-s);
                        background:var(--bg); color:var(--txt); font-family:var(--font); }
.hint { margin-top:10px; font-size:12px; color:var(--muted); }
.ok-text { color:var(--success); font-weight:600; }
.danger-text { color:var(--danger); font-weight:600; }
.mono { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12.5px; }

/* ── страницы отчётов: те же токены, что и в остальном интерфейсе ── */
.tiles { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
         gap:12px; margin-bottom:18px; }
.tile { background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius);
        padding:16px 18px; display:flex; flex-direction:column; gap:4px; }
.tile .big { font-size:22px; font-weight:800; letter-spacing:-0.02em;
             font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
.tile .cap { font-size:12px; color:var(--muted); text-transform:uppercase; letter-spacing:.04em; }
.card { background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius);
        padding:18px; margin-bottom:14px; }
.card h2 { font-size:12px; text-transform:uppercase; letter-spacing:.05em;
           color:var(--muted); margin-bottom:10px; font-weight:700; }
.row { display:flex; align-items:baseline; gap:10px; padding:9px 0;
       border-top:1px solid var(--divider); }
.row:first-of-type { border-top:0; padding-top:0; }
.row .name { font-weight:600; }
.row .detail { margin-left:auto; text-align:right; color:var(--txt2); font-size:14px;
               font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }
.search { display:flex; gap:8px; margin-bottom:14px; }
.search input { flex:1; min-width:0; padding:11px 14px; font-size:16px; font-family:var(--font);
                border:1px solid var(--border); border-radius:var(--radius-s);
                background:var(--bg2); color:var(--txt); }
.search button { padding:11px 18px; font-size:14px; font-weight:700; font-family:var(--font);
                 border:1px solid var(--border); border-radius:var(--radius-s);
                 background:var(--bg2); color:var(--txt2); cursor:pointer; }
.search button:hover { border-color:var(--accent); color:var(--accent); }
.found { color:var(--muted); font-size:13px; margin-bottom:10px; }
.years { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:12px; }
.years a { padding:7px 13px; border-radius:20px; font-size:13px; font-weight:600;
           color:var(--txt2); border:1px solid var(--border); background:var(--bg2); }
.years a.on { background:var(--active-bg); color:var(--active-fg);
              border-color:var(--active-bd); box-shadow:var(--active-sh); }
.pager { display:flex; align-items:center; justify-content:space-between; gap:12px; margin:16px 0; }
.pager a { padding:9px 14px; border-radius:var(--radius-s); border:1px solid var(--border);
           background:var(--bg2); font-size:14px; font-weight:600; }
.pager .pos { color:var(--muted); font-size:13px; }
.note { color:var(--muted); font-size:12.5px; line-height:1.6; margin-top:14px; }
.crumbs { margin-bottom:6px; font-size:13px; }
.crumbs a { color:var(--muted); }
.page-title { font-size:19px; font-weight:800; letter-spacing:-0.02em; margin-bottom:14px; }
.warn, .danger-text { color:var(--danger); }
.soon { color:#c98a1a; }
[data-theme="dark"] .soon, [data-theme="glass-dark"] .soon { color:#e0b050; }
.muted { color:var(--muted); }
.right { text-align:right; }
.nowrap { white-space:nowrap; }
.empty { color:var(--muted); text-align:center; padding:28px; }
.clip { max-width:300px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.clip.narrow { max-width:180px; }
.err { color:var(--danger); font-size:13px; }
.ok-msg { color:var(--success); font-size:14px; }
.narrow-form { display:flex; flex-direction:column; gap:8px; max-width:340px; }
.narrow-form label { color:var(--muted); font-size:13px; }
.narrow-form input { padding:11px 14px; font-size:16px; font-family:var(--font);
                     border:1px solid var(--border); border-radius:var(--radius-s);
                     background:var(--bg); color:var(--txt); }
.narrow-form button { padding:12px; font-size:15px; font-weight:700; font-family:var(--font);
                      border:none; border-radius:var(--radius-s); background:var(--accent);
                      color:#fff; cursor:pointer; margin-top:4px; }

/* таблицы отчётов — вид как у .data-table прежнего интерфейса */
.table-wrap { overflow-x:auto; background:var(--bg2); border:1px solid var(--border);
              border-radius:var(--radius); box-shadow:0 2px 8px var(--shadow); }
table { border-collapse:collapse; width:100%; font-size:13.5px; }
th { padding:10px 13px; text-align:left; background:var(--bg3); color:var(--txt2);
     font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em;
     white-space:nowrap; border-bottom:2px solid var(--border); position:sticky; top:0; }
td { padding:10px 13px; vertical-align:top; border-bottom:1px solid var(--divider); }
td.right, th.right { text-align:right; }
tbody tr:last-child td { border-bottom:0; }
td .mono, .mono { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:12.5px; }


/* Число и знак валюты не разрываются; на узком экране уменьшаем кегль,
   а не ломаем строку посреди суммы. */
.tile .big { overflow-wrap:normal; word-break:keep-all; font-size:clamp(17px,5.2vw,22px); }
/* Заголовки отчётов длиннее «Отчёты Pradex» — переносим, а не обрезаем. */
.brand-title { white-space:normal; overflow:visible; text-overflow:clip; line-height:1.2; }

/* Карточный режим — только для собственных таблиц (.card-table).
   Дерево отчёта (.data-table) остаётся таблицей: у него своя мобильная
   вёрстка из прежнего проекта, и ломать её нельзя. */
@media (max-width:640px) {
  .card-table, .card-table tbody, .card-table tr, .card-table td { display:block; width:100%; }
  .card-table thead { display:none; }
  .card-table tr { background:var(--bg2); border:1px solid var(--border);
                   border-radius:var(--radius); padding:12px; margin-bottom:10px; }
  .card-table td { display:flex !important; gap:12px; padding:5px 0 !important;
                   border:0 !important; text-align:left !important; align-items:baseline; }
  .card-table td::before { content:attr(data-label); color:var(--muted); font-size:12.5px;
                           font-weight:600; flex:0 0 104px; }
  .card-table td.actions { flex-wrap:wrap; }
  .card-table .clip, .card-table .clip.narrow { max-width:none; max-height:none; display:flex;
                                                -webkit-line-clamp:none; line-clamp:none; }
}

/* Бейдж со счётчиком строк рендерер заполняет сам — показываем, когда есть текст. */
.brand-badge:not(:empty) { display:inline-block !important; }
/* Панель иерархии и включаемых колонок: на узком экране в столбик, без наложений */
.report-toolbar { display:flex; flex-wrap:wrap; align-items:center; gap:10px; margin-bottom:12px; }
.hier-select-wrap { display:flex; align-items:center; gap:8px; flex:1 1 auto; min-width:0; }
.hier-select { flex:1; min-width:0; }
.opt-cols { display:flex; align-items:center; gap:10px; flex-wrap:wrap; }

/* ===================== адаптив: правки к перенесённым стилям ===================== */

/*
 * Панель фильтров. В оригинале было repeat(auto-fit, minmax(0,1fr)): при нулевом
 * минимуме браузер нарезает произвольное число колонок, и на ширине 600–900 px
 * подписи фильтров наезжают друг на друга, а поля сжимаются в ничто. В Apps
 * Script это не проявлялось — отчёт жил в узком iframe, где всегда действовало
 * правило для 600 px. Задаём минимум в 150 px: колонки переносятся сами на любой
 * ширине, отдельные точки перелома не нужны.
 */
.filters-bar { grid-template-columns:repeat(auto-fit,minmax(150px,1fr)) !important; overflow:visible; }
.filter-label { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

/* Панель над отчётом переносится по строкам, а не выдавливает страницу вбок. */
.report-toolbar { display:flex; flex-wrap:wrap; align-items:center; gap:10px; margin-bottom:12px; }
.toolbar-info { color:var(--muted); font-size:13px; white-space:nowrap; }

/* Карточки итогов: на узком экране в одну колонку, иначе суммы рвутся. */
@media (max-width:420px) {
  .totals-bar { grid-template-columns:1fr; }
  .tree-controls { flex-direction:column; }
  .tree-controls .btn-ghost { width:100%; }
}

/* Планшет и узкое окно: те же упрощения, что и на телефоне (в оригинале они
   включались только до 600 px, из-за чего промежуток 600–900 выглядел сломанным). */
@media (max-width:900px) {
  /* Ширина числовой колонки: суммы бывают девятизначными, при 92 px они
     обрезались многоточием. Ниже 600 px действует правило оригинала (78 px). */
  .data-table th.col-num, .data-table td.col-num { width:118px; }
  .add-form { grid-template-columns:1fr 1fr; }
  .add-form .btn-accent { grid-column:1/-1; }
}

/* Числовые колонки дерева: суммы бывают девятизначными («862 404 012»),
   при исходных 100 px они обрезались многоточием на всех ширинах. */
.data-table th.col-num, .data-table td.col-num { width:132px; }
@media (max-width:600px) {
  .data-table th.col-num, .data-table td.col-num { width:104px; }
  .data-table td.col-name, .data-table th.col-name { word-break:break-word; }
}

/* ── вход по Face ID ── */
.pk-btn { margin-top:10px; background:var(--bg3); color:var(--txt); border:1px solid var(--border); }
.pk-btn:hover { border-color:var(--accent); color:var(--accent); }
.pk-msg { margin-top:10px; font-size:13px; }
.pk-list { margin-top:12px; }
.pk-item { display:flex; align-items:center; gap:10px; padding:10px 0;
           border-top:1px solid var(--divider); font-size:13px; }
.pk-item .pk-dev { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--txt2); }

/*
 * Выпадающие списки рисует сама система, и без подсказки она берёт светлую
 * палитру — на тёмной теме меню выглядело чужеродным. color-scheme говорит
 * браузеру, в каком оформлении рисовать нативные элементы: списки, скроллбары,
 * календари. Значение задаём для каждой темы отдельно.
 */
:root, [data-theme="light"], [data-theme="glass-light"] { color-scheme: light; }
[data-theme="dark"], [data-theme="glass-dark"] { color-scheme: dark; }
body.dark { color-scheme: dark; }

/* Сам список в закрытом виде — в цветах интерфейса. */
select, .filter-select, .hier-select, .inline-form select, .form-input {
  background-color: var(--bg); color: var(--txt); border-color: var(--border);
}
select option { background: var(--bg2); color: var(--txt); }

/*
 * Список иерархии в оригинале стиля не имел — в песочнице Apps Script он
 * выглядел системным элементом и в глаза не бросался. У нас он на тёмном фоне,
 * поэтому оформляем так же, как фильтры: свой значок-стрелка вместо системного.
 */
.hier-select, .inline-form select, select.form-input {
  -webkit-appearance:none; appearance:none;
  padding:8px 30px 8px 12px; font-size:13px; font-family:var(--font);
  border:1px solid var(--border); border-radius:var(--radius-s);
  background-color:var(--bg); color:var(--txt); cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%239B8F7A' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 10px center;
}
.hier-select-label { font-size:12px; font-weight:600; color:var(--muted);
                     text-transform:uppercase; letter-spacing:.04em; white-space:nowrap; }

/* Галочки — в акцентном цвете интерфейса, а не системном синем. */
input[type="checkbox"], input[type="radio"] { accent-color:var(--accent); width:16px; height:16px; }
.opt-cols label { display:inline-flex; align-items:center; gap:6px; font-size:13px; color:var(--txt2); }

/* ── экран блокировки ── */
.lock-card { text-align:center; }
.pin-input { width:100%; padding:16px; margin:6px 0 10px; text-align:center;
             font-size:28px; letter-spacing:14px; font-family:var(--font);
             border:1px solid var(--border); border-radius:var(--radius-s);
             background:var(--bg); color:var(--txt); }
.pin-input::placeholder { letter-spacing:10px; color:var(--muted); }
.lock-other { display:block; margin-top:16px; font-size:13px; color:var(--muted);
              text-decoration:underline; }
.pin-hint { font-size:12.5px; color:var(--muted); margin-top:10px; line-height:1.5; }

/* ===================== из report_universal.html ===================== */
.filters-bar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 10px;padding:12px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:14px;align-items:end;}
.filter-actions{grid-column:1/-1;display:flex;gap:8px;margin-top:4px;}
.filter-actions .btn-accent,.filter-actions .btn-ghost{flex:1;justify-content:center;}
@media(min-width:600px){
  .filters-bar{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));}
  .filter-actions{grid-column:auto;margin-top:0;flex-direction:column;gap:6px;}
  .filter-actions .btn-accent,.filter-actions .btn-ghost{flex:none;width:100%;padding:8px 10px;font-size:13px;}
}
.totals-bar{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px;}
.total-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;}
.total-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:2px;}
.total-period{font-size:11px;color:var(--muted);margin-bottom:6px;font-weight:500;min-height:16px;}
.total-value{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em;line-height:1.2;}
@media(max-width:599px){.total-card{padding:12px 14px;}.total-value{font-size:17px;}}
.table-wrap{border-radius:var(--radius);border:1px solid var(--border);background:var(--bg2);overflow:hidden;width:100%;}
.data-table{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed;}
.data-table th.col-name{text-align:left;}
.data-table th.col-num{width:120px;text-align:right;}
.data-table th{padding:10px;background:var(--bg3);border-bottom:2px solid var(--border);font-weight:700;font-size:11px;color:var(--txt2);text-transform:uppercase;letter-spacing:.04em;overflow:hidden;white-space:nowrap;}
.data-table th.sortable{cursor:pointer;user-select:none;}
.data-table th.sortable:hover{background:var(--acc-s);color:var(--accent);}
.sort-icon{margin-left:4px;font-size:10px;opacity:.4;}
.data-table th.sort-asc .sort-icon::after{content:'↑';opacity:1;color:var(--accent);}
.data-table th.sort-desc .sort-icon::after{content:'↓';opacity:1;color:var(--accent);}
.data-table th:not(.sort-asc):not(.sort-desc) .sort-icon::after{content:'↕';}
.data-table td{padding:9px 10px;border-bottom:1px solid var(--border);vertical-align:middle;}
.data-table td.col-name{white-space:normal;word-break:break-word;overflow-wrap:break-word;line-height:1.4;}
.data-table td.col-num{text-align:right;font-variant-numeric:tabular-nums;font-weight:500;white-space:nowrap;}
.data-table tr:last-child td{border-bottom:none;}
.data-table tbody tr:hover td{background:var(--bg3);}
.data-table tr.has-children{cursor:pointer;user-select:none;}
.data-table tr.has-children:hover td{background:var(--acc-s);}
.toggle-icon{display:inline-block;width:14px;font-size:10px;color:var(--muted);margin-right:4px;transition:transform 120ms;transform:rotate(0deg);}
.data-table tr.expanded .toggle-icon{transform:rotate(90deg);color:var(--accent);}
.row-year td{font-weight:800;background:var(--bg3);font-size:14px;}
.row-month td{font-weight:700;color:var(--txt2);background:var(--bg2);}
.row-parent td{font-weight:700;background:var(--bg3);}
.row-l1 td{font-weight:600;color:var(--txt);}
.row-l2 td{font-weight:500;color:var(--txt2);font-size:12px;}
.row-child td{color:var(--txt2);font-size:12px;}
.indent-1{padding-left:20px!important;}
.indent-2{padding-left:38px!important;}
.indent-3{padding-left:56px!important;}
.report-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:14px;}
.toolbar-info{flex:1;font-size:11px;color:var(--muted);}
.highlight-red{color:var(--danger)!important;font-weight:600;}
/* Выпадающий список иерархий (ui.hierarchyStyle === 'dropdown') */
.hier-select-wrap{display:flex;align-items:center;gap:8px;flex:1 1 auto;min-width:0;}
.hier-select-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);white-space:nowrap;}
.hier-select{flex:1;min-width:0;padding:9px 10px;font-size:13px;font-weight:600;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg2);color:var(--txt);appearance:auto;}
/* Чипы включаемых колонок (ui.optionalColumns) */
.opt-cols{display:flex;flex-wrap:wrap;gap:8px;}
.opt-col-chip{display:inline-flex;align-items:center;gap:7px;padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg2);font-size:12px;font-weight:600;color:var(--txt2);cursor:pointer;user-select:none;}
.opt-col-chip input{accent-color:var(--accent);width:16px;height:16px;margin:0;cursor:pointer;}
.opt-col-chip.on{border-color:var(--accent);color:var(--accent);background:var(--acc-s);}
/* Карточка операции (ui.detail): клик по листовой строке открывает подробности */
.data-table tr.row-detail{cursor:pointer;}
.data-table tr.row-detail:hover td{background:var(--acc-s);}
.data-table tr.row-detail td.col-name::after{content:'\203A';float:right;margin-left:8px;color:var(--muted);font-weight:700;}
.det-ov{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:flex-end;justify-content:center;z-index:200;padding:0;}
@media(min-width:600px){.det-ov{align-items:center;padding:24px;}}
.det-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius) var(--radius) 0 0;width:100%;max-width:560px;max-height:86vh;display:flex;flex-direction:column;}
@media(min-width:600px){.det-card{border-radius:var(--radius);}}
.det-head{display:flex;align-items:flex-start;gap:10px;padding:14px 16px;border-bottom:1px solid var(--border);}
.det-title{flex:1;font-size:14px;font-weight:700;line-height:1.35;word-break:break-word;}
.det-close{flex:none;background:none;border:none;color:var(--muted);font-size:22px;line-height:1;cursor:pointer;padding:0 4px;-webkit-tap-highlight-color:transparent;}
.det-body{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:6px 16px 16px;}
.det-op{padding:10px 0;border-bottom:1px solid var(--border);}
.det-op:last-child{border-bottom:none;}
.det-row{display:flex;gap:12px;padding:5px 0;align-items:baseline;}
.det-k{flex:none;width:104px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);}
.det-v{flex:1;font-size:13px;line-height:1.45;word-break:break-word;}
.det-row.wide{display:block;}
.det-row.wide .det-k{width:auto;margin-bottom:3px;}
.det-cnt{font-size:11px;color:var(--muted);padding:8px 0 2px;}
/* Компактный режим таблицы: 3+ числовых колонок — уменьшаем шрифты, чтобы всё влезало */
.data-table.cols3 th.col-num{width:96px;}
.data-table.cols3 th{font-size:10px;padding:9px 6px;}
.data-table.cols3 td{font-size:12px;padding:8px 6px;}
@media(max-width:599px){
  /* На телефоне — АВТОраскладка таблицы: числовые колонки подстраиваются под
     ширину своих сумм и НИКОГДА не обрезаются; колонка «Структура» забирает
     остаток ширины и переносит длинные названия на несколько строк. */
  .data-table{table-layout:auto;}
  .data-table th.col-num{width:auto;}
  .data-table td{padding:8px 5px;font-size:12px;}
  /* Заголовки колонок переносятся на 2 строки («Долг клиента» и т.п. не обрезаются) */
  .data-table th{padding:8px 5px;font-size:10px;white-space:normal;line-height:1.25;vertical-align:bottom;}
  .indent-1{padding-left:12px!important;}
  .indent-2{padding-left:24px!important;}
  .indent-3{padding-left:36px!important;}
  .hierarchy-toggle{width:100%;}
  .hier-btn{font-size:11px;padding:7px 6px;}
  .hier-select-wrap{width:100%;flex:1 1 100%;}
  /* Компактный режим (3+ числовых колонок): шрифты меньше, отступы плотнее */
  .data-table.cols3 th{font-size:8.5px;padding:7px 3px;letter-spacing:.02em;white-space:normal;line-height:1.25;}
  .data-table.cols3 td{font-size:10.5px;padding:7px 3px;}
  .data-table.cols3 .toggle-icon{width:10px;margin-right:2px;}
  .data-table.cols3 .indent-1{padding-left:9px!important;}
  .data-table.cols3 .indent-2{padding-left:17px!important;}
  .data-table.cols3 .indent-3{padding-left:25px!important;}
}

/* ===================== из report_bonus.html ===================== */
.bn-toolbar{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;margin-bottom:12px;display:flex;flex-direction:column;gap:9px;}
.bn-row{display:flex;gap:9px;flex-wrap:wrap;}
.bn-fld{flex:1;min-width:150px;position:relative;}
.bn-fld label{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700;margin-bottom:5px;}
.bn-fld select,.bn-fld input[type=text]{width:100%;height:40px;border:1px solid var(--border);border-radius:var(--radius-s);background:var(--bg);padding:0 12px;font-family:var(--font);font-size:14px;color:var(--txt);appearance:none;-webkit-appearance:none;}
.bn-fld select:focus,.bn-fld input:focus{outline:2px solid var(--acc-s);border-color:var(--accent);}
.bn-selwrap::after{content:"▾";position:absolute;right:13px;top:29px;color:var(--muted);pointer-events:none;}
.bn-opts{align-items:center;gap:7px;}
.bn-chk{display:inline-flex;align-items:center;gap:7px;min-height:34px;padding:0 11px;border:1px solid var(--border);border-radius:var(--radius-s);background:var(--bg);cursor:pointer;font-weight:600;font-size:13px;user-select:none;color:var(--txt);}
.bn-chk input{width:16px;height:16px;margin:0;accent-color:var(--accent);}
.bn-multi{display:flex;flex-wrap:wrap;align-items:center;gap:5px;min-height:40px;border:1px solid var(--border);border-radius:var(--radius-s);background:var(--bg);padding:4px 8px;cursor:text;}
.bn-multi:focus-within{outline:2px solid var(--acc-s);border-color:var(--accent);}
.bn-fld .bn-multi input[type=text]{flex:1;min-width:120px;width:auto;height:30px;border:0;outline:0;background:transparent;padding:0 4px;}
.bn-chip{display:inline-flex;align-items:center;gap:4px;max-width:100%;background:var(--acc-s);color:var(--accent);font-weight:700;font-size:12px;border-radius:999px;padding:3px 4px 3px 10px;}
.bn-chip button{border:0;background:transparent;color:inherit;font-size:15px;line-height:1;cursor:pointer;padding:0 4px;border-radius:999px;}
.bn-chip button:hover{background:rgba(0,0,0,.08);}
.bn-ac{position:absolute;top:100%;left:0;right:0;background:var(--bg2);border:1px solid var(--border);border-top:0;border-radius:0 0 var(--radius-s) var(--radius-s);max-height:220px;overflow:auto;z-index:20;box-shadow:0 12px 26px rgba(0,0,0,.14);}
.bn-ac div{padding:11px 12px;border-bottom:1px solid var(--border);cursor:pointer;font-size:13.5px;color:var(--txt);}
.bn-ac div:last-child{border-bottom:0;}
.bn-ac div.hi,.bn-ac div:hover{background:var(--acc-s);}
.bn-ac mark{background:transparent;color:var(--accent);font-weight:800;}
.bn-hint{font-size:11px;color:var(--muted);padding:2px 2px;line-height:1.4;}
.bn-hint b{color:var(--accent);}
.bn-reset{border:1px solid var(--border);background:var(--bg);color:var(--txt);font-family:var(--font);font-weight:700;font-size:12.5px;height:34px;padding:0 13px;border-radius:var(--radius-s);cursor:pointer;display:inline-flex;align-items:center;gap:7px;}
.bn-reset:active{transform:scale(.97);}
.bn-reset:hover{border-color:var(--accent);color:var(--accent);}

.bn-head{display:grid;grid-template-columns:1fr 92px 92px;gap:0;padding:6px 13px;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700;}
.bn-head .n{text-align:right;}
.bn-node{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:9px;overflow:hidden;}
.bn-r{display:grid;grid-template-columns:1fr 92px 92px;align-items:center;padding:11px 13px;border-top:1px solid var(--border);cursor:pointer;min-height:46px;}
.bn-r:first-child{border-top:0;}
.bn-r .n{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap;font-size:13px;}
.bn-ws .bn-head,.bn-ws .bn-r{grid-template-columns:1fr 92px 92px 100px;}
.bn-r .n.s{color:var(--accent);} .bn-r .n.s.over{color:var(--success);}
.bn-r .n.p{color:var(--success);} .bn-r .n.r{color:var(--txt);} .bn-r .n.neg{color:var(--danger);}
.bn-l1{background:var(--bg2);}
.bn-l1{background:color-mix(in srgb, var(--accent) 8%, var(--bg2));}
.bn-l1{border-left:3px solid var(--accent);color:var(--txt);}
.bn-l1 .nm{font-weight:700;font-size:13.5px;display:flex;align-items:baseline;gap:6px;line-height:1.3;}
.bn-nmbody{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 7px;min-width:0;}
.bn-l1 .bn-nmbody{font-weight:800;}
.bn-l1 .n{color:var(--txt);}
.bn-l1 .bn-caret{flex:none;color:var(--accent);opacity:.9;}
.bn-l2{background:var(--bg3);}
.bn-l2 .nm{font-weight:700;color:var(--txt);font-size:12.5px;display:flex;align-items:center;gap:6px;}
.bn-l2.deep{padding-left:22px;}
.bn-reduce{background:var(--acc-s);}
.bn-reduce .nm{font-weight:700;color:var(--danger);font-size:12.5px;display:flex;align-items:center;gap:6px;}
.bn-doc .nm{font-size:12px;color:var(--txt);font-weight:500;line-height:1.3;}
.bn-doc .dt{font-size:10.5px;color:var(--muted);margin-top:2px;}
.bn-doc.child{padding-left:26px;}
.bn-doc.child2{padding-left:38px;}
.bn-caret{display:inline-block;width:13px;color:inherit;opacity:.65;transition:transform .12s;font-size:11px;}
.bn-open>.bn-caret,.bn-open .bn-caret:first-child{transform:rotate(90deg);}
.bn-badge{font-size:10px;font-weight:800;padding:3px 9px;border-radius:999px;white-space:nowrap;}
.bn-owe{background:var(--acc-s);color:var(--accent);}
.bn-over{background:rgba(46,160,90,.15);color:var(--success);}
.bn-zero{background:var(--bg3);color:var(--muted);}
.bn-flag{background:var(--danger);color:#fff;font-size:9.5px;font-weight:800;padding:2px 8px;border-radius:999px;white-space:nowrap;letter-spacing:.02em;}
.bn-real{font-size:10.5px;color:var(--accent);margin-top:3px;font-weight:600;}
.bn-alt{font-size:9.5px;line-height:1.35;color:var(--danger);font-weight:700;margin-top:4px;white-space:normal;}
.bn-alt i{display:block;font-style:normal;color:var(--muted);font-weight:600;font-size:8.5px;}
.bn-kids{display:none;} .bn-kids.bn-open{display:block;}
.bn-check{margin-top:14px;background:var(--bg2);border:1px dashed var(--accent);border-radius:var(--radius);padding:12px 14px;font-size:12px;color:var(--muted);line-height:1.5;}
.bn-check b{color:var(--txt);} .bn-check .ok{color:var(--success);font-weight:800;}
.bn-legend{display:flex;gap:9px;flex-wrap:wrap;margin:10px 2px 2px;font-size:11px;color:var(--muted);}
.bn-legend span{display:inline-flex;align-items:center;gap:5px;}
.bn-sw{width:12px;height:12px;border-radius:3px;display:inline-block;border:1px solid rgba(0,0,0,.08);}
.bn-empty{padding:26px;text-align:center;color:var(--muted);font-size:13px;}
.bn-syncnote{font-size:11px;color:var(--muted);margin:-4px 2px 12px;}
.bn-syncnote b{color:var(--accent);}
.bn-spin{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:bnspin .7s linear infinite;vertical-align:-2px;}
@keyframes bnspin{to{transform:rotate(360deg);}}
@media (max-width:480px){
  .bn-head,.bn-r{grid-template-columns:1fr 74px 74px;}
  .bn-ws .bn-head,.bn-ws .bn-r{grid-template-columns:1fr 66px 66px 72px;}
  .bn-r{padding:8px 10px;min-height:40px;}
  .bn-head{font-size:9px;padding:5px 10px;}
  .bn-l1 .nm{font-size:12px;}
  .bn-l2 .nm,.bn-reduce .nm{font-size:11px;}
  .bn-doc .nm{font-size:10.5px;}
  .bn-r .n{font-size:11px;}
  .bn-badge{font-size:8.5px;padding:2px 6px;}
  .bn-flag{font-size:8.5px;padding:2px 6px;}
  .bn-real{font-size:9.5px;}
  .bn-alt{font-size:8.5px;}
  .bn-alt i{font-size:8px;}
  .bn-fld label{font-size:9px;}
  .bn-fld select,.bn-fld input[type=text]{height:38px;font-size:13px;}
  .bn-chk{min-height:34px;font-size:12px;}
  .bn-caret{width:12px;font-size:10px;}
}

/* ===================== из report_suppliers.html ===================== */
/* ── год-стрелками ── */
.sup-year{display:flex;align-items:center;justify-content:center;gap:14px;margin:2px 0 12px;}
.sup-year .arw{width:44px;height:44px;border-radius:14px;border:1px solid var(--border);background:var(--bg2);
  display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;color:var(--txt);
  cursor:pointer;-webkit-tap-highlight-color:transparent;}
.sup-year .arw:active{transform:scale(.94);}
.sup-year .arw[disabled]{opacity:.32;cursor:default;}
.sup-year .val{min-width:120px;text-align:center;}
.sup-year .val b{font-size:29px;font-weight:800;letter-spacing:-.02em;display:block;line-height:1;color:var(--txt);}
.sup-year .val span{font-size:10px;color:var(--muted);letter-spacing:.06em;text-transform:uppercase;}

/* ── тулбар ── */
.sup-tb{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:12px;margin-bottom:12px;display:flex;flex-direction:column;gap:11px;}
.sup-seg{display:flex;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-s);padding:3px;}
.sup-seg button{flex:1;border:0;background:transparent;color:var(--muted);font-family:var(--font);font-weight:700;font-size:13px;padding:10px 6px;border-radius:8px;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.sup-seg button.on{background:var(--bg2);color:var(--txt);box-shadow:0 1px 3px rgba(0,0,0,.18);}
.sup-fld{position:relative;}
.sup-fld label{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700;margin-bottom:5px;}
.sup-fld select{width:100%;height:46px;border:1px solid var(--border);border-radius:var(--radius-s);background:var(--bg);padding:0 12px;font-family:var(--font);font-size:14px;color:var(--txt);appearance:none;-webkit-appearance:none;}
.sup-fld::after{content:"▾";position:absolute;right:13px;top:32px;color:var(--muted);pointer-events:none;}
.sup-chk{display:flex;align-items:center;gap:9px;min-height:46px;padding:0 12px;border:1px solid var(--border);border-radius:var(--radius-s);background:var(--bg);cursor:pointer;font-weight:600;font-size:13px;user-select:none;color:var(--txt);}
.sup-chk input{width:20px;height:20px;accent-color:var(--accent);}
.sup-chk .hint{font-size:11px;color:var(--muted);font-weight:500;}
.sup-actions{display:flex;gap:8px;flex-wrap:wrap;}
.sup-btn{border:1px solid var(--border);background:var(--bg);color:var(--txt);font-family:var(--font);font-weight:700;font-size:12.5px;height:40px;padding:0 14px;border-radius:var(--radius-s);cursor:pointer;-webkit-tap-highlight-color:transparent;}
.sup-btn:active{transform:scale(.97);}
.sup-btn:hover{border-color:var(--accent);color:var(--accent);}
.sup-btn.reset{margin-left:auto;color:var(--danger);border-color:transparent;background:transparent;}

/* ── таблица ── */
.sup-head{display:grid;grid-template-columns:1fr 104px 104px;padding:6px 14px;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700;}
.sup-head .h{text-align:right;cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent;}
.sup-head .h.on{color:var(--txt);}
.sup-r{display:grid;grid-template-columns:1fr 104px 104px;align-items:center;padding:11px 14px;border-top:1px solid var(--border);min-height:46px;}
.sup-r[data-exp]{cursor:pointer;}
.sup-node{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;}
.sup-r .nm{display:flex;align-items:center;gap:8px;min-width:0;}
.sup-r .t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sup-r .n{text-align:right;font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap;font-size:13px;}
.sup-r .n.pay{color:var(--success);} .sup-r .n.ship{color:var(--accent);} .sup-r .n.neg{color:var(--danger);}
.sup-caret{display:inline-block;width:13px;flex:none;color:var(--accent);opacity:.75;transition:transform .12s;font-size:11px;}
.sup-caret.o{transform:rotate(90deg);}
.sup-caret.leaf{opacity:0;}
.lvl0 .t{font-weight:800;font-size:14.5px;}
.lvl1{padding-left:22px;background:color-mix(in srgb, var(--accent) 4%, var(--bg2));}
.lvl1 .t{font-weight:600;}
.sup-doc{display:grid;grid-template-columns:1fr 104px 104px;align-items:center;padding:9px 14px 9px 40px;border-top:1px solid var(--border);background:var(--bg3);}
.sup-doc .t{font-size:12px;color:var(--txt);font-weight:500;line-height:1.35;}
.sup-doc .n{text-align:right;font-variant-numeric:tabular-nums;font-weight:500;font-size:12px;white-space:nowrap;}
.sup-doc .n.pay{color:var(--success);} .sup-doc .n.ship{color:var(--accent);} .sup-doc .n.neg{color:var(--danger);} .sup-doc .n.z{color:var(--muted);}
.sup-load{padding:12px 14px 12px 40px;color:var(--muted);font-size:12px;font-weight:600;border-top:1px solid var(--border);background:var(--bg3);}
.sup-empty{padding:34px 14px;text-align:center;color:var(--muted);font-weight:600;}

/* ===================== из report_credit.html ===================== */
.ct-deposits{margin-bottom:14px;}
.ct-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;}
.ct-dhead{display:flex;align-items:center;gap:10px;padding:13px 15px;cursor:pointer;}
.ct-dhead .ic{font-size:17px;color:var(--success);}
.ct-dhead .ttl{font-weight:700;font-size:14px;color:var(--txt);}
.ct-dhead .sum{margin-left:auto;font-weight:700;font-size:15px;color:var(--success);font-variant-numeric:tabular-nums;}
.ct-dhead .chev{font-size:13px;color:var(--muted);transition:transform .15s;}
.ct-dhead.open .chev{transform:rotate(180deg);}
.ct-dep-item{border-top:1px solid var(--border);}
.ct-dep-row{display:flex;align-items:center;gap:8px;padding:11px 15px;cursor:pointer;}
.ct-dep-row .nm{font-weight:600;font-size:13px;color:var(--txt);}
.ct-dep-row .nm small{display:block;font-weight:500;color:var(--muted);font-size:11px;margin-top:1px;}
.ct-dep-row .bal{margin-left:auto;font-weight:700;font-size:14px;color:var(--success);font-variant-numeric:tabular-nums;}
.ct-dep-row .chev{font-size:12px;color:var(--muted);}
.ct-dep-row.open .chev{transform:rotate(180deg);}
.ct-oprow{display:flex;align-items:center;justify-content:space-between;padding:8px 15px;border-top:1px solid var(--border);font-size:12px;}
.ct-oprow .dt{color:var(--muted);font-variant-numeric:tabular-nums;}
.ct-oprow .vv{text-align:right;font-variant-numeric:tabular-nums;}
.ct-oprow .vv small{display:block;color:var(--muted);font-size:10px;margin-top:1px;}

.ct-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:14px;}
.ct-sum{border-radius:var(--radius);padding:13px 15px;border:1px solid var(--border);background:var(--bg2);}
.ct-sum.alert{background:var(--acc-s);border-color:var(--danger);}
.ct-sum .lbl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:3px;}
.ct-sum.alert .lbl{color:var(--danger);}
.ct-sum .val{font-size:19px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em;line-height:1.15;color:var(--danger);}
.ct-sum .dt{font-size:11px;font-weight:600;color:var(--danger);margin-top:2px;}

.ct-chips{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:10px;}
.ct-chip{border:1px solid var(--border);background:var(--bg2);color:var(--muted);border-radius:999px;padding:6px 13px;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;}
.ct-chip.on{background:var(--txt);color:var(--bg2);border-color:var(--txt);}

.ct-toggle{display:flex;gap:5px;background:var(--bg);border:1px solid var(--border);padding:4px;border-radius:var(--radius-s);margin-bottom:14px;}
.ct-toggle button{flex:1;border:none;background:transparent;color:var(--muted);border-radius:6px;padding:8px 4px;font-size:12px;font-weight:600;font-family:var(--font);cursor:pointer;}
.ct-toggle button.on{background:var(--bg2);color:var(--txt);}

.ct-grp{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:10px;}
.ct-ghead{display:flex;align-items:center;justify-content:space-between;padding:12px 15px;cursor:pointer;}
.ct-ghead .nm{font-weight:700;font-size:14px;color:var(--txt);}
.ct-ghead .nm small{display:block;font-weight:500;color:var(--muted);font-size:11px;margin-top:1px;}
.ct-ghead .out{font-weight:700;font-size:14px;color:var(--danger);font-variant-numeric:tabular-nums;}
.ct-ghead .chev{font-size:13px;color:var(--muted);margin-left:8px;}
.ct-ghead.open .chev{transform:rotate(180deg);}
.ct-subhead{display:flex;justify-content:space-between;padding:6px 15px;background:var(--bg);border-top:1px solid var(--border);font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;}
.ct-ops-head{display:grid;grid-template-columns:1fr 92px 92px;gap:6px;padding:6px 15px;background:var(--bg);border-top:1px solid var(--border);font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;}
.ct-ops-head span:nth-child(2),.ct-ops-head span:nth-child(3){text-align:right;}
.ct-ops-row{display:grid;grid-template-columns:1fr 92px 92px;gap:6px;padding:9px 15px;border-top:1px solid var(--border);align-items:baseline;}
.ct-ops-row .dt{font-size:13px;font-weight:600;color:var(--txt);font-variant-numeric:tabular-nums;}
.ct-ops-row .ob{font-size:10px;color:var(--muted);margin-top:1px;}
.ct-ops-row .cdraw,.ct-ops-row .crepay{text-align:right;font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap;}
.ct-ops-row .dash{color:var(--muted);}
.ct-tag{display:inline-block;font-size:10px;font-weight:700;color:var(--accent);background:var(--acc-s);border-radius:5px;padding:1px 6px;margin-right:6px;font-variant-numeric:tabular-nums;}
.ct-row{display:flex;align-items:center;justify-content:space-between;padding:9px 15px;border-top:1px solid var(--border);}
.ct-row .left .d1{font-size:13px;font-weight:600;color:var(--txt);font-variant-numeric:tabular-nums;}
.ct-row .left .d2{font-size:11px;color:var(--muted);margin-top:1px;}
.ct-row .right{display:flex;align-items:center;gap:8px;}
.ct-row .amt{font-size:13px;font-variant-numeric:tabular-nums;}
.ct-bdg{font-size:10px;padding:2px 8px;border-radius:999px;font-weight:700;white-space:nowrap;}
.ct-neg{color:var(--danger);}
.ct-pos{color:var(--success);}
.ct-empty{padding:24px;text-align:center;color:var(--muted);font-size:13px;}

/* ===================== из report_daily.html ===================== */
.date-nav{display:flex;align-items:center;gap:8px;margin-bottom:14px;flex-wrap:wrap;}
.date-nav .btn-icon{width:38px;height:38px;font-size:15px;}
.date-label{flex:1;min-width:160px;text-align:center;font-weight:700;font-size:15px;color:var(--txt);background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-s);padding:9px 12px;}
.date-pick{padding:8px 10px;font-size:13px;font-family:var(--font);border:1px solid var(--border);background:var(--bg);color:var(--txt);border-radius:var(--radius-s);}
.mgr-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--acc-s);border:1px solid var(--accent);border-radius:var(--radius-s);padding:8px 12px;margin-bottom:12px;font-size:13px;color:var(--accent);font-weight:600;}
.mgr-bar .btn-ghost{padding:5px 12px;font-size:12px;}
.totals-bar{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px;}
.total-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;}
.total-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:2px;}
.total-value{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em;line-height:1.2;}
.hier-row{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
/* фикс сетки фильтров (глобальный auto-fit,minmax(0,1fr) схлопывается в Safari) */
.filters-bar{grid-template-columns:repeat(2,minmax(0,1fr))!important;}
@media(min-width:600px){.filters-bar{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))!important;}}
.data-table th.col-num{width:120px;text-align:right;}
.data-table td.col-name{white-space:normal;word-break:break-word;overflow-wrap:break-word;line-height:1.4;}
.data-table td.col-num{text-align:right;font-variant-numeric:tabular-nums;font-weight:500;white-space:nowrap;}
.row-l2 td{font-weight:600;color:var(--txt);}
.neg{color:var(--danger)!important;font-weight:600;}
.indent-1{padding-left:20px!important;}
.indent-2{padding-left:38px!important;}
.indent-3{padding-left:56px!important;}
@media(max-width:599px){
  .data-table th.col-num,.data-table td.col-num{width:84px;}
  .data-table td{padding:8px;font-size:12px;}
  .data-table th{padding:8px;}
  .indent-1{padding-left:12px!important;}
  .indent-2{padding-left:24px!important;}
  .indent-3{padding-left:36px!important;}
  .date-label{font-size:13px;min-width:120px;}
}
.rolechk { display:inline-flex; align-items:center; gap:5px; margin-right:10px; font-size:13px; color:var(--txt2); }
.hours-chips { display:flex; gap:8px; flex-wrap:wrap; }
.hour-chip { display:inline-flex; align-items:center; gap:6px; padding:7px 12px;
             border-radius:20px; background:var(--acc-s); color:var(--accent);
             font-size:13px; font-weight:600; }
.hour-chip button { border:0; background:none; color:inherit; cursor:pointer; font-size:13px; padding:0; }
.hours-empty { color:var(--muted); font-size:13px; }
.danger-card { border-color:var(--danger); }

/* Карточка «Отчёт за день» на главной: перелистывание дня стрелками. */
.day-nav { display:flex; align-items:center; gap:10px; margin:10px 0 4px; }
.day-nav .btn-icon { width:34px; height:34px; font-size:14px; }
.day-nav .btn-icon[aria-disabled] { opacity:.35; }
.day-label { flex:1; text-align:center; font-size:14px; font-weight:700; color:var(--txt); }
.daily-card { cursor:default; }
.daily-card:hover { transform:none; border-color:var(--border); }

/* Растягивание переключателя иерархии — только в панели универсального отчёта.
   В «Отчёте за день» переключатели стоят в колонке, и общее правило растягивало
   их по высоте на весь экран. */
.report-toolbar .hierarchy-toggle { flex:1 1 260px; }
.hier-row .hierarchy-toggle { flex:0 0 auto; }

/* Выход — только на главной, в подвале, неприметной ссылкой. */
.logout-link { color:var(--muted); text-decoration:underline; }
.logout-link:hover { color:var(--danger); }
/* Кнопка «назад» — такая же, как остальные в шапке. */
.header-actions .btn-icon[aria-label="Назад"] { width:48px; height:48px; font-size:24px; font-weight:600; }

/* ── админка: элементы, которых не было в прежнем CSS ── */
.order-list { display:flex; flex-direction:column; gap:8px; }
.order-item { cursor:grab; user-select:none; }
.order-item.dragging { opacity:.45; }
.order-item.over { border-color:var(--accent); }
.drag-handle { color:var(--muted); font-size:18px; cursor:grab; touch-action:none; padding:4px 6px; margin:-4px -6px; }
/* Разделы в списке порядка: пустой раздел держит высоту, чтобы в него можно было бросить отчёт. */
.order-group { margin-bottom:14px; }
.order-group-h { font-size:12px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--txt2); margin:0 0 8px 2px; }
.order-group .order-list { min-height:52px; border:1px dashed transparent; border-radius:var(--radius); }
.ordering .order-group .order-list { border-color:var(--border); }
.ordering { user-select:none; -webkit-user-select:none; }
.section-row { display:flex; flex-wrap:wrap; align-items:center; gap:10px; }
.section-move { display:flex; gap:4px; }
.section-edit { display:flex; flex:1; align-items:center; gap:10px; min-width:220px; }
.section-edit .form-input { flex:1; min-width:120px; }
.section-check { display:inline-flex; align-items:center; gap:6px; white-space:nowrap; }
.section-add { display:flex; flex-wrap:wrap; align-items:center; gap:10px; margin-top:8px; }
.section-add .form-input { flex:1; min-width:180px; }
.access-row { flex-wrap:wrap; gap:10px; }
.role-chip { display:inline-flex; align-items:center; gap:6px; padding:6px 12px; border-radius:16px;
             border:1px solid var(--border); background:var(--bg); color:var(--txt2);
             font-size:12.5px; font-weight:600; cursor:pointer; }
.role-chip.on, .role-chip:has(input:checked) { background:var(--acc-s); border-color:var(--accent); color:var(--accent); }
.role-chip.fixed { opacity:.65; cursor:default; }
.role-chip input { margin:0; }
.tg-count { display:inline-block; min-width:20px; padding:1px 7px; border-radius:10px;
            background:var(--accent); color:#fff; font-size:12px; font-weight:700; }
.row-off { opacity:.5; }
.tg-input { width:130px; padding:6px 9px; font-size:13px; font-family:var(--font);
            border:1px solid var(--border); border-radius:var(--radius-s);
            background:var(--bg); color:var(--txt); }
.icon-btn { width:34px; height:34px; border-radius:var(--radius-s); border:1px solid var(--border);
            background:var(--bg2); cursor:pointer; font-size:15px; }
.icon-btn:hover { border-color:var(--accent); }

/* журнал входов */
.login-det > summary { list-style:none; cursor:pointer; display:flex; flex-direction:column; gap:2px; }
.login-det > summary::-webkit-details-marker { display:none; }
.login-det > summary::before { content:'▸'; color:var(--accent); margin-right:6px; }
.login-det[open] > summary::before { content:'▾'; }
.login-name { font-weight:600; }
.login-mail { font-size:12px; color:var(--muted); }
.login-events { margin-top:10px; padding:12px; background:var(--bg3); border-radius:var(--radius-s); }
.login-events-head { font-size:11px; font-weight:700; text-transform:uppercase;
                     letter-spacing:.05em; color:var(--muted); margin-bottom:8px; }
.login-event { display:flex; align-items:center; justify-content:space-between; gap:12px;
               padding:7px 10px; border-radius:var(--radius-s); background:var(--bg2); margin-bottom:5px;
               font-size:13px; font-variant-numeric:tabular-nums; }
.ev-badge { font-size:11px; font-weight:700; padding:2px 9px; border-radius:10px;
            background:var(--bg3); color:var(--muted); }
.ev-badge.ev-login { background:var(--acc-s); color:var(--accent); }

/* журнал синхронизаций */
.jsum-item { background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius-s);
             padding:10px 12px; }
.jsum-name { font-size:12px; color:var(--muted); }
.jsum-val { font-weight:700; font-size:15px; }

/* Кнопки действий в таблице — в строку, а не столбиком. */
td.actions { display:flex; flex-direction:row; align-items:center; gap:6px; flex-wrap:nowrap; }
.users-table td.actions { justify-content:flex-end; }
.tabs .tab { display:inline-flex; align-items:center; gap:6px; }

/* Немного больше воздуха между карточками, чем в прежней версии:
   на широком экране они стояли слишком плотно. */
.reports-grid { gap:18px; }
@media (max-width:600px) { .reports-grid { gap:14px; } }

/*
 * Шторка «на экран Домой» должна быть непрозрачной. В стеклянных темах
 * переменная --bg2 полупрозрачная, и сквозь панель просвечивал текст страницы.
 * Здесь берём сплошной цвет и подкладываем размытие фона.
 */
.a2hs-sheet {
  background: var(--bg) !important;
  -webkit-backdrop-filter: none; backdrop-filter: none;
  box-shadow: 0 -12px 40px rgba(0,0,0,.45);
}
[data-theme="light"] .a2hs-sheet, [data-theme="glass-light"] .a2hs-sheet { background: #FFFFFF !important; }
[data-theme="dark"] .a2hs-sheet, [data-theme="glass-dark"] .a2hs-sheet { background: #201C17 !important; }
.a2hs-overlay { background: rgba(0,0,0,.55) !important; -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); }
.a2hs-note, .a2hs-step { background-color: transparent; }

/* Предложение настроить ПИН и Face ID — показывается, пока они не заданы. */
.setup-banner { display:flex; align-items:center; gap:14px; padding:16px 18px; margin-bottom:18px;
                background:var(--acc-s); border:1px solid var(--accent); border-radius:var(--radius);
                color:var(--txt); }
.setup-ic { font-size:22px; }
.setup-txt { display:flex; flex-direction:column; gap:2px; flex:1; min-width:0; }
.setup-txt b { font-size:15px; }
.setup-txt small { font-size:12.5px; color:var(--txt2); }
.setup-arrow { color:var(--accent); font-size:18px; font-weight:700; }

.setup-banner .btn-accent { padding:9px 16px; font-size:14px; text-decoration:none;
                            display:inline-flex; align-items:center; }
.quick-hint { margin-top:auto; padding:18px 0 0; text-align:center; }
.quick-hint a { font-size:12px; color:var(--muted); text-decoration:underline; }
.quick-hint a:hover { color:var(--accent); }
@media (max-width:600px) { .setup-banner { flex-wrap:wrap; } .setup-banner .setup-txt { flex:1 1 100%; } }

/* Аварийная карточка — заметно опаснее обычной. */
.panic-card { border-color:var(--danger); border-width:2px; }
.panic-card h4 { color:var(--danger); }
.panic-card .form-input { border-color:var(--danger); }

/* Карточка «Отчёт за день» на главной кликабельна целиком: растянутая ссылка
   покрывает весь блок и открывает отчёт, а стрелки лежат поверх неё и листают дни. */
.daily-card { position:relative; }
.daily-card .card-open { position:absolute; inset:0; z-index:1; border-radius:inherit; }
.daily-card .report-head,
.daily-card .report-description,
.daily-card .quick-stats,
.daily-card .sync-status { position:relative; z-index:0; pointer-events:none; }
.daily-card .day-nav { position:relative; z-index:2; pointer-events:none; }
.daily-card .nav-arrow { position:relative; z-index:2; pointer-events:auto; }
.daily-card .day-label { position:relative; z-index:1; pointer-events:none; }
.daily-card:hover { border-color:var(--accent); }

/* Сброс / задание пароля: кнопка 🔑 в колонке «Пароль» открывает панель. */
.pass-cell { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.pass-menu[open] { flex-basis:100%; }
.pass-menu > summary { display:inline-flex; cursor:pointer; list-style:none; width:30px; height:30px; font-size:13px; }
.pass-menu > summary::-webkit-details-marker { display:none; }
.pass-menu[open] > summary { border-color:var(--accent); background:var(--acc-s); }
.pass-pop { width:260px; margin-top:4px; white-space:normal;
            display:flex; flex-direction:column; gap:10px; padding:14px; background:var(--bg2);
            border:1px solid var(--border); border-radius:var(--radius); }
.pass-pop-title { font-weight:700; font-size:13px; word-break:break-all; }
.pass-pop .btn-accent, .pass-pop .btn-ghost { padding:7px 12px; font-size:13px; }
.pass-pop form .btn-ghost { width:100%; justify-content:center; }
.pass-pop .hint { margin:0; font-size:12px; }
.pass-set { display:flex; gap:6px; }
.pass-set .pass-input { flex:1; min-width:0; }
.pass-input { width:120px; padding:6px 9px; font-size:13px; font-family:var(--font);
              border:1px solid var(--border); border-radius:var(--radius-s);
              background:var(--bg); color:var(--txt); }

/* Рассылки — три карточки, как в прежней панели. */
.sched-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:12px; }
.sched-card { background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius); padding:16px; }
.sched-card h4 { margin:0 0 4px; font-size:15px; }
.sched-chk { display:inline-flex; align-items:center; gap:8px; margin:8px 0 12px; font-size:14px; color:var(--txt); }
.sched-card .form-group { margin-bottom:12px; }

/* Экран блокировки: Face ID — главная кнопка, ПИН/пароль — под спойлером. */
.login-btn.primary { background:var(--accent); color:#fff; border:none; }
.lock-alt { margin-top:14px; }
.lock-alt > summary { cursor:pointer; color:var(--muted); font-size:14px;
                      text-align:center; list-style:none; padding:8px; }
.lock-alt > summary::-webkit-details-marker { display:none; }
.lock-alt[open] > summary { color:var(--txt); }

/* Плашка подключения телеграма — в фирменном синеватом акценте, но мягко. */
.tg-banner { text-decoration:none; }

/* Живой баннер ручного обновления с крутящимся индикатором. */
.flash-live { display:flex; align-items:center; gap:10px; }
.flash-spin { width:16px; height:16px; flex-shrink:0; border-radius:50%;
  border:2px solid currentColor; border-top-color:transparent;
  animation:flash-spin .8s linear infinite; opacity:.8; }
@keyframes flash-spin { to { transform:rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .flash-spin { animation:none; } }
/* Полоса загрузки обновления: шаг 1С и статус почты и связей под ней. */
.flash-live:has(.refresh-bar) { flex-direction:column; align-items:stretch; gap:8px; }
.flash-row { display:flex; align-items:center; gap:10px; }
.refresh-bar { height:8px; border-radius:4px; overflow:hidden;
  background: rgba(0,0,0,.08); background: color-mix(in srgb, var(--accent) 16%, transparent); }
.refresh-bar[hidden] { display:none; }
.refresh-bar-fill { height:100%; width:0; border-radius:4px; background:var(--accent); transition:width .8s ease; }
.refresh-parts { display:flex; flex-wrap:wrap; gap:4px 14px; font-size:12px; font-weight:500; color:var(--txt2); }
.refresh-parts:empty { display:none; }
@media (prefers-reduced-motion: reduce) { .refresh-bar-fill { transition:none; } }

/* ── Отчёт по выпискам ВТБ ── */
.vtb-h { font-size:16px; font-weight:700; margin:0 0 12px; color:var(--txt1); }
.vtb-count { display:inline-block; font-size:13px; font-weight:600; color:var(--txt2);
  background:var(--bg2); border:1px solid var(--border); border-radius:10px; padding:1px 8px; margin-left:6px; }
.data-table td.r, .data-table th.r { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.data-table td.pos, .vtb-dir.pos { color:var(--success, #2e9d5b); }
.data-table td.neg, .vtb-dir.neg { color:var(--accent); }
.vtb-dir { font-weight:600; white-space:nowrap; }
.vtb-tag { display:inline-block; font-size:11px; font-weight:600; color:var(--txt2);
  background:var(--bg2); border:1px solid var(--border); border-radius:8px; padding:0 6px; margin-left:4px; }
.vtb-internal { opacity:.72; }
.vtb-purpose { max-width:340px; font-size:13px; color:var(--txt2); }
.vtb-chips { display:flex; gap:12px; flex-wrap:wrap; }
.muted { color:var(--txt2); }

/* ── Геолокация в админке ── */
#geomap { height: 460px; width: 100%; border-radius: 12px; overflow: hidden; margin-top: 12px; z-index: 0; }
.row-sel { background: var(--acc-s); }
.btn-ghost.on { color: var(--success, #2e9d5b); border-color: var(--success, #2e9d5b); }
.settings-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }

/* ═══════════════ Тема Apple (по мотивам apple-design / WWDC) ═══════════════
   Системный шрифт SF, системные серые фоны iOS, полупрозрачные материалы
   (blur+saturate через общую glass-машинерию), семантические цвета Apple,
   мгновенный отклик на нажатие, крупные «непрерывные» радиусы. Акцент —
   фирменный терракотовый Прадекса (айдентика), а не системный синий. */

[data-theme="apple-light"] {
  --bg:      #F2F2F7;                     /* systemGroupedBackground */
  --bg2:     rgba(255,255,255,.72);       /* приподнятый материал карточки */
  --bg3:     rgba(255,255,255,.55);
  --txt:     #1C1C1E;                     /* label */
  --txt2:    #3C3C43;                     /* secondaryLabel */
  --muted:   #8A8A8E;                     /* tertiaryLabel */
  --accent:  #C96442;
  --acc-h:   #B5583A;
  --acc-s:   rgba(201,100,66,.12);
  --success: #34C759;                     /* systemGreen */
  --danger:  #FF3B30;                     /* systemRed */
  --border:  rgba(60,60,67,.14);          /* separator */
  --shadow:  rgba(0,0,0,.10);
  --font:    -apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, 'Segoe UI', Roboto, sans-serif;
  --radius:  18px;
  --radius-s:12px;
  --blur:    20px;
  --sat:     180%;
  --s-hi:    rgba(255,255,255,.90);        /* «световой» верхний край материала */
  --divider: rgba(60,60,67,.14);
  --active-bg: var(--accent);
  --active-fg: #fff;
  --active-bd: var(--accent);
  --active-sh: 0 4px 14px rgba(201,100,66,.26);
  color-scheme: light;
}

[data-theme="apple-dark"] {
  --bg:      #000000;                     /* истинно чёрный (OLED) */
  --bg2:     rgba(28,28,30,.72);          /* systemGray6, приподнятый */
  --bg3:     rgba(44,44,46,.60);
  --txt:     #FFFFFF;
  --txt2:    rgba(235,235,245,.78);        /* secondaryLabel */
  --muted:   rgba(235,235,245,.45);        /* tertiaryLabel */
  --accent:  #E98A66;
  --acc-h:   #E07856;
  --acc-s:   rgba(233,138,102,.18);
  --success: #30D158;                     /* systemGreen dark */
  --danger:  #FF453A;                     /* systemRed dark */
  --border:  rgba(84,84,88,.50);          /* separator dark */
  --shadow:  rgba(0,0,0,.50);
  --font:    -apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, 'Segoe UI', Roboto, sans-serif;
  --radius:  18px;
  --radius-s:12px;
  --blur:    22px;
  --sat:     170%;
  --s-hi:    rgba(255,255,255,.10);
  --divider: rgba(84,84,88,.42);
  --active-bg: var(--accent);
  --active-fg: #1C1C1E;
  --active-bd: var(--accent);
  --active-sh: 0 6px 18px rgba(0,0,0,.50);
  color-scheme: dark;
}

/* Типографика Apple: крупные заголовки — плотнее трекинг и леадинг. */
:is([data-theme^="apple"]) .brand-title,
:is([data-theme^="apple"]) .report-title,
:is([data-theme^="apple"]) h1,
:is([data-theme^="apple"]) h2 {
  letter-spacing: -0.021em;
  line-height: 1.1;
}
:is([data-theme^="apple"]) .brand-badge,
:is([data-theme^="apple"]) .qs-label {
  letter-spacing: 0.01em;               /* мелкие подписи — чуть свободнее */
}

/* Отклик на нажатие — мгновенный, как в iOS (respond on press). */
:is([data-theme^="apple"]) .btn-icon,
:is([data-theme^="apple"]) .btn-ghost,
:is([data-theme^="apple"]) .report-card,
:is([data-theme^="apple"]) .hier-btn,
:is([data-theme^="apple"]) .tab,
:is([data-theme^="apple"]) .theme-opt {
  transition: transform .12s ease-out, background .15s, border-color .15s, box-shadow .15s;
}
:is([data-theme^="apple"]) .btn-icon:active,
:is([data-theme^="apple"]) .btn-ghost:active,
:is([data-theme^="apple"]) .report-card:active,
:is([data-theme^="apple"]) .hier-btn:active {
  transform: scale(0.97);
}

/* Reduced transparency: материалы становятся плотными, blur убираем. */
@media (prefers-reduced-transparency: reduce) {
  [data-theme="apple-light"] { --bg2: #FFFFFF; --bg3: #F2F2F7; --blur: 0px; }
  [data-theme="apple-dark"]  { --bg2: #1C1C1E; --bg3: #2C2C2E; --blur: 0px; }
}
/* Меньше движения — гасим масштабирование при нажатии. */
@media (prefers-reduced-motion: reduce) {
  :is([data-theme^="apple"]) .btn-icon:active,
  :is([data-theme^="apple"]) .btn-ghost:active,
  :is([data-theme^="apple"]) .report-card:active,
  :is([data-theme^="apple"]) .hier-btn:active { transform: none; }
}

/* Лист «на экран Домой» под тему. */
[data-theme="apple-light"] .a2hs-sheet { background: rgba(255,255,255,.92) !important; }
[data-theme="apple-dark"]  .a2hs-sheet { background: rgba(28,28,30,.92) !important; }

/* ── Сгруппированный выбор тем (Классика / Стекло / Apple) ── */
.theme-pop.theme-groups { width: 250px; display: none; }
.theme-pop.theme-groups.open { display: block; }
.theme-pop-title { font-weight: 700; font-size: 12px; letter-spacing: .04em;
  text-transform: uppercase; color: var(--muted); padding: 4px 8px 8px; }
.theme-grp { display: flex; align-items: center; justify-content: space-between;
  gap: 10px; padding: 7px 8px; border-radius: var(--radius-s); }
.theme-grp-name { font-size: 14px; color: var(--txt); }
.theme-grp-opts { display: inline-flex; gap: 4px; }
.theme-mini { min-width: 30px; padding: 5px 9px; text-align: center; font-size: 13px;
  border-radius: var(--radius-s); border: 1px solid var(--border); color: var(--txt2);
  background: var(--bg3); white-space: nowrap; }
.theme-mini:hover { color: var(--txt); }
.theme-mini.active { background: var(--acc-s); border-color: var(--accent); color: var(--accent); font-weight: 600; }
.theme-pop-hint { font-size: 11px; color: var(--muted); padding: 8px 8px 2px; }
:is([data-theme^="apple"]) .theme-mini { transition: transform .12s ease-out, background .15s, border-color .15s; }
:is([data-theme^="apple"]) .theme-mini:active { transform: scale(0.94); }

/* Баннер-предупреждение (протухшие данные / сбой 1С). */
.flash-warn { background: rgba(181,72,72,.12); background: color-mix(in srgb, var(--danger) 14%, var(--bg2));
  border: 1px solid rgba(181,72,72,.45); border-color: color-mix(in srgb, var(--danger) 45%, transparent);
  color: var(--txt); }

/* Ссылка «Запросить доступ» под формой входа. */
.login-register { display:block; text-align:center; margin-top:14px; font-size:14px;
  color:var(--accent); font-weight:600; }
.login-register:hover { text-decoration:underline; }

/* Приглушённый индикатор «отгрузки сегодня» на карточке дня. */
.qs-today { margin: 0 0 8px; font-size: 12.5px; color: var(--muted); }

/* Общая метка «обновлено» над сеткой отчётов. */
.global-sync { display:inline-flex; align-items:center; gap:8px; margin:0 0 16px;
  font-size:13px; color:var(--txt2); font-weight:500; }
.global-sync .gs-dot { width:8px; height:8px; border-radius:50%; background:var(--success); flex-shrink:0; }
.global-sync.stale .gs-dot, .global-sync.error .gs-dot { background:var(--danger); }
.global-sync.unknown .gs-dot { background:var(--muted); }

/* Редактор названий/описаний отчётов в админке. */
.rmeta-row { display:flex; align-items:center; gap:12px; padding:8px 0; }
.rmeta-ic { font-size:22px; width:28px; text-align:center; flex-shrink:0; }
.rmeta-ic-input { width:56px !important; flex:0 0 56px; text-align:center; font-size:20px; padding:6px 4px; }
.rmeta-fields { display:flex; gap:8px; flex:1; flex-wrap:wrap; }
.rmeta-fields .form-input:first-child { flex:0 0 220px; }
.rmeta-fields .form-input:last-child { flex:1; min-width:220px; }

/* Широкая таблица пользователей — горизонтальная прокрутка внутри карточки,
   чтобы не вылезала за края. */
.table-scroll { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.table-scroll .users-table { min-width: 900px; }
.users-table select { max-width: 160px; }
@media (max-width: 768px) {
  .table-scroll { overflow-x: visible; }        /* на мобиле — блочная раскладка строк */
  .table-scroll .users-table { min-width: 0; }
}

/* Push-уведомления: карточка настроек. */
.notif-row { display:flex; align-items:flex-start; gap:10px; padding:8px 0; cursor:pointer; }
.notif-row input[type=checkbox] { margin-top:3px; width:18px; height:18px; flex-shrink:0; }
#pushToggle.on { background:var(--success); border-color:var(--success); color:#fff; }

/* Зал ожидания (после заявки на регистрацию). */
.wait-status { display:flex; align-items:center; justify-content:center; gap:8px;
  font-size:14px; color:var(--txt2); font-weight:600; margin:10px 0 4px; }
.wait-status.ok { color:var(--success); }
.wait-dot { width:9px; height:9px; border-radius:50%; background:var(--accent);
  animation:wait-pulse 1.4s ease-in-out infinite; flex-shrink:0; }
@keyframes wait-pulse { 0%,100%{opacity:.35} 50%{opacity:1} }
.wait-ios { text-align:left; background:var(--bg3); border:1px solid var(--border);
  border-radius:var(--radius-s); padding:14px 16px; margin-top:6px; font-size:14px; }
.wait-ios ol { margin:8px 0 0 18px; padding:0; }
.wait-ios li { margin:7px 0; }

/* Строка редактирования внешней ссылки: иконка узкая, поля не сжимаются. */
.link-row { display:flex; flex-wrap:wrap; align-items:center; gap:8px; padding:14px;
  border:1px solid var(--border); border-radius:var(--radius); background:var(--bg2); margin-bottom:10px; }
.link-row .link-icon  { flex:0 0 56px; text-align:center; }
.link-row .link-title { flex:2 1 180px; }
.link-row .link-url   { flex:3 1 240px; }
.link-row .role-chips { flex-basis:100%; margin:2px 0; }
.link-row .link-actions { display:flex; gap:8px; flex:1 1 auto; }

/* График погашения кредитов: помесячные заголовки-группы. */
.ct-mhead{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:11px 15px;border-top:1px solid var(--border);cursor:pointer;
  background:var(--bg3);}
.ct-mhead:first-of-type{border-top:none;}
.ct-mname{font-weight:700;font-size:13.5px;color:var(--txt);display:flex;align-items:center;gap:7px;}
.ct-mcaret{display:inline-block;color:var(--muted);font-size:11px;transition:transform .15s;}
.ct-mhead.open .ct-mcaret{transform:rotate(90deg);}
.ct-mcount{font-weight:600;font-size:11px;color:var(--muted);background:var(--bg);
  border:1px solid var(--border);border-radius:20px;padding:1px 7px;}
.ct-msum{font-weight:700;font-size:14px;font-variant-numeric:tabular-nums;}

/* Сверка веток: расхождение в плюс (в OData больше, чем в почте). */
.diff-plus { color: var(--success); font-weight: 600; }

/* Карточка дня во время подгрузки: цифры гаснут, размеры не прыгают. */
.daily-card.is-loading .quick-stats { opacity: .45; transition: opacity .12s ease; }

/* ── Продажи радиаторов (OData) ─────────────────────────────────────────── */
.rad-tb{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:12px;margin-bottom:12px;display:flex;flex-direction:column;gap:10px;}
.rad-row{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;}
.rad-row .rad-unit{flex:0 1 240px;}
.rad-row .rad-hier{flex:1 1 260px;min-width:0;}
.rad-filters summary{cursor:pointer;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:4px 0;}
.rad-opts{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:center;padding:10px 0;border-top:1px solid var(--border);margin-top:6px;}
.rad-opts .rad-sort{flex:0 1 260px;}
.rad-check{display:flex;gap:9px;align-items:flex-start;cursor:pointer;font-size:14px;font-weight:600;color:var(--txt);}
.rad-check input{width:18px;height:18px;margin:1px 0 0;accent-color:var(--accent);flex:none;}
.rad-check small{display:block;font-size:11px;font-weight:400;color:var(--muted);margin-top:2px;}
.rad-group{display:flex;gap:10px;align-items:flex-start;padding:7px 0;border-top:1px solid var(--border);}
.rad-glabel{flex:0 0 110px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding-top:7px;}
.rad-chips{display:flex;flex-wrap:wrap;gap:6px;min-width:0;}
.filter-chip.rad-dim{opacity:.4;}
.rad-search{flex:1 1 240px;min-width:0;max-width:420px;padding:6px 12px;border:1px solid var(--border);border-radius:16px;background:var(--bg);color:var(--txt);font-family:var(--font);font-size:13px;}
.rad-search:focus{outline:none;border-color:var(--accent);}
.rad-actions{display:flex;justify-content:flex-end;padding-top:8px;border-top:1px solid var(--border);}
.rad-pbox{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px;}
.rad-hint{margin:0;font-size:12px;color:var(--muted);line-height:1.4;}
.rad-hint:empty{display:none;}
.rad-mode{align-self:flex-start;max-width:100%;}
.rad-mode button{white-space:nowrap;}
.rad-padd{display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
.rad-padd select{padding:6px 10px;border:1px solid var(--border);border-radius:16px;background:var(--bg);color:var(--txt);font-family:var(--font);font-size:13px;}
.rad-pj{margin-left:6px;cursor:help;font-size:12px;}
.rad-tiles{margin-bottom:12px;}
.rad-tiles .tile{display:flex;flex-direction:column;gap:4px;}
.rad-delta{font-size:12px;font-weight:700;}
.rad-delta.up{color:var(--success);} .rad-delta.down{color:var(--danger);}
.rad-part{font-size:9px;padding:1px 6px;border:1px solid var(--border);border-radius:8px;margin-left:4px;}
.rad-tree{display:flex;gap:8px;margin-bottom:10px;}
.rad-wrap{overflow-x:auto;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);-webkit-overflow-scrolling:touch;}
.rad-table{width:100%;border-collapse:separate;border-spacing:0;font-size:13px;font-variant-numeric:tabular-nums;}
.rad-table th{background:var(--bg2);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:10px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;}
.rad-table td{padding:8px 10px;border-bottom:1px solid var(--border);white-space:nowrap;background:var(--bg2);}
.rad-table .rad-num{text-align:right;}
.rad-table th.rad-sortable{cursor:pointer;user-select:none;-webkit-user-select:none;}
.rad-table th.rad-sortable:hover{color:var(--accent);}
.rad-table th.rad-sorted{color:var(--accent);}
/* Колонка названий закреплена: при прокрутке вбок уезжают только цифры.
   Ячейка остаётся table-cell — display:flex на td ломает sticky. */
.rad-table .rad-name{position:sticky;left:0;z-index:2;min-width:200px;box-shadow:1px 0 0 var(--border);background:var(--rad-solid,var(--bg2));}
/* У стеклянных тем фон полупрозрачный — сквозь закреплённую колонку просвечивали бы цифры. */
[data-theme="glass-light"] .rad-table{--rad-solid:#F8F3EE;}
[data-theme="glass-dark"] .rad-table{--rad-solid:#2A231D;}
.rad-table th.rad-name{z-index:3;}
.rad-cell{display:flex;align-items:center;gap:6px;padding-left:calc(var(--d,0) * 16px);}
.rad-lbl{min-width:0;white-space:normal;max-width:380px;}
.rad-table tr.rad-br{cursor:pointer;}
.rad-table tr.rad-br:hover td{background:var(--bg3);}
.rad-table tr.lvl0 td{font-weight:700;}
.rad-table tr.lvl2 td,.rad-table tr.lvl3 td{color:var(--txt2);}
.rad-table tr.rad-left .rad-lbl{font-style:italic;}
.rad-table td.z{color:var(--muted);}
.rad-table td.neg{color:var(--danger);}
.rad-table .rad-tot{font-weight:700;}
.rad-table .rad-share{position:relative;min-width:70px;}
.rad-bar{position:absolute;left:10px;bottom:3px;height:3px;background:var(--accent);opacity:.45;border-radius:2px;max-width:calc(100% - 20px);}
.rad-table tfoot td{font-weight:800;border-bottom:0;border-top:2px solid var(--border);}
.rad-note{margin-top:10px;line-height:1.5;}
@media (max-width:600px){
  .rad-group{flex-direction:column;gap:4px;}
  .rad-glabel{flex:none;padding-top:0;}
  .rad-row .rad-unit,.rad-opts .rad-sort{flex:1 1 100%;}
  .rad-table{font-size:11.5px;}
  .rad-table th{font-size:9px;padding:8px 6px;}
  .rad-table td{padding:7px 6px;}
  /* Названия переносятся, а не растягивают колонку: так цифрам остаётся место. */
  .rad-table .rad-name{min-width:0;width:38vw;max-width:150px;}
  .rad-table td.rad-name{white-space:normal;line-height:1.25;}
  .rad-table th.rad-name{white-space:normal;}
  .rad-cell{gap:3px;padding-left:calc(var(--d,0) * 7px);}
  .rad-table .rad-share{min-width:48px;}
  .rad-bar{left:6px;max-width:calc(100% - 12px);}
}

/* Бонусы агентов (OData): ссылка на карточку заказа в строке группы и документа */
.bn-open-order{margin-left:8px;font-size:12px;font-weight:600;color:var(--accent);text-decoration:none;white-space:nowrap;}
.bn-real a{color:var(--accent);text-decoration:none;}

/* ===================== Готовность заказов к отгрузке ===================== */
.rd-row{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;}
.rd-row .rd-person{flex:1 1 280px;min-width:0;}
.rd-row .rd-search{flex:2 1 320px;min-width:0;}
.rd-fld label{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700;margin-bottom:5px;}
.rd-fld select,.rd-fld input{width:100%;height:46px;border:1px solid var(--border);border-radius:var(--radius-s);background:var(--bg);padding:0 12px;font-family:var(--font);font-size:14px;color:var(--txt);min-width:0;}
.rd-fld input:focus,.rd-fld select:focus{outline:none;border-color:var(--accent);}
.rd-inline{display:flex;gap:6px;}
.rd-inline select{flex:1;}
.rd-inline .btn-ghost{height:46px;flex:none;}
.rd-all[disabled]{opacity:.4;cursor:default;}
.rd-roles button{font-size:12px;}
.rd-roles.rd-off{opacity:.45;pointer-events:none;}
.rd-range{padding:4px 2px 0;}
.rd-range-head{display:flex;justify-content:space-between;align-items:baseline;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);}
.rd-range-head b{font-size:15px;color:var(--accent);text-transform:none;letter-spacing:0;}
/* Два ползунка на одной дорожке: сами дорожки прозрачны и не ловят нажатия,
   нажимаются только бегунки. */
.rd-slider{position:relative;height:36px;}
.rd-track{position:absolute;left:11px;right:11px;top:16px;height:4px;border-radius:2px;background:var(--border);}
.rd-fill{position:absolute;top:0;height:100%;background:var(--accent);border-radius:2px;}
.rd-slider input[type=range]{position:absolute;left:0;top:6px;width:100%;height:24px;margin:0;background:transparent;pointer-events:none;-webkit-appearance:none;appearance:none;}
.rd-slider input[type=range]::-webkit-slider-runnable-track{background:transparent;border:0;height:24px;}
.rd-slider input[type=range]::-moz-range-track{background:transparent;border:0;}
.rd-slider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;pointer-events:auto;width:22px;height:22px;border-radius:50%;background:var(--bg2);border:2px solid var(--accent);box-shadow:0 1px 4px rgba(0,0,0,.25);cursor:pointer;margin-top:1px;}
.rd-slider input[type=range]::-moz-range-thumb{pointer-events:auto;width:18px;height:18px;border-radius:50%;background:var(--bg2);border:2px solid var(--accent);cursor:pointer;}
.rd-presets{display:flex;flex-wrap:wrap;gap:6px;}
.rd-st{padding:8px 0 2px;}
.rd-foot{justify-content:space-between;border-top:1px solid var(--border);padding-top:10px;}
.rd-foot .rd-sortm{flex:0 1 300px;}
.rd-tiles .tile{display:flex;flex-direction:column;gap:4px;}
.rd-sub{font-size:11px;color:var(--muted);}
.rd-wrap{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);overflow-x:auto;-webkit-overflow-scrolling:touch;}
.rd-table{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums;}
.rd-table th{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:10px 8px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;cursor:pointer;user-select:none;-webkit-user-select:none;}
.rd-table th.right{text-align:right;}
.rd-table th:hover,.rd-table th.rad-sorted{color:var(--accent);}
.rd-table td{padding:8px;border-bottom:1px solid var(--border);vertical-align:top;}
.rd-table td.right{text-align:right;}
.rd-table td small{display:block;font-size:11px;color:var(--muted);margin-top:2px;}
.rd-table tr.rd-r{cursor:pointer;}
.rd-table tr.rd-r:hover td{background:var(--bg3);}
.rd-table a{color:var(--accent);text-decoration:none;}
.rd-c-client,.rd-c-object{min-width:160px;max-width:280px;}
.rd-c-people{min-width:110px;max-width:180px;}
.rd-pct{display:flex;flex-direction:column;align-items:flex-end;gap:3px;min-width:84px;}
.rd-pct b{font-size:13px;}
.rd-bar{display:block;width:100%;max-width:90px;height:5px;border-radius:3px;background:var(--border);overflow:hidden;}
.rd-bar i{display:block;height:100%;border-radius:3px;background:var(--muted);}
.rd-pct.full b{color:var(--success);} .rd-pct.full i{background:var(--success);}
.rd-pct.high i{background:var(--success);opacity:.7;}
.rd-pct.mid i{background:var(--accent);}
.rd-pct.low b{color:var(--danger);} .rd-pct.low i{background:var(--danger);}
.rd-pct.ship i{background:var(--accent);opacity:.6;}
.rd-more{display:flex;justify-content:center;margin-top:10px;}
/* Сортировка списком нужна там, где нет заголовков, — на телефоне. */
@media (min-width:641px){ .rd-foot .rd-sortm{display:none;} .rd-foot{justify-content:flex-end;} }
@media (max-width:640px){
  .rd-wrap{background:transparent;border:0;overflow:visible;}
  .rd-table tr.rd-r{position:relative;}
  .rd-table td small{display:inline;margin:0 0 0 6px;}
  .rd-c-client,.rd-c-object{min-width:0;max-width:none;}
  .rd-pct{flex-direction:row-reverse;align-items:center;justify-content:flex-end;gap:8px;flex:1;}
  .rd-bar{max-width:none;flex:1;}
  .rd-roles{flex-wrap:wrap;}
  .rd-roles button{flex:1 1 100%;}
  .rd-foot .rd-sortm{flex:1 1 100%;}
}
.ex-name{font-size:12px;line-height:1.35;}
.rd-table tr.rd-warn td{background:rgba(181,72,72,.07);}
.rd-table tr.rd-warn td:first-child{box-shadow:inset 3px 0 0 var(--danger);}
.rd-flag{display:block;margin-top:4px;font-size:11px;font-weight:700;color:var(--danger);}
.rd-warn-t{color:var(--danger);font-weight:600;}
.rd-table small.rd-age{font-size:10.5px;white-space:nowrap;}
@media (max-width:640px){
  .rd-table tr.rd-warn{border-color:var(--danger);}
  .rd-table tr.rd-warn td{background:transparent;}
  .rd-table tr.rd-warn td:first-child{box-shadow:none;}
  .rd-table td small.rd-age{display:block;margin:2px 0 0;}
}
.rd-pct.pay i{background:var(--success);opacity:.75;}
.rd-paid{color:var(--txt2);font-size:12px;}
.rd-paid b{color:var(--success);}
.rd-range+.rd-range{border-top:1px solid var(--border);padding-top:10px;}
/* Готовность заказов: номер заказа закреплён при прокрутке таблицы вбок.
   Только на широком экране — на телефоне таблица и так карточками.
   Фон ячейки сплошной: у стеклянных тем он полупрозрачный, и сквозь
   закреплённую колонку просвечивали бы соседние. */
@media (min-width:641px){
  .rd-table{border-collapse:separate;border-spacing:0;--rd-solid:var(--bg2);}
  [data-theme="glass-light"] .rd-table{--rd-solid:#F8F3EE;}
  [data-theme="glass-dark"] .rd-table{--rd-solid:#2A231D;}
  .rd-table th.rd-c-num,.rd-table td.rd-c-num{position:sticky;left:0;z-index:2;background:var(--rd-solid);box-shadow:1px 0 0 var(--border);}
  .rd-table th.rd-c-num{z-index:3;}
  .rd-table tr.rd-r:hover td.rd-c-num{background:linear-gradient(var(--bg3),var(--bg3)),var(--rd-solid);}
  .rd-table tr.rd-warn td.rd-c-num{background:linear-gradient(rgba(181,72,72,.07),rgba(181,72,72,.07)),var(--rd-solid);box-shadow:inset 3px 0 0 var(--danger),1px 0 0 var(--border);}
}
/* Широкие отчёты — во всю ширину экрана, а не в колонку 1200 px. */
.app.app-wide{max-width:none;}
.rd-ready{color:var(--success);font-weight:700;white-space:nowrap;}
/* Карточка заказа (OData) */
.oc-tiles .tile{display:flex;flex-direction:column;gap:4px;}
.oc-sub{font-size:12px;color:var(--muted);}
.oc-tiles .big.oc-ok{color:var(--success);}
.oc-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--border);margin-right:8px;vertical-align:1px;}
.oc-dot.ok{background:var(--success);}
.name-input { width:170px; padding:6px 9px; font-size:13px; font-weight:600; font-family:var(--font);
              border:1px solid transparent; border-radius:var(--radius-s); background:transparent; color:var(--txt); }
.name-input:hover { border-color:var(--border); }
.name-input:focus { outline:none; border-color:var(--accent); background:var(--bg); }
/* Готовность заказов: группировка по менеджеру */
.rd-foot .rd-group{margin-left:auto;}
.rd-table tr.rd-grp td{background:var(--bg3);border-top:2px solid var(--border);padding:10px 12px;cursor:pointer;user-select:none;-webkit-user-select:none;}
/* Заголовок группы — строка той же таблицы: итоги стоят под её колонками. */
.rd-table tr.rd-grp td.rd-gname{white-space:nowrap;}
.rd-table tr.rd-grp td.rd-gname b{font-size:15px;color:var(--txt);margin-left:8px;}
.rd-gl{display:flex;justify-content:space-between;gap:12px;white-space:nowrap;line-height:1.5;}
.rd-gl small{display:inline !important;margin:0 !important;font-size:10px !important;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);}
.rd-gl b{color:var(--txt);font-variant-numeric:tabular-nums;}
.rd-gl.ok b{color:var(--success);}
.rd-table tr.rd-grp td.rd-gstock b{font-size:14px;color:var(--txt);white-space:nowrap;}
.rd-grp-caret{color:var(--muted);}
.rd-grp-bar{display:flex;gap:8px;margin-bottom:10px;}
@media (max-width:640px){
  .rd-table tr.rd-grp{background:var(--bg3);border-color:var(--accent);}
  .rd-table tr.rd-grp td{border:0 !important;background:transparent;}
  .rd-table tr.rd-grp td::before{display:none;}
  .rd-table tr.rd-grp td{flex-direction:column;gap:0 !important;}
  .rd-table tr.rd-grp td{padding:3px 0 !important;}
  .rd-table tr.rd-grp td.rd-gempty{display:none !important;}
  .rd-table tr.rd-grp td.rd-gname b{margin-left:4px;}
  .rd-gl{flex:1;}
  .rd-foot .rd-group{margin-left:0;}
}

/* ── Журнал заказов (OData): прокрутка вбок, кликабельная строка, телефон ── */

/* Широкие таблицы обязаны прокручиваться вбок: в карточке заказа у товаров
   12 колонок, правый край на экране не помещается. `.table-wrap` объявлен в
   этом файле трижды, и последнее объявление гасило прокрутку `overflow:hidden`
   — вбок не двигалось ничего. Правило идёт последним и задаёт только оси. */
.table-wrap { overflow-x:auto; overflow-y:hidden; -webkit-overflow-scrolling:touch;
              overscroll-behavior-x:contain; }
/* macOS прячет полосу прокрутки, пока не коснёшься трекпада: прокрутка была
   не только выключена, но и не видна. Держим её показанной постоянно.
   `scrollbar-width`/`scrollbar-color` здесь не задаются намеренно: как только
   они появляются, Chrome перестаёт применять ::-webkit-scrollbar и возвращает
   исчезающую системную полосу. */
.table-wrap::-webkit-scrollbar { height:10px; }
.table-wrap::-webkit-scrollbar-track { background:transparent; }
.table-wrap::-webkit-scrollbar-thumb { background:var(--border); border-radius:5px; }
.table-wrap::-webkit-scrollbar-thumb:hover { background:var(--muted); }

/* Строка списка открывает карточку целиком (orderlist.js), а номер оформлен
   кнопкой: раньше ссылкой был только номер, и это было незаметно. */
.row-link { cursor:pointer; }
tbody .row-link:hover { background:var(--acc-s); }
.order-open { display:inline-flex; align-items:center; gap:6px; padding:3px 10px;
  border-radius:999px; background:var(--acc-s); color:var(--accent); font-weight:700;
  text-decoration:none; white-space:nowrap; border:1px solid transparent; }
.order-open::after { content:'→'; opacity:.6; font-weight:400; }
.row-link:hover .order-open { background:var(--accent); color:#fff; }
.row-link:hover .order-open::after { opacity:.9; }
.order-open:focus-visible { outline:2px solid var(--accent); outline-offset:2px; }

@media (max-width:640px) {
  /* Карточка строки на телефоне: номер крупно сверху, внизу прямая подсказка,
     что по карточке можно нажать. */
  .card-table tr.row-link { position:relative; padding-bottom:8px; }
  .card-table tr.row-link td:first-child::before { display:none; }
  .card-table tr.row-link .order-open { font-size:15px; padding:5px 12px; }
  .card-table tr.row-link::after { content:'Открыть карточку заказа →'; display:block;
    margin-top:9px; padding-top:9px; border-top:1px dashed var(--border);
    color:var(--accent); font-weight:600; font-size:13px; }
  /* Пустые ячейки на телефоне превращались в строку «Отгружено —» ни о чём:
     в карточном режиме показываем только заполненные. */
  .card-table td:empty { display:none !important; }
  .card-table td::before { flex:0 0 96px; }
}

/* Панель фильтров складывается на телефоне (orderlist.js), на компьютере
   раскрыта всегда и заголовок не нужен. */
.filters-fold > summary { display:none; }
@media (max-width:640px) {
  .filters-fold > summary { display:flex; align-items:center; gap:8px; cursor:pointer;
    list-style:none; padding:11px 14px; margin-bottom:10px; font-size:13px; font-weight:700;
    background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius);
    color:var(--txt2); text-transform:uppercase; letter-spacing:.04em; }
  .filters-fold > summary::-webkit-details-marker { display:none; }
  .filters-fold > summary::after { content:'▾'; margin-left:auto; transition:transform .15s; }
  .filters-fold[open] > summary::after { transform:rotate(180deg); }
  .filters-count { background:var(--accent); color:#fff; border-radius:999px;
    padding:1px 8px; font-size:11px; }
}

/* Телефон: заголовки и плитки карточки заказа. Плиток шесть, при minmax(150px)
   на 375 px они вставали в одну колонку и оттесняли таблицы на второй экран. */
@media (max-width:600px) {
  .tiles { grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
  .tile { padding:10px 12px; }
  .tile .cap { font-size:10.5px; letter-spacing:.02em; }
  .page-h2 { font-size:19px; line-height:1.25; }
  .page-h3 { font-size:15px; margin-top:22px; }
}
/* ===================== Квоты по радиаторам ===================== */
.rd-row .q-period{flex:1 1 300px;min-width:0;}
.q-period .q-year{flex:0 0 110px;}
.q-show button{font-size:12px;}
.q-strip{margin:0 0 12px;}
.q-tile-nq .big{color:var(--danger);opacity:.85;}
.q-tile-ex .big,.q-tile-ex .cap{color:var(--danger);}
.q-c-quota{min-width:190px;}
.q-c-note{min-width:180px;max-width:320px;}
.q-l{display:flex;justify-content:space-between;gap:12px;white-space:nowrap;line-height:1.55;}
.q-l span{color:var(--txt2);}
.q-l b{font-variant-numeric:tabular-nums;}
.q-l.q-stock b{color:var(--success);}
.q-l.q-on span,.q-l.q-on b{color:var(--accent);font-weight:700;}
.q-l.q-nq span,.q-l.q-nq b{color:var(--danger);opacity:.85;}
.q-l.q-nodate span{font-style:italic;}
.q-none{color:var(--muted);}
.q-caret{display:block;margin-top:4px;font-size:11px;color:var(--muted);white-space:nowrap;}
.rd-table tr.q-open td{border-bottom-color:transparent;}
.rd-table tr.q-detail td{background:var(--bg3);padding:10px 12px;}
.oc-quota{margin-bottom:8px;}
.q-items{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:8px;}
.q-item{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-s);padding:8px 10px;display:flex;flex-direction:column;gap:4px;}
.q-item-warn{border-color:var(--danger);}
.q-item-name{font-weight:600;font-size:13px;}
.q-item-nums{font-size:12px;color:var(--muted);}
.q-item-nums b{color:var(--txt);}
.q-sups{display:flex;flex-direction:column;gap:2px;border-top:1px dashed var(--border);padding-top:4px;margin-top:2px;}
.q-sup{font-size:11px;color:var(--txt2);}
.q-sup-done{color:var(--muted);text-decoration:line-through;}
@media (max-width:640px){
  .q-c-quota,.q-c-note{min-width:0;max-width:none;}
  .rd-table td.q-c-quota{display:block !important;}
  .rd-table td.q-c-quota::before{display:block;margin-bottom:4px;}
  .q-show{flex-wrap:wrap;}
  .q-show button{flex:1 1 100%;}
  .rd-table tr.q-detail{padding:8px;}
  .rd-table tr.q-detail td{display:block !important;}
  .rd-table tr.q-detail td::before{display:none;}
  .q-items{grid-template-columns:1fr;}
}
.q-status{padding-top:2px;}
/* Карточка заказа: квоты ПРАДО колонками в таблице товаров, по галочке */
.oc-q:not(.on) .q-col,.oc-q:not(.on) .q-col-row{display:none !important;}
.oc-q-toggle{margin:4px 0 10px;}
.oc-q .q-sum{margin-bottom:6px;}
.oc-q td.q-col{min-width:170px;}
.oc-q td.q-c-sup{min-width:230px;}
.q-sup a,.q-l a{color:var(--accent);text-decoration:none;}
/* Квоты: разбивка по радиаторам — списком, строка на позицию */
.q-dtable{width:100%;border-collapse:collapse;font-size:12.5px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-s);}
.q-dtable th{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:7px 8px;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;cursor:default;}
.q-dtable th.right,.q-dtable td.right{text-align:right;}
.q-dtable td{padding:6px 8px;border-bottom:1px solid var(--border);vertical-align:top;}
.q-dtable tr:last-child td{border-bottom:0;}
.q-dtable td.q-d-name{font-weight:600;min-width:220px;}
.q-dtable td.q-d-q{min-width:170px;}
.q-dtable td.q-d-sup{min-width:240px;}
.q-dtable tr.q-d-warn td{background:rgba(181,72,72,.06);}
.q-dtable a{color:var(--accent);text-decoration:none;}
.rd-table .q-dtable td small{display:block;}
.so-lines tr.so-cancel td{opacity:.55;}
.so-lines tr.so-other td{color:var(--muted);}
.so-lines td small{display:block;font-size:11px;color:var(--muted);}
.so-lines .so-flag{color:var(--danger);}
@media (max-width:640px){
  .q-dtable,.q-dtable tbody,.q-dtable tr,.q-dtable td{display:block;width:100%;}
  .q-dtable thead{display:none;}
  .q-dtable{border:0;background:transparent;}
  .q-dtable tr{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-s);padding:6px 10px;margin-bottom:6px;}
  .q-dtable td{border:0;padding:2px 0;display:flex;gap:10px;justify-content:space-between;min-width:0 !important;}
  .q-dtable td::before{content:attr(data-label);color:var(--muted);font-size:11.5px;flex:0 0 90px;}
  .q-dtable td.q-d-name::before{display:none;}
  .q-dtable td.q-d-q,.q-dtable td.q-d-sup{display:block;}
  .q-dtable td.q-d-q::before,.q-dtable td.q-d-sup::before{display:block;margin-bottom:2px;}
  .q-dtable td:empty{display:none;}
}

/* ── Михалыч: окно ИИ-помощника (public/assets/mihalych.js) ───────────────── */
.mh-fab { position:fixed; right:18px; bottom:calc(18px + env(safe-area-inset-bottom, 0px)); z-index:980;
  display:flex; align-items:center; gap:8px; padding:6px 16px 6px 6px; border-radius:40px;
  border:1px solid rgba(184,90,18,.35); background:var(--bg2); color:var(--txt); font-family:var(--font);
  font-weight:700; font-size:14px; cursor:pointer; box-shadow:0 8px 28px var(--shadow), 0 2px 6px rgba(242,140,40,.25);
  transition:transform .18s, opacity .18s; -webkit-tap-highlight-color:transparent; }
.mh-fab:hover { transform:translateY(-2px); }
.mh-fab-new::after { content:''; position:absolute; top:4px; right:4px; width:12px; height:12px; border-radius:50%; background:#e5484d; box-shadow:0 0 0 2px #fff; }
.mh-fab.hide { opacity:0; pointer-events:none; transform:scale(.8); }
.mh-fab .mh-ava { width:44px; height:44px; animation:mh-bob 3.2s ease-in-out infinite; }
@keyframes mh-bob { 0%,100% { transform:translateY(0) rotate(0); } 50% { transform:translateY(-2px) rotate(-3deg); } }
.mh-ava { display:block; flex-shrink:0; }

.mh-panel { position:fixed; top:12px; right:12px; bottom:12px; width:420px; max-width:calc(100vw - 24px); z-index:990;
  display:flex; flex-direction:column; background:var(--bg2); color:var(--txt); border:1px solid var(--border);
  border-radius:20px; box-shadow:0 18px 60px var(--shadow); font-family:var(--font); overflow:hidden;
  transform:translateX(calc(100% + 24px)); transition:transform .3s cubic-bezier(.32,.72,0,1); visibility:hidden; }
.mh-panel.open { transform:none; visibility:visible; }
.mh-resize { position:absolute; left:0; top:0; bottom:0; width:10px; cursor:ew-resize; z-index:2; touch-action:none; }
.mh-resize::after { content:''; position:absolute; left:3px; top:50%; width:4px; height:44px; margin-top:-22px; border-radius:4px;
  background:rgba(242,140,40,.35); opacity:0; transition:opacity .15s; }
.mh-panel:hover .mh-resize::after, .mh-resizing .mh-resize::after { opacity:1; }
.mh-resizing { transition:none; user-select:none; }
:is([data-theme^="glass"],[data-theme^="apple"]) .mh-panel { -webkit-backdrop-filter:blur(var(--blur)) saturate(var(--sat)); backdrop-filter:blur(var(--blur)) saturate(var(--sat)); }

.mh-head { display:flex; align-items:center; gap:10px; padding:12px 12px 12px 14px;
  background:linear-gradient(135deg, rgba(242,140,40,.22), rgba(242,140,40,.04)); border-bottom:1px solid var(--border); }
.mh-head .mh-ava { width:46px; height:46px; }
.mh-who { flex:1; min-width:0; }
.mh-name { font-weight:800; font-size:17px; }
.mh-sub { font-size:12px; color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mh-btn { width:34px; height:34px; border-radius:10px; border:1px solid var(--border); background:var(--bg2); color:var(--txt2);
  cursor:pointer; font-size:15px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.mh-btn:hover { border-color:#F28C28; color:#D9701A; }

.mh-history { max-height:45%; overflow:auto; border-bottom:1px solid var(--border); background:var(--bg); }
.mh-hrow { display:flex; align-items:center; gap:8px; padding:9px 14px; cursor:pointer; font-size:13px; border-bottom:1px solid var(--divider); }
.mh-hrow:hover, .mh-hrow.on { background:var(--acc-s); }
.mh-htitle { flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mh-hdate { color:var(--muted); font-size:11px; }
.mh-hdel { border:none; background:none; color:var(--muted); cursor:pointer; font-size:12px; padding:2px 4px; }
.mh-hdel:hover { color:var(--danger); }

.mh-scroll { flex:1; min-height:0; overflow:auto; overscroll-behavior:contain; }
.mh-log { padding:14px 12px 8px; display:flex; flex-direction:column; gap:10px; }
.mh-note { color:var(--muted); font-size:13px; text-align:center; padding:12px; }
.mh-msg { display:flex; gap:8px; align-items:flex-end; max-width:100%; }
.mh-me { justify-content:flex-end; }
.mh-ava-wrap .mh-ava { width:32px; height:32px; }
.mh-bubble { padding:10px 12px; border-radius:16px; font-size:14px; line-height:1.45; min-width:0; overflow-wrap:anywhere; }
.mh-me .mh-bubble { background:#F28C28; color:#fff; border-bottom-right-radius:5px; max-width:85%; }
.mh-bot .mh-bubble { background:var(--bg); border:1px solid var(--border); border-bottom-left-radius:5px; max-width:calc(100% - 40px); }
.mh-bubble p { margin:0 0 6px; } .mh-bubble p:last-child { margin-bottom:0; }
.mh-bubble ul, .mh-bubble ol { margin:4px 0 6px; padding-left:20px; }
.mh-bubble code { font-size:12px; background:var(--acc-s); padding:1px 4px; border-radius:4px; }
.mh-bubble pre { font-size:12px; overflow:auto; background:var(--bg2); padding:8px; border-radius:8px; }
.mh-h { font-weight:800; }
.mh-author { font-size:12px; font-weight:800; margin-bottom:4px; color:#D9701A; }
.mh-author span { font-weight:600; color:var(--muted); }
[data-theme*="dark"] .mh-author { filter:brightness(1.6) saturate(.8); }
.mh-team { display:grid; grid-template-columns:repeat(3, 1fr); gap:8px 6px; margin:8px 0; }
.mh-mate { display:flex; flex-direction:column; align-items:center; text-align:center; font-size:11px; line-height:1.25; }
.mh-mate .mh-ava { width:44px; height:48px; margin-bottom:2px; }
.mh-mate span { color:var(--muted); }
.mh-err { color:var(--danger); }
.mh-handoff { display:flex; align-items:center; gap:8px; font-size:13.5px; color:var(--txt); padding:2px 4px; }
.mh-handoff span { background:rgba(242,140,40,.13); border:1px solid rgba(242,140,40,.35); padding:6px 10px; border-radius:14px; border-bottom-left-radius:4px; }
.mh-handoff .mh-ava { width:32px; height:35px; }
.mh-pass span { background:var(--bg); border-color:var(--border); }
.mh-handoff + .mh-handoff, div > .mh-handoff + .mh-handoff { margin-top:8px; }
.mh-handoff b { color:#D9701A; }

.mh-table { overflow:auto; margin:6px 0; border:1px solid var(--border); border-radius:10px; max-height:360px; }
.mh-table table { border-collapse:collapse; width:100%; font-size:12.5px; }
.mh-table th, .mh-table td { padding:5px 8px; border-bottom:1px solid var(--divider); text-align:left; white-space:nowrap; }
.mh-table th { position:sticky; top:0; background:var(--bg3); font-weight:700; }
.mh-table td.n { text-align:right; font-variant-numeric:tabular-nums; }
.mh-files { display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; }
.mh-file { display:inline-flex; gap:6px; align-items:center; padding:6px 10px; border-radius:10px; background:rgba(107,142,78,.14);
  color:var(--success); font-weight:700; font-size:13px; text-decoration:none; border:1px solid rgba(107,142,78,.35); }
.mh-file span { font-weight:500; opacity:.75; }

.mh-chips { display:flex; flex-direction:column; gap:6px; margin-top:10px; }
.mh-chip { text-align:left; padding:8px 10px; border-radius:12px; border:1px dashed rgba(242,140,40,.6); background:transparent;
  color:var(--txt); font-family:var(--font); font-size:13px; cursor:pointer; }
.mh-chip:hover { background:rgba(242,140,40,.12); }

.mh-dots { display:inline-flex; gap:3px; vertical-align:middle; }
.mh-dots i { width:6px; height:6px; border-radius:50%; background:#F28C28; animation:mh-dot 1.1s infinite ease-in-out; }
.mh-dots i:nth-child(2) { animation-delay:.15s; } .mh-dots i:nth-child(3) { animation-delay:.3s; }
@keyframes mh-dot { 0%,80%,100% { opacity:.25; transform:translateY(0); } 40% { opacity:1; transform:translateY(-3px); } }
.mh-think { color:var(--muted); font-size:13px; }

.mh-input { display:flex; gap:8px; align-items:flex-end; padding:10px 12px calc(10px + env(safe-area-inset-bottom, 0px)); border-top:1px solid var(--border); background:var(--bg2); }
.mh-input textarea { flex:1; resize:none; border:1px solid var(--border); background:var(--bg); color:var(--txt); border-radius:14px;
  padding:10px 12px; font-family:var(--font); font-size:16px; line-height:1.35; max-height:140px; }
.mh-input textarea:focus { outline:none; border-color:#F28C28; }
.mh-send { width:42px; height:42px; border-radius:50%; border:none; background:#F28C28; color:#fff; font-size:17px; cursor:pointer; flex-shrink:0; }
.mh-send:disabled { opacity:.5; cursor:default; }

@media (max-width: 699px) {
  .mh-resize { display:none; }
  .mh-panel { width:auto !important; }
  .mh-fab { right:12px; bottom:calc(12px + env(safe-area-inset-bottom, 0px)); padding:5px; }
  .mh-fab-label { display:none; }
  .mh-panel { top:0; right:0; bottom:0; left:0; width:auto; max-width:none; border-radius:0; border:none;
    padding-top:env(safe-area-inset-top, 0px); height:100dvh; }
}
/* При печати — без «Установить на iPhone» (кнопка внизу страницы и окно с
   инструкцией). Михалыч печатается как есть (заказчик, 01.10.2026): кнопка,
   а раскрытый чат — тоже; закрытый скрыт visibility и на печать не попадает. */
@media print { .a2hs-trigger, .a2hs-sheet, .a2hs-overlay { display:none !important; } }

/* ===================== Дерево связей ===================== */
:root { --k-object:#C96442; --k-partner:#3F74B5; --k-counterparty:#8A6FB0; --k-person:#5E8A45; }
[data-theme="dark"], [data-theme="glass-dark"], [data-theme="apple-dark"], body.dark {
  --k-object:#E58462; --k-partner:#6F9FDA; --k-counterparty:#A993CF; --k-person:#8FB36A;
}
.rel { display:flex; flex-direction:column; gap:12px; }
.rel-top { display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
.rel-search { position:relative; flex:1 1 320px; min-width:0; }
.rel-search input { width:100%; padding:12px 14px; border-radius:var(--radius-s); border:1px solid var(--border);
  background:var(--bg2); color:var(--txt); font:500 15px var(--font); outline:none; }
.rel-search input:focus { border-color:var(--accent); box-shadow:0 0 0 3px var(--acc-s); }
.rel-results { position:absolute; z-index:30; left:0; right:0; top:calc(100% + 6px); max-height:60vh; overflow:auto;
  background:var(--bg2); border:1px solid var(--border); border-radius:var(--radius-s); box-shadow:0 12px 32px var(--shadow);
  -webkit-backdrop-filter:blur(var(--blur)) saturate(var(--sat)); backdrop-filter:blur(var(--blur)) saturate(var(--sat)); }
[data-theme^="glass"] .rel-results { background:var(--bg2); }
.rel-res { display:flex; width:100%; gap:10px; align-items:center; padding:10px 12px; border:0; border-bottom:1px solid var(--divider);
  background:transparent; color:var(--txt); font:600 14px var(--font); text-align:left; cursor:pointer; }
.rel-res:hover, .rel-res:focus { background:var(--acc-s); outline:none; }
.rel-res-i { font-size:18px; }
.rel-res-n { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; }
.rel-res-n i { display:block; font-style:normal; font-weight:500; font-size:12px; color:var(--muted); }
.rel-res b { font-size:12px; color:var(--muted); font-weight:600; }
.rel-res-head, .rel-res-empty { padding:10px 12px; font-size:12px; color:var(--muted); }
.rel-kinds { flex:0 0 auto; }
.rel-kinds button { padding:9px 12px; white-space:nowrap; }
.rel-body { display:flex; gap:12px; min-height:0; }
.rel-stage { position:relative; flex:1; min-width:0; height:calc(100vh - 230px); min-height:420px; border-radius:var(--radius);
  border:1px solid var(--border); background:var(--bg2); overflow:hidden; touch-action:none;
  background-image:radial-gradient(var(--divider) 1px, transparent 1px); background-size:22px 22px; }
.rel-svg { position:absolute; inset:0; width:100%; height:100%; display:block; cursor:grab; user-select:none; -webkit-user-select:none; }
.rel-svg:active { cursor:grabbing; }
.rel-link { fill:none; stroke:var(--muted); stroke-width:1.4; opacity:.55; }
.rel-link-far { stroke-dasharray:4 4; opacity:.35; }
.rel-g { cursor:pointer; outline:none; }
.rel-node rect:first-of-type { fill:var(--bg2); stroke:var(--border); stroke-width:1.2; }
[data-theme^="glass"] .rel-node rect:first-of-type { fill:var(--bg3); }
.rel-node .rel-bar { fill:var(--k-object); stroke:none; }
.rel-node.k-partner .rel-bar { fill:var(--k-partner); }
.rel-node.k-counterparty .rel-bar { fill:var(--k-counterparty); }
.rel-node.k-person .rel-bar { fill:var(--k-person); }
.rel-node:hover rect:first-of-type, .rel-node:focus rect:first-of-type { stroke:var(--accent); }
.rel-node.sel rect:first-of-type { stroke:var(--accent); stroke-width:2.4; }
.rel-node.root rect:first-of-type { stroke-width:2; stroke:var(--k-object); }
.rel-node.root.k-partner rect:first-of-type { stroke:var(--k-partner); }
.rel-node.root.k-counterparty rect:first-of-type { stroke:var(--k-counterparty); }
.rel-node.root.k-person rect:first-of-type { stroke:var(--k-person); }
.rel-node.ref, .rel-node.far { opacity:.6; }
.rel-node.ref rect:first-of-type { stroke-dasharray:4 3; }
.rel-nt { font:700 13px var(--font); fill:var(--txt); }
.rel-st { font:500 11px var(--font); fill:var(--muted); }
.rel-tog circle { fill:var(--acc-s); stroke:var(--accent); stroke-width:1; }
.rel-tog text, .rel-tog-t { font:800 13px var(--font); fill:var(--accent); text-anchor:middle; }
.rel-tog:hover circle { fill:var(--accent); }
.rel-tog:hover text { fill:#fff; }
.rel-group rect { fill:var(--acc-s); stroke:none; }
.rel-group.inctx rect { stroke:var(--accent); stroke-width:1; }
.rel-gt { font:700 12px var(--font); fill:var(--acc-h); }
[data-theme="dark"] .rel-gt, [data-theme="glass-dark"] .rel-gt, [data-theme="apple-dark"] .rel-gt, body.dark .rel-gt { fill:var(--accent); }
.rel-gn { font-weight:600; fill:var(--muted); }
.rel-more rect { fill:transparent; stroke:var(--border); stroke-dasharray:3 3; }
.rel-more text { font:600 12px var(--font); fill:var(--txt2); }
.rel-tools { position:absolute; right:10px; top:10px; display:flex; flex-direction:column; gap:6px; }
.rel-tools .btn-ghost { width:36px; height:36px; padding:0; justify-content:center; font-size:16px; }
/* Склейка дублей: «⧉ собрано из N» в карточке. */
.rel-merged { margin:8px 0; padding:8px 10px; border-radius:10px; border:1px dashed var(--accent); font-size:13px; color:var(--txt2); }
.rel-merged ul { margin:6px 0 0; padding-left:18px; }
.rel-merged li { margin:3px 0; }
.rel-merged i { color:var(--muted); font-style:normal; font-size:12px; margin-left:4px; }
.rel-unmerge { padding:1px 8px; font-size:12px; margin-left:6px; }
.rel-merge-add { margin:8px 0; font-size:13px; }
.rel-merge-add summary { cursor:pointer; color:var(--accent); }
.rel-merge-q { width:100%; margin:6px 0; padding:6px 8px; border:1px solid var(--border); border-radius:8px; background:var(--bg); color:var(--txt); }
/* Подписи к кнопкам — слева сбоку, только при наведении мышкой. */
.rel-tool { position:relative; display:flex; }
.rel-tool-tip { position:absolute; right:calc(100% + 8px); top:50%; transform:translateY(-50%); white-space:nowrap;
  font-size:12px; line-height:1.2; padding:4px 8px; border-radius:8px; color:var(--txt2); background:var(--bg2);
  border:1px solid var(--border); box-shadow:0 1px 3px rgba(0,0,0,.08); pointer-events:none; display:none; }
.rel-tool:hover .rel-tool-tip, .rel-tool:focus-within .rel-tool-tip { display:block; }
@media (max-width:640px) { .rel-tool-tip { font-size:11px; padding:3px 6px; } }
.rel-legend { position:absolute; left:12px; bottom:10px; display:flex; gap:12px; flex-wrap:wrap; font-size:11px; color:var(--muted); pointer-events:none; }
.rel-legend i { display:inline-block; width:10px; height:10px; border-radius:3px; margin-right:5px; vertical-align:-1px; }
.rel-legend .k-object { background:var(--k-object); } .rel-legend .k-partner { background:var(--k-partner); }
.rel-legend .k-counterparty { background:var(--k-counterparty); } .rel-legend .k-person { background:var(--k-person); }
.rel-empty { position:absolute; inset:0; display:flex; align-items:center; justify-content:center; padding:20px; background:var(--bg2); overflow:auto; }
.rel-empty[hidden] { display:none; }
.rel-start { max-width:640px; text-align:center; }
.rel-start-t { font:800 20px var(--font); color:var(--txt); margin-bottom:8px; }
.rel-start p { color:var(--txt2); font-size:14px; line-height:1.5; margin-bottom:16px; }
.rel-start-list { display:flex; flex-wrap:wrap; gap:8px; justify-content:center; }
.rel-chip { border:1px solid var(--border); background:var(--bg); color:var(--txt); border-radius:999px; padding:8px 12px;
  font:600 13px var(--font); cursor:pointer; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.rel-chip b { color:var(--muted); font-weight:600; margin-left:4px; }
.rel-chip:hover { border-color:var(--accent); color:var(--accent); }
.rel-side { flex:0 0 360px; max-width:360px; height:calc(100vh - 230px); min-height:420px; overflow:auto; border-radius:var(--radius);
  border:1px solid var(--border); background:var(--bg2); }
.rel-card { position:relative; padding:16px; }
.rel-card h2 { font:800 18px var(--font); color:var(--txt); margin:4px 30px 6px 0; line-height:1.25; word-break:break-word; }
.rel-kind { font:700 12px var(--font); color:var(--k-object); text-transform:uppercase; letter-spacing:.04em; }
.rel-card.k-partner .rel-kind { color:var(--k-partner); } .rel-card.k-counterparty .rel-kind { color:var(--k-counterparty); }
.rel-card.k-person .rel-kind { color:var(--k-person); }
.rel-close { position:absolute; right:10px; top:10px; border:0; background:transparent; color:var(--muted); font-size:16px; cursor:pointer; padding:6px; }
.rel-muted { color:var(--muted); font-size:12px; }
.rel-info { display:grid; grid-template-columns:auto 1fr; gap:4px 10px; margin:10px 0; font-size:13px; }
.rel-info dt { color:var(--muted); } .rel-info dd { color:var(--txt); word-break:break-word; }
.rel-via { margin:10px 0; padding:10px 12px; border-radius:var(--radius-s); background:var(--acc-s); font-size:13px; line-height:1.5; color:var(--txt); }
.rel-actions { display:flex; flex-direction:column; gap:8px; margin:12px 0; }
.rel-actions .btn-ghost, .rel-actions .btn-accent { justify-content:flex-start; text-decoration:none; white-space:normal; text-align:left; }
.rel-sec { margin:16px 0 6px; font:800 12px var(--font); color:var(--muted); text-transform:uppercase; letter-spacing:.05em; }
.rel-glist, .rel-docs { list-style:none; font-size:13px; }
.rel-glist li { display:flex; justify-content:space-between; gap:10px; padding:6px 0; border-bottom:1px solid var(--divider); color:var(--txt); }
.rel-glist li b { white-space:nowrap; font-weight:700; }
.rel-glist li i { font-style:normal; color:var(--muted); font-size:11px; }
.rel-docs li { padding:7px 0; border-bottom:1px solid var(--divider); color:var(--txt); line-height:1.35; }
.rel-docs a { color:var(--accent); text-decoration:none; font-weight:600; }
.rel-draft { font-style:normal; font-size:11px; color:var(--danger); }
.rel-sources { border:1px solid var(--border); border-radius:var(--radius); background:var(--bg2); padding:10px 14px; }
.rel-sources summary { cursor:pointer; font:700 14px var(--font); color:var(--txt2); }
.rel-src-body { margin-top:10px; font-size:13px; }
.rel-src-wrap { overflow-x:auto; margin-top:8px; }
.rel-src { width:100%; border-collapse:collapse; font-size:12px; }
.rel-src th, .rel-src td { text-align:left; padding:6px 8px; border-bottom:1px solid var(--divider); vertical-align:top; color:var(--txt); }
.rel-src th { color:var(--muted); font-weight:700; }
.rel-src tr.st-error td { color:var(--danger); }
.rel-src tr.st-skip td { opacity:.6; }
@media (max-width:900px) {
  .rel-body { flex-direction:column; }
  .rel-stage { flex:none; height:62vh; min-height:360px; }
  .rel-side { position:fixed; z-index:40; left:0; right:0; bottom:0; max-width:none; height:auto; max-height:55vh; min-height:0;
    border-radius:18px 18px 0 0; box-shadow:0 -10px 30px var(--shadow); padding-bottom:env(safe-area-inset-bottom);
    -webkit-backdrop-filter:blur(28px) saturate(180%); backdrop-filter:blur(28px) saturate(180%); }
  .rel-side::before { content:''; display:block; width:40px; height:4px; border-radius:2px; background:var(--border); margin:8px auto 0; }
  .rel-kinds { width:100%; } .rel-kinds button { flex:1; padding:9px 4px; font-size:12px; }
  .rel-legend { display:none; }
}
/* Михалыч: кнопка дерева связей и ссылки в ответе */
.mh-graphs { display:flex; flex-direction:column; gap:6px; margin-top:8px; }
.mh-graph { display:flex; align-items:center; gap:10px; padding:9px 12px; border-radius:12px; text-decoration:none;
  background:var(--acc-s); color:var(--txt); border:1px solid var(--accent); font-size:13px; line-height:1.3; }
.mh-graph:hover { background:var(--accent); color:#fff; }
.mh-graph-ico { font-size:20px; } .mh-graph span:nth-child(2) { flex:1; min-width:0; }
.mh-graph-go { font-weight:800; }
.mh-link { color:var(--accent); font-weight:600; text-decoration:underline; text-underline-offset:2px; }
.rel-stage.is-empty .rel-tools, .rel-stage.is-empty .rel-legend { display:none; }
/* Дерево связей: роли на объектах — «кто есть кто» */
.rel-group.part rect { fill:color-mix(in srgb, var(--k-partner) 16%, transparent); stroke:var(--k-partner); stroke-width:1; }
.rel-group.part .rel-gt { fill:var(--k-partner); }
[data-theme="dark"] .rel-group.part .rel-gt, [data-theme="glass-dark"] .rel-group.part .rel-gt, [data-theme="apple-dark"] .rel-group.part .rel-gt, body.dark .rel-group.part .rel-gt { fill:var(--k-partner); }
.rel-role-sel { flex:0 1 260px; min-width:0; padding:10px 12px; border-radius:var(--radius-s); border:1px solid var(--border);
  background:var(--bg2); color:var(--txt); font:600 13px var(--font); }
.rel-role-sel[hidden] { display:none; }
.rel-roles { display:flex; flex-wrap:wrap; gap:6px; margin:10px 0; }
.rel-role { display:inline-flex; gap:5px; align-items:center; padding:5px 10px; border-radius:999px; font:700 12px var(--font);
  background:color-mix(in srgb, var(--k-partner) 14%, transparent); color:var(--k-partner); }
.rel-role b { color:var(--txt); font-weight:800; }
.rel-role.card { background:transparent; border:1px dashed var(--k-partner); }
.rel-cast { display:grid; grid-template-columns:auto 1fr; gap:6px 10px; font-size:13px; margin-bottom:6px; }
.rel-cast dt { color:var(--txt2); font-weight:700; white-space:nowrap; }
.rel-cast dd { color:var(--txt); line-height:1.45; }
.rel-cast a { color:var(--k-partner); font-weight:700; text-decoration:none; }
.rel-cast a:hover { text-decoration:underline; }
.rel-cast i { font-style:normal; color:var(--muted); font-size:12px; }
.rel-start-sub { width:100%; font:800 12px var(--font); color:var(--muted); text-transform:uppercase; letter-spacing:.05em; margin:6px 0 2px; }
.rel-start-list + .rel-start-list { margin-top:14px; }
.rel-start-ex-t { font:800 12px var(--font); color:var(--muted); text-transform:uppercase; letter-spacing:.05em; margin:16px 0 8px; }
#relStartEx + .rel-start-list { margin-top:16px; }
.rel-chip-role { border-color:var(--k-partner); color:var(--k-partner); }
@media (max-width:900px) { .rel-role-sel { flex:1 1 100%; } }
/* Дерево связей: «только действующие» — живое подсвечено, остальное блекнет */
/* Цвета поменяны местами (заказчик, 30.09.2026): действующие — фиолетовые, продажи — зелёные. */
:root { --live:#7B5BD6; }
[data-theme="dark"], [data-theme="glass-dark"], [data-theme="apple-dark"], body.dark { --live:#A68CF0; }
.rel-active { display:inline-flex; align-items:center; gap:8px; padding:9px 12px; border-radius:var(--radius-s); border:1px solid var(--border);
  background:var(--bg2); color:var(--txt); font:700 13px var(--font); cursor:pointer; white-space:nowrap; user-select:none; }
.rel-active input { width:16px; height:16px; accent-color:var(--live); margin:0; }
.rel-active:has(input:checked) { border-color:var(--live); color:var(--live); }
.rel-stage.only-active .rel-g { transition:opacity .2s, filter .2s; }
.rel-stage.only-active .rel-g:not(.act) { opacity:.22; filter:grayscale(1); }
.rel-stage.only-active .rel-g:not(.act):hover { opacity:.6; }
.rel-stage.only-active .rel-link { opacity:.1; }
/* «Приглушить закрытые и построенные»: закрытые в 1С и сданные по ИИ — как
   недействующие при «Только действующие», поверх остальных подсветок. */
.rel-g.muted { transition:opacity .2s, filter .2s; opacity:.22 !important; filter:grayscale(1) !important; }
.rel-g.muted:hover { opacity:.6 !important; }
.rel-link.muted { opacity:.1 !important; }
.rel-res.muted { opacity:.45; }
/* Действующие подсвечены всегда; галочка только гасит остальное. */
.rel-link.act { opacity:.9; stroke:var(--live); stroke-width:1.8; }
.rel-node.act:not(.root) rect:first-of-type { stroke:var(--live); stroke-width:2; filter:drop-shadow(0 0 5px color-mix(in srgb, var(--live) 45%, transparent)); }
.rel-group.act rect { stroke:var(--live); stroke-width:1.2; }
.rel-ga { fill:var(--live); font-weight:800; }
.rel-live { display:inline-block; margin:2px 0 6px; padding:5px 10px; border-radius:999px; font:700 12px var(--font);
  color:var(--live); background:color-mix(in srgb, var(--live) 12%, transparent); }
.rel-live-doc { font-style:normal; font-size:11px; font-weight:700; color:var(--live); }
.rel-dot { color:var(--live); font-size:11px; }
@media (max-width:900px) { .rel-active { flex:1 1 auto; justify-content:center; } }
/* Дерево связей: несколько сущностей */
.rel-res { position:relative; }
.rel-res-add { flex:0 0 auto; width:30px; height:30px; display:inline-flex; align-items:center; justify-content:center; border-radius:8px;
  border:1px solid var(--border); color:var(--accent); font-size:16px; font-weight:800; }
.rel-res-add:hover { background:var(--accent); color:#fff; border-color:var(--accent); }
.rel-res.picked { background:var(--acc-s); }
.rel-res.picked .rel-res-add { background:var(--accent); color:#fff; border-color:var(--accent); }
.rel-res.picked .rel-res-add::before { content:'✓'; } .rel-res.picked .rel-res-add { font-size:0; }
.rel-res.picked .rel-res-add::before { font-size:15px; }
.rel-picks { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.rel-picks[hidden], .rel-note[hidden] { display:none; }
.rel-pick-chip { display:inline-flex; align-items:center; gap:6px; padding:6px 6px 6px 12px; border-radius:999px; background:var(--acc-s);
  border:1px solid var(--accent); color:var(--txt); font:700 13px var(--font); max-width:100%; }
.rel-pick-chip button { border:0; background:transparent; color:var(--muted); font-size:16px; line-height:1; cursor:pointer; padding:0 6px; }
.rel-picks .btn-accent, .rel-picks .btn-ghost { padding:7px 14px; }
.rel-note { font:600 13px var(--font); color:var(--txt2); padding:2px 2px; }
.rel-note .rel-link-url { font:500 13px var(--font); width:min(460px, 100%); padding:5px 8px; border:1px solid var(--border); border-radius:8px; background:transparent; color:var(--txt); }
.rel-note .btn-ghost { padding:4px 10px; font-size:13px; }
.rel-node.pick rect:first-of-type { stroke:#E0A800 !important; stroke-width:2.6 !important; }
.rel-node.pick .rel-nt { fill:var(--txt); }
.rel-node.pick { opacity:1 !important; filter:none !important; }
/* Дерево связей: «отмотка» — были в работе за срок (янтарь) */
:root { --was:#C98A12; }
[data-theme="dark"], [data-theme="glass-dark"], [data-theme="apple-dark"], body.dark { --was:#E5B04A; }
.rel-back { display:inline-flex; align-items:center; gap:8px; padding:6px 12px; border-radius:var(--radius-s); border:1px solid var(--border);
  background:var(--bg2); color:var(--txt2); font:700 13px var(--font); white-space:nowrap; }
.rel-back input { width:130px; accent-color:var(--was); }
.rel-back b { min-width:92px; color:var(--was); font-weight:800; }
.rel-link.rec { opacity:.85; stroke:var(--was); stroke-width:1.6; stroke-dasharray:5 3; }
.rel-node.rec:not(.root) rect:first-of-type { stroke:var(--was); stroke-width:2; stroke-dasharray:5 3; }
.rel-group.rec:not(.act) rect { stroke:var(--was); stroke-width:1.2; }
.rel-gr { fill:var(--was); font-weight:800; }
.rel-stage.only-active .rel-g.rec:not(.act) { opacity:.85; filter:none; }
.rel-stage.only-active .rel-link.rec { opacity:.75; }
.rel-was { color:var(--was); background:color-mix(in srgb, var(--was) 14%, transparent); }
.rel-was-doc { color:var(--was); }
@media (max-width:900px) { .rel-back { flex:1 1 100%; } .rel-back input { flex:1; width:auto; } }
.rel-reset { padding:9px 14px; font-weight:700; }
.rel-reset:disabled { opacity:.45; cursor:default; }
.rel-reset:disabled:hover { background:var(--bg2); border-color:var(--border); color:var(--txt2); }
@media (max-width:900px) { .rel-reset { flex:1 1 100%; justify-content:center; } }
/* Дерево связей: кто ведёт — менеджер, ответственный (выделены, как участники) */
.rel-group.staff rect { fill:color-mix(in srgb, var(--k-person) 16%, transparent); stroke:var(--k-person); stroke-width:1; }
.rel-group.staff .rel-gt { fill:var(--k-person); }
.rel-cast a.k-person { color:var(--k-person); }
.rel-cast { grid-template-columns:minmax(90px, 38%) 1fr; }
.rel-cast dt { white-space:normal; }
.rel-res-bar { position:sticky; top:0; z-index:1; display:flex; align-items:center; justify-content:space-between; gap:10px;
  padding:8px 12px; background:var(--bg2); border-bottom:1px solid var(--divider); font:600 12px var(--font); color:var(--muted);
  -webkit-backdrop-filter:blur(var(--blur)); backdrop-filter:blur(var(--blur)); }
.rel-res-bar .btn-ghost { padding:6px 12px; font-weight:700; color:var(--accent); border-color:var(--accent); }
.rel-group.pick rect { stroke:#E0A800 !important; stroke-width:2 !important; }
.rel-objgroup:has(input:checked) { border-color:var(--k-object); color:var(--k-object); }
.rel-objgroup input { accent-color:var(--k-object); }
.rel-group.sup rect { fill:color-mix(in srgb, var(--k-object) 16%, transparent); stroke:var(--k-object); stroke-width:1.4; }
.rel-group.sup .rel-gt { fill:var(--k-object); font-weight:800; }
/* Дерево связей: где была продажа (отгрузки по заказам) — фиолетовым */
:root { --sale:#2E9D5B; }
[data-theme="dark"], [data-theme="glass-dark"], [data-theme="apple-dark"], body.dark { --sale:#5CC98A; }
.rel-sales:has(input:checked) { border-color:var(--sale); color:var(--sale); }
.rel-sales input { accent-color:var(--sale); }
.rel-gs { fill:var(--sale); font-weight:800; }
.rel-sale { color:var(--sale); background:color-mix(in srgb, var(--sale) 13%, transparent); }
.rel-sale-doc { color:var(--sale); }
.rel-stage.only-sales .rel-g { transition:opacity .2s, filter .2s; }
.rel-stage.only-sales .rel-g:not(.sale) { opacity:.22; filter:grayscale(1); }
.rel-stage.only-sales .rel-g:not(.sale):hover { opacity:.6; }
.rel-stage.only-sales .rel-link { opacity:.1; }
.rel-stage.only-sales .rel-link.sale { opacity:.95; stroke:var(--sale); stroke-width:2.2; stroke-dasharray:none; }
.rel-stage.only-sales .rel-node.sale:not(.root) rect:first-of-type { stroke:var(--sale); stroke-width:2.2; stroke-dasharray:none;
  filter:drop-shadow(0 0 5px color-mix(in srgb, var(--sale) 45%, transparent)); }
.rel-stage.only-sales .rel-group.sale rect { stroke:var(--sale); stroke-width:1.4; }
/* Обе галочки: виден и живой, и продававший */
.rel-stage.only-sales.only-active .rel-g.act, .rel-stage.only-sales.only-active .rel-g.rec { opacity:1; filter:none; }
.rel-stage.only-sales.only-active .rel-g.sale:not(.act):not(.rec) { opacity:1; filter:none; }
.rel-stage.only-sales.only-active .rel-link.act { opacity:.95; }
.rel-sale-note { font-weight:500; font-size:11px; opacity:.8; margin-top:2px; }
.rel-sale-inline { color:var(--sale); }
.rel-docs-note { margin:-2px 0 6px; }
.rel-group.sup.part rect { fill:color-mix(in srgb, var(--k-partner) 16%, transparent); stroke:var(--k-partner); }
.rel-group.sup.part .rel-gt { fill:var(--k-partner); }
/* Примеры на старте: длинные подписи переносятся, а не уезжают за экран */
#relStartEx .rel-chip { max-width:100%; white-space:normal; text-align:left; line-height:1.35; }
/* Дерево связей: сводка для администратора — свежесть связей и типы партнеров */
.rel-diag { margin:8px 0 0; padding:8px 12px; border:1px dashed var(--border); border-radius:var(--radius-s); font-size:12px; color:var(--txt2); line-height:1.5; }
.rel-diag b { color:var(--txt); }
.rel-diag-err { color:var(--danger); font-weight:700; }
.rel-diag-top { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-bottom:4px; }
.rel-diag-btn { padding:5px 12px; font-weight:700; font-size:12px; }
.rel-diag-log { margin:6px 0; padding:8px 10px; background:var(--bg2); border-radius:8px; font:12px/1.45 ui-monospace, Menlo, monospace; white-space:pre-wrap; max-height:220px; overflow:auto; }
.rel-diag-sub { margin-top:6px; font-weight:700; color:var(--txt); }
.rel-regs { margin-top:8px; } .rel-regs summary { cursor:pointer; font-weight:700; color:var(--txt); }
.rel-regs > div { padding-left:4px; }
/* Дерево связей: «⧉» — раскрыть узел рядом отдельным деревом (видно при наведении) */
.rel-bes { opacity:0; pointer-events:none; transition:opacity .15s; cursor:pointer; }
.rel-node:hover .rel-bes, .rel-node.sel .rel-bes, .rel-node:focus-within .rel-bes { opacity:1; pointer-events:auto; }
.rel-group:hover .rel-bes, .rel-group:focus-within .rel-bes { opacity:1; pointer-events:auto; }
.rel-hid text { font-size:10px; }
.rel-hide-chip i { font-style:normal; color:var(--muted); }
.rel-bes circle { fill:var(--bg); stroke:var(--accent); stroke-width:1; }
.rel-bes text { font:800 11px var(--font); fill:var(--accent); text-anchor:middle; }
/* Квоты: отвязка заказа ПРАДО тегом /podsklad */
.q-tag{display:inline-block;font-family:var(--mono,monospace);font-size:11px;font-weight:700;padding:1px 6px;border-radius:4px;background:var(--bg3);color:var(--accent);margin-right:4px;}
.rd-table tr.q-unl td:first-child{box-shadow:inset 3px 0 0 var(--accent);}
.rd-table tr.q-sec td{background:transparent;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:12px 8px 6px;cursor:default;}
.q-tile-unl .big{color:var(--accent);}
.q-unl-bar{font-size:12px;color:var(--muted);margin:-4px 0 10px;}
.q-unl-bar a{color:var(--accent);}
.q-dtable tr.q-d-unl td{font-size:11px;color:var(--muted);background:transparent;display:table-cell;}
.q-dtable tr.q-d-unl td span{font-weight:600;}
.q-dtable tr.q-d-unl a,.oc-unl a{color:var(--muted);text-decoration:underline;}
.oc-unl{font-size:11.5px;color:var(--muted);margin:2px 0 8px;}
@media (max-width:640px){
  .rd-table tr.q-sec{border:0;background:transparent;padding:4px 0;}
  .rd-table tr.q-sec td::before{display:none;}
  .q-dtable tr.q-d-unl td{display:block;}
  .q-dtable tr.q-d-unl td::before{display:none;}
}
.rd-table tr.q-free td:first-child{box-shadow:inset 3px 0 0 var(--border);}
/* Карточка заказа: колонки квоты ПРАДО выделены цветом, чтобы было видно,
   какие колонки добавила галочка. */
.oc-q.on th.q-col,.oc-q.on td.q-col{background:color-mix(in srgb,var(--accent) 5%,var(--bg2));}
.oc-q.on th.q-col{color:color-mix(in srgb,var(--accent) 70%,var(--muted));}
.oc-q.on th.q-first,.oc-q.on td.q-col[data-label="Квота ПРАДО"]{box-shadow:inset 2px 0 0 color-mix(in srgb,var(--accent) 45%,transparent);}
.oc-q.on th.q-last,.oc-q.on td.q-col[data-label="Заказы ПРАДО"]{box-shadow:inset -2px 0 0 color-mix(in srgb,var(--accent) 45%,transparent);}
.oc-q-toggle input:checked+span{color:var(--accent);}
@media (max-width:640px){
  .oc-q.on td.q-col{box-shadow:none !important;border-radius:4px;padding:4px 6px !important;}
}
/* Подпись под таблицей не прилипает к её рамке: тень рамки наезжала на текст. */
.table-wrap+p,.table-wrap+.cap,.oc-q+script+p{margin-top:10px;}
.oc-q{margin-bottom:10px;}
/* Карточка заказа: реквизиты свёрнуты, при раскрытии — блоки по смыслу */
.oc-req{margin:18px 0 6px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);}
.oc-req summary{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px;padding:12px 16px;cursor:pointer;list-style:none;}
.oc-req summary::-webkit-details-marker{display:none;}
.oc-req summary::before{content:'▸';color:var(--muted);}
.oc-req[open] summary::before{content:'▾';}
.oc-req-t{font-weight:700;font-size:16px;}
.oc-req-s{color:var(--txt2);font-size:13.5px;}
.oc-req-s b{color:var(--txt);}
.oc-req-more{margin-left:auto;font-size:12px;color:var(--accent);}
.oc-req[open] .oc-req-more{display:none;}
.oc-rbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;padding:0 12px 12px;}
.oc-rb{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-s);padding:10px 12px;}
.oc-rb h4{margin:0 0 6px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);}
.oc-rb p{margin:0;font-size:13px;white-space:pre-wrap;overflow-wrap:anywhere;}
.oc-rb-wide{grid-column:1/-1;}
.oc-kv{display:flex;gap:10px;justify-content:space-between;font-size:13px;line-height:1.45;padding:2px 0;}
.oc-kv span{color:var(--muted);flex:0 0 auto;}
.oc-kv b{font-weight:500;text-align:right;overflow-wrap:anywhere;}
/* Карточка заказа: наименование товара целиком, с переносом, без обрезки. */
.card-table td.oc-name{min-width:260px;white-space:normal;overflow-wrap:anywhere;}
@media (max-width:640px){ .card-table td.oc-name{min-width:0;} }
/* Сортировка по заголовку (tablesort.js) */
th.ts-th{cursor:pointer;user-select:none;-webkit-user-select:none;}
th.ts-th:hover{color:var(--accent);}
th.ts-th::after{content:' ⇅';opacity:.35;font-size:10px;}
th.ts-asc::after{content:' ▲';opacity:1;}
th.ts-desc::after{content:' ▼';opacity:1;}
th[data-sort="orig"]::after{content:'';}
/* Повторяющиеся позиции и группировка (tablesort.js) */
.oc-dup{display:inline-block;margin-left:6px;padding:0 6px;border-radius:8px;font-size:10.5px;color:var(--muted);background:var(--bg3);white-space:nowrap;vertical-align:1px;}
.oc-grp-toggle{margin:4px 0 10px;}
.card-table tr.ts-sec-a td{background:color-mix(in srgb,var(--txt) 3%,var(--bg2));}
.card-table tr.ts-sec-b td{background:var(--bg2);}
.card-table tr.ts-sec-start td{border-top:2px solid var(--border);}
.card-table td.ts-hid{display:none;}
.q-merged{margin-top:3px;font-size:10.5px;color:var(--muted);}
.card-table td[rowspan]:not([rowspan="1"]){vertical-align:middle;}
/* Готовность заказов: колонка «Квоты ПРАДО» — мелко, бледным блоком */
.rd-c-quota{min-width:150px;}
.rq{background:color-mix(in srgb,var(--accent) 5%,transparent);border-radius:6px;padding:4px 7px;font-size:11px;line-height:1.5;color:var(--txt2);}
.rq-l{display:flex;justify-content:space-between;gap:10px;white-space:nowrap;}
.rq-l b{font-weight:600;font-variant-numeric:tabular-nums;color:var(--txt2);}
.rq-stock b{color:var(--success);}
.rq-nq,.rq-nq b{color:var(--danger);opacity:.8;}
.rq-ex,.rq-ex b{color:var(--danger);}
@media (max-width:640px){ .rd-c-quota{min-width:0;} .rd-table td.rd-c-quota .rq{flex:1;} }
/* Квоты: группировка по месяцам квоты, «только этот заказ» */
.q-only{display:block;white-space:nowrap;margin-top:4px;padding:0;border:0;background:none;font:inherit;font-size:11px;color:var(--accent);cursor:pointer;text-decoration:underline dotted;}
.q-also{display:block;color:var(--accent) !important;opacity:.85;margin-bottom:3px;}
.q-only-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0 0 10px;padding:8px 12px;border-radius:var(--radius-s);background:color-mix(in srgb,var(--accent) 7%,var(--bg2));font-size:13px;}
.q-gl-nq b{color:var(--danger);}
@media (max-width:640px){ .q-only{display:inline-block;margin-left:8px;} }
/* Квоты: разделы таблицы заметнее и сворачиваются */
.rd-table tr.q-sec[data-sec] td{background:var(--bg3);border-top:2px solid var(--border);border-bottom:1px solid var(--border);
  font-size:12px;letter-spacing:.04em;color:var(--txt);padding:11px 10px;cursor:pointer;user-select:none;-webkit-user-select:none;}
.rd-table tr.q-sec[data-sec] td small{display:inline !important;margin-left:10px;font-size:11px;font-weight:600;color:var(--muted);text-transform:none;letter-spacing:0;}
.rd-table tr.q-sec[data-sec]:hover td{color:var(--accent);}
.q-sec-caret{display:inline-block;width:16px;color:var(--muted);}
@media (max-width:640px){ .rd-table tr.q-sec[data-sec]{border:1px solid var(--border);border-radius:var(--radius-s);background:var(--bg3);padding:6px 8px;margin-top:8px;} .rd-table tr.q-sec[data-sec] td{border:0;background:transparent;padding:4px 2px;} }
/* Вложения заказа (files.js): значок и окошко поверх */
.pf-ico{display:inline-block;margin-left:6px;padding:1px 7px;border:1px solid var(--border);border-radius:10px;background:var(--bg2);
  font:inherit;font-size:11px;line-height:1.5;color:var(--txt2);cursor:pointer;white-space:nowrap;vertical-align:1px;}
.pf-ico:hover{border-color:var(--accent);color:var(--accent);}
.pf-pop{position:fixed;z-index:1000;width:min(380px,calc(100vw - 16px));max-height:min(420px,70vh);display:flex;flex-direction:column;
  background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 10px 30px rgba(0,0,0,.18);}
.pf-head{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border-bottom:1px solid var(--border);font-size:13px;}
.pf-x{border:0;background:none;font-size:20px;line-height:1;color:var(--muted);cursor:pointer;padding:0 4px;}
.pf-list{overflow:auto;padding:4px 0;}
.pf-row{padding:7px 12px;border-bottom:1px solid var(--border);}
.pf-row:last-child{border-bottom:0;}
.pf-name{font-size:13px;font-weight:600;color:var(--txt);overflow-wrap:anywhere;}
.pf-ext{font-weight:400;color:var(--muted);}
.pf-meta{font-size:11.5px;color:var(--muted);margin-top:2px;}
.pf-note{padding:7px 12px;font-size:11px;color:var(--muted);border-top:1px solid var(--border);}
/* Квоты: колонка оплаты; окошко со списком платежей (files.js) */
.q-c-pay{min-width:110px;}
.q-c-pay .rd-pct{align-items:flex-end;}
.rd-table td.q-c-pay small.q-pay1{display:block;margin-top:3px;font-size:11px;white-space:nowrap;}
.pf-pay{display:block;margin:2px 0 0 auto;padding:0;border:0;background:none;font:inherit;font-size:11px;color:var(--accent);cursor:pointer;text-decoration:underline dotted;white-space:nowrap;}
.pf-payrow{display:flex;justify-content:space-between;gap:12px;font-size:13px;}
.pf-payrow b{font-variant-numeric:tabular-nums;}
.pf-neg{color:var(--danger);}
@media (max-width:640px){ .q-c-pay{min-width:0;} .pf-pay{margin:2px 0 0;} }
/* Окошки вложений и оплат — непрозрачные: у стеклянных тем --bg2 полупрозрачный. */
.pf-pop{background:#fff;backdrop-filter:none;-webkit-backdrop-filter:none;}
[data-theme="dark"] .pf-pop,[data-theme="glass-dark"] .pf-pop,[data-theme="apple-dark"] .pf-pop{background:#2A231D;}
.pf-sum{display:flex;justify-content:space-between;gap:12px;padding:5px 12px 0;font-size:13px;border-top:1px solid var(--border);}
.pf-sum+.pf-sum{border-top:0;}
.pf-sum b{font-variant-numeric:tabular-nums;}
.pf-left b{color:var(--danger);}
.rd-table td.q-c-pay small.q-left{color:var(--danger);opacity:.85;}

/* Дерево связей: меню узла (правая кнопка / удержание), связи между деревьями. */
.rel-svg { -webkit-touch-callout:none; }
.rel-x circle { stroke:var(--danger); } .rel-x text { fill:var(--danger); }
.rel-node.root .rel-x { opacity:.75; pointer-events:auto; }
.rel-menu { position:absolute; z-index:6; min-width:230px; max-width:320px; padding:6px; border-radius:var(--radius-s);
  border:1px solid var(--border); background:var(--bg); box-shadow:0 10px 30px rgba(0,0,0,.22); display:flex; flex-direction:column; gap:1px; }
.rel-menu[hidden] { display:none; }
.rel-menu-t { padding:6px 10px 7px; font:700 12px var(--font); color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  border-bottom:1px solid var(--divider); margin-bottom:3px; }
.rel-menu button, .rel-menu a { display:block; width:100%; text-align:left; padding:9px 10px; border:0; border-radius:8px; background:none;
  font:600 13px var(--font); color:var(--txt); cursor:pointer; text-decoration:none; }
.rel-menu button:hover, .rel-menu button:focus-visible, .rel-menu a:hover { background:var(--acc-s); color:var(--accent); outline:none; }
.rel-menu-links:not(:empty) { border-top:1px solid var(--divider); margin-top:3px; padding-top:3px; }
.rel-cross-box { position:absolute; left:10px; top:10px; z-index:5; max-width:calc(100% - 70px); }
.rel-cross-box[hidden] { display:none; }
.rel-cross-box > .btn-ghost { background:var(--bg); font-size:13px; }
.rel-cross-menu { margin-top:6px; width:min(440px, calc(100vw - 60px)); max-height:min(60vh, 460px); overflow:auto; padding:10px 12px;
  border-radius:var(--radius-s); border:1px solid var(--border); background:var(--bg); box-shadow:0 10px 30px rgba(0,0,0,.22);
  font-size:13px; color:var(--txt); display:flex; flex-direction:column; gap:6px; touch-action:pan-y; }
.rel-cross-menu[hidden] { display:none; }
.rel-cross-menu label { display:flex; gap:8px; align-items:flex-start; cursor:pointer; }
.rel-cross-menu input { width:16px; height:16px; margin:1px 0 0; flex-shrink:0; accent-color:var(--accent); }
.rel-cross-type summary { cursor:pointer; padding:4px 0; font-weight:600; }
.rel-cross-type summary label { display:inline-flex; }
.rel-cross-item { padding:4px 0 4px 22px; font-size:12px; color:var(--txt2); }
.rel-xl { fill:none; stroke:var(--accent); stroke-width:1.6; stroke-dasharray:7 4; opacity:.8; pointer-events:stroke; }
.rel-xl.x-same { stroke-dasharray:2 4; stroke-linecap:round; stroke-width:2.2; }
.rel-xl.x-via { stroke:var(--k-object); opacity:.6; stroke-width:1.3; }
.rel-xl.x-via.k-partner { stroke:var(--k-partner); } .rel-xl.x-via.k-counterparty { stroke:var(--k-counterparty); } .rel-xl.x-via.k-person { stroke:var(--k-person); }
.rel-xp { cursor:pointer; }
.rel-xp rect { fill:var(--bg); stroke:var(--k-object); stroke-width:1.2; stroke-dasharray:4 3; }
.rel-xp.k-partner rect { stroke:var(--k-partner); } .rel-xp.k-counterparty rect { stroke:var(--k-counterparty); } .rel-xp.k-person rect { stroke:var(--k-person); }
.rel-xp:hover rect { stroke-dasharray:none; stroke-width:2; }
.rel-xp .rel-gt { fill:var(--txt); }
/* Воронка в карточке узла. */
.rel-funnel { display:flex; flex-direction:column; gap:10px; font-size:13px; }
.rel-fn-top { display:flex; justify-content:space-between; gap:10px; color:var(--txt); }
.rel-fn-top i { font-style:normal; color:var(--muted); font-size:11px; }
.rel-fn-top b { white-space:nowrap; }
.rel-fn-bar { height:8px; border-radius:4px; background:var(--divider); margin-top:4px; overflow:hidden; }
.rel-fn-bar span { display:block; height:100%; border-radius:4px; background:var(--k-partner); }
.rel-fn-bar.s1 span { background:var(--accent); } .rel-fn-bar.s2 span { background:var(--sale); } .rel-fn-bar.s3 span { background:var(--was); }
.rel-fn-sub { font-size:11px; color:var(--muted); margin-top:3px; }
.rel-fn-back { color:var(--danger); font-weight:600; }
.card-table tr.muted-row td { opacity:.6; }
/* Дерево связей: поле «Скрыть из дерева» и плашки скрытых. */
.rel-hide-row { display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
.rel-hide { flex:0 1 420px; }
.rel-hide input { padding:9px 12px; font-size:13px; }
.rel-hidden { flex:1 1 300px; }
.rel-hidden-t { font:700 12px var(--font); color:var(--muted); }
.rel-hide-chip { background:var(--bg3, var(--divider)); color:var(--txt2); text-decoration:line-through; text-decoration-color:var(--muted); }

/* ── Производство (report_production.js) ── */
.pr-top { display:flex; justify-content:space-between; align-items:center; gap:10px; margin-bottom:12px; flex-wrap:wrap; }
.pr-muted { font-size:12px; color:var(--muted); white-space:normal; }
.pr-filters { display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; margin-bottom:14px; }
.pr-filters select, .pr-dates input { padding:7px 10px; border-radius:var(--radius-s); border:1px solid var(--border);
  background:var(--bg2); color:var(--txt); font:inherit; font-size:13px; }
.pr-dates { display:inline-flex; align-items:center; gap:6px; color:var(--muted); }
.pr-extra { font-size:12px; color:var(--muted); }
.pr-table td { white-space:normal; }
.card .pr-wrap { overflow-x:auto; -webkit-overflow-scrolling:touch; }
.pr-wrap .data-table { min-width:900px; }
.pr-draft td { opacity:.6; }
.pr-bar { display:inline-block; width:70px; height:6px; border-radius:3px; background:var(--bg3); vertical-align:middle; overflow:hidden; }
.pr-bar i { display:block; height:100%; background:var(--success); }
.pr-lines { display:grid; column-gap:0; margin:4px 0 8px; padding:6px 10px; background:var(--bg2);
  border:1px solid var(--border); border-radius:var(--radius-s); font-size:12.5px; }
.pr-lh { font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--muted);
  padding:4px 0; border-bottom:1px solid var(--border); white-space:nowrap; }
.pr-lc { padding:5px 0; border-bottom:1px solid var(--divider); overflow-wrap:anywhere; font-variant-numeric:tabular-nums; }
.pr-lh.r, .pr-lc.r { text-align:right; white-space:nowrap; padding-left:14px; }

/* Производительность: цвета бригад — эталонная палитра (validate_palette.js:
   светлая — на #fff, тёмная — на #242018). */
.pr-viz { --s1:#2a78d6; --s2:#eb6834; --s3:#1baf7a; --s4:#eda100; --s0:#9a9384; }
[data-theme$="dark"] .pr-viz { --s1:#3987e5; --s2:#d95926; --s3:#199e70; --s4:#c98500; --s0:#7d766a; }
.pr-viz .s0 { fill:var(--s0); background:var(--s0); } .pr-viz .s1 { fill:var(--s1); background:var(--s1); }
.pr-viz .s2 { fill:var(--s2); background:var(--s2); } .pr-viz .s3 { fill:var(--s3); background:var(--s3); }
.pr-viz .s4 { fill:var(--s4); background:var(--s4); }
.pr-chart-h { font-size:12px; font-weight:700; color:var(--txt2); margin:6px 0 4px; }
.pr-legend { display:flex; flex-wrap:wrap; gap:4px 14px; font-size:12px; color:var(--txt2); margin-bottom:4px; }
.pr-key { display:inline-block; width:10px; height:10px; border-radius:2px; margin-right:6px; vertical-align:-1px; }
.pr-chart-wrap { overflow-x:auto; margin-bottom:12px; }
.pr-chart { display:block; }
.pr-grid { stroke:var(--divider); stroke-width:1; }
.pr-ax { font-size:10px; fill:var(--muted); font-variant-numeric:tabular-nums; }
.pr-ax.we { fill:var(--danger); opacity:.7; }
.pr-hit { fill:transparent; }
.pr-hit:hover { fill:var(--txt); fill-opacity:.06; }
.pr-late { font-size:13px; color:var(--danger); margin:0 0 10px; }
.pr-note { margin-top:8px; }
.pr-foot { margin-top:10px; }
.pr-bwrap { overflow-x:auto; }
.pr-brig { table-layout:auto; min-width:520px; }
.pr-brig td { white-space:nowrap; }
.pr-ax.m { font-weight:700; }

/* Диаграмма Ганта по заказам в производство. Цвета полосок заданы
   заказчиком (01.10.2026): всего — #a95111, выполнено — #64cf30. */
.pg { --pg-total:#a95111; --pg-done:#64cf30; }
.pg-wrap { overflow-x:auto; -webkit-overflow-scrolling:touch; }
.pg-grid { min-width:760px; display:grid; grid-template-columns:minmax(220px, 300px) 1fr; }
.pg-left { display:grid; grid-template-columns:112px 1fr; gap:10px; padding:8px 12px 8px 0; align-items:start; }
.pg-h { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--muted);
  border-bottom:1px solid var(--border); padding-top:4px; padding-bottom:8px; }
.pg-axis { position:relative; height:30px; }
.pg-tick { position:absolute; bottom:8px; transform:translateX(-50%); font-size:10.5px; font-weight:600; text-transform:none;
  letter-spacing:0; color:var(--muted); white-space:nowrap; font-variant-numeric:tabular-nums; }
.pg-tick.m { color:var(--txt2); font-weight:700; }
.pg-row { display:contents; cursor:pointer; }
.pg-row > div { border-bottom:1px solid var(--divider); }
.pg-row:hover > div { background:color-mix(in srgb, var(--txt) 4%, transparent); }
.pg-row.pr-draft > div { opacity:.6; }
.pg-num { font-weight:700; font-size:13px; white-space:nowrap; }
.pg-cl { font-size:13px; overflow-wrap:anywhere; }
.pg-track { position:relative; padding:10px 0; min-height:44px; }
.pg-lane { position:relative; height:16px; margin:3px 0; }
.pg-bar { position:absolute; top:2px; height:12px; border-radius:3px; min-width:4px; }
.pg-total { background:var(--pg-total); }
.pg-total.open { background:linear-gradient(90deg, var(--pg-total) 70%, transparent); }
.pg-done { background:var(--pg-done); }
.pg-lbl { position:absolute; top:0; padding:0 6px; font-size:11.5px; line-height:16px; color:var(--txt2);
  white-space:nowrap; font-variant-numeric:tabular-nums; pointer-events:none; }
.pg-lbl.l { text-align:right; }
.pg-none { color:var(--muted); font-style:italic; padding-left:0; }
.pg-we { position:absolute; top:0; bottom:0; background:color-mix(in srgb, var(--txt) 4%, transparent); }
.pg-today { position:absolute; top:0; bottom:0; width:0; border-left:2px dashed var(--danger); opacity:.7; z-index:1; }
.pg-legend .pg-k-total, .pg-k-total { background:#a95111; }
.pg-legend .pg-k-done, .pg-k-done { background:#64cf30; }
.pg-k-today { display:inline-block; width:0; height:12px; border-left:2px dashed var(--danger); margin-right:6px; vertical-align:-1px; }
.pg-late { cursor:help; }
/* Колонка заказа не уезжает при прокрутке шкалы вбок. */
.pg-left { position:sticky; left:0; z-index:2; background:var(--bg2); }
.pg-row:hover > .pg-left { background:color-mix(in srgb, var(--txt) 4%, var(--bg2)); }
@media (max-width: 640px) {
  .pg-grid { grid-template-columns:132px 1fr; min-width:600px; }
  .pg-left { grid-template-columns:1fr; gap:2px; padding-right:8px; }
  .pg-h.pg-left span + span { display:none; }
  .pg-cl { font-size:12px; color:var(--txt2); }
  .pg-cl .pr-muted { display:none; }
}

/* ── Разделы на главной: раскрываются и сворачиваются (details/summary). ── */
.rsec { margin:0 0 20px; }
.rsec > summary { list-style:none; cursor:pointer; display:flex; align-items:center; gap:10px;
                  padding:6px 2px 12px; color:var(--txt); font-size:17px; font-weight:700;
                  -webkit-user-select:none; user-select:none; }
.rsec > summary::-webkit-details-marker { display:none; }
.rsec > summary::before { content:'›'; display:inline-block; width:14px; color:var(--muted);
                          font-size:20px; line-height:1; transition:transform .15s; }
.rsec[open] > summary::before { transform:rotate(90deg); }
.rsec > summary:focus-visible { outline:2px solid var(--accent); outline-offset:2px; border-radius:var(--radius-s); }
.rsec-count { color:var(--muted); font-size:13px; font-weight:600; }
.rsec:not([open]) { margin-bottom:6px; }
.home-rest { margin-top:6px; }
@media (prefers-reduced-motion: reduce) { .rsec > summary::before { transition:none; } }

/* Дерево связей: найденное Михалычем в интернете — пунктиром, цвет по статусу
   относительно 1С: 🆕 нет в базе, ⚠️ есть без связи, ✓ связан. */
.rel { --web:#2E86DE; --web-new:#E8590C; --web-known:#C99700; --web-linked:#2F9E44; }
.rel-node.web rect:first-of-type { stroke-dasharray:5 3; stroke:var(--web); stroke-width:1.6; }
/* Всё из интернета — синим; есть ли это в 1С — значком в подписи (🆕 ⚠️ ✓). */
.rel-node.web rect:first-of-type { fill:color-mix(in srgb, var(--web) 7%, var(--bg2)); }
.rel-node.web .rel-bar { fill:var(--web); }
.rel-link.web { stroke:var(--web); stroke-dasharray:6 4; stroke-width:1.6; opacity:.85; }
/* Наша связь из 1С, которую подтвердил интернет, — синяя сплошная рамка. */
.rel-node.webhit:not(.web) rect:first-of-type { stroke:var(--web); stroke-width:2.4; stroke-dasharray:none;
  filter:drop-shadow(0 0 4px color-mix(in srgb, var(--web) 45%, transparent)); }
.rel-link.webhit { stroke:var(--web); stroke-width:2.2; stroke-dasharray:none; opacity:.95; }
.rel-group.webhit:not(.web) rect { stroke:var(--web); stroke-width:1.4; }
.rel-webhit-tag { font-style:normal; }
.rel-legend i.k-web { background:transparent; border:1.5px dashed #2E86DE; }
.rel-legend i.k-webhit { background:transparent; border:2px solid #2E86DE; }
.rel-webai span { color:#2E86DE; }
/* «🌐 ИИ-связи»: синее — ярко, остальное приглушено. */
.rel-stage.only-web .rel-g { transition:opacity .2s, filter .2s; }
.rel-stage.only-web .rel-g:not(.web):not(.webhit):not(.root):not(.webbusy) { opacity:.22; filter:grayscale(1); }
.rel-stage.only-web .rel-g:not(.web):not(.webhit):not(.root):hover { opacity:.6; }
.rel-stage.only-web .rel-link:not(.web):not(.webhit) { opacity:.08; }
.rel-node.webbusy rect:first-of-type { stroke:var(--web); stroke-width:2.2; stroke-dasharray:6 4; animation:rel-web-ants 1s linear infinite; }
@keyframes rel-web-ants { to { stroke-dashoffset:-20; } }
.rel-group.web rect { fill:color-mix(in srgb, var(--web) 14%, transparent); stroke:var(--web); stroke-dasharray:5 3; stroke-width:1.2; }
.rel-group.web .rel-gt { fill:var(--web); font-weight:800; }
.rel-live.rel-webnote { color:var(--web); background:color-mix(in srgb, var(--web) 12%, transparent); }
.rel-web { display:flex; flex-direction:column; gap:6px; align-items:flex-start; font:500 13px var(--font); }
.rel-web .btn-ghost { padding:6px 12px; }
.rel-web-run { display:flex; align-items:center; gap:8px; font-weight:700; color:var(--web); }
.rel-web-sum { font-weight:600; }
.rel-web-err summary { cursor:pointer; color:var(--muted); }
.rel-web-err ul { margin:4px 0 0 18px; padding:0; color:var(--muted); }
.rel-spin { width:12px; height:12px; flex:none; border-radius:50%; border:2px solid color-mix(in srgb, var(--web) 30%, transparent);
  border-top-color:var(--web); animation:rel-spin .8s linear infinite; }
@keyframes rel-spin { to { transform:rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .rel-node.webbusy rect:first-of-type, .rel-spin { animation:none; } }

/* ИИ-анализ по интернету: список для Михалыча, вопрос в карточке и в окне Михалыча. */
.rel-weblist { display:flex; flex-wrap:wrap; gap:8px; align-items:center; padding:6px 10px; border:1px dashed var(--web, #2E86DE);
  border-radius:12px; background:color-mix(in srgb, #2E86DE 6%, transparent); }
.rel-weblist[hidden] { display:none; }
.rel-weblist-t { font:700 13px var(--font); color:#2E86DE; }
.rel-weblist .btn-accent, .rel-weblist .btn-ghost { padding:7px 14px; }
.rel-node.weblisted rect:first-of-type { stroke:#2E86DE; stroke-width:2.6; }
.rel-web-acts { display:flex; flex-wrap:wrap; gap:8px; }
.rel-web-ask { font:600 13px var(--font); color:var(--txt); }
.rel-web-opts { display:flex; flex-direction:column; gap:6px; align-items:stretch; width:100%; }
.rel-web-opts .btn-ghost { text-align:left; white-space:normal; padding:7px 10px; }
.rel-web-form, .mh-wq-form { display:flex; gap:6px; width:100%; }
.rel-web-form input, .mh-wq-form input { flex:1; min-width:0; font:500 13px var(--font); padding:7px 10px; border:1px solid var(--border);
  border-radius:8px; background:transparent; color:var(--txt); }
.rel-web-form .btn-accent { padding:7px 12px; }
.mh-wq { padding:10px 12px 0; display:flex; flex-direction:column; gap:10px; }
.mh-wq[hidden] { display:none; }
.mh-wq .mh-bubble { border:1px solid rgba(46,134,222,.55); }
.mh-clear { float:right; margin:-2px -4px 4px 10px; padding:3px 9px; font:600 12px var(--font); color:var(--muted, #888);
  background:transparent; border:1px solid var(--border); border-radius:999px; cursor:pointer;
  position:relative; z-index:1; } /* поверх строки автора: в тёмной теме у неё filter, и она перехватывала мышь */
.mh-clear:hover { color:#e5484d; border-color:#e5484d; }
.mh-wq-form { margin-top:8px; }
.mh-wq .mh-graph { margin-top:8px; }

/* Колокольчик: уведомления внутри системы (src/inbox.js). */
.inbox-wrap { position:relative; }
.inbox-btn { position:relative; }
.inbox-n { position:absolute; top:-5px; right:-5px; min-width:18px; height:18px; padding:0 5px; border-radius:9px; background:#E8590C;
  color:#fff; font:800 11px/18px var(--font); text-align:center; }
.inbox-n[hidden] { display:none; }
.inbox-panel { position:absolute; right:0; top:calc(100% + 8px); z-index:60; width:min(380px, calc(100vw - 32px)); max-height:70vh; overflow:auto;
  background:var(--bg2); border:1px solid var(--border); border-radius:14px; box-shadow:0 12px 32px rgba(0,0,0,.18); }
.inbox-panel[hidden] { display:none; }
.inbox-head { padding:10px 14px; border-bottom:1px solid var(--divider); font:700 14px var(--font); }
.inbox-item { display:flex; flex-direction:column; gap:3px; padding:10px 14px; border-bottom:1px solid var(--divider); color:var(--txt); text-decoration:none; font:500 13px var(--font); }
.inbox-item:hover { background:var(--acc-s); }
.inbox-item.new { border-left:3px solid #2E86DE; }
.inbox-item span { color:var(--txt2); }
.inbox-item i { font-style:normal; font-size:11px; color:var(--muted); }
.inbox-empty { padding:16px; color:var(--muted); font:500 13px var(--font); }

/* Инструмент «ИИ-анализ связей». */
.aiw { display:flex; flex-direction:column; gap:14px; }
.aiw-sec { background:var(--bg2); border:1px solid var(--border); border-radius:14px; padding:14px; display:flex; flex-direction:column; gap:10px; min-width:0; }
.aiw-sec[hidden] { display:none; }
.aiw-sec h2 { margin:0; font:800 16px var(--font); }
.aiw-run { border-color:#2E86DE; }
.aiw-run-head { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.aiw-run-head h2 { flex:1; min-width:0; }
.aiw-muted { color:var(--muted); font:500 12px var(--font); }
.aiw-search { position:relative; }
.aiw-search input { width:100%; box-sizing:border-box; }
.aiw-picks { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.aiw-card { border:1px solid var(--border); border-radius:12px; padding:10px 12px; display:flex; flex-direction:column; gap:6px; }
.aiw-card.ask { border-color:#2E86DE; }
.aiw-card-top { font:500 13px var(--font); }
.aiw-st { font:700 12px var(--font); color:#2E86DE; }
.aiw-bar { height:6px; border-radius:3px; background:color-mix(in srgb, #2E86DE 15%, transparent); overflow:hidden; }
.aiw-bar span { display:block; height:100%; background:#2E86DE; transition:width .4s; }
.aiw-bar.hot span { background:#E8590C; }
.aiw-step { font:500 12px var(--font); color:var(--txt2); }
.aiw-ask { display:flex; flex-direction:column; gap:8px; font:500 13px var(--font); }
.aiw-opts { display:flex; flex-direction:column; gap:6px; }
.aiw-opts .btn-ghost { text-align:left; white-space:normal; }
.aiw-form, .aiw-limform { display:flex; flex-wrap:wrap; gap:8px; }
.aiw-form input { flex:1; min-width:160px; }
.aiw-limform label { display:flex; flex-direction:column; gap:3px; font:600 12px var(--font); color:var(--txt2); }
.aiw-limform input { width:150px; }
.aiw-lim { display:grid; grid-template-columns:repeat(auto-fit, minmax(220px, 1fr)); gap:12px; font:500 13px var(--font); }
.aiw-lim .aiw-bar { margin-top:5px; }
.aiw-links { display:flex; gap:14px; font:600 12px var(--font); }
.aiw-table { width:100%; border-collapse:collapse; font:500 13px var(--font); }
.aiw-table th, .aiw-table td { text-align:left; padding:7px 8px; border-bottom:1px solid var(--divider); vertical-align:top; }
.aiw-table .n { text-align:right; white-space:nowrap; }
.aiw-mine { font:500 13px var(--font); }
.aiw-sum { font:700 14px var(--font); }
.aiw-objs { display:flex; flex-direction:column; gap:6px; }
.aiw-obj { border:1px solid var(--border); border-radius:10px; padding:8px 10px; font:500 13px var(--font); }
.aiw-obj summary { cursor:pointer; }
.aiw-obj > div { margin-top:5px; }
.aiw-tag { display:inline-block; padding:1px 7px; border-radius:999px; font:700 11px var(--font); background:var(--acc-s); }
.aiw-tag.m-new { background:color-mix(in srgb, #E8590C 15%, transparent); }
.aiw-tag.m-known { background:color-mix(in srgb, #C99700 18%, transparent); }
.aiw-tag.m-linked { background:color-mix(in srgb, #2F9E44 16%, transparent); }
.aiw-parts { margin:6px 0 0; padding-left:18px; display:flex; flex-direction:column; gap:5px; }
.aiw-role { font:700 12px var(--font); color:var(--txt2); }
.aiw-kids { font:500 13px var(--font); }

/* Дерево во весь экран (⛶). */
.rel.rel-full { position:fixed; inset:0; z-index:200; background:var(--bg); padding:10px 12px; overflow:auto; box-sizing:border-box; }
.rel.rel-full .rel-stage, .rel.rel-full .rel-side { height:calc(100vh - 140px); height:calc(100dvh - 140px); }
body.rel-full-on { overflow:hidden; }
body.rel-full-on .mh-fab { display:none; }

/* Справка при наведении на узел. */
.rel-tip { position:absolute; z-index:40; max-width:320px; padding:10px 12px; border-radius:12px; background:var(--bg2); border:1px solid var(--border);
  box-shadow:0 10px 28px rgba(0,0,0,.18); font:500 12px/1.45 var(--font); color:var(--txt); pointer-events:none; }
.rel-tip[hidden] { display:none; }
.rel-tip-t { font:800 13px var(--font); margin-bottom:4px; }
.rel-tip b { color:var(--txt2); font-weight:700; }

/* Сопоставление найденного ИИ с 1С. */
.rel-map { display:flex; flex-direction:column; gap:6px; font:500 13px var(--font); }
.rel-map-now i, .rel-map-row i { font-style:normal; color:var(--muted); font-size:12px; }
.rel-map-row { display:flex; gap:8px; align-items:center; justify-content:space-between; }
.rel-map-row .btn-ghost { padding:4px 10px; font-size:12px; flex:none; }
.rel-map-ok { color:#2F9E44; }
.rel-map-search input { width:100%; box-sizing:border-box; font:500 13px var(--font); padding:7px 10px; border:1px solid var(--border); border-radius:8px; background:transparent; color:var(--txt); }
.rel-map-res { display:flex; flex-direction:column; gap:4px; margin-top:4px; }
.rel-web-hits { display:flex; flex-wrap:wrap; gap:6px 12px; font:600 13px var(--font); }
.aiw-maybe, .aiw-maybe-sum { font:500 12px var(--font); color:var(--txt2); }
.aiw-maybe-sum { padding:8px 10px; border-radius:10px; background:color-mix(in srgb, #C99700 12%, transparent); }
.aiw-maybe span { margin-right:10px; white-space:nowrap; }
.aiw-maybe i, .aiw-maprow i { font-style:normal; color:var(--muted); }
.aiw-mini { padding:2px 8px !important; font-size:11px !important; }
.aiw-link { border:0; background:transparent; color:#2E86DE; cursor:pointer; font:700 13px var(--font); padding:0 4px; }
.aiw-map-in { display:inline; }
.aiw-mapbox { margin-top:6px; padding:8px 10px; border:1px dashed #2E86DE; border-radius:10px; display:flex; flex-direction:column; gap:6px; }
.aiw-maprow { display:flex; justify-content:space-between; gap:8px; align-items:center; font:500 12px var(--font); }
.aiw-mapq { width:100%; box-sizing:border-box; padding:6px 9px; border:1px solid var(--border); border-radius:8px; background:transparent; color:var(--txt); }
.aiw-danger { margin-top:6px; padding:10px 12px; border:1px dashed #E8590C; border-radius:10px; display:flex; flex-direction:column; gap:6px; align-items:flex-start; font:500 13px var(--font); }
.inbox-tree { display:block; padding:6px 14px 10px 17px; margin-top:-6px; border-bottom:1px solid var(--divider); font:700 12px var(--font); color:#2E86DE; text-decoration:none; }
.aiw-treebtn { font:700 12px var(--font); color:#2E86DE; text-decoration:none; white-space:nowrap; }
.rel-group.merged rect { stroke:#2E86DE; stroke-dasharray:5 3; }
.rel-gw { fill:#2E86DE; font-weight:800; }
/* Глубина ИИ-анализа при запуске. */
.rel-web-plan, .aiw-plan { display:flex; flex-wrap:wrap; gap:6px 10px; align-items:center; font:600 12px var(--font); color:var(--txt2); }
.rel-web-plan label, .aiw-plan label { display:flex; gap:6px; align-items:center; }
.rel-web-plan label[hidden], .aiw-plan label[hidden] { display:none; }
.rel-web-plan select, .aiw-plan select { max-width:260px; font:500 12px var(--font); padding:4px 6px; border:1px solid var(--border); border-radius:8px; background:var(--bg2); color:var(--txt); }
.rel-weblist .rel-web-plan { flex-basis:100%; }

/* «Недоработки»: найденное ИИ, не связанное с нами, — ярко, остальное приглушено. */
.rel-stage.only-gaps .rel-g { transition:opacity .2s, filter .2s; }
.rel-stage.only-gaps .rel-g:not(.gap):not(.root):not(.webbusy) { opacity:.2; filter:grayscale(1); }
.rel-stage.only-gaps .rel-g:not(.gap):not(.root):hover { opacity:.6; }
.rel-stage.only-gaps .rel-link:not(.gap) { opacity:.07; }
.rel-stage.only-gaps .rel-link.gap { stroke:#E8590C; stroke-width:2; stroke-dasharray:6 4; opacity:.95; }
.rel-stage.only-gaps .rel-node.gap rect:first-of-type { stroke:#E8590C; stroke-width:2.4; filter:drop-shadow(0 0 5px rgba(232,89,12,.45)); }
.rel-stage.only-gaps .rel-node.gap.w-known rect:first-of-type { stroke:#C99700; filter:drop-shadow(0 0 5px rgba(201,151,0,.45)); }
.rel-stage.only-gaps .rel-group.gap rect { stroke:#E8590C; stroke-width:1.4; }
/* Карточка: блок запуска и вопрос. */
.rel-web-start { display:flex; flex-direction:column; gap:8px; width:100%; box-sizing:border-box; padding:10px; border:1px solid color-mix(in srgb, #2E86DE 40%, transparent); border-radius:12px; }
.rel-web-start.flash { animation:rel-flash 1.4s ease 2; }
@keyframes rel-flash { 50% { box-shadow:0 0 0 4px rgba(46,134,222,.35); } }
.rel-web-start-t { font:800 13px var(--font); color:#2E86DE; }
.rel-web-qbox { display:flex; flex-direction:column; gap:6px; width:100%; padding:10px; border-radius:12px; background:color-mix(in srgb, #2E86DE 8%, transparent); box-sizing:border-box; }
/* Детальная проработка: контакты и паспорта объектов. */
.rel-web-detail { display:flex; flex-direction:column; gap:6px; width:100%; }
.rel-contacts { margin:0; padding-left:16px; display:flex; flex-direction:column; gap:6px; font:500 12px var(--font); }
.rel-contacts i { font-style:normal; color:var(--muted); }
.rel-web-detail-start { border-color:color-mix(in srgb, #7048E8 45%, transparent); }
.rel-web-detail-start .rel-web-start-t { color:#7048E8; }
.aiw-h3 { margin:6px 0 0; font:800 14px var(--font); }

/* Колокольчик и справка при наведении — без прозрачности: в «Стекле» и
   Apple --bg2 полупрозрачный, сквозь список просвечивала страница. */
.inbox-panel, .rel-tip { background:#FFFFFF; backdrop-filter:none; -webkit-backdrop-filter:none; opacity:1; }
body.dark .inbox-panel, [data-theme="dark"] .inbox-panel, [data-theme="glass-dark"] .inbox-panel, [data-theme="apple-dark"] .inbox-panel,
body.dark .rel-tip, [data-theme="dark"] .rel-tip, [data-theme="glass-dark"] .rel-tip, [data-theme="apple-dark"] .rel-tip { background:#1F1B17; }
.inbox-item { background:transparent; }
.inbox-item.new { background:rgba(46,134,222,.07); }
.rel-menu-sec { margin:6px 0 2px; padding:6px 12px 2px; border-top:1px solid var(--divider); font:800 11px var(--font); color:#2E86DE; text-transform:uppercase; letter-spacing:.04em; }
.rel-menu { max-height:80vh; overflow:auto; }
.rel-menu, .rel-menu-ai { background:#FFFFFF; }
body.dark .rel-menu, [data-theme="dark"] .rel-menu, [data-theme="glass-dark"] .rel-menu, [data-theme="apple-dark"] .rel-menu,
body.dark .rel-menu-ai, [data-theme="dark"] .rel-menu-ai, [data-theme="glass-dark"] .rel-menu-ai, [data-theme="apple-dark"] .rel-menu-ai { background:#1F1B17; }

/* Связи Москомплекта (временный пункт дерева, 04.10.2026): красный пунктир —
   узел конкурента, красная рамка — наш узел, который есть и у Москомплекта. */
.rel { --mk:#C92A2A; }
.rel-node.mk rect:first-of-type { stroke:var(--mk); stroke-width:1.8; stroke-dasharray:5 3; fill:color-mix(in srgb, var(--mk) 7%, var(--bg2)); }
.rel-node.mk .rel-bar { fill:var(--mk); }
.rel-node.mkours rect:first-of-type { stroke:var(--mk); stroke-width:2.4; stroke-dasharray:none; }
.rel-group.mk rect { stroke:var(--mk); stroke-dasharray:4 3; }
.rel-group.mk .rel-gt { fill:var(--mk); }
.rel-legend i.k-mk { background:transparent; border:1.5px dashed #C92A2A; }
.rel-legend i.k-mkours { background:transparent; border:2px solid #C92A2A; }
.rel-mknote { color:var(--mk); border-color:color-mix(in srgb, var(--mk) 40%, transparent); }
.rel-mk span { color:var(--mk); font-weight:600; }
.rel-mk-imp { cursor:pointer; }
.rel-mk-ev li.mk-after { border-left:3px solid var(--mk); padding-left:6px; }
.rel-mk-after { color:var(--mk); }
.rel-link.mk { stroke:var(--mk); stroke-dasharray:6 4; stroke-width:1.6; opacity:.9; }

/* Дальние связи (🔗): дуги справа от узлов, цвет — по дальности (1…7). */
.rel-fl { fill:none; stroke-width:1.8; stroke-dasharray:6 4; opacity:.85; cursor:pointer; pointer-events:stroke; }
.rel-fl:hover { stroke-width:3.2; opacity:1; }
.rel-fl.far-1 { stroke:#7048E8; }
.rel-fl.far-2 { stroke:#4C6EF5; stroke-dasharray:5 4; }
.rel-fl.far-3 { stroke:#1C7ED6; stroke-dasharray:4 4; opacity:.8; }
.rel-fl.far-4 { stroke:#1098AD; stroke-dasharray:3 4; opacity:.75; }
.rel-fl.far-5 { stroke:#0CA678; stroke-dasharray:2 4; opacity:.7; }
.rel-fl.far-6 { stroke:#74B816; stroke-dasharray:2 5; opacity:.65; }
.rel-fl.far-7 { stroke:#F59F00; stroke-dasharray:1 5; opacity:.65; stroke-linecap:round; }
.rel-fl.far-ai { stroke:#2E86DE; stroke-dasharray:8 3 2 3; }
.rel-legend i.far-1, .rel-legend i.far-3, .rel-legend i.far-7, .rel-legend i.far-ai { width:14px; height:0; border-radius:0; margin:0 4px 0 8px; vertical-align:3px; border-top:2px dashed #7048E8; }
.rel-legend i.far-3 { border-top-color:#1C7ED6; }
.rel-legend i.far-7 { border-top:2px dotted #F59F00; }
.rel-legend i.far-ai { border-top-color:#2E86DE; }
.rel-far-leg[hidden] { display:none; }
/* Меню «🔗 Дальние связи ▾». */
.rel-far-wrap { position:relative; }
.rel-far-btn.on { border-color:#7048E8; color:#7048E8; }
.rel-far-menu { position:absolute; z-index:50; top:calc(100% + 6px); left:0; width:min(360px, calc(100vw - 32px)); padding:12px; display:flex; flex-direction:column; gap:10px;
  background:#FFFFFF; border:1px solid var(--border); border-radius:12px; box-shadow:0 12px 32px rgba(0,0,0,.18); font:500 13px var(--font); }
body.dark .rel-far-menu, [data-theme="dark"] .rel-far-menu, [data-theme="glass-dark"] .rel-far-menu, [data-theme="apple-dark"] .rel-far-menu { background:#1F1B17; }
.rel-far-menu[hidden] { display:none; }
.rel-far-row { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.rel-far-row input[type=range] { flex:1; min-width:120px; }

/* Подсказки «что есть что» у настроек и выборов ИИ. */
.ai-hint { display:block; font:500 11.5px/1.4 var(--font); color:var(--muted); margin-top:2px; }
.ai-hint-list { margin:2px 0 0; padding-left:16px; display:flex; flex-direction:column; gap:3px; }
.ai-hint-list b { color:var(--txt2); }
.aiw-limform label { max-width:240px; }
.aiw-limform .ai-hint { font-weight:500; }
.rel-webmode-hint { flex-basis:100%; max-width:640px; margin-top:-4px; }

/* Колокольчик на телефоне: окно по ширине экрана с отступами, под кнопкой
   (у края кнопка не стоит — выравнивание по ней выносило окно за экран). */
@media (max-width: 600px) {
  .inbox-panel { position:fixed; left:12px; right:12px; top:72px; width:auto; max-width:none; max-height:calc(100vh - 96px); max-height:calc(100dvh - 96px); }
}
