/* =========================================================
   Quickly Partner 2.0 — стили кабинета.
   Токены скопированы 1:1 из 02-product/partner-design-v2.html.
   Тёмная тема по умолчанию (планшет у кассы), светлая — data-theme="light".
   ========================================================= */
:root{
  /* --- примитивы --- */
  --ink-950:#0b0f17; --ink-900:#111722; --ink-850:#161d2a; --ink-800:#1b2433; --ink-700:#243048; --ink-600:#33415c;
  --ink-400:#6b7894; --ink-300:#8a97ae; --ink-200:#b6c0d3; --ink-100:#dde3ee; --ink-50:#eef1f7; --white:#f8fafd;
  --blue-600:#1f5bd0; --blue-500:#2f7bff; --blue-400:#5b95ff; --blue-100:#dbe7ff;
  --green-500:#24c07a; --yellow-500:#ffb020; --red-500:#ff4d4f; --red-400:#ff7b7c;
  /* каналы (узнаваемость важнее гармонии) */
  --ch-quickly:#2f7bff; --ch-whatsapp:#25d366; --ch-telegram:#29a9eb; --ch-instagram:#e1306c; --ch-web:#8a97ae;
  --ch-manual:#c9d2e3; --ch-wolt:#00c2e8; --ch-glovo:#ffc244; --ch-yandex:#fc3f1d; --ch-poster:#7c5cff; --ch-agent:#a78bfa;
  /* --- семантические токены: ТЁМНАЯ (дефолт у кассы) --- */
  --bg:var(--ink-950); --surface:var(--ink-900); --surface-2:var(--ink-850); --surface-3:var(--ink-800);
  --line:var(--ink-700); --line-strong:var(--ink-600);
  --text:var(--ink-50); --text-2:var(--ink-200); --text-3:var(--ink-300); --text-4:var(--ink-400);
  --accent:var(--blue-500); --accent-hover:var(--blue-400); --accent-press:var(--blue-600); --on-accent:#ffffff; --accent-soft:rgba(47,123,255,.16);
  --new:var(--yellow-500); --new-soft:rgba(255,176,32,.14); --prep:var(--blue-500); --prep-soft:rgba(47,123,255,.14);
  --ready:var(--green-500); --ready-soft:rgba(36,192,122,.14);
  --danger:var(--red-500); --danger-soft:rgba(255,77,79,.14); --ok:var(--green-500); --warn:var(--yellow-500);
  --shadow-1:0 1px 2px rgba(0,0,0,.35); --shadow-2:0 8px 24px -8px rgba(0,0,0,.5);
  /* --- форма --- */
  --r-s:8px; --r-m:12px; --r-l:16px; --r-xl:20px; --tap:48px; --tap-l:56px; --tap-xl:64px;
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:20px; --s-6:24px; --s-8:32px; --s-10:40px;
  --f-display:"Geologica","Golos Text",system-ui,sans-serif;
  --f-body:"Golos Text",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --f-mono:"JetBrains Mono",ui-monospace,Menlo,monospace;
  --t-xs:12px; --t-s:13.5px; --t-m:15px; --t-l:17px; --t-xl:20px; --t-2xl:24px; --t-3xl:30px;
  /* Нативные контролы (чекбоксы, date/time, скроллбары) — в цвет темы. */
  color-scheme:dark;
  accent-color:var(--blue-500);
}
[data-theme="light"]{
  --bg:var(--white); --surface:#ffffff; --surface-2:var(--ink-50); --surface-3:var(--ink-100);
  --line:var(--ink-100); --line-strong:var(--ink-200);
  --text:var(--ink-950); --text-2:var(--ink-800); --text-3:var(--ink-600); --text-4:var(--ink-400);
  --accent:var(--blue-600); --accent-hover:var(--blue-500); --accent-press:#1a4db3; --accent-soft:var(--blue-100);
  --new:#b7791f; --new-soft:#fbf1dc; --prep:var(--blue-600); --prep-soft:var(--blue-100); --ready:#1d8a5a; --ready-soft:#e3f5ec;
  --danger:#c23d3d; --danger-soft:#fae4e4; --ok:#1d8a5a; --warn:#b7791f;
  --shadow-1:0 1px 2px rgba(20,26,38,.08); --shadow-2:0 8px 24px -12px rgba(20,26,38,.18);
  color-scheme:light;
  accent-color:var(--blue-600);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--text);font:var(--t-m)/1.45 var(--f-body);-webkit-font-smoothing:antialiased;overscroll-behavior:none}
