/* Шрифты Google подключаются НЕ здесь через @import (это раньше отправляло браузер по
   цепочке из 3 последовательных запросов: сначала style.css, потом обнаруженный внутри
   @import, потом уже сами файлы шрифтов — на медленном интернете это заметная задержка
   первой отрисовки текста), а через <link rel="preconnect"/stylesheet> в index.php <head> —
   так браузер начинает качать шрифты ПАРАЛЛЕЛЬНО с этим файлом, а не после него
   (оптимизация скорости загрузки, 21.08.2026). */

/* ============================================================
   PanPerfekt CRM — design tokens ("cockpit" dark theme)
   Near-black graphite chrome + one precision blue signature accent,
   layered elevation surfaces, bright semantic status colors tuned
   for legibility on dark cards.
   ============================================================ */
:root{
  --ink:#F4F7FB; --ink-soft:#C7D0DC; --ink-muted:#8B96A7;
  --bg:#07090C; --surface:#0D1117; --surface-2:#121821; --surface-3:#0B0F15;
  --border:rgba(255,255,255,.09); --border-soft:rgba(255,255,255,.055);
  --card-grad:linear-gradient(180deg, rgba(19,25,34,.98), rgba(11,15,21,.98));

  --accent:#1677FF; --accent-deep:#095BD4; --accent-soft:rgba(22,119,255,.14);
  --amber:#FFB547; --teal:#2FB8C9; --green:#36D399; --red:#FF5C69; --gray:#9AA4B2;

  /* back-compat aliases (existing inline JS references these names) */
  --primary:#1677FF; --primary-dark:#07090C;

  --radius:10px; --radius-sm:7px;
  --shadow-sm:0 2px 6px rgba(0,0,0,.22);
  --shadow-md:0 10px 28px rgba(0,0,0,.28), 0 2px 6px rgba(0,0,0,.2);
  --shadow-lg:0 20px 56px rgba(0,0,0,.4), 0 4px 12px rgba(0,0,0,.25);
  --ease:cubic-bezier(.2,.7,.3,1);
}

*{box-sizing:border-box;}
html{-webkit-tap-highlight-color:transparent;}
body{
  margin:0;color:var(--ink);font-family:'Inter',sans-serif;-webkit-font-smoothing:antialiased;
  background:
    radial-gradient(ellipse 900px 500px at 85% -10%, rgba(22,119,255,.12), transparent 60%),
    radial-gradient(ellipse 700px 500px at 0% 10%, rgba(255,181,71,.05), transparent 50%),
    radial-gradient(ellipse 800px 600px at 50% 110%, rgba(54,211,153,.045), transparent 55%),
    var(--bg);
  background-attachment:fixed;
  min-height:100vh;
  min-height:100dvh;
}
/* Страховка от горизонтальной прокрутки ВСЕЙ страницы на телефоне (22.09.2026, по просьбе
   Павла — "все вкладки/экраны/функции должны помещаться по ширине экрана телефона без
   прокрутки влево/вправо"). Ниже отдельно устранены конкретные источники проблемы (широкие
   таблицы обёрнуты в свою собственную прокрутку, подсказка адреса Google больше не вылезает
   за край экрана) — но эта страховка на уровне html/body не даёт ВСЕЙ странице поехать вбок,
   даже если где-то останется непойманный случай: лишнее просто обрезается по ширине экрана,
   а не тянет за собой прокрутку всего сайта. */
html{overflow-x:hidden;}
body{overflow-x:hidden;max-width:100%;}
.font-display{font-family:'Manrope',sans-serif;letter-spacing:-.01em;}
.mono{font-family:'JetBrains Mono',monospace;}
.mono-sm{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--ink-muted);}
.row-between{display:flex;justify-content:space-between;align-items:center;gap:8px;}
input,select,textarea{font-family:'Inter',sans-serif;color:var(--ink);background:var(--surface-3);border:1px solid var(--border);border-radius:8px;}
input[type=number],input[type=date],input[type=time]{font-family:'JetBrains Mono',monospace;}
a{color:var(--accent);}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}

/* ============================================================
   Login
   ============================================================ */
body:has(.login-box){
  background:
    radial-gradient(circle at 15% 20%, rgba(22,119,255,.14), transparent 45%),
    radial-gradient(circle at 85% 80%, rgba(255,181,71,.07), transparent 45%),
    repeating-linear-gradient(0deg, rgba(255,255,255,.025) 0 1px, transparent 1px 64px),
    repeating-linear-gradient(90deg, rgba(255,255,255,.025) 0 1px, transparent 1px 64px),
    var(--bg);
  min-height:100vh;
  min-height:100dvh;
}
.login-box{
  max-width:360px;margin:88px auto;background:var(--card-grad);padding:32px 28px;
  border-radius:16px;border:1px solid var(--border);box-shadow:var(--shadow-lg);
  position:relative;overflow:hidden;color:var(--ink);
}
.login-box::before{
  content:'';position:absolute;top:0;left:0;right:0;height:3px;
  background:linear-gradient(90deg,var(--accent),var(--accent-deep));
}
.login-box h1{font-family:'Manrope',sans-serif;font-size:21px;font-weight:800;margin:0 0 18px;letter-spacing:-.01em;color:var(--ink);}
.login-box label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);margin:14px 0 4px;font-weight:600;}
.login-box input{
  width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;
  margin:0 0 4px;font-size:14px;background:var(--surface-3);color:var(--ink);
  transition:border-color .15s var(--ease),box-shadow .15s var(--ease);
}
.login-box input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none;}
.login-box .btn{width:100%;margin-top:16px;padding:11px 16px;}
.error{color:var(--red);font-size:13px;margin-bottom:10px;background:rgba(255,92,105,.1);border:1px solid rgba(255,92,105,.3);border-radius:8px;padding:9px 12px;}

/* ============================================================
   Публичная главная страница (вход) — редизайн 19.09.2026 по референсу Павла
   ("один в один как на картинке"): тёмный hero с карточкой входа справа,
   ряд иконок-возможностей, баннер интеграции с Google Calendar, нижняя
   полоса из 4 преимуществ. Блок с полным описанием платформы и калькой
   про Google Calendar (.pub-about) НАРОЧНО остался на странице (важен для
   верификации Google-приложения — "Strona główna nie wyjaśnia celu aplikacji"),
   но по просьбе Павла (19.09.2026, "зачем оно занимает пол страницы") сдвинут
   в самый низ, компактной плашкой из двух кнопок-раскрывашек, ПОСЛЕ футера —
   короткий тизер в баннере hero его не заменяет, а дополняет.
   ============================================================ */
/* Павел уточнил (20.09.2026, скриншот референса): фото НЕ на всю страницу — топбар,
   левая часть hero и футер это просто сплошная тёмная заливка (как обычный body
   этого сайта, см. правило body{} выше), а фото аккуратно вставлено ТОЛЬКО в
   правую часть hero (там, где на референсе видна машина/стена), с растушёванным
   левым краем. Раньше фото висело на body с background-attachment:fixed на всю
   высоту страницы — убрано; .pub-page просто прозрачно показывает обычный body. */
.pub-page{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh;}

.pub-topbar{display:flex;align-items:center;gap:18px;padding:16px 28px;border-bottom:1px solid var(--border-soft);flex-wrap:wrap;}
/* На референсе Павла (1707px) у топбара/hero/футера один и тот же гуттер ≈72px
   слева и ≈66px справа от края экрана (замерено по пикселям: карточка входа
   справа кончается всего в ~66px от правого края, а не в центре узкой колонки
   1240px, как было раньше) — включаем этот широкий гуттер только на больших
   экранах, чтобы на мобильном/планшете остался прежний компактный отступ. */
@media(min-width:1180px){.pub-topbar{padding:20px 72px;}}
.pub-brand{display:flex;align-items:center;gap:10px;flex-shrink:0;}
.pub-brand-logo{height:34px;width:auto;display:block;}
.pub-brand-text{display:flex;flex-direction:column;line-height:1.2;}
.pub-brand-title{font-family:'Manrope',sans-serif;font-weight:800;font-size:17px;color:var(--ink);}
.pub-brand-title b{color:var(--accent);font-weight:800;}
.pub-brand-sub{font-size:9px;letter-spacing:.09em;color:var(--ink-muted);text-transform:uppercase;font-weight:700;}
.pub-nav{display:none;align-items:center;gap:26px;margin:0 auto;}
@media(min-width:860px){.pub-nav{display:flex;}}
.pub-nav a{color:var(--ink-soft);text-decoration:none;font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:6px;padding-bottom:4px;border-bottom:2px solid transparent;transition:color .15s var(--ease),border-color .15s var(--ease);}
.pub-nav a svg{width:15px;height:15px;}
.pub-nav a:hover{color:var(--ink);}
.pub-nav a.active{color:var(--accent);border-bottom-color:var(--accent);}
.pub-topbar-right{display:flex;align-items:center;gap:10px;flex-shrink:0;margin-left:auto;}

/* Павел (20.09.2026): между hero и футером был пустой "провал" сплошного тёмного
   фона (margin-top:auto на футере просто добавлял пустое место ПЕРЕД ним) — теперь
   вместо пустоты туда тянется сам hero (flex:1 — забирает весь свободный остаток
   высоты вьюпорта), а значит и его фон-фото внутри (.pub-hero-bg, inset:0) тоже
   растягивается вниз до самого футера — фото доходит до подвала, а футер садится
   на настоящий низ страницы, а не просто "куда-то ниже". */
.pub-hero{position:relative;overflow:hidden;padding:44px 28px 54px;flex:1 0 auto;display:flex;align-items:center;}
@media(min-width:1180px){.pub-hero{padding:52px 72px 60px;}}
/* 20.09.2026, разбор жалобы Павла ("сильно увеличил и обрезал вывеску PanPerfekt
   сзади", "фон не до подвала"): причина — фото стояло на background-size:cover
   ПО ВЫСОТЕ блока hero. .pub-hero растягивается флексом (flex:1 0 auto) на всё
   доступное место, и на невысоких/немаксимизированных окнах браузера (у Павла —
   похоже, что-то около 1440×760, не на весь экран) блок hero становится "выше
   своей естественной пропорции" относительно фото (1706×922 ≈ 1.85:1) — cover в
   такой ситуации начинает зумить фото по высоте и обрезать его по бокам, съедая
   как раз левую часть кадра, где стоит вывеска "PanPerfekt" — и одновременно
   из-за сильного зума нижняя часть кадра превращается в мутное тёмное пятно,
   которое визуально не читается как "фото", отсюда ощущение "фон не доходит до
   подвала". Исправление: фото теперь всегда масштабируется ПО ШИРИНЕ блока hero
   (background-size: ...,100% auto — ширина = 100% контейнера, высота считается
   пропорционально) — значит обрезка возможна только СВЕРХУ/СНИЗУ, а не по бокам,
   и вывеска больше не может "уехать" за левый край при узких/невысоких окнах.
   background-position для фото-слоя — "center 20%" (сдвиг зоны обрезки к верху
   кадра: если высоты не хватает, в первую очередь срезается низ — фургон/пол,
   а не мастер и вывеска, которые в кадре выше). */
/* 21.09.2026, по прямому требованию Павла — взял значения ПОЛНОСТЬЮ из присланного им
   архива 1:1 (без собственных модификаций), включая первую "ступеньку" градиента
   var(--bg) 0%..34% — так стоит в архиве, который Павел явно назвал эталоном. Позиция/
   масштаб фото (112% auto, 38% 20%) — тоже 1:1 из архива, у нас они и так совпадали. */
.pub-hero-bg{
  position:absolute;inset:0;z-index:0;
  background-image:
    linear-gradient(100deg, var(--bg) 0%, var(--bg) 34%, rgba(7,9,12,.88) 45%, rgba(7,9,12,.5) 58%, rgba(7,9,12,.12) 75%, rgba(7,9,12,0) 90%),
    linear-gradient(180deg, rgba(7,9,12,.4) 0%, rgba(7,9,12,0) 16%, rgba(7,9,12,0) 80%, rgba(7,9,12,.55) 100%),
    url('uploads/hero-windows.jpg');
  background-position:center, center, 38% 20%;
  background-size:cover, cover, 112% auto;
  background-repeat:no-repeat, no-repeat, no-repeat;
}
.pub-hero-inner{position:relative;z-index:1;width:100%;display:grid;grid-template-columns:1fr;gap:34px;}
@media(min-width:980px){.pub-hero-inner{grid-template-columns:1fr 400px;align-items:center;gap:40px;}}
/* На референсе карточка входа занимает ~452px из ~1569px доступной ширины
   hero (1707 минус гуттеры) — то есть карточка ФИКСИРОВАННОЙ ширины прижата
   к правому краю, а левая колонка (заголовок/фичи) занимает всё остальное,
   а не наоборот (раньше было 1.15fr/.85fr внутри узкой центрированной
   колонки 1240px — отсюда и расхождение с фото). */
