/* ══════════════════════════════════════════════════════════════════════════
   Laya Client App v2 — только то, чего нет в pm.css (каркас кабинета devmanager).
   Свои классы начинаются с «x». Экран не листается: всё ужато под одно окно.
   Движение — transform и opacity.
   ══════════════════════════════════════════════════════════════════════════ */
:root { --sea: #6fd6c9; --xe: cubic-bezier(0.22, 1, 0.36, 1); --xg: rgba(14, 14, 16, 0.58); }
.rail { display: none; }
.scene { padding-top: 4px; }
.head.cab { padding-bottom: 10px; gap: 4px; }
.head.cab .title { display: flex; align-items: center; gap: 10px; font-size: 24px; padding-right: 0; }
.body.top { gap: 10px; overflow: hidden; }
.body.top > * { flex-shrink: 0; }
.body .sec { margin: 4px 0 -2px; }
.fbar { margin-bottom: 10px; }
.fbar:empty { margin: 0; }

/* появление: плитки по очереди, без «въезда» всего экрана */
.scene.xin .body > * { animation: xUp 0.55s var(--xe) both; }
.scene.xin .body > :nth-child(2) { animation-delay: 0.05s; }
.scene.xin .body > :nth-child(3) { animation-delay: 0.1s; }
.scene.xin .body > :nth-child(n + 4) { animation-delay: 0.15s; }
.scene.xin .xb, .scene.xin .xu, .scene.xin .xc, .scene.xin .xa, .scene.xin .xv { animation: xUp 0.6s var(--xe) both; animation-delay: var(--d, 0ms); }
.scene.still .body > *, .scene.still .xb, .scene.still .xu, .scene.still .xc, .scene.still .xa, .scene.still .xv { animation: none; }
.flist.fl-in > * { animation: xUp 0.4s var(--xe) both; }
@keyframes xUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }

/* чипы-фильтры */
.xchips .chip { font-size: 12.5px; font-weight: 600; padding: 8px 13px; }
.xchips .chip b { font-weight: 700; opacity: 0.55; margin-left: 2px; }
html.gem .xchips .chip:not(.on) { background-color: var(--xg); }
.stat b i { font-style: normal; }

/* hero-карточка главной */
.xhero { position: relative; display: block; width: 100%; height: 190px; padding: 0; border: 1px solid var(--line); border-radius: 22px; overflow: hidden; background: #111; cursor: pointer; text-align: left; color: var(--sand); font: inherit; isolation: isolate; }
.xhero img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2; transform-origin: 60% 40%; animation: xKen 20s ease-in-out infinite alternate; }
.xhero::after { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, rgba(11, 11, 12, 0.88) 0%, rgba(11, 11, 12, 0.55) 55%, rgba(11, 11, 12, 0.1) 100%); }
@keyframes xKen { from { transform: scale(1.04); } to { transform: scale(1.18) translate3d(-3%, -2%, 0); } }
.xhero-t { position: absolute; left: 14px; bottom: 12px; right: 90px; display: flex; flex-direction: column; gap: 2px; }
.xhero-t b { font: 700 17px/1.2 var(--f-display); }
.xhero-t small { font-size: 11.5px; color: rgba(237, 234, 226, 0.78); line-height: 1.3; }
.xhero-pill { position: absolute; right: 10px; top: 10px; display: flex; align-items: center; gap: 5px; height: 26px; padding: 0 10px; border-radius: 13px; background: rgba(11, 11, 12, 0.55); font-size: 11px; font-weight: 600; }
.xhero-pill svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.8; }

/* быстрые вопросы Насте прямо на экране */
.xqs { display: flex; gap: 6px; overflow-x: auto; margin: 0 -18px; padding: 0 18px; scrollbar-width: none; }
.xqs::-webkit-scrollbar { display: none; }
.xqs .chip { flex: 0 0 auto; }
.xqs .chip { font-size: 12px; font-weight: 600; padding: 8px 12px; color: var(--sand); }
html.gem .xqs .chip { background-color: var(--xg); }

