
  *{box-sizing:border-box;margin:0;padding:0}
  :root{
    --ink:#16213a;--paper:#eef2f9;--card:#ffffff;--line:#dde3ee;
    --rust:#2546c9;--rust-dk:#1c37a0;--moss:#4a5d3a;--gold:#c08a2d;--muted:#6b7488;
    --shadow:0 1px 0 rgba(20,30,60,.04),0 8px 24px -16px rgba(20,30,60,.30);
  }
  /* Шрифты Fraunces и Spline Sans подключены тегом <link> в шапке index.html.
     Здесь раньше стоял @import, но он не работал: по стандарту CSS такое правило
     обязано идти до любых других правил, а выше него уже были * и :root.
     Браузер молча его игнорировал, и сайт рисовался системными запасными шрифтами. */
  body{font-family:'Spline Sans',system-ui,sans-serif;color:var(--ink);
    background:radial-gradient(circle at 12% 0%,rgba(37,70,201,.06),transparent 40%),var(--paper);
    min-height:100vh;-webkit-font-smoothing:antialiased}

  /* ВХОД */
  .login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px;position:relative;overflow:hidden;
    background:linear-gradient(160deg,#eef3fb 0%,#f7f9fc 55%,#e9eef7 100%)}
  .login-bg{position:absolute;inset:0;z-index:0;pointer-events:none}
  .login-map{width:100%;height:100%;display:block}
  .login-map .route{fill:none;stroke:#9fb3d4;stroke-width:2;stroke-dasharray:7 9;opacity:.55;
    animation:routeflow 2.2s linear infinite}
  .login-map .route-road{stroke:#b9c4d6;stroke-dasharray:3 7;opacity:.5}
  @keyframes routeflow{to{stroke-dashoffset:-32}}
  .login-map .city circle{fill:#fff;stroke:#8aa0c4;stroke-width:2.5}
  .login-map .city-hub circle{fill:#4a8ed6;stroke:#2f6db0}
  .login-map .city text{paint-order:stroke;stroke:#f7f9fc;stroke-width:3px}
  .login-map .city{animation:citypulse 3.2s ease-in-out infinite}
  .login-map .city:nth-child(2){animation-delay:.4s}
  .login-map .city:nth-child(3){animation-delay:.8s}
  .login-map .city:nth-child(4){animation-delay:1.2s}
  .login-map .city:nth-child(5){animation-delay:1.6s}
  .login-map .city:nth-child(6){animation-delay:2s}
  @keyframes citypulse{0%,100%{opacity:.78}50%{opacity:1}}
  .login-map .plane{filter:drop-shadow(0 2px 3px rgba(40,60,90,.25))}
  .login-map .car{filter:drop-shadow(0 2px 2px rgba(20,30,50,.22))}
  .login-card{position:relative;z-index:1}
  @media (max-width:600px){.login-map .city text{font-size:14px}}
  .login-card{width:100%;max-width:400px;background:rgba(255,253,247,.92);backdrop-filter:blur(10px);
    border:1px solid rgba(255,255,255,.7);
    border-radius:22px;box-shadow:0 30px 70px -28px rgba(40,60,100,.45),0 2px 0 rgba(255,255,255,.6) inset;padding:34px 30px}
  .brand{display:flex;align-items:center;gap:12px;margin-bottom:6px}
  .brand .mark{width:38px;height:38px;border-radius:9px;background:linear-gradient(135deg,var(--rust),var(--gold));
    display:grid;place-items:center;color:#fff;font-size:20px}
  .brand .name{font-family:'Fraunces',serif;font-weight:900;font-size:22px;letter-spacing:-.02em;line-height:1}
  .brand .sub{font-size:11px;color:var(--muted);letter-spacing:.08em;text-transform:uppercase;margin-top:2px}
  .login-card h1{font-family:'Fraunces',serif;font-weight:600;font-size:20px;margin:22px 0 4px}
  .login-card p.hint{color:var(--muted);font-size:13px;margin-bottom:20px}

  .field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
  .field.full{grid-column:1/-1}
  .field label{font-size:12px;font-weight:600;color:var(--muted)}
  .field input,.field select,.field textarea{font:inherit;font-size:14px;padding:10px 12px;
    border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink)}
  .field input:focus,.field select:focus,.field textarea:focus{outline:2px solid rgba(37,70,201,.3);
    border-color:var(--rust);background:var(--card)}
  .field .hint{font-size:11px;color:var(--muted)}
  .login-card .field input{font-size:15px;padding:11px 13px}

  .btn{font:inherit;font-weight:600;font-size:14px;cursor:pointer;border-radius:10px;padding:10px 16px;
    border:1px solid var(--line);background:var(--card);color:var(--ink);transition:.15s;display:inline-flex;
    align-items:center;gap:8px}
  .btn:hover{transform:translateY(-1px);box-shadow:var(--shadow)}
  .btn.primary{background:var(--rust);border-color:var(--rust-dk);color:#fff}
  .btn.primary:hover{background:var(--rust-dk)}
  .btn.ghost{background:transparent}
  .btn.ghost.active{background:var(--rust);color:#fff;border-color:var(--rust)}
  .btn.sm{padding:6px 11px;font-size:12.5px;border-radius:8px}
  .btn.danger{color:#c0392b;border-color:#e3b0a8}
  .btn.danger:hover{background:#c0392b;color:#fff;border-color:#c0392b}
  .btn.block{width:100%;justify-content:center;font-size:15px;padding:12px}
  .btn:disabled{opacity:.6;cursor:default;transform:none}
  .err{color:var(--rust-dk);font-size:13px;margin-top:6px;min-height:18px}

  /* APP */
  .app-shell{display:none}
  header.topbar{border-bottom:1px solid var(--line);background:#eef2f9;
    position:sticky;top:0;z-index:60}
  .topbar-inner{padding:12px 22px;display:flex;align-items:center;gap:16px}
  .menu-toggle{display:none;font-size:22px;background:none;border:none;cursor:pointer;color:var(--ink);padding:2px 6px}
  /* Ракета справа в шапке. Отрисована в SVG, а не картинкой: резкая на любом экране,
     весит пару строк и не грузится отдельным запросом. */
  .topbar-rocket{margin-left:auto;display:flex;align-items:center;pointer-events:none;
    animation:rocketFloat 3.6s ease-in-out infinite}
  .topbar-rocket svg{display:block}
  .tr-trail line{animation:rocketTrail 1.6s ease-in-out infinite}
  .tr-trail line:nth-child(2){animation-delay:.25s}
  .tr-trail line:nth-child(3){animation-delay:.5s}
  .tr-flame{transform-origin:62px 22px;animation:rocketFlame .5s ease-in-out infinite alternate}
  @keyframes rocketFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
  @keyframes rocketTrail{0%,100%{opacity:.08}50%{opacity:.3}}
  @keyframes rocketFlame{from{transform:scaleX(.82)}to{transform:scaleX(1.12)}}
  /* Человеку, который просил систему не анимировать, ничего не дёргается. */
  @media (prefers-reduced-motion:reduce){
    .topbar-rocket,.tr-trail line,.tr-flame{animation:none}
  }
  /* На телефоне в шапке и так тесно: бургер, логотип и имя. Ракету прячем. */
  @media (max-width:760px){.topbar-rocket{display:none}}
  .calc-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-bottom:18px}
  @media (max-width:760px){.calc-grid{grid-template-columns:1fr}}
  .calc-panel{padding:18px 20px}
  .calc-h{font-family:'Fraunces',serif;font-weight:600;font-size:16px;margin-bottom:12px}
  .calc-note{font-size:12.5px;color:var(--muted);margin-bottom:12px;line-height:1.4}
  .calc-norm-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid var(--line)}
  .calc-norm-row:last-child{border-bottom:0}
  .cn-label{font-size:14px;font-weight:600;display:flex;flex-direction:column;gap:2px}
  .cn-hint{font-size:11.5px;color:var(--muted);font-weight:400}
  .cn-input{flex:none;display:flex;align-items:center;gap:6px;color:var(--muted);font-size:13px}
  .cn-input input{width:110px;text-align:right;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:14px}
  .calc-period-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px;padding:12px 16px;background:rgba(37,70,201,.06);border-radius:12px;font-size:14px;font-weight:600}
  .calc-period-bar select{font:inherit;font-size:14px;font-weight:600;padding:7px 11px;border:1px solid var(--line);border-radius:9px;background:var(--card);cursor:pointer}
  .calc-save-bar{display:flex;align-items:center;gap:14px}
  .calc-saved{color:var(--moss);font-weight:600;font-size:14px}
  .calc-city-head{display:grid;grid-template-columns:1fr 130px 130px;gap:10px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:700;padding:6px 0;border-bottom:1px solid var(--line)}
  .calc-city-row{display:grid;grid-template-columns:1fr 130px 130px;gap:10px;align-items:center;padding:7px 0;border-bottom:1px solid var(--line)}
  .calc-city-row:last-child{border-bottom:0}
  .ccr-name{font-size:14px;font-weight:600}
  .calc-city-row input{text-align:right;padding:7px 10px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:14px}
  .calc-sum-bar{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap}
  .calc-sum-bar select{font:inherit;font-size:14px;font-weight:600;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);cursor:pointer}
  .calc-sum-cnt{color:var(--muted);font-size:14px}
  .calc-totals{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-bottom:18px}
  @media (max-width:760px){.calc-totals{grid-template-columns:1fr 1fr}}
  .ct-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow)}
  .ct-k{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:600}
  .ct-v{font-family:'Fraunces',serif;font-weight:900;font-size:24px;margin-top:6px;line-height:1}
  /* подпись под числом карточки: чем сумма набрана, если это не очевидно */
  .ct-s{font-size:11px;color:var(--muted);margin-top:6px;line-height:1.3}
  .calc-courier-tbl{width:100%;border-collapse:collapse;font-size:14px}
  .calc-courier-tbl th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:8px 10px;border-bottom:1px solid var(--line)}
  .calc-courier-tbl td{padding:10px;border-bottom:1px solid var(--line)}
  .calc-courier-tbl th:not(:first-child),.calc-courier-tbl td:not(:first-child){text-align:right}
  /* Фильтры свёрнуты и на компьютере: раньше восемь списков и шесть полей дат стояли
     развёрнутыми всегда и съедали ~150 px до первой строки данных. Состояние кнопки
     запоминается, так что тем, кто держит фильтры открытыми, ничего делать не надо. */
  /* Номер заказа не переносится: «KZ-571000» рвалось пополам, и строка таблицы
     вырастала вдвое по высоте. На телефоне карточка не страдает — там своя вёрстка. */
  .orders-tbl td[data-label="ID"]{white-space:nowrap}
  /* «Сортировка»: в столбце статуса теперь три строки — отметка, кто принял и когда.
     Без запаса по ширине столбец сжимался и резал имя кладовщика. */
  .sorting-tbl td[data-label="Кто принял"]{min-width:170px;white-space:nowrap}
  .filters-toggle{display:inline-flex;white-space:nowrap}
  .filters-toggle.has-active{border-color:var(--rust);color:var(--rust);font-weight:700}
  .filters-body{display:none}
  .filters-body.open{display:contents}
  .bottom-nav{display:none}
  .sidebar-backdrop{display:none}
  .show-more{display:none}
  .list-count{display:none}
  .logo{font-family:'Fraunces',serif;font-weight:900;font-size:20px;display:flex;align-items:center;gap:10px}
  .logo-img{height:30px;width:auto;display:block}
  .login-logo-img{height:34px;width:auto;display:block;margin-bottom:4px}
  @media (max-width:760px){.logo-img{height:26px}}
  .logo .mark{width:30px;height:30px;border-radius:7px;background:linear-gradient(135deg,var(--rust),var(--gold));
    display:grid;place-items:center;color:#fff;font-size:16px}
  .logo small{display:block;font-family:'Spline Sans',sans-serif;font-weight:500;font-size:11px;
    color:var(--muted);letter-spacing:.08em;text-transform:uppercase;margin-top:-2px}
  .user-box{margin-left:auto;display:flex;align-items:center;gap:12px;padding-left:14px;border-left:1px solid var(--line)}
  .user-box .who{text-align:right;font-size:13px;line-height:1.2}
  .user-box .who b{display:block}
  .user-box .role{font-size:10px;color:var(--gold);font-weight:700;text-transform:uppercase;letter-spacing:.05em}

  /* боковая панель + контент */
  .app-body{display:flex;align-items:flex-start;min-height:calc(100vh - 57px)}
  /* ── ТЁМНОЕ БОКОВОЕ МЕНЮ ── */
  .sidebar{width:224px;flex:0 0 224px;border-right:1px solid rgba(255,255,255,.06);
    background:#26282c;
    position:sticky;top:57px;align-self:stretch;height:calc(100vh - 57px);padding:16px 12px;
    display:flex;flex-direction:column;overflow:visible;transition:width .18s ease,flex-basis .18s ease}
  .side-nav{display:flex;flex-direction:column;gap:3px;overflow-y:auto;flex:1;min-height:0}
  .side-nav::-webkit-scrollbar{width:5px}
  .side-nav::-webkit-scrollbar-thumb{background:rgba(255,255,255,.12);border-radius:3px}
  .sidebar-logout{margin-top:12px;flex:none;width:100%;justify-content:center;
    color:#ff8f7a;border-color:rgba(255,143,122,.3);background:transparent}
  .sidebar-logout:hover{background:#c0392b;color:#fff;border-color:#c0392b}
  .side-nav button,.side-nav a{font:inherit;font-size:14px;font-weight:600;cursor:pointer;text-align:left;text-decoration:none;
    border:1px solid transparent;background:transparent;color:#b0b3b8;padding:10px 13px;border-radius:10px;
    transition:background .16s,color .16s,transform .16s;display:flex;align-items:center;gap:11px;position:relative}
  .side-nav button:hover,.side-nav a:hover{color:#fff;background:rgba(255,255,255,.07);transform:translateX(2px)}
  /* активный пункт — заливка в цвете группы */
  .side-nav button.active,.side-nav a.active{color:#fff;background:var(--nav-col,#2546c9);border-color:transparent;
    box-shadow:0 3px 12px -2px var(--nav-col,#2546c9)}
  .side-nav button.active svg{color:#fff}
  .side-nav button svg,.side-nav a svg{width:19px;height:19px;flex:none;opacity:.9}
  .side-nav button.disabled{opacity:.32;cursor:default}
  .side-nav button.disabled:hover{background:transparent;color:#b0b3b8;transform:none}
  .side-nav .nav-group{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;
    color:rgba(255,255,255,.55);padding:15px 13px 5px;display:flex;align-items:center;gap:7px}
  .ng-dot{width:7px;height:7px;border-radius:50%;flex:none;box-shadow:0 0 6px currentColor}
  .side-nav .nav-badge{margin-left:auto;font-size:11px;font-weight:800;background:rgba(255,255,255,.16);color:#fff;
    min-width:20px;height:19px;border-radius:10px;display:inline-grid;place-items:center;padding:0 6px}
  .side-nav .nav-badge.nb-crit{background:#e5484d;color:#fff}
  .side-nav button.active .nav-badge{background:rgba(255,255,255,.26)}
  /* профиль пользователя внизу меню */
  .side-user{display:flex;align-items:center;gap:10px;padding:11px 10px;margin-top:10px;flex:none;
    border-top:1px solid rgba(255,255,255,.07)}
  .su-ava{width:32px;height:32px;border-radius:10px;background:linear-gradient(135deg,#2546c9,#6d3bd4);
    color:#fff;display:grid;place-items:center;font-weight:800;font-size:13px;flex:none}
  .su-info{min-width:0;flex:1}
  .su-name{font-size:13px;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .su-role{font-size:11px;color:rgba(255,255,255,.45);display:flex;align-items:center;gap:5px}
  .su-dot{width:6px;height:6px;border-radius:50%;background:#2ecc71;box-shadow:0 0 6px #2ecc71}
  /* кнопка сворачивания */
  .nav-collapse-btn{position:absolute;right:-14px;top:12px;width:28px;height:28px;border-radius:50%;
    border:1px solid var(--line);background:var(--card);color:var(--muted);font-size:16px;line-height:1;
    cursor:pointer;display:grid;place-items:center;z-index:20;transition:.15s;padding:0;
    box-shadow:0 2px 8px rgba(20,30,60,.18);font-weight:700}
  .nav-collapse-btn:hover{background:var(--rust);color:#fff;border-color:var(--rust);transform:scale(1.08)}
  /* свёрнутое меню: только иконки */
  body.nav-collapsed .sidebar{width:66px;flex:0 0 66px;padding:16px 9px}
  body.nav-collapsed .side-nav button span:not(.nav-badge){display:none}
  body.nav-collapsed .side-nav button{justify-content:center;padding:11px 0}
  body.nav-collapsed .side-nav .nav-group{font-size:0;padding:12px 0 5px;justify-content:center}
  body.nav-collapsed .ng-dot{width:18px;height:3px;border-radius:2px}
  body.nav-collapsed .sidebar-logout{font-size:0;padding:9px 0}
  body.nav-collapsed .sidebar-logout::after{content:'⏻';font-size:15px}
  body.nav-collapsed .nav-badge{position:absolute;top:3px;right:4px;min-width:17px;height:17px;font-size:10px;margin:0}
  body.nav-collapsed .side-user{justify-content:center;padding:11px 0}
  body.nav-collapsed .su-info{display:none}
  @media (max-width:900px){.nav-collapse-btn{display:none}body.nav-collapsed .sidebar{width:224px;flex:0 0 224px;padding:16px 12px}
    body.nav-collapsed .side-nav button span{display:inline}body.nav-collapsed .side-nav button{justify-content:flex-start;padding:10px 13px}
    body.nav-collapsed .side-nav .nav-group{font-size:10px;padding:15px 13px 5px;justify-content:flex-start}
    body.nav-collapsed .sidebar-logout{font-size:14px}body.nav-collapsed .sidebar-logout::after{content:''}
    body.nav-collapsed .su-info{display:block}}

  /* ── Дашборд ── */
  .dash-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:16px}
  .dash-card{display:flex;align-items:center;gap:18px;padding:24px 26px;border-radius:18px;border:1px solid var(--line);
    box-shadow:var(--shadow);background:var(--card)}
  .dash-card .dc-ic{width:56px;height:56px;border-radius:14px;display:grid;place-items:center;font-size:24px;flex:none;color:#fff}
  .dash-card .dc-v{font-family:'Fraunces',serif;font-weight:900;font-size:36px;line-height:1}
  .dash-card .dc-k{font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:600;margin-top:4px}
  .dash-card .dc-extra{font-size:12.5px;color:var(--ink);margin-top:7px;font-weight:600}
  .dc-trend{font-size:12px;font-weight:800;margin-top:5px;display:flex;align-items:center;gap:5px}
  .dc-trend span{font-weight:600;color:var(--muted);font-size:11px}
  .dc-trend.tr-up{color:#2e7d32}
  .dc-trend.tr-down{color:#c0392b}
  /* второй ряд карточек дашборда */
  .dash-cards-2{margin-bottom:22px}
  .dash-card.c-total{background:linear-gradient(135deg,#eef2ff,#f8faff)}
  .dash-card.c-total2{background:linear-gradient(135deg,#eefbf3,#f7fdfa)}
  .dash-card.c-top{align-items:flex-start;padding:16px 18px}
  .dc-top{width:100%;display:flex;flex-direction:column;gap:5px}
  .dc-top-h{font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);margin-bottom:4px}
  .dtop-row{display:flex;align-items:center;gap:8px;font-size:13px;line-height:1.5}
  .dtop-i{width:17px;height:17px;border-radius:5px;background:var(--paper);color:var(--muted);
    font-size:10px;font-weight:800;display:grid;place-items:center;flex:none}
  .dtop-row:first-of-type .dtop-i{background:#ffd76e;color:#7a5600}
  .dtop-n{flex:1;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .dtop-v{font-weight:800;font-family:'Fraunces',serif}
  .dtop-empty{font-size:12px;color:var(--muted);padding:8px 0}
  /* склад */
  .wh-cities{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
  .wh-city{padding:9px 20px;border:1px solid var(--line);border-radius:10px;background:var(--card);
    font:inherit;font-size:14px;font-weight:700;cursor:pointer;transition:.15s}
  .wh-city:hover{border-color:var(--rust)}
  .wh-city.active{background:var(--rust);color:#fff;border-color:var(--rust)}
  .wh-toolbar{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap;align-items:center}
  .wh-toolbar input{flex:1;min-width:200px;padding:10px 14px;border:1px solid var(--line);border-radius:10px;font:inherit;font-size:14px}
  .wh-stats{display:flex;gap:12px;margin-bottom:16px;flex-wrap:wrap}
  .wh-stat{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 18px;display:flex;flex-direction:column;gap:3px;min-width:150px}
  .wh-stat span{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.02em}
  .wh-stat b{font-size:22px;font-weight:800;font-family:'Fraunces',serif}
  .wh-cat{font-size:11px;color:var(--muted);margin-top:2px}
  .wh-barcode{font-family:monospace;font-size:13px;letter-spacing:.02em}
  .wh-stock{font-weight:800;font-size:15px}
  .wh-stock.wh-zero{color:var(--muted);font-weight:600}
  .wh-stock-grid{display:flex;gap:10px;flex-wrap:wrap}
  .wh-stock-inp{display:flex;flex-direction:column;gap:4px;flex:1;min-width:90px}
  .wh-stock-inp span{font-size:12px;color:var(--muted)}
  .wh-stock-inp input{padding:9px 11px;border:1px solid var(--line);border-radius:9px;font:inherit}
  /* ---- Склад: обновлённый визуал (карточки статистики, бейджи, боковая панель) ---- */
  .wh2-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:16px}
  .wh2-stat{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px;display:flex;gap:12px;align-items:center;box-shadow:var(--shadow)}
  .wh2-stat-ic{width:40px;height:40px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:19px;flex-shrink:0}
  .wh2-stat-txt{display:flex;flex-direction:column;gap:1px;min-width:0}
  .wh2-stat-txt span{font-size:11.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .wh2-stat-txt b{font-size:21px;font-weight:800;font-family:'Fraunces',serif;line-height:1.15}
  .wh2-stat--blue .wh2-stat-ic{background:#e7ecfc;color:var(--rust)}
  .wh2-stat--green .wh2-stat-ic{background:#e9f1e3;color:var(--moss)}
  .wh2-stat--gold .wh2-stat-ic{background:#faf0dc;color:var(--gold)}
  .wh2-stat--red .wh2-stat-ic{background:#fbe6e6;color:#c23b3b}
  .wh2-stat--grey .wh2-stat-ic{background:#eef0f4;color:var(--muted)}
  .wh2-qf{display:flex;gap:6px;flex-wrap:wrap;margin:2px 0 14px}
  .wh2-qf button{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:999px;padding:7px 14px;font:inherit;font-size:13px;font-weight:600;cursor:pointer}
  .wh2-qf button.active{background:var(--rust);border-color:var(--rust);color:#fff}
  .wh2-badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700}
  .wh2-badge::before{content:'';width:6px;height:6px;border-radius:50%}
  .wh2-badge--ok{background:#e9f1e3;color:var(--moss)}.wh2-badge--ok::before{background:var(--moss)}
  .wh2-badge--low{background:#faf0dc;color:var(--gold)}.wh2-badge--low::before{background:var(--gold)}
  .wh2-badge--out{background:#eef0f4;color:var(--muted)}.wh2-badge--out::before{background:var(--muted)}
  .wh2-badge--err{background:#fbe6e6;color:#c23b3b}.wh2-badge--err::before{background:#c23b3b}
  .wh2-cell-chip{display:inline-block;background:#eef0f4;color:var(--ink);font-family:monospace;font-size:12.5px;padding:2px 8px;border-radius:7px}
  /* боковая скользящая панель товара (вместо центрального модального окна) */
  .wh2-panel-ov{position:fixed;inset:0;background:rgba(15,20,35,.35);z-index:200;display:flex;justify-content:flex-end}
  .wh2-panel{width:min(480px,100vw);background:var(--paper);height:100%;box-shadow:-12px 0 30px -10px rgba(20,30,60,.35);
    display:flex;flex-direction:column;animation:wh2slide .22s ease-out}
  @keyframes wh2slide{from{transform:translateX(24px);opacity:0}to{transform:translateX(0);opacity:1}}
  .wh2-panel-head{padding:18px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;background:var(--card)}
  .wh2-panel-head h3{margin:0;font-family:'Fraunces',serif;font-size:19px}
  .wh2-panel-x{border:none;background:none;font-size:22px;line-height:1;cursor:pointer;color:var(--muted)}
  .wh2-panel-tabs{display:flex;gap:4px;padding:10px 20px 0;background:var(--card)}
  .wh2-panel-tabs button{border:none;background:none;padding:9px 14px;font:inherit;font-weight:600;font-size:13.5px;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent}
  .wh2-panel-tabs button.active{color:var(--rust);border-bottom-color:var(--rust)}
  .wh2-panel-body{flex:1;overflow-y:auto;padding:18px 20px}
  .wh2-panel-foot{padding:14px 20px;border-top:1px solid var(--line);background:var(--card);display:flex;gap:10px;justify-content:flex-end}
  .wh2-headrow{display:flex;gap:14px;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;margin:16px 0}
  .wh2-hfields{display:flex;gap:14px;flex-wrap:wrap}
  .wh2-hfield{display:flex;flex-direction:column;gap:5px;min-width:150px}
  .wh2-hfield span{font-size:12px;color:var(--muted);font-weight:600}
  .wh2-hfield select{padding:9px 12px;border:1px solid var(--line);border-radius:10px;font:inherit;background:var(--card);color:var(--ink)}
  .wh2-hactions{display:flex;gap:10px;flex-wrap:wrap}
  .wh2-impexp{position:relative}
  .wh2-impexp-menu{position:absolute;right:0;top:calc(100% + 6px);background:var(--card);border:1px solid var(--line);border-radius:12px;
    box-shadow:var(--shadow);min-width:220px;z-index:20;overflow:hidden}
  .wh2-impexp-menu button{display:block;width:100%;text-align:left;padding:10px 14px;border:none;background:none;font:inherit;font-size:13.5px;cursor:pointer;color:var(--ink)}
  .wh2-impexp-menu button:hover{background:var(--paper)}
  .wh2-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 18px}
  .wh2-tabs button{font:inherit;font-size:13.5px;font-weight:700;cursor:pointer;padding:10px 15px;border-radius:11px;border:1px solid var(--line);background:var(--card);color:var(--ink);display:inline-flex;align-items:center;gap:7px}
  .wh2-tabs button.active{background:var(--rust);border-color:var(--rust);color:#fff}
  .wh2-tabs button.soon{opacity:.55}
  .wh2-overview-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:16px;margin-top:4px}
  @media (max-width:820px){.wh2-overview-grid{grid-template-columns:1fr}}
  .wh2-tasks,.wh2-banner{border-radius:14px;padding:16px 20px;border:1px solid var(--line);background:var(--card)}
  .wh2-tasks h3{margin:0 0 12px;font-size:15px;display:flex;align-items:center;gap:8px}
  .wh2-tasks ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}
  .wh2-tasks li{font-size:13.5px;display:flex;gap:8px;align-items:center;color:var(--ink)}
  .wh2-tasks li b{margin-left:auto;color:var(--rust);font-family:'Fraunces',serif}
  .wh2-banner{display:flex;gap:14px;align-items:center}
  .wh2-banner.ok{background:#e9f6ec;border-color:#bfe3c8}
  .wh2-banner.warn{background:#fdf3e3;border-color:#f0d69c}
  .wh2-banner-ic{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:17px;flex-shrink:0;color:#fff}
  .wh2-banner.ok .wh2-banner-ic{background:var(--moss)}
  .wh2-banner.warn .wh2-banner-ic{background:var(--gold)}
  .wh2-banner b{display:block;font-size:14.5px;margin-bottom:2px}
  .wh2-banner span{font-size:13px;color:var(--muted)}
  .wh2-soon{padding:70px 20px;text-align:center;color:var(--muted)}
  .wh2-soon .big{font-size:17px;font-weight:700;color:var(--ink);margin-bottom:6px}
  .wh2-thumb{width:38px;height:38px;border-radius:9px;background:#eef0f4;display:flex;align-items:center;justify-content:center;overflow:hidden;font-size:17px}
  .wh2-thumb img{width:100%;height:100%;object-fit:cover}
  .wh-hint{font-size:13px;color:var(--muted);background:rgba(37,70,201,.06);padding:10px 12px;border-radius:10px;margin-bottom:10px;line-height:1.5}
  .wh-label{width:58mm;height:40mm;box-sizing:border-box;border:2px dashed var(--line);border-radius:2mm;padding:3mm;
    text-align:center;background:#fff;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 auto}
  .wh-label-name{font-size:3.4mm;font-weight:700;margin-bottom:2mm;line-height:1.15;max-height:9mm;overflow:hidden;width:100%}
  .wh-label-bars{display:flex;justify-content:center;align-items:stretch;height:17mm;margin-bottom:1.5mm;width:100%}
  .wh-label-code{font-family:monospace;font-size:4.2mm;letter-spacing:1.5mm;font-weight:700}
  .wh-label-sku{font-size:2.7mm;color:var(--muted);margin-top:1mm}
  @media print{
    @page{size:58mm 40mm;margin:0}
    body *{visibility:hidden}#whLabelPrint,#whLabelPrint *{visibility:visible}
    #whLabelPrint{position:fixed;top:0;left:0;margin:0;border:none}
  }
  .wh-op{font-size:12px;font-weight:700;padding:3px 9px;border-radius:8px;background:var(--paper);white-space:nowrap}
  .wh-op-in{color:#2e7d32}
  .wh-op-out{color:#c0392b}
  .wh-op.wh-op-in{background:rgba(46,125,50,.10)}
  .wh-op.wh-op-out{background:rgba(192,57,43,.10)}
  .wh-moves-tbl .log-when b{display:block;font-size:13px}
  .wh-moves-tbl .log-when{font-size:12px;color:var(--muted)}
  /* сборка/приёмка */
  .asm-scan{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:20px;margin-bottom:16px}
  .asm-scan-label{font-size:16px;font-weight:700;margin-bottom:12px}
  .asm-scan-row{display:flex;gap:10px;margin-bottom:8px}
  .asm-scan-row input{flex:1;padding:14px 16px;border:2px solid var(--rust);border-radius:10px;font:inherit;font-size:16px}
  .asm-progress{align-self:center;font-weight:800;font-size:18px;font-family:'Fraunces',serif;padding:0 10px}
  .asm-items{padding:6px 0}
  .asm-item{display:flex;align-items:center;gap:13px;padding:13px 18px;border-bottom:1px solid var(--line)}
  .asm-item.asm-ok{background:rgba(46,125,50,.06)}
  .asm-item-ico{font-size:22px;flex:none}
  .asm-item-body{flex:1;min-width:0}
  .asm-item-name{font-size:15px;font-weight:700}
  .asm-item-bc{font-family:monospace;font-size:12px;color:var(--muted)}
  .asm-item-qty{font-weight:800;font-size:16px;font-family:'Fraunces',serif}
  .asm-foot{padding:16px 18px}
  .asm-foot .btn{width:100%;padding:14px;font-size:16px}
  .asm-fb{padding:12px 18px;font-size:15px;font-weight:700;text-align:center}
  .asm-fb-ok{background:rgba(46,125,50,.12);color:#2e7d32}
  .asm-fb-err{background:rgba(192,57,43,.12);color:#c0392b}
  .asm-fb-warn{background:rgba(230,145,30,.14);color:#b5651d}
  .oi-row{display:flex;gap:8px;margin-bottom:8px}
  .oi-row .oi-product{flex:1;padding:9px 11px;border:1px solid var(--line);border-radius:9px;font:inherit}
  .oi-row .oi-qty{padding:9px 11px;border:1px solid var(--line);border-radius:9px;font:inherit}
  .dash-card .dc-period{font-size:10.5px;color:var(--muted);margin-top:6px;letter-spacing:.02em}
  .dash-card.c-new{background:linear-gradient(135deg,#eef3fb,var(--card))}.dash-card.c-new .dc-ic{background:#3b6fb0}
  .dash-card.c-pickup{background:linear-gradient(135deg,#f7eed8,var(--card))}.dash-card.c-pickup .dc-ic{background:var(--gold)}
  /* карточка городов */
  .dash-card.c-cities{background:linear-gradient(135deg,#eef1e8,var(--card));padding:14px 16px}
  .dc-cities{display:flex;flex-direction:column;gap:10px;width:100%}
  .dc-cities-h{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:600;margin-bottom:2px}
  .dcity{display:flex;align-items:center;gap:8px;font-size:13px}
  .dcity-n{font-weight:700;color:var(--ink);min-width:54px}
  .dcity-dots{flex:1;color:var(--moss);letter-spacing:1px;font-size:10px;overflow:hidden;white-space:nowrap}
  .dcity-v{font-family:'Fraunces',serif;font-weight:900;font-size:18px;color:var(--ink)}
  /* карточка-донат */
  .dash-card.c-donut{background:linear-gradient(135deg,#f7e7e0,var(--card));padding:14px 16px}
  .dc-donut-wrap{display:flex;align-items:center;gap:12px;width:100%}
  .dc-donut-leg{display:flex;flex-direction:column;gap:7px;font-size:12.5px;color:var(--ink)}
  .dc-donut-leg b{font-family:'Fraunces',serif}
  .lg-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:middle}
  /* карточка финансов */
  .dash-card.c-fin{background:linear-gradient(135deg,#eaf3ee,var(--card))}.dash-card.c-fin .dc-ic{background:var(--moss);font-family:'Fraunces',serif;font-weight:900}
  .dc-fin-row{display:flex;justify-content:space-between;gap:12px;align-items:baseline;font-size:13px;color:var(--muted);margin-top:4px}
  .dc-fin-row:first-child{margin-top:0}
  .dc-fin-row b{font-family:'Fraunces',serif;font-weight:900;font-size:18px;color:var(--ink)}
  .dash-mini{display:flex;gap:26px;flex-wrap:wrap;padding:14px 20px;margin-bottom:22px;background:var(--card);
    border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);font-size:14px;color:var(--muted)}
  .dash-mini b{font-family:'Fraunces',serif;font-weight:900;font-size:18px;color:var(--ink);margin-right:5px}
  /* Таблица статистики по дням */
  .dash-stat{font-size:13px}
  .dash-stat th{text-align:center;white-space:nowrap;padding:8px 10px}
  .dash-stat th.grp{font-size:11px;letter-spacing:.04em;border-bottom:1px solid var(--line)}
  .dash-stat th.grp-ord{background:#eef3fb;color:#2b5c8a}
  .dash-stat th.grp-pk{background:#f6eed8;color:#8a5a12}
  .dash-stat th.grp-cour{background:#eef1e8;color:#2f6d36}
  .dash-stat th.grp-del{background:#f7e7e0;color:#1c37a0}
  .dash-stat td.num{text-align:center;white-space:nowrap;font-variant-numeric:tabular-nums}
  .dash-stat td.d-date{white-space:nowrap}
  .dash-stat th.c-alm,.dash-stat td.c-alm{background:rgba(61,100,120,.06);color:#3d6478}
  .dash-stat th.c-ast,.dash-stat td.c-ast{background:rgba(109,90,61,.06);color:#6d5a3d}
  .dash-stat th.cour-col,.dash-stat td.cour-col{font-size:12px;min-width:60px}
  .dash-stat th.cour-col .cour-city{display:block;font-size:10px;font-weight:400;color:var(--muted);text-transform:none;letter-spacing:0;margin-top:2px}
  .dash-stat tfoot .dash-total td{background:var(--paper);border-top:2px solid var(--line);font-weight:700;
    position:sticky;bottom:0}
  .dash-stat tfoot .dash-total td:first-child{font-family:'Fraunces',serif;font-size:14px}
  @media (max-width:1100px){.dash-cards{grid-template-columns:repeat(2,1fr)}}
  @media (max-width:760px){.dash-cards{grid-template-columns:1fr}.dash-mini{gap:14px}}
  .content{flex:1;min-width:0;padding:24px 26px}

  .page-head{padding:8px 0 18px;display:flex;align-items:flex-end;gap:20px;flex-wrap:wrap}
  .page-head h1{font-family:'Fraunces',serif;font-weight:900;font-size:30px;letter-spacing:-.03em;line-height:1}
  .page-head p{color:var(--muted);font-size:14px;margin-top:7px}
  /* ШАПКА МОДУЛЯ (единая для заказов, курьерской, почтовой, Барахолки и заявок).
     Белая карточка с названием и кнопками, внутри — синяя плашка: главное число слева,
     остальные справа через разделители. Собирается функцией moduleHead() в js/01-yadro.js. */
  .mhead{background:var(--card);border:1px solid var(--line);border-radius:18px;
    box-shadow:var(--shadow);padding:18px;margin-bottom:22px}
  .mhead-top{display:flex;align-items:center;justify-content:space-between;gap:16px;
    flex-wrap:wrap;padding:6px 8px 16px}
  .mhead-top h1{font-family:'Fraunces',serif;font-weight:900;font-size:30px;
    letter-spacing:-.03em;line-height:1}
  .mhead-top p{color:var(--muted);font-size:14px;margin-top:7px}
  .mhead-top .head-actions{margin:0}
  .mhero{background:linear-gradient(115deg,var(--rust-dk) 0%,var(--rust) 55%,#2f55d8 100%);
    color:#fff;border-radius:14px;padding:22px 26px;display:flex;align-items:center;
    justify-content:space-between;gap:24px;flex-wrap:wrap}
  .mhero-k{font-size:12px;text-transform:uppercase;letter-spacing:.09em;font-weight:600;opacity:.82}
  .mhero-v{font-family:'Fraunces',serif;font-weight:900;font-size:40px;line-height:1;
    letter-spacing:-.02em;margin-top:8px}
  .mhero-v span{font-size:24px;margin-left:6px;opacity:.9}
  .mhero-stats{display:flex;align-items:center}
  .mhs{padding:0 22px;text-align:right;border-left:1px solid rgba(255,255,255,.22)}
  .mhs:first-child{border-left:0}
  .mhs:last-child{padding-right:0}
  .mhs b{display:block;font-family:'Fraunces',serif;font-weight:900;font-size:26px;line-height:1}
  .mhs b small{font-size:13px;font-family:'Spline Sans',sans-serif;font-weight:500;opacity:.75}
  .mhs span{display:block;font-size:12px;opacity:.8;margin-top:5px;line-height:1.25}
  /* плашка-фильтр: по ней щёлкают (в «Заявках» — «по QR»). Подсветка должна читаться как
     кнопка, поэтому у неё своя подушка, а не нулевой отступ последней плашки. */
  .mhs-click{cursor:pointer;border-radius:12px;transition:.12s;padding:10px 18px;margin:-10px 0}
  .mhs-click:last-child{padding-right:18px;margin-right:-6px}
  .mhs-click:hover{background:rgba(255,255,255,.12)}
  .mhs-on{background:rgba(255,255,255,.18)}
  /* История заказа в карточке: кто завёл, кто заполнил, кто принял на складе */
  .ohist{border:1px solid var(--line);border-radius:10px;background:var(--card);overflow:hidden}
  .ohist-row{display:flex;align-items:baseline;gap:10px;padding:10px 12px;border-bottom:1px solid var(--line);font-size:13px}
  .ohist-row:last-child{border-bottom:0}
  .ohist-ic{flex:none;width:20px;text-align:center;opacity:.65}
  .ohist-k{flex:none;width:150px;color:var(--muted)}
  .ohist-v{flex:1;min-width:0}
  .ohist-v b{font-weight:700}
  .ohist-v small{display:block;color:var(--muted);font-size:11px;margin-top:2px}
  /* Сводка над фильтрами грида «Партнёры по городам» — считается по тому, что видно */
  .nf-vol-sum{display:flex;flex-wrap:wrap;gap:10px;padding:0 20px 12px}
  .nfv-i{display:flex;flex-direction:column;gap:2px;padding:8px 14px;border:1px solid var(--line);
    border-radius:10px;background:var(--paper);min-width:96px}
  .nfv-i span{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}
  .nfv-i b{font-family:'Fraunces',serif;font-weight:900;font-size:20px;line-height:1.1}
  .nfv-scope b{font-family:'Spline Sans',sans-serif;font-size:14px;font-weight:600}
  @media (max-width:760px),(pointer:coarse){
    .nf-vol-sum{padding:0 12px 10px;gap:8px}
    .nfv-i{flex:1 1 calc(50% - 8px);min-width:0;padding:8px 12px}
  }
  /* кнопка «скопировать номер» — в гриде под ID и в карточке рядом с полем */
  .copy-btn{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;
    width:26px;height:26px;padding:0;margin-left:6px;border:1px solid var(--line);border-radius:7px;
    background:var(--card);color:var(--muted);cursor:pointer;transition:.12s}
  .copy-btn svg{width:14px;height:14px}
  .copy-btn:hover{color:var(--rust);border-color:var(--rust);background:rgba(37,70,201,.06)}
  .copy-btn:active{transform:scale(.92)}
  /* «Вышла новая версия» — полоса снизу, поверх всего */
  .app-update{position:fixed;left:50%;transform:translateX(-50%);bottom:18px;z-index:3000;
    display:flex;align-items:center;gap:14px;padding:12px 16px;border-radius:12px;
    background:var(--ink);color:#fff;box-shadow:0 10px 30px -10px rgba(0,0,0,.5);
    font-size:14px;max-width:92vw}
  .app-update .btn{background:#fff;color:var(--ink);border-color:#fff;white-space:nowrap}
  /* Колокольчик в шапке: включены ли уведомления на ЭТОМ устройстве. Настройка личная
     и для каждого телефона своя, поэтому живёт рядом с именем, а не в разделах. */
  .push-btn{margin-left:auto;font-size:18px;line-height:1;background:none;border:1px solid var(--line);
    border-radius:10px;padding:7px 10px;cursor:pointer;color:var(--muted)}
  .push-btn:hover{border-color:var(--ink)}
  .push-btn.on{border-color:var(--rust);background:rgba(37,70,201,.07)}
  @media (max-width:760px),(pointer:coarse){ .push-btn{min-height:44px;min-width:44px} }

  /* «Поставьте приложение» — та же полоса, что у обновления, только выше: если обе
     появятся разом, они не перекроют друг друга. */
  .app-install{position:fixed;left:50%;transform:translateX(-50%);bottom:80px;z-index:2999;
    display:flex;align-items:center;gap:12px;padding:12px 16px;border-radius:12px;
    background:var(--ink);color:#fff;box-shadow:0 10px 30px -10px rgba(0,0,0,.5);
    font-size:14px;max-width:92vw}
  .app-install .btn{background:transparent;color:#fff;border-color:rgba(255,255,255,.45);white-space:nowrap}
  .app-install .btn.primary{background:#fff;color:var(--ink);border-color:#fff}
  @media (max-width:760px),(pointer:coarse){
    .app-install{bottom:74px;width:calc(100% - 24px);flex-wrap:wrap;justify-content:flex-end}
    .app-install span{flex:1 1 100%}
  }
  @media (max-width:760px),(pointer:coarse){
    .app-update{bottom:12px;width:calc(100% - 24px);justify-content:space-between}
  }
  @media (max-width:760px),(pointer:coarse){
    .copy-btn{width:34px;height:34px}
    .copy-btn svg{width:17px;height:17px}
  }
  @media (max-width:560px){
    .ohist-row{flex-wrap:wrap;gap:4px 10px}
    .ohist-k{width:auto}
    .ohist-v{flex-basis:100%;padding-left:30px}
  }
  .dash-head{justify-content:space-between}
  .ai-btn{background:linear-gradient(135deg,#6d3bd4,#2546c9);color:#fff;border:none}
  .ai-btn:hover{filter:brightness(1.08)}
  .ai-wrap{display:flex;flex-direction:column;gap:12px;min-width:min(560px,80vw)}
  .ai-hint{font-size:13px;color:var(--muted);background:rgba(37,70,201,.06);padding:10px 12px;border-radius:10px}
  .ai-log{display:flex;flex-direction:column;gap:10px;max-height:44vh;overflow-y:auto;padding:4px}
  .ai-empty{color:var(--muted);text-align:center;padding:20px;font-size:14px}
  .ai-msg{padding:10px 13px;border-radius:12px;font-size:14px;line-height:1.5;white-space:pre-wrap;max-width:88%}
  .ai-user{align-self:flex-end;background:var(--rust);color:#fff;border-bottom-right-radius:4px}
  .ai-assistant{align-self:flex-start;background:var(--paper);border:1px solid var(--line);border-bottom-left-radius:4px}
  .ai-loading{color:var(--muted);font-style:italic}
  .ai-input-row{display:flex;gap:8px}
  .ai-input-row input{flex:1;padding:11px 13px;border:1px solid var(--line);border-radius:10px;font:inherit;font-size:14px}
  .ai-note{font-size:11px;color:var(--muted);text-align:center}
  .ai-recog-note{font-size:13px;margin-top:8px;padding:8px 10px;border-radius:8px;display:none}
  /* лента уведомлений */
  .nf-daily{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin-bottom:18px}
  .nf-dcard{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column;gap:3px}
  .nf-dcard span{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.02em}
  .nf-dcard b{font-size:24px;font-weight:800;font-family:var(--serif,inherit)}
  .nf-up{font-size:12px;color:#2e7d32;font-weight:700}
  .nf-down{font-size:12px;color:#c0392b;font-weight:700}
  .nf-issue{display:flex;align-items:center;gap:13px;padding:14px 18px;border-bottom:1px solid var(--line);cursor:pointer;transition:.12s}
  .nf-issue:hover{background:var(--paper)}
  .nf-issue:last-child{border-bottom:0}
  .nf-i-ico{width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:18px;flex:0 0 auto;background:var(--paper)}
  .nf-i-crit .nf-i-ico{background:rgba(192,57,43,.12)}
  .nf-i-warn .nf-i-ico{background:rgba(230,145,30,.14)}
  .nf-i-body{flex:1;min-width:0}
  .nf-i-title{font-size:15px;font-weight:700;line-height:1.3}
  .nf-i-crit .nf-i-title{color:#c0392b}
  .nf-i-desc{font-size:13px;color:var(--muted);margin-top:2px}
  .nf-i-arrow{color:var(--muted);font-size:18px}
  .nav-badge{margin-left:auto;background:#c0392b;color:#fff;font-size:11px;font-weight:800;min-width:20px;height:20px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;padding:0 6px}
  .nf-collapse-head{user-select:none;transition:.12s}
  .nf-collapse-head:hover{background:var(--paper)}
  .nf-collapse-ico{margin-left:auto;color:var(--muted);font-size:14px}
  .nf-ai-panel{border:1px solid rgba(109,59,212,.25);background:linear-gradient(180deg,rgba(109,59,212,.03),transparent)}
  .nf-ai-item{display:flex;gap:13px;align-items:flex-start;padding:14px 18px;border-bottom:1px solid var(--line)}
  .nf-ai-item:last-child{border-bottom:0}
  .nf-ai-ico{width:36px;height:36px;border-radius:11px;background:rgba(109,59,212,.10);display:flex;align-items:center;justify-content:center;font-size:18px;flex:0 0 auto}
  .nf-ai-body{flex:1;min-width:0}
  .nf-ai-title{font-size:15px;font-weight:700;line-height:1.35}
  .nf-ai-act{font-size:13px;color:#6d3bd4;font-weight:600;margin-top:4px}
  .nf-ai-empty{padding:22px 18px;font-size:14px;color:var(--muted);line-height:1.5}
  .nf-ai-load{padding:22px 18px;font-size:14px;color:var(--muted);font-style:italic}
  .hist-pager{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 18px;border-top:1px solid var(--line);flex-wrap:wrap}
  .hp-info{font-size:13px;color:var(--muted)}
  .hp-btns{display:flex;align-items:center;gap:10px}
  .hp-page{font-size:13px;font-weight:700}
  .nf-filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
  .nf-chip{padding:8px 14px;border:1px solid var(--line);border-radius:20px;background:var(--card);font:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:.15s}
  .nf-chip:hover{border-color:var(--rust)}
  .nf-chip.active{background:var(--rust);color:#fff;border-color:var(--rust)}
  .nf-sep{width:1px;height:22px;background:var(--line);margin:0 4px}
  .nf-day{padding:0 0 6px}
  .nf-day-title{display:flex;align-items:center;gap:8px;padding:12px 18px 8px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);position:sticky;top:0;background:var(--card);z-index:1}
  .nf-day-count{background:var(--paper);padding:2px 8px;border-radius:10px;font-size:11px}
  .nf-item{display:flex;gap:12px;align-items:flex-start;padding:11px 18px;border-bottom:1px solid var(--line);transition:.12s}
  .nf-item:hover{background:var(--paper)}
  .nf-ico{width:30px;height:30px;border-radius:9px;background:var(--paper);display:flex;align-items:center;justify-content:center;font-size:15px;flex:0 0 auto}
  .nf-body{flex:1;min-width:0}
  .nf-line{font-size:14px;line-height:1.45}
  .nf-obj{color:var(--rust);font-weight:600}
  .nf-changes{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
  .nf-changes span{font-size:11px;color:var(--muted);background:var(--paper);padding:2px 7px;border-radius:6px}
  .nf-time{font-size:12px;color:var(--muted);flex:0 0 auto;padding-top:3px}
  .nf-warn .nf-ico{background:rgba(192,57,43,.12)}
  .nf-ok .nf-ico{background:rgba(46,125,50,.12)}
  .nf-muted{opacity:.65}
  .ai-recog-note.load{display:block;background:rgba(37,70,201,.08);color:var(--rust-dk)}
  .ai-recog-note.ok{display:block;background:rgba(46,125,50,.10);color:#2e7d32}
  .ai-recog-note.err{display:block;background:rgba(192,57,43,.10);color:#c0392b}
  .dash-period-filter{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
  .dash-period-filter select{font:inherit;font-size:14px;font-weight:600;padding:8px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink);cursor:pointer}
  .head-actions{margin-left:auto;display:flex;gap:10px;flex-wrap:wrap}
  /* На телефоне четыре кнопки в ряд не помещаются: раньше они вставали по одной-две
     в строку, а подписи рвались на три строки («Присвоить / трек- / номер»). Кладём их
     в две колонки на всю ширину — подпись переносится максимум на две строки и читается. */
  @media (max-width:760px){
    .head-actions{margin-left:0;width:100%;display:grid;grid-template-columns:1fr 1fr;gap:8px}
    .head-actions .btn{width:100%;justify-content:center;text-align:center;font-size:13px;
      padding-left:10px;padding-right:10px;line-height:1.25;hyphens:none}
  }
  .ic-orders-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin:10px 0 8px;flex-wrap:wrap}
  .ic-totals{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px}
  .ic-total-item{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 16px;display:flex;flex-direction:column;gap:3px;min-width:120px}
  .ic-total-item span{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.02em}
  .ic-total-item b{font-size:20px;font-weight:700}
  .ic-total-money b{color:#2e7d32}
  .ic-filters{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px}
  .ic-filters input,.ic-filters select{padding:9px 12px;border:1px solid var(--line);border-radius:10px;font:inherit;font-size:14px;background:var(--card)}
  .ic-orders-list{max-height:240px;overflow-y:auto;border:1px solid var(--line);border-radius:10px;padding:4px}
  .ic-order-row{display:grid;grid-template-columns:24px 90px 1fr 120px;gap:10px;align-items:center;padding:7px 10px;border-bottom:1px solid var(--line);cursor:pointer;font-size:14px}
  .ic-order-row:last-child{border-bottom:0}
  .ic-order-row input{width:17px;height:17px}
  .ic-o-code{font-weight:700}
  .ic-o-track{color:var(--muted);font-size:12px}
  .ic-o-rolled{font-size:11px;background:#fff6df;color:#8a6d1a;padding:2px 8px;border-radius:20px;white-space:nowrap}
  .ic-calc-live{margin-top:10px;padding:10px 12px;background:rgba(37,70,201,.07);border-radius:10px;font-size:14px}
  .ic-view-head{display:flex;flex-direction:column;gap:5px;margin-bottom:12px;font-size:14px}
  .ic-view-tbl{width:100%;border-collapse:collapse;font-size:14px}
  .ic-view-tbl th{text-align:left;font-size:11px;text-transform:uppercase;color:var(--muted);padding:7px 9px;border-bottom:1px solid var(--line)}
  .ic-view-tbl td{padding:8px 9px;border-bottom:1px solid var(--line)}
  .chk-line{display:flex;align-items:center;gap:8px;font-weight:500;font-size:14px;padding:5px 0;cursor:pointer}
  .chk-line input{width:17px;height:17px;cursor:pointer}
  .cc-give{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
  .cc-give-tag{font-size:11px;font-weight:600;background:rgba(37,70,201,.10);color:var(--rust-dk);border-radius:6px;padding:2px 8px}
  .btn.btn-excel{background:#1d7a44;border-color:#166336;color:#fff}
  .btn.btn-excel:hover{background:#166336}

  .panel{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);
    overflow:hidden;margin-bottom:24px}
  .panel-head{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px}
  .panel-head h2{font-family:'Fraunces',serif;font-weight:600;font-size:18px}
  .panel-head .count{font-size:12px;color:var(--muted);background:var(--paper);border:1px solid var(--line);
    padding:2px 9px;border-radius:20px;font-weight:600}

  .table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
  table{width:100%;border-collapse:collapse;font-size:13.5px}
  thead th{text-align:left;font-weight:600;font-size:11px;letter-spacing:.06em;text-transform:uppercase;
    color:var(--muted);padding:11px 16px;border-bottom:1px solid var(--line);white-space:nowrap;
    background:linear-gradient(var(--paper),var(--card))}
  tbody td{padding:12px 16px;border-bottom:1px solid #e4e9f2;vertical-align:middle}
  .filter-row th{padding:6px 10px;background:var(--paper);border-bottom:1px solid var(--line)}
  .dir-filter{width:100%;font:inherit;font-size:12px;font-weight:400;text-transform:none;letter-spacing:0;
    padding:6px 8px;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--ink)}
  .dir-filter:focus{outline:2px solid rgba(37,70,201,.25);border-color:var(--rust)}
  /* фильтры в таблице «Сотрудники» — широкие, во всю ширину колонки.
     30.09.2026: здесь был потерян селектор — декларации висели в воздухе после
     закрывающей скобки, и браузер молча выбрасывал их вместе с оформлением полей. */
  .filter-row.staff-fr th{padding:10px 12px}
  .filter-row.staff-fr .dir-filter{width:100%;font:inherit;font-size:13px;
    text-transform:none;letter-spacing:0;padding:8px 12px;border:1px solid var(--line);border-radius:9px;
    background:var(--card);color:var(--ink);box-shadow:inset 0 1px 2px rgba(20,30,60,.04)}
  /* Последняя колонка держала 17% и таблицу шириной 1180px — столько занимали три
     кнопки в каждой строке. Теперь там одна иконка, и лишнее место уходило в пустую
     полосу справа. Отдаём ей минимум, ширину таблицы снижаем. */
  #staffTable table{table-layout:fixed;min-width:860px}
  #staffTable th:nth-child(1),#staffTable td:nth-child(1){width:26%}
  #staffTable th:nth-child(2),#staffTable td:nth-child(2){width:17%}
  #staffTable th:nth-child(3),#staffTable td:nth-child(3){width:13%}
  #staffTable th:nth-child(4),#staffTable td:nth-child(4){width:21%}
  #staffTable th:nth-child(5),#staffTable td:nth-child(5){width:18%}
  #staffTable th:nth-child(6),#staffTable td:nth-child(6){width:5%}
  #staffTable .row-actions{flex-wrap:nowrap;justify-content:flex-end}
  #staffTable tbody td{overflow-wrap:anywhere}
  @media (max-width:760px){
    #staffTable table{table-layout:auto;min-width:0}
    #staffTable th,#staffTable td{width:auto!important;min-width:0!important}
  }
  /* компактная таблица «Заказы партнёров» — крупнее видно за раз, как в примере KET */
  #inboundTable table{font-size:12px}
  #inboundTable thead th{padding:6px 8px;font-size:10px;white-space:nowrap}
  #inboundTable tbody td{padding:5px 8px;line-height:1.3}
  #inboundTable .wh-cat{font-size:10.5px}
  #inboundTable .cell-time{font-size:9.5px}
  #inboundTable .pill{padding:2px 8px;font-size:11px}
  #inboundTable .ket-badge{padding:2px 7px;font-size:10.5px}
  #inboundTable td[data-label="Индекс"],#inboundTable th[data-colkey="index"]{min-width:64px;white-space:nowrap}
  .pickup-row-qr td{background:#fff6df!important}
  .pickup-row-qr:hover td{background:#fdecc4!important}
  .order-row-api td{background:#e8f4ff!important}
  .order-row-api:hover td{background:#d3e9ff!important}
  #inboundTable .inb-th{cursor:pointer;user-select:none;position:relative}
  #inboundTable .inb-th:hover{background:var(--card)}
  #inboundTable .inb-th-dragging{opacity:.4}
  #inboundTable .inb-th-over{box-shadow:inset 2px 0 0 var(--rust)}
  #inboundTable .inb-th-filtered{color:var(--rust)}
  #inboundTable .inb-col-resize{position:absolute;right:-4px;top:0;bottom:0;width:8px;cursor:col-resize;z-index:5}
  #inboundTable .inb-col-resize:hover,#inboundTable .inb-col-resize.inb-resizing{background:rgba(37,70,201,.25)}
  .inb-table{table-layout:fixed}
  .inb-col-filter-pop{position:absolute;top:100%;left:0;margin-top:4px;z-index:9000;filter:drop-shadow(0 10px 24px rgba(20,30,60,.25))}
  .inb-col-filter-box{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:8px;display:flex;gap:6px;align-items:center}
  .inb-col-filter-box input{padding:7px 10px;border:1px solid var(--line);border-radius:8px;font:inherit;font-size:13px;width:200px}
  /* Десктоп: читабельные колонки заявок/заказов */
  @media (min-width:761px){
    .resp-table td[data-label="Номер"]{white-space:nowrap}
    .resp-table td[data-label="Телефон"]{white-space:nowrap}
    .resp-table td[data-label="Адрес"]{min-width:200px;max-width:320px}
    .resp-table td[data-label="Наименование"]{min-width:140px}
    .resp-table td[data-label="Трек-код"]{white-space:nowrap}
    .resp-table td[data-label="Дата"],.resp-table td[data-label="Дата забора"]{white-space:nowrap}
  .cell-time{display:block;font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap}
    .resp-table td[data-label="Курьер"],.resp-table td[data-label="Менеджер продаж"],.resp-table td[data-label="Обработчик"]{white-space:nowrap}
  }
  tbody tr:last-child td{border-bottom:none}
  tbody tr:hover{background:rgba(192,138,45,.05)}
  .pill{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;padding:3px 9px;
    border-radius:20px;background:var(--paper);border:1px solid var(--line)}
  .pill.moss{color:var(--moss);background:#eef1e8;border-color:#cfd9bf}
  .pill.gold{color:var(--gold);background:#f6eed8;border-color:#e6d4a0}
  .pill.city-almaty{color:#3d6478;background:#e6eef2;border-color:#bcd2dc}
  .pill.city-astana{color:#6d5a3d;background:#f1ebe0;border-color:#dccfb6}
  .qty{font-family:'Fraunces',serif;font-weight:900;font-size:16px;color:var(--rust-dk)}
  .qty-edit{width:64px;font:inherit;font-family:'Fraunces',serif;font-weight:900;font-size:15px;color:var(--rust-dk);
    text-align:center;padding:5px 6px;border:1.5px solid var(--line);border-radius:8px;background:var(--card)}
  .qty-edit:focus{outline:2px solid rgba(37,70,201,.3);border-color:var(--rust)}
  .row-actions{display:flex;gap:6px;justify-content:flex-end;white-space:nowrap}
  .status-pick{font:inherit;font-size:12.5px;font-weight:600;padding:5px 8px;border:1.5px solid var(--line);
    border-radius:8px;background:var(--card);color:var(--ink);cursor:pointer}
  /* в таблице заказов статус — двухстрочная плашка, под ней невидимый select для выбора */
  .resp-table td[data-label="Статус"] .status-cell{position:relative;width:155px}
  .status-badge{display:block;font-size:11.5px;font-weight:600;line-height:1.25;padding:5px 8px;border:1.5px solid var(--line);
    border-radius:8px;background:var(--card);white-space:normal;word-break:break-word;cursor:pointer;min-height:20px}
  .ketChk,#ketChkAll{width:17px;height:17px;cursor:pointer;accent-color:var(--rust)}
  .status-overlay{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
  .status-time{font-size:10.5px;color:var(--muted);margin-top:3px;white-space:nowrap}
  .empty{padding:50px 20px;text-align:center;color:var(--muted)}
  .empty .big{font-family:'Fraunces',serif;font-size:20px;color:var(--ink);margin-bottom:6px}
  .link-btn{background:none;border:none;color:var(--rust-dk);font:inherit;font-size:11px;font-weight:600;
    cursor:pointer;padding:2px 0;text-decoration:underline}

  .filters{display:flex;gap:10px;padding:14px 20px;flex-wrap:wrap;border-bottom:1px solid var(--line);background:var(--paper)}
  .filters-dates{align-items:center}
  .ket-badge{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:20px;font-size:10.5px;font-weight:700;
    color:#fff;background:var(--moss);letter-spacing:.03em;vertical-align:middle;white-space:nowrap}
  .fdate-lbl{font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
  .filters input,.filters select{font:inherit;font-size:13px;padding:8px 11px;border:1px solid var(--line);
    border-radius:9px;background:var(--card);color:var(--ink);min-width:140px}
  .filters .search{flex:1;min-width:200px}
  .filters .date-field{display:flex;flex-direction:column;gap:3px;min-width:0}
  .filters .date-field span{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding-left:2px}
  .filters .date-field input{min-width:150px}

  .subtabs{display:flex;gap:6px;margin-bottom:22px;flex-wrap:wrap}
  .subtabs button{font:inherit;font-size:13px;font-weight:600;cursor:pointer;padding:9px 15px;border-radius:30px;
    border:1px solid var(--line);background:var(--card);color:var(--muted);transition:.15s}
  .subtabs button.active{background:var(--moss);color:#fff;border-color:var(--moss)}

  /* ЗАПОЛНЕНИЕ: поиск «кто заполнял этот заказ» на месте дублирующей кнопки. */
  .fh-find{display:flex;gap:8px;align-items:center}
  .fh-find input{font:inherit;font-size:14px;padding:10px 13px;border:1px solid var(--line);
    border-radius:10px;background:var(--card);color:var(--ink);min-width:330px}
  .fill-find-box{background:var(--card);border:1px solid var(--line);border-radius:14px;
    padding:14px 16px;margin-bottom:16px}
  .ff-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
  .ff-note{color:var(--muted);font-size:13.5px;margin:0 0 8px}
  .ff-dim{color:var(--muted)}
  .fill-find-box tr.ff-done td{background:#f2f9f4}
  .fill-find-box tr.ff-work td{background:#fdf6e8}
  .fill-find-box tr.ff-wait td{background:#fbfbfc}
  @media(max-width:760px){.fh-find{width:100%}.fh-find input{min-width:0;flex:1}}

  /* «Удалить выделенные» в фильтрах заказов: пока ничего не отмечено — обычная серая
     и неактивная, с галочками становится красной. Кнопка опасная, и это должно быть видно. */
  .filters-btn-danger:disabled{opacity:.5;cursor:default}
  .filters-btn-danger.is-armed{border-color:#c0392b;color:#c0392b;background:#fdeceb}
  .filters-btn-danger.is-armed:hover{background:#f9dcd9}

  /* Переключатель периода у менеджера — тот же, что в админской таблице, но своей строкой:
     без него он видел только сегодняшние цифры и не мог посмотреть вчерашние. */
  .fill-period-own{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 16px}

  /* «Заполнение»: отложенный заказ, забытый на полсуток и дольше, подсвечиваем —
     со стороны это выглядело как «у сотрудника ноль заказов» без объяснения. */
  .ft-stale{color:#c0392b;font-weight:600}

  /* СТАТИСТИКА: таблицы по дням сворачиваются. При входе обе закрыты — они длинные,
     и из-за них не видно карточек наверху, ради которых в раздел и заходят. */
  .dash-fold-head{display:flex;align-items:center;gap:10px;width:100%;text-align:left;
    font:inherit;background:none;border:0;cursor:pointer}
  .dash-fold-head h2{margin:0}
  .dash-fold-ar{margin-left:auto;font-style:normal;color:var(--muted);transition:transform .18s}
  .dash-fold.open .dash-fold-ar{transform:rotate(180deg)}
  .dash-fold .dash-fold-body{display:none}
  .dash-fold.open .dash-fold-body{display:block}

  /* РОЛИ И ПРАВА: матрица «роль × модуль» квадратами. Текстовые «просмотр +СРУ»
     читались построчно — чтобы понять картину, приходилось вчитываться в каждую
     ячейку. Цвет виден всей таблицей сразу, точный состав — в подсказке. */
  .rl-bar{display:flex;flex-wrap:wrap;gap:14px 22px;align-items:center;justify-content:space-between;
    background:var(--card);border:1px solid var(--line);border-radius:12px;padding:11px 16px;margin-bottom:16px}
  .rl-bar-l,.rl-bar-r{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center}
  .rl-bar b{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
  .rl-leg{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--ink)}
  .rl-sq{width:22px;height:22px;border-radius:7px;display:inline-block;flex:0 0 22px;
    background:#eef0f4;border:1px solid transparent}
  .rl-view{background:#fff;border-color:#2451c4}
  .rl-partial{background:#7d9ef0}
  .rl-full{background:#2140ad}
  .rl-dot{width:9px;height:9px;border-radius:50%;display:inline-block}
  .rl-t-admin.rl-dot{background:#c2711f}.rl-t-staff.rl-dot{background:#2451c4}.rl-t-courier.rl-dot{background:#2f7d54}
  .rl-scroll{overflow:auto}
  .rl-tbl{border-collapse:separate;border-spacing:0;width:100%}
  .rl-tbl th,.rl-tbl td{border-bottom:1px solid var(--line)}
  .rl-name-th{position:sticky;left:0;z-index:2;background:var(--card);text-align:left;
    font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:10px 14px;min-width:270px}
  .rl-mod-th{height:96px;vertical-align:bottom;padding:0 0 10px;width:46px}
  .rl-mod-th span{display:block;writing-mode:vertical-rl;transform:rotate(180deg);text-transform:none;letter-spacing:0;
    font-size:12px;font-weight:500;color:var(--muted);white-space:nowrap;margin:0 auto}
  .rl-name{position:sticky;left:0;z-index:1;background:var(--card);padding:12px 14px;white-space:nowrap}
  .rl-name b{font-size:14.5px;margin-right:10px}
  .rl-tape{display:inline-block;width:3px;height:17px;border-radius:2px;vertical-align:-3px;margin-right:9px}
  .rl-t-admin.rl-tape{background:#c2711f}.rl-t-staff.rl-tape{background:#2451c4}.rl-t-courier.rl-tape{background:#2f7d54}
  .rl-type{font-size:11.5px;font-weight:600;border-radius:20px;padding:3px 10px}
  .rl-t-admin.rl-type{background:#fbead9;color:#a4571a}
  .rl-t-staff.rl-type{background:#e8ecfb;color:#2451c4}
  .rl-t-courier.rl-type{background:#e4f2ea;color:#276b48}
  .rl-cell{text-align:center;padding:10px 6px}
  .rl-cell .rl-sq{cursor:help}
  .rl-tbl tbody tr:hover .rl-name,.rl-tbl tbody tr:hover td{background:#f7f9fc}
  .rl-tbl tbody tr{cursor:pointer}

  /* НАСТРОЙКИ: боковой список справочников по разделам. Девятнадцать вкладок
     одной лентой переносились на три ряда и не читались. */
  .set-wrap{display:grid;grid-template-columns:252px minmax(0,1fr);gap:18px;align-items:start}
  .set-side{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:6px;
    position:sticky;top:12px;max-height:calc(100vh - 24px);overflow:auto}
  .set-group+.set-group{margin-top:6px}
  .set-group-title{font-size:11px;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);
    font-weight:700;padding:12px 12px 6px}
  .set-item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;font:inherit;font-size:14px;
    font-weight:500;color:var(--ink);background:none;border:0;border-radius:10px;padding:9px 12px;cursor:pointer;
    transition:.12s}
  .set-item:hover{background:#f2f4f9}
  .set-item.active{background:#e8ecfb;color:#2451c4;font-weight:600}
  .set-item svg{width:18px;height:18px;flex:0 0 18px;opacity:.7}
  .set-item.active svg{opacity:1}
  .set-mobile{display:none;font:inherit;font-size:15px;padding:11px 12px;border:1px solid var(--line);
    border-radius:10px;background:var(--paper);color:var(--ink);width:100%;margin-bottom:4px}
  @media(max-width:900px){
    .set-wrap{grid-template-columns:1fr}
    .set-side{display:none}
    .set-mobile{display:block}
  }

  .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:24px}
  .stats.stats-5{grid-template-columns:repeat(5,1fr)}
  .stats.stats-4{grid-template-columns:repeat(4,1fr)}
  .stats.stats-2{grid-template-columns:repeat(2,1fr)}
  .simple-pager{display:flex;align-items:center;justify-content:center;gap:8px;padding:14px 10px;flex-wrap:wrap}
  .simple-pager-label{font-size:13px;font-weight:600;color:var(--muted);white-space:nowrap}
  .ac-dropdown{position:absolute;left:0;right:0;top:100%;margin-top:4px;background:#fff;border:1px solid var(--line);
    border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.12);z-index:2000}
  .ac-item{padding:10px 14px;font-size:14px;cursor:pointer}
  .ac-item:hover,.ac-item:active{background:#f2f4f9}
  .ac-item.ac-hi{background:#e8ecfb}
  .fin-th{position:relative;cursor:grab;user-select:none;white-space:nowrap}
  .fin-th.fin-sortable{cursor:pointer}
  .fin-th.fin-dragging{opacity:.4}
  .fin-th.fin-dragover{box-shadow:inset 2px 0 0 var(--rust)}
  .fin-col-resize{position:absolute;right:-4px;top:0;bottom:0;width:8px;cursor:col-resize;z-index:5}
  .fin-col-resize:hover,.fin-col-resize.fin-resizing{background:rgba(37,70,201,.25)}
  .fin-table{table-layout:fixed}
  .fin-new-row td{background:#fbfbfe;padding-top:10px;padding-bottom:10px}
  .fin-new-row input{width:100%;box-sizing:border-box;padding:11px 13px;font-size:14px;
    border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink)}
  .fin-new-row input:focus{outline:2px solid rgba(37,70,201,.3);border-color:var(--rust);background:var(--card)}
  .ac-empty{padding:10px 14px;font-size:13px;color:var(--muted)}
  .stats.stats-3{grid-template-columns:repeat(3,1fr)}
  .stats.stats-1{grid-template-columns:1fr;max-width:280px}
  .stat{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow);display:flex;align-items:flex-start;gap:14px}
  .stat-active{border-color:var(--rust);box-shadow:0 0 0 2px rgba(37,70,201,.18)}
  .stat-ic{flex:none;width:46px;height:46px;border-radius:12px;background:rgba(37,70,201,.10);display:grid;place-items:center;color:var(--rust)}
  .stat-ic svg{width:24px;height:24px}
  .stat-body{flex:1;min-width:0}
  .stat .k{font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:600}
  .stat .v{font-family:'Fraunces',serif;font-weight:900;font-size:30px;letter-spacing:-.02em;margin-top:4px;line-height:1;padding-bottom:8px;border-bottom:2px solid var(--rust);display:inline-block}
  .stat .v small{font-size:13px;font-family:'Spline Sans',sans-serif;color:var(--muted);font-weight:500}

  /* MODAL */
  .overlay{position:fixed;inset:0;background:rgba(20,30,60,.55);display:grid;
    place-items:center;z-index:100;padding:20px}
  .modal{background:var(--card);border:1px solid var(--line);border-radius:18px;width:100%;max-width:560px;
    box-shadow:0 30px 80px -30px rgba(20,30,60,.6);max-height:90vh;overflow:auto;will-change:transform}
  .modal-wide{max-width:1240px;width:min(1240px,96vw)}
  .modal-mid{max-width:720px}
  /* двухколоночный макет карточки заказа: фото слева (половина), форма справа */
  .order-split{display:grid;grid-template-columns:1fr 1fr;gap:24px;align-items:start}
  .order-split .ophoto-col{position:sticky;top:0}
  .order-split .ophoto-col .field{margin:0}
  .order-split .oform-col{min-width:0}
  /* Карточка без фото (Барахолка): одна колонка, форма первой, KET и переписка под ней */
  .order-split.nophoto{grid-template-columns:1fr}
  .order-split.nophoto .oform-col{order:1}
  .order-split.nophoto .ophoto-col{order:2;position:static;top:auto}
  /* крупное превью фото в карточке заказа */
  .obig-wrap{width:100%;border-radius:12px;overflow:hidden;border:1px solid var(--line);background:var(--paper)}
  .obig-rotate{display:flex;gap:8px;margin-top:8px}
  .obig-rotate .btn{flex:1}
  .obig-photo{width:100%;max-height:520px;object-fit:contain;cursor:zoom-in;display:block;transition:transform .15s;transform-origin:center}
  .obig-empty{width:100%;aspect-ratio:3/4;border:1px dashed var(--line);border-radius:12px;
    display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:14px;background:var(--paper)}
  .obig-thumbs{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
  .obig-thumbs img{width:54px;height:54px;object-fit:cover;border-radius:8px;border:1px solid var(--line);cursor:pointer}
  .obig-thumbs img.active{border-color:var(--rust);border-width:2px}
  .obig-by{font-size:12.5px;color:var(--muted);margin-top:8px;line-height:1.4;background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:7px 11px}
  .obig-by b{color:var(--ink);font-weight:600}
  /* увеличение фото поверх всего */
  .photo-zoom-ov{position:fixed;inset:0;background:rgba(20,30,60,.92);z-index:99999;display:grid;place-items:center;padding:24px;cursor:zoom-out}
  .photo-zoom-ov img{max-width:96vw;max-height:92vh;object-fit:contain;border-radius:8px;box-shadow:0 20px 60px rgba(0,0,0,.5)}
  .photo-zoom-ov .pz-x{position:absolute;top:18px;right:24px;font-size:36px;color:#fff;background:none;border:none;cursor:pointer;line-height:1}
  @media (max-width:760px){
    .modal-wide{max-width:560px;width:min(560px,96vw)}
    .modal-mid{max-width:560px}
    .order-split{grid-template-columns:1fr;gap:16px}
    /* На телефоне данные получателя идут ПЕРВЫМИ, а фото, блок KET и переписка — ниже.
       Раньше колонка с фото стояла первой: курьер открывал заказ и видел пустую рамку
       «Фото заказа нет» на треть экрана, под ней KET, под ним чат, а ФИО, телефон, адрес
       и сумму — только после двух экранов прокрутки. */
    .order-split .oform-col{order:1}
    .order-split .ophoto-col{order:2;position:static;top:auto}
    .obig-empty{aspect-ratio:4/3}
    .obig-photo{max-height:60vh}
  }
  .modal-head{padding:20px 24px;border-bottom:1px solid var(--line);display:flex;align-items:center}
  .modal-head h3{font-family:'Fraunces',serif;font-weight:600;font-size:20px}
  .modal-head .x{margin-left:auto;cursor:pointer;border:none;background:transparent;font-size:22px;
    color:var(--muted);line-height:1;padding:4px}
  .modal-body{padding:22px 24px}
  .modal-foot{padding:16px 24px;border-top:1px solid var(--line);display:flex;gap:10px;justify-content:flex-end;background:var(--paper)}
  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
  /* Карточка Барахолки: две колонки — слева то, что заполняют руками, справа подставленное.
     Сами колонки раскладывает js/11 (переносит готовые поля), здесь только их вид. */
  .grid2.bar-split{align-items:start}
  .grid2.bar-split .bar-col{display:flex;flex-direction:column;gap:14px;min-width:0}
  .grid2.bar-split .bar-col .field{margin:0}
  .grid2.bar-split .bar-col .field.full{grid-column:auto}

  .phone-wrap{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:10px;background:var(--paper);overflow:hidden}
  .phone-wrap:focus-within{outline:2px solid rgba(37,70,201,.3);border-color:var(--rust);background:var(--card)}
  .phone-pre{display:flex;align-items:center;padding:0 10px;font-size:14px;font-weight:600;color:var(--muted);
    background:rgba(20,30,60,.04);border-right:1px solid var(--line);user-select:none}
  .phone-wrap input{border:none!important;outline:none!important;background:transparent!important;border-radius:0!important;flex:1}

  .toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--paper);
    padding:12px 20px;border-radius:12px;font-size:14px;font-weight:500;box-shadow:0 20px 50px -20px rgba(0,0,0,.6);z-index:200}
  .loading{padding:60px;text-align:center;color:var(--muted);font-size:15px}
  .hist{list-style:none}
  .hist li{display:flex;gap:10px;align-items:flex-start;padding:8px 0;border-bottom:1px solid #e4e9f2;font-size:13px}
  .hist li:last-child{border-bottom:none}
  .hist .dot{width:10px;height:10px;border-radius:50%;margin-top:4px;flex:none}
  .hist .when{color:var(--muted);font-size:12px}

  /* ── Компактные карточки заказов для курьера ── */
  .cour-cards{display:flex;flex-direction:column;gap:12px}
  .cour-card{background:var(--card);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);overflow:hidden;
    /* УДЕРЖАНИЕ — ЭТО НАШ ЖЕСТ, А НЕ ВЫДЕЛЕНИЕ ТЕКСТА (19.10.2026). На iPhone долгое
       нажатие по умолчанию начинает выделять текст: всплывает «Скопировать», появляются
       синие маркеры, и перетаскивание превращается в борьбу с ними. Убираем и выделение,
       и системное меню по удержанию (`-webkit-touch-callout`) — на ссылках оно тоже
       вылезает, а тут вся карточка состоит из ссылок: адрес и телефон. */
    -webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
  /* Поля ввода исключаем: в количестве собранных заказов текст правят руками, и
     запрет выделения мешал бы ставить курсор. */
  .cour-card input,.cour-card select,.cour-card textarea{-webkit-user-select:text;user-select:text}
  /* iOS умеет «перетаскивать» саму ссылку по удержанию — адрес и телефон тут ссылки,
     и это второй способ сорвать жест. Нажатие по ним работает как раньше. */
  .cour-card a{-webkit-user-drag:none;-webkit-touch-callout:none}
  .cc-head{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;cursor:pointer;user-select:none}
  .cc-main{flex:1;min-width:0}
  .cc-top{display:flex;align-items:center;gap:8px;margin-bottom:4px}
  .cc-id{font-family:'Fraunces',serif;font-weight:900;font-size:17px;color:var(--rust-dk);letter-spacing:.5px}
  .cc-client{font-weight:600;font-size:15px;line-height:1.25;margin-bottom:2px;word-break:break-word}
  .cc-dist{display:inline-block;font-size:12px;font-weight:700;color:#1a7f37;background:#e6f4ea;padding:2px 8px;border-radius:20px;vertical-align:middle}
  .cc-addr{font-size:13.5px;color:var(--ink);line-height:1.35;word-break:break-word}
  .cc-addr-row{margin-top:5px;line-height:1.4}
  .cc-addr-row .addr-link{display:inline-flex;align-items:flex-start;gap:4px;font-size:14px;color:var(--rust-dk);
    text-decoration:none;font-weight:600;word-break:break-word;padding:4px 0;border-bottom:1px dashed var(--rust);max-width:100%;cursor:pointer}
  .cc-addr-row .addr-link:active{opacity:.6}
  .cc-phone-row{margin-top:8px}
  .cc-phone-row a{display:inline-flex;align-items:center;gap:5px;font-size:14.5px;font-weight:600;color:var(--moss);
    text-decoration:none;padding:5px 10px;background:#eef1e8;border:1px solid #cfd9bf;border-radius:8px}
  .cc-phone-row a::before{content:"📞";font-size:13px}
  .cc-phone-row a:active{opacity:.6}
  .cc-phone{display:inline-block;margin-top:4px;font-size:13.5px}
  .cc-right{display:flex;flex-direction:column;align-items:flex-end;gap:8px;flex:none;text-align:right}
  .cc-sum{font-family:'Fraunces',serif;font-weight:900;font-size:18px;color:var(--moss);line-height:1;white-space:nowrap}
  .cc-sum small{display:block;font-family:'Spline Sans',sans-serif;font-weight:600;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:2px}
  .cc-chev{font-size:13px;color:var(--muted);transition:transform .2s}
  .cour-card.open .cc-chev{transform:rotate(180deg)}
  /* ── Перестановка заявок пальцем (19.10.2026) ──────────────────────────
     Ручка «⠿» — крупная намеренно: за неё карточка берётся СРАЗУ, без удержания,
     и промахнуться по ней пальцем нельзя. `touch-action:none` обязателен: без него
     браузер считает движение от ручки прокруткой и карточка не едет. */
  .cc-grip{font-size:21px;line-height:1;color:var(--muted);cursor:grab;padding:7px 9px;
    margin:-5px -7px 0 0;touch-action:none;user-select:none}
  .cc-grip:active{cursor:grabbing;color:var(--ink)}
  /* Карточка в полёте: оторвана от места (`position:fixed` ставится из кода), чуть
     увеличена и с тенью — так видно, что её «несут». Указатели выключены, иначе
     elementFromPoint под пальцем находил бы её саму, а не соседа под ней.
     `transition:none` обязателен: координату мы правим на каждое движение пальца, и
     любая плавность превратилась бы в запаздывание. */
  .cour-card.cc-drag{pointer-events:none;box-shadow:0 18px 38px rgba(20,30,60,.28);
    transform:scale(1.03) rotate(-.5deg);border-color:var(--ink);transition:none;
    opacity:.97}
  /* Гнездо — пустое место, куда карточка ляжет, если отпустить сейчас. */
  .cc-ph{border:2px dashed #b9c4d6;border-radius:14px;background:rgba(40,60,110,.04);
    box-sizing:border-box}
  .cour-cards.cc-dragging{cursor:grabbing}
  .cc-statusrow{display:flex;align-items:center;gap:8px;padding:0 16px 12px}
  .cc-statusrow .status-pick{flex:1;min-width:0}
  .cc-body{display:none;border-top:1px solid #e4e9f2;padding:6px 16px 14px;background:var(--paper)}
  .cour-card.open .cc-body{display:block}
  .cc-row{display:flex;justify-content:space-between;gap:14px;padding:8px 0;border-bottom:1px solid #e4e9f2;font-size:13.5px}
  .cc-row:last-of-type{border-bottom:none}
  .cc-row .lbl{color:var(--muted);font-weight:600;flex:none}
  .cc-row .vl{text-align:right;word-break:break-word}
  .cc-actions{display:flex;gap:8px;padding-top:12px}
  .cc-actions .btn{flex:1;justify-content:center}

  /* ── Фото заявок ── */
  .photo-grid{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
  .photo-thumb{position:relative;width:84px;height:84px;border-radius:10px;overflow:hidden;border:1px solid var(--line);background:var(--paper);flex:none}
  .photo-thumb img{width:100%;height:100%;object-fit:cover;cursor:pointer;display:block}
  .photo-thumb .del{position:absolute;top:3px;right:3px;width:20px;height:20px;border:none;border-radius:50%;
    background:rgba(20,30,60,.62);color:#fff;font-size:13px;line-height:1;cursor:pointer;display:grid;place-items:center}
  .photo-thumb .del:hover{background:#c0392b}
  .photo-add{display:inline-flex;align-items:center;gap:8px;cursor:pointer;font:inherit;font-weight:600;font-size:13px;
    color:var(--rust-dk);border:1.5px dashed var(--line);border-radius:10px;padding:9px 14px;background:var(--paper);transition:.15s}
  .photo-add:hover{border-color:var(--rust);background:var(--card)}
  .photo-empty{color:var(--muted);font-size:13px;padding:6px 0}
  .photo-view-ov{position:fixed;inset:0;background:rgba(20,30,60,.88);z-index:9999;display:grid;place-items:center;padding:20px;cursor:zoom-out}
  .photo-view-ov img{max-width:94vw;max-height:90vh;border-radius:10px;box-shadow:0 20px 60px -20px #000}
  .photo-view-ov .x{position:absolute;top:18px;right:22px;font-size:34px;color:#fff;cursor:pointer;line-height:1;background:none;border:none}

  /* ── Кабинет партнёра (моб.) ── */
  .pcab{max-width:520px;margin:0 auto;min-height:100vh;min-height:100dvh;padding:18px 16px 140px;display:flex;flex-direction:column;gap:16px}
  .pcab-view{display:flex;flex-direction:column;gap:16px}
  /* нижнее меню */
  .pcab-nav{position:fixed;left:0;right:0;bottom:0;z-index:8500;display:flex;background:var(--card);
    border-top:1px solid var(--line);box-shadow:0 -4px 20px -8px rgba(20,30,60,.2);
    padding:6px 4px;padding-bottom:calc(20px + env(safe-area-inset-bottom,0px))}
  .pcab-nav-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;background:none;border:none;
    cursor:pointer;padding:8px 4px;font:inherit;font-size:11px;font-weight:600;color:var(--muted);border-radius:12px;transition:.15s}
  .pcab-nav-btn .pn-ic{font-size:21px;line-height:1;filter:grayscale(.4);opacity:.7}
  .pcab-nav-btn.active{color:var(--rust)}
  .pcab-nav-btn.active .pn-ic{filter:none;opacity:1}
  .pcab-nav-btn:active{background:var(--paper)}
  /* приветствие */
  .pcab-hello{background:linear-gradient(135deg,#fff,var(--paper));border:1px solid var(--line);border-radius:16px;padding:16px 18px}
  .ph-greet{font-family:'Fraunces',serif;font-weight:600;font-size:21px;line-height:1.15}
  .ph-sub{margin-top:6px;font-size:14px;color:var(--muted);font-weight:600}
  .pcab-err,.pcab-empty{padding:40px 20px;text-align:center;color:var(--muted)}
  .pcab-err{min-height:100vh;display:flex;flex-direction:column;justify-content:center;font-size:18px;font-family:'Fraunces',serif}
  .pcab-top{padding-top:8px}
  .pcab-brand{display:flex;align-items:center;gap:12px}
  .pcab-logo{width:48px;height:48px;border-radius:12px;background:linear-gradient(135deg,var(--rust),var(--gold));
    display:grid;place-items:center;color:#fff;font-family:'Fraunces',serif;font-weight:900;font-size:20px}
  .pcab-logo-img{height:34px;width:auto;display:block}
  @media (max-width:380px){.pcab-logo-img{height:30px}}
  .pcab-store{font-family:'Fraunces',serif;font-weight:600;font-size:20px;line-height:1.1}
  .pcab-sub{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-top:2px}
  .pcab-call{width:100%;padding:18px 20px;border:none;border-radius:16px;background:linear-gradient(135deg,#2f8fe0,#1f6fc4);
    color:#fff;font-size:18px;font-weight:700;cursor:pointer;box-shadow:0 8px 24px -6px rgba(31,111,196,.5);font-family:inherit;
    display:flex;flex-direction:column;align-items:center;gap:4px;transition:background .12s,box-shadow .12s,transform .08s}
  .pcab-call small{font-size:12px;font-weight:500;opacity:.85}
  .pcab-call.sm{padding:14px 18px;font-size:16px;margin-bottom:14px}
  .pcab-call:active{transform:scale(.98);background:linear-gradient(135deg,#34c759,#28a048);box-shadow:0 8px 24px -6px rgba(40,160,72,.55)}
  .pcab-call:disabled{opacity:.6}
  /* QR-карточка */
  .pcab-qr-card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:20px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px}
  .pcab-qr-h{font-family:'Fraunces',serif;font-weight:600;font-size:18px}
  .pcab-qr-sub{font-size:13px;color:var(--muted);max-width:280px}
  .pcab-qr-box{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px;margin:6px 0}
  .pcab-qr-box img{display:block;border-radius:6px}
  .pcab-info{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column;gap:10px}
  .pcab-row{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:14px}
  .pcab-row span{color:var(--muted)}
  .pcab-row b{text-align:right}
  .pcab-hist-h{font-family:'Fraunces',serif;font-size:16px;font-weight:600;margin-bottom:10px}
  .pcab-list{display:flex;flex-direction:column;gap:10px}
  .pcab-item{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
  .pcab-item-h{display:flex;justify-content:space-between;font-size:14px;margin-bottom:4px}
  .pcab-item-h span{color:var(--rust-dk);font-weight:600}
  .pcab-item-s{font-size:13px;color:var(--muted)}
  /* заполнение заказов партнёром */
  .pfill-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px;display:flex;flex-direction:column;gap:4px}
  .pfill-h{font-family:'Fraunces',serif;font-weight:600;font-size:16px;margin-bottom:8px;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
  .pfill-print{border:none;border-radius:9px;background:var(--rust);color:#fff;font-weight:600;cursor:pointer;font-size:12.5px;padding:6px 12px;white-space:nowrap}
  .pfill-note{font-size:12.5px;color:var(--muted);background:#faf0dc;border-radius:9px;padding:8px 10px;margin-bottom:10px}
  .pfill-l{font-size:12px;font-weight:600;color:var(--muted);margin-top:8px}
  .pfill-card input{font:inherit;font-size:15px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);width:100%}
  .pfill-card input:focus{outline:2px solid rgba(37,70,201,.25);border-color:var(--rust)}
  .pfill-track{display:flex;gap:8px}
  .pfill-track input{flex:1}
  .pfill-select{font:inherit;font-size:15px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);width:100%}
  .pfill-select:focus{outline:2px solid rgba(37,70,201,.25);border-color:var(--rust)}
  .pfill-card input:disabled,.pfill-select:disabled{opacity:.6;background:var(--paper)}
  /* фильтры в кабинете */
  .pcab-filters{display:flex;flex-direction:column;gap:10px;margin-bottom:12px}
  .pcab-search{font:inherit;font-size:15px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);width:100%}
  .pcab-search:focus{outline:2px solid rgba(37,70,201,.25);border-color:var(--rust)}
  .pcab-dates{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}
  .pcab-dates label{display:flex;flex-direction:column;gap:3px;font-size:11px;font-weight:600;color:var(--muted);flex:1;min-width:120px}
  .pcab-dates input{font:inherit;font-size:14px;padding:9px 10px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink)}
  .pcab-clear{padding:9px 14px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink);font-weight:600;cursor:pointer;font-size:14px}
  /* карточка заказа в кабинете */
  .pcab-ord{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px;cursor:pointer;transition:border-color .15s,transform .05s}
  .pcab-ord:active{transform:scale(.99)}
  .pcab-ord:hover{border-color:var(--rust)}
  .pcab-ord.locked{opacity:.75;cursor:default}
  .pcab-ord.locked:hover{border-color:var(--line)}
  .pcab-ord-h{display:flex;justify-content:space-between;align-items:center;gap:10px}
  .pcab-ord-h b{font-family:'Fraunces',serif;font-size:16px}
  .pcab-ord-date{font-size:12px;color:var(--muted)}
  .pcab-ord-sub{font-size:14px;color:var(--ink);margin-top:4px}
  .pcab-ord-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
  .pcab-tag{font-size:11.5px;font-weight:600;color:var(--muted);background:var(--paper);border:1px solid var(--line);border-radius:20px;padding:3px 9px}
  .pcab-tag.lock{color:#1c37a0;border-color:#e0b3a3;background:#f4e0d8}
  .pcab-lockmsg{background:#f4e0d8;border:1px solid #e0b3a3;color:#1c37a0;border-radius:12px;padding:12px 14px;font-size:14px;font-weight:600}
  .pcab-ghost{background:var(--card)!important;color:var(--ink)!important;box-shadow:none!important;border:1px solid var(--line)!important}
  .pfill-scan{padding:0 14px;border:none;border-radius:10px;background:var(--moss);color:#fff;font-weight:600;cursor:pointer;white-space:nowrap;font-size:14px}
  .pfill-area{font:inherit;font-size:15px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);width:100%;resize:vertical;min-height:48px}
  .pfill-check{display:flex;align-items:center;gap:9px;font-size:15px;font-weight:600;color:var(--ink);margin:14px 0 4px;cursor:pointer;user-select:none}
  .pfill-delivery{display:flex;flex-direction:column;gap:2px;background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:6px 14px;margin:4px 0 6px}
  .pfill-delivery .pfill-check{margin:8px 0}
  .pfill-check input{width:20px;height:20px;accent-color:var(--rust);cursor:pointer}
  .pfill-hint{font-size:12.5px;color:var(--muted);line-height:1.45;margin-top:6px;background:var(--paper);border:1px dashed var(--line);border-radius:10px;padding:9px 11px}
  /* блок курьерских городов */
  .pfill-cour{margin:8px 0 4px;background:#eef5ec;border:1px solid #c7e0c2;border-radius:12px;padding:11px 13px}
  .pfill-cour-h{font-size:13px;font-weight:700;color:#2f6d36;margin-bottom:6px}
  .pfill-cour-list{font-size:13px;color:var(--ink);line-height:1.6}
  .pfill-cour-note{font-size:12px;color:var(--muted);margin-top:7px;line-height:1.4}
  /* плавающая кнопка WhatsApp «Служба поддержки» */
  .wa-fab{position:fixed;right:16px;bottom:calc(96px + env(safe-area-inset-bottom,0px));z-index:9000;display:flex;align-items:center;gap:9px;background:#25D366;color:#fff;text-decoration:none;padding:11px 16px 11px 13px;border-radius:30px;box-shadow:0 6px 20px rgba(0,0,0,.22);font-weight:700;font-size:14px}
  .wa-fab span{white-space:nowrap}
  .wa-fab:active{transform:scale(.97)}
  @media (max-width:380px){.wa-fab{padding:10px 13px;font-size:13px}}
  .pfill-area:focus{outline:2px solid rgba(37,70,201,.25);border-color:var(--rust)}
  .pfill-area:disabled{opacity:.6}
  .pfill-dyn{display:flex;flex-direction:column;gap:4px}
  .scan-ov{position:fixed;inset:0;background:rgba(20,30,60,.95);z-index:99999;display:flex;align-items:center;justify-content:center;padding:20px}
  .scan-box{width:100%;max-width:420px}
  #scanReader{width:100%;border-radius:14px;overflow:hidden;background:#000}

  /* ── Окно «Заказы заявки» ── */
  .pom-list{display:flex;flex-direction:column;gap:14px}
  .pom-order{border:1px solid var(--line);border-radius:12px;padding:14px;background:var(--paper)}
  .pom-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:4px}
  .pom-head b{font-family:'Fraunces',serif;font-size:16px}
  .pom-sub{font-size:13px;color:var(--muted);margin-bottom:10px}
  .pom-track{font-size:13px;font-family:monospace;background:#eef0f4;border-radius:8px;padding:6px 10px;margin-bottom:10px;display:inline-block}
  .pom-track-empty{background:#fdf3e3;color:#8a6d1f;font-family:inherit}
  .pom-scan{margin-bottom:14px}
  .pom-scan input{width:100%;padding:11px 14px;border:2px solid var(--rust);border-radius:10px;font:inherit;font-size:15px}
  .pom-order.pom-found{outline:3px solid var(--moss);outline-offset:2px;animation:pomFlash 1.4s ease}
  @keyframes pomFlash{0%{background:#e9f6ec}100%{background:var(--paper)}}
  .pom-paid{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:14px;font-weight:600;color:var(--ink);cursor:pointer}
  .pom-paid input{width:18px;height:18px;accent-color:var(--rust);cursor:pointer}
  .pom-paidorder{color:var(--moss)}
  .o-paidorder{display:flex;align-items:center;gap:8px;margin-top:9px;font-size:14px;font-weight:600;color:var(--moss);cursor:pointer;user-select:none}
  .o-finance{background:rgba(37,70,201,.05);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
  .ofin-grid{display:flex;flex-direction:column;gap:6px;margin:8px 0}
  .ofin-row{display:flex;justify-content:space-between;align-items:center;font-size:14px}
  .ofin-row span{color:var(--muted)}
  .ofin-total{border-top:1px solid var(--line);padding-top:8px;margin-top:4px;font-size:15px}
  .ofin-subtotal{border-top:1px dashed var(--line);padding-top:6px;margin-top:4px;color:var(--muted)}
  .ofin-total span{color:var(--ink);font-weight:600}
  .o-paidorder input{width:18px;height:18px;accent-color:var(--moss);cursor:pointer}
  .pom-paidhint{font-weight:400;color:var(--muted);font-size:12px}
  .pom-sumrow{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px}
  .pom-sumrow span{font-size:13px;color:var(--muted);font-weight:600}
  .pom-sum{width:130px;font:inherit;font-family:'Fraunces',serif;font-weight:900;font-size:15px;color:var(--rust-dk);
    padding:8px 10px;border:1px solid var(--line);border-radius:9px;background:var(--card);text-align:right}
  .pom-sum:focus{outline:2px solid rgba(37,70,201,.3);border-color:var(--rust)}

  /* ── Строчное редактирование заказа ── */
  .row-editing{background:var(--paper)}
  .row-editing td{padding:6px 8px}
  .row-editing input,.row-editing select{width:100%;min-width:90px;font:inherit;font-size:13px;
    padding:6px 8px;border:1px solid var(--line);border-radius:8px;background:var(--card)}
  .row-editing input[type="date"]{min-width:130px}

  /* ── Компактные строки заказов с раскрытием ── */
  .ord-list{display:flex;flex-direction:column;gap:8px}
  .ord-row{border:1px solid var(--line);border-radius:12px;background:var(--card);box-shadow:var(--shadow);overflow:hidden}
  .ord-main{display:flex;align-items:center;gap:14px;padding:12px 14px;cursor:pointer;flex-wrap:nowrap}
  .ord-main:hover{background:rgba(20,30,60,.02)}
  .ord-id{font-family:'Fraunces',serif;font-weight:900;font-size:15px;flex:none;width:74px}
  .ord-cell{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13.5px}
  .ord-cell .lbl{display:block;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:1px}
  .ord-c-client{flex:1.3}.ord-c-phone{flex:1}.ord-c-addr{flex:1.6}.ord-c-cost{flex:.7;text-align:right}
  .ord-main .status-pick{flex:none;width:140px}
  .ord-chev{flex:none;color:var(--muted);transition:transform .2s;font-size:13px}
  .ord-row.open .ord-chev{transform:rotate(180deg)}
  .ord-actions{flex:none;display:flex;gap:6px}
  .ord-details{display:none;padding:0 14px 14px;border-top:1px solid var(--line)}
  .ord-row.open .ord-details{display:block}
  .ord-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px 18px;padding:14px 0}
  .ord-f .k{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:2px}
  .ord-f .v{font-size:14px}
  @media (max-width:760px){
    .ord-main{flex-wrap:wrap;gap:8px}
    .ord-c-addr,.ord-c-phone{flex:1 1 100%}
    .ord-main .status-pick{width:100%}
    .ord-actions{flex:1 1 100%;justify-content:flex-end}
  }

  @media (max-width:760px){
    .grid2{grid-template-columns:1fr}.stats{grid-template-columns:1fr 1fr}
    .stats.stats-5,.stats.stats-4,.stats.stats-1,.stats.stats-3,.stats.stats-2{grid-template-columns:1fr 1fr;max-width:none}
    .stats .stat{padding:13px 14px}
    .stats .stat .v{font-size:24px}
    .page-head h1{font-size:24px}
    .mhead{padding:12px;border-radius:14px}
    /* На телефоне название и кнопки идут В СТОЛБИК. Раньше они делили строку, и блоку
       кнопок доставалось около 150 px — месяц, год, «Помощник» и «Текущий» вставали друг
       под другом в четыре этажа и утапливали синюю плашку далеко вниз. */
    .mhead-top{padding:2px 2px 12px;flex-direction:column;align-items:stretch;gap:10px}
    .mhead-top h1{font-size:24px}
    .mhead-top .head-actions{width:100%;display:flex;flex-wrap:wrap;gap:8px}
    .mhead-top .head-actions>*{flex:1 1 auto}
    .dash-period-filter{width:100%}
    .dash-period-filter select{flex:1 1 110px;min-width:0}
    .dash-period-filter .btn{flex:1 1 auto}
    .mhero{padding:16px;gap:16px;align-items:flex-start;flex-direction:column}
    .mhero-v{font-size:32px}
    .mhero-stats{width:100%;justify-content:space-between}
    .mhs{padding:0 10px;text-align:center;flex:1}
    .mhs:first-child{padding-left:0;text-align:left}
    .mhs b{font-size:21px}
    .mhs span{font-size:11px}
    .user-box{padding-left:10px}
    .content{padding:18px 16px}
    /* боковая панель -> выдвижное меню (off-canvas) */
    .app-body{display:block}
    .menu-toggle{display:block}
    .sidebar{position:fixed;top:0;left:0;height:100vh;width:270px;max-width:82vw;z-index:200;
      transform:translateX(-100%);transition:transform .26s ease;border-right:1px solid rgba(255,255,255,.06);
      border-bottom:none;background:#26282c;padding:18px 14px;
      overflow-y:auto;-webkit-overflow-scrolling:touch;
      display:flex;flex-direction:column;align-items:stretch;box-shadow:0 0 40px -8px rgba(0,0,0,.5)}
    .sidebar.open{transform:translateX(0)}
    .side-nav{flex-direction:column;flex-wrap:nowrap;gap:4px;overflow:visible;flex:0 0 auto}
    .side-nav button{font-size:14px;padding:11px 14px;border-radius:10px;background:transparent;
      border-color:transparent;justify-content:flex-start;color:rgba(255,255,255,.62)}
    .side-nav button:hover{color:#fff;background:rgba(255,255,255,.07)}
    .side-nav button.active{background:var(--nav-col,#2546c9);color:#fff;border-color:transparent}
    .side-nav button.active svg{color:#fff}
    .side-nav .nav-group{color:rgba(255,255,255,.38)}
    .sidebar-logout{margin-top:14px;width:100%;flex:0 0 auto;border-radius:10px;
      color:#ff8f7a;border-color:rgba(255,143,122,.3);background:transparent}
    .side-user{border-top:1px solid rgba(255,255,255,.07)}
    /* на мобильном меню НИКОГДА не свёрнуто (класс с десктопа игнорируем) */
    body.nav-collapsed .sidebar{width:270px;max-width:82vw;flex:none;padding:18px 14px}
    body.nav-collapsed .side-nav button span{display:inline !important}
    body.nav-collapsed .side-nav button{justify-content:flex-start;padding:11px 14px}
    body.nav-collapsed .side-nav .nav-group{font-size:10px;padding:15px 13px 5px;justify-content:flex-start}
    body.nav-collapsed .ng-dot{width:7px;height:7px;border-radius:50%}
    body.nav-collapsed .sidebar-logout{font-size:14px;padding:9px 14px}
    body.nav-collapsed .sidebar-logout::after{content:''}
    body.nav-collapsed .su-info{display:block}
    body.nav-collapsed .side-user{justify-content:flex-start;padding:11px 10px}
    body.nav-collapsed .nav-badge{position:static;margin-left:auto;min-width:20px;height:19px;font-size:11px}
    .sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(20,30,60,.45);z-index:190}
    .sidebar-backdrop.show{display:block}
    /* нижняя панель быстрых вкладок убрана на мобиле */
    .bottom-nav{display:none!important}
    /* «Заказы партнёров» на мобильном — своя, более просторная карточная раскладка вместо
       тесной «настольной» таблицы на 19 колонок. Плотные стили десктопа (мелкий шрифт, узкие
       отступы) здесь намеренно перебиваются — на телефоне нужно крупнее и просторнее, а не гуще. */
    #inboundTable tbody td{padding:11px 14px;font-size:14px;line-height:1.35}
    #inboundTable tbody td::before{font-size:11px}
    #inboundTable .wh-cat{font-size:12px}
    #inboundTable .cell-time{font-size:11px}
    #inboundTable .pill{padding:4px 10px;font-size:12.5px}
    #inboundTable .ket-badge{padding:4px 9px;font-size:12px}
    /* второстепенные поля прячем на телефоне — данные никуда не делись, просто не загромождают
       карточку; полностью видно на компьютере или через фильтр по столбцу */
    #inboundTable td[data-label="Отправитель ИП"],
    #inboundTable td[data-label="Оператор логистики"],
    #inboundTable td[data-label="Индекс"],
    #inboundTable td[data-label="Вес"],
    #inboundTable td[data-label="Всего звонков"],
    #inboundTable td[data-label="Звонков сегодня"],
    #inboundTable td[data-label="Склад"]{display:none}
    /* самые важные поля — крупнее и заметнее остальных */
    #inboundTable td[data-label="Штрих-код заказа"]{background:#f7f8fc;border-radius:10px 10px 0 0;margin:-6px -4px 4px;padding:12px 14px}
    #inboundTable td[data-label="Штрих-код заказа"] strong{font-size:15px}
    #inboundTable td[data-label="Сумма"]{font-weight:700}
    /* Адаптивная таблица заявок: строки -> карточки */
    .resp-table{border:0}
    .resp-table thead{display:none}
    .resp-table,.resp-table tbody,.resp-table tr,.resp-table td{display:block;width:100%}
    .table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
    /* грид статистики дашборда — прокрутка (дублирует правило выше для явности) */
    .dash-stat-scroll{overflow-x:auto!important;-webkit-overflow-scrolling:touch}
    .dash-stat-scroll .dash-stat{min-width:560px}
    .resp-table tr{
      background:var(--card);border:1px solid var(--line);border-radius:14px;
      box-shadow:var(--shadow);margin-bottom:14px;padding:6px 4px;overflow:hidden;
    }
    .resp-table td{
      display:flex;justify-content:space-between;align-items:center;gap:12px;
      padding:9px 14px;border-bottom:1px solid #e4e9f2;text-align:right;
    }
    .resp-table tr td:last-child{border-bottom:0}
    /* «Сортировка», телефон: в ячейке «Кто принял» три части — отметка, имя и время.
       На мобильном ячейка выкладывается в строку (label слева, содержимое справа), и
       имя со временем уезжали за край экрана. Переносим их на свои строки, как на
       компьютере, с выравниванием по правому краю. */
    .sorting-tbl td[data-label="Кто принял"]{flex-wrap:wrap;align-items:flex-start}
    .sorting-tbl td[data-label="Кто принял"] .cell-time{flex:0 0 100%;text-align:right;margin-top:3px}
    .resp-table td::before{
      content:attr(data-label);font-size:11px;font-weight:700;text-transform:uppercase;
      letter-spacing:.04em;color:var(--muted);text-align:left;flex:0 0 42%;
    }
    .resp-table td[data-label=""]::before{display:none}
    .resp-table td.cell-actions{justify-content:flex-end}
    .resp-table td.cell-actions .row-actions{width:100%;justify-content:stretch;gap:8px}
    .resp-table td.cell-actions .btn{flex:1;justify-content:center}
    .resp-table .status-pick{max-width:60%}
    .resp-table .qty-edit{width:80px}
    .resp-table .status-time{text-align:right;width:100%}
    .filters .date-field input{min-width:0;width:100%}
    /* фильтры на мобиле — каждый элемент на всю ширину, ничего не налезает */
    .filters{flex-direction:column;align-items:stretch;gap:10px}
    .filters-dates{flex-direction:column;align-items:stretch}
    .filters .date-field{width:100%}
    .filters input,.filters select{width:100%}
    .filters #pfdateclear,.filters #ofdateclear{align-self:stretch!important;width:100%}
    /* сворачиваемые фильтры под кнопкой «Фильтры» */
    .filters-toggle{display:block;width:100%;justify-content:center}
    .filters-body{display:none}
    .filters-body.open{display:flex;flex-direction:column;gap:10px;width:100%}
    /* ── СВОРАЧИВАЕМЫЕ КАРТОЧКИ: свёрнуто видно только заголовок + кнопки ──
       ВНИМАНИЕ: правила ниже относятся ТОЛЬКО к таблицам с классом .resp-collapse —
       это «Заказы» и «Заявки на забор», где строка раскрывается по клику. Раньше они
       действовали на все .resp-table подряд, и любая другая таблица на мобильном
       превращалась в пустые полоски: ячейки скрывались, а показывались только те,
       чьи подписи перечислены ниже («ID», «Статус», «Город»…) — у чужих таблиц таких
       подписей нет. Так ломались «История изменений» и «Непривязанные заказы».
       Новую таблицу со сворачиванием помечайте классом .resp-collapse; без него
       она просто покажет все ячейки, и это правильное поведение по умолчанию. */
  .resp-collapse tr{position:relative}
    .resp-collapse tr td[data-label="Наименование"],.resp-collapse tr td[data-label="ID"]{padding-top:13px}
    .resp-collapse tr td[data-label="Наименование"]::after,.resp-collapse tr td[data-label="ID"]::after{
      content:"▾";position:absolute;right:14px;color:var(--rust);font-size:14px;transition:transform .2s}
    .resp-collapse tr.open td[data-label="Наименование"]::after,.resp-collapse tr.open td[data-label="ID"]::after{transform:rotate(180deg)}
    /* свёрнутая строка: прячем все ячейки кроме заголовка и блока действий */
    .resp-collapse tr:not(.open) td{display:none}
    .resp-collapse tr:not(.open) td[data-label="Наименование"],
    .resp-collapse tr:not(.open) td[data-label="ID"],
    .resp-collapse tr:not(.open) td[data-label="Отправитель"],
    .resp-collapse tr:not(.open) td[data-label="ФИО клиента"],
    .resp-collapse tr:not(.open) td[data-label="Город"],
    .resp-collapse tr:not(.open) td[data-label="Статус"]{display:flex;border-bottom:1px solid #e4e9f2}
    .resp-collapse tr:not(.open) td[data-label="ID"]{border-bottom:1px solid #e4e9f2}
    .resp-collapse tr:not(.open) td.cell-actions{display:flex;border-top:1px solid #e4e9f2}
    /* В «Заказах» в блоке действий лежит ровно одна кнопка — «Удалить». В свёрнутой
       карточке на телефоне она оказывалась самым заметным элементом: ни телефона, ни
       адреса, ни суммы, зато красная кнопка под большим пальцем. Прячем её в свёрнутом
       виде — строка раскрывается одним касанием, и кнопка там же. Вместо неё показываем
       телефон получателя: курьеру он нужен чаще всего.
       В «Заявках на забор» действия оставляем: там это «Заказы» и «Изменить», то есть
       единственный вход внутрь заявки. */
    .orders-tbl tr:not(.open) td.cell-actions{display:none}
    .orders-tbl tr:not(.open) td[data-label="Телефон"]{display:flex;border-bottom:1px solid #e4e9f2}
    .show-more{display:block;width:100%;margin:4px 0 6px;justify-content:center}
    .list-count{display:block;text-align:center;font-size:12px;color:var(--muted);padding:4px 0 2px}
  }

  /* ── Загрузочный экран (сплэш) ── */
  #splash{position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;align-items:center;justify-content:center;
    background:linear-gradient(160deg,#eef2f8 0%,#f7f9fc 55%,#eaeef6 100%);
    font-family:'Spline Sans',system-ui,sans-serif;padding:24px;text-align:center;transition:opacity .45s ease;}
  #splash.hide{opacity:0;pointer-events:none;}
  .sp-logo{display:flex;align-items:center;gap:14px;margin-bottom:30px}
  .sp-logo-img{height:54px;width:auto;display:block}
  @media (max-width:560px){.sp-logo-img{height:42px}}
  .sp-logo .mk{width:74px;height:74px;border-radius:18px;display:grid;place-items:center;
    background:linear-gradient(135deg,#16407a,#1f5fb0 55%,#d9a531);box-shadow:0 14px 34px -14px rgba(22,64,122,.6)}
  .sp-logo .mk svg{width:42px;height:42px}
  .sp-name{font-family:'Fraunces',serif;font-weight:900;font-size:34px;letter-spacing:-.02em;line-height:1}
  .sp-name .b{color:#16407a}.sp-name .g{color:#d9a531}
  .sp-name small{display:block;font-family:'Spline Sans',sans-serif;font-weight:600;font-size:11px;letter-spacing:.16em;
    text-transform:uppercase;color:#7d899c;margin-top:5px}
  .sp-title{font-family:'Fraunces',serif;font-weight:600;font-size:22px;color:#1a2540;margin-bottom:6px}
  .sp-sub{font-size:14px;color:#7d899c;margin-bottom:22px;max-width:420px}
  .sp-bar{width:min(320px,80vw);height:10px;border-radius:20px;background:#dde4ee;overflow:hidden;position:relative}
  .sp-bar i{position:absolute;top:0;left:0;height:100%;width:40%;border-radius:20px;
    background:linear-gradient(90deg,#d9a531,#e7be57);animation:spbar 1.25s ease-in-out infinite}
  @keyframes spbar{0%{left:-42%}100%{left:102%}}
  .sp-wait{font-size:13px;color:#9aa4b4;margin-top:14px}
  .sp-feats{display:flex;gap:26px;flex-wrap:wrap;justify-content:center;margin-top:40px}
  .sp-feat{display:flex;align-items:center;gap:9px;font-size:13.5px;color:#41506b;font-weight:600}
  .sp-feat svg{width:22px;height:22px;color:#16407a;flex:none}
  @media (max-width:560px){.sp-name{font-size:27px}.sp-feats{gap:16px}.sp-feat{font-size:12.5px}}

  /* ── История изменений ── */
  .log-act{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:20px;white-space:nowrap;text-transform:uppercase;letter-spacing:.03em}
  .log-act.create{color:#2f6d36;background:#e7f1e6;border:1px solid #bcd9bb}
  .log-act.update{color:#8a5a12;background:#f6eed6;border:1px solid #e3cf9c}
  .log-act.delete{color:#1c37a0;background:#f4e0d8;border:1px solid #e0b3a3}
  .log-act.status{color:#2b5c8a;background:#e2edf6;border:1px solid #aecbe6}
  .log-act.ket{color:#fff;background:var(--moss);border:1px solid var(--moss)}
  .log-act.login,.log-act.logout{color:#5a4a8a;background:#ece8f6;border:1px solid #cabfe6}
  .log-when{white-space:nowrap;font-size:12.5px;color:var(--muted)}
  .log-when b{display:block;color:var(--ink);font-weight:600;font-size:13px}
  .log-changes{display:flex;flex-direction:column;gap:3px;margin-top:2px}
  .log-chg{font-size:12px;line-height:1.35}
  .log-chg .f{color:var(--muted);font-weight:600}
  .log-chg .old{color:#1c37a0;text-decoration:line-through;opacity:.8}
  .log-chg .arr{color:var(--muted);margin:0 4px}
  .log-chg .new{color:#2f6d36;font-weight:600}
  .log-user{font-weight:600;white-space:nowrap}
  /* ── Плавающая панель пагинации заказов ── */
  /* пока открыта карточка — плавающая панель пагинации не должна её перекрывать.
     Правило, а не разовое скрытие из JS: экран может перерисоваться при открытой
     карточке (обновления KET, заявок, фоновое обновление), и панель создастся заново. */
  body.modal-open .orders-pager{display:none!important}
  .orders-pager{position:fixed;left:50%;transform:translateX(-50%);bottom:18px;z-index:8000;
    display:flex;align-items:center;gap:18px;background:var(--card);border:1px solid var(--line);
    border-radius:30px;box-shadow:0 8px 28px -8px rgba(20,30,60,.4);padding:9px 18px}
  .orders-pager .op-info{font-size:13px;color:var(--muted);white-space:nowrap}
  .orders-pager .op-info b{color:var(--ink);font-weight:700}
  .orders-pager .op-nav{display:flex;align-items:center;gap:6px}
  .orders-pager .op-btn{font:inherit;font-size:13px;font-weight:600;cursor:pointer;border:1px solid var(--line);
    background:var(--paper);color:var(--ink);border-radius:8px;padding:6px 11px;transition:.15s}
  .orders-pager .op-btn:hover:not(:disabled){background:var(--rust);color:#fff;border-color:var(--rust)}
  .orders-pager .op-btn:disabled{opacity:.4;cursor:default}
  .orders-pager .op-page{font-size:13px;font-weight:700;color:var(--ink);white-space:nowrap;padding:0 4px}
  .orders-pager .op-perpage{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted);white-space:nowrap}
  .op-pp-wrap{position:relative}
  .op-pp-btn{font-weight:700!important}
  .op-pp-menu{position:absolute;bottom:calc(100% + 8px);left:0;background:var(--card);border:1px solid var(--line);
    border-radius:12px;box-shadow:0 10px 30px -8px rgba(20,30,60,.45);padding:6px;display:flex;flex-direction:column;gap:2px;min-width:90px;max-height:260px;overflow:auto;z-index:8100}
  .op-pp-item{font:inherit;font-size:14px;font-weight:600;cursor:pointer;border:none;background:transparent;color:var(--ink);
    border-radius:8px;padding:8px 14px;text-align:left;transition:.12s}
  .op-pp-item:hover{background:var(--paper)}
  .op-pp-item.active{background:var(--rust);color:#fff}
  @media (max-width:760px){
    .orders-pager{flex-direction:column;gap:7px;bottom:8px;padding:8px 12px;width:calc(100% - 20px);max-width:440px}
    .orders-pager .op-info{font-size:12px}
    .orders-pager .op-btn{padding:6px 9px;font-size:12px}
    .orders-pager .op-perpage{font-size:12px}
    /* контент с пагинацией: освобождаем место снизу, чтобы карточки не прятались под панелью */
    .content.has-pager{padding-bottom:150px}
    .content.has-pager .panel:last-of-type{margin-bottom:130px}
  }
  /* десктоп: тоже небольшой запас снизу при пагинации */
  .content.has-pager{padding-bottom:96px}
  /* и у самой таблицы — иначе плавающая панель перекрывает строки уже на первом экране, а не только в самом низу списка */
  .content.has-pager .panel:last-of-type{margin-bottom:76px}

/* ─── Модуль «Заполнение» ───────────────────────────────────────────────
   Главное действие — «Взять следующий», поэтому оно в шапке рядом со счётчиком
   очереди и продублировано внизу: за смену к нему возвращаются сотни раз. */
.fill-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-bottom:14px}
.fill-head h1{font-family:'Fraunces',serif;font-weight:900;font-size:34px;margin:0;line-height:1}
.fill-head p{margin:6px 0 0;color:var(--muted);font-size:14px}
.fill-head-act{display:flex;align-items:center;gap:16px}
.fh-queue{text-align:right}
.fh-queue span{display:block;font-size:12px;color:var(--muted)}
.fh-queue b{font-family:'Fraunces',serif;font-weight:900;font-size:26px;line-height:1}
.fill-head-act .btn{display:inline-flex;align-items:center;gap:10px;padding:13px 22px;font-size:15px}
.fill-head-act kbd{font:inherit;font-size:11px;background:rgba(255,255,255,.22);
  border-radius:6px;padding:3px 8px;letter-spacing:.04em}


.fill-kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px}
.fk{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px 20px;box-shadow:var(--shadow)}
.fk-k{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.fk-v{font-family:'Fraunces',serif;font-weight:900;font-size:36px;line-height:1.1;margin-top:8px}
.fk-v small{font-family:'Spline Sans',sans-serif;font-weight:500;font-size:15px;color:var(--muted)}
.fk-s{margin-top:8px;font-size:12px;color:var(--muted)}
.fk-s .up{color:var(--moss);font-weight:700}
.fk-s .down{color:var(--gold);font-weight:700}
/* Первая карточка — про очередь: она важнее остальных, поэтому залита цветом. */
.fk-main{background:linear-gradient(135deg,var(--rust),var(--rust-dk));border-color:transparent;color:#fff}
.fk-main .fk-k,.fk-main .fk-s{color:rgba(255,255,255,.8)}
.fk-ringrow{display:flex;align-items:center;justify-content:space-between;gap:14px}

/* Счётчик времени на заказ: в шапке карточки и в «У меня в работе». Зелёный, пока
   укладываешься в цель, красный — когда вышел за неё. Не запрет, а подсказка. */
.fill-cd{display:inline-block;margin-left:10px;font-size:12.5px;font-weight:700;white-space:nowrap}
.fill-cd.ok{color:var(--moss)}
.fill-cd.over{color:var(--rust)}
.fill-cd.hold{color:var(--muted);font-weight:600}
.resp-table .fill-cd{margin-left:0}

/* Полоса распределения у администратора: кто в смене, сколько сделал и сколько ему
   осталось до равной доли. Стоит НАД таблицей команды — это про «сейчас», а таблица
   про выбранный период. */
.fill-share-panel{padding:18px 20px;margin-bottom:18px}
.fsh-top{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.fsh-top b{font-family:'Fraunces',serif;font-weight:900;font-size:17px}
.fsh-top span{font-size:13px;color:var(--muted)}
.fsh-top span b{font-family:inherit;font-size:13px;color:var(--ink)}
.fsh-people{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.fsh-p{background:var(--paper);border-radius:10px;padding:7px 12px;font-size:13px;white-space:nowrap}
.fsh-p i{font-style:normal;font-weight:700;margin-right:6px}
/* Пятая карточка у менеджера — «Моя доля». У администратора её нет: он не заполняет. */
.fill-kpi.kpi5{grid-template-columns:repeat(5,1fr)}
.fk-share .fk-v{color:var(--rust)}

.fill-team .panel-head{flex-wrap:wrap;gap:10px}
.ft-period{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-left:auto}
.ft-period button{font:inherit;font-size:13px;padding:7px 14px;border-radius:9px;
  border:1px solid transparent;background:none;color:var(--muted);cursor:pointer}
.ft-period button:hover{color:var(--ink)}
.ft-period button.active{background:var(--rust);color:#fff}
.ft-period input[type=date]{font:inherit;font-size:13px;padding:6px 10px;border:1px solid var(--line);
  border-radius:9px;background:var(--card);color:var(--ink)}

/* Полоса выбора города забора в «Заполнении»: это фильтр не вида, а ВЫДАЧИ — выбрал
   город, и заказы падают только его. Поэтому стоит отдельной строкой наверху, а не
   прячется среди фильтров: от неё зависит, что человек получит по кнопке. */
.fill-city{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 14px}
.fill-city .fc-l{font-size:13px;font-weight:700;color:var(--muted)}
.fill-city select{font:inherit;font-size:13px;padding:7px 10px;border:1px solid var(--line);
  border-radius:9px;background:var(--card);color:var(--ink);max-width:100%}
.fill-city .fc-note{font-size:12.5px;color:var(--muted)}
/* Город выбран — говорим об этом цветом: пустая очередь из-за фильтра выглядит точно
   так же, как «работы нет». */
.fill-city .fc-on{font-size:12.5px;color:var(--rust);font-weight:600}

.ft-rank{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  border-radius:8px;background:var(--paper);color:var(--muted);font-weight:700;font-size:13px}
.ft-rank.top{background:var(--rust);color:#fff}
.ft-who{display:flex;align-items:center;gap:10px}
.ft-ava{flex:none;width:34px;height:34px;border-radius:50%;color:#fff;font-size:12px;font-weight:700;
  display:flex;align-items:center;justify-content:center;letter-spacing:.02em}
.ft-who b{display:block;line-height:1.2}
.ft-sub{display:block;font-size:11px;color:var(--muted);margin-top:2px}
.ft-num{font-family:'Fraunces',serif;font-weight:900;font-size:19px}
.ft-bar{display:block;height:5px;border-radius:3px;background:var(--paper);margin-top:6px;max-width:160px;overflow:hidden}
.ft-bar i{display:block;height:100%;border-radius:3px;background:var(--rust)}
.ft-bar i.ok{background:var(--moss)}
.ft-bar i.warn{background:var(--gold)}
.ft-bar i.bad{background:#c0392b}
.ft-chip{display:inline-block;padding:4px 10px;border-radius:8px;font-size:13px;font-weight:600;background:var(--paper);color:var(--muted)}
.ft-chip.ok{background:#e7f3ec;color:#2f7d54}
.ft-chip.warn{background:#fbf2e2;color:#96661c}
.ft-chip.bad{background:#fbeae8;color:#a5342a}
.ft-busy{color:var(--rust);font-weight:600}
.ft-total td{background:var(--ink);color:#fff;font-weight:600;padding-top:14px;padding-bottom:14px}
.ft-total td b{font-family:'Fraunces',serif;font-weight:900;font-size:18px}
.ft-legend{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 20px 18px;font-size:12px;color:var(--muted)}
.ft-legend i{font-style:normal;padding:3px 10px;border-radius:7px}
.ft-legend i.ok{background:#e7f3ec;color:#2f7d54}
.ft-legend i.warn{background:#fbf2e2;color:#96661c}
.ft-legend i.bad{background:#fbeae8;color:#a5342a}
.ft-legend-note{margin-left:auto}

/* Дубль кнопки внизу: после сохранения заказа экран возвращается сюда, и к ней
   ближе, чем к шапке. */
.fill-take{display:flex;align-items:center;justify-content:center;gap:12px;margin:18px 0 40px;flex-wrap:wrap}
.fill-take .btn{padding:14px 34px;font-size:16px}
.fill-take span{color:var(--muted);font-size:13px}

@media(max-width:1100px){.fill-kpi,.fill-kpi.kpi5{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){
  .fill-kpi,.fill-kpi.kpi5{grid-template-columns:1fr}
  .fill-head-act{width:100%;justify-content:space-between}
  .ft-legend-note{margin-left:0;flex:0 0 100%}
  .ft-bar{max-width:100%}
}

/* Список партнёров в окне «Исключить партнёров»: строка — галочка, имя и сколько
   заказов этого партнёра сейчас отмечено. */
.excl-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;cursor:pointer}
.excl-row:hover{background:var(--line,#eef1f6)}
.excl-row span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.excl-row b{color:var(--muted);font-weight:600;font-size:13px}

/* Кнопка в ряду фильтров заказов («Исключить партнёров»). Размеры и оформление
   в точности как у соседних выпадающих списков — иначе выбивалась бы из строки. */
.filters .filters-btn{font:inherit;font-size:13px;padding:8px 11px;border:1px solid var(--line);
  border-radius:9px;background:var(--card);color:var(--ink);min-width:140px;
  cursor:pointer;white-space:nowrap;text-align:left}
.filters .filters-btn:hover{border-color:var(--ink)}
.filters .filters-btn:disabled{opacity:.5;cursor:default}
.filters .filters-btn.is-armed{border-color:#1f8a4c;color:#1f8a4c;background:#eaf7ef}
.filters .filters-btn.is-armed:hover{background:#dcf1e4}

/* ─── Модуль «Сортировка» ───────────────────────────────────────────────
   Шапка-баннер вместо россыпи одинаковых плашек: у кладовщика одно главное
   действие — отсканировать накладную, и оно должно быть самым заметным на
   экране, а цифры дня — рядом, а не выше него. */
.sort-hero{display:flex;align-items:center;justify-content:space-between;gap:28px;flex-wrap:wrap;
  background:linear-gradient(135deg,var(--rust),var(--rust-dk));color:#fff;
  border-radius:18px;padding:30px 34px;margin-bottom:16px}
.sort-hero h1{font-family:'Fraunces',serif;font-weight:900;font-size:38px;line-height:1;margin:0;color:#fff}
.sort-hero p{margin:8px 0 0;font-size:14px;color:rgba(255,255,255,.82)}
/* Кнопка сканирования — это <label> с полем выбора файла внутри: так камера
   открывается прямо с телефона, без промежуточного экрана. */
.sh-scan{display:inline-flex;align-items:center;gap:10px;margin-top:20px;cursor:pointer;
  background:#fff;color:var(--rust);font-weight:700;font-size:16px;
  padding:15px 26px;border-radius:12px;border:none;transition:transform .12s ease}
.sh-scan:hover{transform:translateY(-1px)}
.sh-scan:active{transform:none}
.sh-scan input{display:none}
.sh-nums{display:flex;align-items:center;gap:28px}
.sh-nums>div{text-align:center;padding-left:28px;border-left:1px solid rgba(255,255,255,.22)}
.sh-nums>div:first-child{padding-left:0;border-left:none}
.sh-nums b{display:block;font-family:'Fraunces',serif;font-weight:900;font-size:40px;line-height:1}
/* Мятный вместо --moss: тёмно-зелёный на синем фоне не читается. */
.sh-nums b.ok{color:#8ce8b4}
.sh-nums span{display:block;margin-top:6px;font-size:12px;color:rgba(255,255,255,.78)}

.sort-chips{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.sort-chip{display:flex;align-items:center;justify-content:space-between;gap:12px;
  background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 18px;box-shadow:var(--shadow)}
.sort-chip span{font-size:14px;color:var(--muted)}
.sort-chip b{font-family:'Fraunces',serif;font-weight:900;font-size:22px;line-height:1}
.sort-chip b.dim{color:var(--muted)}
.sort-chip-date input[type=date]{font:inherit;font-size:14px;border:none;background:none;color:var(--ink);padding:0}
.sort-chip-date{gap:8px;flex-wrap:wrap}

.sort-two{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.sort-card{background:var(--card);border:1px solid var(--line);border-radius:18px;
  padding:22px 26px;box-shadow:var(--shadow)}
.sc-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:6px}
.sc-head h2{font-family:'Fraunces',serif;font-weight:900;font-size:19px;margin:0}
.sc-legend{font-size:11px;color:var(--muted);white-space:nowrap}
.sc-row{display:flex;align-items:center;gap:14px;padding:12px 0;border-bottom:1px solid var(--line)}
.sc-row:last-child{border-bottom:none}
.sc-city{flex:1;font-weight:600}
.sc-n{min-width:46px;text-align:right;font-family:'Fraunces',serif;font-weight:900;font-size:17px}
.sc-n.sc-ok{color:var(--rust)}
.sc-n.sc-left{color:var(--muted)}
.sc-empty{padding:14px 0;color:var(--muted);font-size:14px}

.sp-main{display:flex;align-items:center;gap:14px}
.sp-ic{font-size:24px;line-height:1}
.sp-t{font-family:'Fraunces',serif;font-weight:900;font-size:19px;white-space:nowrap}
.sp-s{font-size:13px;color:var(--muted);margin-top:2px}
.sp-main{flex-wrap:wrap}
.sp-main .btn{margin-left:auto;white-space:nowrap}
.sp-auto{display:flex;align-items:center;gap:10px;cursor:pointer;font-size:14px;margin-top:16px}
.sp-auto input{width:18px;height:18px}
.sp-hint{margin:8px 0 0;font-size:12px;color:var(--muted);line-height:1.5}
.sp-hint.sp-warn{color:var(--rust)}
.sp-more{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
/* Панель печати сворачивается: нужна не всем и не всегда, а место над списком занимает.
   Делает это сам <details>, поэтому обработчиков тут нет — только вид заголовка. */
.sort-print summary{list-style:none;cursor:pointer}
.sort-print summary::-webkit-details-marker{display:none}
.sp-sum{display:flex;align-items:center;gap:12px}
.sp-sum .sp-s{margin:0 0 0 auto}
.sp-ar{flex:none;color:var(--muted);transition:transform .15s}
.sort-print[open] .sp-ar{transform:rotate(180deg)}
.sort-print[open] .sp-main{margin-top:14px}

@media(max-width:900px){
  .sort-chips{grid-template-columns:repeat(2,1fr)}
  .sort-two{grid-template-columns:1fr}
}
@media(max-width:640px){
  .sort-hero{padding:22px;gap:18px}
  .sort-hero h1{font-size:30px}
  .sh-scan{width:100%;justify-content:center}
  /* На телефоне числа встают в ряд без разделителей: вертикальные линии на узком
     экране выглядят как обрывки таблицы. */
  .sh-nums{width:100%;justify-content:space-between;gap:0}
  .sh-nums>div{padding-left:0;border-left:none;flex:1}
  .sh-nums b{font-size:30px}
  .sort-card{padding:18px}
}

/* Зелёная точка «сейчас в системе». Presence знает только про открытую вкладку,
   поэтому рядом всегда стоит время последнего действия — вместе читается честно. */
.ft-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#2f9e5c;
  margin-right:6px;vertical-align:middle}
td .ft-dot{margin:0 0 0 8px}

/* ─── Список сотрудников ────────────────────────────────────────────────
   Полсотни строк, и почти все — курьеры. Цвет кружка и плашки роли делают
   список сканируемым взглядом: синий — доставщик, зелёный — заборщик,
   оранжевый — админ, красный — с ролью что-то не так. */
.seg{display:inline-flex;background:var(--paper);border-radius:12px;padding:4px;gap:4px}
.seg button{font:inherit;font-size:13px;font-weight:600;padding:8px 18px;border:none;border-radius:9px;
  background:none;color:var(--muted);cursor:pointer}
.seg button.active{background:var(--ink);color:#fff}

/* Заголовок «Сотрудники» внутри панели убран: он уже стоит над страницей, и два
   одинаковых слова подряд ничего не добавляли. Слева — счётчик и фильтры, кнопка
   добавления одна уходит вправо: так правый край не пустует широкой полосой. */
.staff-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.staff-head .search{flex:0 1 280px;min-width:200px}
.staff-head input,.staff-head select{font:inherit;font-size:13px;padding:8px 11px;border:1px solid var(--line);
  border-radius:9px;background:var(--card);color:var(--ink)}
/* Кнопка идёт сразу за фильтрами, а не прижата к правому краю: пустая полоса
   между ними ничего не значила. */
.staff-head #addStaff{margin-left:2px}

.staff-hint{margin:0 20px 10px;font-size:12.5px;color:var(--muted)}

.staff-tbl tbody tr{cursor:default}
.staff-tbl .st-row.st-admin td{background:#fdf8ec}
.staff-tbl .st-row.st-bad td{background:#fdf1ef}
.st-who{display:flex;align-items:center;gap:10px}
.st-who b{font-weight:600}
.st-city{display:inline-block;padding:3px 10px;border-radius:8px;background:var(--paper);font-size:12.5px}
.st-dim{color:var(--muted)}
.st-role{display:inline-block;padding:4px 11px;border-radius:9px;font-size:12.5px;font-weight:600;white-space:nowrap}
.st-role.courier{background:#e8edfb;color:#2546c9}
.st-role.pickup{background:#e7f3ec;color:#2f7d54}
.st-role.admin{background:#f8eeda;color:#96661c}
.st-role.staff{background:#eeedfb;color:#4b46b5}
.st-role.bad{background:#fbe6e3;color:#a5342a}

/* Одна иконка вместо трёх кнопок в строке. «Удалить» лежит внутри: аккаунт
   удаляется безвозвратно, и красной кнопке в каждой из 53 строк там не место. */
.st-more{position:relative;display:inline-block}
.st-more-btn{font:inherit;font-size:18px;line-height:1;letter-spacing:.06em;color:var(--muted);
  background:none;border:1px solid transparent;border-radius:9px;padding:4px 10px;cursor:pointer}
.st-more-btn:hover{background:var(--paper);color:var(--ink)}
.st-menu{display:none;position:absolute;right:0;top:calc(100% + 4px);z-index:30;min-width:200px;
  background:var(--card);border:1px solid var(--line);border-radius:12px;padding:6px;
  box-shadow:0 12px 30px rgba(22,33,58,.16)}
.st-more.open .st-menu{display:block}
.st-menu button{display:block;width:100%;text-align:left;font:inherit;font-size:13.5px;
  padding:9px 12px;border:none;border-radius:8px;background:none;color:var(--ink);cursor:pointer}
.st-menu button:hover{background:var(--paper)}
.st-menu button.danger{color:#a5342a}
.st-menu button.danger:hover{background:#fbe6e3}

@media(max-width:760px){
  .staff-head .search{flex:1 1 100%}
  .staff-head #addStaff{width:100%}
  /* Меню у последней строки не должно уезжать за край экрана. */
  .st-menu{right:auto;left:0}
}

/* Кнопки дат держим одной группой: «Сброс» отрывался на следующую строку и
   выглядел отдельным фильтром, хотя относится к тем же двум. */
.filters .fdate-btns{display:inline-flex;gap:8px;flex-wrap:nowrap;align-items:center}

/* Перетаскивание колонок грида заказов. */
.orders-tbl th.col-move{cursor:grab;user-select:none}
.orders-tbl th.col-move:active{cursor:grabbing}
.orders-tbl th.col-over{box-shadow:inset 2px 0 0 var(--rust)}

/* Разбор файла перед созданием заказов. Строки-пропуски подсвечены: решение
   принимается по этой таблице, и увидеть их надо до нажатия, а не после. */
.imp-head{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:10px}
.imp-head .field{flex:1 1 220px;margin:0}
.imp-note{margin:0 0 12px;font-size:13px;color:var(--muted);line-height:1.6}
.imp-table{max-height:46vh;overflow:auto}
.imp-table table{font-size:13px}
.imp-table tr.imp-bad td{background:#fdf1ef}
.imp-ok{color:#2f7d54;font-weight:600}
.imp-skip{color:#a5342a}

/* Плашки итогов под нормативами Барахолки. */
.calc-kpi{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
.calc-kpi>div{background:var(--paper);border-radius:12px;padding:14px 16px}
.calc-kpi span{display:block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.calc-kpi b{display:block;margin-top:6px;font-family:'Fraunces',serif;font-weight:900;font-size:22px;line-height:1.1}
.calc-kpi small{display:block;margin-top:4px;font-size:11px;color:var(--muted)}
@media(max-width:900px){.calc-kpi{grid-template-columns:repeat(2,1fr)}}

/* ═══════════════════════════════════════════════════════════════════════
   ТЕЛЕФОН: РАЗМЕРЫ ПОД ПАЛЕЦ И БЕЗ ЗУМА ПРИ КАСАНИИ (30.09.2026)

   Замеры на 375 px до этой правки: поиск 33 px, селекты и даты 35, кнопки
   в строке 31, кнопки пагинации 28, галочка 13. Норма для пальца — 44.
   Плюс все поля ввода были 13–14 px, а Safari на iPhone ЗУМИТ страницу при
   касании поля со шрифтом меньше 16 px: человек тапает в поиск, вёрстка
   прыгает, и её приходится отщипывать назад. Отсюда и «неудобно
   пользоваться» — не одна поломка, а размеры во всём.

   Блок идёт последним в файле и поэтому перекрывает прежние значения.
   Условие двойное: узкий экран ИЛИ грубый указатель. Второе ловит планшеты
   и ноутбуки с тачскрином, где ширина большая, а палец тот же.
   ═══════════════════════════════════════════════════════════════════════ */
@media (max-width:760px), (pointer:coarse){
  /* 16 px — не «крупнее для красоты», а порог, ниже которого iOS зумит. */
  .filters input,.filters select,.filters .search,
  .field input,.field select,.field textarea,
  .dir-filter,.search,.ai-input-row input,.fh-find input,.staff-head .search{font-size:16px}
  /* Поля и кнопки — не ниже 44. min-height, а не height: содержимое в две
     строки (адрес, длинное название) должно свободно растягивать элемент. */
  .filters input,.filters select,.filters .search,.filters-btn,.filters-toggle,
  .field input,.field select,.field textarea,.dir-filter,
  /* .search встречается и вне фильтров — в шапке «Заполнения», «Сотрудников»
     и в поле вопроса помощнику; там он тоже должен быть под палец. */
  .search,.fh-find input,.ai-input-row input{min-height:44px}
  .btn{min-height:44px}
  .btn.sm{min-height:40px;font-size:13.5px}
  /* «Фильтры ▾» — единственный способ раскрыть фильтры на телефоне, ему 44.
     Селектор с двумя классами: иначе .btn.sm выше по весу и оставляет 40. */
  .btn.sm.filters-toggle{min-height:44px}
  .row-actions .btn,.cell-actions .btn{min-height:44px}
  /* Галочки: 13 px в таблице заказов — это меньше подушечки пальца втрое.
     Растягиваем сам квадрат и добавляем вокруг него зону промаха. */
  .resp-table input[type=checkbox],.filters input[type=checkbox],
  .chk-line input,#ketChkAll{width:26px;height:26px}
  /* Ячейка с галочкой — не ниже 44 и по центру: сама галочка 26, но промах
     по вертикали ловится ячейкой. Растянуть хит-зону самого чекбокса одним CSS
     нельзя, а переделывать разметку во всех модулях ради шести пикселей — нет. */
  .resp-table td[data-label=""]{min-height:44px;align-items:center}
  .resp-table td[data-label=""] input[type=checkbox]{margin:9px 6px}
  /* Подпись в карточке-строке занимала 42 % ширины, и на длинный адрес
     оставалось меньше половины экрана. Отдаём содержимому больше. */
  .resp-table td::before{flex:0 0 36%}
  .resp-table td{padding:11px 14px;font-size:14px}
  /* Выпадающий список ВНУТРИ строки таблицы: в «Расчёте партнёра» пачкой файлов
     партнёр и столбец веса выбираются прямо в строке, а правила выше ловят только
     .field и .filters — такой select оставался 19 px с 13-м шрифтом, то есть и мимо
     пальца, и с зумом от iOS при касании. */
  .resp-table td select{font-size:16px;min-height:44px;max-width:100%}
  /* Выбор города в «Заполнении»: этим списком пользуются с телефона на складе. */
  .fill-city select{font-size:16px;min-height:44px}
  /* Пагинация была столбиком: три этажа кнопок, 110 px экрана и 150 px
     отступа под ними. Возвращаем в строку с нормальными кнопками. */
  .orders-pager{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:8px}
  .orders-pager .op-btn{min-height:44px;padding:0 14px;font-size:14px}
  .orders-pager .op-info{flex:1 1 100%;text-align:center;font-size:12.5px}
  .orders-pager .op-perpage,.orders-pager .op-perpage select{font-size:14px}
  .content.has-pager{padding-bottom:116px}
  .content.has-pager .panel:last-of-type{margin-bottom:96px}
  /* Тост вылезал ровно под плавающей панелью — поднимаем над ней. */
  body.has-pager-panel .toast,.content.has-pager ~ .toast{bottom:104px}
  /* Варианты отделений под полем адреса — пальцем по 11-му шрифту не попасть.
     Не 44 px: это не главное действие, а запасные варианты рядом с подставленным. */
  .idx-info .link-btn{min-height:32px;font-size:13px;padding:4px 2px}
  /* Кнопки модалки: в один ряд они жмутся, «Сохранить» — главное действие. */
  .modal-foot{flex-wrap:wrap}
  .modal-foot .btn{flex:1 1 auto;justify-content:center}
  .modal-foot .btn.primary{flex:1 1 100%;order:-1}
  /* Карточка на телефоне — почти во весь экран: 20 px отступа с каждой стороны
     от 375 съедали десятую часть ширины, а карточка заказа и без того плотная.
     И 90vh в мобильном Safari считается вместе с адресной строкой, из-за чего
     низ карточки с кнопкой «Сохранить» уходил под край. */
  .overlay{padding:10px}
  .modal{max-height:92vh;max-height:92dvh}
  .modal-head{padding:16px 16px}
  .modal-body{padding:16px}
  .modal-foot{padding:14px 16px}
  /* Прилипшие кнопки: в длинной карточке до «Сохранить» приходилось скроллить
     весь экран данных, и люди закрывали окно, не сохранив. */
  .modal-foot{position:sticky;bottom:0;z-index:2}
  /* Крестик закрытия — 30 px и в самом углу, то есть мимо него промахиваешься
     чаще, чем попадаешь. На телефоне это основной способ закрыть карточку. */
  .modal-head .x{min-width:44px;min-height:44px;font-size:26px;margin-right:-6px}
}

/* Полная высота экрана на телефоне: 100vh в мобильном Safari считается вместе
   с адресной строкой, поэтому низ выдвижного меню уезжал под край и последние
   пункты были недоступны. dvh считает видимую часть; vh оставлен запасом для
   браузеров без dvh. */
@media (max-width:760px){
  .sidebar{height:100vh;height:100dvh}
}

/* Подсказка под полем индекса: что это за отделение Казпочты. Нужна, чтобы менеджер
   сверил индекс с адресом, который он только что переписал с бланка (19.10.2026). */
/* ПАНЕЛЬ СТРАНИЦ НАВЕРХУ ГРИДА ЗАКАЗОВ (19.10.2026). Плавающая панель закрывала последние
   строки списка — владелец прислал скриншот, где за ней не видно адреса и трек-кода. Здесь
   только снятие «плавучести»: вид панели (кнопки, скругление, отступы) остаётся общим, и
   остальные модули со своими пагинаторами не затронуты. */
.orders-pager.op-top{position:static!important;transform:none!important;left:auto;bottom:auto;
  width:auto!important;max-width:none;margin:0 0 12px;box-shadow:none;z-index:1;
  justify-content:flex-start;flex-wrap:wrap}
/* Меню «на странице» у нижней панели раскрывается вверх — у верхней это ушло бы за край. */
.orders-pager.op-top .op-pp-menu{bottom:auto;top:calc(100% + 8px)}
@media (max-width:760px),(pointer:coarse){
  /* На телефоне панель и так в столбец; важно только не растягивать её во всю ширину экрана
     и не прижимать к низу. */
  .orders-pager.op-top{flex-direction:row;justify-content:center}
}
/* Полоса хода рассылки. Висит поверх всего, пока идёт отправка: тост на девятнадцать минут
   работы не годится, а незамеченный обрыв уже стоил 1343 неотправленных сообщений. */
.wa-prog{position:fixed;left:50%;transform:translateX(-50%);bottom:24px;z-index:300;
  background:var(--ink);color:var(--paper);padding:12px 20px;border-radius:12px;
  font-size:14px;font-weight:600;box-shadow:0 20px 50px -20px rgba(0,0,0,.6)}
/* Полоса режима «Дубль» над гридом заказов: в нём видны строки за чужие даты, и без
   объяснения это выглядит как сбой фильтров. */
.dup-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:10px;padding:10px 14px;
  border:1px solid var(--rust);border-radius:10px;background:#fff6f3;color:var(--ink);font-size:13.5px}
.dup-bar .btn{margin-left:auto}
.idx-info{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-top:6px;font-size:12.5px;line-height:1.35}
.idx-info:empty{display:none}
.idx-ok{color:var(--ink);font-weight:600}
.idx-type{color:var(--muted)}
.idx-bad{color:var(--rust);font-weight:600}
.idx-wait{color:var(--muted)}

/* Меню «Действие» в строке фильтров заказов (19.10.2026): внутри — «WhatsApp оповещение»
   и «Удалить выделенные». Координаты ставит код (position:fixed), потому что строка
   фильтров прокручивается вбок и абсолютное меню обрезалось бы её краем. */
.act-wrap{position:relative;display:inline-flex}
.filters .filters-btn.active{border-color:var(--ink)}
.act-menu{display:flex;flex-direction:column;gap:2px;background:#fff;border:1px solid var(--line);
  border-radius:10px;box-shadow:0 10px 28px rgba(20,30,60,.18);padding:6px;z-index:9000}
.act-item{display:block;width:100%;text-align:left;font:inherit;font-size:14px;padding:11px 12px;
  border:none;background:none;border-radius:8px;cursor:pointer;color:var(--ink);white-space:nowrap}
.act-item:hover:not(:disabled){background:var(--paper)}
.act-item:disabled{opacity:.45;cursor:default}
.act-danger{color:#c0392b}
.act-danger:hover:not(:disabled){background:#fdeceb}