@media(min-width:1180px){.pub-hero-inner{grid-template-columns:1fr 452px;gap:48px;}}
.pub-hero-left{max-width:760px;}

.pub-badge{display:inline-flex;align-items:center;gap:8px;background:rgba(22,119,255,.12);border:1px solid rgba(22,119,255,.3);color:#6FA9FF;border-radius:999px;padding:6px 14px 6px 12px;font-size:12px;font-weight:700;margin-bottom:18px;}
.pub-badge svg{width:14px;height:14px;flex-shrink:0;}
.accent{color:var(--accent);}
.pub-h1{font-family:'Manrope',sans-serif;font-weight:800;font-size:clamp(30px,4.4vw,46px);line-height:1.12;letter-spacing:-.02em;margin:0 0 16px;color:var(--ink);}
.pub-lead{font-size:15.5px;line-height:1.65;color:var(--ink-soft);max-width:520px;margin:0 0 26px;white-space:pre-line;}

.pub-features-row{display:grid;grid-template-columns:repeat(2,1fr);gap:16px 22px;margin-bottom:26px;}
@media(min-width:560px){.pub-features-row{grid-template-columns:repeat(3,1fr);}}
@media(min-width:980px){.pub-features-row{grid-template-columns:repeat(5,1fr);gap:14px;}}
.pub-feature{display:flex;flex-direction:column;gap:8px;}
/* Возврат к варианту "как на референсе" (20.09.2026, Павел уточнил — на фото у
   иконок ЕСТЬ свой отдельный тёмно-синий квадрат-подложка): у каждой иконки
   собственный чип с фоном/рамкой, не голая иконка на фоне страницы. */
.pub-feature-icon{width:40px;height:40px;border-radius:11px;background:rgba(255,255,255,.06);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;color:var(--accent);flex-shrink:0;}
.pub-feature-icon svg{width:19px;height:19px;}
.pub-feature b{font-size:13.5px;color:var(--ink);font-weight:700;}
.pub-feature span{font-size:11.5px;color:var(--ink-muted);line-height:1.4;display:block;margin-top:2px;}

.pub-calendar-banner{display:flex;align-items:center;gap:14px;background:rgba(255,255,255,.04);border:1px solid var(--border);border-radius:14px;padding:14px 16px;max-width:560px;text-decoration:none;transition:border-color .15s var(--ease),background .15s var(--ease);}
.pub-calendar-banner:hover{border-color:rgba(22,119,255,.4);background:rgba(22,119,255,.06);}
.pub-calendar-icon{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,#4285F4,#34A853);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff;}
.pub-calendar-icon svg{width:19px;height:19px;}
.pub-calendar-text{flex:1;min-width:0;}
.pub-calendar-text b{font-size:13.5px;color:var(--ink);display:block;margin-bottom:2px;}
.pub-calendar-text span{font-size:12px;color:var(--ink-muted);line-height:1.4;}
.pub-calendar-arrow{color:var(--ink-muted);flex-shrink:0;transition:transform .15s var(--ease),color .15s var(--ease);}
.pub-calendar-banner:hover .pub-calendar-arrow{transform:translateX(3px);color:var(--accent);}

.pub-login-card{background:rgba(13,17,23,.74);backdrop-filter:blur(22px);-webkit-backdrop-filter:blur(22px);border:1px solid rgba(255,255,255,.1);border-radius:18px;padding:30px 26px;box-shadow:var(--shadow-lg);max-width:452px;margin:0 auto;position:relative;overflow:hidden;}
.pub-login-card::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent-deep));}
.pub-login-head{display:flex;align-items:center;gap:11px;margin-bottom:22px;}
.pub-login-head img{height:34px;width:auto;}
.pub-login-head .t{font-family:'Manrope',sans-serif;font-weight:800;font-size:16px;color:var(--ink);line-height:1.25;}
.pub-login-head .s{font-size:11.5px;color:var(--ink-muted);}
.pub-input-wrap{position:relative;margin-bottom:14px;}
.pub-input-wrap>svg{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--ink-muted);pointer-events:none;width:16px;height:16px;}
.pub-input-wrap input{width:100%;padding:12px 14px 12px 40px;border:1px solid var(--border);border-radius:10px;background:var(--surface-3);color:var(--ink);font-size:13.5px;transition:border-color .15s var(--ease),box-shadow .15s var(--ease);}
.pub-input-wrap input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none;}
.pub-input-wrap .pw-toggle{position:absolute;right:10px;left:auto;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;color:var(--ink-muted);padding:4px;}
.pub-login-row{display:flex;align-items:center;justify-content:space-between;margin:2px 0 18px;font-size:12.5px;flex-wrap:wrap;gap:8px;}
.pub-login-row label{display:flex;align-items:center;gap:7px;color:var(--ink-muted);cursor:pointer;}
.pub-login-row input[type=checkbox]{accent-color:var(--accent);width:15px;height:15px;}
.pub-login-row a{color:var(--ink-muted);text-decoration:none;}
.pub-login-row a:hover{color:var(--accent);}
.pub-login-card .btn{width:100%;padding:12px 16px;font-size:14px;display:flex;align-items:center;justify-content:center;gap:8px;}
.pub-divider{display:flex;align-items:center;gap:12px;margin:18px 0;color:var(--ink-muted);font-size:11.5px;}
.pub-divider::before,.pub-divider::after{content:'';flex:1;height:1px;background:var(--border);}
.pub-google-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:10px;background:var(--surface-3);border:1px solid var(--border);color:var(--ink);border-radius:10px;padding:11px 16px;font-size:13.5px;font-weight:600;font-family:'Inter',sans-serif;cursor:pointer;transition:background .15s var(--ease),border-color .15s var(--ease);}
.pub-google-btn:hover{background:var(--surface-2);border-color:rgba(255,255,255,.2);}
.pub-google-btn svg{width:17px;height:17px;flex-shrink:0;}
.pub-signup-hint{text-align:center;font-size:12px;color:var(--ink-muted);margin:18px 0 0;}
.pub-signup-hint a{color:var(--accent);text-decoration:none;font-weight:600;}
.pub-signup-hint a:hover{text-decoration:underline;}

/* 21.09.2026: блок "О платформе"/"Интеграция с Google Calendar" (раскрывашки классов
   pub-about и pub-toggle) убран целиком по просьбе Павла — "сделай это просто ссылками
   в подвале в разделе компания". Старые правила больше не используются нигде (заменены
   двумя обычными ссылками в колонке "Компания" футера, см. .pub-footer-nav в index.php),
   CSS удалён вместе с разметкой, чтобы не оставалось мёртвого кода. */

/* Павел (20.09.2026): футер сдвинуть пониже (не липнуть сразу к hero) и выделить
   полосой на всю ширину экрана — добавили небольшой отступ сверху и чуть более
   светлую заливку + верхнюю границу, отделяющую его от hero, как на референсе. */
/* margin-top:auto — футер съедает "пустой" остаток высоты вьюпорта (раньше эта
   пустота была ПОСЛЕ футера, из-за чего он визуально "прилипал" к hero и выглядел
   слишком высоко на длинных экранах) и садится ближе к низу, прямо над "о платформе". */
.pub-footer-strip{padding:34px 28px 30px;border-top:1px solid var(--border-soft);background:var(--surface);flex-shrink:0;}
@media(min-width:1180px){.pub-footer-strip{padding:34px 72px 34px;}}
.pub-footer-grid{width:100%;display:grid;grid-template-columns:1fr;gap:22px;}
@media(min-width:640px){.pub-footer-grid{grid-template-columns:repeat(2,1fr);}}
@media(min-width:980px){.pub-footer-grid{grid-template-columns:repeat(4,1fr);}}
.pub-footer-item{display:flex;align-items:center;gap:12px;}
.pub-footer-icon{width:42px;height:42px;border-radius:50%;background:rgba(255,255,255,.06);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;color:var(--accent);flex-shrink:0;}
.pub-footer-icon svg{width:19px;height:19px;}
.pub-footer-item b{font-size:13px;color:var(--ink);display:block;}
.pub-footer-item span{font-size:11.5px;color:var(--ink-muted);}

/* ============================================================
   Публичная страница "Возможности" (features.php), 20.09.2026.
   ВСЕ классы ниже — новые, с префиксом .features-, специально изолированы от остального
   приложения (см. просьбу Павла: "чтобы новый CSS не поломал существующий интерфейс").
   Цветовые токены/шрифты берутся из тех же переменных :root, что и весь сайт — отдельной
   палитры не заводим, чтобы страница не выглядела чужеродной рядом с index.php/client.php.
   ============================================================ */
.features-page main{display:block;}

/* Кнопка "Войти" в шапке страницы "Возможности" (referencе: справа от переключателя языка) */
.features-nav-login{display:inline-flex;align-items:center;padding:8px 18px;border-radius:9px;border:1px solid var(--border);color:var(--ink-soft);text-decoration:none;font-size:13px;font-weight:700;white-space:nowrap;transition:border-color .15s var(--ease),color .15s var(--ease),background .15s var(--ease);}
.features-nav-login:hover{color:var(--ink);border-color:rgba(255,255,255,.25);background:rgba(255,255,255,.05);}

.features-btn-ghost{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:12px 22px;border-radius:10px;border:1px solid var(--border);color:var(--ink-soft);text-decoration:none;font-size:14px;font-weight:600;transition:border-color .15s var(--ease),color .15s var(--ease),background .15s var(--ease);}
.features-btn-ghost svg{flex-shrink:0;}
.features-btn-ghost:hover{color:var(--ink);border-color:rgba(255,255,255,.25);background:rgba(255,255,255,.04);}

/* --- 1. Hero --- */
/* 20.09.2026, правка по прямой просьбе Павла ("страницу возможностей повторить
   дизайн точ в точ с картинки"): вместо абстрактного окна-мокапа заказов — фото
   (то же uploads/hero-windows.jpg, что и на главной) как фон всего hero-блока,
   слева текст на затемнении. Тот же приём градиента-затемнения слева направо,
   что и в .pub-hero-bg, но зона фото раскрыта немного шире (это отдельная
   страница — своя раскадровка).
   21.09.2026: справа больше нет чек-листа/слогана поверх фото (Павел попросил
   убрать — "кривые надписи сбоку"), градиент взят 1:1 из архива Павла, как и на
   главной странице. */
.features-hero{position:relative;overflow:hidden;padding:56px 28px 64px;background:var(--bg);}
@media(min-width:1180px){.features-hero{padding:76px 72px 84px;}}
.features-hero-bg{
  position:absolute;inset:0;z-index:0;
  background-image:
    linear-gradient(100deg, var(--bg) 0%, var(--bg) 28%, rgba(7,9,12,.9) 40%, rgba(7,9,12,.56) 54%, rgba(7,9,12,.2) 70%, rgba(7,9,12,.08) 100%),
    linear-gradient(180deg, rgba(7,9,12,.3) 0%, rgba(7,9,12,0) 20%, rgba(7,9,12,.06) 70%, rgba(7,9,12,.5) 100%),
    url('uploads/hero-windows.jpg');
  background-position:center, center, 64% 22%;
  background-size:cover, cover, 130% auto;
  background-repeat:no-repeat, no-repeat, no-repeat;
}
.features-hero-inner{position:relative;z-index:1;display:grid;grid-template-columns:1fr;gap:44px;align-items:center;max-width:1320px;margin:0 auto;}
@media(min-width:980px){.features-hero-inner{grid-template-columns:1.05fr .95fr;gap:40px;}}
.features-hero-left{max-width:640px;}
.features-hero-ctas{display:flex;flex-wrap:wrap;gap:14px;margin-top:8px;}
.features-hero-ctas .btn{padding:13px 24px;font-size:14.5px;display:inline-flex;align-items:center;gap:8px;}

.features-hero-stats{display:flex;flex-wrap:wrap;gap:28px;margin-top:30px;padding-top:22px;border-top:1px solid rgba(255,255,255,.12);}
.features-hero-stat{display:flex;flex-direction:column;gap:3px;}
.features-hero-stat b{font-family:'Manrope',sans-serif;font-weight:800;font-size:25px;color:var(--ink);line-height:1;}
.features-hero-stat span{font-size:11.5px;color:var(--ink-muted);line-height:1.35;max-width:132px;}

