/* LOTNOIR: экран переписки. Один файл на шапку, карточки над лентой, ленту сообщений, поле ввода и меню сообщения.
   Край экрана 12px. Карточки над лентой в стиле приложения: --srf, рамка --line, скругление 18px.
   Иконки: геометрия Lucide, сетка 24, обводка из общего правила svg в index.html, без своих stroke-width.
   Движение интерфейса: 150-250 мс, ease-out. Пружина только у реакций, это отдельный момент. Зелёного в чате нет. */
:root{--chat-side:12px;--chat-gap:2px;--chat-gap-author:8px;--chat-r:18px;--chat-r-tail:6px;--chat-ease:cubic-bezier(.2,.8,.2,1);--chat-spring:cubic-bezier(.34,1.56,.64,1)}

/* ---------- шапка ---------- */
body:has(#msgs) .itembar{padding-left:var(--chat-side);padding-right:var(--chat-side);gap:12px}
.itembar .who2,.itembar .who2 .av{width:40px;height:40px}
.itembar .who2 .av{font-size:16px}
.itembar #cmenu{flex:none;width:40px;height:40px;padding:0;background:none;border:0;color:var(--fg)}
.itembar #cmenu svg{width:22px;height:22px;stroke-width:2.2}

/* ---------- карточки над лентой: заказ, закреплённое, предложение цены ----------
   Сплошная подложка --bg под карточками и мягкий край снизу: сообщения не просвечивают ни в зазорах, ни над панелью */
#pins.pins{padding:0 var(--chat-side);background:var(--bg);box-shadow:0 -2px 0 var(--bg)}
#pins.pins:has(>.zordpin,>.z113pinbar,>#offer>.offr){padding-bottom:8px}
#pins>.zordpin,#pins>.z113pinbar,#offer>.offr{margin-top:8px}

/* заказ: свёрнут в строку со значком этапа, по нажатию раскрывается ход заказа. Фото вещи не дублируем, оно есть в шапке */
.z113os{display:block;border:1px solid var(--line);border-radius:18px;background:var(--srf);color:var(--fg);overflow:hidden;-webkit-tap-highlight-color:transparent}
.z113os .z113oh{display:flex;align-items:center;gap:12px;padding:10px 12px 0;cursor:pointer}
.z113os .st{flex:none;width:36px;height:36px;border-radius:50%;background:var(--srf2);display:flex;align-items:center;justify-content:center;color:var(--fg)}
.z113os .st svg{width:18px;height:18px}
.z113os .bd{flex:1;min-width:0}
.z113os .r1{display:flex;align-items:baseline;gap:8px;white-space:nowrap}
.z113os .r1 b{min-width:0;overflow:hidden;text-overflow:ellipsis;font-size:15px;font-weight:600}
.z113os .r1 em{flex:none;font-style:normal;font-size:14px;color:var(--mut);font-variant-numeric:tabular-nums}
.z113os .r2{display:flex;align-items:center;gap:4px;margin-top:2px;font-size:12px;color:var(--mut);white-space:nowrap;overflow:hidden}
.z113os .r2 svg{width:14px;height:14px;flex:none}
.z113os .r2 span{overflow:hidden;text-overflow:ellipsis}
.z113os .ac{flex:none;display:flex;align-items:center;height:32px;margin:0;padding:0 12px;border:0;border-radius:16px;font-family:inherit;background:var(--fg);color:var(--bg);font-size:13px;font-weight:600;text-decoration:none;white-space:nowrap;transition:transform .15s ease-out}
.z113os .ac:active{transform:scale(.96)}
.z113os .cv{flex:none;width:24px;height:24px;margin-right:-2px;color:var(--mut);transition:transform .22s var(--chat-ease)}
.z113os.open .cv{transform:rotate(180deg)}
.z113os .z113sg{display:grid;grid-template-columns:repeat(var(--n,4),1fr);gap:4px;max-height:25px;padding:10px 12px 12px;overflow:hidden;transition:opacity .15s ease-out,max-height .24s var(--chat-ease),padding .24s var(--chat-ease)}
/* раскрыто: полоску этапов заменяет ход заказа */
.z113os.open .z113sg{opacity:0;max-height:0;padding-top:0;padding-bottom:0}
.z113os .z113sg i{position:relative;height:3px;border-radius:2px;background:var(--line);overflow:hidden}
.z113os .z113sg i.on::after{content:'';position:absolute;inset:0;border-radius:inherit;background:var(--fg);transform-origin:left;animation:z113fill .36s ease-out both;animation-delay:calc(var(--k) * 80ms)}
@keyframes z113fill{from{transform:scaleX(0)}}
.z113os .z113ob{display:grid;grid-template-rows:0fr;transition:grid-template-rows .24s var(--chat-ease)}
.z113os.open .z113ob{grid-template-rows:1fr}
.z113os .z113ob>div{min-height:0;overflow:hidden}
.z113os.off .r1 b,.z113os.off .st{color:var(--mut)}
.z113os.off .z113oh{padding-bottom:10px}
/* раскрытая карточка: ход заказа с датами. Колонка точек совпадает с колонкой значка этапа (36px), пройденный путь залит --fg */
.z113os .z113tl{list-style:none;margin:0;padding:12px 12px 0}
.z113os .z113tl li{position:relative;display:grid;grid-template-columns:36px 1fr auto;gap:12px;align-items:center;min-height:36px}
.z113os .z113tl li i{justify-self:center;position:relative;z-index:1;width:10px;height:10px;border-radius:50%;background:var(--line);box-shadow:0 0 0 4px var(--srf)}
.z113os .z113tl li.on i{background:var(--fg)}
.z113os .z113tl li.cur i{width:12px;height:12px;box-shadow:0 0 0 3px var(--srf),0 0 0 5px var(--fg)}
.z113os .z113tl li.x i{background:var(--mut)}
.z113os .z113tl li:not(:last-child)::after{content:'';position:absolute;left:17px;top:50%;width:2px;height:100%;background:var(--line);transform-origin:top}
.z113os .z113tl li.on:not(.cur):not(:last-child)::after{background:var(--fg)}
.z113os .z113tl b{font-size:14px;font-weight:400;color:var(--mut)}
.z113os .z113tl li.on b{color:var(--fg)}
.z113os .z113tl li.cur b{font-weight:600}
.z113os .z113tl time{font-size:13px;color:var(--mut);font-variant-numeric:tabular-nums;white-space:nowrap;opacity:0;transition:opacity .2s ease-out}
.z113os .z113tl time.ld{opacity:1}
/* при раскрытии этапы появляются сверху вниз, линия пройденного пути дорисовывается за ними */
.z113os.open .z113tl li{animation:z113li .24s ease-out both;animation-delay:calc(var(--k) * 40ms + 40ms)}
.z113os.open .z113tl li.on:not(.cur)::after{animation:z113grow .26s ease-out both;animation-delay:calc(var(--k) * 40ms + 120ms)}
@keyframes z113li{from{opacity:0;transform:translateY(-4px)}}
@keyframes z113grow{from{transform:scaleY(0)}}
.z113os .z113od{margin:4px 12px 0;opacity:0;transition:opacity .2s ease-out}
.z113os .z113od.ld{opacity:1}
.z113os .z113kv{display:grid;grid-template-columns:1fr 40px;column-gap:8px;align-items:center;padding:8px 0;border-top:1px solid var(--line)}
.z113os .z113kv span{grid-column:1;font-size:12px;line-height:16px;color:var(--mut)}
.z113os .z113kv b{grid-column:1;font-size:14px;line-height:20px;font-weight:500;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-variant-numeric:tabular-nums}
.z113os .z113kv b.cp{color:var(--mut)}
.z113os .z113kv button{grid-column:2;grid-row:1/3;width:40px;height:40px;margin:0;padding:0;border:0;border-radius:12px;background:none;color:var(--mut);display:flex;align-items:center;justify-content:center;transition:background-color .15s}
.z113os .z113kv button:active{background:var(--srf2)}
.z113os .z113kv button svg{width:20px;height:20px}
.z113os .z113oa{display:flex;gap:8px;padding:12px}
.z113os .z113oa a{flex:1;display:flex;align-items:center;justify-content:center;height:40px;border-radius:12px;background:var(--srf2);color:var(--fg);font-size:14px;font-weight:600;text-decoration:none;transition:transform .15s ease-out}
.z113os .z113oa a:active{transform:scale(.97)}
.z113os .z113oa a[hidden]{display:none}

/* закреплённое: полоска слева показывает, какое из закреплённых сейчас видно; текст сменяется сдвигом вверх */
.z113pinbar{position:relative;display:flex;align-items:center;gap:12px;width:100%;min-height:52px;padding:8px 8px 8px 12px;border:1px solid var(--line);border-radius:18px;background:var(--srf);color:var(--fg);font:inherit;text-align:left;cursor:pointer;overflow:hidden;-webkit-tap-highlight-color:transparent;transition:background-color .15s}
.z113pinbar:active{background:var(--srf2)}
.z113pinbar .z113pi{flex:none;position:relative;width:2px;height:36px;border-radius:1px;background:color-mix(in srgb,var(--fg) 18%,transparent);overflow:hidden}
.z113pinbar .z113pi i{position:absolute;left:0;top:0;width:100%;height:calc(100% / var(--n,1));border-radius:1px;background:var(--fg);transform:translateY(calc(100% * var(--k,0)));transition:transform .24s var(--chat-ease),height .24s var(--chat-ease)}
.z113pinbar .bd{flex:1;min-width:0}
.z113pinbar .bd>b{display:block;font-size:13px;font-weight:600;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.z113pinbar .z113pt{position:relative;display:block;height:20px;overflow:hidden}
.z113pinbar .z113pt>span{position:absolute;left:0;right:0;top:0;font-size:14px;line-height:20px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.z113pinbar .z113pm{flex:none;display:flex}
.z113pinbar .z113pm img{width:36px;height:36px;border-radius:8px;object-fit:cover}
.z113pinbar .ic{flex:none;width:36px;height:36px;padding:0;border:0;border-radius:50%;background:none;color:var(--mut);display:flex;align-items:center;justify-content:center}
.z113pinbar .ic:active{background:var(--srf2)}
.z113pinbar .ic svg{width:18px;height:18px}

/* предложение цены (когда заказа ещё нет) */
#offer>.offr{padding:8px 12px;border:1px solid var(--line);border-radius:18px;background:var(--srf)}
#offer .offh{display:flex;align-items:center;gap:8px;min-height:40px}
#offer .offh>b{font-size:15px;font-weight:600}
#offer .offh .xs{margin-left:auto;color:var(--mut)}
#offer .pchev{flex:none;width:24px;height:24px;margin:0 -4px 0 0;border:0;color:var(--mut);transform:none;transition:transform .2s var(--chat-ease)}
#offer .offr:not(.min) .pchev{transform:rotate(180deg)}
#offer .offr.accepted .offh .xs{color:var(--fg)}
#offer .offp{display:flex;align-items:baseline;gap:8px;margin:4px 0}
#offer .offp b{font-size:24px;font-weight:700}
#offer .offp s{color:var(--mut);font-size:14px}
#offer .offd{font-size:12px;font-weight:600;color:var(--fg);background:var(--srf2);padding:2px 8px;border-radius:12px}
#offer .offbtns{display:flex;gap:8px;margin:8px 0 4px}
#offer .offbtns .btn{padding:12px 4px;font-size:13px}
#offer .offr.min .offh .xs{display:none}
#offer .offr.min .offmini{display:inline;margin-left:auto;font-weight:600}
#offer .offr.min .minact{display:inline-flex;align-items:center;height:32px;padding:0 12px;border-radius:16px;font-size:13px;width:auto}
#offer .offr.min .minact2{display:inline;font-size:13px;font-weight:600;color:var(--fg)}

/* ---------- лента сообщений ---------- */
#msgs>.line{margin:var(--chat-gap) var(--chat-side) 0!important}
#msgs>.line.gap{margin-top:var(--chat-gap-author)!important}
/* служебные строки: одна плашка по центру, как дата, со значком события. Подряд идущие сворачиваются в последнюю (z39.js) */
#msgs .line.sys{display:flex;justify-content:center;margin:8px var(--chat-side)}
#msgs .line.sys.zsh{display:none}
#msgs .line.sys .sp{display:inline-flex;align-items:center;gap:6px;max-width:100%;min-height:28px;padding:4px 12px;border:1px solid var(--line);border-radius:14px;background:var(--bg);font-size:13px;line-height:18px;color:var(--mut);white-space:nowrap;text-align:left}
#msgs .line.sys .sp>svg{flex:none;width:14px;height:14px;color:var(--fg)}
#msgs .line.sys .sp>span{min-width:0;overflow:hidden;text-overflow:ellipsis;color:var(--fg)}
#msgs .line.sys .sp>time{flex:none;font-size:11px;font-variant-numeric:tabular-nums}
#msgs .line.sys .sp>[data-more]{flex:none;position:relative;margin:-4px -12px -4px 0;padding:0 12px 0 8px;height:28px;border:0;border-left:1px solid var(--line);background:none;color:var(--mut);font:inherit;font-size:13px}
#msgs .zsg{display:flex;flex-direction:column}
#msgs .zsgb{display:grid;grid-template-rows:0fr;transition:grid-template-rows .24s var(--chat-ease)}
#msgs .zsg.open .zsgb{grid-template-rows:1fr}
#msgs .zsgb>div{min-height:0;overflow:hidden}
#msgs .zsgb .line.sys{opacity:0;transition:opacity .2s ease-out}
#msgs .zsg.open .zsgb .line.sys{opacity:1}
#msgs>.day{margin:16px 0 8px}
#msgs>.day:first-child{margin-top:8px}
#msgs>.line[data-mid]{position:relative;flex-direction:column;align-items:flex-start;overflow:visible}
#msgs>.line.r[data-mid]{align-items:flex-end}
#msgs .bub{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:pan-y;transition:opacity .18s ease-out}
#msgs .bub:not(.pic){max-width:82%;padding:8px 12px;line-height:1.35}
#msgs .bub.you{background:var(--srf2);border:0}
/* группа одного автора: углы 18px, со стороны автора 6px внизу всегда, сверху у продолжения группы */
#msgs .bub.me:not(.pic){border-radius:var(--chat-r) var(--chat-r) var(--chat-r-tail) var(--chat-r)}
#msgs .bub.you:not(.pic){border-radius:var(--chat-r) var(--chat-r) var(--chat-r) var(--chat-r-tail)}
#msgs>.line.r+.line.r:not(.gap) .bub.me:not(.pic){border-top-right-radius:var(--chat-r-tail)}
#msgs>.line:not(.r):not(.sys)+.line:not(.r):not(.sys):not(.gap) .bub.you:not(.pic){border-top-left-radius:var(--chat-r-tail)}
#msgs .bub:not(.pic) .tm{right:12px!important;bottom:7px!important}
#msgs .bub.pic>img{min-height:120px;object-fit:cover;background:var(--srf2)}
#msgs .bub.z113pr{opacity:.72}
#msgs .bub img{cursor:zoom-in;-webkit-user-drag:none;-webkit-touch-callout:none;user-select:none}
#msgs .bub .tx{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important}
#msgs .bub .zed{font-style:normal;margin-right:4px;opacity:.75}
/* место под время в конце текста: шире, если во времени есть скрепка закрепа или «изменено», иначе время наезжает на текст */
.bub:not(.pic) .tx::after{content:'';display:inline-block;width:40px;height:1px}
.bub.me:not(.pic) .tx::after{width:60px}
.bub:has(.zpinmark):not(.pic) .tx::after{width:56px}
.bub.me:has(.zpinmark):not(.pic) .tx::after{width:76px}
.bub:has(.zed):not(.pic) .tx::after{width:104px}
.bub.me:has(.zed):not(.pic) .tx::after{width:122px}
.bub:has(.zed):has(.zpinmark):not(.pic) .tx::after{width:120px}
.bub.me:has(.zed):has(.zpinmark):not(.pic) .tx::after{width:138px}
#msgs .tm .zpinmark{flex:none;width:12px;height:12px;stroke-width:2.2;margin-right:1px;opacity:.8}
#msgs .line.z113gone{animation:z113gone .24s ease-out forwards;overflow:hidden}
.z113dust{position:fixed;z-index:30;pointer-events:none}
@keyframes z113gone{to{opacity:0;max-height:0;margin:0;padding:0}}
#msgs .bub.z113hl{animation:z113hl 1.1s ease}
@keyframes z113hl{30%{box-shadow:0 0 0 3px color-mix(in srgb,var(--fg) 40%,transparent)}}
/* цитата, история, пересланное внутри пузыря */
.z113quote{display:block;width:100%;padding:6px 8px;margin:0 0 6px;border:0;border-left:2px solid currentColor;border-radius:6px;background:#80808024;color:inherit;font:inherit;text-align:left}
.z113quote b,.z113quote span{display:block;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.z113quote span{opacity:.7;font-size:13px}
.bub:has(.z113quote),.bub:has(.z113story),.bub:has(.z113forwarded){display:block!important}
.z113story{display:flex;align-items:center;gap:8px;color:inherit;text-align:left;border:0;border-left:2px solid currentColor;background:#80808020;border-radius:6px;padding:6px 8px;margin-bottom:6px;max-width:100%;font:inherit}
.z113story img,.z113quote img{width:30px!important;height:38px!important;object-fit:cover;border-radius:4px!important;float:left;margin-right:8px}
.z113story b,.z113story span{display:block;font-size:12px}
.z113story>div{min-width:0}
.z113story span{opacity:.65;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:230px}
.z113pinned,.z113forwarded{display:block;font-size:11px;opacity:.65;padding-bottom:4px}
/* реакции под пузырём */
#msgs .z113rx{display:flex;gap:4px;margin:4px 8px;padding:0;max-width:85%;flex-wrap:wrap;color:var(--fg)}
#msgs .z113rx button{display:flex;align-items:center;gap:4px;transform-origin:center;height:26px;min-width:30px;padding:0 6px;border:0;border-radius:13px;background:color-mix(in srgb,var(--fg) 7%,var(--srf));color:inherit;font:inherit;font-size:17px;transition:background-color .2s}
#msgs .z113rx button.on{background:color-mix(in srgb,var(--fg) 16%,var(--srf))}
#msgs .z113rx small{font-size:11px}
/* свайп для ответа */
.z113swipe{position:absolute;right:12px;top:50%;width:32px;height:32px;margin-top:-16px;display:grid;place-items:center;border-radius:50%;background:var(--srf2);color:var(--fg);opacity:0;pointer-events:none}
.z113swipe svg{width:18px;height:18px}
.z113swipe.ready{background:var(--fg);color:var(--bg)}

/* ---------- поле ввода ----------
   Три колонки: 44px камера, поле, 44px отправка. Подсказки и полоса ответа стоят над ними и держат ту же сетку. */
.send{display:block;padding:8px var(--chat-side) calc(8px + var(--zsab));background:var(--bg);border-top:0}
.send .zrow{display:flex;gap:8px;align-items:flex-end}
.send textarea{flex:1;min-width:0;min-height:44px;max-height:110px;margin:0;padding:11px 16px;line-height:20px;border-radius:22px;background:var(--srf);border:1px solid var(--line);resize:none;box-shadow:none;transition:border-color .15s}
.send textarea:focus{border-color:var(--mut)}
.send .icb,.send #go{flex:none;width:44px;height:44px;min-width:44px;padding:0;margin:0;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:none}
.send .icb{background:var(--srf);border:1px solid var(--line);color:var(--fg)}
.send #go{border:0;background:var(--fg);color:var(--bg);transition:background-color .15s,color .15s}
.send:not(.z71t) #go{background:var(--srf2);color:var(--mut)}
.send .icb svg,.send #go svg{width:22px;height:22px}
.send #go svg{stroke-width:2}
body.z113ed .send label.icb{opacity:.3;pointer-events:none}
/* подсказки ответа: один ряд кнопок с обводкой, листается вбок. Это не реплики, поэтому не пузыри и не справа */
/* подсказки: стопка справа в ленте после последнего сообщения, как черновики ваших сообщений, без подложки.
   Обводка и подпись отличают их от отправленных белых пузырей */
#qr{display:flex;flex-wrap:wrap;justify-content:flex-end;align-items:flex-end;gap:6px;padding:4px var(--chat-side) 8px 64px;max-height:var(--qh,260px);overflow:hidden;transition:max-height .28s ease,opacity .16s ease-out,padding-top .28s ease,padding-bottom .28s ease}
#qr:empty{display:none}
#qr .zqh{flex:0 0 100%;margin-bottom:2px;font-size:12px;line-height:16px;color:var(--mut);text-align:right}
#qr button{flex:none;max-width:100%;min-height:36px;padding:7px 12px;border:1px solid var(--line);border-radius:var(--chat-r) var(--chat-r) var(--chat-r-tail) var(--chat-r);background:var(--srf);color:var(--fg);font:inherit;font-size:15px;line-height:20px;text-align:left;-webkit-tap-highlight-color:transparent;transition:background-color .15s,border-color .15s,transform .15s ease-out}
#qr button:active{background:var(--srf2);border-color:var(--mut);transform:scale(.97)}
#qr .offchip{display:inline-flex;align-items:center;gap:6px;border-radius:18px;font-weight:600}
#qr .offchip svg{width:16px;height:16px;flex:none;pointer-events:none}
/* появляются по очереди снизу вверх от поля ввода, 40 мс между соседями */
#qr.zqa>*{animation:zqin .22s ease-out both;animation-delay:calc(var(--k,0) * 40ms)}
@keyframes zqin{from{opacity:0;transform:translateY(8px)}}
#qr.zqt,#qr.zqgone{max-height:0;opacity:0;padding-top:0;padding-bottom:0;pointer-events:none}
.zqfly{position:fixed;z-index:40;margin:0;display:flex;align-items:center;padding:7px 12px;border:1px solid var(--line);border-radius:var(--chat-r) var(--chat-r) var(--chat-r-tail) var(--chat-r);background:var(--srf);color:var(--fg);font-size:15px;line-height:20px;pointer-events:none;transform-origin:left center}
/* ответ и правка: полоса над полем, поле при этом не меняется */
.z113replybar{display:flex;align-items:center;gap:8px;height:48px;padding-bottom:8px;box-sizing:border-box;overflow:hidden}
.z113replybar .ic{flex:none;width:44px;display:flex;justify-content:center;color:var(--fg)}
.z113replybar .ic svg{width:20px;height:20px}
.z113replybar .bd{flex:1;min-width:0;padding-left:16px}
.z113replybar .bd b,.z113replybar .bd span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;line-height:18px}
.z113replybar .bd b{font-weight:600}
.z113replybar .bd span{color:var(--mut)}
.z113replybar img{flex:none;width:32px;height:32px;border-radius:6px;object-fit:cover}
.z113replybar button{flex:none;width:44px;height:40px;padding:0;border:0;background:none;color:var(--mut);display:flex;align-items:center;justify-content:center}
.z113replybar button svg{width:20px;height:20px}
/* очередь отправки */
.zoutbox{display:flex;flex-direction:column;align-items:flex-end;padding:0 var(--chat-side);gap:8px}
.zpending{width:min(280px,82%);border:1px solid var(--line);border-radius:18px;padding:12px;background:var(--srf);animation:zfade .2s ease-out}
.zpending>img{width:100%;max-height:180px;object-fit:contain;border-radius:12px}
.zpending>span{display:block;white-space:pre-wrap;overflow-wrap:anywhere}
.zpending small{display:block;color:var(--mut);margin:6px 0}
.zpending progress{width:100%;height:3px;accent-color:var(--fg)}
.zpending button{background:var(--srf2);color:var(--fg);border:0;border-radius:12px;padding:8px 12px;margin:4px;font:inherit;font-size:12px}
@keyframes zfade{from{opacity:0}}
#app .cl[hidden],.zolder[hidden]{display:none!important}
.zolder{display:block;border:0;border-radius:18px;background:var(--srf);color:var(--mut);padding:10px 16px;margin:12px auto;font:inherit;font-size:13px}
.zchatsearch{padding:8px 14px 12px}
.zchatsearch input{width:100%;border:1px solid var(--line);border-radius:18px;background:var(--srf);padding:12px 14px;color:var(--fg);font:inherit}
.zchatsearch p{color:var(--mut);text-align:center}

/* ---------- меню сообщения: появляется и исчезает целиком ---------- */
.z113cm{position:fixed;inset:0;z-index:9995;-webkit-tap-highlight-color:transparent}
.z113cm .bg{position:absolute;inset:0;background:rgba(0,0,0,.42);-webkit-backdrop-filter:blur(14px) saturate(1.2);backdrop-filter:blur(14px) saturate(1.2);animation:z113f .2s ease-out both}
html.zlt .z113cm .bg{background:rgba(255,255,255,.35)}
.z113cm.out .bg{animation:z113fo .18s ease-in forwards}
.z113cm .cl{position:absolute;margin:0!important;animation:z113lift .2s var(--chat-ease) both!important;pointer-events:none}
.z113cm.out .cl{animation:z113drop .18s ease-in forwards!important}
.z113cm .cl .tm{position:absolute;right:12px;bottom:6px;font-size:11px;opacity:.55;display:flex;align-items:center;gap:3px}
.z113cm .cl .zed{font-style:normal;margin-right:4px;opacity:.75}
.z113cm .cl .tx::after{content:'';display:inline-block;width:var(--tail-width,60px)!important;height:1px}
.z113actions{position:absolute;width:min(288px,calc(100vw - 24px));max-height:calc(100dvh - 24px);overflow-y:auto;overscroll-behavior:contain;transform-origin:var(--mo,0 0);animation:z113pop .2s var(--chat-ease) both;transition:top .22s var(--chat-ease)}
.z113cm.out .z113actions{animation:z113popout .16s ease-in forwards}
.z113mn{position:relative;width:100%;border-radius:18px;overflow:hidden;background:rgba(32,32,36,.97);-webkit-backdrop-filter:blur(30px);backdrop-filter:blur(30px);box-shadow:0 12px 32px rgba(0,0,0,.4),inset 0 0 0 .5px rgba(255,255,255,.1)}
html.zlt .z113cm .z113mn{background:rgba(250,250,252,.96);box-shadow:0 12px 32px rgba(0,0,0,.14),inset 0 0 0 .5px rgba(0,0,0,.08)}
.z113mn button{display:flex;align-items:center;gap:12px;width:100%;height:48px;padding:0 16px;border:0;background:none;font:inherit;font-size:15px;font-weight:500;color:var(--fg);text-align:left}
.z113mn button+button{box-shadow:inset 0 .5px 0 rgba(127,127,127,.25)}
.z113mn button:active{background:rgba(127,127,127,.16)}
.z113mn button svg{width:20px;height:20px;flex:none;margin-left:auto}
.z113mn button.dl{color:#ff453a}
/* реакции в меню: лента листается вбок без раскрытия, стрелка открывает все сразу */
.z113reactions{display:flex;align-items:center;gap:2px;padding:4px;margin-bottom:8px;border-radius:24px;background:var(--srf2);border:1px solid var(--line);overflow:hidden}
.z113rs{flex:1;min-width:0;display:flex;gap:2px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;touch-action:pan-x;-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 20px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 20px),transparent)}
.z113rs::-webkit-scrollbar{display:none}
.z113reactions button{flex:0 0 36px;height:40px;padding:0;border:0;border-radius:20px;background:none;color:var(--fg);font-family:"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",sans-serif;font-size:26px;font-weight:400;line-height:40px;transition:transform .18s var(--chat-spring),background-color .15s}
.z113rs button:nth-child(-n+9){animation:z113em .34s var(--chat-spring) both;animation-delay:calc(var(--k,0) * 22ms + 60ms)}
@keyframes z113em{from{opacity:0;transform:scale(.3) translateY(6px)}}
.z113reactions button:active{transform:scale(1.25)}
.z113reactions button[aria-pressed=true]{background:#ffffff24}
html.zlt .z113reactions button[aria-pressed=true]{background:#0000000f}
.z113reactions [data-expand]{flex:0 0 36px;display:flex;align-items:center;justify-content:center;color:var(--mut)}
.z113reactions [data-expand] svg{width:22px;height:22px;transition:transform .22s var(--chat-ease)}
.z113reactions [data-expand][aria-expanded=true] svg{transform:rotate(180deg)}
/* реакция прилетает к сообщению: летящий значок, хлопок у места посадки, искры */
.z113fly{position:fixed;z-index:9996;display:flex;align-items:center;justify-content:center;font-family:"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",sans-serif;font-size:26px;line-height:1;pointer-events:none;will-change:transform}
.z113spark{position:fixed;z-index:9996;font-family:"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji",sans-serif;font-size:12px;line-height:1;pointer-events:none;will-change:transform,opacity}
.z113emoji{display:grid;grid-template-rows:0fr;opacity:0;margin-bottom:0;transition:grid-template-rows .22s var(--chat-ease),opacity .2s ease-out,margin-bottom .22s var(--chat-ease)}
.z113emoji.open{grid-template-rows:1fr;opacity:1;margin-bottom:8px}
.z113emoji>div{overflow:hidden;min-height:0}
.z113emoji section{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;max-height:230px;overflow:auto;padding:8px;background:var(--srf2);border-radius:18px;overscroll-behavior:contain}
.z113emoji button{font-size:24px;height:36px;padding:0;background:none;border:0;border-radius:10px;color:var(--fg);transition:transform .15s ease-out}
.z113emoji button:active{transform:scale(.9)}
@keyframes z113f{from{opacity:0}}
@keyframes z113fo{to{opacity:0}}
@keyframes z113lift{from{box-shadow:0 0 0 rgba(0,0,0,0)}to{box-shadow:0 12px 20px rgba(0,0,0,.35)}}
@keyframes z113drop{from{box-shadow:0 12px 20px rgba(0,0,0,.35)}to{box-shadow:0 0 0 rgba(0,0,0,0)}}
@keyframes z113pop{from{opacity:0;transform:translateY(var(--mdy,-6px)) scale(.96)}}
@keyframes z113popout{to{opacity:0;transform:scale(.97)}}

/* ---------- листы: пересылка, список закреплённых ---------- */
.z113forward .z109pn{height:min(78dvh,680px)}
.z113forward .z109bd{padding-bottom:calc(18px + var(--zsab))}
.z113forward .cl{display:flex;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line);border-radius:0;background:none;color:var(--fg);font:inherit;padding:14px 0}
.z113forward .cl:active{background:var(--srf)}
.z113forward .thumb{flex:none}
.zpinrow{display:flex;align-items:center;gap:12px;width:100%;padding:14px 0;border:0;border-bottom:1px solid var(--line);background:none;color:var(--fg);font:inherit;text-align:left}
.zpinrow img{width:40px;height:40px;border-radius:8px;object-fit:cover}
.zpinrow span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- админка: переписка ---------- */
.z113ad .m{margin:6px 0;padding:10px 12px;border-radius:14px;background:var(--srf);max-width:86%}
.z113ad .m.r{margin-left:auto;background:var(--srf2)}
.z113ad .m.del{box-shadow:inset 0 0 0 1.5px #ff453a}
.z113ad .m small{display:block;font-size:11px;color:var(--mut);margin-top:4px}
.z113ad .m .ed{margin-top:6px;padding-top:6px;border-top:1px dashed var(--line);font-size:12px;color:var(--mut)}
.z113ad .m img{max-width:100%;border-radius:10px;margin-top:4px}
.z113ad .tag{display:inline-block;padding:2px 7px;border-radius:999px;font-size:10.5px;font-weight:700;background:rgba(255,69,58,.15);color:#ff453a;margin-left:6px}

/* ---------- меню получения заказа (z113.js, zReceive) ---------- */
.z113rv{overflow:hidden;padding-bottom:4px}
.z113rv>section{display:none}
.z113rv[data-step="check"]>[data-s="check"],.z113rv[data-step="rate"]>[data-s="rate"],.z113rv[data-step="problem"]>[data-s="problem"]{display:block}
.z113ri{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--line);border-radius:18px;background:var(--srf)}
.z113ri img,.z113ri>i{flex:none;width:48px;height:48px;border-radius:12px;object-fit:cover;background:var(--srf2)}
.z113ri>div{min-width:0}
.z113ri b{display:block;font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.z113ri span{display:block;margin-top:2px;font-size:13px;color:var(--mut);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.z113rp{margin:12px 0 0;font-size:14px;line-height:20px;color:var(--mut)}
.z113rc,.z113rq{margin-top:12px;border:1px solid var(--line);border-radius:18px;background:var(--srf);overflow:hidden}
.z113rc button,.z113rq button{display:flex;align-items:center;gap:12px;width:100%;min-height:52px;margin:0;padding:12px;border:0;border-top:1px solid var(--line);border-radius:0;background:none;color:var(--fg);font:inherit;font-size:15px;line-height:20px;text-align:left;-webkit-tap-highlight-color:transparent}
.z113rc button:first-child,.z113rq button:first-child{border-top:0}
.z113rc button:active,.z113rq button:active{background:var(--srf2)}
.z113rc .bx{flex:none;width:24px;height:24px;border:2px solid var(--line);border-radius:8px;display:flex;align-items:center;justify-content:center;transition:background-color .15s,border-color .15s}
.z113rc .bx svg{width:16px;height:16px;color:var(--bg);stroke-width:2.4;stroke-dasharray:24;stroke-dashoffset:24;transition:stroke-dashoffset .2s ease-out}
.z113rc [aria-checked="true"] .bx{background:var(--fg);border-color:var(--fg)}
.z113rc [aria-checked="true"] .bx svg{stroke-dashoffset:0}
.z113rq .rd{flex:none;width:20px;height:20px;border:2px solid var(--line);border-radius:50%;transition:border-color .15s,border-width .15s}
.z113rq [aria-checked="true"] .rd{border:6px solid var(--fg)}
.z113rv textarea{display:block;width:100%;min-height:96px;height:auto!important;overflow-y:auto!important;margin:12px 0 0;padding:12px 14px;box-sizing:border-box;border-radius:18px;font-size:15px;line-height:20px;resize:none}
.z113rgo{display:block;width:100%;margin-top:16px;text-align:center;transition:opacity .15s}
.z113rgo:disabled{opacity:.4}
.z113rn{margin:8px 0 0;font-size:12px;line-height:16px;color:var(--mut);text-align:center}
.z113rl{display:block;width:100%;height:44px;margin-top:4px;padding:0;border:0;background:none;color:var(--fg);font:inherit;font-size:15px}
.z113rv [data-s="rate"]{text-align:center}
.z113rv [data-s="rate"] h3{margin:8px 0 0;font-size:20px;font-weight:700}
.z113rok{display:flex;justify-content:center;margin-top:8px}
.z113rok svg{width:64px;height:64px;color:var(--fg);stroke-width:2}
.z113rok circle{stroke-dasharray:151;stroke-dashoffset:151;animation:z113draw .5s ease-out forwards}
.z113rok path{stroke-dasharray:32;stroke-dashoffset:32;animation:z113draw .26s .4s ease-out forwards}
@keyframes z113draw{to{stroke-dashoffset:0}}
.z113rs5{display:flex;justify-content:center;gap:4px;margin-top:16px}
.z113rs5 button{width:48px;height:48px;padding:0;border:0;background:none;color:var(--line);display:flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent}
.z113rs5 svg{width:36px;height:36px;fill:transparent;transition:fill .15s,color .15s}
.z113rs5 button.on{color:var(--fg)}
.z113rs5 button.on svg{fill:var(--fg)}
.z113rlb{min-height:16px;margin-top:4px;font-size:13px;line-height:16px;color:var(--mut)}
.z113rx2{display:grid;grid-template-rows:0fr;transition:grid-template-rows .24s var(--chat-ease)}
.z113rx2.open{grid-template-rows:1fr}
.z113rx2>div{min-height:0;overflow:hidden}

/* ---------- меньше движения ---------- */
@media (prefers-reduced-motion:reduce){
  #msgs *,.send *,.send,#pins *,.z113emoji,.z113emoji *,.z113reactions *{animation:none!important;transition:none!important}
  .z113rcv *{animation:none!important;transition:none!important}
  .z113cm .cl,.z113cm .z113actions{animation:z113f .12s linear both!important}
  .z113cm.out .z113actions,.z113cm.out .cl{animation:z113fo .12s linear forwards!important}
}