/* три лучших предложения в ряд */
.xbest { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.xb { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 0 0 9px; border: 1px solid var(--line); border-radius: 16px; overflow: hidden; background: var(--xg); color: var(--sand); text-align: left; font: inherit; cursor: pointer; min-width: 0; }
.xb:active, .xu:active, .xc:active, .xa:active, .xv:active, .xhero:active { transform: scale(0.97); }
.xb-img { position: relative; display: block; width: 100%; aspect-ratio: 4 / 3; overflow: hidden; margin-bottom: 5px; }
.xb-img img { width: 100%; height: 100%; object-fit: cover; }
.xb-img em { position: absolute; left: 6px; top: 6px; font-style: normal; font: 800 10.5px/1 var(--f-ui); padding: 4px 6px; border-radius: 7px; background: var(--lime); color: #0b0b0c; }
.xb-t { font-size: 11px; color: var(--mist); padding: 0 9px; }
.xb-p { font: 700 16px/1.1 var(--f-display); color: var(--lime); padding: 0 9px; }
.xb-p small { font-size: 10px; font-weight: 600; color: var(--faint); }
.xb-c { font-size: 10px; color: var(--faint); padding: 0 9px; white-space: nowrap; }

/* сетка юнитов: 3 в ряд, весь остаток виден сразу */
.xgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; }
.xu { position: relative; display: flex; flex-direction: column; align-items: flex-start; gap: 1px; padding: 9px 10px; border: 1px solid var(--line); border-radius: 14px; background: var(--xg); color: var(--sand); font: inherit; cursor: pointer; text-align: left; }
.xu b { font: 700 14px/1.15 var(--f-display); }
.xu span { font-size: 12px; color: var(--lime); font-weight: 700; }
.xu em { position: absolute; right: 8px; top: 9px; font-style: normal; font-size: 10px; font-weight: 700; color: var(--sea); }

/* плеер и плейлист */
.xplayer { position: relative; border-radius: 20px; overflow: hidden; border: 1px solid var(--line); background: #000; }
.xplayer video { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; background: #000; }
.xplayer-l { position: absolute; left: 10px; top: 10px; font-size: 11px; font-weight: 600; padding: 4px 9px; border-radius: 9px; background: rgba(11, 11, 12, 0.6); pointer-events: none; }
.xlist { display: grid; grid-template-columns: repeat(4, 1fr); gap: 7px; }
.xv { position: relative; padding: 0; border: 1px solid var(--line); border-radius: 13px; overflow: hidden; aspect-ratio: 1 / 1; background: #111; cursor: pointer; color: var(--sand); font: inherit; }
.xv img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0.75; }
.xv span { position: absolute; left: 0; right: 0; bottom: 0; padding: 14px 6px 6px; font-size: 10.5px; font-weight: 700; background: linear-gradient(180deg, rgba(11, 11, 12, 0), rgba(11, 11, 12, 0.85)); text-align: center; }
.xv.on { border-color: var(--lime); box-shadow: 0 0 0 1px var(--lime); }
.xv.on img { opacity: 1; }
.xacts { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; }
.xa, .xc { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 11px 11px 12px; border: 1px solid var(--line); border-radius: 16px; background: var(--xg); color: var(--sand); text-align: left; font: inherit; cursor: pointer; min-width: 0; }
.xa i, .xc i { width: 32px; height: 32px; border-radius: 10px; display: grid; place-items: center; background: rgba(237, 234, 226, 0.06); margin-bottom: 6px; }
.xa i svg, .xc i svg { width: 18px; height: 18px; fill: none; stroke: var(--lime); stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.xa b, .xc b { font: 700 13.5px/1.2 var(--f-display); }
.xa small, .xc small { font-size: 11px; color: var(--faint); line-height: 1.3; }

/* связь */
.xcgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.xc { padding: 14px 13px; min-height: 112px; }
.xnote { font-size: 11.5px; color: var(--faint); text-align: center; line-height: 1.4; }
.xask-q, .xdone { display: flex; flex-direction: column; gap: 8px; padding: 16px; border-radius: 20px; border: 1px solid var(--line); background: var(--xg); }
.xask-q > b, .xdone > b { font: 700 16px/1.3 var(--f-display); }
.xask-q > span, .xdone > span { font-size: 13px; color: var(--mist); }
.xdone em { font-style: normal; color: var(--faint); font-size: 12px; }
.xopt { height: 48px; border-radius: 14px; border: 1px solid var(--line-2); background: rgba(237, 234, 226, 0.04); color: var(--sand); font: 600 14px/1 var(--f-ui); text-align: left; padding: 0 14px; cursor: pointer; }
.xopt:active { background: var(--lime); color: #0b0b0c; }
.xlink { align-self: flex-start; background: none; border: 0; color: var(--faint); font: 600 13px/1 var(--f-ui); padding: 8px 2px 0; cursor: pointer; }
.xdone { align-items: center; text-align: center; padding: 24px 16px; }
.xdone-ic { width: 58px; height: 58px; border-radius: 50%; display: grid; place-items: center; background: var(--lime); color: #0b0b0c; font: 800 26px/1 var(--f-ui); animation: xPop 0.6s var(--xe) both; }
.xdone .ghost.mini { flex: 0 0 auto; width: 160px; margin-top: 6px; }
@keyframes xPop { from { transform: scale(0.4); opacity: 0; } to { transform: none; opacity: 1; } }

/* строка Насти над нижним меню — на каждом экране */
.xask { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; margin-top: 10px; padding: 5px 5px 5px 6px; border: 1px solid var(--line-2); border-radius: 22px; background: var(--xg); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); cursor: text; transition: border-color 0.2s; }
.xask.on { border-color: rgba(209, 224, 90, 0.45); }
.xask-ava, .xnav-ava { position: relative; flex: 0 0 auto; display: block; border-radius: 50%; overflow: hidden; background: #1a1a1d; box-shadow: 0 0 0 1.5px rgba(237, 234, 226, 0.25); }
.xask-ava img, .xnav-ava img, .xava img { display: block; width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
.xask-ava { width: 32px; height: 32px; }
.xask-in { flex: 1 1 auto; min-width: 0; height: 36px; display: flex; align-items: center; overflow: hidden; white-space: pre; font: 500 16px/1 var(--f-ui); color: var(--sand); padding: 0 2px; -webkit-user-select: none; user-select: none; }
.xask-in .ph { color: var(--faint); font-size: 14.5px; white-space: nowrap; }
.xask-in .caret { display: inline-block; width: 2px; height: 20px; margin: 0 1px; border-radius: 1px; background: var(--lime); animation: xCaret 1s steps(1) infinite; flex: 0 0 auto; }
@keyframes xCaret { 50% { opacity: 0; } }
.xask-go { flex: 0 0 36px; height: 36px; border-radius: 50%; border: 0; background: var(--lime); display: grid; place-items: center; cursor: pointer; }
.xask-go svg { width: 17px; height: 17px; fill: none; stroke: #0b0b0c; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.xnav-ava { width: 22px; height: 22px; }
.ptab.on .xnav-ava { box-shadow: 0 0 0 1.5px var(--ink); }

/* переписка с Настей */
.xava { position: relative; flex: 0 0 40px; width: 40px; height: 40px; border-radius: 50%; padding: 2px; isolation: isolate; }
.xava::before { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: 50%; background: conic-gradient(from 0deg, #4285f4, #9b72cb, #d96570, #f9ab00, #4285f4); animation: ldSpin 8s linear infinite; }
.xava > img { position: relative; z-index: 1; background: #141416; }
.xava > i { position: absolute; z-index: 2; right: -1px; bottom: 0; width: 10px; height: 10px; border-radius: 50%; background: #4ade80; border: 2px solid #0b0b0c; }
.xchatbody { overflow: hidden; }
.xchat { flex: 1 1 auto !important; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 7px; padding-bottom: 2px; scrollbar-width: none; }
.xchat::-webkit-scrollbar { display: none; }
.xm { max-width: 88%; padding: 9px 12px; border-radius: 16px; font-size: 14px; line-height: 1.42; animation: xMsg 0.35s var(--xe) both; }
@keyframes xMsg { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.xm.ai { align-self: flex-start; background: var(--xg); border: 1px solid var(--line); border-bottom-left-radius: 5px; }
.xm.me { align-self: flex-end; background: var(--lime); color: #0b0b0c; border-bottom-right-radius: 5px; font-weight: 500; }
.xm-go { display: block; margin-top: 8px; height: 32px; padding: 0 12px; border-radius: 10px; border: 1px solid var(--line-2); background: rgba(237, 234, 226, 0.06); color: var(--lime); font: 600 12.5px/1 var(--f-ui); cursor: pointer; }
.xtyping { display: flex; align-items: center; gap: 4px; }
.xtyping span { font-size: 12px; font-weight: 600; margin-right: 4px; background: var(--gemini-grad); background-size: 300% 100%; -webkit-background-clip: text; background-clip: text; color: transparent; animation: xGrad 2.4s linear infinite; }
@keyframes xGrad { to { background-position: 300% 0; } }
.xtyping i { width: 6px; height: 6px; border-radius: 50%; background: var(--mist); animation: xDot 1.2s ease-in-out infinite; }
.xtyping i:nth-of-type(2) { animation-delay: 0.15s; }
.xtyping i:nth-of-type(3) { animation-delay: 0.3s; }
@keyframes xDot { 0%, 100% { transform: translateY(0); opacity: 0.4; } 50% { transform: translateY(-4px); opacity: 1; } }
.xq .chip { font-size: 12px; }

/* поверх кабинета (юнит, PDF, карта, фото) — тот же слой, что «Статистика» в devmanager */
.xovl { z-index: 95; }
.xovl .sttl { min-width: 0; }
.xovl .sttl h2 { font-size: 22px; display: flex; align-items: center; gap: 8px; }
.xoff { font: 800 12px/1 var(--f-ui); padding: 5px 7px; border-radius: 8px; background: var(--lime); color: #0b0b0c; }
.xub { gap: 10px; padding-bottom: calc(14px + env(safe-area-inset-bottom, 0px)); }
.xpics { display: flex; gap: 8px; overflow-x: auto; scroll-snap-type: x mandatory; margin: 0 -16px; padding: 0 16px; scrollbar-width: none; }
.xpics::-webkit-scrollbar { display: none; }
.xpics { align-items: flex-start; }
.xpics img { flex: 0 0 86%; width: 86%; height: 178px; object-fit: cover; border-radius: 16px; scroll-snap-align: center; border: 1px solid var(--line); }
.xpics img.plan { object-fit: contain; background: #f3f3f0; }
.xmeta { font-size: 13px; color: var(--mist); }
.xprice { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; }
.xprice > div { padding: 9px 11px; border-radius: 14px; background: var(--xg); border: 1px solid var(--line); display: flex; flex-direction: column; gap: 2px; }
.xprice small { font-size: 10.5px; color: var(--faint); }
.xprice s { font: 600 14px/1.2 var(--f-ui); color: var(--faint); }
.xprice b { font: 700 16px/1.2 var(--f-display); color: var(--lime); }
.xprice b.sea { color: var(--sea); }
.xprice span { font: 600 14px/1.2 var(--f-ui); }
.xrows .prow { padding: 9px 14px; font-size: 13px; }
.xbtns { display: grid; grid-template-columns: 1fr 1.4fr; gap: 8px; align-items: center; }
.xbtns .ghost.mini { display: flex; align-items: center; justify-content: center; gap: 6px; height: 48px; }
.xbtns .ghost.mini svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.8; }
.xcta { height: 48px; }
.xpdf { gap: 8px; align-items: center; }
.xpage { display: block; width: 100%; height: auto; border-radius: 10px; background: #fff; }
.xgv, .xmap iframe { width: 100%; flex: 1 1 auto; min-height: 60vh; border: 0; border-radius: 16px; background: #1a1a1c; }
.xmap { gap: 8px; }
.xphotos { gap: 8px; }
.xpics.tall figure { flex: 0 0 86%; margin: 0; position: relative; scroll-snap-align: center; }
.xpics.tall img { width: 100%; height: 62vh; flex: none; }
.xpics.tall figcaption { position: absolute; left: 12px; bottom: 12px; font: 700 14px/1.2 var(--f-display); text-shadow: 0 1px 8px rgba(0, 0, 0, 0.7); }
.xload { display: flex; align-items: center; gap: 5px; margin-top: 30vh; color: var(--mist); font-size: 13px; }
.xload i { width: 6px; height: 6px; border-radius: 50%; background: var(--lime); animation: xDot 1.2s ease-in-out infinite; }
.xload i:nth-of-type(2) { animation-delay: 0.15s; }
.xload i:nth-of-type(3) { animation-delay: 0.3s; }
.xload span { margin-left: 6px; }

/* невысокие экраны: ужимаем, чтобы всё влезло без прокрутки */
@media (max-height: 700px) {
  .xhero { height: 130px; }
  .xqs-sec { display: none; }
  .xhero-t small:last-child { display: none; }
  .xb-img { aspect-ratio: 16 / 10; }
  .xu { padding: 7px 9px; }
  .xc { min-height: 96px; padding: 12px; }
  .head.cab .title { font-size: 21px; }
}
@media (prefers-reduced-motion: reduce) { .xhero img, .xava::before, .xtyping span { animation: none; } }

/* ══════════════ дерево вопросов Насти ══════════════ */
.xtree { flex: 0 0 auto; margin-top: 8px; }
.xt-top { display: flex; align-items: center; gap: 8px; height: 30px; margin-bottom: 6px; }
.xt-ttl { flex: 1 1 auto; min-width: 0; font: 700 13.5px/1 var(--f-display); color: var(--sand); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xt-back { flex: 0 0 auto; height: 30px; padding: 0 12px; border-radius: 15px; border: 1px solid var(--line-2); background: var(--xg); color: var(--sand); font: 600 12.5px/1 var(--f-ui); cursor: pointer; }
.xt-mgr { flex: 0 0 auto; display: flex; align-items: center; gap: 5px; height: 30px; padding: 0 11px; border-radius: 15px; border: 0; background: rgba(209, 224, 90, 0.14); color: var(--lime); font: 700 12px/1 var(--f-ui); cursor: pointer; }
.xt-mgr svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.9; }
.xt-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.xt-b { position: relative; display: flex; align-items: center; gap: 8px; height: 40px; padding: 0 10px; border-radius: 13px; border: 1px solid var(--line); background: var(--xg); color: var(--sand); font: 600 13px/1.15 var(--f-ui); text-align: left; cursor: pointer; min-width: 0; }
.xt-b i { flex: 0 0 auto; font-style: normal; font-size: 15px; width: 18px; text-align: center; }
.xt-b span { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xt-b em { flex: 0 0 auto; font-style: normal; font-size: 18px; color: var(--lime); margin-top: -2px; }
.xt-b.br { border-color: var(--line-2); }
.xt-b:active, .xt-back:active, .xt-mgr:active { transform: scale(0.97); }
.xt-grid.fwd > * { animation: xFwd 0.42s var(--xe) both; }
.xt-grid.bwd > * { animation: xBwd 0.42s var(--xe) both; }
.xt-grid > :nth-child(2) { animation-delay: 0.03s; } .xt-grid > :nth-child(3) { animation-delay: 0.06s; } .xt-grid > :nth-child(4) { animation-delay: 0.09s; } .xt-grid > :nth-child(5) { animation-delay: 0.12s; } .xt-grid > :nth-child(n + 6) { animation-delay: 0.15s; }
@keyframes xFwd { from { opacity: 0; transform: translateX(22px); } to { opacity: 1; transform: none; } }
@keyframes xBwd { from { opacity: 0; transform: translateX(-22px); } to { opacity: 1; transform: none; } }
.t-chat .ptabs { margin-top: 8px; }
.xchat { -webkit-mask-image: linear-gradient(180deg, transparent 0, #000 18px); mask-image: linear-gradient(180deg, transparent 0, #000 18px); padding-top: 12px; }

/* лента вопросов над своей клавиатурой */
.xstrip { flex: 0 0 auto; display: flex; gap: 6px; overflow-x: auto; margin: 8px -18px 0; padding: 0 18px; scrollbar-width: none; }
.xstrip::-webkit-scrollbar { display: none; }
.xstrip .chip { flex: 0 0 auto; font-size: 12px; font-weight: 600; padding: 7px 11px; color: var(--sand); }
html.gem .xstrip .chip { background-color: var(--xg); }

/* ══════════════ своя клавиатура ══════════════ */
.xkb { flex: 0 0 auto; margin: 8px -14px calc(-8px - env(safe-area-inset-bottom, 0px)); padding: 7px 4px calc(8px + env(safe-area-inset-bottom, 0px)); background: rgba(18, 18, 21, 0.92); border-top: 1px solid var(--line); -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px); animation: xKbUp 0.32s var(--xe) both; touch-action: manipulation; -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
@keyframes xKbUp { from { transform: translateY(40%); opacity: 0; } to { transform: none; opacity: 1; } }
.scene.kbon.still .xkb { animation: none; }
.xk-row { display: flex; justify-content: center; gap: 5px; padding: 0 2px; margin-bottom: 9px; }
.xk-row:last-child { margin-bottom: 0; }
.kk { flex: 1 1 0; min-width: 0; height: 42px; padding: 0; border: 0; border-radius: 8px; background: rgba(237, 234, 226, 0.13); color: var(--sand); font: 500 19px/1 var(--f-ui); display: grid; place-items: center; cursor: pointer; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.45); transition: background 0.08s; touch-action: manipulation; -webkit-tap-highlight-color: transparent; }
.kk.dn { background: rgba(237, 234, 226, 0.3); }
.kk svg { width: 21px; height: 21px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.kk.fn { background: rgba(237, 234, 226, 0.06); font-size: 14px; font-weight: 600; }
.kk.fn.dn { background: rgba(237, 234, 226, 0.22); }
.xk-row.r2 .kk.sh, .xk-row.r2 .kk.bs { flex: 1.4 1 0; }
.kk.sh.on { background: var(--sand); color: #0b0b0c; }
.kk.sh.on svg { fill: #0b0b0c; }
.xk-row.r3 .kk.fn { flex: 0 0 13%; }
.kk.sp { flex: 1 1 auto; font-size: 14px; color: var(--mist); }
.kk.go { background: var(--lime) !important; color: #0b0b0c; }
.kk.go svg { width: 19px; height: 19px; stroke: #0b0b0c; stroke-width: 2; }
/* английская раскладка: 9 клавиш во втором ряду — с отступами по краям, как в iOS */
.xk-row.r1:not(:has(.kk:nth-child(10))) { padding: 0 5%; }
.xk-emo { display: grid; grid-template-columns: repeat(8, 1fr); gap: 4px; height: 153px; overflow-y: auto; padding: 0 4px; margin-bottom: 9px; scrollbar-width: none; }
.xk-emo::-webkit-scrollbar { display: none; }
.kk.em { height: 36px; font-size: 24px; background: none; box-shadow: none; }
.kk.em.dn { background: rgba(237, 234, 226, 0.14); }
/* увеличенная буква над клавишей при нажатии */
.xk-pv { position: fixed; z-index: 200; left: 0; top: 0; min-width: 46px; height: 54px; padding: 0 8px; margin-top: -60px; transform: translateX(-50%) scale(0.6); opacity: 0; display: grid; place-items: center; border-radius: 12px; background: #3a3a3f; color: #fff; font: 600 30px/1 var(--f-ui); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5); pointer-events: none; transition: transform 0.08s ease-out, opacity 0.08s; }
.xk-pv.on { transform: translateX(-50%) scale(1); opacity: 1; }
.xk-pv.alt { background: var(--lime); color: #0b0b0c; }
/* пока открыта клавиатура, переписка забирает всё остальное место */
.scene.kbon .head.cab { padding-bottom: 6px; }

/* ══════════════ Обратная связь ══════════════ */
.head.cab .title .xfb-btn { position: relative; margin-left: auto; flex: 0 0 auto; display: flex; align-items: center; gap: 6px; height: 34px; padding: 0 14px 0 12px; border-radius: 17px; border: 0; background: var(--gemini-grad); background-size: 400% 400%; color: #fff; font: 700 12.5px/1 var(--f-ui); letter-spacing: 0; cursor: pointer; isolation: isolate; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.25); animation: xGem 7s ease-in-out infinite, xPop 0.5s var(--xe) both 0.2s; }
.head.cab .title .xfb-btn::before { content: ""; position: absolute; inset: -3px; z-index: -1; border-radius: 20px; background: inherit; background-size: 400% 400%; filter: blur(10px); opacity: 0.55; animation: xGem 7s ease-in-out infinite, xGlow 3.2s ease-in-out infinite; }
@keyframes xGem { 0%, 100% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } }
@keyframes xGlow { 0%, 100% { opacity: 0.25; } 50% { opacity: 0.7; } }
.xfb-btn svg { width: 15px; height: 15px; fill: #fff; stroke: none; }
.xfb-btn:active { transform: scale(0.95); }
.xfb .sttl { flex: 1 1 auto; }
.xfb .stbody > * { animation: none; }
.xfb .sttl h2 { font-size: 21px; line-height: 1.15; }
.xfb-prog { flex: 0 0 auto; height: 3px; margin: 2px 16px 10px; border-radius: 2px; background: rgba(237, 234, 226, 0.08); overflow: hidden; }
.xfb-prog i { display: block; height: 100%; background: var(--lime); border-radius: 2px; transition: width 0.45s var(--xe); }
.xfbb { gap: 10px; }
.xfbb.fwd > * { animation: xFbF 0.4s var(--xe) backwards; }
.xfbb.bwd > * { animation: xFbB 0.4s var(--xe) backwards; }
@keyframes xFbF { from { opacity: 0; transform: translateX(22px); } }
@keyframes xFbB { from { opacity: 0; transform: translateX(-22px); } }
.xfbb > :nth-child(2) { animation-delay: 0.04s; } .xfbb > :nth-child(3) { animation-delay: 0.08s; } .xfbb > :nth-child(n + 4) { animation-delay: 0.12s; }
.xfb-unit { align-self: flex-start; font-size: 12.5px; color: var(--mist); padding: 7px 12px; border-radius: 12px; background: rgba(209, 224, 90, 0.1); }
.xfb-unit b { color: var(--lime); }
.xfb-kinds { display: flex; flex-direction: column; gap: 8px; }
.xfb-k { display: flex; align-items: center; gap: 12px; padding: 14px 14px 14px 12px; border: 1px solid var(--line); border-radius: 18px; background: var(--xg); color: var(--sand); font: inherit; text-align: left; cursor: pointer; }
.xfb-k i { flex: 0 0 42px; height: 42px; border-radius: 13px; display: grid; place-items: center; background: rgba(209, 224, 90, 0.12); }
.xfb-k i svg { width: 21px; height: 21px; fill: none; stroke: var(--lime); stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.xfb-k > span { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.xfb-k b { font: 700 15.5px/1.2 var(--f-display); }
.xfb-k small { font-size: 12px; color: var(--faint); }
.xfb-k em { font-style: normal; font-size: 22px; color: var(--lime); }
.xfb-k.on, .xsv.on, .xopt.on { border-color: var(--lime); box-shadow: 0 0 0 1px var(--lime); }
.xfb-k:active, .xsv:active, .xopt:active, .np:active { transform: scale(0.97); }
.xsvg { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.xsv { display: flex; align-items: center; gap: 10px; min-width: 0; padding: 12px 10px 12px 12px; border-radius: 18px; border: 1px solid var(--line); background: var(--xg); color: var(--sand); text-align: left; font: inherit; cursor: pointer; }
.xsv-l { flex: 0 0 36px; width: 36px; height: 36px; display: block; }
.xsv-l svg { width: 100%; height: 100%; display: block; border-radius: 11px; }
.xsv-t { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.xsv-t b { font-size: 14px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xsv-t small { font-size: 11.5px; color: var(--faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xfb-opts { display: flex; flex-direction: column; gap: 8px; }
.xfbb .xopt { height: 52px; font-size: 14.5px; background: var(--xg); }
.xopt.on { background: rgba(209, 224, 90, 0.12); }
.xfb-back { align-self: center; padding-top: 4px; }
.xfb-next { flex: 0 0 auto; height: 52px; margin-top: 2px; }
.xfb-field { display: flex; align-items: center; gap: 8px; min-height: 54px; padding: 0 16px; border-radius: 16px; border: 1px solid var(--line-2); background: var(--xg); font: 600 18px/1 var(--f-ui); color: var(--sand); white-space: pre; overflow: hidden; cursor: text; -webkit-user-select: none; user-select: none; }
.xfb-field.on { border-color: rgba(209, 224, 90, 0.55); }
.xfb-field .ph { color: var(--faint); font-weight: 500; }
.xfb-field .caret { display: inline-block; width: 2px; height: 22px; border-radius: 1px; background: var(--lime); animation: xCaret 1s steps(1) infinite; }
.xfb-edit { margin-left: auto; font: 600 12px/1 var(--f-ui); color: var(--lime); }
.xfb-field.ph .xcc { font-size: 15px; color: var(--mist); padding-right: 10px; border-right: 1px solid var(--line-2); white-space: nowrap; }
.xfb-field.ph b { font-weight: 600; letter-spacing: 0.5px; }
.xfb-field.ph .ok { margin-left: auto; font-style: normal; color: #5ed39a; font-size: 18px; }
.xfb-hint { font-size: 12px; color: var(--faint); margin-top: -4px; padding: 0 4px; }
.xfb-tgph { display: flex; align-items: center; gap: 12px; padding: 12px 14px 12px 12px; border-radius: 18px; border: 1px solid rgba(42, 171, 238, 0.45); background: rgba(42, 171, 238, 0.1); color: var(--sand); text-align: left; font: inherit; cursor: pointer; }
.xfb-tgph > span:last-child { display: flex; flex-direction: column; gap: 2px; }
.xfb-tgph b { font-size: 14.5px; font-weight: 700; }
.xfb-tgph small { font-size: 11.5px; color: var(--faint); }
.xfb-or { text-align: center; font-size: 11.5px; color: var(--faint); }
.xfb-cc, .xfb-days, .xfb-tzs { display: flex; gap: 6px; overflow-x: auto; margin: 0 -16px; padding: 0 16px; scrollbar-width: none; }
.xfb-tzs { flex-wrap: wrap; overflow: visible; margin: 0; padding: 0; }
.xfb-cc::-webkit-scrollbar, .xfb-days::-webkit-scrollbar { display: none; }
.xfb-cc .chip, .xfb-days .chip, .xfb-tzs .chip { flex: 0 0 auto; font-size: 12.5px; font-weight: 600; padding: 8px 12px; }
.xfb-cc .chip:not(.on), .xfb-days .chip:not(.on), .xfb-tzs .chip:not(.on) { color: var(--sand); }
html.gem .xfb-cc .chip:not(.on), html.gem .xfb-days .chip:not(.on), html.gem .xfb-tzs .chip:not(.on) { background-color: var(--xg); }
.xnp { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; touch-action: manipulation; -webkit-user-select: none; user-select: none; }
.np { height: 50px; border: 0; border-radius: 13px; background: rgba(237, 234, 226, 0.1); color: var(--sand); font: 600 22px/1 var(--f-ui); display: grid; place-items: center; cursor: pointer; touch-action: manipulation; -webkit-tap-highlight-color: transparent; }
.np.dn { background: rgba(237, 234, 226, 0.26); }
.np.fn { background: rgba(237, 234, 226, 0.04); }
.np svg { width: 23px; height: 23px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.xfb-sub { font-size: 12px; color: var(--faint); text-align: center; }
.xfb-times { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.xfb-times .xt { height: 40px; border-radius: 12px; border: 1px solid var(--line); background: var(--xg); color: var(--sand); font: 600 14px/1 var(--f-ui); cursor: pointer; }
.xfb-times .xt.on { background: var(--lime); border-color: var(--lime); color: #0b0b0c; }
.xfb-tz { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 12px; color: var(--faint); }
.xfb-tz b { color: var(--sand); font-weight: 600; }
.xfb-tz button { margin-left: auto; border: 0; background: none; color: var(--lime); font: 700 12px/1 var(--f-ui); padding: 6px 2px; cursor: pointer; }
.xfb-rows .prow b { text-align: right; max-width: 62%; }
.xfb-err { font-size: 12.5px; color: #ff8a8a; text-align: center; }
.xfb .xkb { margin: 0; flex: 0 0 auto; }
.xfb .xdone { margin-top: 8vh; }
@media (max-height: 700px) {
  .xfb-k { padding: 11px 12px 11px 10px; }
  .np { height: 42px; }
  .xfbb .xopt { height: 46px; }
}

/* правки 28.10 вечер */
.xnm { display: flex; flex-direction: column; gap: 3px; line-height: 1; }
.xnm small { font: 600 11px/1 var(--f-ui); color: var(--faint); letter-spacing: 0; }
.xfb-nm { display: inline-flex; align-items: center; white-space: pre; }
.xfb-nm .caret { margin-left: 1px; }
.xfb-nm .ph { margin-left: 2px; }
.xfb .sttop { gap: 10px; }
.xfb-bk svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.xfb-bk.off { visibility: hidden; }
.xk-row.r3 .kk.fn.hd { flex: 0 0 11%; }
.kk.hd svg { width: 22px; height: 22px; }
@media (prefers-reduced-motion: reduce) { .head.cab .title .xfb-btn, .head.cab .title .xfb-btn::before { animation: none; } }
.t-chat .head.cab { gap: 12px; padding-top: 8px; }

/* календарь записи */
.xcal { display: flex; flex-direction: column; gap: 4px; }
.xcal-w, .xcal-g { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; }
.xcal-w span { text-align: center; font: 600 10.5px/1 var(--f-ui); color: var(--faint); text-transform: uppercase; padding: 2px 0 4px; }
.xcal-w span.we { color: rgba(250, 135, 107, 0.7); }
.xcd { position: relative; height: 38px; border-radius: 11px; border: 1px solid var(--line); background: var(--xg); color: var(--sand); font: 600 14px/1 var(--f-ui); display: grid; place-items: center; cursor: pointer; padding: 0; }
.xcd.off { border-color: transparent; background: none; color: rgba(237, 234, 226, 0.22); cursor: default; }
.xcd.td { border-color: var(--line-2); }
.xcd.on { background: var(--lime); border-color: var(--lime); color: #0b0b0c; }
.xcd i { position: absolute; left: 0; right: 0; bottom: 2px; font: 600 8px/1 var(--f-ui); font-style: normal; text-align: center; opacity: 0.7; }
.xcd:active { transform: scale(0.95); }
.xfb-dayl { text-align: left; color: var(--mist); margin-top: 2px; }
.xfb-tz span { flex: 1 1 auto; line-height: 1.45; }
.xwa .xsv-l.big { width: 58px; height: 58px; flex: 0 0 auto; }
.xwa .xsv-l.big svg { border-radius: 50%; }
.xwa .xfb-next { width: 100%; margin-top: 6px; }
.xwa > span b { color: var(--sand); }
.xwa .ghost.mini { width: auto; padding: 0 18px; }

/* занятость в календаре */
.xcd > b { position: absolute; left: 50%; bottom: 4px; width: 5px; height: 5px; margin-left: -2.5px; border-radius: 50%; }
.xcd.free > b, .xcal-lg b.free { background: #4ade80; }
.xcd.part > b, .xcal-lg b.part { background: linear-gradient(90deg, #4ade80 50%, #ff6b6b 50%); }
.xcd.full > b, .xcal-lg b.full { background: #ff6b6b; }
.xcd.full { color: rgba(237, 234, 226, 0.45); }
.xcd.on > b { box-shadow: 0 0 0 1.5px #0b0b0c; }
.xcd i + b { bottom: auto; top: 4px; }
.xcal-lg { display: flex; gap: 12px; justify-content: center; font-size: 10.5px; color: var(--faint); padding-top: 4px; }
.xcal-lg span { display: flex; align-items: center; gap: 5px; }
.xcal-lg b { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }
.xfb-times .xt.busy { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; border-style: dashed; border-color: rgba(255, 107, 107, 0.35); color: rgba(237, 234, 226, 0.35); font-size: 13px; text-decoration: line-through; cursor: default; }
.xfb-times .xt.busy small { font-size: 9px; text-decoration: none; color: #ff8a8a; font-weight: 600; }

/* ══════════════ Главная: виджеты ══════════════ */
.xhero.sm { height: 132px; }
.xhero.sm .xhero-t { bottom: 10px; }
.xws { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7px; }
.xw { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; min-width: 0; padding: 9px 10px 10px; border: 1px solid var(--line); border-radius: 16px; background: var(--xg); color: var(--sand); font: inherit; text-align: left; cursor: pointer; }
.xw i { font-style: normal; font-size: 17px; line-height: 1; margin-bottom: 5px; }
.xw b { font: 700 15.5px/1.1 var(--f-display); color: var(--lime); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.xw small { font-size: 10.5px; color: var(--faint); line-height: 1.25; }
.xw:active, .xloc:active, .xr:active, .xtm:active { transform: scale(0.97); }
.scene.xin .xw, .scene.xin .xr, .scene.xin .xtm { animation: xUp 0.55s var(--xe) both; animation-delay: var(--d, 0ms); }
.scene.still .xw, .scene.still .xr, .scene.still .xtm { animation: none; }
.xloc { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid var(--line); border-radius: 16px; background: var(--xg); color: var(--sand); font: inherit; text-align: left; cursor: pointer; }
.xloc i { flex: 0 0 34px; height: 34px; border-radius: 11px; display: grid; place-items: center; background: rgba(111, 214, 201, 0.12); }
.xloc i svg { width: 18px; height: 18px; fill: none; stroke: var(--sea); stroke-width: 1.8; }
.xloc span { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.xloc b { font: 700 13.5px/1.2 var(--f-display); }
.xloc small { font-size: 11px; color: var(--faint); }
.xloc em { font-style: normal; font-size: 12px; font-weight: 700; color: var(--sea); white-space: nowrap; }

/* кнопка «Перепродажи»: живой градиент Gemini только по контуру, внутри тёмно-серый */
.head.cab .title .xgb { position: relative; margin-left: auto; flex: 0 0 auto; height: 34px; padding: 0 14px; border-radius: 17px; border: 1.5px solid transparent; color: var(--sand); font: 700 12.5px/1 var(--f-ui); letter-spacing: 0; cursor: pointer;
  background: linear-gradient(#232327, #232327) padding-box, var(--gemini-grad) border-box; background-size: 100% 100%, 400% 400%; animation: xGemB 6s ease-in-out infinite; }
.head.cab .title .xgb::after { content: ""; position: absolute; inset: -2px; z-index: -1; border-radius: 19px; background: var(--gemini-grad); background-size: 400% 400%; filter: blur(8px); opacity: 0.3; animation: xGem 6s ease-in-out infinite; }
.xgb span { position: relative; }
.xgb:active { transform: scale(0.95); }
@keyframes xGemB { 0%, 100% { background-position: 0 0, 0% 50%; } 50% { background-position: 0 0, 100% 50%; } }

/* перепродажи: мини-карточки 2 в ряд */
.xrs { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.xr { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 0 0 10px; border: 1px solid var(--line); border-radius: 16px; overflow: hidden; background: var(--xg); color: var(--sand); font: inherit; text-align: left; cursor: pointer; min-width: 0; }
.xr-img { position: relative; display: block; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; margin-bottom: 6px; }
.xr-img img { width: 100%; height: 100%; object-fit: cover; }
.xr-img em { position: absolute; left: 6px; top: 6px; font: 800 10.5px/1 var(--f-ui); font-style: normal; padding: 4px 6px; border-radius: 7px; background: var(--lime); color: #0b0b0c; }
.xr-img u { position: absolute; right: 6px; top: 6px; text-decoration: none; font: 700 9.5px/1 var(--f-ui); padding: 4px 6px; border-radius: 7px; background: rgba(255, 107, 107, 0.85); color: #fff; }
.xr-t { font-size: 11.5px; color: var(--mist); padding: 0 10px; }
.xr-p { font: 700 15px/1.15 var(--f-display); color: var(--lime); padding: 0 10px; }
.xr-c { font-size: 10.5px; color: var(--faint); padding: 0 10px; }
.xempty .xfb-next { margin-top: 4px; }

/* материалы: лента роликов листается вбок, вертикальный ролик помечен */
.xlist.xscroll { display: flex; gap: 7px; overflow-x: auto; margin: 0 -18px; padding: 0 18px; scrollbar-width: none; }
.xlist.xscroll::-webkit-scrollbar { display: none; }
.xscroll .xv { flex: 0 0 23%; aspect-ratio: 1 / 1; }
.xv.vert { border-color: rgba(209, 224, 90, 0.4); }
.xv-9 { position: absolute; left: 5px; top: 5px; font-style: normal; font: 700 9px/1 var(--f-ui); padding: 3px 5px; border-radius: 6px; background: rgba(11, 11, 12, 0.7); color: var(--lime); }
.xacts.two { grid-template-columns: 1fr 1fr; }
.xvv .xvv-box { flex: 1 1 auto; min-height: 0; display: flex; align-items: center; justify-content: center; padding: 4px 16px calc(16px + env(safe-area-inset-bottom, 0px)); }
.xvv video { height: 100%; max-height: 100%; max-width: 100%; aspect-ratio: 9 / 16; object-fit: contain; border-radius: 18px; background: #000; }

/* условия: плитки 2 в ряд */
.xtms { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; }
.xtm { display: flex; align-items: center; gap: 9px; min-width: 0; padding: 9px 10px; border: 1px solid var(--line); border-radius: 15px; background: var(--xg); color: var(--sand); font: inherit; text-align: left; cursor: pointer; }
.xtm i { flex: 0 0 auto; font-style: normal; font-size: 19px; line-height: 1; }
.xtm span { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.xtm b { font: 700 13px/1.15 var(--f-display); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xtm small { font-size: 10.5px; color: var(--faint); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.xtm-cta { height: 48px; }

/* подробности поверх кабинета */
.xinfo { gap: 10px; }
.xinfo p { margin: 0; font-size: 14.5px; line-height: 1.5; color: var(--sand); }
.xinf { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.xinf span { display: flex; align-items: center; gap: 7px; padding: 8px 10px; border-radius: 12px; background: var(--xg); border: 1px solid var(--line); font-size: 12.5px; }
.xinf i { font-style: normal; font-size: 16px; }
.xinfo-ph { display: flex; align-items: center; justify-content: center; gap: 6px; height: 44px; }
.xinfo-ph svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.8; }
.ptabs .ptab span { font-size: 10px; }
@media (max-height: 700px) {
  .xhero.sm { height: 100px; }
  .xw { padding: 7px 9px 8px; }
  .xw i { margin-bottom: 3px; }
  .xtm { padding: 7px 9px; }
}

/* ── Условия: документы проекта (лента) + сохранение PDF ── */
.xdocs-h { margin-top: 2px; }
.xdocs { display: flex; gap: 7px; overflow-x: auto; margin: 0 -18px; padding: 0 18px 2px; scrollbar-width: none; }
.xdocs::-webkit-scrollbar { display: none; }
.xdoc { flex: 0 0 auto; width: 118px; display: flex; flex-direction: column; align-items: flex-start; gap: 3px; padding: 9px 10px; border: 1px solid var(--line); border-radius: 14px; background: var(--xg); color: var(--sand); font: inherit; text-align: left; cursor: pointer; }
.xdoc i { font-style: normal; font-size: 18px; line-height: 1; margin-bottom: 2px; }
.xdoc b { font: 700 12.5px/1.15 var(--f-display); }
.xdoc small { font-size: 10px; line-height: 1.2; color: var(--faint); }
.xdoc:active { transform: scale(0.97); }
.xdoc.wide { width: 100%; flex-direction: row; align-items: center; gap: 10px; padding: 11px 12px; }
.xdoc.wide i { margin: 0; font-size: 20px; }
.xdoc.wide b { flex: 0 0 auto; }
.xdoc.wide small { flex: 1; text-align: right; color: var(--acid, #D1E05A); }
.scene.xin .xdoc { animation: xUp 0.55s var(--xe) both; animation-delay: var(--d, 0ms); }
.scene.still .xdoc { animation: none; }
.xsave { flex: 0 0 auto; padding: 8px 16px calc(12px + env(safe-area-inset-bottom, 0px)); background: linear-gradient(180deg, rgba(11, 11, 12, 0), rgba(11, 11, 12, 0.92) 30%); }
.xsave .cta { width: 100%; height: 48px; display: flex; align-items: center; justify-content: center; gap: 8px; }
.xsave .cta svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.8; }
.xinfo p { margin: 0; }
.xlink { border: 0; background: none; color: var(--faint); font: inherit; font-size: 13px; text-decoration: underline; text-underline-offset: 3px; padding: 6px; cursor: pointer; }
/* Материалы: три кнопки; инфраструктура с вкладками зон; список документов */
.xacts.three { grid-template-columns: repeat(3, 1fr); }
.xacts.three .xa small { white-space: normal; line-height: 1.2; }
.xinfra { gap: 10px; }
.xinf-tabs { display: flex; gap: 6px; overflow-x: auto; margin: 0 -16px; padding: 0 16px 2px; scrollbar-width: none; flex: 0 0 auto; }
.xinf-tabs::-webkit-scrollbar { display: none; }
.xinf-tabs .chip { flex: 0 0 auto; white-space: nowrap; }
.xinf-pics img { height: 52vh; }
.xinf-pics figcaption { font-size: 12px; opacity: 0.9; }
.xinf-d { display: flex; flex-direction: column; gap: 4px; }
.xinf-d b { font: 700 16px/1.2 var(--f-display); }
.xinf-d span { font-size: 13.5px; line-height: 1.45; color: var(--sand); opacity: 0.85; }
.xdocl { gap: 8px; }

/* ══════════════ Производительность (29.10): тот же вид, без лишней работы видеокарты ══════════════
   1) Фон: размытие было фильтром blur(60–70px) на 5 огромных слоях, которые всё время двигались, —
      видеокарта пересчитывала размытие каждый кадр и держала в памяти слои до 1300×1300 px × плотность экрана.
      Теперь пятна — мягкие радиальные градиенты без фильтра, а вращающийся «конус» — готовая
      размытая картинка 1,4 КБ (gem-conic.webp), слой меньше (120vmax вместо 170vmax).
   2) Подложки меню/строки ввода/клавиатуры/попапов: backdrop-filter над живым фоном = размытие
      каждый кадр. Подложки и так почти непрозрачные — заменены плотным цветом.
   3) Переливы Gemini на кнопках: анимировали background-position (перерисовка каждый кадр, плюс blur
      под ним). Теперь градиент — отдельный слой, который едет transform'ом (только композитор).
   4) Пока открыт попап, приложение свёрнуто или экран не виден — фон стоит на паузе. */
.gembg::before { width: 120vmax; height: 120vmax; margin: -60vmax 0 0 -60vmax; background: url(gem-conic.webp) center / 100% 100% no-repeat; filter: none; }
.gembg i { filter: none; }
.gembg .g1 { background: radial-gradient(circle, rgba(66, 133, 244, 0.42) 0%, rgba(66, 133, 244, 0.3) 22%, rgba(66, 133, 244, 0.14) 44%, rgba(66, 133, 244, 0.04) 60%, rgba(66, 133, 244, 0) 70%); }
.gembg .g2 { background: radial-gradient(circle, rgba(217, 101, 112, 0.38) 0%, rgba(217, 101, 112, 0.27) 22%, rgba(217, 101, 112, 0.13) 44%, rgba(217, 101, 112, 0.04) 60%, rgba(217, 101, 112, 0) 70%); }
.gembg .g3 { background: radial-gradient(circle, rgba(155, 114, 203, 0.42) 0%, rgba(155, 114, 203, 0.3) 22%, rgba(155, 114, 203, 0.14) 44%, rgba(155, 114, 203, 0.04) 60%, rgba(155, 114, 203, 0) 70%); }
.gembg .g4 { background: radial-gradient(circle, rgba(249, 171, 0, 0.21) 0%, rgba(249, 171, 0, 0.15) 22%, rgba(249, 171, 0, 0.07) 44%, rgba(249, 171, 0, 0.02) 60%, rgba(249, 171, 0, 0) 70%); }
.amb { display: none !important; }
html.gem .ptabs, .ptabs { -webkit-backdrop-filter: none; backdrop-filter: none; background: rgba(16, 16, 19, 0.82); }
.xask { -webkit-backdrop-filter: none; backdrop-filter: none; background: rgba(22, 22, 26, 0.86); }
.xkb, .stats, .sheet { -webkit-backdrop-filter: none; backdrop-filter: none; }
html.ovl-on .gembg::before, html.ovl-on .gembg i, html.ovl-on .xhero img,
html.bg-off .gembg::before, html.bg-off .gembg i, html.bg-off * { animation-play-state: paused !important; }

/* перелив кнопки «Обратная связь»: градиентный слой едет transform'ом, свечение — только прозрачностью */
.head.cab .title .xfb-btn { background: #6f7fe0; overflow: visible; animation: none; }
.head.cab .title .xfb-btn > .xgm { position: absolute; inset: 0; z-index: -1; border-radius: inherit; overflow: hidden; }
.head.cab .title .xfb-btn > .xgm::before, .head.cab .title .xgb > .xgm::before { content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 400%; background: var(--gemini-grad); background-size: 100% 100%; animation: xGemT 7s ease-in-out infinite; will-change: transform; }
.head.cab .title .xfb-btn::before { background: var(--gemini-grad); background-size: 100% 100%; filter: blur(10px); animation: xGlow 3.2s ease-in-out infinite; will-change: opacity; }
@keyframes xGemT { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(-75%); } }
/* кнопка «Перепродажи»: тот же приём для обводки — под тёмной заливкой едет градиент */
.head.cab .title .xgb { background: #232327; border: 0; padding: 0 15.5px; animation: none; isolation: isolate; }
.head.cab .title .xgb > .xgm { position: absolute; inset: 0; z-index: -2; border-radius: inherit; overflow: hidden; }
.head.cab .title .xgb > .xgm::after { content: ""; position: absolute; inset: 1.5px; border-radius: 15.5px; background: #232327; }
.head.cab .title .xgb::after { background: var(--gemini-grad); background-size: 100% 100%; animation: none; opacity: 0.22; }
/* «блик» на кнопках: был left (раскладка каждый кадр) — теперь transform */
.cta::after { left: 0 !important; animation-name: sweepT !important; }
@keyframes sweepT { 0%, 62% { transform: translateX(-150%); } 100% { transform: translateX(325%); } }
@media (prefers-reduced-motion: reduce) { .xgm::before { animation: none !important; } }
html.ovl-on .head *, html.ovl-on .head *::before, html.ovl-on .head *::after, html.ovl-on .xava::before { animation-play-state: paused !important; }
.xpdf-more { padding: 10px 0 4px; text-align: center; font-size: 12px; color: var(--faint); }
/* без размытия подложка попапа должна быть плотной, иначе просвечивает экран под ней */
.stats, .stats.xovl { background: #0c0c0e; }

/* ══════════════ Нижнее меню 29.10: крупнее, плашка-тумблер ══════════════ */
.ptabs { position: relative; padding: 6px; border-radius: 25px; gap: 2px; }
.ptab-ind { position: absolute; z-index: 0; top: 6px; bottom: 6px; left: 6px; width: calc((100% - 20px) / 5); pointer-events: none;
  transform: translateX(calc(var(--i, 0) * (100% + 2px))); transition: transform 0.52s cubic-bezier(0.34, 1.3, 0.44, 1); will-change: transform; }
.ptab-ind::before { content: ""; position: absolute; inset: 0; border-radius: 19px; background: var(--lime); box-shadow: 0 6px 18px -8px rgba(209, 224, 90, 0.7); }
.ptabs.mv .ptab-ind::before { animation: xIndSq 0.52s cubic-bezier(0.3, 0.7, 0.4, 1); }
@keyframes xIndSq { 0% { transform: none; } 35% { transform: scaleX(1.3) scaleY(0.9); } 70% { transform: scaleX(0.96) scaleY(1.03); } 100% { transform: none; } }
.ptab, .ptab.on { z-index: 1; background: none; padding: 9px 0 8px; gap: 5px; transition: color 0.32s ease, transform 0.14s; }
.ptab svg { width: 23px; height: 23px; }
.ptabs .ptab span { font-size: clamp(10px, 2.9vw, 11px); letter-spacing: -0.1px; white-space: nowrap; }
.ptab.on { color: var(--ink); }
@media (prefers-reduced-motion: reduce) { .ptab-ind { transition: none; } .ptabs.mv .ptab-ind::before { animation: none; } }

/* ══════════════ Юниты: ячейки крупнее — старая цена, новая, этаж и площадь ══════════════ */
.xgrid.flist { grid-template-columns: 1fr 1fr; gap: 8px; }
.flist .xu { gap: 3px; padding: 11px 12px 10px; border-radius: 16px; }
.flist .xu b { display: flex; width: 100%; align-items: center; justify-content: space-between; font: 700 16px/1.15 var(--f-display); }
.flist .xu b em { position: static; padding: 2px 6px; border-radius: 8px; background: rgba(79, 227, 193, 0.12); font-size: 11px; }
.flist .xu s { font-size: 11.5px; font-weight: 600; color: #ff5a52; text-decoration-thickness: 1.5px; }
.flist .xu span { font-size: 15px; }
.flist .xu small { font-size: 11px; color: var(--faint); }

/* ══════════════ Инфраструктура: сквозная лента ══════════════ */
.xinf-pics figure figcaption { font-size: 12.5px; }
.xinf-end { flex: 0 0 40%; align-self: stretch; margin: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; border: 1px dashed var(--line-2, rgba(237, 234, 226, 0.2)); border-radius: 16px; background: var(--xg); color: var(--sand); font: 700 26px/1 var(--f-display); scroll-snap-align: center; cursor: pointer; }
.xinf-end span { font-size: 13px; font-weight: 600; }

/* Узкие телефоны (≤380px): плитки условий — текст переносится, а не обрезается многоточием */
@media (max-width: 380px) {
  .xtm { gap: 8px; padding: 8px 9px; }
  .xtm i { font-size: 17px; }
  .xtm b, .xtm small { white-space: normal; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
  .xtm b { font-size: 12.5px; }
}
.xacts.three .xa b { min-width: 0; max-width: 100%; overflow-wrap: anywhere; -webkit-hyphens: manual; hyphens: manual; }
.xr .xr-o { padding: 0 10px; margin-top: 2px; font-size: 11.5px; font-weight: 600; color: #ff5a52; text-decoration-thickness: 1.5px; }
/* ===== замок «только Telegram» (браузер) ===== */
.xgate { min-height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 32px 24px calc(32px + env(safe-area-inset-bottom)); gap: 10px; }
.xgate .eyebrow { margin-top: 8px; }
.xgate .title { font-size: 26px; line-height: 1.15; max-width: 320px; }
.xg-mark { width: 76px; height: 76px; border-radius: 24px; display: grid; place-items: center; background: linear-gradient(135deg, #2AABEE, #1E88D0); box-shadow: 0 18px 50px -12px rgba(42,171,238,.55); animation: xgFloat 4s ease-in-out infinite; }
.xg-mark svg { width: 38px; height: 38px; fill: #fff; stroke: #fff; stroke-width: .6; stroke-linejoin: round; }
.xg-mark svg path + path { fill: none; stroke: #1E88D0; stroke-width: 1.4; }
.xg-txt { font-size: 14px; line-height: 1.5; color: var(--muted, #b8b4ab); max-width: 330px; margin: 4px 0 10px; }
.xg-btn { width: 100%; max-width: 330px; height: 52px; display: flex; align-items: center; justify-content: center; text-decoration: none; }
.xgate .xnote a { color: inherit; text-decoration: underline; }
@keyframes xgFloat { 0%,100% { transform: translateY(0) } 50% { transform: translateY(-6px) } }

/* 29.10 утро: экран листается, если не влез (юниты 2 колонки, условия на узких) — чат остаётся как был */
.body.top { overflow-y: auto; overflow-x: hidden; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; scrollbar-width: none; padding-bottom: 6px; }
.body.top::-webkit-scrollbar { display: none; }
.body.top.xchatbody { overflow: hidden; }
/* тип юнита в правом нижнем углу — как номер юнита */
.flist .xu { padding-right: 12px; }
.flist .xu small { padding-right: 46px; }
.flist .xu .xu-t { position: absolute; right: 12px; bottom: 9px; font: 700 16px/1.15 var(--f-display); font-style: normal; color: var(--sand); }
.xm.st { animation: none; }
/* Появление нового сообщения без сдвига вниз: translateY(8px) на iPhone увеличивал высоту ленты,
   прокрутка уезжала к «временному» низу, а после анимации лента отскакивала на ~5px. Масштаб от
   нижнего угла пузыря ленту не удлиняет. */
@keyframes xMsg2 { from { opacity: 0; transform: scale(0.94); } to { opacity: 1; transform: none; } }
.xm { animation-name: xMsg2; transform-origin: 0 100%; }
.xm.me { transform-origin: 100% 100%; }
.xm.st { animation: none; }

/* ══════════════ Генплан (копия блока сайта, мобильная версия) ══════════════ */
.xchips .xmp-chip { display: inline-flex; align-items: center; gap: 6px; border-color: rgba(209, 224, 90, 0.45); color: var(--lime); }
.xchips .xmp-chip svg { width: 15px; height: 15px; stroke: currentColor; fill: none; stroke-width: 1.8; stroke-linejoin: round; }
.xplan { padding: 0 2px 12px; overflow-y: auto; }
.lp { display: flex; flex-direction: column; gap: 10px; animation: xUp 0.45s var(--xe) both; }
.lp-box { position: relative; width: 100%; aspect-ratio: 720 / 1118; max-height: calc(100vh - 200px); margin: 0 auto; border-radius: 26px; overflow: hidden; background: #0a0a0a; border: 1px solid var(--line); }
.lp-box > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity 0.7s; }
.lp-box > img.ok { opacity: 1; }
.lp-fade { position: absolute; inset: auto 0 0 0; height: 48%; background: linear-gradient(to top, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0.45) 45%, rgba(0, 0, 0, 0) 100%); pointer-events: none; z-index: 1; }
.lp-svg { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 2; }
.lp-neon { animation: lpPulse 3s ease-in-out infinite; }
@keyframes lpPulse { 0%, 100% { opacity: 0.72; } 50% { opacity: 1; } }
.lp-tabs { position: absolute; z-index: 3; left: 12px; right: 12px; top: 12px; display: flex; padding: 4px; border-radius: 999px; background: rgba(255, 255, 255, 0.15); border: 1px solid rgba(255, 255, 255, 0.2); }
.lp-tabs button { flex: 1; height: 36px; border: 0; border-radius: 999px; background: transparent; color: rgba(255, 255, 255, 0.82); font: 600 13.5px/1 var(--f-ui); cursor: pointer; transition: background 0.3s, color 0.3s, transform 0.3s; }
.lp-tabs button.on { background: #fff; color: #000; box-shadow: 0 0 15px rgba(255, 255, 255, 0.2); transform: scale(1.02); }
.lp-txt { position: absolute; z-index: 3; left: 16px; right: 16px; bottom: 16px; pointer-events: none; }
.lp-txt.in .lp-txt-in { animation: lpTxt 0.6s var(--xe) both; }
@keyframes lpTxt { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
.lp-txt-in { display: flex; flex-direction: column; gap: 6px; text-shadow: 0 2px 12px rgba(0, 0, 0, 0.6); }
.lp-txt-in b { font: 700 26px/1.1 var(--f-display); color: #fff; }
.lp-txt-in span { font-size: 14px; line-height: 1.45; color: rgba(255, 255, 255, 0.9); }
.lp-acts { display: flex; flex-direction: column; gap: 8px; }
.lp-cta { width: 100%; }
.lp-vid { display: flex; align-items: center; justify-content: center; gap: 8px; height: 44px; border: 1px solid var(--line-2); border-radius: 14px; background: rgba(237, 234, 226, 0.05); color: var(--lime); font: 600 14px/1 var(--f-ui); cursor: pointer; }
.lp-vid svg { width: 16px; height: 16px; fill: currentColor; stroke: none; }
@media (prefers-reduced-motion: reduce) { .lp-neon { animation: none; } }
/* строка фильтров юнитов + «Генплан»: компактнее, чтобы на обычном iPhone влезала целиком; на узких — листается */
.t-units .xchips { gap: 5px; margin: 0 -16px; padding: 0 16px; }
.t-units .xchips .chip { padding: 8px 10px; font-size: 12px; }
.t-units .xchips .chip b { margin-left: 1px; }
/* Генплан v2 (29.10): без автопоказа; картинка на весь свободный экран и прижата к верху (обрезается
   пустой лес снизу, а не корпуса сверху); контуры, вкладки и подпись проявляются только после картинки;
   кнопки всегда на месте — ничего не прыгает. */
.xplan { overflow: hidden; padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px)); }
.xplan > .lp { flex: 1 1 auto; min-height: 0; animation: none; }
.lp-box { flex: 1 1 auto; min-height: 0; aspect-ratio: auto; width: 100%; max-height: calc((100vw - 4px) * 1118 / 720); }
.lp-box > img { object-position: 50% 0; opacity: 1; }
.lp-svg, .lp-tabs, .lp-txt { opacity: 0; transition: opacity 0.45s ease 0.12s; }
.lp-box.ok .lp-svg, .lp-box.ok .lp-tabs, .lp-box.ok .lp-txt { opacity: 1; }
.lp-txt.in .lp-txt-in { animation: lpFade 0.4s ease both; }
@keyframes lpFade { from { opacity: 0; } to { opacity: 1; } }
.lp-acts { flex: 0 0 auto; }
/* переключатель фаз — над картинкой, а не поверх: верхние корпуса не закрыты */
.lp-tabs { position: static; flex: 0 0 auto; opacity: 1; background: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.14); }
.lp-tabs button { height: 38px; }

/* ══════════════ Главная 29.10: кнопка «Видео-обзор» на картинке, ряды удобств, горизонтальное видео ══════════════ */
.xhero-w { position: relative; }
.xhero-t { right: 132px; }
.xhero-vid { position: absolute; z-index: 3; right: 10px; bottom: 10px; display: flex; align-items: center; gap: 6px; height: 30px; padding: 0 12px 0 11px; border: 0; border-radius: 15px; background: transparent; color: #fff; font: 700 12px/1 var(--f-ui); cursor: pointer; isolation: isolate; -webkit-tap-highlight-color: transparent; animation: xPop 0.5s var(--xe) both 0.35s; }
.xhero-vid > .xgm { position: absolute; inset: 0; z-index: -1; border-radius: inherit; overflow: hidden; }
.xhero-vid > .xgm::before { content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 400%; background: var(--gemini-grad); background-size: 100% 100%; animation: xGemT 7s ease-in-out infinite; will-change: transform; }
.xhero-vid > .xgm::after { content: ""; position: absolute; inset: 1.5px; border-radius: 13.5px; background: rgba(16, 16, 19, 0.9); }
.xhero-vid::after { content: ""; position: absolute; inset: -2px; z-index: -2; border-radius: 17px; background: var(--gemini-grad); opacity: 0.35; filter: blur(7px); }
.xhero-vid svg { width: 12px; height: 12px; fill: #fff; stroke: none; }
.xhero-vid:active { transform: scale(0.95); }
html.ovl-on .xhero-vid > .xgm::before, html.bg-off .xhero-vid > .xgm::before { animation-play-state: paused; }
.xws.xam { margin-top: 0; }
.xpics.xpics-h img { height: auto; aspect-ratio: 16 / 10; }
.xinfo .xpics { margin-bottom: 4px; }
.xvv.hz video { height: auto; width: 100%; aspect-ratio: 16 / 9; }

/* Главная 29.10 (2): ячейки ниже — иконка слева от текста; всё на одном экране без прокрутки */
.xws { gap: 6px; }
.xw { flex-direction: row; align-items: center; gap: 7px; padding: 7px 8px; border-radius: 14px; }
.xw i { flex: 0 0 auto; font-size: 19px; margin: 0; }
.xw span { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.xw b { font-size: 13.5px; line-height: 1.1; }
.xw small { font-size: 10px; line-height: 1.15; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.xw { gap: 6px; padding: 7px 6px 7px 7px; }
.xw i { font-size: 17px; }
.xw b { font-size: 13px; letter-spacing: -0.1px; }
.xw small { letter-spacing: -0.1px; }
@media (max-width: 385px) { .xw small { font-size: 9.5px; } .xw b { font-size: 12.5px; } }
.xws.xam { margin-top: -4px; }

/* Новый дизайн шоу-юнитов — выделение плиток (04.11) */
.xv.nd { border: 2px solid #d1e05a; box-shadow: 0 0 14px rgba(209, 224, 90, 0.5); }
.xv.nd span { font-size: 10px; line-height: 1.2; }

/* Radisson на обложке главной (Артур 07.11) */
.xhero img.xhero-rad { inset: auto; left: 14px; top: 11px; width: auto; height: 28px; object-fit: contain; z-index: 1; animation: none; transform: none; filter: drop-shadow(0 1px 6px rgba(0, 0, 0, 0.55)); pointer-events: none; }
@media (max-height: 700px) { .xhero.sm img.xhero-rad { height: 23px; top: 9px; left: 13px; } }

/* «Обратная связь» в шапке чата — градиент только на обводке, как «Видео-обзор» (Артур 07.11) */
.head.cab .title .xfb-btn { background: transparent; text-shadow: none; }
.head.cab .title .xfb-btn > .xgm::after { content: ""; position: absolute; inset: 1.5px; border-radius: 15.5px; background: rgba(16, 16, 19, 0.92); }
.head.cab .title .xfb-btn::before { opacity: 0.22; animation: none; }
/* «Оставить заявку» на вкладке «Связь» — главная кнопка, лайм (Артур 07.11) */
/* «Оставить заявку» под строкой — динамичный градиент на обводке, как «Обратная связь» (Артур 07.11) */
.xt-b.xt-lead, .chip.xc-lead { position: relative; isolation: isolate; overflow: hidden; background: transparent; border-color: transparent; color: #fff; font-weight: 700; }
.xt-lead > .xgm, .xc-lead > .xgm { position: absolute; inset: -1px; z-index: -1; border-radius: inherit; overflow: hidden; }
.xt-lead > .xgm::before, .xc-lead > .xgm::before { content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 400%; background: var(--gemini-grad); background-size: 100% 100%; animation: xGemT 7s ease-in-out infinite; will-change: transform; }
.xt-lead > .xgm::after, .xc-lead > .xgm::after { content: ""; position: absolute; inset: 1.5px; border-radius: 11.5px; background: rgba(16, 16, 19, 0.92); }
.xc-lead > .xgm::after { border-radius: 999px; }
.xt-b.xt-lead i svg { width: 16px; height: 16px; fill: #fff; stroke: none; }
html.ovl-on .xgm::before, html.bg-off .xgm::before { animation-play-state: paused; }

/* Заставка: настоящий логотип Shepel Property вместо «S» — рамка с переливом та же (Артур 07.11) */
.ld-frame svg.ld-logo { width: 58px; height: auto; overflow: visible; }

/* Порядок заставки (Артур 07.11): логотип на чёрном с ореолом проявляется, держится, гаснет; потом приложение, потом фон */
.ld-frame::after { background: #0b0b0c; }
.loader { transition: opacity 0.6s ease, visibility 0s linear 0.6s; }
.loader .ld-mark, .loader .ld-txt { opacity: 0; transform: scale(0.92); transition: opacity 0.9s cubic-bezier(0.22, 1, 0.36, 1), transform 0.9s cubic-bezier(0.22, 1, 0.36, 1); }
.loader.in .ld-mark { opacity: 1; transform: none; }
.loader.in .ld-txt { opacity: 1; transform: none; transition-delay: 0.25s; }
.loader.out .ld-mark, .loader.out .ld-txt { opacity: 0; transform: scale(0.97); transition: opacity 0.4s ease, transform 0.4s ease; transition-delay: 0s; }
.gembg { opacity: 0; transition: opacity 1.6s ease; }
html.bg-in .gembg { opacity: 1; }
.loader .ld-txt { animation: none; }

/* Заставка v3 (Артур 07.11): рамка — одна SVG (чёрный квадрат + градиентная обводка + логотип), квадрат +20% (92 px).
   Никаких крутящихся квадратов под обрезкой — на iPhone обрезка во время анимации пропадала и вылезал радужный квадрат. */
.ld-mark { width: 92px; height: 92px; }
.ld-box { position: relative; width: 92px; height: 92px; display: block; }
.ld-glow { width: 134px; height: 134px; margin: -67px 0 0 -67px; border-radius: 40px; background: conic-gradient(from 0deg, #d1e05a, #4fe3c1, #6aa8ff, #a78bfa, #f472b6, #fbbf24, #d1e05a); filter: blur(22px); --glo: 0.5; opacity: 0.5; animation: ldSpin 18s linear infinite; }
.loader.out .ld-mark { transform: none; }

/* Ключевые документы в «Материалах»: отчёт отеля и договор Radisson (09.11) */
.xkey { display: grid; gap: 7px; margin: 0 0 7px; }
.xkd { display: flex; align-items: center; gap: 11px; width: 100%; padding: 12px 13px; border: 1px solid var(--line); border-radius: 16px; background: var(--xg); color: var(--sand); font: inherit; text-align: left; cursor: pointer; min-width: 0; }
.xkd.hot { border-color: rgba(209, 224, 90, 0.55); background: linear-gradient(135deg, rgba(209, 224, 90, 0.16), rgba(111, 214, 201, 0.10)), var(--xg); }
.xkd i { flex: 0 0 auto; width: 36px; height: 36px; border-radius: 11px; display: grid; place-items: center; font-style: normal; font-size: 19px; background: rgba(237, 234, 226, 0.07); }
.xkd span { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.xkd b { font: 700 14px/1.2 var(--f-display); }
.xkd small { font-size: 11px; line-height: 1.3; color: var(--faint); }
.xkd em { flex: 0 0 auto; font-style: normal; font: 700 12px/1 var(--f-ui); color: var(--lime); }
.xkd:active { transform: scale(0.98); }
.scene.xin .xkd { animation: xUp 0.55s var(--xe) both; }
.scene.still .xkd { animation: none; }

/* Окна поверх приложения (генплан, юнит, PDF, фото) в полноэкранном Telegram: шапка опускается под кнопки Telegram
   («Назад», «⌄ …») и вырез экрана — те же отступы, что у главного экрана (.card). Раньше брались --tg-safe-top/--tg-content-top
   из devmanager, которых в Laya App нет → верх окна уезжал под кнопки (Артур 09.11). */
html.in-tg .stats { padding-top: calc(var(--tg-safe-area-inset-top, 0px) + var(--tg-content-safe-area-inset-top, 0px)); }
/* Генплан: поля по бокам как у остальных окон — переключатель фаз, карта и кнопки не липнут к краям экрана (Артур 09.11) */
.stats .xplan { padding-left: 14px; padding-right: 14px; }
/* «Перепродажи» в ряду фильтров: тот же живой контур Gemini, что был у кнопки у заголовка */
.xchips .xrs-chip { border: 1.5px solid transparent; background: linear-gradient(#232327, #232327) padding-box, var(--gemini-grad) border-box; background-size: 100% 100%, 400% 400%; animation: xGemB 6s ease-in-out infinite; color: var(--sand); }
.xchips .xrs-chip.on { background: linear-gradient(var(--lime), var(--lime)) padding-box, var(--gemini-grad) border-box; color: #0b0b0c; }
/* ряд фильтров «Юниты» переносится на вторую строку: «Перепродажи» и «Генплан» всегда видны, без прокрутки вбок */
.xchips:has(.xrs-chip) { flex-wrap: wrap; overflow: visible; row-gap: 8px; }

/* «Заявка менеджеру» в переписке (09.11): ответы клиента печатаются пузырями с логотипом сервиса,
   под строкой — кнопки-ответы текущего вопроса Насти. Пока Настя печатает — кнопки приглушены. */
.xm.me .xm-ic { display: inline-block; vertical-align: -4px; margin-right: 7px; font-size: 15px; line-height: 1; }
.xm.me .xm-ic svg { width: 20px; height: 20px; display: block; border-radius: 6px; }
.xlead { transition: opacity 0.25s; }
.xlead.wait { opacity: 0.4; pointer-events: none; }
.xl-x { margin-left: auto; padding: 0 11px; }
.xl-grid.one { grid-template-columns: 1fr; }
.xl-grid.three { grid-template-columns: repeat(3, 1fr); }
.xl-grid.four { grid-template-columns: repeat(4, 1fr); }
.xl-grid .xl-wide, .xl-grid .xl-empty { grid-column: 1 / -1; }
.xl-empty { padding: 10px 2px; font-size: 13px; color: var(--faint); }
.xt-b.xl-k { height: 50px; }
.xt-b.xl-k span, .xt-b.xl-sv span { display: flex; flex-direction: column; gap: 2px; }
.xt-b.xl-k b, .xt-b.xl-sv b { font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xt-b.xl-k small, .xt-b.xl-sv small { font: 500 11px/1.15 var(--f-ui); color: var(--faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xt-b.xl-sv { height: 48px; padding-left: 8px; }
.xt-b.xl-sv i { width: 30px; height: 30px; flex: 0 0 30px; }
.xt-b.xl-sv i svg { width: 30px; height: 30px; display: block; border-radius: 9px; }
.xt-b.xl-tgph { border-color: rgba(42, 171, 238, 0.45); background: rgba(42, 171, 238, 0.1); }
.xt-b.xl-c { justify-content: center; height: 38px; padding: 0 6px; }
.xt-b.xl-c span { flex: 0 1 auto; text-align: center; }
.xt-b.xl-c i { width: auto; }
.xt-b.xl-c.on { border-color: var(--lime); color: var(--lime); }
.xt-b[disabled] { opacity: 0.32; cursor: default; }
.xt-b.xl-go { height: 46px; justify-content: center; }
.xt-b.xl-go span { flex: 0 1 auto; }
.xt-b.xl-go i svg { width: 16px; height: 16px; fill: none; stroke: #fff; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.xlead .xl-cc { margin: 0; padding: 0; }
.xlead .xfb-field { min-height: 40px; font-size: 17px; border-radius: 13px; }
.xlead .xl-cc .chip { padding: 6px 10px; font-size: 12px; }
.xlead .xnp { gap: 5px; }
.xlead .np { height: 34px; font-size: 18px; border-radius: 11px; }
.xlead .xl-tgph { height: 42px; }
.xlead .xl-grid.one:has(.xnp) { gap: 5px; }
.xl-tz { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 6px; font-size: 11.5px; color: var(--faint); }
.xl-tz b { color: var(--mist); font-weight: 600; }
.xl-tz button { flex: 0 0 auto; height: 26px; padding: 0 10px; border-radius: 13px; border: 1px solid var(--line-2); background: var(--xg); color: var(--lime); font: 600 11.5px/1 var(--f-ui); cursor: pointer; }
/* выключенная кнопка не «оживает» после анимации появления (анимация перебивала прозрачность — Артур 10.11) */
.xt-grid.fwd > [disabled], .xt-grid.bwd > [disabled] { animation: none; opacity: 0.32; }
.xt-b.xl-c.xl-cur { border-color: var(--lime); color: var(--lime); }

/* Нижнее меню (10.11): иконки 24px по сетке (23px размывало линии); прозрачность на всю иконку целиком —
   полупрозрачный цвет линий давал яркие пятна там, где линии перекрываются */
.ptab svg { width: 24px; height: 24px; stroke-width: 1.75; color: var(--sand); opacity: 0.46; transition: opacity 0.32s ease, color 0.32s ease; }
.ptab.on svg { color: var(--ink); opacity: 1; }