/* 21.09.2026: .features-hero-right/-checklist/-script удалены из разметки (Павел попросил
   убрать чек-лист и рукописный слоган справа в hero — "кривые надписи сбоку"), CSS-правила
   тоже убраны как более не используемые. */

/* --- Общие заголовки секций --- */
.features-section{padding:64px 28px;}
@media(min-width:1180px){.features-section{padding:80px 72px;}}
.features-section-alt{background:var(--surface);border-top:1px solid var(--border-soft);border-bottom:1px solid var(--border-soft);}
.features-section-head{max-width:660px;margin:0 auto 40px;text-align:center;}
.features-kicker{display:block;font-size:11.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);margin-bottom:10px;}
.features-section-head h2{font-family:'Manrope',sans-serif;font-weight:800;font-size:clamp(24px,3vw,32px);color:var(--ink);margin:0 0 12px;letter-spacing:-.01em;}
.features-section-head p{font-size:14.5px;line-height:1.6;color:var(--ink-muted);margin:0;}

/* --- 2. Карточки возможностей --- */
.features-cards-grid{display:grid;grid-template-columns:1fr;gap:18px;max-width:1320px;margin:0 auto;}
@media(min-width:640px){.features-cards-grid{grid-template-columns:repeat(2,1fr);}}
@media(min-width:980px){.features-cards-grid{grid-template-columns:repeat(4,1fr);}}
.features-card{background:var(--card-grad);border:1px solid var(--border);border-radius:14px;padding:22px 20px;transition:border-color .15s var(--ease),transform .15s var(--ease);}
.features-card:hover{border-color:rgba(22,119,255,.35);transform:translateY(-2px);}
.features-card-icon{width:42px;height:42px;border-radius:11px;background:rgba(22,119,255,.12);border:1px solid rgba(22,119,255,.25);display:flex;align-items:center;justify-content:center;color:var(--accent);margin-bottom:14px;}
.features-card-icon svg{width:20px;height:20px;}
.features-card h3{font-size:15px;font-weight:700;color:var(--ink);margin:0 0 6px;}
.features-card p{font-size:12.5px;line-height:1.55;color:var(--ink-muted);margin:0;}
.features-card-arrow{display:inline-flex;align-items:center;gap:6px;margin-top:14px;font-size:11.5px;font-weight:700;color:var(--accent);opacity:0;transform:translateX(-4px);transition:opacity .15s var(--ease),transform .15s var(--ease);}
.features-card-arrow svg{width:12px;height:12px;flex-shrink:0;}
.features-card:hover .features-card-arrow{opacity:1;transform:translateX(0);}

/* --- 3. Воркфлоу / статусы заказа --- */
.features-workflow-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px 4px;max-width:1200px;margin:0 auto;}
.features-workflow-step{display:flex;align-items:center;gap:8px;background:var(--surface-3);border:1px solid var(--border);border-radius:999px;padding:8px 14px 8px 8px;font-size:12px;font-weight:600;color:var(--ink-soft);white-space:nowrap;}
.features-workflow-step.is-active{border-color:var(--accent);background:rgba(22,119,255,.12);color:var(--ink);}
.features-workflow-num{width:20px;height:20px;border-radius:50%;background:rgba(255,255,255,.08);display:flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:800;color:var(--ink-muted);flex-shrink:0;}
.features-workflow-step.is-active .features-workflow-num{background:var(--accent);color:#fff;}
.features-workflow-arrow{color:var(--ink-muted);flex-shrink:0;opacity:.6;}

/* --- 4. Мокап карточки заказа --- */
.features-ordercard{max-width:900px;margin:0 auto;background:var(--card-grad);border:1px solid var(--border);border-radius:16px;padding:26px 26px 22px;box-shadow:var(--shadow-md);}
.features-ordercard-top{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap;padding-bottom:18px;border-bottom:1px solid var(--border-soft);margin-bottom:18px;}
.features-ordercard-client{font-size:17px;font-weight:800;color:var(--ink);font-family:'Manrope',sans-serif;margin-bottom:5px;}
.features-ordercard-addr{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-muted);}
.features-status-badge{background:rgba(54,211,153,.14);color:var(--green);border:1px solid rgba(54,211,153,.3);border-radius:999px;padding:6px 14px;font-size:12px;font-weight:700;white-space:nowrap;}
.features-ordercard-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin-bottom:20px;}
@media(min-width:640px){.features-ordercard-grid{grid-template-columns:repeat(4,1fr);}}
.features-ordercard-grid span{display:block;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-muted);margin-bottom:5px;}
.features-ordercard-grid b{font-size:13.5px;color:var(--ink);font-weight:700;}
.features-ordercard-lists{display:grid;grid-template-columns:1fr;gap:18px;padding-top:18px;border-top:1px solid var(--border-soft);}
@media(min-width:640px){.features-ordercard-lists{grid-template-columns:repeat(3,1fr);}}
.features-ordercard-col-label{display:block;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-muted);margin-bottom:9px;}
.features-ordercard-tag{display:inline-block;background:rgba(255,255,255,.05);border:1px solid var(--border);border-radius:8px;padding:6px 10px;font-size:12px;color:var(--ink-soft);margin:0 6px 6px 0;}
.features-ordercard-chip{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--ink-soft);margin-bottom:8px;}
.features-ordercard-chip svg{color:var(--accent);flex-shrink:0;}
.features-ordercard-notes{margin-top:18px;padding-top:18px;border-top:1px solid var(--border-soft);}
.features-ordercard-notes p{margin:6px 0 0;font-size:12.5px;line-height:1.55;color:var(--ink-soft);}

/* --- 5/7. Секции "текст + визуал" (Calendar, Склад) --- */
.features-split{display:grid;grid-template-columns:1fr;gap:36px;align-items:center;max-width:1180px;margin:0 auto;}
@media(min-width:900px){.features-split{grid-template-columns:1fr 1fr;gap:56px;}}
.features-split-text h2{font-family:'Manrope',sans-serif;font-weight:800;font-size:clamp(22px,2.8vw,28px);color:var(--ink);margin:0 0 12px;letter-spacing:-.01em;}
.features-split-text p{font-size:14px;line-height:1.65;color:var(--ink-muted);margin:0;max-width:440px;}
.features-split-visual{display:flex;justify-content:center;}

/* 21.09.2026, по замечанию Павла — вернул мокап-окошко списка заказов (было удалено
   при переделке hero на фото), теперь используется в новой секции "превью интерфейса"
   перед воркфлоу статусов на features.php, как в присланном референсе. Реконструировано
   1:1 из архивной версии update78 (последняя версия до удаления). */
.features-mock-window{width:100%;max-width:460px;background:var(--card-grad);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow-lg);overflow:hidden;}
.features-mock-titlebar{display:flex;align-items:center;gap:7px;padding:13px 16px;border-bottom:1px solid var(--border-soft);background:rgba(255,255,255,.02);}
.features-mock-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;}
.features-mock-titletext{margin-left:8px;font-size:12px;font-weight:700;color:var(--ink-muted);letter-spacing:.02em;}
.features-mock-body{padding:16px;}
.features-mock-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--border-soft);}
.features-mock-row:last-of-type{border-bottom:none;}
.features-mock-pill{font-size:10.5px;font-weight:700;padding:4px 9px;border-radius:999px;white-space:nowrap;}
.features-mock-name{flex:1;min-width:0;font-size:12.5px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.features-mock-amount{font-size:12.5px;font-weight:700;color:var(--ink);font-family:'JetBrains Mono',monospace;}
.features-mock-chart{display:flex;align-items:flex-end;gap:7px;height:64px;margin-top:16px;padding-top:12px;border-top:1px solid var(--border-soft);}
.features-mock-bar{flex:1;background:rgba(255,255,255,.09);border-radius:4px 4px 0 0;}
.features-mock-bar-accent{background:linear-gradient(180deg,var(--accent),var(--accent-deep));}
/* Кикер над заголовком в паре с мокапом (как fp_features_kicker в карточках) */
.features-preview-kicker{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.04em;color:var(--accent);text-transform:uppercase;margin-bottom:10px;}

.features-calendar-mock{width:100%;max-width:420px;background:var(--card-grad);border:1px solid var(--border);border-radius:16px;padding:18px;position:relative;min-height:220px;box-shadow:var(--shadow-md);}
.features-calendar-mock-head{display:flex;justify-content:space-between;padding-bottom:14px;border-bottom:1px solid var(--border-soft);margin-bottom:14px;}
.features-calendar-mock-head span{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--ink-muted);font-weight:700;}
.features-calendar-mock-head span.is-today{background:var(--accent);color:#fff;}
.features-calendar-mock-event{position:absolute;left:18px;right:18px;background:rgba(255,255,255,.05);border:1px solid var(--border);border-left:3px solid var(--ink-muted);border-radius:8px;padding:8px 10px;font-size:11.5px;color:var(--ink-soft);}
.features-calendar-mock-event-accent{border-left-color:var(--accent);background:rgba(22,119,255,.1);color:var(--ink);}

.features-warehouse-mock{width:100%;max-width:460px;background:var(--card-grad);border:1px solid var(--border);border-radius:16px;padding:20px;box-shadow:var(--shadow-md);}
.features-warehouse-row{display:flex;align-items:center;gap:10px;padding:10px 0;}
.features-warehouse-row span{width:118px;flex-shrink:0;font-size:12px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.features-warehouse-bar{flex:1;height:7px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden;}
.features-warehouse-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--accent-deep),var(--accent));}
.features-warehouse-bar i.is-low{background:linear-gradient(90deg,#B8402E,var(--red));}
.features-warehouse-row em{width:76px;flex-shrink:0;text-align:right;font-style:normal;font-size:10.5px;color:var(--ink-muted);font-family:'JetBrains Mono',monospace;}
.features-warehouse-row b{width:52px;flex-shrink:0;text-align:right;font-size:12px;font-weight:700;color:var(--ink);font-family:'JetBrains Mono',monospace;}
@media(max-width:420px){.features-warehouse-row em{display:none;}}

/* --- 6. Финансы / метрики --- */
/* flex-wrap вместо grid — при 7 плитках последняя (неполная) строка сама
   центрируется, а не "провисает" слева с пустотой справа, как было бы с
   фиксированным числом grid-колонок. */
.features-metrics-grid{display:flex;flex-wrap:wrap;justify-content:center;gap:14px;max-width:1180px;margin:0 auto;}
.features-metric{flex:1 1 150px;max-width:220px;background:var(--card-grad);border:1px solid var(--border);border-radius:14px;padding:20px 18px;text-align:left;}
@media(max-width:639px){.features-metric{flex-basis:calc(50% - 7px);max-width:none;}}
.features-metric span{display:block;font-size:11.5px;color:var(--ink-muted);margin-bottom:8px;}
.features-metric b{display:block;font-size:20px;font-weight:800;color:var(--ink);font-family:'Manrope',sans-serif;margin-bottom:6px;}
.features-metric i{font-style:normal;font-size:11.5px;font-weight:700;}
.features-metric i.is-up{color:var(--green);}
.features-metric i.is-down{color:var(--red);}

/* --- 8. Процесс (6 шагов), горизонтально на десктопе / вертикально на мобильном --- */
.features-process-row{display:grid;grid-template-columns:1fr;gap:0;max-width:1320px;margin:0 auto;}
@media(min-width:900px){.features-process-row{grid-template-columns:repeat(6,1fr);}}
.features-process-step{position:relative;padding:0 16px 32px 0;}
@media(min-width:900px){
  .features-process-step{padding:0 18px 0 0;}
  .features-process-step:not(:last-child)::after{content:'';position:absolute;top:17px;left:44px;right:0;height:1px;background:var(--border);}
}
.features-process-num{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:rgba(22,119,255,.14);border:1px solid rgba(22,119,255,.35);color:var(--accent);font-weight:800;font-size:14px;font-family:'Manrope',sans-serif;margin-bottom:14px;position:relative;z-index:1;}
.features-process-step b{display:block;font-size:14px;font-weight:700;color:var(--ink);margin-bottom:6px;}
.features-process-step span{display:block;font-size:12px;line-height:1.55;color:var(--ink-muted);}

/* --- 9. Нижний CTA --- */
.features-cta{padding:72px 28px;text-align:center;background:radial-gradient(ellipse at 50% 0%,rgba(22,119,255,.14),rgba(22,119,255,0) 60%),var(--bg);border-top:1px solid var(--border-soft);}
.features-cta h2{font-family:'Manrope',sans-serif;font-weight:800;font-size:clamp(24px,3.2vw,34px);color:var(--ink);margin:0 0 12px;letter-spacing:-.01em;}
.features-cta p{font-size:14.5px;color:var(--ink-muted);margin:0 0 26px;}
.features-cta .btn{display:inline-flex;align-items:center;gap:8px;padding:14px 28px;font-size:15px;}

/* ============================================================
   App shell
   ============================================================ */
.shell{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh;}
.shell-body{display:flex;flex-direction:column;flex:1;min-height:0;}
@media(min-width:800px){.shell-body{flex-direction:row;}}
/* На мобильном (одна колонка) высота .shell не должна принудительно растягиваться на весь
   экран — иначе .content (flex:1) растягивается вслед за ней до высоты viewport'а, даже
   если реального контента на странице мало (например, канбан с одной короткой колонкой), и
   ниже контента остаётся пустая область, в которую можно "проскроллить в никуда" (жалоба
   Павла 03.09.2026). На десктопе (>=800px) полноэкранная высота оставлена — там сайдбар
   визуально должен доходить до низа экрана. */
@media(max-width:799px){.shell{min-height:0;}}

/* colored icon badge — the "premium SaaS" signature element for section headers */
.icon-badge{
  display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
  border-radius:9px;background:var(--ib-bg,#1677FF1F);color:var(--ib-color,#1677FF);
  margin-right:10px;vertical-align:-9px;box-shadow:inset 0 0 0 1px var(--ib-ring,#1677FF2E);
}
.icon-badge svg{width:16px;height:16px;margin:0;display:block;}

/* ============================================================
   Top bar — brand, global search, quick add, notifications, user menu
   (no vehicle marks here — signature is purely the PanPerfekt wordmark)
   ============================================================ */
.topbar{
  display:flex;align-items:center;gap:14px;padding:11px 18px;background:rgba(13,17,23,.92);
  backdrop-filter:blur(18px);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:40;
  flex-wrap:wrap;flex-shrink:0;
}
.offline-banner{
  display:none;align-items:center;justify-content:center;gap:8px;padding:7px 14px;
  background:rgba(255,181,71,.14);color:var(--amber);border-bottom:1px solid rgba(255,181,71,.3);
  font-size:12.5px;font-weight:600;text-align:center;flex-shrink:0;
}
.offline-banner.show{display:flex;}
/* Баннер очереди офлайн-синхронизации (Фаза 1 офлайн-режима, 04.09.2026) — переиспользует
   вид .offline-banner (та же полоса под топбаром), но с другим цветом и курсором: кликабелен,
   открывает модалку очереди (см. openSyncQueueModal() в app.js). Показывается независимо от
   .offline-banner — актуален и после восстановления связи, пока накопленные изменения ещё не
   долетели до сервера. */
.sync-banner{background:rgba(22,119,255,.14);color:var(--accent);border-bottom-color:rgba(22,119,255,.3);cursor:pointer;}
.sync-banner.sync-banner-error{background:rgba(255,92,105,.14);color:#FF5C69;border-bottom-color:rgba(255,92,105,.3);}
.sync-pending-badge{font-size:13px;vertical-align:1px;}
.topbar-brand{display:flex;align-items:center;gap:9px;margin-right:4px;flex-shrink:0;}
.topbar-logo{height:28px;width:auto;flex-shrink:0;display:block;}
.topbar-brand-text{display:flex;flex-direction:column;}
.topbar-title{font-size:16.5px;font-weight:800;color:var(--ink);line-height:1.1;}
.topbar-tagline{font-size:9px;letter-spacing:.08em;color:var(--ink-muted);text-transform:uppercase;font-weight:700;margin-top:1px;}

.topbar-search{position:relative;flex:1;min-width:160px;max-width:420px;display:flex;align-items:center;
  background:var(--bg);border:1px solid var(--border);border-radius:9px;padding:0 10px;height:38px;
  transition:border-color .15s var(--ease),box-shadow .15s var(--ease);}
.topbar-search:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);}
.topbar-search svg{flex-shrink:0;color:var(--ink-muted);}
.topbar-search input{flex:1;border:none;background:none;padding:0 8px;font-size:13px;outline:none;color:var(--ink);min-width:0;}
.topbar-kbd{font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--ink-muted);background:var(--surface);
  border:1px solid var(--border);border-radius:5px;padding:2px 5px;flex-shrink:0;}
@media(max-width:640px){.topbar-kbd{display:none;}}

.search-dropdown{position:absolute;top:calc(100% + 6px);left:0;right:0;background:var(--surface);
  border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-lg);max-height:360px;
  overflow-y:auto;display:none;z-index:60;}
.search-dropdown.open{display:block;}
.search-dropdown-group-label{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);font-weight:700;padding:9px 12px 4px;}
.search-dropdown-item{padding:8px 12px;cursor:pointer;font-size:13px;display:flex;justify-content:space-between;gap:10px;align-items:center;}
.search-dropdown-item:hover{background:var(--bg);}
.search-dropdown-empty, .notif-empty{padding:12px;font-size:12px;color:var(--ink-muted);}