h1,h2,h3,h4{font-family:var(--f-display);letter-spacing:-.01em;margin:0;text-wrap:balance}
h1{font-size:var(--t-2xl);font-weight:800}
h2{font-size:var(--t-xl);font-weight:700}
h3{font-size:var(--t-l);font-weight:700}
a{color:var(--accent);text-decoration:none}
button,input,select,textarea{font-family:inherit}
.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--text-4)}
.muted-2{color:var(--text-3)}
.hide{display:none !important}
svg.i{width:20px;height:20px;flex:none;stroke:currentColor;fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
svg.i.s{width:16px;height:16px}
svg.i.l{width:24px;height:24px}
input[type=checkbox],input[type=radio]{accent-color:var(--accent);width:22px;height:22px;flex:none}
input[type=range]{accent-color:var(--accent);height:auto;padding:0}
.field > .btn{justify-self:start;width:max-content;max-width:100%}
@media (prefers-reduced-motion:reduce){*{animation:none !important;transition:none !important;scroll-behavior:auto !important}}

/* ---------- базовые компоненты ---------- */
.btn{min-height:var(--tap);padding:0 18px;border-radius:var(--r-m);border:1px solid var(--line-strong);background:var(--surface-2);color:var(--text);font:600 var(--t-m) var(--f-body);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:8px;transition:transform .08s,background .12s}
.btn:active{transform:scale(.98)}
.btn:disabled{opacity:.45;cursor:default}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.btn.ready{background:var(--ready);border-color:var(--ready);color:#07130d}
[data-theme="light"] .btn.ready{color:#fff}
.btn.danger{background:transparent;border-color:color-mix(in srgb,var(--danger) 45%,transparent);color:var(--danger)}
.btn.big{min-height:var(--tap-l);font-size:var(--t-l);padding:0 22px}
.btn.xl{min-height:var(--tap-xl);font-size:var(--t-xl);font-family:var(--f-display);font-weight:700}
.btn.ghost{background:transparent}
.btn.sm{min-height:36px;padding:0 12px;font-size:var(--t-s);border-radius:var(--r-s)}
.btn.icon{padding:0;width:var(--tap);flex:none}
.btn.wide{width:100%}
.pill{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;border-radius:999px;font-size:var(--t-xs);font-weight:600;white-space:nowrap}
.pill.new{background:var(--new-soft);color:var(--new)}
.pill.prep{background:var(--prep-soft);color:var(--prep)}
.pill.ready{background:var(--ready-soft);color:var(--ready)}
.pill.danger{background:var(--danger-soft);color:var(--danger)}
.pill.neutral{background:var(--surface-3);color:var(--text-2)}
.ch{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 9px 0 6px;border-radius:999px;font-size:var(--t-xs);font-weight:600;background:var(--surface-3);color:var(--text-2);white-space:nowrap}
.ch i{width:10px;height:10px;border-radius:50%;background:var(--c,var(--ch-manual));flex:none}
.ch.quickly{--c:var(--ch-quickly)} .ch.whatsapp{--c:var(--ch-whatsapp)} .ch.telegram{--c:var(--ch-telegram)}
.ch.instagram{--c:var(--ch-instagram)} .ch.web_widget{--c:var(--ch-web)} .ch.manual{--c:var(--ch-manual)}
.ch.wolt{--c:var(--ch-wolt)} .ch.glovo{--c:var(--ch-glovo)} .ch.yandex{--c:var(--ch-yandex)}
.ch.poster{--c:var(--ch-poster)} .ch.agent{--c:var(--ch-agent)} .ch.aggregator_generic{--c:var(--ch-web)}
.toggle{width:56px;height:32px;border-radius:999px;background:var(--surface-3);border:1px solid var(--line-strong);position:relative;cursor:pointer;flex:none;padding:0}
.toggle::after{content:"";position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:var(--text-4);transition:.15s}
.toggle.on{background:var(--accent-soft);border-color:var(--accent)}
.toggle.on::after{left:27px;background:var(--accent)}
.input,select.input,textarea.input{height:var(--tap);padding:0 14px;border-radius:var(--r-m);border:1px solid var(--line-strong);background:var(--surface-2);color:var(--text);font:var(--t-m) var(--f-body);width:100%}
textarea.input{height:auto;padding:12px 14px;line-height:1.4;resize:vertical}
.input:focus{outline:2px solid var(--accent);border-color:transparent}
.field{display:flex;flex-direction:column;gap:6px;font-size:var(--t-s);color:var(--text-3)}
.field .err{color:var(--danger);font-size:var(--t-xs)}
.field.bad .input{border-color:var(--danger)}
.row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.row.tight{gap:6px}
.col{display:grid;gap:10px;align-content:start}
.chip{height:36px;padding:0 12px;border-radius:999px;border:1px solid var(--line-strong);background:var(--surface-2);font-size:var(--t-s);font-weight:600;color:var(--text-2);display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap}
.chip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}
.chip.live{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 40%,transparent)}
.chip.live::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--ok)}
.chip.pause{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,transparent)}
.chip.warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,transparent)}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);padding:12px 14px;box-shadow:var(--shadow-1)}
.tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);padding:12px 14px}
.tile .k{font-size:var(--t-xs);color:var(--text-4)}
.tile .v{font:800 var(--t-2xl)/1.1 var(--f-display);font-variant-numeric:tabular-nums}
.alert{background:var(--new-soft);border:1px solid color-mix(in srgb,var(--new) 35%,transparent);border-radius:var(--r-l);padding:12px 14px;font-size:var(--t-s)}
.alert b{display:block;color:var(--new)}
.alert.bad{background:var(--danger-soft);border-color:color-mix(in srgb,var(--danger) 35%,transparent)}
.alert.bad b{color:var(--danger)}

