/* KUAIDI: общие правила телефона для ВСЕХ страниц (ночь 10.10, раздел 10). Подключается в конец <head> middleware mobile_core.py.
   Не зависит от оболочки страницы (aurora, кабинет поставщика, вход, презентация): только селекторы тегов и data-атрибуты, которые ставит mobile_core.js. */
:root{--kb:0px;--vvh:100dvh}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{min-height:100vh;min-height:100dvh}
img,video,canvas,svg{max-width:100%}
img{height:auto}
img[width][height]{height:auto}
pre,code{overflow-wrap:anywhere}
/* таблицы без явного обёртывания не должны раздвигать страницу на ПК */
@media (max-width:1000px){
  html,body{max-width:100%}
  body{overflow-wrap:break-word}
}
/* ссылки внутри текста отличимы не только цветом (доступность) */
p a:not([class]),li a:not([class]),td a:not([class]),small a:not([class]),.muted a:not([class]){text-decoration:underline;text-underline-offset:2px}
/* ---- сенсорные цели ≥ 44 px, поля ≥ 16 px (iOS не приближает страницу при фокусе) ---- */
@media (max-width:1000px),(pointer:coarse){
  button,input:not([type=hidden]):not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=file]),select,textarea,summary,[role=button],.action-button,.button,.btn{min-height:44px!important;box-sizing:border-box}
  input:not([type=hidden]):not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=file]),select,textarea{font-size:16px!important}
  summary{padding-top:10px;padding-bottom:10px}
  select{-webkit-appearance:none;appearance:none;height:auto;padding:8px 38px 8px 12px;border:1px solid rgba(128,128,128,.45);border-radius:10px;background-color:transparent;background-repeat:no-repeat;background-position:right 14px center;background-size:12px 8px;
    background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1.5l5 5 5-5' fill='none' stroke='%238a94a6' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>");color:inherit;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}
  select[multiple]{background-image:none;padding-right:12px}
  summary{min-height:44px!important}
  input[type=checkbox],input[type=radio]{width:24px;height:24px;min-height:24px;flex:0 0 auto;margin:10px 8px 10px 0}
  label:has(>input[type=checkbox]),label:has(>input[type=radio]),label.k-tap-label{display:flex;align-items:center;gap:6px;min-height:44px;cursor:pointer}
  .lang a,.app-back,.pager a,.tabs a,.k-tabs a,.chips a,.k-chips a,.filters a{display:inline-flex;align-items:center;min-height:44px;box-sizing:border-box}
  a[data-tap]{box-sizing:border-box;min-height:44px;align-items:center}
  a[data-tap="i"]{display:inline-flex}
  a[data-tap="b"]{display:flex}
  a[data-tap="x"]{display:inline-flex}
  .k-pager a{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;box-sizing:border-box}
}
/* планшет и телефон в альбомной ориентации (640–1000 px): таблица остаётся таблицей, но прокручивается внутри себя, страница не уезжает вбок */
@media (min-width:640px) and (max-width:1000px){
  table:not([data-keep-table]){display:block;width:100%!important;min-width:0!important;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
}
@media (max-width:1000px){select,input,textarea{max-width:100%}label{min-width:0}.panel,.card,main>*,.wrap>*,.grid>*,.grid2>*,.k-grid>*{min-width:0;max-width:100%}input[type=file]{min-height:44px!important;box-sizing:border-box;max-width:100%}.filters{grid-template-columns:repeat(auto-fit,minmax(min(100%,150px),1fr))!important}}
/* ---- таблицы < 640 px → карточки (каждая строка — карточка, подписи колонок из заголовка; data-label ставит mobile_core.js) ---- */
@media (max-width:639.98px){
  table:not([data-keep-table]),table:not([data-keep-table]) tbody,table:not([data-keep-table]) tfoot,table:not([data-keep-table]) tr{display:block;width:100%!important;min-width:0!important;max-width:100%!important;box-sizing:border-box}
  table:not([data-keep-table]) thead,table:not([data-keep-table]) colgroup,table:not([data-keep-table]) caption.k-sr{display:none!important}
  table:not([data-keep-table]) tr{border:1px solid rgba(128,128,128,.3);border:1px solid color-mix(in srgb,currentColor 16%,transparent);border-radius:14px;padding:6px 12px;margin:0 0 10px}
  table:not([data-keep-table]) td,table:not([data-keep-table]) th{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;width:auto!important;min-width:0!important;max-width:100%!important;border:0!important;padding:7px 0!important;text-align:right!important;overflow-wrap:anywhere;box-sizing:border-box;white-space:normal!important;position:static!important;writing-mode:horizontal-tb!important;transform:none!important;height:auto!important;background:transparent!important}
  table:not([data-keep-table]) td+td,table:not([data-keep-table]) td+th,table:not([data-keep-table]) th+td{border-top:1px solid rgba(128,128,128,.14)!important}
  table:not([data-keep-table]) td[data-label]:not([data-label=""])::before,table:not([data-keep-table]) th[data-label]:not([data-label=""])::before{content:attr(data-label);flex:0 0 38%;max-width:44%;text-align:left;font-weight:600;font-size:.82em;opacity:.7;overflow-wrap:anywhere}
  table:not([data-keep-table]) tr>:first-child{display:block;text-align:left!important;font-weight:600;padding:8px 0 9px!important;border-bottom:1px solid rgba(128,128,128,.2)!important}
  table:not([data-keep-table]) tr>:first-child::before{display:none!important}
  table:not([data-keep-table]) td[data-label=""]:not(:first-child){flex-direction:column;align-items:stretch;text-align:left!important}
  table:not([data-keep-table]) td:empty{display:none}
  table:not([data-keep-table]) td>*{max-width:100%}
  table:not([data-keep-table]) tr[data-hrow]{display:none!important}
  table:not([data-keep-table]) td[data-multi]{flex-wrap:wrap}
  table:not([data-keep-table]) td[data-multi]>*{flex:1 1 100%;min-width:0;text-align:left}
  table:not([data-keep-table]) td form,table:not([data-keep-table]) td .row-actions{text-align:right}
  /* прежние «обёртки с прокруткой» вокруг таблиц больше не нужны */
  .table-wrap,.tbl-wrap,.k-table-wrap,.scroll-x,.table-scroll,.overflow-x{overflow-x:visible!important}
}
/* ---- пароль: глазок «показать / скрыть» (mobile_core.js, раздел 4; единая реализация, ширина кнопки 44 px) ---- */
.k-password-field{display:block;position:relative;width:100%;min-width:0}
.k-password-field>input{box-sizing:border-box!important;width:100%!important;margin:0!important;padding-inline-end:56px!important}
.k-password-field.k-password-inline{display:inline-block;width:auto;max-width:100%;vertical-align:middle}
.k-password-field.k-password-inline>input{width:auto!important}
.k-password-field>.k-password-toggle{position:absolute!important;inset-inline-end:4px;top:50%;transform:translateY(-50%)!important;display:flex!important;align-items:center;justify-content:center;width:44px!important;min-width:44px!important;height:44px!important;min-height:44px!important;margin:0!important;padding:0!important;border:0!important;border-radius:8px!important;background:transparent!important;color:var(--muted,#64748b)!important;box-shadow:none!important;filter:none!important;cursor:pointer;font-size:0}
.k-password-field>.k-password-toggle:hover{color:var(--text,currentColor)!important}
.k-password-toggle:focus-visible{outline:2px solid var(--accent,#7BF8ED);outline-offset:1px}
.k-password-toggle .k-password-slash{display:none}
.k-password-toggle[aria-pressed="true"] .k-password-slash{display:block}
/* ---- клавиатура: панели ввода внизу экрана поднимаются на высоту клавиатуры (mobile_core.js считает --kb из visualViewport) ---- */
[data-kb-bar]{transition:transform .12s ease-out;transform:translateY(calc(var(--kb,0px) * -1))}
html{scroll-padding-bottom:calc(var(--kb,0px) + 16px)}
html[data-kb-open] body{padding-bottom:calc(var(--kb,0px) + 24px)!important}
html[data-kb-open] .buyer-tabbar,html[data-field-focus] .buyer-tabbar,html[data-kb-open] .k-tabbar,html[data-field-focus] .k-tabbar,html[data-kb-open] .rd-tabbar,html[data-field-focus] .rd-tabbar,html[data-kb-open] .kg-fab,html[data-field-focus] .kg-fab,html[data-kb-open] #kuaidi-toast,html[data-field-focus] #kuaidi-toast{display:none!important}   /* закреплённые нижние элементы не перекрывают поле над клавиатурой */
html[data-kb-open] header,html[data-kb-open] .rd-header,html[data-field-focus] header,html[data-field-focus] .rd-header{position:static!important}      /* закреплённая шапка при открытой клавиатуре не борется с прокруткой видимой области (место в потоке то же) */
/* ---- поворот экрана: альбомная ориентация телефона — шапка и нижние панели не съедают высоту ---- */
@media (orientation:landscape) and (max-height:480px){
  header{min-height:0!important}
  .buyer-tabbar{padding-top:4px!important;padding-bottom:calc(4px + env(safe-area-inset-bottom,0px))!important}
  .k-auth,.k-public{min-height:0}
}
/* ---- без hover-меню: на сенсорных устройствах подсказки и выпадающие меню не зависят от :hover ---- */
@media (hover:none){
  [data-hover-menu]>*:not(:first-child){display:none}
}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
/* фокус виден всегда (клавиатура, внешняя клавиатура iPad) */
:focus-visible{outline:3px solid #7BF8ED;outline-offset:2px}

/* ======================================================================================================================
   R117: единый внешний порядок CRM для всех ролей (общие стили; сначала телефон 375–390 px). Состояния и цвета обратной связи, зазоры, нижний отступ,
   плитки «нажимается / только показывает». Разметку расставляет mobile_core.js (data-kd-btn, data-tile, kd-state-*), стили лежат здесь.
   Цвета состояний не единственный признак: у «выполнено» стоит галочка, у «ошибка» восклицательный знак и подпись у поля. */
:root{--kd-gap:8px;--kd-gap-lg:16px;--kd-ok:#14d364;--kd-ok-ink:#03210f;--kd-bad:#e5484d;--kd-bad-ink:#fff;--kd-off-bg:rgba(128,134,160,.22);--kd-off-ink:rgba(128,134,160,.95);--kd-pad0:0px;--kd-bottom:0px}
/* 1. нижний отступ: закреплённые панели (нижнее меню, плавающая кнопка помощника) не закрывают последнее содержимое; --kd-bottom считает mobile_core.js */
html[data-kd-bottom]:not([data-kb-open]) body{padding-bottom:max(var(--kd-pad0),var(--kd-bottom))!important}
html{scroll-padding-bottom:calc(var(--kd-bottom) + var(--kb,0px) + 16px)}
/* 2. шапка непрозрачная (раньше текст страницы просвечивал под заголовком) и у кнопки меню своё место слева: заголовок и логотип её не касаются */
@media (max-width:900px){
  html body header::before,html body .rd-header::before{background:var(--bg,#06043F)!important}
  html body .rd-header{background:var(--bg,#06043F)!important}
  html body header{padding-left:calc(16px + 46px + 12px + env(safe-area-inset-left,0px))!important;padding-right:calc(16px + 44px + 12px + env(safe-area-inset-right,0px))!important;min-height:76px}
  html body header:has(.k-ask-btn){padding-right:calc(16px + 44px + 8px + 44px + 12px + env(safe-area-inset-right,0px))!important}
  html body header h1,html body header p{overflow-wrap:anywhere}
  html body .mobile-nav-toggle{left:calc(16px + env(safe-area-inset-left,0px))!important;top:calc(14px + env(safe-area-inset-top,0px))!important;width:46px;height:46px}
}
/* 3. зазоры: общий шаг 8 px между соседними кнопками, плитками и полями */
.actions,.k-actions,.btn-row,.button-row,.form-actions,.k-form-actions{display:flex;flex-wrap:wrap;gap:var(--kd-gap)}
:where(.panel,.card,.k-card,form,.wrap) :is(.action-button,button.small,button.secondary)+:is(.action-button,button.small,button.secondary){margin-inline-start:var(--kd-gap)}
html body form:has(>:is(select,input,textarea)+:is(button,.action-button)){gap:var(--kd-gap)!important}      /* поле и кнопка в одной строке формы: шаг 8 px (у гибкой формы за это отвечает gap) */
@media (max-width:640px){
  form>input+button,form>textarea+button,form>select+button,form>label+button,form>.action-button{margin-top:var(--kd-gap)}
  .panel a.action-button+a.action-button,.card a.action-button+a.action-button{margin-inline-start:0;margin-top:var(--kd-gap)}
  input+button.small,input+.small{margin-top:var(--kd-gap)}
}
/* 4. кнопки: основная, вторичная, опасная (разметку data-kd-btn ставит mobile_core.js), зона нажатия не меньше 44 px. Селекторы с повтором признака нужны, чтобы перебить сильные правила оболочек */
html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none){min-height:var(--kd-tap,44px);touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:background-color .12s ease,color .12s ease,transform .08s ease,box-shadow .12s ease}
html body [data-kd-btn=secondary][data-kd-btn]:not(#kd-none){background:var(--raised,rgba(128,134,160,.12))!important;color:var(--text,inherit)!important;border:1px solid var(--line2,rgba(128,134,160,.45))!important;box-shadow:none!important}
html body [data-kd-btn=danger][data-kd-btn]:not(#kd-none){background:transparent!important;color:var(--kd-bad)!important;border:1.5px solid var(--kd-bad)!important;box-shadow:none!important}
/* 5. нажатие: заметная смена цвета сразу (без скрипта); итог — зелёный «выполнено» или красный «ошибка», с галочкой или знаком */
html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none):active:not([disabled]):not([aria-disabled=true]):not([aria-busy=true]){background:var(--kd-ok)!important;color:var(--kd-ok-ink)!important;border-color:var(--kd-ok)!important;transform:scale(.98)}
html body [data-kd-btn=danger][data-kd-btn]:not(#kd-none):active:not([disabled]):not([aria-busy=true]){background:var(--kd-bad)!important;color:var(--kd-bad-ink)!important;border-color:var(--kd-bad)!important}
html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none).kd-state-ok{background:var(--kd-ok)!important;color:var(--kd-ok-ink)!important;border-color:var(--kd-ok)!important}
html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none).kd-state-ok::before{content:"✓ ";font-weight:700}
html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none).kd-state-bad{background:var(--kd-bad)!important;color:var(--kd-bad-ink)!important;border-color:var(--kd-bad)!important}
html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none).kd-state-bad::before{content:"! ";font-weight:700}
/* недоступно: серое, подсказка «почему» рядом (.kd-why); загрузка: кольцо и блокировка повторного нажатия */
html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none)[disabled],html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none)[aria-disabled=true]{background:var(--kd-off-bg)!important;color:var(--kd-off-ink)!important;border:1px dashed var(--kd-off-ink)!important;box-shadow:none!important;cursor:not-allowed;transform:none}
.kd-why{display:block;margin:4px 2px 0;font-size:13px;line-height:1.35;color:var(--text2,#8a90a8)}
html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none)[aria-busy=true]{pointer-events:none;position:relative}
html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none)[aria-busy=true]::after{content:"";display:inline-block;width:14px;height:14px;margin-inline-start:8px;vertical-align:-2px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:kd-spin .7s linear infinite}
@keyframes kd-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){[data-kd-btn]{transition:none}html body [data-kd-btn][data-kd-btn][data-kd-btn]:not(#kd-none)[aria-busy=true]::after{animation-duration:1.6s}}
/* 6. поле не заполнено или неверно: красная рамка и короткая подсказка словами (значок ⚠ у подсказки, не только цвет) */
.kd-invalid{border-color:var(--kd-bad)!important;box-shadow:0 0 0 2px rgba(229,72,77,.28)!important}
.kd-hint{display:block;margin:4px 2px 0;font-size:14px;line-height:1.35;color:var(--kd-bad);font-weight:600}
.kd-hint::before{content:"⚠ "}
/* 7. плитки: нажимается (значок «открыть», реакция на нажатие) или только показывает (спокойный фон, без реакции) */
[data-tile=action]:not(.k-tile){padding-top:36px!important}      /* значок «открыть» стоит в своём ряду справа сверху и не налезает на заголовок */
[data-tile=action]{position:relative;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .08s ease,border-color .12s ease,background-color .12s ease}
[data-tile=action]::after{content:"›";position:absolute;top:10px;right:12px;width:26px;height:26px;border-radius:50%;display:grid;place-items:center;font-size:20px;line-height:1;font-weight:700;color:var(--accent,#26cfc9);background:var(--accent-bg,rgba(38,207,201,.14));pointer-events:none}
[data-tile=action]:active{transform:scale(.98);border-color:var(--kd-ok)!important;background-color:rgba(20,211,100,.14)!important}
[data-tile=info]{cursor:default;box-shadow:none!important;background:transparent!important;border-style:dashed!important;border-color:var(--line,rgba(128,134,160,.3))!important}
[data-tile=info]:hover,[data-tile=info]:active{transform:none!important;box-shadow:none!important}
/* 8. блок «Приложение» в профиле и индикатор обновления потягиванием */
.kd-app-box{margin:var(--kd-gap-lg) 0;padding:16px;border-radius:16px;border:1px solid var(--line2,rgba(128,134,160,.35));background:var(--card,transparent)}
.kd-app-box h2{margin:0 0 8px;font-size:18px}.kd-app-box p{margin:0 0 12px;line-height:1.45}
.kd-ptr{position:fixed;left:50%;top:calc(8px + env(safe-area-inset-top,0px));z-index:2147483000;transform:translate(-50%,-80px);display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:999px;background:var(--card,#15134B);color:var(--text,#fff);border:1px solid var(--line2,rgba(255,255,255,.2));font-size:15px;font-weight:600;box-shadow:0 6px 24px rgba(0,0,0,.35);pointer-events:none;transition:transform .15s ease}
.kd-ptr[data-state=ready]{border-color:var(--kd-ok);color:var(--kd-ok)}
.kd-ptr[data-state=busy]::before{content:"";width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:kd-spin .7s linear infinite}
.kd-ask{position:fixed;inset:0;z-index:2147483001;display:grid;place-items:center;padding:20px;background:rgba(5,4,20,.6)}
.kd-ask>div{max-width:360px;padding:20px;border-radius:18px;background:var(--card,#15134B);color:var(--text,#fff);border:1px solid var(--line2,rgba(255,255,255,.2))}
.kd-ask p{margin:0 0 16px;line-height:1.45}.kd-ask .kd-row{display:flex;gap:var(--kd-gap);flex-wrap:wrap}.kd-ask .kd-row>button{flex:1 1 120px}