.topbar-actions{display:flex;align-items:center;gap:8px;margin-left:auto;flex-shrink:0;}
.lang-select{appearance:none;-webkit-appearance:none;padding:5px 24px 5px 10px;font-size:12px;font-weight:600;
  border-radius:7px;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%238a94a3' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 8px center;transition:border-color .15s var(--ease),color .15s var(--ease);}
.lang-select:hover,.lang-select:focus{border-color:var(--green,#36D399);color:#fff;outline:none;}
.topbar-icon-btn{position:relative;width:36px;height:36px;border-radius:9px;border:1px solid var(--border);
  background:var(--surface);color:var(--ink-soft);display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:background .15s var(--ease),border-color .15s var(--ease),color .15s var(--ease);}
.topbar-icon-btn:hover{background:var(--bg);border-color:var(--accent);color:var(--accent);}
.notif-dot{position:absolute;top:6px;right:6px;width:7px;height:7px;border-radius:50%;background:var(--red);border:1.5px solid var(--surface);}

.topbar-quickadd, .topbar-notif, .topbar-user{position:relative;}
.quickadd-menu, .notif-menu, .user-menu{position:absolute;top:calc(100% + 6px);right:0;min-width:200px;
  background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-lg);
  padding:6px;display:none;z-index:60;}
/* Свой список подсказок для поля "Услуга" (04.09.2026) — вместо нативного <datalist>,
   который на Android рисовался системной всплывашкой поверх всего экрана и не нажимался
   (жалоба Павла). Тот же приём position:absolute, что и у .user-menu выше, но привязан
   к конкретному полю (.autocomplete-wrap), а не к топбару. См. attachSimpleAutocomplete() в app.js. */
.autocomplete-wrap{position:relative;}
.autocomplete-list{position:absolute;top:calc(100% + 4px);left:0;right:0;
  background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-lg);
  padding:4px;display:none;z-index:60;max-height:220px;overflow-y:auto;}
.autocomplete-list.show{display:block;}
.autocomplete-item{padding:9px 10px;border-radius:7px;font-size:13px;color:var(--ink-soft);cursor:pointer;}
.autocomplete-item:hover{background:var(--bg);color:var(--ink);}
.quickadd-menu.open, .notif-menu.open, .user-menu.open{display:block;}
.quickadd-menu button, .user-menu a{display:block;width:100%;text-align:left;background:none;border:none;
  padding:9px 10px;border-radius:7px;font-size:13px;color:var(--ink-soft);cursor:pointer;text-decoration:none;
  font-family:'Inter',sans-serif;}
.quickadd-menu button:hover, .user-menu a:hover{background:var(--bg);color:var(--ink);}
.notif-menu{min-width:270px;padding:8px;max-height:340px;overflow-y:auto;}
.notif-item{padding:9px 10px;border-radius:7px;font-size:12.5px;transition:background .15s var(--ease);}
.notif-item:hover{background:var(--bg);}

.topbar-user{display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 8px 4px 4px;border-radius:10px;
  transition:background .15s var(--ease);}
.topbar-user:hover{background:var(--bg);}
.topbar-avatar{width:30px;height:30px;border-radius:9px;background:linear-gradient(135deg,var(--accent),var(--accent-deep));
  color:#fff;display:flex;align-items:center;justify-content:center;font-family:'Manrope',sans-serif;font-weight:700;
  font-size:12px;flex-shrink:0;}
.topbar-userinfo{display:none;line-height:1.25;}
@media(min-width:700px){.topbar-userinfo{display:block;}}
.topbar-username{font-size:12.5px;font-weight:700;color:var(--ink);}
.topbar-userrole{font-size:10.5px;color:var(--ink-muted);}
.topbar-user>svg{color:var(--ink-muted);flex-shrink:0;}

.sidebar{
  background:rgba(9,12,16,.94);backdrop-filter:blur(18px);
  display:flex;flex-direction:row;overflow-x:auto;overflow-y:hidden;
  border-bottom:1px solid rgba(255,255,255,.06);position:sticky;
  top:var(--sticky-top,52px);z-index:35;flex-shrink:0;
}
@media(min-width:800px){
  .sidebar{flex-direction:column;width:216px;flex-shrink:0;overflow-y:auto;padding-top:14px;
    border-bottom:none;border-right:1px solid rgba(255,255,255,.06);
    box-shadow:20px 0 50px rgba(0,0,0,.2);
    max-height:calc(100vh - var(--sticky-top,52px));}
  .sidebar::before{
    content:'';position:absolute;top:-60px;left:-60px;width:220px;height:220px;border-radius:50%;
    background:radial-gradient(circle, rgba(22,119,255,.35), transparent 70%);pointer-events:none;
  }
}

.nav-btn{
  background:none;border:none;color:#8C96A3;padding:13px 20px;font-size:13.5px;font-weight:500;
  text-align:left;cursor:pointer;white-space:nowrap;border-left:3px solid transparent;
  text-decoration:none;display:flex;align-items:center;transition:color .15s var(--ease),background .15s var(--ease);
  position:relative;z-index:1;
}
.nav-icon{display:inline-flex;width:18px;height:18px;margin-right:11px;flex-shrink:0;opacity:.85;}
.nav-icon svg{width:100%;height:100%;}
.nav-btn.active .nav-icon, .nav-btn:hover .nav-icon{opacity:1;}
.nav-btn:hover{color:#DDE3EA;background:rgba(255,255,255,.03);}
.nav-btn.active{color:#fff;background:linear-gradient(90deg,rgba(22,119,255,.18),rgba(22,119,255,.03));border-left-color:var(--accent);font-weight:600;box-shadow:inset 0 0 0 0 transparent;}
.nav-btn.logout{margin-top:auto;color:#B8635A;}
.nav-btn.logout:hover{color:#E08078;background:rgba(192,57,43,.08);}

/* Счётчик новых заявок маркетплейса в сайдбаре (06.09.2026) — компактный красный бейдж,
   виден только когда есть непрочитанные заявки со статусом 'new' (см. app.js: initMarketplaceRequestsBadge). */
.nav-badge{
  margin-left:auto;background:var(--red);color:#fff;font-size:11px;font-weight:700;
  min-width:18px;height:18px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  padding:0 5px;line-height:1;
}

/* ============================================
   Клиентское приложение маркетплейса (06.09.2026) — Naprawia.PanPerfekt.pro, client.php/
   client_app.js. Отдельный, более простой набор классов (client-*), не пересекается с
   классами основной CRM — тот же файл style.css переиспользован ради общих CSS-переменных
   (тёмная тема, шрифт) и чтобы не тащить второй большой CSS-файл на маленькое приложение.
   ============================================ */
.client-app{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;}
.client-auth{max-width:420px;margin:0 auto;padding:32px 20px;width:100%;}
.client-app-title{font-size:22px;font-weight:700;margin:0 0 20px;text-align:center;}
.client-tabs{display:flex;gap:8px;margin-bottom:18px;border-bottom:1px solid var(--border);}
.client-tab{
  flex:1;background:none;border:none;color:var(--ink-muted);font-size:14px;font-weight:600;
  padding:10px 0;cursor:pointer;border-bottom:2px solid transparent;
}
.client-tab.active{color:var(--ink);border-bottom-color:var(--accent);}
.client-auth-divider{text-align:center;color:var(--ink-muted);font-size:12.5px;margin:16px 0;}
.client-auth-error{
  margin-top:12px;color:var(--red);background:rgba(255,92,105,.1);border:1px solid rgba(255,92,105,.25);
  border-radius:var(--radius-sm);padding:9px 12px;font-size:13px;
}
.client-shell{display:flex;flex-direction:column;min-height:100vh;min-height:100dvh;}

/* Боковое меню (16.09.2026, второй проход редизайна — "один в один" с референсом):
   логотип, пункты навигации (Главная/Поиск/Заказы/Избранное/Сообщения/Профиль), внизу —
   блок помощи. На десктопе — колонка слева, на узких экранах прячется в пользу нижней
   навигации (.client-bottom-nav ниже — тот же набор пунктов, просто в другом месте). */
.client-shell-sidebar{flex-direction:row;align-items:stretch;}
.client-sidebar{
  width:240px;flex-shrink:0;display:flex;flex-direction:column;
  border-right:1px solid var(--border);padding:20px 16px;background:var(--surface);
  position:sticky;top:0;align-self:flex-start;height:100vh;height:100dvh;
}
.client-sidebar .client-logo{padding:0 8px;margin-bottom:26px;}
.client-side-nav{display:flex;flex-direction:column;gap:2px;flex:1;}
.client-side-link{
  display:flex;align-items:center;text-align:left;background:none;border:none;
  color:var(--ink-muted);font-size:14px;font-weight:600;padding:10px 12px;
  border-radius:var(--radius-sm);cursor:pointer;transition:background .15s var(--ease),color .15s var(--ease);
}
.client-side-link:hover{background:var(--surface-3);color:var(--ink-soft);}
.client-side-link.active{background:var(--accent-soft);color:var(--accent);}
.client-help-box{
  margin-top:auto;padding:14px;border-radius:var(--radius-sm);background:var(--surface-3);
  border:1px solid var(--border-soft);
}
.client-help-title{font-size:13px;font-weight:700;margin-bottom:4px;}
.client-help-sub{font-size:12px;color:var(--ink-muted);margin-bottom:10px;line-height:1.4;}
.client-help-box .btn{width:100%;}

.client-body{flex:1;display:flex;flex-direction:column;min-width:0;}

/* Верхняя панель — логотип теперь в сайдбаре (десктоп) или в шапке остаётся только "чип"
   пользователя (аватар-инициалы + имя + выход), выровненный вправо. */
.client-topbar{
  display:flex;align-items:center;justify-content:space-between;padding:12px 18px;
  border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--surface);z-index:5;
}
.client-logo{display:flex;align-items:center;gap:8px;font-family:'Manrope',sans-serif;font-weight:800;font-size:16px;letter-spacing:-.01em;}
.client-logo-mark{
  width:26px;height:26px;border-radius:7px;background:linear-gradient(135deg,var(--accent),var(--accent-deep));
  color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;
}
.client-user-chip{display:flex;align-items:center;gap:8px;}
.client-user-name{font-size:13px;font-weight:600;color:var(--ink-soft);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.client-logout-btn{background:none;border:none;color:var(--ink-muted);font-size:12.5px;cursor:pointer;}
.client-logout-btn:hover{color:var(--red);}

.client-main{flex:1;padding:16px;padding-bottom:88px;max-width:920px;margin:0 auto;width:100%;}
.client-bottom-nav{
  position:fixed;bottom:0;left:0;right:0;display:flex;background:var(--surface);
  border-top:1px solid var(--border);padding:6px 4px calc(6px + env(safe-area-inset-bottom));z-index:5;
}
/* 6 пунктов меню в нижней навигации (16.09.2026) — те же пункты, что и в сайдбаре, поэтому
   на узких экранах текст мельче и обрезается многоточием в одну строку, а не переносится
   и наезжает на соседние кнопки. */
.client-nav-btn{
  flex:1;min-width:0;background:none;border:none;color:var(--ink-muted);font-size:10px;font-weight:600;
  padding:7px 2px;cursor:pointer;border-radius:var(--radius-sm);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.client-nav-btn.active{color:var(--accent);}

/* Переключение сайдбар/нижняя навигация по ширине экрана — один и тот же набор пунктов
   (data-maintab), просто в разных местах: сайдбар на широких экранах, нижняя панель на узких. */
@media (min-width: 801px){
  .client-bottom-nav{display:none;}
  .client-main{padding-bottom:16px;}
}
@media (max-width: 800px){
  .client-shell-sidebar{flex-direction:column;}
  .client-sidebar{display:none;}
}
.client-card{
  background:var(--card-grad);border:1px solid var(--border);border-radius:var(--radius);
  padding:16px;margin-bottom:12px;box-shadow:var(--shadow-sm);
}
.client-card-title{font-size:16px;font-weight:700;margin:0 0 14px;}
.client-empty{color:var(--ink-muted);font-size:13.5px;text-align:center;padding:20px 0;}
.client-back-btn{background:none;border:none;color:var(--accent);font-size:13px;cursor:pointer;padding:0 0 12px;}
.client-result-card{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.client-result-name{font-weight:600;font-size:14.5px;}
.client-result-price{color:var(--ink-muted);font-size:13px;margin-right:auto;padding-left:12px;}
.client-request-sent{text-align:center;}
.client-request-sent-icon{
  width:52px;height:52px;border-radius:50%;background:rgba(54,211,153,.15);color:var(--green);
  font-size:26px;display:flex;align-items:center;justify-content:center;margin:0 auto 14px;
}
.client-request-status{
  display:inline-block;font-size:11.5px;font-weight:700;margin-top:6px;padding:4px 10px;
  border-radius:999px;text-transform:uppercase;letter-spacing:.03em;
}
.client-request-status-new{color:var(--amber);background:rgba(255,181,71,.14);}
.client-request-status-accepted{color:var(--green);background:rgba(54,211,153,.14);}
.client-request-status-declined{color:var(--red);background:rgba(255,92,105,.14);}
.client-request-problem{font-size:13px;margin-top:8px;color:var(--ink-soft);}

/* Аватар-заглушка компании (инициалы на цветном кружке) — логотипов/фото компаний пока нет,
   это честная замена без выдуманных картинок. Цвет стабилен по имени компании (avatarColorClass
   в client_app.js), не рандомный при каждой перерисовке. */
.client-avatar{
  display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:50%;
  font-family:'Manrope',sans-serif;font-weight:800;color:#0B0F15;
  width:40px;height:40px;font-size:14px;
}
.client-avatar.sm{width:28px;height:28px;font-size:11px;}
.client-avatar.lg{width:56px;height:56px;font-size:19px;}
.client-avatar.c0{background:var(--accent);color:#fff;}
.client-avatar.c1{background:var(--teal);}
.client-avatar.c2{background:var(--amber);}
.client-avatar.c3{background:var(--green);}
.client-avatar.c4{background:#B79CF0;}
.client-avatar.c5{background:var(--gray);color:#fff;}

/* Витрина — заглавный блок и строка поиска */
.client-hero{padding:22px 4px 18px;text-align:center;}
.client-hero-title{
  font-family:'Manrope',sans-serif;font-size:24px;font-weight:800;letter-spacing:-.01em;
  margin:0 0 8px;line-height:1.25;
}
.client-hero-sub{color:var(--ink-muted);font-size:13.5px;margin:0;}
.client-searchbar{padding:14px;}
.client-searchbar-row{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;}
.client-searchbar-row .field{flex:1;min-width:160px;margin-bottom:0;}
.client-searchbar-row .btn{flex-shrink:0;}
.client-search-hint{color:var(--ink-muted);font-size:13px;text-align:center;padding:18px 0;}

/* Строка категорий на "Главной" (16.09.2026) — горизонтальный скролл на узких экранах.
   Реально работает пока только "Ремонт окон" (единственное, что есть в прайс-листах);
   остальные — как в макете, но честно помечены "скоро" и неактивны (disabled). */
.client-cat-row{display:flex;gap:8px;overflow-x:auto;padding:4px 2px 14px;-webkit-overflow-scrolling:touch;}
/* На широких экранах категорий (17.09.2026: полноценный список из ~12 штук, не 4 заглушки)
   многовато для одной строки с горизонтальным скроллом — на десктопе переносим в несколько
   строк, скролл оставляем только там, где для него есть основание — на телефоне. */
@media (min-width: 801px){
  .client-cat-row{flex-wrap:wrap;overflow-x:visible;}
}
.client-cat-chip{
  flex-shrink:0;display:flex;align-items:center;gap:6px;background:var(--surface-3);
  border:1px solid var(--border-soft);color:var(--ink-soft);font-size:13px;font-weight:600;
  padding:8px 14px;border-radius:999px;cursor:pointer;white-space:nowrap;
  transition:background .15s var(--ease),border-color .15s var(--ease),color .15s var(--ease);
}
.client-cat-chip.active{background:var(--accent);border-color:var(--accent);color:#fff;}
.client-cat-chip[disabled]{cursor:default;opacity:.6;}
.client-cat-chip[disabled]:hover{background:var(--surface-3);}
.client-soon-tag{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-muted);}

/* Сетка карточек компаний */
.client-results-heading{
  font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);
  font-weight:700;margin:18px 2px 10px;
}
.client-results-heading-row{display:flex;align-items:center;justify-content:space-between;margin:18px 2px 10px;}
.client-results-heading-row .client-results-heading{margin:0;}
.client-results-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;}
.client-co-card{
  position:relative;background:var(--card-grad);border:1px solid var(--border);border-radius:var(--radius);
  padding:16px;box-shadow:var(--shadow-sm);transition:transform .15s var(--ease),box-shadow .15s var(--ease),border-color .15s var(--ease);
  display:flex;flex-direction:column;gap:10px;
}
.client-co-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--border-soft);}
.client-co-card-top{display:flex;align-items:center;gap:10px;}
.client-co-card-headline{min-width:0;}
.client-co-name{font-weight:700;font-size:14.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.client-co-zone{color:var(--ink-muted);font-size:12px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.client-co-price{color:var(--accent);font-weight:700;font-size:14px;}
.client-co-card .btn{margin-top:auto;}

/* Кнопка "сердечко" — избранное (16.09.2026). На карточке компании — плашкой в углу;
   на странице профиля (.lg) — рядом с именем, в потоке. Активное состояние — красным,
   без анимаций-сюрпризов: просто закрашенное сердце. */
.client-fav-btn{
  position:absolute;top:12px;right:12px;width:32px;height:32px;border-radius:50%;
  background:var(--surface);border:1px solid var(--border-soft);color:var(--ink-muted);
  font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;
  transition:color .15s var(--ease),border-color .15s var(--ease),transform .1s var(--ease);
}
.client-fav-btn:hover{transform:scale(1.08);}
.client-fav-btn.active{color:var(--red);border-color:rgba(255,92,105,.35);}
.client-fav-btn.lg{position:static;width:38px;height:38px;font-size:19px;margin-left:auto;flex-shrink:0;}

/* Честная заглушка (раздел "Сообщения" и подобные) — иконка + заголовок + пояснение вместо
   выдуманного контента. */
.client-empty-state{text-align:center;padding:36px 16px;}
.client-empty-state-icon{font-size:38px;margin-bottom:12px;}

/* Профиль компании */
.client-profile-card{padding:20px;}
.client-profile-header{display:flex;align-items:center;gap:14px;margin:6px 0 18px;}
.client-profile-headline{flex:1;min-width:0;}
.client-profile-name{font-family:'Manrope',sans-serif;font-size:19px;font-weight:800;margin:0 0 4px;}
.client-profile-tabs{margin-bottom:16px;}
.client-service-list{display:flex;flex-direction:column;}
.client-service-row{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:12px 0;
  border-bottom:1px solid var(--border-soft);
}
.client-service-row:last-child{border-bottom:none;}
.client-service-name{font-weight:600;font-size:13.5px;flex:1;min-width:140px;}
.client-service-price{color:var(--ink-muted);font-size:13px;}
.client-contacts-note{
  color:var(--ink-soft);font-size:13.5px;line-height:1.5;background:var(--surface-3);
  border:1px solid var(--border-soft);border-radius:var(--radius-sm);padding:12px 14px;margin-bottom:14px;
}
.client-request-service{
  display:inline-block;background:var(--accent-soft);color:var(--accent);font-weight:700;
  border-radius:999px;padding:5px 12px;font-size:12.5px;margin:-6px 0 14px;
}

@media (max-width: 560px){
  .client-searchbar-row{flex-direction:column;align-items:stretch;}
  .client-searchbar-row .btn{width:100%;}
  .client-hero-title{font-size:20px;}
}

.content{flex:1;padding:16px;min-width:0;}
@media(min-width:800px){.content{padding:32px 36px;}}
.view{display:none;}
.view.active{display:block;animation:fadeIn .2s var(--ease);}
@keyframes fadeIn{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:none;}}

/* Панель инструментов страницы (заголовок + кнопки Список/Канбан/Новый заказ + поиск +
   фильтр) — закреплена при скролле на мобильном, чтобы не уезжала вверх, пока листаешь
   длинный канбан/список (03.09.2026, по просьбе Павла). --sticky-top2 (topbar + строка
   вкладок) считается в app.js, syncStickyTopVar(). На десктопе (>=800px) не нужна —
   там страница короче экрана почти всегда, и вертикальный скролл — редкость. */
@media(max-width:799px){
  .toolbar-sticky{
    position:sticky;top:var(--sticky-top2,94px);z-index:20;
    background:var(--bg);margin:0 -16px;padding:16px 16px 12px;
    border-bottom:1px solid var(--border-soft);
  }
}

h2.section-title{font-family:'Manrope',sans-serif;font-size:20px;font-weight:800;margin:0 0 18px;letter-spacing:-.01em;color:var(--ink);}

/* ============================================================
   Buttons
   ============================================================ */
.btn{
  background:linear-gradient(135deg,var(--accent),var(--accent-deep));color:#fff;border:none;border-radius:8px;padding:10px 18px;
  font-size:13.5px;font-weight:600;font-family:'Inter',sans-serif;cursor:pointer;
  transition:box-shadow .18s var(--ease),transform .1s var(--ease),filter .15s var(--ease);
  box-shadow:0 1px 2px rgba(18,22,28,.1), 0 0 0 rgba(28,90,168,0);
}
.btn:hover{box-shadow:0 4px 14px rgba(28,90,168,.35);filter:brightness(1.06);}
.btn:active{transform:translateY(1px);}
.btn.amber{background:linear-gradient(135deg,var(--amber),#B36F1E);}
.btn.amber:hover{box-shadow:0 4px 14px rgba(217,140,43,.4);}
.btn.ghost{background:transparent;border:1px solid var(--border);color:var(--ink-soft);box-shadow:none;}
.btn.ghost:hover{background:var(--surface);border-color:var(--accent);color:var(--accent);box-shadow:0 2px 8px rgba(18,22,28,.08);}
.btn.danger{background:linear-gradient(135deg,var(--red),#8E271A);}
.btn.danger:hover{box-shadow:0 4px 14px rgba(192,57,43,.35);}
.btn.sm{padding:6px 12px;font-size:12px;border-radius:6px;}
.btn:disabled{opacity:.55;cursor:default;transform:none;filter:none;box-shadow:none;}

/* ============================================================
   Cards / stats
   ============================================================ */
.card{
  background:var(--card-grad);border:1px solid var(--border);border-radius:var(--radius);
  padding:18px;margin-bottom:14px;box-shadow:var(--shadow-sm);
  transition:box-shadow .2s var(--ease);
}
.grid-stats{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
@media(min-width:700px){.grid-stats{grid-template-columns:repeat(3,1fr);}}
@media(min-width:1100px){.grid-stats.cols-4{grid-template-columns:repeat(4,1fr);}}
.grid-stats .card{margin-bottom:0;}
.stat-card{
  transition:transform .18s var(--ease),box-shadow .18s var(--ease);
  border-top:3px solid var(--sc-color,var(--accent));position:relative;overflow:hidden;
}
.stat-card::after{
  content:'';position:absolute;top:-30px;right:-30px;width:90px;height:90px;border-radius:50%;
  background:radial-gradient(circle, var(--sc-color,var(--accent)), transparent 70%);opacity:.08;
  transition:opacity .2s var(--ease);pointer-events:none;
}
.stat-card:hover{transform:translateY(-3px);box-shadow:0 10px 26px -8px var(--sc-color,var(--accent)),var(--shadow-sm);}
.stat-card:hover::after{opacity:.14;}
.stat-label{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);font-weight:600;position:relative;z-index:1;}
.stat-label svg{opacity:.8;}
.stat-val{font-family:'JetBrains Mono',monospace;font-size:25px;font-weight:700;margin-top:6px;letter-spacing:-.015em;position:relative;z-index:1;}
.stat-delta{font-size:11px;font-weight:600;margin-top:4px;position:relative;z-index:1;}

.badge{
  display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:3px 10px 3px 8px;
  font-size:11px;font-weight:700;font-family:'JetBrains Mono',monospace;letter-spacing:.01em;
}
.badge::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0;}

/* ============================================================
   Dashboard layout — chart rows
   ============================================================ */
.dash-charts-row{display:grid;grid-template-columns:1fr;gap:14px;margin-bottom:14px;}
@media(min-width:900px){.dash-charts-row{grid-template-columns:2fr 1fr;}}
.dash-row-3{display:grid;grid-template-columns:1fr;gap:14px;margin-bottom:14px;}
@media(min-width:900px){.dash-row-3{grid-template-columns:1fr 1fr 1fr;}}
.dash-row-2{display:grid;grid-template-columns:1fr;gap:14px;margin-bottom:14px;}
@media(min-width:900px){.dash-row-2{grid-template-columns:1fr 1fr;}}
.dash-charts-row .card, .dash-row-3 .card, .dash-row-2 .card{margin-bottom:0;}

.chart-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:6px;}
.chart-highlight{font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;color:var(--accent);
  background:var(--accent-soft);border-radius:999px;padding:3px 10px;white-space:nowrap;}

.donut-wrap{display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.donut-center{position:relative;flex-shrink:0;}
.donut-center-label{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;}
.donut-center-val{font-family:'JetBrains Mono',monospace;font-size:22px;font-weight:800;color:var(--ink);line-height:1;}
.donut-center-sub{font-size:9.5px;color:var(--ink-muted);text-transform:uppercase;letter-spacing:.05em;margin-top:2px;}
.donut-legend{flex:1;min-width:130px;display:flex;flex-direction:column;gap:6px;}
.donut-legend-item{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--ink-soft);}
.donut-legend-swatch{width:9px;height:9px;border-radius:3px;flex-shrink:0;}
.donut-legend-item b{margin-left:auto;font-family:'JetBrains Mono',monospace;color:var(--ink);}

.bar-list-row{margin-bottom:10px;}
.bar-list-row:last-child{margin-bottom:0;}
.bar-list-track{background:var(--bg);border-radius:5px;height:7px;overflow:hidden;margin-top:5px;}
.bar-list-fill{height:100%;border-radius:5px;background:var(--accent);}

.quick-actions{display:flex;flex-direction:column;gap:6px;}
.quick-action-btn{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:var(--bg);
  border:1px solid var(--border-soft);border-radius:9px;padding:10px 12px;font-size:13px;font-weight:600;
  color:var(--ink-soft);cursor:pointer;transition:border-color .15s var(--ease),color .15s var(--ease),background .15s var(--ease);
  font-family:'Inter',sans-serif;}
.quick-action-btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft);}
.quick-action-btn svg{flex-shrink:0;}

.upcoming-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 0;
  border-bottom:1px solid var(--border-soft);cursor:pointer;}
.upcoming-item:last-child{border-bottom:none;}
.upcoming-item:hover .upcoming-title{color:var(--accent);}
.upcoming-title{font-size:13px;font-weight:600;color:var(--ink);transition:color .15s var(--ease);}
.upcoming-meta{font-size:11.5px;color:var(--ink-muted);margin-top:1px;}
.upcoming-time{font-size:11.5px;color:var(--ink-muted);font-family:'JetBrains Mono',monospace;white-space:nowrap;}

table.dash-table{font-size:12.5px;white-space:nowrap;}
table.dash-table td{vertical-align:middle;}

/* ============================================================
   Forms
   ============================================================ */
.field{margin-bottom:14px;}
.field label{display:block;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-muted);margin-bottom:5px;font-weight:600;}
.field input, .field select, .field textarea{
  width:100%;padding:9px 11px;border:1px solid var(--border);border-radius:8px;font-size:13.5px;
  background:var(--surface-3);color:var(--ink);transition:border-color .15s var(--ease),box-shadow .15s var(--ease);
}
.field input:focus, .field select:focus, .field textarea:focus{
  border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none;
}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
@media(min-width:700px){.field-row.cols-4{grid-template-columns:repeat(4,1fr);}}
/* На совсем узком экране (маленький телефон) 2 колонки в ряд полей становятся тесными для
   пальца — например "Телефон/Адрес/Квартира" в форме "Новый заказ" (жалоба Павла 22.09.2026).
   Не влияет на .cols-4 — та и так уже 2 колонки по умолчанию (4 только с 700px). */
@media(max-width:420px){.field-row:not(.cols-4){grid-template-columns:1fr;}}
.field-hint{font-size:12px;color:var(--ink-muted);margin:-6px 0 12px;}

/* Переключатель да/нет (22.09.2026, по просьбе Павла — "Финансы: добавить переключатель
   VAT: да/нет") — компактная сегментированная кнопка вместо обычного чекбокса, т.к. просьба
   именно про ПЕРЕКЛЮЧАТЕЛЬ, у которого сразу видно оба состояния. Разметка — обычная group
   из двух <button type="button">, JS-обработчик просто переключает класс .active и держит
   булево значение в data-атрибуте родителя; ничего похожего в style.css раньше не было
   (везде до этого — обычные чекбоксы/select), поэтому компонент новый, но использует те же
   цветовые токены (--accent/--border/--surface-3), что и остальные поля форм. */
.toggle-switch{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--surface-3);}
.toggle-switch button{
  border:none;background:transparent;color:var(--ink-muted);font-size:13px;font-weight:600;
  padding:8px 18px;cursor:pointer;transition:background-color .15s var(--ease),color .15s var(--ease);
}
.toggle-switch button.active{background:var(--accent);color:#fff;}
.toggle-switch button:not(.active):hover{color:var(--ink);}

input, select, textarea{border-radius:8px;}

/* ============================================================
   Order / list cards
   ============================================================ */
.order-card{
  background:var(--card-grad);border:1px solid var(--border);border-radius:var(--radius);
  padding:15px;margin-bottom:10px;cursor:pointer;box-shadow:var(--shadow-sm);
  transition:border-color .15s var(--ease),box-shadow .18s var(--ease),transform .1s var(--ease);
  border-left-width:4px;
}
.order-card:hover{border-color:var(--oc-color,var(--accent));box-shadow:0 8px 22px -8px var(--oc-color,var(--accent)),var(--shadow-sm);transform:translateY(-2px);}
.search-hit{border:2px solid var(--red) !important;box-shadow:0 0 0 3px rgba(255,92,105,.22) !important;}
.order-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;}
.order-client{font-weight:700;font-size:14.5px;font-family:'Manrope',sans-serif;letter-spacing:-.005em;}
.order-meta{color:var(--ink-muted);font-size:12px;margin-top:3px;}

/* ============================================================
   Modal
   ============================================================ */
.modal-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.72);backdrop-filter:blur(8px);
  display:flex;align-items:flex-start;justify-content:center;padding:20px;
  overflow-y:auto;z-index:50;animation:fadeIn .15s var(--ease);
}
.modal{
  background:var(--card-grad);border:1px solid var(--border);border-radius:14px;max-width:560px;width:100%;padding:22px;
  margin-top:24px;box-shadow:var(--shadow-lg);color:var(--ink);
}
.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;}
.modal-head h3{font-family:'Manrope',sans-serif;font-weight:800;letter-spacing:-.01em;}
.modal-close{
  background:none;border:none;font-size:18px;cursor:pointer;color:var(--ink-muted);
  width:30px;height:30px;border-radius:8px;transition:background .15s var(--ease),color .15s var(--ease);
}
.modal-close:hover{background:var(--bg);color:var(--ink);}

/* ============================================================
   Order side panel (tabbed)
   ============================================================ */
.side-panel-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.72);backdrop-filter:blur(8px);
  display:flex;align-items:center;justify-content:center;z-index:50;animation:fadeIn .15s var(--ease);
  padding:20px;
}
.side-panel{
  background:var(--card-grad);border:1px solid var(--border);border-radius:14px;max-width:780px;width:100%;
  max-height:88vh;box-shadow:var(--shadow-lg);color:var(--ink);display:flex;flex-direction:column;
  animation:popIn .15s var(--ease);
}
@keyframes popIn{from{transform:scale(.97);opacity:0;}to{transform:scale(1);opacity:1;}}
@media(max-width:640px){.side-panel{max-width:100%;max-height:100%;height:100%;border-radius:0;}}
.side-panel-head{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:20px 22px 14px;border-bottom:1px solid var(--border-soft);flex-shrink:0;}
@media(min-width:641px) and (pointer:fine){.side-panel-head{cursor:move;}}
.side-panel-head h3{font-family:'Manrope',sans-serif;font-weight:800;letter-spacing:-.01em;}
.side-panel-sub{color:var(--ink-muted);font-size:12px;margin-top:2px;}
.side-panel-tabs{display:flex;padding:0 22px;border-bottom:1px solid var(--border-soft);flex-shrink:0;overflow-x:auto;}
.side-panel-tab{
  background:none;border:none;padding:11px 4px;margin-right:20px;font-size:13px;font-weight:600;color:var(--ink-muted);
  cursor:pointer;border-bottom:2px solid transparent;transition:color .15s var(--ease),border-color .15s var(--ease);white-space:nowrap;
}
.side-panel-tab:hover{color:var(--ink);}
.side-panel-tab.active{color:var(--accent);border-bottom-color:var(--accent);}
.side-panel-tab-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--amber);margin-left:5px;vertical-align:2px;}
.side-panel-body{flex:1;overflow-y:auto;padding:20px 22px;}
.tab-pane{display:none;}
.tab-pane.active{display:block;}