/* ---------- оболочка: шапка + рейл + контент ---------- */
#app{height:100dvh;display:grid;grid-template-rows:auto 1fr;max-width:100vw;overflow:hidden}
.top{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--surface);min-height:60px;min-width:0}
.top .loc{font-family:var(--f-display);font-weight:700;font-size:var(--t-l);cursor:pointer;background:none;border:0;color:var(--text);text-align:left;padding:0;display:flex;flex-direction:column;gap:2px;min-width:0;overflow:hidden}
.top .loc > span{display:flex;align-items:center;gap:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.top .loc small{display:block;font:500 var(--t-xs) var(--f-body);color:var(--text-4)}
.top .tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end;min-width:0}
.shell{display:grid;grid-template-columns:64px 1fr;min-height:0;min-width:0}
.rail{border-right:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column;align-items:center;padding:10px 0;gap:6px;overflow:auto}
.rail a{width:48px;height:48px;border-radius:var(--r-m);display:grid;place-items:center;gap:1px;font:600 9px var(--f-body);color:var(--text-4);text-align:center;line-height:1.1;position:relative;flex:none}
.rail a.on{background:var(--accent-soft);color:var(--accent)}
.rail a b{position:absolute;top:2px;right:2px;background:var(--new);color:#1a1200;border-radius:999px;font-size:10px;padding:0 5px;line-height:16px}
.rail .sp{flex:1}
.view{min-height:0;min-width:0;overflow:auto;position:relative}
.pad{padding:16px}
.page{padding:16px;display:grid;gap:14px;align-content:start;max-width:1100px}
.page h1{margin-bottom:2px}
.page .lede{color:var(--text-3);font-size:var(--t-s);margin:0}
.sec{display:grid;gap:10px}
.sec > h3{margin-top:6px}
.tabbar{display:none}
.offline{background:var(--new-soft);color:var(--new);border-bottom:1px solid color-mix(in srgb,var(--new) 35%,transparent);padding:8px 16px;font-size:var(--t-s);font-weight:600;display:flex;gap:10px;align-items:center}
.offline.err{background:var(--danger-soft);color:var(--danger)}

/* Горизонтальная лента фильтров: на узком экране скроллим, а не переносим. */
.scroller{display:flex;gap:8px;align-items:center;overflow-x:auto;padding:10px 14px 0;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.scroller::-webkit-scrollbar{display:none}
.scroller > *{flex:none}
.feed-head{display:flex;gap:8px;align-items:center;padding:12px 14px 0}
.feed-head .input{flex:1;min-width:0;max-width:340px}
.feed-head .btn{flex:none}

/* ---------- лента ---------- */
.lanes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;padding:14px;align-content:start;min-width:0}
.lane{min-width:0}
.lane h4{margin:0 0 10px;font:700 var(--t-xs) var(--f-body);letter-spacing:.08em;text-transform:uppercase;display:flex;align-items:center;gap:8px}
.lane h4 .n{background:var(--surface-3);color:var(--text);border-radius:999px;padding:1px 8px;font-size:var(--t-xs)}
.lane.new h4{color:var(--new)} .lane.prep h4{color:var(--prep)} .lane.ready h4{color:var(--ready)}
.rq{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);padding:12px 14px;margin-bottom:10px;box-shadow:var(--shadow-1)}
.rq.s-new{border-color:color-mix(in srgb,var(--new) 40%,var(--line));box-shadow:inset 3px 0 0 var(--new),var(--shadow-1)}
.rq.s-accepted,.rq.s-in_progress{box-shadow:inset 3px 0 0 var(--prep),var(--shadow-1)}
.rq.s-ready{box-shadow:inset 3px 0 0 var(--ready),var(--shadow-1)}
.rq.s-done,.rq.s-cancelled,.rq.s-no_show{opacity:.75}
.rq .h{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}
.rq .id{font:800 var(--t-xl)/1 var(--f-display);letter-spacing:.04em}
.rq .who{font-size:var(--t-s);color:var(--text-3);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.rq .who .tag{font-size:11px;padding:0 6px;border-radius:4px;background:var(--accent-soft);color:var(--accent);font-weight:600}
.rq .who .tag.grey{background:var(--surface-3);color:var(--text-3)}
.rq .lines{margin:8px 0;display:grid;gap:3px;font-size:var(--t-s)}
.rq .lines div{display:flex;justify-content:space-between;gap:8px}
.rq .lines b{color:var(--accent);font-weight:700}
.rq .lines .opt{color:var(--text-4);font-size:var(--t-xs)}
.rq .meta{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:var(--t-xs);color:var(--text-3);flex-wrap:wrap}
.rq .sum{font:700 var(--t-l) var(--f-display);color:var(--text);font-variant-numeric:tabular-nums}
.rq .timer{color:var(--new);font-weight:600;font-family:var(--f-mono)}
.rq .timer.late{color:var(--danger)}
.rq .act{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.rq .act .btn{flex:1 1 0;min-width:104px}
.rq .act .btn.icon{flex:0 0 auto;min-width:var(--tap)}
.rq .note{margin-top:8px;font-size:var(--t-xs);color:var(--text-4);border-top:1px dashed var(--line);padding-top:6px}
.pay{font-size:11px;padding:1px 6px;border-radius:4px;background:var(--surface-3);color:var(--text-3)}
.pay.paid{background:var(--ready-soft);color:var(--ready)}
@keyframes rq-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.rq.fresh{animation:rq-in .18s ease-out}

/* ---------- инбокс ---------- */
.inbox{display:grid;grid-template-columns:300px 1fr;height:100%;min-height:0}
.inbox .list{border-right:1px solid var(--line);overflow:auto;background:var(--surface)}
.conv{padding:12px 14px;border-bottom:1px solid var(--line);display:grid;gap:4px;cursor:pointer;width:100%;text-align:left;background:none;border-left:0;border-right:0;border-top:0;color:inherit;font:inherit}
.conv.on{background:var(--accent-soft)}
.conv .t{display:flex;justify-content:space-between;align-items:center;font-weight:600;font-size:var(--t-s);gap:8px}
.conv .t small{color:var(--text-4);font-weight:500;font-family:var(--f-mono);flex:none}
.conv .m{font-size:var(--t-s);color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.conv .s{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.thread{display:grid;grid-template-rows:auto 1fr auto;min-height:0}
.thread .hd{padding:10px 16px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:10px;background:var(--surface);flex-wrap:wrap}
.msgs{padding:16px;overflow:auto;display:grid;gap:10px;align-content:start}
.msg{max-width:72%;padding:10px 12px;border-radius:14px;font-size:var(--t-s);line-height:1.4;white-space:pre-wrap;word-break:break-word}
.msg.in{background:var(--surface-2);border:1px solid var(--line);justify-self:start;border-bottom-left-radius:4px}
.msg.out{background:var(--accent-soft);justify-self:end;border-bottom-right-radius:4px}
.msg .by{display:block;font-size:11px;color:var(--text-4);margin-bottom:3px}
.draft{justify-self:stretch;max-width:none;background:var(--surface);border:1px dashed var(--line-strong);border-radius:var(--r-l);padding:12px 14px}
.draft h5{margin:0 0 6px;font:700 var(--t-s) var(--f-body);display:flex;justify-content:space-between;gap:8px}
.draft .miss{color:var(--new);font-size:var(--t-xs);margin-top:4px}
.compose{padding:10px 16px;border-top:1px solid var(--line);display:flex;gap:8px;align-items:center;background:var(--surface)}
.compose .input{flex:1}

/* ---------- онбординг ---------- */
.onb{min-height:100%;display:grid;place-items:center;padding:24px}
.onb .box{width:min(760px,100%)}
.steps{display:flex;gap:6px;margin-bottom:18px}
.steps i{height:4px;flex:1;border-radius:2px;background:var(--surface-3)}
.steps i.on{background:var(--accent)}
.kicker{font-family:var(--f-mono);font-size:var(--t-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--text-4);margin-bottom:10px}
.presets{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:16px 0}
.preset{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);padding:14px;min-height:104px;display:flex;flex-direction:column;justify-content:space-between;gap:6px;cursor:pointer;text-align:left;color:inherit;font:inherit}
.preset.on{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.preset b{font-family:var(--f-display);font-weight:700}
.preset small{color:var(--text-4);font-size:var(--t-xs)}
.preset.soon{opacity:.55;cursor:not-allowed}

/* ---------- вход ---------- */
.login{min-height:100%;display:grid;place-items:center;padding:24px}
/* На экране входа оболочки нет — растягиваем единственную строку сетки. */
#app:has(> .login){grid-template-rows:1fr}
.login .btn{text-align:center;line-height:1.25;padding-top:8px;padding-bottom:8px}
.login form{width:min(380px,100%);display:grid;gap:12px}
.login .logo{font:800 var(--t-3xl) var(--f-display);letter-spacing:-.02em}

/* ---------- таблицы, списки ---------- */
.tbl{width:100%;border-collapse:collapse;font-size:var(--t-s)}
.tbl th{text-align:left;font:700 var(--t-xs) var(--f-body);letter-spacing:.06em;text-transform:uppercase;color:var(--text-4);padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
.tbl td{padding:10px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl td.r,.tbl th.r{text-align:right;font-variant-numeric:tabular-nums}
.tbl tr:last-child td{border-bottom:0}
.tbl-wrap{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);overflow:auto}
.lrow{display:flex;align-items:center;gap:12px;padding:10px 14px;border-bottom:1px solid var(--line)}
.lrow:last-child{border-bottom:0}
.lrow .grow{flex:1;min-width:0}
.lrow .grow b{display:block;font-weight:600}
.lrow .grow small{color:var(--text-4);font-size:var(--t-xs)}
/* Миниатюра позиции каталога (список) и превью в шите редактирования. */
.thumb{width:44px;height:44px;flex:none;border-radius:var(--r-m);background:var(--surface-2);border:1px solid var(--line);overflow:hidden;display:inline-flex;align-items:center;justify-content:center;color:var(--text-4)}
.thumb.big{width:72px;height:72px;border-radius:var(--r-l)}
.thumb img{width:100%;height:100%;object-fit:cover;display:block}

/* ---------- состояния ---------- */
.empty{display:grid;gap:10px;justify-items:center;text-align:center;padding:40px 20px;color:var(--text-3);max-width:100%}
.empty p{max-width:36ch}
.empty h3{color:var(--text-2)}
.empty svg.i{width:32px;height:32px;color:var(--text-4)}
.skel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);padding:12px 14px;margin-bottom:10px}
.skel i{display:block;height:12px;border-radius:6px;background:var(--surface-3);margin-bottom:8px}
.skel i:last-child{margin-bottom:0}
@keyframes sk{0%,100%{opacity:.55}50%{opacity:1}}
.skel i{animation:sk 1.2s ease-in-out infinite}

/* ---------- шиты, тосты, модалки ---------- */
.scrim{position:fixed;inset:0;background:rgba(4,7,13,.6);z-index:60;display:grid;align-items:end;justify-items:center}
@media (min-width:760px){.scrim{align-items:center}}
.sheet{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl) var(--r-xl) 0 0;width:min(560px,100%);max-height:86dvh;overflow:auto;box-shadow:var(--shadow-2);padding:18px 18px 22px;display:grid;gap:12px;align-content:start}
@media (min-width:760px){.sheet{border-radius:var(--r-xl)}}
.sheet .sh-hd{display:flex;justify-content:space-between;align-items:center;gap:10px}
.sheet .sh-hd h3{font-size:var(--t-xl)}
@keyframes sheet-in{from{transform:translateY(16px);opacity:0}to{transform:none;opacity:1}}
.sheet{animation:sheet-in .16s ease-out}
.toasts{position:fixed;left:80px;bottom:16px;z-index:80;display:grid;gap:8px;max-width:min(420px,calc(100vw - 96px))}
.toast{background:var(--surface-3);border:1px solid var(--line-strong);color:var(--text);border-radius:var(--r-m);padding:12px 14px;font-size:var(--t-s);box-shadow:var(--shadow-2);display:flex;gap:10px;align-items:center}
.toast.ok{border-color:color-mix(in srgb,var(--ok) 45%,transparent)}
.toast.err{border-color:color-mix(in srgb,var(--danger) 45%,transparent);color:var(--danger)}
.toast .btn{min-height:32px;padding:0 10px;font-size:var(--t-xs)}

/* ---------- календарь ---------- */
.cal{display:grid;gap:10px}
.cal-grid{display:grid;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);overflow:auto}
.cal-head{display:grid;position:sticky;top:0;background:var(--surface-2);z-index:2}
.cal-head div{padding:8px 10px;font:700 var(--t-xs) var(--f-body);text-transform:uppercase;letter-spacing:.06em;color:var(--text-4);border-left:1px solid var(--line);white-space:nowrap}
.cal-head div:first-child{border-left:0}
.cal-body{display:grid}
.cal-row{display:grid;border-top:1px solid var(--line);min-height:48px}
.cal-time{padding:6px 10px;font:var(--t-xs)/1 var(--f-mono);color:var(--text-4);border-right:1px solid var(--line);display:flex;align-items:center}
.cal-cell{border-left:1px solid var(--line);padding:3px;display:grid;gap:3px;align-content:start;cursor:pointer;min-width:110px}
.cal-cell:hover{background:var(--accent-soft)}
.cal-ev{background:var(--prep-soft);border-left:3px solid var(--prep);border-radius:var(--r-s);padding:4px 6px;font-size:var(--t-xs);cursor:pointer;text-align:left;color:inherit;border-top:0;border-right:0;border-bottom:0;width:100%}
.cal-ev.s-new{background:var(--new-soft);border-left-color:var(--new)}
.cal-ev.s-ready{background:var(--ready-soft);border-left-color:var(--ready)}
.cal-ev b{display:block;font-family:var(--f-mono);font-size:11px}
.cal-ev{color:var(--text)}
.cal-ev .cal-sum{color:var(--text-3);font-variant-numeric:tabular-nums}

/* ---------- графики (Canvas/CSS) ---------- */
.bars{display:flex;align-items:flex-end;gap:3px;height:96px;margin-top:8px}
.bars i{flex:1;background:var(--accent-press);border-radius:2px 2px 0 0;opacity:.9;min-height:2px;position:relative}
.bars i.hot{background:var(--accent)}
.barlabels{display:flex;gap:3px;margin-top:4px;font:10px var(--f-mono);color:var(--text-4)}
.barlabels span{flex:1;text-align:center;overflow:hidden;white-space:nowrap}
.split{display:grid;gap:6px}
.split .r{display:grid;grid-template-columns:110px 1fr auto;gap:8px;align-items:center;font-size:var(--t-s)}
.split .bar{height:10px;border-radius:5px;background:var(--surface-3);overflow:hidden}
.split .bar i{display:block;height:100%;background:var(--accent)}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.tiles2{display:grid;grid-template-columns:1fr 1fr;gap:10px}

/* ---------- киоск ---------- */
body.kiosk .rail,body.kiosk .tabbar{display:none}
body.kiosk .lanes .rq .btn{min-height:var(--tap-xl);font-size:var(--t-xl)}

/* ---------- QR / код ---------- */
.qrbox{background:#fff;padding:12px;border-radius:var(--r-m);width:max-content;max-width:100%}
.qrbox svg{display:block;width:180px;height:180px}
.code{font-family:var(--f-mono);font-size:var(--t-xs);background:var(--surface-3);border:1px solid var(--line);border-radius:var(--r-s);padding:10px 12px;overflow:auto;white-space:pre-wrap;word-break:break-all;color:var(--text-2)}

/* ---------- адаптив ---------- */
/* Планшет 1024×768 — базовый (три полосы + рейл слева) — описан выше. */
@media (min-width:1280px){
  .lanes{grid-template-columns:repeat(3,minmax(0,1fr));max-width:1500px}
  .page{max-width:1240px}
}
/* Телефон: таб-бар снизу, одна полоса с переключателем, рейл скрыт. */
@media (max-width:760px){
  body{font-size:16px}
  #app{grid-template-rows:auto 1fr auto}
  .shell{grid-template-columns:1fr}
  .rail{display:none}
  .tabbar{display:flex;border-top:1px solid var(--line);background:var(--surface);padding-bottom:env(safe-area-inset-bottom,0px)}
  .tabbar a{flex:1 1 0;min-width:0;min-height:var(--tap-l);display:grid;place-items:center;gap:2px;font-size:10px;font-weight:600;color:var(--text-4);position:relative;padding:6px 2px}
  .tabbar a span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .tabbar a.on{color:var(--accent)}
  .tabbar a b{position:absolute;top:4px;right:calc(50% - 22px);background:var(--new);color:#1a1200;border-radius:999px;font-size:10px;padding:0 5px;line-height:16px}
  .lanes{grid-template-columns:1fr;padding:12px}
  .lane > h4{display:none}
  /* justify-content:flex-end в скролл-контейнере прячет начало списка — на телефоне выравниваем слева. */
  .top .tools{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;max-width:100%;justify-content:flex-start;flex:1}
  .top .tools::-webkit-scrollbar{display:none}
  .top .tools > *{flex:none}
  .feed-head .btn span{display:none}
  .lane{display:none}
  .lane.shown{display:block}
  .lane-switch{display:flex;gap:6px;padding:10px 12px 0}
  .inbox{grid-template-columns:1fr}
  .inbox .list{border-right:0}
  .inbox.has-thread .list{display:none}
  .inbox:not(.has-thread) .thread{display:none}
  .top{flex-wrap:wrap;gap:8px;padding:8px 12px}
  .top .tools{gap:6px}
  .page{padding:12px}
  .tiles2{grid-template-columns:1fr 1fr}
  .msg{max-width:88%}
  .compose{flex-wrap:wrap}
  .compose .input{flex:1 1 100%}
  .compose .btn{flex:1}
  .toasts{left:12px;right:12px;bottom:calc(var(--tap-l) + 12px);max-width:none}
  .sheet{padding:16px 16px 20px}
}
@media (min-width:761px){.lane-switch{display:none}}
/* Крупные экраны кассы: не растягиваем текст на всю ширину. */
@media (min-width:1600px){.lanes{margin:0 auto}}
