/* client-v2.css — новый кабинет клиента. Токены — lk-tokens.css (общие со всеми кабинетами), размеры — DESIGN.md проекта (v1.3), разделы 2–6. */
* { box-sizing: border-box; }
html, body { margin: 0; background: var(--bg); }
body { font-family: var(--font-ui); color: var(--text); font-size: 15px; -webkit-font-smoothing: antialiased; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; }
.num { font-variant-numeric: tabular-nums; }
.lab { font-size: 12px; color: var(--muted); }
/* подписи-блоки всегда с заглавной: данные из стора приходят строчными (их же читает старый кабинет) */
.lab::first-letter, .note::first-letter { text-transform: uppercase; }
.hair { border-top: 1px solid var(--hair); }
.h1 { margin: 0; font-size: 40px; font-weight: 300; letter-spacing: -.03em; line-height: 1.08; }
.h2 { margin: 0; font-size: 20px; font-weight: 500; }
.stat { font-size: 40px; font-weight: 300; letter-spacing: -.02em; line-height: 1.05; margin-top: 6px; }

.cv-page { max-width: 1440px; margin: 0 auto; padding: 28px 48px 64px; }
.cv-head { display: flex; align-items: center; justify-content: space-between; gap: 24px; }
/* «ЛК от имени» (?superView=1): руководитель смотрит глазами клиента — полоса над шапкой, как .lk-sv старого кабинета */
.cv-sv { display: flex; align-items: center; gap: 10px; margin: -8px 0 16px; padding: 9px 16px; border-radius: 14px; background: #FFF8E6; border: 1px solid #F0D775; color: #7A5F12; font-size: 13px; font-weight: 600; line-height: 1.4; }
.cv-sv b { color: inherit; font-weight: 800; }
.cv-sv svg { flex: none; }
.cv-logo { font-size: 18px; font-weight: 600; letter-spacing: .12em; }
.cv-nav { display: flex; gap: 22px; flex-wrap: wrap; }
.cv-nav a, .cv-nav button, .cv-me { white-space: nowrap; }
.cv-nav a, .cv-nav button { font-size: 14px; color: var(--muted); background: none; border: 0; padding: 0; cursor: pointer; }
.cv-nav .on { color: var(--text); font-weight: 500; }
.cv-me { display: flex; align-items: center; gap: 12px; font-size: 13px; color: var(--muted); }
/* недельный отчёт: лента фото принятых работ */
.cv-rp-ph { display: flex; gap: 8px; margin-top: 14px; overflow-x: auto; padding-bottom: 4px; }
.cv-rp-ph button { flex: 0 0 auto; padding: 0; border: 0; background: var(--surface); border-radius: 14px; overflow: hidden; cursor: zoom-in; }
.cv-rp-ph img { display: block; width: 120px; height: 90px; object-fit: cover; }
a.cv-tot { color: inherit; text-decoration: none; }
.cv-tot > .lab:last-child { white-space: nowrap; }
/* центр уведомлений: колокольчик в шапке и выпадающий список */
.cv-bellw { position: relative; }
.cv-bell { position: relative; width: 40px; height: 40px; border-radius: 50%; border: 0; background: var(--surface); display: flex; align-items: center; justify-content: center; cursor: pointer; }
.cv-bell i { position: absolute; top: -3px; right: -3px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: var(--text); color: #fff; font-size: 11px; font-style: normal; font-weight: 500; line-height: 18px; text-align: center; }
.cv-notif { position: absolute; right: 0; top: 50px; z-index: 40; width: 400px; max-width: calc(100vw - 32px); max-height: 520px; overflow-y: auto; padding: 20px; box-shadow: 0 18px 48px rgba(0,0,0,.12); text-align: left; }
.cv-notif .hd { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.cv-nrow { display: grid; gap: 4px; width: 100%; padding: 12px 12px 12px 22px; margin: 0 -12px; box-sizing: content-box; position: relative; background: none; border: 0; border-radius: 12px; text-align: left; cursor: pointer; font: inherit; color: var(--text); }
.cv-nrow:hover { background: var(--surface); }
.cv-nrow .t { font-size: 14px; line-height: 1.4; white-space: normal; }
.cv-nrow.is-new::before { content: ''; position: absolute; left: 8px; top: 19px; width: 7px; height: 7px; border-radius: 50%; background: var(--done); }
.cv-ava { width: 40px; height: 40px; border-radius: 50%; background: var(--surface); display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 500; color: var(--text); }

.cv-hero { display: flex; justify-content: space-between; align-items: flex-end; flex-wrap: wrap; margin-top: 48px; gap: 24px 48px; }
.cv-hello { margin: 8px 0 0; font-size: 44px; font-weight: 300; letter-spacing: -.03em; line-height: 1.05; }
.cv-hero-act { display: flex; align-items: center; gap: 4px; }

.btn-k, .btn-l, .btn-g { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: 44px; padding: 0 22px; border-radius: 999px; font-size: 14px; cursor: pointer; white-space: nowrap; }
.btn-k { background: var(--accent); color: #fff; font-weight: 500; border: 0; }
.btn-l { border: 1px solid var(--line); background: var(--bg); color: var(--text); height: 40px; font-size: 13px; padding: 0 18px; }
.btn-g { background: var(--done); color: #fff; font-weight: 500; border: 0; }
.ic { width: 44px; height: 44px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; flex: 0 0 44px; border: 0; cursor: pointer; }
.ic-k { background: var(--accent); } .ic-l { border: 1px solid var(--line); background: var(--bg); } .ic-s { background: var(--surface); }

.pill-k, .pill-d, .pill-g, .pill-o { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 12px; border-radius: 999px; font-size: 12px; white-space: nowrap; }
.pill-k { background: var(--accent); color: #fff; }
.pill-d { border: 1px solid var(--line); color: var(--text-2); background: var(--bg); }
.pill-g { background: var(--surface); color: var(--text-2); }
.pill-o { border: 1px solid rgba(255, 255, 255, .85); color: #fff; }
.dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; background: var(--done); }

.cv-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 40px; margin-top: 56px; padding-top: 28px; }
.bar { height: 2px; background: var(--hair); border-radius: 2px; overflow: hidden; margin-top: 10px; }
.bar i { display: block; height: 100%; background: var(--text); }


.cv-two { display: grid; grid-template-columns: 1.25fr 1fr; gap: 56px; margin-top: 64px; align-items: start; }
/* главная из виджетов (спека волны 2, раздел 1) */
.cv-apr-w { padding: 22px 24px; display: flex; flex-direction: column; }
.cv-apr-w .hd { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.cv-apr-w .rows { margin-top: 10px; display: flex; flex-direction: column; }
.cv-apr-w .r { display: flex; gap: 12px; align-items: center; padding: 11px 0; border: 0; border-top: 1px solid var(--hair); background: none; text-align: left; cursor: pointer; font: inherit; color: inherit; }
.cv-apr-w .r:first-child { border-top: 0; }
.cv-apr-w .r .ic { flex: 0 0 32px; height: 32px; border-radius: 10px; background: var(--surface); display: grid; place-items: center; }
.cv-apr-w .r .tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.cv-apr-w .r .t { font-size: 14px; font-weight: 600; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-apr-w .r .by { display: flex; flex-direction: column; align-items: flex-end; font-size: 13px; white-space: nowrap; }
.cv-apr-w .ft { display: flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 16px; }
.cv-two > * { min-width: 0; }
/* «Оплаты» — на два ряда; нечётный хвост маленьких виджетов растягиваем, чтобы в сетке не было дырки */
.row { display: grid; grid-template-columns: 96px 1fr auto; gap: 16px; padding: 16px 0; align-items: center; }
.soft { background: var(--surface); border-radius: 32px; }
.card { border: 1px solid var(--line); border-radius: 32px; background: var(--bg); }
.att { display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px; border-radius: 16px; background: var(--attention); font-size: 13px; line-height: 1.45; color: var(--text-2); }
.note-s { display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px; border-radius: 16px; background: var(--surface); font-size: 13px; line-height: 1.45; color: var(--text-2); }

.cv-photos { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; margin-top: 18px; }
.ph { position: relative; border-radius: 28px; overflow: hidden; display: block; background: var(--surface); height: 300px; }
.ph img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ph::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, .42) 100%); }
.ph .tag { position: absolute; left: 12px; top: 12px; z-index: 1; background: rgba(255, 255, 255, .9); color: var(--text); }
.ph .cap { position: absolute; left: 14px; right: 14px; bottom: 12px; z-index: 1; color: #fff; font-size: 14px; display: flex; justify-content: space-between; align-items: flex-end; gap: 8px; }
.empty { padding: 28px; border-radius: 28px; border: 1px dashed var(--line); color: var(--muted); font-size: 13px; text-align: center; }

/* окно по центру (владелец, 2026-10-23: на 30% меньше полноэкранного по ширине и высоте); главная видна под затемнением */
.cv-scrim { position: fixed; inset: 0; background: var(--scrim); z-index: 40; }
.cv-modal { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); width: calc((100vw - 48px) * .7); height: calc((100vh - 24px) * .7); background: var(--bg); border-radius: 36px; box-shadow: 0 10px 60px rgba(0, 0, 0, .16); z-index: 41; overflow: auto; padding: 32px 40px 40px; }
.cv-mhead { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; }
.x { width: 44px; height: 44px; border-radius: 50%; background: var(--surface); display: flex; align-items: center; justify-content: center; border: 0; cursor: pointer; flex: 0 0 44px; }
.cv-stages { display: grid; grid-template-columns: minmax(0, 1fr) 400px; gap: 48px; margin-top: 36px; align-items: start; }
.cv-phase { margin-top: 28px; }
.cv-phase:first-child { margin-top: 0; }
.cv-phase-h { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding-bottom: 10px; }
.cv-stage { display: grid; grid-template-columns: 36px minmax(0, 1fr) auto; gap: 16px; padding: 16px 0; align-items: start; border-top: 1px solid var(--hair); }
.cv-stage .n { width: 32px; height: 32px; border-radius: 50%; background: var(--surface); display: flex; align-items: center; justify-content: center; font-size: 12px; color: var(--text-2); }
.cv-stage.is-done .n { background: var(--done); color: #fff; }
.cv-stage.is-current .n { background: var(--accent); color: #fff; }
.cv-stage.is-locked .t { color: var(--muted); }
.cv-items { margin-top: 10px; display: grid; gap: 6px; }
.cv-item { display: flex; justify-content: space-between; gap: 12px; font-size: 13px; color: var(--text-2); }
.cv-gates { position: sticky; top: 0; display: flex; flex-direction: column; gap: 12px; }
.cv-gate { padding: 18px 20px; }
.cv-conds { margin-top: 12px; display: flex; flex-direction: column; }
.cv-cond { display: flex; gap: 10px; align-items: center; padding: 10px 0; border-top: 1px solid var(--hair); }
.cv-cond .ic { flex: 0 0 30px; height: 30px; border-radius: 10px; background: var(--surface); display: grid; place-items: center; }
.cv-cond.client .ic { background: #EDEBE7; }
.cv-cond .nm { font-size: 13px; line-height: 1.35; color: var(--text); }
.cv-cond.later .nm, .cv-cond.team .nm { color: var(--text-2); }
.cv-cta { height: 34px; padding: 0 14px; font-size: 12px; white-space: nowrap; }

/* «Согласования»: фотоконтроль, под ним документы и материалы во всю ширину (решение Романа 2026-10-23) */
.cv-apr { display: grid; grid-template-columns: minmax(0, 1fr); gap: 36px; margin-top: 28px; }
.cv-dec { padding: 18px 20px 20px; display: flex; flex-direction: column; }
.cv-dec .cv-dbtn { flex-wrap: nowrap; }
.cv-dec .cv-dbtn button { flex: 1; min-width: 0; padding-left: 10px; padding-right: 10px; white-space: nowrap; }
.cv-dec > div:last-child:not(.cv-chead) { margin-top: auto; }
.cv-chead { display: flex; gap: 12px; align-items: flex-start; }
.cv-chead .th { flex: 0 0 56px; width: 56px; height: 56px; border-radius: 12px; overflow: hidden; background: var(--surface); display: grid; place-items: center; }
.cv-chead .th img { width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-chead .t, .cv-gate .t { font-size: 15px; font-weight: 600; line-height: 1.3; color: var(--text); }
.cv-sum { font-size: 20px; font-weight: 300; margin-top: 12px; }
.cv-meta { margin: 10px 0 0; display: grid; gap: 4px; }
.cv-meta div { display: flex; justify-content: space-between; gap: 12px; font-size: 13px; }
.cv-meta dt { color: var(--muted); }
.cv-meta dd { margin: 0; color: var(--text-2); text-align: right; }
.cv-meta dd.hot { color: var(--text); font-weight: 600; }
.cv-strip { display: flex; gap: 10px; margin-top: 14px; overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 6px; }
.cv-strip button { flex: 0 0 240px; height: 180px; padding: 0; border: 0; background: var(--surface); border-radius: 18px; overflow: hidden; cursor: zoom-in; scroll-snap-align: start; }
.cv-strip img { width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-ta { width: 100%; border: 1px solid var(--line); border-radius: 16px; padding: 12px 14px; font: inherit; font-size: 14px; color: var(--text); resize: vertical; }
.cv-dstage { overflow: hidden; }
.cv-dstage .hd { width: 100%; display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 18px 22px; border: 0; background: none; cursor: pointer; text-align: left; color: var(--text); font: inherit; }
.cv-gal { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; margin-top: 14px; }
.cv-gal button { position: relative; aspect-ratio: 4 / 3; border: 0; padding: 0; border-radius: 20px; overflow: hidden; cursor: zoom-in; background: var(--surface); }
.cv-gal img, .cv-gal video { width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-gal .tag { position: absolute; top: 10px; right: 10px; }
.cv-gal .cap { position: absolute; left: 0; right: 0; bottom: 0; padding: 22px 14px 10px; text-align: left; color: #fff; font-size: 13px; background: linear-gradient(transparent, rgba(0, 0, 0, .55)); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.cv-tot { display: flex; justify-content: space-between; gap: 12px; padding: 10px 0; font-size: 14px; border-top: 1px solid var(--hair); }

.cv-chatm { display: flex; flex-direction: column; }
.cv-chat { display: grid; grid-template-columns: 260px minmax(0, 1fr); gap: 28px; margin-top: 24px; flex: 1; min-height: 0; }
.cv-threads { display: flex; flex-direction: column; gap: 6px; overflow: auto; }
.cv-th { display: flex; flex-direction: column; gap: 3px; text-align: left; padding: 12px 14px; border-radius: 18px; border: 0; background: none; cursor: pointer; color: var(--text); min-width: 0; }
.cv-th.on { background: var(--surface); }
.cv-conv { display: flex; flex-direction: column; min-height: 0; }
.cv-msgs { flex: 1; overflow: auto; padding: 12px 0; display: flex; flex-direction: column; gap: 8px; }
.cv-msg { max-width: 72%; align-self: flex-start; background: var(--surface); border-radius: 18px 18px 18px 6px; padding: 10px 14px; font-size: 14px; line-height: 1.45; }
.cv-msg.mine { align-self: flex-end; background: var(--accent); color: #fff; border-radius: 18px 18px 6px 18px; }
.cv-msg img { display: block; max-width: 260px; border-radius: 12px; margin-top: 6px; }
.cv-msg .t { font-size: 11px; opacity: .6; margin-top: 4px; text-align: right; }
/* честный срок ответа под последним сообщением клиента (KSH-497) */
.cv-eta { align-self: flex-end; display: inline-flex; align-items: center; gap: 6px; margin-top: 2px; font-size: 12px; line-height: 1.4; color: var(--muted); }
.cv-eta svg { flex: none; stroke: currentColor; }
.cv-eta.is-late { color: var(--text); }
.cv-compose { display: flex; gap: 8px; align-items: flex-end; padding-top: 10px; border-top: 1px solid var(--hair); }
.cv-compose .cv-ta { resize: none; min-height: 44px; }

.cv-payrow { display: grid; grid-template-columns: minmax(0, 1fr) auto auto auto; gap: 18px; align-items: center; padding: 14px 0; border-top: 1px solid var(--hair); }

.cv-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-top: 20px; }
.cv-mcard { overflow: hidden; display: flex; flex-direction: column; }
.cv-mcard .ph0 { flex: none; width: 100%; aspect-ratio: 4 / 3; overflow: hidden; position: relative; background: var(--surface); display: flex; align-items: flex-end; padding: 16px 18px; font-size: 13px; color: var(--muted); }
.cv-mcard .ph0 img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-dcard { padding: 20px 22px 22px; display: flex; flex-direction: column; min-height: 220px; }
.cv-mcard .cv-dbtn, .cv-dcard .cv-dbtn { flex-wrap: nowrap; }
.cv-mcard .cv-dbtn button, .cv-dcard .cv-dbtn > * { flex: 1; min-width: 0; padding-left: 10px; padding-right: 10px; white-space: nowrap; }

/* разделов десять: на ноутбуке меню — отдельной строкой под логотипом, с прокруткой, а не в два ряда */
/* календарь проекта: цвета типов событий (работы — графит, оплаты — акцент сайта, доставки — зелёный, решения — янтарь) */
.k-work { --k: var(--accent); } .k-payment { --k: #8A7F72; } .k-delivery { --k: #2F5D3A; } .k-decide { --k: #B5822B; }
.cv-ctabs { display: flex; gap: 6px; margin-top: 16px; overflow-x: auto; padding-bottom: 2px; }
.cv-ctabs button { display: inline-flex; align-items: center; gap: 7px; height: 34px; padding: 0 14px; border-radius: 999px; border: 1px solid var(--line); background: var(--bg); color: var(--text-2); font-size: 13px; cursor: pointer; white-space: nowrap; }
.cv-ctabs button i { width: 8px; height: 8px; border-radius: 50%; background: var(--k); }
.cv-ctabs button span { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }
.cv-ctabs button.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.cv-ctabs button.on span { color: rgba(255, 255, 255, .7); }
.cv-ctabs button.on i { box-shadow: 0 0 0 1.5px #fff; }
.cv-wk { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; margin-top: 16px; }
.cv-wk .wd, .cv-month .wd { font-size: 11px; color: var(--muted); text-align: center; padding-bottom: 2px; }
.cv-wk .dc { height: 54px; border: 0; border-radius: 14px; background: var(--surface); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; cursor: pointer; color: var(--text); padding: 0; }
.cv-wk .dc b { font-size: 14px; font-weight: 600; font-variant-numeric: tabular-nums; }
.cv-wk .dc.is-past { background: var(--bg); color: var(--muted); }
.cv-wk .dc.is-today { box-shadow: inset 0 0 0 1.5px var(--accent); }
.cv-wk .dc.is-sel { background: var(--accent); color: #fff; }
.dots { display: flex; gap: 3px; height: 6px; }
.dots i { width: 6px; height: 6px; border-radius: 50%; background: var(--k); }
.dc.is-sel .dots i { box-shadow: 0 0 0 1px #fff; }
.cv-cday { display: flex; justify-content: space-between; align-items: baseline; margin-top: 16px; }
.cv-cgrp { margin-top: 14px; }
.cv-cgrp > .lab { padding-bottom: 2px; }
.cv-over-t { color: #B5822B; }
.cv-crow { width: 100%; display: flex; gap: 12px; align-items: center; padding: 10px 0; border: 0; border-bottom: 1px solid var(--hair); background: none; text-align: left; cursor: pointer; font: inherit; color: inherit; }
.cv-crow .ic { flex: 0 0 30px; height: 30px; border-radius: 10px; background: var(--k); display: grid; place-items: center; }
.cv-crow .tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.cv-crow .t { font-size: 14px; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-crow.is-done .t { color: var(--muted); }
.cv-crow.is-done .ic { opacity: .45; }
.pill-k.cv-over { background: #B5822B; }
.cv-cmore { display: block; margin-top: 12px; background: none; border: 0; padding: 0; cursor: pointer; }
.cv-calm { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 36px; margin-top: 24px; align-items: start; }
.cv-mnav { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.cv-mnav b { font-size: 18px; font-weight: 600; min-width: 150px; text-align: center; }
.cv-mnav .x { width: 36px; height: 36px; flex-basis: 36px; }
@media (min-width: 761px) { .cv-modal.cv-calmod { width: min(1320px, calc(100vw - 48px)); height: calc(100vh - 48px); } }
.cv-month { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; }
.cv-month .mc { min-height: 104px; border: 0; border-radius: 12px; background: var(--surface); padding: 6px; display: flex; flex-direction: column; gap: 3px; align-items: stretch; text-align: left; cursor: pointer; font: inherit; color: inherit; min-width: 0; }
.cv-month .mc b { font-size: 12px; font-weight: 600; font-variant-numeric: tabular-nums; }
.cv-month .mc.is-out { background: var(--bg); color: var(--muted); }
.cv-month .mc.is-today b { display: inline-grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: var(--accent); color: #fff; }
.cv-month .mc.is-sel { box-shadow: inset 0 0 0 1.5px var(--accent); }
.cv-month .ev { font-size: 11px; line-height: 1.25; padding: 2px 5px; border-radius: 5px; color: #fff; background: var(--k); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-month .ev.is-done { opacity: .4; }
.cv-month .ev.is-over { box-shadow: inset 0 0 0 1.5px #B5822B; background: #FFF8E6; color: var(--text); }
.cv-month .more { font-size: 11px; color: var(--muted); padding-left: 2px; }
/* окно «Доставки»: карточки анкет, ответ клиента — форма пропуска / ключа и «Другое время» */
.cv-dlist { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-top: 14px; align-items: start; }
.cv-dlcard { padding: 18px 20px 20px; }
.cv-dlist.one { grid-template-columns: minmax(0, 1fr); }
.cv-dlbody { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 36px; align-items: start; }
.cv-dlbody .cv-dlform { margin-top: 12px; padding-top: 0; border-top: 0; }
.cv-dlcard.is-ask { box-shadow: inset 0 0 0 1.5px var(--accent); }
.cv-dlcard .hd { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.cv-dlcard .t { font-size: 17px; font-weight: 600; }
.cv-dlform { display: flex; flex-direction: column; gap: 10px; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--hair); }
.cv-dlform label { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.cv-dlform label.ck { flex-direction: row; align-items: center; gap: 8px; font-size: 14px; padding-top: 18px; }
.cv-dlform input:not([type='checkbox']) { height: 42px; border: 1px solid var(--line); border-radius: 12px; padding: 0 12px; font: inherit; font-size: 14px; color: var(--text); background: var(--bg); min-width: 0; width: 100%; }
.cv-dlform select { height: 42px; border: 1px solid var(--line); border-radius: 12px; padding: 0 10px; font: inherit; font-size: 14px; color: var(--text); background: var(--bg); min-width: 0; width: 100%; }
.cv-dlform input[type='checkbox'] { width: 18px; height: 18px; accent-color: var(--done); }
.cv-dlrow { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; }
.cv-dlform .cv-dbtn { display: flex; gap: 8px; justify-content: flex-end; }
/* страница «Дизайн-проект» (спека волны 2, раздел 4): вкладки «Бриф», «Презентация», «Этапы» */
.dz-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 32px; margin-top: 56px; flex-wrap: wrap; }
.dz-tabs { margin-top: 0; }
.dz-tabs button span { color: var(--muted); }
.dz-body { margin-top: 40px; }
.dz-p { margin: 14px 0 20px; font-size: 14px; line-height: 1.55; color: var(--text-2); max-width: 620px; }
.dz-wait { padding: 28px 32px; }
.dz-brief { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 48px; align-items: start; }
.dz-toc { position: sticky; top: 24px; display: flex; flex-direction: column; gap: 2px; }
.dz-toc button { text-align: left; background: none; border: 0; padding: 7px 0; font: inherit; font-size: 13px; color: var(--muted); cursor: pointer; }
.dz-toc button:hover { color: var(--text); }
.dz-doc { display: flex; flex-direction: column; gap: 40px; min-width: 0; }
.dz-bhero { padding: 32px 36px; }
.dz-h { margin: 10px 0 0; font-size: 32px; font-weight: 300; letter-spacing: -.02em; }
.dz-key { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; margin-top: 24px; }
.dz-key > div { background: var(--surface); border-radius: 20px; padding: 14px 16px; display: flex; flex-direction: column; gap: 6px; }
.dz-key b { font-weight: 500; font-size: 15px; }
.dz-sec { display: flex; flex-direction: column; gap: 16px; scroll-margin-top: 24px; }
.dz-narr { margin: 0; font-size: 17px; font-weight: 300; line-height: 1.5; color: var(--text-2); max-width: 760px; }
.dz-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 32px; margin-top: 4px; }
.dz-bhero .dz-facts { margin-top: 24px; }
.dz-fact { display: grid; grid-template-columns: minmax(120px, 38%) minmax(0, 1fr); gap: 12px; padding: 11px 0; border-top: 1px solid var(--hair); font-size: 14px; align-items: baseline; }
.dz-chips { display: inline-flex; flex-wrap: wrap; gap: 6px; }
.dz-chips span { display: inline-flex; align-items: center; height: 26px; padding: 0 10px; border-radius: 999px; background: var(--surface); font-size: 12px; color: var(--text-2); }
.dz-text p { margin: 6px 0 0; font-size: 14px; line-height: 1.55; color: var(--text-2); white-space: pre-wrap; }
.dz-styles { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; }
.dz-style { margin: 0; }
.dz-style .imgs { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; border-radius: 24px; overflow: hidden; }
.dz-style .imgs button { border: 0; padding: 0; aspect-ratio: 3 / 4; background: var(--surface); cursor: zoom-in; }
.dz-style img { width: 100%; height: 100%; object-fit: cover; display: block; }
.dz-style figcaption { display: flex; align-items: baseline; gap: 10px; margin-top: 10px; }
.dz-style figcaption b { font-weight: 500; }
.dz-gal { margin-top: 0; }
.dz-links { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; font-size: 14px; }
.dz-links a { display: inline-flex; align-items: center; gap: 8px; text-decoration: underline; word-break: break-all; }
.dz-rooms { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; }
.dz-room { border: 1px solid var(--line); border-radius: 24px; padding: 16px 18px; display: flex; flex-direction: column; gap: 10px; }
.dz-room .hd { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.dz-room .hd b { font-weight: 500; }
.dz-room p { margin: 0; font-size: 13px; color: var(--text-2); line-height: 1.5; }
.dz-pres { display: flex; flex-direction: column; gap: 16px; }
.dz-pdf { display: flex; align-items: center; gap: 16px; padding: 16px 20px; }
.dz-pdf b { font-weight: 500; }
.dz-pdf .act { margin-left: auto; display: flex; gap: 8px; flex-wrap: wrap; }
.dz-stage { position: relative; }
.dz-view { width: 100%; height: min(68vh, 720px); border: 0; padding: 0; border-radius: 32px; overflow: hidden; background: var(--surface); cursor: zoom-in; display: flex; align-items: center; justify-content: center; }
.dz-view:focus-visible { outline: 2px solid var(--line); outline-offset: 2px; }
.dz-view img { width: 100%; height: 100%; object-fit: contain; display: block; }
.dz-stage .prev, .dz-stage .next { position: absolute; top: 50%; transform: translateY(-50%); }
.dz-stage .prev { left: 16px; } .dz-stage .next { right: 16px; }
.dz-file { display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center; padding: 32px; color: var(--text); }
.dz-file b { font-weight: 500; font-size: 17px; max-width: 520px; overflow-wrap: anywhere; }
.dz-file.dark { color: #fff; } .dz-file.dark .lab { color: rgba(255, 255, 255, .7); }
.dz-file .btn-k, .dz-file .btn-l { margin-top: 6px; }
.dz-cap { display: flex; justify-content: space-between; align-items: center; gap: 16px; font-size: 14px; }
.dz-cap b { font-weight: 500; }
.dz-thumbs { display: flex; gap: 24px; overflow-x: auto; padding: 4px 0 6px; }
.dz-thumbs .grp { display: flex; flex-direction: column; gap: 8px; flex: 0 0 auto; }
.dz-thumbs .row { display: flex; gap: 8px; }
.dz-thumbs .row button { width: 112px; height: 78px; border-radius: 14px; overflow: hidden; border: 2px solid transparent; padding: 0; background: var(--surface); cursor: pointer; }
.dz-thumbs .row button.on { border-color: var(--accent); }
.dz-thumbs .row img { width: 100%; height: 100%; object-fit: cover; display: block; }
.dz-thumbs .f { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; height: 100%; font-size: 11px; color: var(--text-2); }
.dz-show .dz-file { min-width: min(420px, 80vw); }
.dz-stages { display: flex; flex-direction: column; gap: 12px; }
.dz-spec, .dz-sch { display: flex; flex-direction: column; gap: 32px; }
.dz-sch { gap: 16px; }
.dz-tots { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.dz-tots .card { padding: 22px 24px; display: flex; flex-direction: column; gap: 6px; }
.dz-lnk { background: none; border: 0; padding: 0; font: inherit; color: inherit; text-decoration: underline; cursor: pointer; }
.dz-room-s { display: flex; flex-direction: column; gap: 14px; }
.dz-room-h { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; }
.dz-cat { display: flex; flex-direction: column; }
.dz-cat > .lab { margin-bottom: 4px; }
.dz-srow { display: grid; grid-template-columns: 56px minmax(0, 1fr) auto 120px; gap: 16px; align-items: center; padding: 10px 0; border-top: 1px solid var(--hair); }
.dz-srow .dz-ph { width: 56px; height: 56px; border-radius: 14px; overflow: hidden; border: 0; padding: 0; background: var(--surface); display: flex; align-items: center; justify-content: center; cursor: zoom-in; }
.dz-srow .dz-ph.none { cursor: default; }
.dz-srow .dz-ph img { width: 100%; height: 100%; object-fit: cover; display: block; }
.dz-srow .nm { min-width: 0; font-size: 14px; display: flex; flex-direction: column; gap: 3px; }
.dz-srow .sm { text-align: right; font-size: 14px; }
.dz-tbl { display: flex; flex-direction: column; }
.dz-tr { display: grid; grid-template-columns: minmax(0, 2fr) 150px minmax(0, 1.3fr) 150px 170px 190px; gap: 16px; align-items: center; padding: 12px 0; border-top: 1px solid var(--hair); font-size: 14px; }
.dz-tr.hd { font-size: 12px; color: var(--muted); border-top: 0; padding-top: 4px; }
.dz-tr .nm { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.dz-tr .st { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.dz-tr .st .btn-l { height: 32px; padding: 0 14px; font-size: 12px; }
.dz-tr.is-late { background: var(--attention); margin: 0 -12px; padding: 12px; border-radius: 14px; border-top-color: transparent; }
.dz-tr .late { font-weight: 500; }
.dz-talk { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 16px; align-items: stretch; }
.dz-talk > .card { padding: 22px 24px; display: flex; flex-direction: column; height: min(640px, 78vh); min-height: 0; }
.dz-talk-h { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.dz-chat .cv-conv { flex: 1; min-height: 0; }
.dz-cmts { flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 10px; margin: 14px 0; overflow-y: auto; }
.dz-cmt { background: var(--surface); border-radius: 18px; padding: 10px 14px; font-size: 14px; line-height: 1.45; display: flex; flex-direction: column; gap: 4px; max-width: 92%; }
.dz-cmt.mine { align-self: flex-end; background: var(--bg); border: 1px solid var(--line); }
@media (max-width: 1360px) {
  .cv-head { flex-wrap: wrap; row-gap: 16px; }
  .cv-nav { order: 3; width: 100%; flex-wrap: wrap; row-gap: 10px; padding-bottom: 4px; }
}
@media (max-width: 1100px) {
  .cv-photos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cv-stages { grid-template-columns: 1fr; }
  .cv-modal { width: calc(100vw - 48px); height: calc(100vh - 96px); }
  .cv-chat { grid-template-columns: 1fr; }
  .cv-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cv-payrow { grid-template-columns: minmax(0, 1fr) auto; }
  .cv-payrow > [class^='pill'] { justify-self: start; }
  .cv-threads { flex-direction: row; overflow-x: auto; }
  .cv-th { min-width: 180px; }
  .cv-gates { position: static; }
  .cv-calm { grid-template-columns: minmax(0, 1fr); }
  .cv-dlist { grid-template-columns: minmax(0, 1fr); }
  .cv-dlbody { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .cv-dlbody .cv-dlform { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--hair); }
  .dz-brief { grid-template-columns: minmax(0, 1fr); }
  .dz-toc { display: none; }
  .dz-tr { grid-template-columns: minmax(0, 1fr) auto; row-gap: 6px; }
  .dz-tr.hd { display: none; }
  .dz-tr > [data-l] { grid-column: 1 / -1; font-size: 13px; }
  .dz-tr > [data-l]::before { content: attr(data-l) ': '; color: var(--muted); }
  .dz-tr .st { grid-column: 1 / -1; }
  .dz-talk { grid-template-columns: minmax(0, 1fr); }
  .dz-talk > .card { height: auto; }
  .dz-chat { height: 520px !important; }
}
@media (max-width: 760px) {
  .cv-page { padding: 16px 16px 48px; }
  .cv-head { flex-wrap: wrap; }
  .cv-nav { order: 3; width: 100%; gap: 10px 16px; flex-wrap: wrap; padding-bottom: 4px; }
  .cv-me > span:first-child { display: none; }
  .cv-notif { position: fixed; left: 16px; right: 16px; top: 64px; width: auto; max-width: none; }
  .cv-hero { flex-direction: column; align-items: stretch; margin-top: 28px; gap: 18px; }
  .cv-hero-act .btn-k { flex: 1; }
  .cv-hello { font-size: 32px; }
  .cv-kpis { grid-template-columns: 1fr 1fr; gap: 24px; margin-top: 32px; }
  .stat { font-size: 30px; }
  .cv-photos { grid-template-columns: 1fr 1fr; gap: 10px; }
  .ph { height: 200px; }
  .cv-modal { top: 10%; left: 0; right: 0; bottom: 0; transform: none; width: auto; height: auto; padding: 24px 16px 40px; border-radius: 28px 28px 0 0; }
  .h1 { font-size: 30px; }
  .cv-gal { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .cv-gal button { border-radius: 14px; }
  .cv-cards { grid-template-columns: 1fr; }
  .cv-strip button { flex-basis: 78%; height: auto; aspect-ratio: 4 / 3; }
  .cv-dcard { min-height: 0; }
  .cv-wk .dc { height: 46px; border-radius: 12px; }
  .cv-month .mc { min-height: 54px; padding: 4px; }
  .cv-month .ev { font-size: 0; height: 6px; padding: 0; border-radius: 3px; }
  .dz-head { margin-top: 28px; gap: 16px; }
  .dz-tabs { width: 100%; }
  .dz-body { margin-top: 24px; }
  .dz-bhero, .dz-wait { padding: 22px 18px; border-radius: 28px; }
  .dz-h { font-size: 26px; }
  .dz-key { grid-template-columns: 1fr 1fr; gap: 8px; }
  .dz-key > div { padding: 12px; border-radius: 16px; }
  .dz-facts { grid-template-columns: minmax(0, 1fr); }
  .dz-fact { grid-template-columns: minmax(0, 1fr); gap: 4px; }
  .dz-styles { grid-template-columns: minmax(0, 1fr); }
  .dz-view { height: 56vw; border-radius: 22px; }
  .dz-stage .prev, .dz-stage .next { display: none; }
  .dz-cap { flex-direction: column; align-items: flex-start; gap: 8px; }
  .dz-pdf { flex-wrap: wrap; }
  .dz-pdf .act { margin-left: 0; width: 100%; }
  .dz-tots { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .dz-srow { grid-template-columns: 48px minmax(0, 1fr) auto; gap: 12px; }
  .dz-srow .dz-ph { width: 48px; height: 48px; }
  .dz-srow > [class^='pill'] { grid-column: 2 / 3; justify-self: start; }
  .dz-srow .sm { grid-column: 3; grid-row: 1; }
}

/* «Объект и доступ»: галочки без отступа под подпись поля; на телефоне поля в одну колонку — адреса и телефоны длинные */
.cv-accform label.ck { padding-top: 0; }
@media (max-width: 640px) { .cv-accform .cv-dlrow { grid-template-columns: 1fr; } }

/* «Визит на объект»: слоты прораба — крупные кнопки-варианты, выбранный — тёмный */
.cv-vslots { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; margin-top: 18px; }
.cv-vslot { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; padding: 14px 16px; border: 1px solid var(--line); border-radius: 16px; background: var(--bg); font: inherit; color: var(--text); cursor: pointer; text-align: left; }
.cv-vslot .d { font-size: 18px; font-weight: 600; }
.cv-vslot.on { background: var(--text); border-color: var(--text); color: #fff; }
.cv-vslot.on .lab { color: rgba(255, 255, 255, .75); }
.cv-vslot:disabled { opacity: .45; cursor: default; }

/* «Приёмка объекта»: сводка по статусам, выбор комнаты чипами, карточки замечаний — фото «до» и «после» (после — с зелёной рамкой) */
.cv-pnsum { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-top: 18px; }
.cv-pnsum > div { background: var(--surface); border-radius: 16px; padding: 14px 16px; min-width: 0; }
.cv-pnsum .num { font-size: 28px; line-height: 1.1; }
.cv-pnadd { margin-top: 18px; padding: 18px 20px 20px; }
.cv-rooms { display: flex; flex-wrap: wrap; gap: 6px; }
.cv-rooms button { height: 34px; padding: 0 14px; border-radius: 999px; border: 1px solid var(--line); background: var(--bg); font: inherit; font-size: 13px; color: var(--text); cursor: pointer; }
.cv-rooms button.on { background: var(--text); border-color: var(--text); color: #fff; }
.cv-pnlist { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 14px; margin-top: 14px; }
.cv-pn { padding: 18px 20px 20px; display: flex; flex-direction: column; }
.cv-pn.is-ask { box-shadow: inset 0 0 0 1.5px var(--accent); }
.cv-pn .hd { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; }
.cv-pn .t { font-size: 16px; font-weight: 600; }
.cv-pnph { display: flex; gap: 8px; margin-top: 12px; overflow-x: auto; }
.cv-pnph button { flex: 0 0 88px; height: 88px; padding: 0; border: 0; border-radius: 12px; overflow: hidden; background: var(--surface); cursor: zoom-in; }
.cv-pnph button.fx { outline: 2px solid var(--done); outline-offset: -2px; }
.cv-pnph img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (max-width: 760px) { .cv-pnsum { grid-template-columns: repeat(2, minmax(0, 1fr)); } .cv-pnlist { grid-template-columns: 1fr; } }

/* пакет сдачи в «Документах» */
.cv-wty { display: grid; border-top: 1px solid var(--line, #E6E6E6); }
.cv-wty > div { padding: 12px 0; border-bottom: 1px solid var(--line, #E6E6E6); font-size: 15px; }
.cv-wty .num { color: var(--muted, #6B6B6B); white-space: nowrap; }
.cv-hpfiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; }
.cv-hpfiles a { display: flex; align-items: center; gap: 10px; padding: 14px 16px; text-decoration: none; color: inherit; }
.cv-hpfiles a span:nth-child(2) { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-care { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 18px 24px; }
.cv-wty .lnk { border: 0; background: none; padding: 0; color: var(--text, #111); text-decoration: underline; cursor: pointer; font: inherit; }

/* гарантийные обращения */
.cv-wrsteps { list-style: none; margin: 14px 0 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.cv-wrsteps li { display: grid; gap: 4px; font-size: 13px; color: var(--muted, #6B6B6B); border-top: 2px solid var(--line); padding-top: 8px; }
.cv-wrsteps li.on { color: var(--text, #111); border-top-color: #2F5D3A; }
.cv-wrsteps .dot { display: none; }
.cv-wrlist { grid-template-columns: minmax(0, 1fr); }
.cv-wrchat { height: 340px; display: flex; margin-top: 12px; border-top: 1px solid var(--hair); }
.cv-wrchat .cv-conv { flex: 1; padding-top: 10px; }
@media (max-width: 640px) { .cv-wrsteps { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* доработки главной (спека 2026-10-24-client-lk-v2-home-refine): акценты — оплата, просрочка, скоро (токены — lk-tokens.css); нейтральные плашки «ждут вас» */
.pill-n { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 12px; border-radius: 999px; font-size: 12px; white-space: nowrap; background: #F4F4F4; color: #3A3A3A; }
.btn-pay { display: inline-flex; align-items: center; justify-content: center; height: 48px; padding: 0 22px; border: 0; border-radius: 999px; background: var(--pay); color: #fff; font: inherit; font-size: 14px; font-weight: 500; cursor: pointer; text-decoration: none; }
.btn-pay:hover { background: var(--pay-h); }
.cv-apr-w .r.is-over, .cv-dec.is-over { box-shadow: inset 3px 0 0 var(--over); }
.cv-apr-w .r.is-over { padding-left: 10px; }
.by.is-over b, .by.is-over .lab { color: var(--over); }
.by.is-soon b { color: var(--soon); }
.cv-dec .by { display: inline-flex; gap: 6px; align-items: baseline; }
.cv-dec.is-over .by { background: var(--over-bg); border-radius: 8px; padding: 4px 8px; }
/* «Сейчас важно» */
.cv-now { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin-top: 24px; padding: 16px 20px; border-radius: 20px; background: var(--surface); }
.cv-now + .cv-now { margin-top: 8px; }
.cv-now.is-over { background: var(--over-bg); box-shadow: inset 3px 0 0 var(--over); }
.cv-now .t { flex: 1 1 280px; font-size: 15px; }
.cv-now .by { display: inline-flex; gap: 6px; align-items: baseline; }
.cv-now .btn-pay, .cv-now .btn-k { height: 40px; font-size: 13px; }
.pill-g.sm { height: 22px; padding: 0 8px; font-size: 11px; }
@media (max-width: 760px) { .cv-path li span { display: none; } .cv-path li.is-current span { display: block; position: absolute; } .cv-path { position: relative; padding-bottom: 18px; } }

/* доработки главной, раздел 2: минималистичный календарь — без иконок и цветных меток; вид — черта 3 px слева, просрочка — красным */
.k-work { --k: var(--accent); } .k-payment { --k: #8A7F72; } .k-delivery { --k: #2F5D3A; } .k-decide { --k: #8A8A8A; }
.cv-crow { box-shadow: inset 3px 0 0 var(--k); padding-left: 14px; }
.cv-crow.is-done { box-shadow: inset 3px 0 0 var(--hair); }
.cv-crow.is-over { box-shadow: inset 3px 0 0 var(--over); }
.cv-crow.is-over .t { color: var(--over); }
.cv-over-t { color: var(--over); }
.pill-n.cv-over { background: var(--over-bg); color: var(--over); }
.dots i { background: #A8A8A8; }
.dots i.is-over { background: var(--over); }
.dc.is-sel .dots i { box-shadow: none; background: #fff; }
.dc.is-sel .dots i.is-over { background: #FF8A80; }
.cv-month .ev.is-over { box-shadow: inset 2px 0 0 var(--over); background: var(--over-bg); color: var(--over); }

/* доработки главной, раздел 3: «Чаты» — белая карточка с контуром 1 px под «Согласованиями» */
.cv-side { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
.cv-chats-w { padding: 20px 24px; border: 1px solid var(--line); border-radius: 24px; background: var(--bg); display: flex; flex-direction: column; }
.cv-chats-w .hd { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.cv-chats-w .rows { margin-top: 8px; display: flex; flex-direction: column; }
.cv-chats-w .r { display: flex; gap: 12px; align-items: center; padding: 10px 0; border: 0; border-top: 1px solid var(--hair); background: none; text-align: left; cursor: pointer; font: inherit; color: inherit; }
.cv-chats-w .r:first-child { border-top: 0; }
.cv-chats-w .tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.cv-chats-w .t { font-size: 14px; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-chats-w .tx .lab { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-chats-w .r.is-new .t { font-weight: 600; }
.cv-chats-w .tm { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; white-space: nowrap; }
.cv-chats-w .nd { width: 8px; height: 8px; border-radius: 50%; background: var(--pay); }
.cv-chats-w .ft { margin-top: 10px; }

/* доработки главной, разделы 5, 6: команда объекта и визитка проектного менеджера */
.cv-face { display: block; flex: 0 0 auto; border-radius: 50%; object-fit: cover; background: var(--surface); }
.cv-face.is-ini { display: grid; place-items: center; color: var(--text-2); font-weight: 600; }
.cv-team { margin-top: 64px; }
.cv-team-big { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; margin-top: 24px; }
.cv-tm { display: flex; gap: 20px; align-items: center; padding: 24px; border: 1px solid var(--line); border-radius: 24px; }
.cv-tm .n { font-size: 20px; font-weight: 600; line-height: 1.25; }
.cv-tm .lab { margin-top: 4px; }
.cv-team-sm { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px 20px; margin-top: 20px; }
.cv-ts { display: flex; gap: 14px; align-items: center; padding: 6px 0; }
.cv-ts .n { font-size: 15px; font-weight: 600; }
.cv-ts .on { display: flex; align-items: center; gap: 6px; margin-top: 4px; font-size: 12px; color: var(--done); }
.cv-ts .on .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--done); }
.cv-mgr { display: flex; align-items: center; gap: 10px; padding: 4px 6px 4px 4px; border: 1px solid var(--line); border-radius: 999px; }
.cv-mgr .tx { display: flex; flex-direction: column; line-height: 1.2; }
.cv-mgr .n { font-size: 13px; color: var(--text); font-weight: 600; }
.cv-mgr .tx .lab { font-size: 11px; }
.cv-mgr .lnk { border: 0; background: var(--surface); border-radius: 999px; height: 28px; padding: 0 12px; font: inherit; font-size: 12px; color: var(--text); cursor: pointer; }
@media (max-width: 760px) {
  .cv-team-big { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .cv-tm { padding: 18px; gap: 16px; }
  .cv-tm .cv-face { width: 72px !important; height: 72px !important; }
  .cv-mgr { border: 0; padding: 0; }
  .cv-mgr .tx { display: none; }
}

/* доработки главной, раздел 4: «Новое на объекте» по дням, вертикальные видео и плеер как Reels */
.cv-feed { margin-top: 64px; }
/* одна горизонтальная лента: дни подряд, у каждого дня подпись сверху и свои карточки */
.cv-frow { display: flex; gap: 28px; overflow-x: auto; scroll-snap-type: x proximity; padding-bottom: 8px; margin-top: 22px; }
.cv-fday { flex: 0 0 auto; scroll-snap-align: start; padding-left: 14px; border-left: 1px solid var(--hair); }
.cv-fday:first-child { padding-left: 0; border-left: 0; }
.cv-fday-h { margin: 0 0 10px; font-weight: 400; }
.cv-fitems { display: flex; gap: 14px; align-items: flex-start; }
.cv-fitems > * { flex: 0 0 auto; }
.cv-vt { position: relative; width: 200px; aspect-ratio: 9 / 16; border: 0; padding: 0; border-radius: 20px; overflow: hidden; background: #1a1a1a; cursor: pointer; color: #fff; text-align: left; font: inherit; }
.cv-vt.is-h { width: 356px; aspect-ratio: 16 / 9; align-self: flex-start; }
.cv-vt video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-vt .play { position: absolute; left: 12px; top: 12px; width: 34px; height: 34px; border-radius: 50%; background: rgba(0, 0, 0, .45); display: grid; place-items: center; }
.cv-vt .dur { position: absolute; right: 12px; top: 18px; font-size: 12px; background: rgba(0, 0, 0, .45); border-radius: 999px; padding: 2px 8px; }
.cv-vt .cap { position: absolute; left: 0; right: 0; bottom: 0; padding: 40px 12px 12px; background: linear-gradient(transparent, rgba(0, 0, 0, .65)); display: flex; flex-direction: column; gap: 2px; font-size: 13px; line-height: 1.3; }
.cv-vt .cap .by { font-size: 11px; opacity: .8; }
.cv-fw { display: block; width: 280px; color: inherit; text-decoration: none; }
.cv-fw .ph { position: relative; height: 356px; border-radius: 20px; overflow: hidden; background: var(--surface); }
.cv-fw .ph img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.cv-fw .tag { position: absolute; left: 12px; top: 12px; }
.cv-fw .cap { position: absolute; left: 0; right: 0; bottom: 0; padding: 40px 14px 14px; background: linear-gradient(transparent, rgba(0, 0, 0, .6)); color: #fff; font-size: 14px; }
.cv-reels { position: fixed; inset: 0; z-index: 90; background: rgba(0, 0, 0, .92); display: flex; align-items: center; justify-content: center; }
.cv-reels .stage { position: relative; height: min(88vh, 860px); aspect-ratio: 9 / 16; max-width: 100vw; display: flex; flex-direction: column; }
.cv-reels .stage.is-h { height: auto; width: min(92vw, 1200px); aspect-ratio: 16 / 9; }
.cv-reels video { width: 100%; height: 100%; object-fit: contain; background: #000; border-radius: 16px; outline: none; }
.cv-reels .meta { position: absolute; left: 16px; right: 16px; top: 14px; display: flex; flex-direction: column; gap: 2px; color: #fff; font-size: 13px; text-shadow: 0 1px 3px rgba(0, 0, 0, .6); pointer-events: none; }
.cv-reels .meta .n { font-size: 11px; opacity: .75; }
.cv-reels .x, .cv-reels .nav { position: absolute; width: 44px; height: 44px; border-radius: 50%; border: 0; background: rgba(255, 255, 255, .14); display: grid; place-items: center; cursor: pointer; }
.cv-reels .x { right: 20px; top: 20px; }
.cv-reels .nav.prev { left: calc(50% - min(88vh, 860px) * 9 / 32 - 72px); top: 50%; }
.cv-reels .nav.next { right: calc(50% - min(88vh, 860px) * 9 / 32 - 72px); top: 50%; }
@media (max-width: 760px) {
  .cv-vt { width: 160px; }
  .cv-vt.is-h { width: 280px; }
  .cv-fw { width: 220px; }
  .cv-fw .ph { height: 284px; }
  .cv-reels { background: #000; }
  .cv-reels .stage { height: 100vh; width: 100vw; aspect-ratio: auto; }
  .cv-reels video { border-radius: 0; }
  .cv-reels .nav { display: none; }
}

/* доработки главной, раздел 10: заголовки карточек — h2/h3 с видом подписи, ссылка «Перейти к содержанию», меню «Ещё» */
.cv-hd { margin: 0; font-weight: 400; }
.cv-main:focus { outline: none; }
.cv-skip { position: absolute; left: 16px; top: -48px; z-index: 100; background: var(--accent); color: #fff; padding: 10px 16px; border-radius: 999px; font-size: 13px; }
.cv-skip:focus { top: 12px; }
a.cv-kpi { display: block; color: inherit; text-decoration: none; }
.cv-nav a[aria-current="page"] { color: var(--text); font-weight: 500; }
.cv-more { position: relative; }
.cv-more > button { font-size: 14px; color: var(--muted); background: none; border: 0; padding: 0; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
.cv-more > button[aria-expanded="true"], .cv-more.is-cur > button { color: var(--text); }
.cv-more ul { position: absolute; left: -12px; top: calc(100% + 10px); z-index: 40; min-width: 200px; margin: 0; padding: 6px; list-style: none; background: var(--bg); border: 1px solid var(--line); border-radius: 16px; box-shadow: 0 12px 32px rgba(0, 0, 0, .08); }
.cv-more li a { display: block; padding: 9px 12px; border-radius: 10px; font-size: 14px; color: var(--text); }
.cv-more li a:hover, .cv-more li a:focus-visible { background: var(--surface); }
.cv-more li a[aria-current="page"] { font-weight: 600; }
@media (max-width: 760px) { .cv-more ul { position: fixed; left: 16px; right: 16px; top: auto; } }
/* финальная проверка доработок главной: прошедший срок сдачи — красным, как просрочка */
.cv-late { color: var(--over); }
.cv-payrow.is-over { box-shadow: inset 3px 0 0 var(--over); padding-left: 10px; }
.cv-gate.is-over { box-shadow: inset 3px 0 0 var(--over); }

/* полоса хода работ (вариант A шапки, 2026-10-24) */
@keyframes cv-fill { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes cv-pulse { 0% { box-shadow: 0 0 0 0 rgba(47, 93, 58, .45); } 70% { box-shadow: 0 0 0 9px rgba(47, 93, 58, 0); } 100% { box-shadow: 0 0 0 0 rgba(47, 93, 58, 0); } }
.cv-prog { margin-top: 32px; background: var(--surface); border-radius: 28px; padding: 28px 32px 30px; display: flex; flex-direction: column; gap: 22px; }
.cv-prog-live { display: flex; justify-content: space-between; align-items: center; gap: 8px 16px; flex-wrap: wrap; font-size: 14px; }
.cv-prog-live .now { display: inline-flex; align-items: center; gap: 12px; min-width: 0; }
.cv-prog-live .last { color: var(--muted); font-size: 13px; }
.cv-pulse { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--done); animation: cv-pulse 2s ease-out infinite; }
.cv-prog-path { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.cv-prog-path li { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.cv-prog-path li .b { height: 12px; border-radius: 999px; background: var(--line); overflow: hidden; display: block; }
.cv-prog-path li .b i { display: block; height: 100%; }
.cv-prog-path li.is-done .b i { background: var(--done); transform-origin: left center; animation: cv-fill .6s cubic-bezier(.2, .7, .2, 1) both; }
/* текущая фаза — «фронт работ» (Роман, 29.10): сделанная часть залита чуть заметно (--front-fill), по ней тихий блик, на краю — яркая точка с пульсом; без штриховки и стыков */
.cv-prog-path li.is-current .b { position: relative; overflow: visible; background: var(--line); }
.cv-prog-path li.is-current .b i { position: relative; overflow: hidden; border-radius: 999px; background: var(--front-fill); transform-origin: left center; animation: cv-fill .6s cubic-bezier(.2, .7, .2, 1) both; }
.cv-prog-path .cv-front { width: 16px; height: 16px; margin: -8px 0 0 -8px; }
.cv-prog-path li .l { font-size: 13px; line-height: 1.3; color: var(--muted); }
.cv-prog-path li.is-done .l { color: var(--text-2); }
.cv-prog-path li.is-current .l { color: var(--text); font-weight: 500; }
.cv-prog-path li .s { display: block; font-weight: 400; color: var(--muted); }
.cv-prog-path li .s.d { margin-top: 2px; }
.cv-prog-path li .s.is-shift { color: var(--text); font-weight: 500; }
/* честные сдвиги сроков (KSH-529) */
.cv-shift { display: flex; flex-direction: column; gap: 8px; }
.cv-shift-r { display: flex; justify-content: space-between; align-items: baseline; gap: 4px 16px; flex-wrap: wrap; padding: 12px 16px; border-radius: 12px; background: var(--bg); font-size: 14px; color: var(--text); text-decoration: none; }
.cv-shift-r b { font-weight: 500; min-width: 0; }
.cv-shift-r.is-you { box-shadow: inset 3px 0 0 var(--over); }
.cv-shift-r.is-you .lab { color: var(--text); }
.cv-prog-cur { display: none; font-size: 14px; font-weight: 500; }
.cv-prog-cur .s { display: block; font-size: 13px; font-weight: 400; color: var(--text-2); margin-top: 2px; }
.cv-prog-path li.is-current .s { color: var(--text-2); }
.cv-prog-facts { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; border-top: 1px solid var(--line); padding-top: 20px; }
.cv-fact { display: flex; flex-direction: column; gap: 4px; min-width: 0; color: var(--text); }
.cv-fact .v { font-size: 28px; font-weight: 300; letter-spacing: -.02em; font-variant-numeric: tabular-nums; line-height: 1.15; }
.cv-fact .lab { font-size: 13px; display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
.cv-fact .ok { display: inline-flex; align-items: center; gap: 5px; color: var(--done); }
.cv-fact:hover .v { text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 1px; }
.cv-fact:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 12px; }
@media (prefers-reduced-motion: reduce) { .cv-prog .cv-pulse, .cv-prog-path li .b i { animation: none !important; } }
@media (min-width: 761px) and (max-width: 1000px) { .cv-prog-facts { grid-template-columns: 1fr 1fr; } }
@media (max-width: 760px) {
  .cv-prog { padding: 18px 18px 20px; border-radius: 24px; gap: 14px; margin-top: 20px; }
  .cv-prog-path { gap: 4px; }
  .cv-prog-path li .b { height: 10px; }
  .cv-prog-path li .l { display: none; }
  .cv-prog-cur { display: block; margin-top: -4px; }
  .cv-prog-facts { grid-template-columns: 1fr 1fr; gap: 14px 16px; padding-top: 14px; }
  .cv-fact .v { font-size: 22px; }
  .cv-fact .lab { font-size: 12px; }
}
/* до запуска проекта (client-v2-prestart.jsx): «где вы сейчас» и шаги пути своей ветки */
.cv-where { display: flex; flex-direction: column; gap: 4px; margin: 20px 0 0; max-width: 640px; font-size: 18px; line-height: 1.4; color: var(--text-2); }
.cv-where b { font-weight: 500; color: var(--text); }
.cv-steps { margin-top: 48px; }
.cv-steps ol { list-style: none; margin: 20px 0 0; padding: 0; border-top: 1px solid var(--hair); }
.cv-steps li { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; align-items: center; gap: 16px; padding: 16px 0; border-bottom: 1px solid var(--hair); }
.cv-steps .n { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; border: 1px solid var(--line); font-size: 12px; color: var(--muted); }
.cv-steps .t { font-size: 15px; line-height: 1.35; color: var(--muted); }
.cv-steps .st { font-size: 12px; color: var(--muted); white-space: nowrap; }
.cv-steps .is-done .n { background: var(--done); border-color: var(--done); color: #fff; }
.cv-steps .is-done .t { color: var(--text-2); }
.cv-steps .is-current .n { background: var(--accent); border-color: var(--accent); color: #fff; }
.cv-steps .is-current .t, .cv-steps .is-current .st { color: var(--text); font-weight: 500; }
.cv-steps .is-cancelled .t { color: var(--muted); text-decoration: line-through; }
@media (max-width: 760px) {
  .cv-where { font-size: 16px; }
  .cv-steps { margin-top: 32px; }
  .cv-steps li { gap: 12px; padding: 14px 0; }
}
/* окна «Замер» и «Бриф» до запуска (client-v2-prestart.jsx): карточка статуса и анкеты клиента (client-intake-forms.jsx) на токенах v2 */
.cv-mcard { margin-top: 28px; padding: 24px 28px; display: flex; flex-direction: column; align-items: flex-start; gap: 14px; }
.cv-mtext { margin: 0; font-size: 14px; line-height: 1.55; color: var(--text-2); max-width: 620px; }
.pill-k .dot { background: #fff; }
.cv-mtext b { font-weight: 500; color: var(--text); }
.cv-mfacts { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 18px 32px; width: 100%; margin: 4px 0 0; padding-top: 18px; border-top: 1px solid var(--line); }
.cv-mfacts dd { margin: 4px 0 0; font-size: 20px; line-height: 1.25; }
.cv-mfacts dd b { font-weight: 400; }
.cv-forms { margin-top: 28px; }
.cv-forms .ci-form-block { padding: 28px; border-radius: 32px; background: var(--surface); }
.cv-forms .ci-form-block.ci-form-locked { opacity: .85; }
.cv-forms .ci-form-head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 12px 24px; margin-bottom: 16px; }
.cv-forms .ci-form-title { margin: 0; font-size: 20px; font-weight: 500; color: var(--text); }
.cv-forms .ci-form-lede { margin: 6px 0 0; max-width: 56ch; font-size: 14px; line-height: 1.5; color: var(--text-2); }
.cv-forms .ci-form-meta { display: flex; align-items: center; gap: 10px; }
.cv-forms .ci-progress { font-size: 13px; color: var(--muted); }
.cv-forms .t-num { font-variant-numeric: tabular-nums; }
.cv-forms .ci-timer { display: inline-flex; align-items: center; gap: 6px; margin-bottom: 14px; padding: 6px 12px; border-radius: 999px; background: var(--bg); font-size: 12px; color: var(--text-2); }
.cv-forms .ci-timer.expired { background: var(--attention); }
.cv-forms .ci-steps { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.cv-forms .ci-step { height: 40px; padding: 0 18px; border: 1px solid var(--line); border-radius: 999px; background: var(--bg); font: inherit; font-size: 13px; color: var(--text-2); cursor: pointer; }
.cv-forms .ci-step.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.cv-forms .ci-step:focus-visible, .cv-forms .ci-chip:focus-visible, .cv-forms .ci-vote:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.cv-forms .ci-step-body { display: flex; flex-direction: column; gap: 14px; }
.cv-forms .ci-step-nav { display: flex; justify-content: space-between; align-items: center; margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--line); }
.cv-forms .ci-muted { font-size: 12px; color: var(--muted); }
.cv-forms .ci-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.cv-forms .ci-label { font-size: 12px; color: var(--muted); }
.cv-forms .ci-input { width: 100%; min-width: 0; height: 42px; padding: 0 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--bg); font: inherit; font-size: 14px; color: var(--text); }
.cv-forms .ci-input:focus { outline: 2px solid var(--accent); outline-offset: 0; border-color: var(--accent); }
.cv-forms .ci-input:disabled { background: var(--surface); color: var(--muted); cursor: not-allowed; }
.cv-forms .ci-textarea { height: auto; min-height: 64px; padding: 10px 12px; resize: vertical; line-height: 1.45; }
.cv-forms .ci-input-inline { flex: 1; min-width: 140px; width: auto; }
.cv-forms .ci-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.cv-forms .ci-chip { height: 40px; padding: 0 16px; border: 1px solid var(--line); border-radius: 999px; background: var(--bg); font: inherit; font-size: 13px; color: var(--text); cursor: pointer; }
.cv-forms .ci-chip.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.cv-forms .ci-chip:disabled, .cv-forms .ci-vote:disabled { opacity: .55; cursor: not-allowed; }
.cv-forms .ci-group { margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 14px; }
.cv-forms .ci-group:first-of-type { margin-top: 8px; padding-top: 0; border-top: 0; }
.cv-forms .ci-group-title { margin: 0; font-size: 16px; font-weight: 500; color: var(--text); }
.cv-forms .ci-group-sub { margin: -8px 0 0; font-size: 13px; line-height: 1.45; color: var(--text-2); }
.cv-forms .ci-style-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 12px; }
.cv-forms .ci-style-card { display: flex; flex-direction: column; overflow: hidden; border: 1px solid var(--line); border-radius: 20px; background: var(--bg); }
.cv-forms .ci-style-thumb { position: relative; display: grid; place-items: center; aspect-ratio: 4 / 3; min-height: 88px; overflow: hidden; background: var(--surface); }
.cv-forms .ci-style-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; }
.cv-forms .ci-style-thumb-ph { font-size: 24px; opacity: .45; }
.cv-forms .ci-style-ref-badge { position: absolute; right: 8px; bottom: 8px; padding: 2px 8px; border-radius: 999px; background: rgba(37, 37, 40, .6); font-size: 11px; color: #fff; }
.cv-forms .ci-style-cap { display: flex; flex-direction: column; gap: 2px; padding: 10px 12px 6px; }
.cv-forms .ci-style-cap strong { font-size: 13px; font-weight: 500; }
.cv-forms .ci-style-cap span { font-size: 11px; color: var(--muted); }
.cv-forms .ci-style-votes { display: flex; gap: 6px; padding: 0 10px 10px; }
.cv-forms .ci-vote { flex: 1; display: grid; place-items: center; min-height: 36px; border: 1px solid var(--line); border-radius: 12px; background: var(--bg); color: var(--text-2); cursor: pointer; }
.cv-forms .ci-vote.on { background: var(--accent); border-color: var(--accent); color: #fff; }
@media (prefers-reduced-motion: reduce) { .cv-forms * { transition: none !important; } }
@media (max-width: 760px) {
  .cv-mcard { padding: 20px; margin-top: 20px; }
  .cv-forms { margin-top: 20px; }
  .cv-forms .ci-form-block { padding: 20px; border-radius: 24px; }
  .cv-forms .ci-style-grid { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
}
/* ── КП: окно «Смета» до запуска как коммерческое предложение (lk/client-v2-prestart.jsx OfferWindow) и его печать ── */
@media (min-width: 761px) { .cv-modal.cv-kpmod { width: min(1040px, calc(100vw - 48px)); height: calc(100vh - 48px); } }
.cv-kp { margin-top: 24px; display: flex; flex-direction: column; gap: 44px; }
.cv-kp-cover { padding: 40px 44px; display: flex; flex-direction: column; align-items: flex-start; gap: 12px; }
.cv-kp-name { font-size: 44px; }
.cv-kp-facts { display: flex; flex-wrap: wrap; gap: 20px 56px; margin: 12px 0 6px; }
.cv-kp-banner { width: 100%; box-sizing: border-box; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 20px; margin-top: 8px; }
.cv-kp-sec .cv-mtext { margin: 10px 0 14px; }
.cv-kp-team { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 18px; margin-top: 18px; }
.cv-kp-tm { display: flex; align-items: center; gap: 14px; }
.cv-kp-tm .n, .cv-kp-case .n { font-size: 15px; font-weight: 500; }
.cv-kp-cases { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 24px; margin-top: 18px; }
.cv-kp-case { display: flex; flex-direction: column; gap: 4px; min-width: 0; break-inside: avoid; }
.cv-kp-case .tx { margin: 6px 0 0; font-size: 13px; line-height: 1.5; color: var(--text-2); }
.cv-kp-ph { display: grid; place-items: center; width: 100%; aspect-ratio: 4 / 3; margin-bottom: 10px; border-radius: 24px; background: var(--surface); object-fit: cover; font-size: 13px; color: var(--muted); }
.cv-kp-tl { list-style: none; margin: 20px 0 0 6px; padding: 0; border-left: 2px solid var(--hair); }
.cv-kp-tl li { position: relative; padding: 0 0 24px 26px; break-inside: avoid; }
.cv-kp-tl li::before { content: ''; position: absolute; left: -7px; top: 5px; width: 12px; height: 12px; border-radius: 50%; background: var(--bg); border: 2px solid var(--text); }
.cv-kp-tl .hd { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; font-size: 15px; }
.cv-kp-track { position: relative; height: 4px; margin-top: 10px; background: var(--hair); }
.cv-kp-track i { position: absolute; top: 0; bottom: 0; height: auto; border-radius: 2px; background: var(--text); }
.cv-kp-list { display: grid; gap: 10px; margin: 16px 0 0; padding-left: 20px; font-size: 14px; line-height: 1.5; color: var(--text-2); }
.cv-kp-about { margin: 14px 0 0; max-width: 720px; font-size: 15px; font-weight: 300; line-height: 1.6; color: var(--text-2); }
.cv-kp-tot { max-width: 420px; margin-top: 16px; }
.cv-kp-phase { margin-top: 30px; }
.cv-kp-phase > .hd { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding-bottom: 8px; border-bottom: 1px solid var(--line); }
.cv-kp-h3 { margin: 0; font-size: 17px; font-weight: 500; }
.cv-kp-stage .st { margin: 16px 0 4px; }
.cv-kp-line { padding: 10px 0; border-top: 1px solid var(--hair); break-inside: avoid; }
.cv-kp-line .row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 16px; }
.cv-kp-line .t { display: flex; flex-direction: column; gap: 2px; min-width: 0; font-size: 14px; }
.cv-kp-line .sum { font-size: 14px; white-space: nowrap; }
.cv-kp-line .dec { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }
.cv-kp-cm { margin-top: 4px; }
.cv-kp-rej { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 10px; margin-top: 12px; }
.cv-kp-rej .cv-ta { flex: 1 1 280px; }
.cv-kp-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 28px; }
/* KSH-495: «Посмотреть, как это делаем мы» в фазах, «Цена не меняется молча», итог внизу окна */
.cv-kp-how { margin-top: 10px; }
.cv-kp-how > summary { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; font-size: 13px; color: var(--text); list-style: none; border-bottom: 1px solid var(--line); padding-bottom: 1px; }
.cv-kp-how > summary::-webkit-details-marker { display: none; }
.cv-kp-how > summary::after { content: ''; width: 6px; height: 6px; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: rotate(45deg) translateY(-2px); transition: transform .2s; }
.cv-kp-how[open] > summary::after { transform: rotate(-135deg) translateY(-1px); }
.cv-kp-how > summary:focus-visible { outline: 2px solid var(--text); outline-offset: 3px; border-radius: 4px; }
.cv-kp-howb { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 16px; margin-top: 14px; }
.cv-kp-media { display: flex; gap: 12px; overflow-x: auto; padding-bottom: 4px; max-width: 100%; }
.cv-kp-media figure { margin: 0; flex: 0 0 auto; width: 200px; }
.cv-kp-media figure.is-v { width: 160px; }
.cv-kp-media img, .cv-kp-media video { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 16px; background: var(--surface); }
.cv-kp-media figure.is-v img, .cv-kp-media figure.is-v video { aspect-ratio: 9 / 16; }
.cv-kp-media figcaption { margin-top: 6px; line-height: 1.35; text-wrap: pretty; }
.cv-kp-hid { flex: 1 1 280px; padding: 16px 18px; border-radius: 20px; background: var(--surface); font-size: 13px; line-height: 1.5; color: var(--text-2); max-width: 60ch; }
.cv-kp-hid ul { margin: 8px 0 0; padding-left: 18px; display: grid; gap: 4px; color: var(--text); }
.cv-kp-hid p { margin: 10px 0 0; }
.cv-kp-tl .cv-kp-hid li { position: static; padding: 0; break-inside: auto; list-style: disc; }
.cv-kp-tl .cv-kp-hid li::before { content: none; }
.cv-kp-pm { list-style: none; margin: 18px 0 0; padding: 8px 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-radius: 28px; background: var(--surface); }
.cv-kp-pm li { display: grid; gap: 8px; align-content: start; padding: 16px 24px; font-size: 13px; line-height: 1.55; color: var(--text-2); }
.cv-kp-pm li + li { border-left: 1px solid var(--line); }
.cv-kp-pm b { font-size: 15px; font-weight: 500; color: var(--text); line-height: 1.35; }
@media (max-width: 760px) { .cv-kp-pm { grid-template-columns: 1fr; padding: 4px 0; } .cv-kp-pm li { padding: 16px 20px; } .cv-kp-pm li + li { border-left: 0; border-top: 1px solid var(--line); } .cv-kp-media figure.is-v { width: 132px; } }
.cv-kp-sticky { position: sticky; bottom: -40px; z-index: 2; display: flex; align-items: center; justify-content: space-between; gap: 16px; margin: 28px -40px -40px; padding: 16px 40px 20px; background: var(--bg); border-top: 1px solid var(--hair); }
.cv-kp-sticky b.num { font-size: 22px; font-weight: 500; }
@media (max-width: 760px) { .cv-kp-sticky { bottom: -40px; margin: 24px -16px -40px; padding: 12px 16px 16px; } .cv-kp-sticky b.num { font-size: 18px; } }
.cv-kp button:disabled { opacity: .5; cursor: not-allowed; }
/* смета «По комнатам» (KSH-502, lk/estimate-rooms-view.jsx): переключатель вида, карточки комнат, «Общее по объекту» */
.cv-er-tg { display: inline-flex; flex-wrap: wrap; gap: 6px; margin: 14px 0 20px; }
.cv-er-tg button { height: 36px; padding: 0 16px; border-radius: 999px; border: 1px solid var(--line); background: var(--bg); font: inherit; font-size: 13px; color: var(--text); cursor: pointer; }
.cv-er-tg button.on { background: var(--text); border-color: var(--text); color: #fff; }
.cv-er-print { display: none; margin: 0 0 12px; font-size: 20px; font-weight: 500; }
.cv-er-hint { margin: 0 0 4px; }
.cv-er-grp { margin: 28px 0 0; font-size: 13px; font-weight: 400; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.cv-er-room { margin-top: 14px; padding: 22px 24px; }
.cv-er-hd { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding-bottom: 8px; border-bottom: 1px solid var(--line); }
.cv-er-nm { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 12px; min-width: 0; }
.cv-er-rs { display: flex; align-items: center; gap: 12px; }
.cv-er-ra { margin-top: 12px; }
.cv-er-sub { margin: 16px 0 2px; }
.cv-er-dec { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; }
.cv-er-rejn { margin-top: 4px; }
.cv-er-chips { display: flex; flex-wrap: nowrap; gap: 6px; margin: 0 0 14px; padding-bottom: 4px; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: thin; }
.cv-er-chips button { flex: 0 0 auto; height: 34px; padding: 0 14px; border-radius: 999px; border: 1px solid var(--line); background: var(--bg); font: inherit; font-size: 13px; color: var(--text); cursor: pointer; white-space: nowrap; }
.cv-er-chips button.on { background: var(--text); border-color: var(--text); color: #fff; }
.cv-er-off { display: none; }
.cv-er-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 10px; margin-top: 10px; }
.cv-er-cd { display: flex; flex-direction: column; gap: 8px; align-items: stretch; padding: 14px 16px; border: 1px solid var(--line); border-radius: 18px; background: var(--bg); font: inherit; color: var(--text); text-align: left; cursor: pointer; }
.cv-er-cd:hover, .cv-er-cd:focus-visible { border-color: var(--text); }
.cv-er-cn { font-size: 15px; font-weight: 500; }
.cv-er-cm { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; font-size: 14px; }
.cv-er-bar { display: block; height: 4px; border-radius: 2px; background: var(--line); overflow: hidden; }
.cv-er-bar i { display: block; height: 100%; border-radius: 2px; background: var(--text); }
.cv-er-ct { line-height: 1.4; }
.cv-er-acc { border-bottom: 1px solid var(--line); }
.cv-er-ah { display: flex; align-items: center; gap: 10px; width: 100%; padding: 12px 0; border: 0; background: none; font: inherit; font-size: 14px; color: var(--text); text-align: left; cursor: pointer; }
.cv-er-ah .cv-er-an { flex: 1 1 auto; min-width: 0; }
.cv-er-ac { display: inline-block; width: 12px; color: var(--muted); transition: transform .15s; }
.cv-er-acc.on > .cv-er-ah .cv-er-ac { transform: rotate(90deg); }
.cv-er-ab { display: none; padding: 0 0 8px 22px; }
.cv-er-acc.on > .cv-er-ab { display: block; }
.cv-er-line { padding: 6px 0; }
.cv-er-line .t { flex-direction: row; align-items: baseline; gap: 8px; }
.cv-er-q { white-space: nowrap; }
.cv-er-sh { color: var(--muted); }
.cv-er-tot { display: flex; justify-content: space-between; gap: 16px; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line); font-size: 15px; font-weight: 500; }
.cv-er-fn { margin-top: 14px; }
@media (max-width: 760px) {
  .cv-er-room { padding: 18px 16px; }
  .cv-kp { gap: 36px; }
  .cv-kp-cover { padding: 24px 20px; }
  .cv-kp-name { font-size: 30px; }
  .cv-kp-line .row { grid-template-columns: minmax(0, 1fr) auto; }
  .cv-kp-line .dec { grid-column: 1 / -1; justify-content: flex-start; }
}
/* печать / PDF браузера: только само КП — без шапки, меню, скрима, кнопок и полей ввода, на всю ширину листа.
   Только пока открыто окно КП (рамка Pre.Frame с cv-kpmod ставит класс на body): иначе дом и страница дизайна печатают себя */
@media print {
  body.cv-print-kp .cv-page, body.cv-print-kp .cv-head, body.cv-print-kp .cv-sv, body.cv-print-kp .cv-scrim, body.cv-print-kp .cv-mhead .x, body.cv-print-kp .cv-kp-noprint, body.cv-print-kp .cv-kp button, body.cv-print-kp .cv-kp textarea, body.cv-print-kp .cv-kp .cv-kp-actions { display: none !important; }
  body.cv-print-kp { background: #fff; }
  body.cv-print-kp .cv-modal, body.cv-print-kp .cv-modal.cv-kpmod { position: static; transform: none; width: auto; max-width: none; height: auto; overflow: visible; padding: 0; border-radius: 0; box-shadow: none; }
  body.cv-print-kp .cv-kp { margin-top: 12px; gap: 28px; }
  body.cv-print-kp .cv-kp-cover { padding: 0; background: none; }
  body.cv-print-kp .cv-kp-sec { break-inside: auto; }
  body.cv-print-kp .cv-kp-phase { break-inside: auto; }
  body.cv-print-kp .cv-er-print { display: block; }
  body.cv-print-kp .cv-er-room { border-radius: 0; padding: 14px 0 0; break-inside: auto; }
  body.cv-print-kp .cv-er-grp { break-after: avoid; }
  body.cv-print-kp .cv-er-off { display: block !important; }
  body.cv-print-kp .cv-er-ov { display: none !important; }
  body.cv-print-kp .cv-er-ab { display: block !important; }
  body.cv-print-kp .cv-er-acc { break-inside: auto; }
  body.cv-print-kp .cv-kp button.cv-er-ah, body.cv-print-kp button.cv-er-ah { display: flex !important; padding: 6px 0; cursor: default; }
  body.cv-print-kp .cv-er-ac { display: none; }
}

/* UI/UX-ревью 29.10 (KSH-469): блоки главной — одна карточка, один заголовок, одна шкала строк; «Сейчас важно» — карточками в ряд */
.cv-nowrow { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 12px; margin-top: 24px; }
.cv-nowrow .cv-now { margin: 0; display: flex; flex-direction: column; align-items: stretch; gap: 6px; padding: 18px 20px; border-radius: 24px; flex-wrap: nowrap; }
.cv-nowrow .cv-now + .cv-now { margin-top: 0; }
.cv-nowrow .cv-now .top { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
.cv-nowrow .cv-now .by { font-size: 12px; }
.cv-nowrow .cv-now .t { flex: none; font-size: 17px; font-weight: 500; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-nowrow .cv-now.is-pay .t { font-size: 22px; font-weight: 400; letter-spacing: -.01em; font-variant-numeric: tabular-nums; }
.cv-nowrow .cv-now .bot { display: flex; justify-content: space-between; align-items: center; gap: 12px; }
.cv-nowrow .cv-now .bot .lab { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-nowrow .cv-now .btn-pay, .cv-nowrow .cv-now .btn-l { height: 38px; font-size: 13px; padding: 0 18px; flex: none; }

.cv-two { align-items: stretch; gap: 32px; }
.cv-w { border: 1px solid var(--line); border-radius: 24px; background: var(--bg); padding: 20px 24px; display: flex; flex-direction: column; min-width: 0; }
.cv-w .hd { display: flex; justify-content: space-between; align-items: center; gap: 8px; min-height: 28px; }
.cv-wt { margin: 0; font-size: 16px; font-weight: 500; line-height: 1.3; color: var(--text); }
.cv-wlink { background: none; border: 0; padding: 0; font: inherit; font-size: 13px; color: var(--text-2); cursor: pointer; }
.cv-wlink:hover { color: var(--text); }
.cv-w .ft { display: flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 12px; }
.cv-side { gap: 16px; }
/* строки во всех трёх блоках — одна шкала: название 14/500, подпись 12 серым, отступ 10 */
.cv-apr-w .r, .cv-chats-w .r, .cv-crow { padding-top: 10px; padding-bottom: 10px; }
.cv-apr-w .r .t, .cv-chats-w .t, .cv-crow .t { font-size: 14px; font-weight: 500; line-height: 1.35; }
.cv-chats-w .r.is-new .t { font-weight: 600; }
.cv-crow.is-done .t { font-weight: 400; }
/* прокрутка внутри блока: календарь тянется до высоты соседней колонки, согласования — до ~4 строк */
.cv-scroll { overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; }
.cv-scroll:focus-visible { outline: 2px solid var(--line); outline-offset: 2px; border-radius: 8px; }
.cv-cal-list { flex: 1 1 0; min-height: 240px; margin-top: 8px; padding-right: 4px; }
.cv-cal .cv-cday { margin-top: 12px; }
.cv-cal .cv-wk { margin-top: 14px; }
.cv-cal .cv-wk .dc { height: 48px; }
.cv-apr-w .rows.cv-scroll { max-height: 236px; padding-right: 4px; }
/* визит на объект */
.cv-visit-b { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 10px; }
.cv-visit-b .tx { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.cv-visit-b .t { font-size: 14px; font-weight: 500; line-height: 1.35; }
.cv-visit-b .btn-l { height: 36px; font-size: 13px; padding: 0 16px; flex: none; }
/* «Этапы»: заголовок фазы как в смете — «/00» серым, 17/500; статус — один раз */
.cv-phase { margin-top: 32px; }
.cv-phase-h { align-items: center; padding-bottom: 10px; }
.cv-pht { margin: 0; font-size: 17px; font-weight: 500; line-height: 1.3; }
.cv-pht .no { color: var(--muted); font-weight: 400; margin-right: 4px; font-variant-numeric: tabular-nums; }
.cv-stage { padding: 14px 0; gap: 14px; }
.cv-stage .t { font-size: 15px; line-height: 1.35; }
.cv-stage .lab { margin-top: 3px; line-height: 1.4; }
.cv-items { gap: 4px; line-height: 1.4; }
@media (max-width: 1100px) {
  .cv-two { grid-template-columns: minmax(0, 1fr); }
  .cv-cal-list { flex: none; max-height: 420px; }
}
@media (max-width: 760px) {
  .cv-nowrow { grid-template-columns: minmax(0, 1fr); }
  .cv-w { padding: 18px 16px; border-radius: 20px; }
  .cv-visit-b { flex-wrap: wrap; }
}
/* «Этапы» как лента: линия через кружки; прошедшее — серым, мельче и с прозрачностью, текущее — в фокусе (референс Figma 749:3260) */
.cv-stage { position: relative; border-top: 0; }
.cv-stage::before { content: ''; position: absolute; left: 15.5px; top: 0; bottom: 0; width: 1px; background: var(--hair); }
.cv-phase .cv-stage:first-of-type::before { top: 24px; }
.cv-phase .cv-stage:last-child::before { bottom: calc(100% - 24px); }
.cv-stage .n { position: relative; z-index: 1; box-shadow: 0 0 0 4px var(--bg); }
.cv-stage.is-done { padding: 9px 0; opacity: .55; }
.cv-stage.is-done .n { width: 24px; height: 24px; margin: 4px; background: #6E6E73; }
.cv-stage.is-done .t { font-size: 14px; color: var(--text-2); }
.cv-stage.is-done:hover { opacity: .85; }
.cv-st-done { font-size: 12px; color: var(--muted); white-space: nowrap; padding-top: 6px; }
.cv-phase.is-done .cv-phase-h { opacity: .55; }
/* блоки главной — тише: тонкий контур, без плашек-иконок у строк согласований */
.cv-w { border-color: var(--hair); }
.cv-apr-w .r .ic { flex-basis: 28px; height: 28px; background: none; border: 1px solid var(--hair); border-radius: 8px; }
.cv-cal .cv-ctabs button { height: 30px; padding: 0 12px; font-size: 12px; }
@media (prefers-reduced-motion: reduce) { .pe-ph .pe-phh, .pe-st .pe-sh { transition: none; } }
/* цвет — только по делу (KSH-469): красный — просрочка, зелёный — кнопка оплаты; «скоро» — обычным текстом, «Сейчас важно» — белые карточки */
.by.is-soon b { color: var(--text); }
.cv-nowrow .cv-now { background: var(--bg); border: 1px solid var(--hair); }
.cv-nowrow .cv-now.is-over { background: var(--bg); box-shadow: inset 3px 0 0 var(--over); }
.cv-nowrow .cv-now.is-over .t { color: var(--text); }
/* ↗ — блок откроется окном (KSH-469) */
.cv-wopen { display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 12px 0 14px; border-radius: 999px; border: 1px solid var(--hair); background: var(--bg); font: inherit; font-size: 13px; color: var(--text-2); cursor: pointer; white-space: nowrap; }
.cv-wopen:hover { border-color: var(--line); color: var(--text); }
.cv-wn { margin-left: 8px; font-size: 14px; font-weight: 400; color: var(--muted); font-variant-numeric: tabular-nums; }
.cv-visit-b .btn-l, .cv-nowrow .cv-now .btn-l { gap: 6px; }
/* новое в чате: имя жирнее, текст тёмный, время и счётчик — зелёным (как в мессенджерах) */
.cv-chats-w .r.is-new .tx .lab { color: var(--text-2); }
.cv-chats-w .r.is-new .tm .lab { color: var(--pay); }
.cv-chats-w .nd { width: auto; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; background: var(--pay); color: #fff; font-size: 11px; font-weight: 600; display: inline-grid; place-items: center; font-style: normal; }
/* «Этапы»: строка этапа раскрывается — круглый шеврон справа (референс Figma 803:2218), состав работ — таблицей «Работа · Начало · Сдача» */
.cv-stage { display: block; }
.cv-stage-h { width: 100%; display: grid; grid-template-columns: 36px minmax(0, 1fr) auto 24px; gap: 14px; align-items: center; padding: 0; border: 0; background: none; font: inherit; color: inherit; text-align: left; }
button.cv-stage-h { cursor: pointer; }
.cv-stage-h .tx { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.cv-chev { width: 24px; height: 24px; border-radius: 50%; background: #6E6E73; display: grid; place-items: center; transition: transform .15s; }
.cv-stage.is-open .cv-chev { transform: rotate(90deg); }
.cv-stage.is-done .cv-chev { background: #B5B5BA; }
button.cv-stage-h:hover .cv-chev { background: var(--text); }
.cv-stage .cv-items { margin: 12px 0 4px 50px; gap: 0; }
.cv-item { display: grid; grid-template-columns: minmax(0, 1fr) 76px 76px; gap: 12px; padding: 7px 0; border-top: 1px solid var(--hair); font-size: 13px; color: var(--text); align-items: baseline; }
.cv-item > span:first-child { display: flex; gap: 6px; align-items: baseline; min-width: 0; }
.cv-item > span + span { text-align: right; color: var(--text-2); font-size: 12px; }
.cv-item.hd { border-top: 0; padding: 0 0 4px; font-size: 12px; color: var(--muted); }
.cv-item.hd > span + span { color: var(--muted); }
.cv-item.is-done { opacity: .5; }
.cv-item.is-cur { font-weight: 500; }
.cv-cur { flex: none; width: 6px; height: 6px; border-radius: 50%; background: var(--text); transform: translateY(-2px); }
@media (max-width: 760px) { .cv-stage .cv-items { margin-left: 0; } .cv-item { grid-template-columns: minmax(0, 1fr) 64px 64px; gap: 8px; } }
@media (prefers-reduced-motion: reduce) { .cv-chev { transition: none; } }
/* карточки главной по референсу Figma 803:2172: белая карточка в светлой рамке-подложке, счётчик в квадрате, тёмный круг ↗, чёрная кнопка внизу */
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.cv-w { border: 1px solid #E6E6E8; border-radius: 26px; box-shadow: 0 0 0 7px #F3F3F4, 0 0 0 8px #E9E9EB; margin: 8px; padding: 22px 24px; }
.cv-two { gap: 24px; }
.cv-side { gap: 16px; }
.cv-w .hd { justify-content: flex-start; gap: 12px; }
.cv-w .hd .cv-wt { flex: 1; font-size: 17px; font-weight: 600; letter-spacing: -.01em; }
.cv-wno { flex: none; min-width: 30px; height: 30px; padding: 0 7px; border: 1px solid #E6E6E8; border-radius: 9px; display: inline-grid; place-items: center; font-size: 13px; color: var(--text-2); font-variant-numeric: tabular-nums; }
.cv-wcirc { flex: none; width: 28px; height: 28px; border-radius: 50%; border: 0; background: #6E6E73; display: grid; place-items: center; cursor: pointer; }
.cv-wcirc:hover { background: var(--text); }
.cv-w .ft { margin-top: auto; padding-top: 16px; }
.cv-wbtn { display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 16px 0 18px; border-radius: 14px; border: 0; background: #111; color: #fff; font: inherit; font-size: 13px; font-weight: 500; cursor: pointer; box-shadow: 0 0 0 2px #fff, 0 0 0 3px #CFCFD3; }
.cv-wbtn:hover { background: #2A2A2D; }
.cv-cal .cv-cal-list { min-height: 200px; }
@media (max-width: 760px) { .cv-w { margin: 7px 7px 12px; } }
/* KSH-469, третий проход: без больших чёрных и серых кнопок — маленькая чёрная стрелка ↗ */
.cv-wcirc { width: 28px; height: 28px; background: none; color: var(--text); border-radius: 8px; }
.cv-wcirc:hover { background: var(--surface); }
.cv-arrow-btn { display: inline-flex; align-items: center; gap: 4px; height: 30px; padding: 0 4px; border: 0; background: none; font: inherit; font-size: 13px; font-weight: 500; color: var(--text); cursor: pointer; white-space: nowrap; }
.cv-arrow-btn:hover { text-decoration: underline; text-underline-offset: 3px; }
.cv-arrow-btn:disabled { color: var(--muted); cursor: default; text-decoration: none; }
/* визит: дата прямо в блоке */
.cv-visit-b { align-items: flex-end; }
.cv-visit-b.is-col { flex-direction: column; align-items: stretch; gap: 8px; }
.cv-vdate { margin-top: 6px; height: 36px; border: 1px solid var(--line); border-radius: 10px; padding: 0 10px; font: inherit; font-size: 14px; color: var(--text); background: var(--bg); }
.cv-vchips { display: flex; gap: 8px; flex-wrap: wrap; }
.cv-vchips button { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 8px 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--bg); font: inherit; color: var(--text); cursor: pointer; }
.cv-vchips button b { font-size: 13px; font-weight: 500; }
.cv-vchips button span { font-size: 12px; color: var(--muted); }
.cv-vchips button:hover:not(:disabled) { border-color: var(--text); }
.cv-vchips button:disabled { opacity: .5; cursor: default; }
/* разделы плитками */
.cv-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 40px; }
.cv-tile { display: flex; flex-direction: column; gap: 4px; padding: 16px 18px; border: 1px solid var(--hair); border-radius: 18px; background: var(--bg); color: var(--text); }
.cv-tile .t { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-size: 15px; font-weight: 500; }
.cv-tile:hover { border-color: var(--line); background: #FAFAFA; }
.cv-tile.is-hot .lab { color: var(--text); font-weight: 500; }
/* меню и «Ещё» — компактнее */
.cv-more ul { padding: 6px; min-width: 200px; }
.cv-more li a { padding: 8px 12px; font-size: 14px; border-radius: 10px; }
/* «Этапы»: шеврон — маленькая чёрная стрелка; дата окончания справа */
.cv-stage-h { grid-template-columns: 36px minmax(0, 1fr) auto 18px; }
.cv-chev { width: 18px; height: 18px; background: none; color: var(--text); border-radius: 0; }
.cv-stage.is-done .cv-chev { background: none; color: var(--muted); }
button.cv-stage-h:hover .cv-chev { background: none; color: var(--text); }
.cv-item { grid-template-columns: minmax(0, 1fr) 80px; }
/* ход этапа: заполнение при открытии + бегущая штриховка у идущего */
.cv-sprog { display: flex; align-items: center; gap: 12px; margin: 10px 0 0 50px; }
.cv-sprog .bar { flex: 1; height: 6px; border-radius: 6px; background: var(--hair); overflow: hidden; }
.cv-sprog .bar i { display: block; height: 100%; border-radius: 6px; background: var(--text); animation: cv-sfill .9s cubic-bezier(.2, .7, .2, 1) both; transform-origin: left; }
.cv-stage.is-current .cv-sprog .bar i { position: relative; overflow: hidden; background: var(--front-fill); }
.cv-sprog .v { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
@keyframes cv-sfill { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@media (prefers-reduced-motion: reduce) { .cv-sprog .bar i, .cv-stage.is-current .cv-sprog .bar i { animation: none; } }
@media (max-width: 760px) { .cv-sprog { margin-left: 0; } }

/* KSH-469, четвёртый проход: уют и лёгкое движение */
/* просрочка — красным текстом, без красной полосы сбоку */
.cv-nowrow .cv-now.is-over, .cv-apr-w .r.is-over, .cv-payrow.is-over, .cv-dec.is-over { box-shadow: none; }
.cv-apr-w .r.is-over, .cv-payrow.is-over { padding-left: 0; }
.cv-crow.is-over { box-shadow: inset 3px 0 0 var(--hair); }
/* уют: тёплая подложка у карточек, мягче углы и тень */
.cv-w { border-color: #ECEAE6; box-shadow: 0 0 0 7px #F6F5F2, 0 0 0 8px #ECEAE6, 0 18px 40px -28px rgba(60, 50, 30, .18); border-radius: 28px; transition: box-shadow .3s ease; }
.cv-w:hover { box-shadow: 0 0 0 7px #F3F1ED, 0 0 0 8px #E4E1DB, 0 22px 44px -26px rgba(60, 50, 30, .22); }
.cv-nowrow .cv-now { border-color: #ECEAE6; border-radius: 26px; }
/* стрелка ↗ чуть сдвигается вверх-вправо при наведении */
.cv-wcirc svg, .cv-arrow-btn svg, .cv-tile svg { transition: transform .2s ease; }
.cv-wcirc:hover svg, .cv-arrow-btn:hover svg { transform: translate(2px, -2px); }
/* строки — мягкая подсветка */
.cv-apr-w .r, .cv-chats-w .r, .cv-crow, button.cv-stage-h { transition: background-color .2s ease; border-radius: 10px; }
.cv-apr-w .r:hover, .cv-chats-w .r:hover, .cv-crow:hover { background-color: #FAF9F7; }
/* «Оплатить»: объём как у тёмной кнопки референса, мягкий блик раз в несколько секунд, лёгкое нажатие */
.btn-pay { position: relative; overflow: hidden; box-shadow: inset 0 .5px 0 rgba(255, 255, 255, .5), inset 0 9px 14px -5px rgba(255, 255, 255, .22), 0 0 0 1.5px #1A8530, 0 4px 10px -2px rgba(33, 160, 56, .35); transition: transform .15s ease, box-shadow .2s ease, background-color .2s ease; }
.btn-pay::after { content: ''; position: absolute; top: 0; bottom: 0; left: -60%; width: 40%; background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .35), transparent); transform: skewX(-18deg); animation: cv-sheen 5.5s ease-in-out 1.2s infinite; pointer-events: none; }
.btn-pay:hover { transform: translateY(-1px); box-shadow: inset 0 .5px 0 rgba(255, 255, 255, .5), inset 0 9px 14px -5px rgba(255, 255, 255, .25), 0 0 0 1.5px #1A8530, 0 8px 16px -4px rgba(33, 160, 56, .45); }
.btn-pay:active { transform: translateY(0) scale(.98); }
@keyframes cv-sheen { 0%, 70% { left: -60%; } 100% { left: 130%; } }
/* появление главной: блоки один раз мягко поднимаются друг за другом */
.cv-main > .cv-prog, .cv-nowrow > *, .cv-two > *, .cv-side > * { animation: cv-rise .6s cubic-bezier(.2, .7, .2, 1) both; }
.cv-nowrow > :nth-child(1) { animation-delay: .08s; } .cv-nowrow > :nth-child(2) { animation-delay: .14s; }
.cv-two > :first-child { animation-delay: .2s; } .cv-side > :nth-child(1) { animation-delay: .24s; } .cv-side > :nth-child(2) { animation-delay: .3s; } .cv-side > :nth-child(3) { animation-delay: .36s; }
@keyframes cv-rise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
/* «Оплаты»: итоги и список — в карточках главной; оплаченное — тише */
.cv-paysum { margin-top: 24px; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 28px; padding: 24px 28px; }
.cv-paysum .stat { font-size: 32px; }
.cv-paylist { margin-top: 28px; padding: 6px 24px; }
.cv-paylist .cv-payrow:first-child { border-top: 0; }
.cv-payrow.is-done { opacity: .55; }
.cv-payrow.is-done:hover { opacity: .85; }
/* «Что открывает следующие этапы» — те же карточки */
.cv-gates .cv-w.cv-gate { margin: 8px 8px 20px; padding: 18px 20px; }
.cv-gates .cv-w.cv-gate .btn-g { box-shadow: none; }
@media (max-width: 1100px) { .cv-paysum { grid-template-columns: 1fr 1fr; } }
@media (prefers-reduced-motion: reduce) {
  .cv-main > .cv-prog, .cv-nowrow > *, .cv-two > *, .cv-side > * { animation: none; }
  .btn-pay::after { animation: none; display: none; }
  .btn-pay, .cv-w, .cv-wcirc svg, .cv-arrow-btn svg { transition: none; }
}
.cv-gate.is-over { box-shadow: 0 0 0 7px #F6F5F2, 0 0 0 8px #ECEAE6; }
.cv-gates .cv-cta.btn-pay { height: 36px; padding: 0 16px; font-size: 13px; }

/* KSH-469: боковые полосы в календаре тоже убраны — тот же приём, что Роман просил снять у просрочки */
.cv-crow, .cv-crow.is-done, .cv-crow.is-over { box-shadow: none; padding-left: 0; }
.cv-month .ev.is-over { box-shadow: none; }

/* KSH-469, 5-й проход (Роман, 02:42) */
/* тёмный цвет — «светлый графит» из lk-tokens.css (--text, --accent); здесь только охра просрочки календаря
   */
:root, html.lk-v2 { --late: #94632A; --late-bg: #F7F0E6; }
/* «фронт работ» (Роман, 29.10, второй круг): заливка сделанной части — чуть заметная, остаток — как «впереди», точка на краю — графит в полную силу */
:root, html.lk-v2 { --front-fill: color-mix(in srgb, var(--accent) 26%, #F3F1EE); --front-rest: #F3F1EE; }
.btn-k:hover { background: var(--accent-h); }
.cv-wbtn, .cv-vslot.on, .cv-rooms button.on { background: var(--accent); border-color: var(--accent); }

/* «Оплатить» / «Я оплатил»: спокойнее — без объёма, чуть меньше, блик едва заметный */
.btn-pay { height: 40px; padding: 0 18px; font-size: 13px; background: #2E9A4B; box-shadow: 0 1px 2px rgba(30, 90, 45, .18); }
.btn-pay:hover { background: #288A43; transform: none; box-shadow: 0 2px 6px -1px rgba(30, 90, 45, .25); }
.btn-pay::after { background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .16), transparent); animation-duration: 7s; }
.cv-nowrow .cv-now .btn-pay { height: 36px; padding: 0 16px; }

/* календарь: просрочка не красным — тёплая охра на песочном фоне */
.cv-cal .cv-over-t, .cv-calmod .cv-over-t { color: var(--late); }
.cv-crow.is-over { background: var(--late-bg); border-radius: 12px; padding-left: 12px; padding-right: 12px; }
.cv-crow.is-over .t { color: var(--text); }
.cv-crow .cv-over { background: transparent; color: var(--late); border: 1px solid rgba(148, 99, 42, .35); }
.dots i.is-over { background: var(--late); }
.dc.is-sel .dots i.is-over { background: #E0B77E; }
.cv-month .ev.is-over { background: var(--late-bg); color: var(--late); }

/* визит: подпись слева, время и «Подтвердить» справа, плашки компактнее */
.cv-visit-b.is-pick { flex-direction: row; align-items: center; justify-content: space-between; gap: 12px; }
.cv-visit-b.is-pick > .lab { max-width: 190px; }
.cv-vpick { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }
.cv-vchips { gap: 6px; }
.cv-vchips button { padding: 5px 10px; border-radius: 10px; }
.cv-vchips button b { font-size: 12px; }
.cv-vchips button span { font-size: 11px; }
.cv-vchips button.on { border-color: var(--accent); box-shadow: inset 0 0 0 1px var(--accent); }
@media (max-width: 700px) { .cv-visit-b.is-pick { flex-direction: column; align-items: stretch; } .cv-vpick { justify-content: flex-start; } }

/* KSH-469, окно «Этапы» (Роман, 03:24): две колонки со своей прокруткой, связь линией, документы и фото у этапов */
@media (min-width: 1101px) {
  .cv-modal.cv-stmod { display: flex; flex-direction: column; overflow: hidden; padding-bottom: 0; }
  .cv-stmod .cv-stages { flex: 1 1 auto; min-height: 0; align-items: stretch; gap: 0; grid-template-columns: minmax(0, 1fr) 448px; }
  .cv-stmod .cv-stages > div, .cv-stmod .cv-gates { min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding-bottom: 40px; scrollbar-width: thin; }
  .cv-stmod .cv-stages > div { padding-right: 40px; }
  .cv-stmod .cv-gates { position: relative; padding-left: 40px; }
}
/* цепочка справа: блоки связаны линией снизу — один этап открывает следующий; заголовок колонки — по линии текста карточек */
.cv-gates-h { padding-left: 28px; display: flex; flex-direction: column; gap: 6px; margin-bottom: 4px; }
.cv-gates .cv-w.cv-gate { position: relative; overflow: visible; }
.cv-gates .cv-w.cv-gate:not(:last-child) { margin-bottom: 44px; }
.cv-gates .cv-w.cv-gate:not(:last-child)::after { content: ''; position: absolute; left: 20px; top: calc(100% + 8px); height: 36px; width: 1.5px; background: #D6D2CC; }
.cv-gates .cv-w.cv-gate + .cv-w.cv-gate::before { content: ''; position: absolute; left: 16.75px; top: -15px; width: 8px; height: 8px; border-radius: 50%; background: #fff; border: 1.5px solid #CFCAC3; box-sizing: border-box; z-index: 1; }
/* документы фазы: компактные метки «Акт · сумма · статус ↓ ↗» под названием фазы */
.cv-pdocs { display: flex; flex-wrap: wrap; gap: 6px; margin: -4px 0 14px 37px; }
.cv-pdoc { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 4px 0 10px; border-radius: 999px; background: #FAF9F7; box-shadow: inset 0 0 0 1px var(--hair); color: var(--text-2); font-size: 12px; white-space: nowrap; }
.cv-pdoc .t { font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }
.cv-pdoc .lab { font-size: 12px; }
.cv-pdoc.is-due { background: #fff; box-shadow: inset 0 0 0 1px var(--line); }
.cv-pdoc.is-due .lab { color: var(--text); }
.cv-pdoc-a { width: 24px; height: 24px; border-radius: 50%; border: 0; background: none; display: inline-flex; align-items: center; justify-content: center; color: var(--text); cursor: pointer; padding: 0; }
.cv-pdoc-a:hover { background: #fff; box-shadow: 0 0 0 1px var(--line); }
/* фотоотчёт фазы — рядом с актом и счётом: три миниатюры и счётчик, открывает просмотр */
.cv-pdoc.is-ph { border: 0; font: inherit; font-size: 12px; cursor: zoom-in; padding: 0 10px 0 4px; }
.cv-pdoc-th { display: inline-flex; }
.cv-pdoc-th img { width: 22px; height: 22px; border-radius: 50%; object-fit: cover; box-shadow: 0 0 0 2px #FAF9F7; }
.cv-pdoc-th img + img { margin-left: -7px; }
/* (старое) фото: лента этапа и счётчик у принятой работы */
.cv-sphotos { display: flex; gap: 6px; margin: 4px 0 10px 46px; flex-wrap: wrap; }
.cv-sphotos button { width: 64px; height: 48px; padding: 0; border: 0; border-radius: 10px; overflow: hidden; cursor: zoom-in; background: var(--surface); }
.cv-sphotos img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .25s ease; }
.cv-sphotos button:hover img { transform: scale(1.06); }
.cv-sphotos .more { font: inherit; font-size: 12px; color: var(--text-2); cursor: pointer; }
.cv-iph { display: inline-flex; align-items: center; gap: 4px; height: 22px; padding: 0 8px; border: 0; border-radius: 999px; background: var(--surface); color: var(--text-2); font: inherit; font-size: 12px; cursor: zoom-in; }
.cv-iph:hover { background: var(--line); }
/* импульсная точка на конце полосы хода этапа */
.cv-sprog .bar { position: relative; overflow: visible; }
.cv-spulse { position: absolute; top: 50%; width: 10px; height: 10px; margin: -5px 0 0 -5px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 0 rgba(74, 69, 64, .45); animation: cv-spulse 1.8s ease-out infinite, cv-sfill .9s cubic-bezier(.2, .7, .2, 1) both; }
@keyframes cv-spulse { 0% { box-shadow: 0 0 0 0 rgba(74, 69, 64, .45); } 70% { box-shadow: 0 0 0 10px rgba(74, 69, 64, 0); } 100% { box-shadow: 0 0 0 0 rgba(74, 69, 64, 0); } }
/* «фронт работ»: блик по залитой части текущего участка (белый 20 %, раз в 5,5 с) и точка на её краю — общие для клиента и сотрудников (lk-widgets) */
.cv-prog-path li.is-current .b i::after, .cv-stage.is-current .cv-sprog .bar i::after, .cv-glint::after { content: ''; position: absolute; top: 0; bottom: 0; left: 0; width: 45%; background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .55), transparent); transform: translateX(-120%); animation: cv-glint 5.5s ease-in-out 1.2s infinite; pointer-events: none; }
@keyframes cv-glint { 0%, 55% { transform: translateX(-120%); } 100% { transform: translateX(260%); } }
.cv-front { position: absolute; top: 50%; z-index: 1; width: 12px; height: 12px; margin: -6px 0 0 -6px; border-radius: 50%; border: 2px solid #fff; background: var(--accent); pointer-events: none; animation: cv-front-in .3s ease-out .5s both, cv-spulse 1.8s ease-out .8s infinite; }
@keyframes cv-front-in { from { opacity: 0; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  .cv-prog-path li.is-current .b i::after, .cv-stage.is-current .cv-sprog .bar i::after, .cv-glint::after { animation: none; display: none; }
  .cv-front { animation: none; }
}
/* финальная фаза «Сдача» — праздничная подложка: шампань, тёплое свечение и мелкое конфетти */
.cv-phase.is-finale { position: relative; margin-top: 12px; padding: 22px 22px 14px; border-radius: 28px; isolation: isolate; overflow: hidden;
  background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%22420%22%20height%3D%22220%22%3E%3Cg%20opacity%3D%22.9%22%3E%3Crect%20x%3D%2230%22%20y%3D%2224%22%20width%3D%2210%22%20height%3D%224%22%20rx%3D%221%22%20fill%3D%22%23D6B26E%22%20transform%3D%22rotate%28-25%2035%2026%29%22/%3E%3Crect%20x%3D%22118%22%20y%3D%2258%22%20width%3D%228%22%20height%3D%223%22%20rx%3D%221%22%20fill%3D%22%232F5D3A%22%20opacity%3D%22.55%22%20transform%3D%22rotate%2835%20122%2059%29%22/%3E%3Ccircle%20cx%3D%22210%22%20cy%3D%2220%22%20r%3D%222.5%22%20fill%3D%22%23B5822B%22%20opacity%3D%22.6%22/%3E%3Crect%20x%3D%22300%22%20y%3D%2240%22%20width%3D%2211%22%20height%3D%224%22%20rx%3D%221%22%20fill%3D%22%23D6B26E%22%20transform%3D%22rotate%2818%20305%2042%29%22/%3E%3Crect%20x%3D%22378%22%20y%3D%2296%22%20width%3D%228%22%20height%3D%223%22%20rx%3D%221%22%20fill%3D%22%234A4540%22%20opacity%3D%22.35%22%20transform%3D%22rotate%28-40%20382%2097%29%22/%3E%3Ccircle%20cx%3D%22345%22%20cy%3D%22160%22%20r%3D%222%22%20fill%3D%22%23D6B26E%22/%3E%3Crect%20x%3D%22250%22%20y%3D%22186%22%20width%3D%229%22%20height%3D%223.5%22%20rx%3D%221%22%20fill%3D%22%232F5D3A%22%20opacity%3D%22.45%22%20transform%3D%22rotate%28-15%20254%20188%29%22/%3E%3Ccircle%20cx%3D%2280%22%20cy%3D%22150%22%20r%3D%222%22%20fill%3D%22%23B5822B%22%20opacity%3D%22.5%22/%3E%3Crect%20x%3D%22160%22%20y%3D%22196%22%20width%3D%2210%22%20height%3D%224%22%20rx%3D%221%22%20fill%3D%22%23D6B26E%22%20opacity%3D%22.8%22%20transform%3D%22rotate%2850%20165%20198%29%22/%3E%3Cpath%20d%3D%22M392%2022l2%205%205%202-5%202-2%205-2-5-5-2%205-2z%22%20fill%3D%22%23D6B26E%22/%3E%3Cpath%20d%3D%22M20%20196l1.5%203.5%203.5%201.5-3.5%201.5-1.5%203.5-1.5-3.5-3.5-1.5%203.5-1.5z%22%20fill%3D%22%23D6B26E%22%20opacity%3D%22.8%22/%3E%3C/g%3E%3C/svg%3E") center/420px 220px repeat, radial-gradient(120% 90% at 100% 0%, #F5E4C3 0%, rgba(245, 228, 195, 0) 62%), linear-gradient(160deg, #FCF7EE 0%, #F5ECDC 100%); }
/* лёгкий блик проходит по финальной фазе раз в несколько секунд */
.cv-phase.is-finale::before { content: ''; position: absolute; inset: 0; z-index: -1; background: linear-gradient(105deg, transparent 35%, rgba(255, 255, 255, .55) 50%, transparent 65%); transform: translateX(-100%); animation: cv-finale 7s ease-in-out 1s infinite; }
@keyframes cv-finale { 0%, 70% { transform: translateX(-100%); } 100% { transform: translateX(100%); } }
@media (prefers-reduced-motion: reduce) { .cv-phase.is-finale::before { animation: none; display: none; } }
.cv-phase.is-finale::after { content: ''; position: absolute; inset: 0; border-radius: inherit; box-shadow: inset 0 0 0 1px rgba(181, 138, 78, .25); pointer-events: none; }
.cv-finale-k { display: inline-flex; align-items: center; gap: 6px; margin-bottom: 8px; font-size: 12px; font-weight: 500; color: #8A6532; }
.cv-finale-k::before { content: '✦'; font-size: 11px; }
.cv-phase.is-finale .cv-stage::before { display: none; }
@media (prefers-reduced-motion: reduce) { .cv-spulse { animation: none; } .cv-sphotos img { transition: none; } }

/* KSH-469, страницы из «Ещё» (Фото и видео, Материалы, Доставки, Документы, Отчёт): один язык с главной —
   заголовок раздела с тихим счётчиком, содержимое в мягких блоках, прошедшее бледнее, действия — маленькие ↓ ↗ и графитовые кнопки */
.cv-sec-h { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
.cv-sec-h .h2 { font-size: 20px; }
.cv-modal .cv-w.cv-dlist2 { margin: 22px 8px 8px; padding: 6px 22px; }
.cv-dlist2 > .cv-tot:first-child, .cv-dlist2 > .cv-drow:first-child { border-top: 0; }
.cv-dlist2 .cv-tot { padding: 13px 0; }
.cv-tot.is-quiet, .cv-drow.is-quiet .cv-drow-m { opacity: .55; }
/* документы */
.cv-drow { padding: 12px 0; border-top: 1px solid var(--hair); }
.cv-drow-m { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto 170px 88px; align-items: center; gap: 14px; }
.cv-drow .ic { width: 32px; height: 32px; border-radius: 10px; background: var(--surface); display: inline-flex; align-items: center; justify-content: center; color: var(--text-2); }
.cv-drow .tx { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.cv-drow .t { font-size: 14px; font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-drow .s { font-size: 15px; white-space: nowrap; }
.cv-drow .st { font-size: 12px; color: var(--muted); }
.cv-drow.is-ask .st { color: var(--text); font-weight: 500; }
.cv-drow .st.cv-over { color: var(--over); }
.cv-drow .acts { display: flex; justify-content: flex-end; align-items: center; gap: 6px; white-space: nowrap; }
.cv-drow.is-ask .acts { grid-column: auto; }
@media (max-width: 760px) { .cv-drow-m { grid-template-columns: 32px minmax(0, 1fr) auto; } .cv-drow .st, .cv-drow .acts { grid-column: 2 / -1; justify-content: flex-start; } }
/* решения в окнах — маленькие кнопки: «Нужны правки» контуром, «Согласовать» графитом; зелёный остаётся только у оплаты */
.cv-modal .cv-dbtn .btn-l, .cv-modal .cv-dbtn .btn-g, .cv-modal .cv-dbtn .btn-k { height: 34px !important; padding: 0 14px; font-size: 13px !important; flex: 0 0 auto; }
.cv-modal .cv-dbtn .btn-g, .cv-modal .cv-dbtn .btn-k { background: var(--accent); color: #fff; border: 0; }
.cv-modal .cv-dbtn .btn-g:hover, .cv-modal .cv-dbtn .btn-k:hover { background: var(--accent-h); }
.cv-modal .cv-dbtn .btn-l { background: none; border: 1px solid var(--line); }
.cv-dec .cv-dbtn button, .cv-dcard .cv-dbtn > * { flex: 0 0 auto; }
.cv-dec .cv-dbtn { justify-content: flex-end !important; }
/* материалы */
.cv-cards .cv-w.cv-mat { margin: 8px; padding: 18px 20px 18px; }
.cv-cards { gap: 14px; }
.cv-w.cv-mat.is-quiet { opacity: .6; }
/* доставки */
.cv-dlist .cv-w.cv-dlcard { margin: 8px; }
.cv-w.cv-dlcard.is-ask { box-shadow: 0 0 0 7px #F6F5F2, 0 0 0 8px #CFCAC3, 0 14px 30px -24px rgba(40, 30, 20, .3); }
.cv-w.cv-dlcard.is-plan .hd .t { font-weight: 500; color: var(--text-2); }
.cv-dlst { font-size: 12px; color: var(--muted); white-space: nowrap; }
.cv-dlst.is-ok { color: var(--done); }
.cv-dlform input:not([type=checkbox]) { height: 38px; border-radius: 10px; }
/* фото и видео: 4 в ряд, подпись под кадром, значок видео */
.cv-gal.cv-gal2 { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px 12px; margin-top: 16px; }
.cv-gal2 figure { margin: 0; min-width: 0; }
.cv-gal2 button { width: 100%; border-radius: 16px; }
.cv-gal2 img, .cv-gal2 video { transition: transform .35s ease; }
.cv-gal2 button:hover img, .cv-gal2 button:hover video { transform: scale(1.04); }
.cv-gal2 figcaption { margin-top: 8px; font-size: 13px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-play { position: absolute; left: 50%; top: 50%; width: 44px; height: 44px; margin: -22px 0 0 -22px; border-radius: 50%; background: rgba(52, 48, 44, .55); backdrop-filter: blur(6px); display: flex; align-items: center; justify-content: center; }
@media (max-width: 1100px) { .cv-gal.cv-gal2 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 760px) { .cv-gal.cv-gal2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .cv-modal .cv-w.cv-dlist2 { padding: 4px 16px; } }
@media (prefers-reduced-motion: reduce) { .cv-gal2 img, .cv-gal2 video { transition: none; } }
.cv-mat .cv-dbtn { flex-wrap: nowrap !important; gap: 4px !important; }
.cv-mat .cv-dbtn .btn-l { border: 0; padding: 0 10px; text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--line); }

/* KSH-469 · «Реализация»: документы фазы — в карточке цепочки справа (Роман, 29.10) */
.cv-pcard-h { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
.cv-pcard-h .t .no { color: var(--muted); font-weight: 400; margin-right: 2px; }
.cv-pcard-h > .lab { white-space: nowrap; }
.cv-pcard .cv-pdocs { margin: 12px 0 0; }
.cv-pcard .cv-pgrp { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--hair); }
.cv-pcard .cv-pgrp .cv-conds { margin-top: 6px; }
.cv-pcard .cv-pnote { margin-top: 6px; }
.cv-gates .cv-w.cv-pcard.is-done > *:not(.cv-pdocs) { opacity: .55; }
.cv-gates .cv-w.cv-pcard.is-next .cv-pcard-h .t { color: var(--text-2); font-weight: 500; }
.cv-gates .cv-w.cv-pcard.is-cur::before { border-color: var(--accent); background: var(--accent); }

/* «Доставки»: слева компактная анкета, справа будущие и под ними привезённые */
.cv-dlgrid { display: grid; grid-template-columns: minmax(0, 400px) minmax(0, 1fr); gap: 40px; margin-top: 28px; align-items: start; }
.cv-dlside .cv-w.cv-dlcard { margin: 14px 8px 8px; }
.cv-dlside .cv-dlbody { grid-template-columns: minmax(0, 1fr); gap: 0; }
.cv-dlside .cv-dlbody .cv-dlform { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--hair); }
.cv-dlside .cv-w.cv-dlcard.is-quiet { padding: 16px 18px; }
.cv-dlhint { margin: 18px 8px 0; line-height: 1.5; }
.cv-dlmain .cv-dlist { margin-top: 6px; }
@media (max-width: 1000px) { .cv-dlgrid { grid-template-columns: minmax(0, 1fr); gap: 28px; } }

/* «Отчёт за неделю»: выполненные работы строками со своими фото */
.cv-rpw-row { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; gap: 14px; align-items: center; padding: 14px 0; border-top: 1px solid var(--hair); }
.cv-rpw-row:first-child { border-top: 0; }
.cv-rpw-row .ok { width: 22px; height: 22px; border-radius: 50%; background: var(--accent); display: grid; place-items: center; }
.cv-rpw-row .t { font-size: 15px; font-weight: 500; }
.cv-rpw-row .tx .lab { margin-top: 3px; }
.cv-rpw-row .cv-rpw-ph { display: flex; gap: 6px; align-items: center; }
.cv-rpw-row .cv-rpw-ph button { position: relative; padding: 0; border: 0; border-radius: 10px; overflow: hidden; cursor: zoom-in; background: var(--surface); }
.cv-rpw-row .cv-rpw-ph img { display: block; width: 84px; height: 62px; object-fit: cover; }
.cv-rpw-row .cv-rpw-ph b { position: absolute; inset: 0; display: grid; place-items: center; background: rgba(40, 36, 32, .5); color: #fff; font-weight: 500; font-size: 14px; }
@media (max-width: 700px) { .cv-rpw-row { grid-template-columns: 22px minmax(0, 1fr); } .cv-rpw-row .cv-rpw-ph { grid-column: 2; } .cv-rpw-row .cv-rpw-ph img { width: 64px; height: 48px; } }
.cv-dlside .cv-meta div { display: grid; grid-template-columns: 112px minmax(0, 1fr); }
.cv-dlside .cv-meta dt { white-space: nowrap; }
.cv-dlside .cv-meta dd { text-align: left; }
.cv-modal .cv-rpw-row .cv-rpw-ph button { flex: 0 0 auto; width: 84px; height: 62px; min-height: 0; line-height: 0; }
@media (max-width: 700px) { .cv-modal .cv-rpw-row .cv-rpw-ph button { width: 64px; height: 48px; } }
/* больше воздуха в карточках цепочки (Роман, 29.10) */
.cv-gates .cv-w.cv-gate.cv-pcard { padding: 24px 26px 28px; }
.cv-gates .cv-w.cv-gate.cv-pcard:not(:last-child) { margin-bottom: 52px; }
.cv-gates .cv-w.cv-gate.cv-pcard:not(:last-child)::after { left: 26px; height: 44px; }
.cv-gates .cv-w.cv-gate.cv-pcard + .cv-w.cv-gate.cv-pcard::before { left: 22.75px; top: -19px; }
.cv-pcard .cv-pdocs { margin-top: 18px; gap: 10px 8px; }
.cv-pcard .cv-pgrp { margin-top: 22px; padding-top: 18px; }
.cv-pcard .cv-pnote { margin-top: 16px; line-height: 1.5; }

/* KSH-469 · «Реализация» одной прокруткой: фаза слева и её карточка справа — в одной строке (Роман, 29.10) */
.cv-modal.cv-stmod { display: block; overflow-y: auto; padding-bottom: 48px; }
.cv-rl { margin-top: 28px; }
.cv-rl-hd, .cv-rl-row, .cv-fin-body { display: grid; grid-template-columns: minmax(0, 1fr) 440px; column-gap: 56px; }
.cv-rl-hd .cv-gates-h { padding: 0 0 4px 34px; }
.cv-rl-row { position: relative; padding: 28px 0; border-top: 1px solid var(--hair); }
.cv-rl-hd + .cv-rl-row { border-top: 0; }
.cv-rl-row > .cv-phase { margin: 0; }
/* цепочка: сплошная линия по правой колонке через все строки, карточка лежит поверх; точка — у заголовка карточки */
.cv-rl-side { position: relative; }
.cv-rl-side::before { content: ''; position: absolute; left: 34px; top: -29px; bottom: -29px; width: 1.5px; background: #E2DED8; }
.cv-rl-hd + .cv-rl-row .cv-rl-side::before { top: 24px; }
.cv-rl-side > .cv-w.cv-gate.cv-pcard { position: sticky; top: 0; margin: 8px 8px 0; padding: 24px 26px 28px; }
.cv-rl-row.is-done .cv-rl-side > .cv-pcard > *:not(.cv-pdocs) { opacity: .55; }
.cv-rl-row.is-cur .cv-pcard { box-shadow: 0 0 0 7px #F9F8F6, 0 0 0 8px #D9D4CD, 0 18px 40px -28px rgba(60, 50, 30, .22); }
.cv-rl-row .cv-pcard-h .t, .cv-fin .cv-pcard-h .t { font-size: 16px; }
/* связь строки: тонкая линия от заголовка фазы к карточке */
.cv-rl-row::after { content: ''; position: absolute; top: 58px; right: 448px; width: 48px; height: 1.5px; background: #E2DED8; }

/* «Сдача» — финальный блок во всю ширину */
.cv-fin { margin-top: 36px; border-radius: 32px; background: linear-gradient(180deg, #F8F1E6 0%, #FBF8F3 60%, #fff 100%); box-shadow: 0 0 0 7px #F9F8F6, 0 0 0 8px #EDE6DA; overflow: hidden; }
.cv-fin-hero { position: relative; min-height: 360px; display: flex; align-items: flex-end; isolation: isolate; color: #fff; }
.cv-fin-hero img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2; transform: scale(1.02); animation: cv-fin-zoom 18s ease-out both; }
.cv-fin-hero::before { content: ''; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, rgba(28, 22, 16, .78) 0%, rgba(28, 22, 16, .45) 45%, rgba(28, 22, 16, 0) 75%), linear-gradient(0deg, rgba(28, 22, 16, .35), rgba(28, 22, 16, 0) 40%); }
@keyframes cv-fin-zoom { from { transform: scale(1.08); } to { transform: scale(1.02); } }
.cv-fin-copy { padding: 40px 44px 38px; max-width: 560px; }
.cv-fin-copy .k { font-size: 12px; letter-spacing: .02em; color: #E9CF9C; }
.cv-fin-copy h2 { margin: 10px 0 0; font-size: 52px; font-weight: 300; line-height: 1.02; letter-spacing: -.02em; color: #fff; }
.cv-fin-copy .d { display: flex; align-items: baseline; gap: 10px; margin-top: 14px; }
.cv-fin-copy .d .lab { color: rgba(255, 255, 255, .7); }
.cv-fin-copy .d b { font-size: 24px; font-weight: 400; color: #F3DFB6; }
.cv-fin-copy p { margin: 14px 0 0; font-size: 15px; line-height: 1.5; color: rgba(255, 255, 255, .86); }
.cv-fin-copy .m { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 18px; }
.cv-fin-copy .m span { height: 28px; padding: 0 12px; display: inline-flex; align-items: center; border-radius: 999px; font-size: 12px; color: #fff; background: rgba(255, 255, 255, .14); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .22); backdrop-filter: blur(6px); }
.cv-fin-body { padding: 28px 28px 32px; align-items: start; }
.cv-fin-body > .cv-phase { margin: 0; }
.cv-fin-body > .cv-phase .cv-phase-h { display: none; }
.cv-fin-body .cv-rl-side::before { display: none; }
.cv-fin-body .cv-rl-side > .cv-pcard { margin: 0 8px 8px; }
@media (prefers-reduced-motion: reduce) { .cv-fin-hero img { animation: none; } }
@media (max-width: 1100px) {
  .cv-rl-hd, .cv-rl-row, .cv-fin-body { grid-template-columns: minmax(0, 1fr); row-gap: 16px; }
  .cv-rl-side::before, .cv-rl-row::after { display: none; }
  .cv-rl-hd .cv-gates-h { padding-left: 0; }
  .cv-rl-side > .cv-w.cv-gate.cv-pcard { position: static; }
  .cv-fin-copy h2 { font-size: 38px; }
  .cv-fin-copy { padding: 28px 24px; }
  .cv-fin-body { padding: 20px 16px 24px; }
}

/* контур блоков — светлее (Роман, 29.10) */
.cv-w { box-shadow: 0 0 0 7px #FAF9F7, 0 0 0 8px #F0EEEA, 0 18px 40px -28px rgba(60, 50, 30, .14); }
.cv-gate.is-over { box-shadow: 0 0 0 7px #FAF9F7, 0 0 0 8px #F0EEEA; }

/* визит на объект: одна стрелка у заголовка, действие — тихой кнопкой без стрелки */
.cv-vbtn { height: 34px; padding: 0 16px; border: 0; border-radius: 999px; background: var(--accent); color: #fff; font: inherit; font-size: 13px; font-weight: 500; cursor: pointer; flex: none; transition: background .2s ease; }
.cv-vbtn:hover:not(:disabled) { background: var(--accent-h); }
.cv-vbtn:disabled { background: #EDEBE8; color: #A9A49E; cursor: default; }

/* доставки: колонка ответа шире на 30 % */
.cv-dlgrid { grid-template-columns: minmax(0, 520px) minmax(0, 1fr); }

/* календарь: справа все события со своей прокруткой, высота — по месяцу */
.cv-calm { grid-template-columns: minmax(0, 1fr) 380px; align-items: stretch; }
.cv-calside { display: flex; flex-direction: column; min-height: 0; max-height: calc(100vh - 290px); margin: 8px; padding: 18px 20px 8px; }
.cv-calside-h { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding-bottom: 10px; border-bottom: 1px solid var(--hair); }
.cv-calside-h b { font-size: 16px; font-weight: 600; }
.cv-calside-l { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; padding: 6px 2px 12px; }
.cv-calside-l .cv-cgrp { margin-top: 14px; }
.cv-calside-l .cv-cgrp:first-child { margin-top: 6px; }
@media (max-width: 1100px) { .cv-calside { max-height: 460px; } }
.cv-rl-hd .cv-gates-h.cv-rl-l { padding-left: 0; }
.cv-rl-hd { margin-bottom: 4px; }
.cv-fin-body { grid-template-columns: minmax(0, 1fr) 400px; column-gap: 40px; }
@media (max-width: 1100px) { .cv-rl-hd > .cv-rl-l { display: none; } }
.cv-dlmain .cv-meta div { display: grid; grid-template-columns: 112px minmax(0, 1fr); }
.cv-dlmain .cv-meta dt { white-space: nowrap; }
.cv-dlmain .cv-meta dd { text-align: left; }
.cv-dlmain .cv-dlcard .hd { flex-wrap: wrap; }

/* «Сдача» v2 (Роман, 29.10): кадр — подложка всего блока, ~70 % картинки свободно, контент — колонкой слева */
.cv-fin { position: relative; isolation: isolate; min-height: 640px; margin-top: 36px; border-radius: 32px; overflow: hidden; background: #2A231C; box-shadow: 0 0 0 7px #FAF9F7, 0 0 0 8px #EDE6DA; color: #fff; }
.cv-fin-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 62% 50%; z-index: -2; animation: cv-fin-zoom 18s ease-out both; }
.cv-fin::before { content: ''; position: absolute; inset: 0; z-index: -1; background: linear-gradient(90deg, rgba(24, 19, 14, .86) 0%, rgba(24, 19, 14, .7) 26%, rgba(24, 19, 14, .18) 42%, rgba(24, 19, 14, 0) 58%); }
.cv-fin-col { width: 32%; min-width: 340px; padding: 40px 36px 36px; display: flex; flex-direction: column; }
.cv-fin-col .k { font-size: 12px; color: #E9CF9C; }
.cv-fin-col h2 { margin: 10px 0 0; font-size: 44px; font-weight: 300; line-height: 1.02; letter-spacing: -.02em; color: #fff; }
.cv-fin-col .d { display: flex; align-items: baseline; gap: 10px; margin-top: 14px; font-size: 13px; color: rgba(255, 255, 255, .7); }
.cv-fin-col .d b { font-size: 24px; font-weight: 400; color: #F3DFB6; }
.cv-fin-col p { margin: 12px 0 0; font-size: 14px; line-height: 1.5; color: rgba(255, 255, 255, .84); }
.cv-fin-col .m { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
.cv-fin-col .m span { height: 28px; padding: 0 12px; display: inline-flex; align-items: center; border-radius: 999px; font-size: 12px; background: rgba(255, 255, 255, .12); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .22); backdrop-filter: blur(6px); }
.cv-fin-st { list-style: none; margin: 22px 0 0; padding: 16px 0 0; border-top: 1px solid rgba(255, 255, 255, .16); display: grid; gap: 12px; }
.cv-fin-st li { display: grid; grid-template-columns: 26px minmax(0, 1fr); gap: 10px; align-items: start; }
.cv-fin-st .n { width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center; font-size: 12px; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .35); color: rgba(255, 255, 255, .85); }
.cv-fin-st .t { display: block; font-size: 15px; }
.cv-fin-st .l { display: block; margin-top: 2px; font-size: 12px; color: rgba(255, 255, 255, .62); }
.cv-fin-col > .cv-w.cv-gate.cv-pcard { margin: 22px 0 0; padding: 20px 22px 22px; color: var(--text); background: rgba(255, 255, 255, .94); backdrop-filter: blur(10px); box-shadow: 0 0 0 6px rgba(255, 255, 255, .14), 0 24px 48px -24px rgba(0, 0, 0, .45); }
@media (max-width: 1100px) {
  .cv-fin { min-height: 0; }
  .cv-fin-col { width: auto; min-width: 0; padding: 28px 22px; }
  .cv-fin::before { background: linear-gradient(180deg, rgba(24, 19, 14, .5) 0%, rgba(24, 19, 14, .82) 55%); }
  .cv-fin-col h2 { font-size: 36px; }
}

/* KSH-504 · готовность по комнатам в «Реализации»: общая готовность справа от заголовка, ряд плиток-фильтров (room-readiness-view.jsx) */
.cv-rr-ttl { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: 24px; row-gap: 6px; }
.cv-rr-all { display: inline-flex; align-items: baseline; gap: 8px; font-size: 13px; color: var(--muted); }
.cv-rr-all b { font-size: 22px; font-weight: 600; color: var(--accent); letter-spacing: -.01em; }
.cv-rr-all .cap { font-size: 12px; color: var(--muted); }
/* статус фазы 0 «Дизайн и согласования» отдельной плашкой (решение владельца 03.11: дизайн в готовность ремонта не входит) */
.cv-rr-dp { display: inline-flex; align-items: center; height: 24px; padding: 0 10px; border-radius: 999px; font-size: 12px; white-space: nowrap; border: 1px solid var(--line); color: var(--text-2); background: var(--bg); }
.cv-rr-dp.is-done { border-color: transparent; background: var(--surface); }
.cv-rr { margin-top: 22px; }
.cv-rr-row { display: flex; gap: 10px; overflow-x: auto; padding: 2px 2px 10px; scrollbar-width: thin; }
.cv-rr-tile { flex: 0 0 auto; width: 188px; display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 22px; border: 1px solid var(--line); background: var(--bg); color: var(--text); font: inherit; text-align: left; cursor: pointer; }
.cv-rr-tile.on { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); background: var(--surface); }
.cv-rr-tile:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.cv-rr-ring { flex: none; }
.cv-rr-ring .bg { stroke: var(--surface); }
.cv-rr-tile.on .cv-rr-ring .bg { stroke: var(--line); }
.cv-rr-ring .fg { stroke: var(--accent); }
.cv-rr-tile .tx { display: flex; flex-direction: column; min-width: 0; gap: 1px; }
.cv-rr-tile .p { font-size: 16px; font-weight: 600; line-height: 1.2; }
.cv-rr-tile .nm { font-size: 13px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-rr-tile .now { font-size: 11px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cv-rr-flt { display: flex; align-items: baseline; gap: 14px; margin-top: 6px; font-size: 13px; color: var(--text-2); }
.cv-rr-all-btn { border: 0; background: none; padding: 0; font: inherit; font-size: 13px; color: var(--accent); text-decoration: underline; cursor: pointer; }
.cv-rr-none { padding: 14px 0 0; }
@media print {
  .cv-rr-row { display: block; overflow: visible; padding: 0; }
  .cv-rr-tile { display: list-item; list-style: disc inside; width: auto; border: 0; border-radius: 0; padding: 2px 0; background: none; box-shadow: none; }
  .cv-rr-ring { display: none; }
  .cv-rr-tile .tx { display: inline; }
  .cv-rr-tile .tx > span { display: inline; margin-right: 6px; white-space: normal; }
  .cv-rr-flt button { display: none; }
}

/* ── договор подряда простым языком и приветствие (KSH-498) ── */
.cv-ct { margin-top: 36px; padding-top: 28px; border-top: 1px solid var(--line); }
/* 7 пунктов — это нумерованные пункты договора: номер, заголовок слева, текст справа, тонкая линия между */
.cv-ct-pts { list-style: none; counter-reset: ct; margin: 18px 0 0; padding: 0; }
.cv-ct-pts li { counter-increment: ct; display: grid; grid-template-columns: 28px minmax(160px, 220px) minmax(0, 1fr); gap: 4px 16px; padding: 14px 0; border-top: 1px solid var(--hair); font-size: 14px; line-height: 1.55; }
.cv-ct-pts li:first-child { border-top: 0; }
.cv-ct-pts li::before { content: counter(ct); font-size: 13px; color: var(--muted); font-variant-numeric: tabular-nums; padding-top: 1px; }
.cv-ct-pts b { font-weight: 500; }
.cv-ct-pts p { margin: 0; color: var(--text-2); text-wrap: pretty; }
.cv-ct-adv { display: grid; grid-template-columns: minmax(200px, 260px) minmax(0, 1fr); gap: 24px; align-items: start; margin-top: 24px; padding: 24px 28px; border-radius: 28px; background: var(--surface); }
.cv-ct-adv ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; font-size: 14px; line-height: 1.55; color: var(--text-2); }
.cv-ct-14 { margin-top: 32px; }
.cv-ct-days { display: grid; grid-template-columns: repeat(14, minmax(0, 1fr)); margin-top: 18px; font-size: 11px; color: var(--muted); font-variant-numeric: tabular-nums; }
.cv-ct-days span { padding-left: 2px; border-left: 1px solid var(--hair); }
.cv-ct-rows { list-style: none; margin: 8px 0 0; padding: 0; }
.cv-ct-rows li { padding: 12px 0; border-top: 1px solid var(--hair); }
.cv-ct-rows .hd { display: flex; justify-content: space-between; gap: 16px; align-items: baseline; font-size: 14px; }
.cv-ct-rows .hd b { font-weight: 500; }
.cv-ct-rows .lab { margin-top: 6px; }
.cv-ct-rows .hd .lab { margin-top: 0; white-space: nowrap; }
.cv-ct-bar { position: relative; height: 6px; margin-top: 10px; border-radius: 3px; background: var(--hair); }
.cv-ct-bar i { position: absolute; top: 0; bottom: 0; border-radius: 3px; background: var(--text); }
.cv-ct-bar i.more { border-radius: 3px 0 0 3px; }
.cv-modal.cv-welm { max-width: 720px; height: auto; max-height: calc(100vh - 48px); }
.cv-wel-team { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; margin-top: 24px; }
.cv-wel-p { display: flex; gap: 14px; align-items: center; padding: 16px 18px; border: 1px solid var(--line); border-radius: 24px; }
.cv-wel-p .cv-face { width: 52px; height: 52px; }
.cv-wel-p .is-ini { font-size: 15px; }
.cv-wel-p .n { font-size: 16px; font-weight: 500; line-height: 1.3; }
.cv-wel-roles { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.cv-wel-act { display: flex; justify-content: flex-end; align-items: center; gap: 18px; margin-top: 28px; padding-top: 20px; border-top: 1px solid var(--hair); }
.cv-wel-act .lab { flex: 1; }
@media (max-width: 720px) {
  .cv-ct-pts li { grid-template-columns: 24px minmax(0, 1fr); }
  .cv-ct-pts p { grid-column: 2; }
  .cv-ct-adv { grid-template-columns: 1fr; padding: 20px; gap: 14px; }
  .cv-ct-days span:nth-child(even) { color: transparent; }
  .cv-wel-act { flex-direction: column; align-items: stretch; }
}

/* «Реализация»: вид «Этапы» или «График» (KSH-529) — график на модели прораба: фазы, обещанные даты, доставки и визиты клиента */
.cv-stmode { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin: 4px 0 18px; }
.cv-stgraph { display: flex; flex-direction: column; gap: 10px; }
.cv-stgraph > .lab { margin: 0; max-width: 70ch; }

/* KSH-550: телефон — разделы кабинета нижней панелью (до 5 пунктов: 4 раздела и «Ещё»), меню не переносится в 2–3 строки.
   Пункты is-ph-hide на телефоне уходят в «Ещё» (там они is-ph-only); на компьютере is-ph-only скрыты */
.cv-more li.is-ph-only, .cv-more.is-ph-only { display: none; }
@media (max-width: 760px) {
  .cv-nav {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 45; order: 0; width: auto;
    display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: 0;
    padding: 4px 4px calc(4px + env(safe-area-inset-bottom)); background: var(--bg); border-top: 1px solid var(--line);
  }
  .cv-nav > a, .cv-nav .cv-more > button {
    display: flex; align-items: center; justify-content: center; min-height: 48px; padding: 0 2px;
    font-size: 13px; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  .cv-nav > a[aria-current="page"], .cv-nav .cv-more.is-cur > button { color: var(--text); font-weight: 600; }
  .cv-nav > a.is-ph-hide { display: none; }
  .cv-nav .cv-more, .cv-nav .cv-more.is-ph-only { display: flex; justify-content: center; }
  .cv-nav .cv-more > button { width: 100%; }
  .cv-more li.is-ph-only { display: list-item; }
  .cv-nav .cv-more ul { position: fixed; left: 12px; right: 12px; top: auto; bottom: calc(64px + env(safe-area-inset-bottom)); max-height: 60vh; overflow-y: auto; }
  body:has(.cv-nav) { padding-bottom: calc(64px + env(safe-area-inset-bottom)); }
}

/* KSH-550: виджеты — одна рамка. Прежнее «второе кольцо» (box-shadow 0 0 0 7px + 0 0 0 8px) выглядело как карточка в карточке
   рядом с соседними карточками в одну рамку. Мягкая тень остаётся; выделение (текущий этап, просьба о доставке) — как было */
.cv-w, .cv-w:hover { box-shadow: 0 18px 40px -28px rgba(60, 50, 30, .14); margin: 0; }
.cv-gate.is-over { box-shadow: none; }

/* KSH-549: «Согласования» на главной — до трёх самых срочных, остальное ссылкой в окно */
.cv-apr-w .cv-apr-more { align-self: flex-start; margin-top: 12px; }
/* «Съёмка для портфолио» на главной (KSH-459): маркетолог запросил согласие */
.cv-consent-opts { display: flex; flex-direction: column; gap: 8px; margin-top: 14px; }
.cv-consent-o { display: flex; flex-direction: column; gap: 2px; text-align: left; padding: 11px 14px; font: inherit; color: inherit; border: 1px solid var(--line); border-radius: 16px; background: var(--bg); cursor: pointer; }
.cv-consent-o:hover { border-color: var(--text-2); }
.cv-consent-o .t { font-size: 14px; font-weight: 500; }