/* Вкладки внутри обычной страницы (не всплывающей карточки заказа) — тот же визуальный
   стиль, что у .side-panel-tab/.tab-pane, но под своими именами классов, чтобы клик по
   вкладке заказа в открытой карточке не задевал вкладки страницы Настроек и наоборот
   (06.09.2026, по просьбе Павла — разбить Настройки на вкладки: Реквизиты/Почта/Подпись
   и т.д.) */
.page-tabs{display:flex;border-bottom:1px solid var(--border-soft);margin-bottom:18px;overflow-x:auto;}
.page-tab{
  background:none;border:none;padding:11px 4px;margin-right:20px;font-size:13px;font-weight:600;color:var(--ink-muted);
  cursor:pointer;border-bottom:2px solid transparent;transition:color .15s var(--ease),border-color .15s var(--ease);white-space:nowrap;
}
.page-tab:hover{color:var(--ink);}
.page-tab.active{color:var(--accent);border-bottom-color:var(--accent);}
.page-tab-pane{display:none;}
.page-tab-pane.active{display:block;}
.side-panel-foot{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 22px;border-top:1px solid var(--border-soft);flex-shrink:0;flex-wrap:wrap;}
.side-panel-foot-meta{color:var(--ink-muted);font-size:11.5px;line-height:1.6;}
.side-panel-foot-actions{display:flex;gap:8px;flex-shrink:0;}
.info-section-title{display:flex;align-items:center;gap:8px;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--green);font-weight:700;margin:20px 0 10px;}
.info-section-title:first-child{margin-top:0;}
.info-grid{display:grid;grid-template-columns:1fr;gap:14px;margin-bottom:14px;}
@media(min-width:680px){.info-grid.cols-2{grid-template-columns:1fr 1fr;}}
.info-block{border:1px solid rgba(54,211,153,.3);border-radius:var(--radius-sm);padding:14px 16px;min-width:0;}
.side-panel .card{border-color:rgba(54,211,153,.3);}
.side-panel .stat-label{color:var(--green);}

/* ============================================================
   Tables
   ============================================================ */
table{width:100%;border-collapse:collapse;font-size:13px;}
table th{text-align:left;color:var(--ink-muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;padding:9px 8px;border-bottom:1px solid var(--border);font-weight:600;}
table td{padding:9px 8px;border-bottom:1px solid var(--border-soft);}

.part-row{display:flex;align-items:center;gap:8px;padding:9px 0;border-bottom:1px solid var(--border-soft);font-size:13px;}
.part-row:last-child{border-bottom:none;}

.timer-box{display:flex;align-items:center;justify-content:space-between;background:var(--bg);border-radius:9px;padding:11px 13px;margin-bottom:8px;border:1px solid var(--border-soft);}

.empty-note{color:var(--ink-muted);font-size:12px;background:var(--bg);border-radius:9px;padding:10px 13px;margin:8px 0;}

.search-box{display:flex;gap:8px;margin-bottom:14px;}
.search-box input{flex:1;padding:9px 11px;border:1px solid var(--border);border-radius:8px;}

.period-tabs{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap;}
.period-tabs button{
  background:var(--surface);border:1px solid var(--border);border-radius:7px;padding:7px 13px;
  font-size:12px;font-weight:600;cursor:pointer;color:var(--ink-soft);transition:all .15s var(--ease);
}
.period-tabs button:hover{border-color:var(--accent);}
.period-tabs button.active{background:var(--accent);color:#fff;border-color:var(--accent);}

.pac-container{
  z-index:10000 !important;border-radius:8px !important;
  /* Google по умолчанию ужимает подсказку под ширину поля ввода и запрещает перенос
     строки — на мобильном поле узкое, и длинный адрес визуально обрезается справа,
     из-за чего легко промахнуться и выбрать не тот город. Разрешаем подсказке быть
     шире поля и переносить текст на несколько строк, чтобы адрес был виден целиком. */
  width:auto !important;min-width:280px;max-width:min(94vw,420px) !important;
}
.pac-item{white-space:normal !important;word-break:break-word;padding:8px 10px;line-height:1.35;}
.pac-item-query{white-space:normal !important;}
@media (max-width:480px){
  .pac-container{font-size:14px;}
  .pac-item{padding:10px 10px;}
  /* Главная причина жалобы "поле Адрес с автодополнением выходит за ширину экрана"
     (22.09.2026, форма "Новый заказ"): Google позиционирует подсказку от ЛЕВОГО края
     самого поля ввода и раньше мы ограничивали только её ШИРИНУ (max-width) — но если
     поле стоит не у самого края экрана (а оно так и стоит, например во 2-й колонке
     "Телефон/Адрес/Квартира"), правый край подсказки всё равно вылезал за экран, и вся
     страница уезжала вбок. На узком экране проще и надёжнее привязать подсказку сразу
     к обоим краям ЭКРАНА (left/right), а не к позиции поля — тогда она физически не
     может вылезти вбок независимо от того, где стоит само поле. */
  .pac-container{left:16px !important;right:16px !important;width:auto !important;max-width:none !important;min-width:0 !important;}
}

/* ============================================================
   Photos
   ============================================================ */
.photo-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;}
.photo-thumb{position:relative;aspect-ratio:1;border-radius:9px;overflow:hidden;background:var(--border-soft);}
.photo-thumb img{width:100%;height:100%;object-fit:cover;display:block;cursor:pointer;transition:transform .2s var(--ease);}
.photo-thumb img:hover{transform:scale(1.04);}
.photo-del{position:absolute;top:5px;right:5px;background:rgba(13,16,21,.65);color:#fff;border:none;border-radius:50%;width:22px;height:22px;font-size:12px;cursor:pointer;}
.photo-thumb-plain{cursor:pointer;border-radius:6px;}
/* Фото, ещё не отправленное на сервер (Фаза 2 офлайн-режима, 04.09.2026) — то же
   превью (blob-URL из ещё не улетевшего файла), но приглушено и с бейджем ⏳, чтобы не
   спутать с уже сохранённым на сервере фото. Кнопка ✕ тут не удаляет фото на сервере
   (там его ещё нет) — она снимает запись с локальной отправки, см. wirePendingPhotoDiscard(). */
.photo-thumb-pending img{opacity:.55;}
.photo-pending-badge{position:absolute;top:5px;left:5px;font-size:13px;background:rgba(13,16,21,.65);border-radius:50%;width:22px;height:22px;display:flex;align-items:center;justify-content:center;}

.lightbox{position:fixed;inset:0;background:rgba(9,11,14,.94);display:flex;align-items:center;justify-content:center;z-index:200;padding:20px;}
.lightbox img{max-width:100%;max-height:100%;object-fit:contain;border-radius:8px;}
.lightbox-close{position:fixed;top:16px;right:16px;background:rgba(255,255,255,.12);color:#fff;width:38px;height:38px;border-radius:50%;font-size:16px;border:none;cursor:pointer;}
.lightbox-nav{position:fixed;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.12);color:#fff;width:46px;height:46px;border-radius:50%;font-size:24px;border:none;cursor:pointer;transition:background .15s var(--ease);}
.lightbox-nav:hover{background:rgba(255,255,255,.22);}
.lightbox-prev{left:16px;}
.lightbox-next{right:16px;}
.lightbox-counter{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:rgba(255,255,255,.12);color:#fff;padding:5px 13px;border-radius:12px;font-size:12px;font-family:'JetBrains Mono',monospace;}

/* ============================================================
   Kanban
   ============================================================ */
.kanban{display:flex;align-items:flex-start;gap:14px;overflow-x:auto;padding-bottom:10px;scroll-snap-type:x mandatory;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scroll-padding-inline:14px;}
.kanban-col{background:var(--surface-3);border:1px solid var(--border);border-radius:12px;padding:11px;min-width:270px;flex-shrink:0;border-top:3px solid var(--kc-color,var(--accent));scroll-snap-align:center;scroll-snap-stop:always;}
@media(min-width:900px){.kanban-col{flex:1;min-width:0;}}
/* Раздел 39-41 решали растяжение по СОСЕДНИМ колонкам и по всей странице, но не саму
   причину: высота строки flex-контейнера .kanban всегда равна высоте САМОЙ ВЫСОКОЙ
   колонки (это база flexbox, align-items тут не при чём — он лишь выравнивает КОРОТКИЕ
   колонки внутри уже готовой высоты строки). Если где-то сбоку, за пределами экрана, есть
   колонка с 15-20 карточками (например статус "Закрыт" с историей) — короткая видимая
   колонка получала пустой хвост НЕ из-за растяжения самой себя, а потому что вся строка
   кanban физически такой высоты. Подтверждено проверкой на реальном style.css сайта — CSS
   был доставлен верно, дело было именно в этом (03.09.2026). Правильное решение — как в
   мобильных Trello/канбан-приложениях: у каждой колонки на мобильном СВОЙ потолок высоты
   и свой внутренний скролл, независимо от соседей. */
/* 03.09.2026, второй заход: max-height (переменная высота "до потолка") оказался
   недостаточен сам по себе — как только рядом появилась ЗАКРЕПЛЁННАЯ панель инструментов
   (.toolbar-sticky, следующий раздел заметок в этом файле), высота строки .kanban всё
   равно тянется под самую высокую колонку, и при скролле страницы короткая колонка
   (1-2 карточки) целиком укатывается ПОД панель, а под ней остаётся пустота — потому что
   у соседних колонок высота "до потолка" не совпадает с реально видимой областью экрана.
   Правильно — не "максимум", а ТОЧНАЯ высота: каждая колонка занимает РОВНО то место,
   что осталось на экране ниже закреплённой панели (--content-top, считает
   syncToolbarHeightVar() в app.js), ни больше, ни меньше. Короткая колонка показывает
   пустое место внутри своей же рамки (видно, что это колонка, а не "ничего") — большая
   скроллится сама в себе. Общая высота строки канбана теперь всегда = высота экрана минус
   уже закреплённое сверху — прокрутка самой СТРАНИЦЫ для канбана на мобильном, по сути,
   больше не нужна вообще. */
@media(max-width:799px){
  .kanban-col{height:calc(100vh - var(--content-top,240px) - 24px);height:calc(100dvh - var(--content-top,240px) - 24px);overflow-y:auto;}
}
.kanban-col-head{display:flex;justify-content:space-between;align-items:center;padding:4px 6px 11px;font-family:'Manrope',sans-serif;font-weight:700;font-size:13px;color:var(--ink-soft);}
.kanban-count{background:var(--surface-2);color:var(--ink-soft);border:1px solid var(--border);border-radius:10px;padding:1px 9px;font-size:12px;font-family:'JetBrains Mono',monospace;font-weight:600;}
.part-card{background:var(--card-grad);border-radius:9px;padding:11px;margin-bottom:8px;border:1px solid var(--border);border-left:2px solid var(--kc-color,var(--accent));box-shadow:var(--shadow-sm);transition:box-shadow .18s var(--ease),transform .12s var(--ease);}
.part-card:hover{box-shadow:0 8px 20px -10px var(--kc-color,rgba(18,22,28,.3)),var(--shadow-sm);transform:translateY(-1px);}
.part-card[draggable="true"]{cursor:grab;}
.part-card.dragging{opacity:.4;cursor:grabbing;}
.kanban-col.drag-over{background:var(--surface-2);outline:2px dashed var(--kc-color,var(--accent));outline-offset:-4px;}
.pc-problem{font-size:11.5px;color:var(--ink-soft);margin:4px 0;padding:6px 8px;background:var(--surface-2);border-radius:6px;line-height:1.4;}
.part-card .pc-order{font-size:11px;color:var(--accent);font-weight:700;cursor:pointer;}
.part-card .btn.sm{border-radius:999px;padding:5px 12px;}
.part-card .pc-name{font-weight:700;font-size:13px;margin:4px 0 2px;font-family:'Manrope',sans-serif;}
.part-card .pc-meta{font-size:11px;color:var(--ink-muted);}
.pc-cost-row{display:flex;align-items:center;gap:6px;margin:4px 0;}
.pc-cost-input, .pc-qty-input{border:1px solid var(--border);border-radius:6px;padding:4px 6px;font-family:'JetBrains Mono',monospace;font-size:12px;}
.pc-cost-input{flex:1;}
.part-photo{width:100%;height:110px;object-fit:cover;border-radius:7px;margin:8px 0;display:block;background:var(--border-soft);}
.part-photo-upload{display:flex;align-items:center;gap:6px;margin-top:8px;}
.part-photo-upload input[type=file]{font-size:11px;max-width:140px;}
.pc-actions{display:flex;gap:6px;margin-top:8px;}

/* ============================================================
   Week grid calendar
   ============================================================ */
.wgrid{display:flex;width:100%;}
.wgrid-time-col{width:30px;flex-shrink:0;position:sticky;left:0;z-index:6;background:var(--card-grad);}
.wgrid-day-col{flex:1;min-width:0;border-left:1px solid var(--border-soft);}
.wgrid-day-head{height:34px;display:flex;align-items:center;justify-content:center;flex-direction:column;font-size:10px;font-weight:700;text-align:center;color:var(--ink-soft);border-bottom:1px solid var(--border);font-family:'Manrope',sans-serif;line-height:1.2;}
.wgrid-hour-label{font-size:8.5px;color:var(--ink-muted);text-align:right;padding-right:3px;box-sizing:border-box;font-family:'JetBrains Mono',monospace;overflow:hidden;white-space:nowrap;}
.wgrid-day-body{position:relative;cursor:pointer;}
.wgrid-hline{position:absolute;left:0;right:0;border-top:1px solid var(--border-soft);}
.wgrid-block{position:absolute;left:1px;right:1px;background:var(--accent);color:#fff;font-size:8.5px;padding:1px 3px;border-radius:4px;overflow:hidden;cursor:default;line-height:1.2;z-index:2;box-shadow:var(--shadow-sm);}
.wgrid-block-clickable{cursor:pointer;background:var(--amber);}
.wgrid-block-clickable:hover{filter:brightness(1.08);}
.wgrid-cell{position:absolute;left:0;right:0;z-index:1;}
.wgrid-cell:hover{background:var(--accent-soft);}
.wgrid-cell:active{background:rgba(22,119,255,.22);}

/* ============================================================
   Новый общий футер сайта + страницы "Цены"/"Поддержка" (pricing.php/support.php),
   20.09.2026. Взято по мотивам референса, который прислал Павел (ему понравился
   дизайн подвала/фона/описания) — адаптировано под наши токены :root и классы
   .pub-* и .features-*, без отдельной параллельной CSS-системы.
   ============================================================ */

/* --- Настоящий нижний футер с навигацией (раньше внизу была только строка иконок
   .pub-footer-strip — она осталась как есть, это просто добавляет по-настоящему
   "подвальную" навигацию под ней, как в референсе). --- */
.pub-footer-nav{padding:42px 28px 36px;border-top:1px solid var(--border-soft);display:grid;grid-template-columns:1.3fr .8fr 1.2fr 1fr;gap:32px;background:var(--surface);font-size:12.5px;}
@media(min-width:1180px){.pub-footer-nav{padding:44px 72px 40px;}}
.pub-footer-nav-brand{display:flex;align-items:center;gap:10px;color:var(--ink);align-self:start;}
.pub-footer-nav-brand img{width:34px;height:30px;object-fit:contain;flex-shrink:0;}
.pub-footer-nav-brand span{font-size:16px;font-weight:700;letter-spacing:-.3px;line-height:1.2;font-family:'Manrope',sans-serif;}
.pub-footer-nav-brand b{color:var(--accent);font-weight:600;}
.pub-footer-nav-brand small{display:block;color:var(--ink-muted);font-size:8px;letter-spacing:.14em;margin-top:5px;font-weight:400;}
.pub-footer-nav nav{display:flex;flex-direction:column;gap:8px;}
.pub-footer-nav nav strong{color:var(--ink);font-weight:700;margin-bottom:3px;font-size:12.5px;}
.pub-footer-nav nav a{color:var(--ink-muted);text-decoration:none;}
.pub-footer-nav nav a:hover{color:var(--accent);}
.pub-footer-nav>p{margin:0;color:var(--ink-muted);line-height:1.6;}
.pub-footer-nav>p span{display:block;margin-top:12px;font-size:11px;}
@media(max-width:800px){.pub-footer-nav{grid-template-columns:1fr 1fr;padding:32px 24px 28px;}.pub-footer-nav-brand,.pub-footer-nav>p{grid-column:1/-1;}}

/* --- Одноколоночный вариант hero (фото + бейдж/H1/лид без правой колонки) — для
   вводных блоков "Цены"/"Поддержка", переиспользует .features-hero/.features-hero-bg. --- */
.features-hero-solo .features-hero-inner{grid-template-columns:1fr;max-width:800px;}

/* --- Полоса CTA с фото на всю ширину (используется внизу pricing.php/support.php) --- */
.pub-band-cta{position:relative;overflow:hidden;margin:8px auto 64px;max-width:1320px;border:1px solid var(--border);border-radius:16px;padding:46px 40px;}
@media(min-width:1180px){.pub-band-cta{padding:54px 56px;}}
.pub-band-cta-bg{position:absolute;inset:0;z-index:0;background-image:linear-gradient(100deg, var(--bg) 0%, var(--bg) 22%, rgba(7,9,12,.86) 44%, rgba(7,9,12,.55) 66%, rgba(7,9,12,.28) 100%),url('uploads/hero-windows.jpg');background-position:center, 60% 25%;background-size:cover, cover;background-repeat:no-repeat;}
.pub-band-cta-inner{position:relative;z-index:1;max-width:480px;}
.pub-band-cta h2{font-family:'Manrope',sans-serif;font-weight:800;font-size:clamp(23px,2.8vw,30px);margin:0 0 10px;color:var(--ink);}
.pub-band-cta p{font-size:14px;color:var(--ink-soft);margin:0 0 22px;line-height:1.6;}

/* --- Вводная секция без фото, по центру (заголовок + лид) — используется как общий
   верх для второстепенных публичных страниц при необходимости. --- */
.pub-intro-plain{max-width:760px;margin:0 auto;padding:54px 28px 8px;text-align:left;}
.pub-intro-plain h1{font-family:'Manrope',sans-serif;font-weight:800;font-size:clamp(28px,3.4vw,42px);line-height:1.15;margin:14px 0 14px;color:var(--ink);}
.pub-intro-plain p{font-size:15px;color:var(--ink-soft);line-height:1.6;margin:0;max-width:600px;}

/* --- Карточки тарифов --- */
.pub-pricing-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;max-width:1320px;margin:32px auto 0;}
@media(max-width:900px){.pub-pricing-grid{grid-template-columns:1fr;}}
.pub-plan{position:relative;background:var(--card-grad);border:1px solid var(--border);border-radius:14px;padding:28px 24px;display:flex;flex-direction:column;}
.pub-plan.is-popular{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset,0 14px 40px rgba(22,119,255,.14);}
.pub-plan-badge{display:inline-block;align-self:flex-start;font-size:10.5px;font-weight:700;color:var(--accent);border:1px solid rgba(22,119,255,.35);background:rgba(22,119,255,.1);border-radius:20px;padding:4px 11px;margin-bottom:14px;}
.pub-plan h3{font-size:21px;font-weight:800;color:var(--ink);margin:0 0 8px;font-family:'Manrope',sans-serif;}
.pub-plan>p{font-size:13px;color:var(--ink-muted);margin:0 0 16px;}
.pub-price{font-size:clamp(22px,2.4vw,30px);font-weight:800;color:var(--ink);margin:2px 0 18px;letter-spacing:-.02em;}
.pub-price small{font-size:12px;color:var(--ink-muted);font-weight:500;letter-spacing:0;}
.pub-plan .btn,.pub-plan .features-btn-ghost{width:100%;}
.pub-plan-scope{font-size:11px;color:var(--ink-muted);margin:14px 0 0;}
.pub-plan ul{list-style:none;padding:0;margin:18px 0 0;display:flex;flex-direction:column;gap:10px;}
.pub-plan li{font-size:13px;color:var(--ink-soft);display:flex;align-items:baseline;gap:9px;}
.pub-plan li::before{content:'✓';font-size:9px;line-height:16px;min-width:16px;height:16px;border-radius:50%;text-align:center;color:#fff;background:var(--accent);flex-shrink:0;}

/* --- Таблица сравнения тарифов --- */
.pub-comparison{max-width:1320px;margin:0 auto;border:1px solid var(--border);border-radius:12px;overflow-x:auto;}
.pub-comparison table{width:100%;border-collapse:collapse;font-size:13px;min-width:560px;}
.pub-comparison th,.pub-comparison td{padding:13px 18px;border-bottom:1px solid var(--border-soft);text-align:center;}
.pub-comparison th:first-child,.pub-comparison td:first-child{text-align:left;color:var(--ink);font-weight:600;}
.pub-comparison thead th{background:var(--surface-2);color:var(--ink);font-weight:700;font-size:12px;}
.pub-comparison td{color:var(--ink-muted);}
.pub-comparison tr:last-child td{border-bottom:none;}

/* --- FAQ (аккордеон) --- */
.pub-faq-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 20px;max-width:1320px;margin:0 auto;}
@media(max-width:800px){.pub-faq-grid{grid-template-columns:1fr;}}
.pub-faq-grid details{border:1px solid var(--border);background:var(--surface);border-radius:10px;padding:15px 18px;}
.pub-faq-grid summary{cursor:pointer;list-style:none;font-size:13.5px;font-weight:600;color:var(--ink);display:flex;justify-content:space-between;align-items:center;gap:16px;}
.pub-faq-grid summary::-webkit-details-marker{display:none;}
.pub-faq-grid summary::after{content:'+';color:var(--accent);font-size:16px;flex-shrink:0;}
.pub-faq-grid details[open] summary::after{content:'−';}
.pub-faq-grid details[open] summary{margin-bottom:10px;}
.pub-faq-grid p{color:var(--ink-muted);font-size:13px;margin:0;line-height:1.55;}

/* --- Карточки поддержки (3 колонки) --- */
.pub-support-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;max-width:1320px;margin:0 auto;}
@media(max-width:900px){.pub-support-grid{grid-template-columns:1fr;}}
.pub-support-grid article{padding:26px 22px;border:1px solid var(--border);border-radius:12px;background:var(--card-grad);}
.pub-support-grid h2{font-size:17px;color:var(--ink);margin:0 0 10px;font-weight:700;font-family:'Manrope',sans-serif;}
.pub-support-grid p{color:var(--ink-muted);font-size:13px;line-height:1.55;margin:0 0 14px;}
.pub-support-grid a{color:var(--accent);text-decoration:none;font-size:13px;font-weight:600;}
.pub-support-grid a:hover{text-decoration:underline;}

/* --- Правовые страницы (terms.php/privacy.php) --- */
.pub-legal-wrap{max-width:780px;margin:0 auto;padding:44px 28px 80px;}
.pub-legal-wrap h1{font-family:'Manrope',sans-serif;font-weight:800;font-size:clamp(26px,3.4vw,38px);margin:0 0 6px;color:var(--ink);}
.pub-legal-updated{color:var(--ink-muted);font-size:12.5px;margin-bottom:22px;}
.pub-legal-wrap h2{margin-top:32px;font-size:16.5px;color:var(--ink);font-family:'Manrope',sans-serif;font-weight:700;}
.pub-legal-wrap p{line-height:1.7;color:var(--ink-soft);font-size:14px;}
