/* Inter (вариативный, самохостинг). Сабсеты и unicode-range 1:1 как отдаёт Google Fonts. */
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url('fonts/inter-cyrillic.woff2') format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url('fonts/inter-cyrillic-ext.woff2') format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url('fonts/inter-latin.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url('fonts/inter-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
/* Токены 1:1 из «( MILKY ) Финансы». Терракота — ЗАРЕЗЕРВИРОВАНА: в «Задачах» её единственная
   роль — награда/результат (win): жемчужины, очки, стрик, успешная отметка. Ошибки — #8A3B2A. */
:root{
  --green:#274138; --green-2:#375B4F; --cream:#F6F5F2; --card:#F1F1EC;
  --beige:#EBDBD1; --sand:#E9D2BD; --terra:#D38867; --terra-deep:#B96B47;
  --grey:#8C9497; --ink:#222222; --line:rgba(39,65,56,.14);
  --err:#8A3B2A;
  --dur:.2s; --ease:cubic-bezier(.22,1,.36,1);
  /* «Мой день» (A2, редизайн): у прототипа есть, в прод-палитре не было — добавлены 1:1
     («первый визит»/CRM-метки --purple; --ice держала снежинку заморозки серии и ушла вместе
     с механикой 21.08.2026). Прототипные --green2/--bg1/--bg2/
     --tint1/--tint2 при переносе замаплены на уже существующие --green-2/--cream/--card/--beige/
     --sand — совпадают побайтово, дублей не заводим. --tint3 (задача D, «Вернувшиеся») аналога
     в проде не имел — добавлен 1:1, используется в .rt-win.closed. */
  --purple:#515178; --tint3:#D5CCC5;
}
*{box-sizing:border-box;margin:0;padding:0;font-family:'Inter',-apple-system,'Segoe UI',Roboto,sans-serif;-webkit-tap-highlight-color:transparent}
html,body{background:var(--cream);color:var(--ink);height:100%}
body{font-size:15px;font-weight:460;letter-spacing:-.01em;line-height:1.45;max-width:480px;margin:0 auto;padding-bottom:calc(100px + env(safe-area-inset-bottom));-webkit-font-smoothing:antialiased}
button,input,select,textarea{font-family:inherit}
button{cursor:pointer}
:focus-visible{outline:2px solid var(--green-2);outline-offset:2px;border-radius:6px}
.par{color:var(--green-2)}
h1{font-size:26px;font-weight:500;letter-spacing:-.01em;margin:4px 0 18px}
.eyebrow{font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--grey);margin-bottom:6px}
.screen{display:none;padding:20px 16px 24px}
.screen.on{display:block;animation:rise .18s ease}
/* заглушка раздела (временно): показываем только шапку и плашку «скоро», остальное прячем.
   #acAwardsCard (доска достижений, 2026-08-13) — исключение: экран #scr-progress целиком
   в заглушке (SCREEN_LOADERS его не грузит, кроме доски — см. app.js), но сама доска реальна
   и должна быть видна, пока остальные блоки экрана ждут своих данных. */
.screen.stub>*:not(.scr-head):not(.eyebrow):not(.stub-card):not(#acAwardsCard){display:none!important}
.stub-card{text-align:center;color:var(--grey)}
@keyframes rise{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.card{background:#fff;border-radius:14px;padding:16px;margin-bottom:12px}
.note{font-size:12px;color:var(--grey);line-height:1.5}
/* ── кнопки: зелёный primary, КАПС, radius 14, без теней ── */
.btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:48px;padding:15px;border:0;border-radius:14px;background:var(--green);color:var(--cream);font-size:13px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;transition:background .15s,transform .08s}
.btn:hover{background:var(--green-2)}
.btn:active{transform:scale(.985)}
.btn.ghost{background:none;border:1px solid var(--line);color:var(--green)}
.btn.ghost:hover{background:rgba(39,65,56,.04)}
.btn.acc{background:var(--green)}
.btn.acc:hover{background:var(--green-2)}
.btn:disabled{opacity:.55;pointer-events:none}
.btn .ico{width:16px;height:16px}
.btnpts{opacity:.7;font-weight:500;font-variant-numeric:tabular-nums}
/* ── поля ── */
input,select,textarea{width:100%;min-height:46px;padding:13px 14px;border:1px solid var(--line);border-radius:12px;font-size:15px;background:#fff;color:var(--ink);outline:none;transition:border-color .15s}
select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%238C9497' fill='none' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 16px center}
input:focus,select:focus,textarea:focus{border-color:var(--green-2)}
textarea{min-height:0}
textarea.err{border-color:var(--err)}
.fieldhint{display:none;font-size:12px;color:var(--err);margin-top:6px;line-height:1.4}
/* чекбокс-строка (настройки: роли, доступ) */
.chk{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--ink);border:1px solid var(--line);border-radius:12px;padding:11px 14px;cursor:pointer;min-height:46px;flex:1}
.chk input{width:18px;height:18px;min-height:0;margin:0;flex:none;accent-color:var(--green)}
.fieldhint.on{display:block}
label{display:block;font-size:10px;font-weight:500;color:var(--grey);margin:12px 4px 6px;letter-spacing:.12em;text-transform:uppercase}
/* ── шапка (мобайл): липкая зелёная ── */
header.top{position:sticky;top:0;z-index:20;background:var(--green);color:var(--cream);max-width:480px;margin:0 auto;padding:16px 20px 14px;display:flex;justify-content:space-between;align-items:center}
header.top .par{color:var(--sand)}
.logo{font-size:18px;font-weight:500;letter-spacing:.12em;white-space:nowrap}
.who{font-size:11px;font-weight:500;color:var(--cream);opacity:.85;letter-spacing:.06em;text-transform:uppercase}
/* ── навигация (мобайл): зелёный нижний таб-бар ── */
nav{position:fixed;bottom:0;left:0;right:0;background:var(--green);z-index:40;padding:6px 2px calc(10px + env(safe-area-inset-bottom))}
nav .wrap{max-width:480px;margin:0 auto;display:flex;overflow-x:auto;scrollbar-width:none}
nav .wrap::-webkit-scrollbar{display:none}
nav button{flex:1 0 auto;min-width:84px;min-height:52px;padding:10px 6px 6px;border:0;background:none;color:var(--cream);opacity:.55;font-size:10px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;transition:opacity .15s}
nav button svg{display:block;margin:0 auto 4px;width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
nav button.on{opacity:1;color:var(--sand)}
/* подвал сайдбара (имя + выход) — только десктоп; на мобильном имя в шапке, выход в «Премиях» */
#sideFooter{display:none}
/* ── карточка задачи ── */
.task{background:#fff;border-radius:14px;padding:14px;margin-bottom:10px;display:flex;gap:12px;align-items:flex-start;cursor:pointer;border:1px solid transparent;transition:border-color .15s,transform .15s var(--ease);animation:rise .3s var(--ease) both}
.task:hover{border-color:var(--line)}
.task:active{transform:scale(.99)}
.task .st{width:28px;height:28px;border-radius:50%;border:2px dashed var(--line);flex:none;display:flex;align-items:center;justify-content:center;margin-top:1px;color:#fff;transition:all var(--dur)}
.task .st .ico{width:15px;height:15px;stroke-width:2.2}
.task.done .st{background:var(--green);border:2px solid var(--green)}
.task.win .st{background:radial-gradient(circle at 35% 30%,#F3C9AF,var(--terra) 60%,var(--terra-deep));border:2px solid var(--terra);box-shadow:0 1px 4px rgba(211,136,103,.45)}
.task .cl{font-weight:500;font-size:15px}
.task .tp{font-size:13px;color:var(--green-2);margin-top:2px}
.task .scr{display:flex;gap:7px;font-size:12.5px;color:var(--grey);margin-top:7px;line-height:1.45;background:var(--card);border-radius:10px;padding:7px 10px}
.task .scr .ico{width:13px;height:13px;margin-top:2px;color:var(--terra-deep)}
.task .pts{margin-left:auto;flex:none;font-weight:500;font-size:12px;color:var(--terra-deep);background:rgba(211,136,103,.12);border-radius:100px;padding:4px 10px;white-space:nowrap;font-variant-numeric:tabular-nums}
/* ── иконки (инлайн-SVG, штрих 1.8 — как линии бренда) ── */
.ico{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
/* ── строка дня: ‹ СЕГОДНЯ › ── */
.dayrow{position:relative;display:flex;align-items:center;justify-content:space-between;gap:6px;margin:2px 0 14px}
.dayrow .arrow{width:40px;height:40px;flex:none;border:1px solid var(--line);border-radius:50%;background:#fff;color:var(--green);display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s var(--ease)}
.dayrow .arrow:hover{background:var(--card)}
.dayrow .arrow:active{transform:scale(.92)}
.daylbl{border:0;background:none;color:var(--ink);font-size:22px;font-weight:500;letter-spacing:-.01em;padding:4px 10px;min-height:44px}
.dateghost{position:absolute;left:50%;bottom:0;width:1px;height:1px;min-height:0;padding:0;border:0;opacity:0;pointer-events:none}
/* ── статус-точки (возвраты): ok — жемчужина (награда), wait/no — нейтральные ── */
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;vertical-align:0;margin-right:3px}
.dot.wait{background:none;border:1.5px solid var(--sand)}
.dot.ok{background:radial-gradient(circle at 35% 30%,#fff,var(--sand) 55%,var(--terra));box-shadow:0 1px 2px rgba(0,0,0,.15)}
.dot.no{background:var(--grey)}
.empty{text-align:center;color:var(--grey);padding:26px 16px;font-size:13px}
/* ── прогресс: нить и жемчужина — фирменная подпись (терракота = награда) ── */
.big{font-size:40px;font-weight:500;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.bar{position:relative;height:8px;background:var(--card);border-radius:100px;margin:12px 0 8px}
.bar>i{position:relative;display:block;height:100%;min-width:8px;background:var(--green-2);border-radius:100px;transition:width .6s var(--ease)}
.bar>i::after{content:'';position:absolute;right:-2px;top:50%;width:18px;height:18px;transform:translateY(-50%);border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff,var(--sand) 55%,var(--terra));box-shadow:0 1px 4px rgba(34,34,34,.18)}
.statgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.stat{background:#fff;border-radius:14px;padding:14px}
.stat b{display:block;font-size:22px;font-weight:500;font-variant-numeric:tabular-nums}
.stat span{font-size:10px;font-weight:500;color:var(--grey);text-transform:uppercase;letter-spacing:.1em}
.stat .ico{width:12px;height:12px;vertical-align:-2px;color:var(--terra-deep)}
/* ── шторка отметки ── */
.ovl{position:fixed;inset:0;background:rgba(34,34,34,.45);opacity:0;pointer-events:none;transition:opacity .25s;z-index:50}
.ovl.on{opacity:1;pointer-events:auto}
.sheet{position:fixed;left:0;right:0;bottom:-100%;background:var(--cream);border-radius:20px 20px 0 0;padding:20px 16px calc(24px + env(safe-area-inset-bottom));transition:bottom .3s var(--ease);z-index:60;max-width:480px;margin:0 auto;max-height:88vh;overflow:auto}
.sheet.on{bottom:0}
.handle{width:36px;height:4px;border-radius:4px;background:var(--line);margin:0 auto 16px}
.shclose{position:absolute;top:10px;right:10px;width:40px;height:40px;border:0;background:none;color:var(--grey);display:flex;align-items:center;justify-content:center;border-radius:8px;transition:color var(--dur)}
.shclose:hover{background:var(--card);color:var(--ink)}
.scriptline{display:flex;gap:8px;font-size:13px;color:var(--grey);line-height:1.5;background:var(--card);border-radius:12px;padding:10px 12px;margin-bottom:12px}
.scriptline .ico{width:14px;height:14px;margin-top:2px;color:var(--terra-deep)}
.swrow{display:flex;justify-content:space-between;align-items:center;gap:12px;background:#fff;border-radius:12px;padding:13px 14px;margin-bottom:10px;font-weight:500}
.sw{position:relative;width:52px;height:32px;border-radius:100px;background:var(--card);border:1px solid var(--line);transition:background var(--dur);flex:none}
.sw::after{content:'';position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:left var(--dur) var(--ease)}
.sw.on{background:var(--green);border-color:var(--green)}
.sw.on::after{left:23px}
.sw.acc.on{background:var(--terra);border-color:var(--terra)}
/* ── тост (снизу) и летящие очки (награда) ── */
#toast{position:fixed;left:50%;bottom:104px;transform:translateX(-50%) translateY(20px);background:var(--green);color:var(--cream);padding:12px 22px;border-radius:100px;font-weight:500;font-size:13px;letter-spacing:.1em;opacity:0;pointer-events:none;transition:.25s;z-index:99;max-width:90vw;text-align:center}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
#toast.err{background:var(--err)}
#toast.win{background:var(--terra)}
#ptsfly{position:fixed;left:50%;top:40%;transform:translate(-50%,-50%) scale(0);font-size:56px;font-weight:500;color:var(--terra);z-index:98;pointer-events:none;text-shadow:0 4px 20px rgba(211,136,103,.4);font-variant-numeric:tabular-nums}
#ptsfly.go{animation:fly 1.2s forwards}
@keyframes fly{0%{transform:translate(-50%,-50%) scale(0)}25%{transform:translate(-50%,-50%) scale(1.15)}45%{transform:translate(-50%,-50%) scale(1)}100%{transform:translate(-50%,-160%) scale(.7);opacity:0}}
/* ── списки владельца ── */
.row{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:12px 2px;border-bottom:1px solid var(--line);font-size:14px}
.row:last-child{border:0}
.row.cancelled{opacity:.45;color:var(--grey)}
.row.cancelled b{font-weight:400;text-decoration:line-through;text-decoration-color:rgba(140,148,151,.6)}
.row.clickable{cursor:pointer}
.row.clickable:hover{background:rgba(39,65,56,.03)}
/* карточка «кто выдаёт премии»: без этого левый край каждого <select> скачет вслед за длиной
   названия студии/состояния — тот же приём переопределения width:100% + flex:none, что у
   #uPassCopy, только к select нужна ещё явная ширина, а не auto (правка живой сверки 18.08.2026) */
#setPayers .row>span{flex:1;min-width:0}
#setPayers .row select{width:200px;flex:none}
/* карточки клиентов в «Раздаче»: отдельные, с рамкой и воздухом (правка 25.07) */
.ccard{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin-bottom:10px;cursor:pointer;transition:border-color .15s}
.ccard:hover{border-color:var(--green-2)}
.ccard .tsel{width:100%;margin-top:8px;padding:9px 12px;border:1px solid var(--line);border-radius:12px;font-size:14px;background:#fff;color:var(--ink)}
.ccard.cancelled{opacity:.45;color:var(--grey);cursor:default;background:#fff;border-left:1px solid var(--line)}
.ccard.cancelled:hover{border-color:var(--line)}
.ccard.cancelled b{font-weight:400;text-decoration:line-through;text-decoration-color:rgba(140,148,151,.6)}
.ccard .chead{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
/* услуги визита: пилюли под именем клиента (правка 25.07) */
.svc{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.svc span{font-size:11.5px;line-height:1.3;color:var(--green-2);background:rgba(255,255,255,.7);border:1px solid var(--line);border-radius:100px;padding:3px 9px}
.task .svc span{background:var(--card);border-color:transparent}
/* цвет карточки = тип задачи (правка Рудольфа 25.07): считывается без чтения.
   Приглушённые тона, чтобы не спорили с палитрой MILKY; полоса слева — быстрый маркер. */
.t-crosssell{background:#F0F0EC;border-left:4px solid #8C9497}
.t-cash{background:#E9EFF5;border-left:4px solid #5B7FA6}
.t-bot{background:#F7E5E1;border-left:4px solid #B0473A}
.t-shop{background:#F7F0DC;border-left:4px solid #C9A227}
.t-next{background:#EAF0E9;border-left:4px solid #274138}
.ccard .tsel{background:rgba(255,255,255,.75)}
.tag{font-size:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--grey);border:1px solid var(--line);border-radius:100px;padding:3px 9px;white-space:nowrap}
.whyrow{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:10px 0 2px}
.whyrow .par{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--grey)}
.why{font-size:11px;font-weight:500;color:var(--grey);background:#fff;border:1px solid var(--line);border-radius:100px;padding:5px 11px;cursor:pointer}
.why.on{background:var(--tint1);border-color:var(--terra);color:var(--green)}
.del{border:0;background:none;color:var(--grey);font-size:18px;min-width:44px;min-height:44px;margin:-10px -8px;transition:color var(--dur)}
.del:hover{color:var(--err)}
table{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}
th{text-align:left;color:var(--grey);font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.08em;padding:6px 8px 6px 0}
td{padding:9px 8px 9px 0;border-top:1px solid var(--line)}
th.num,td.num{text-align:right}
tr>th:last-child,tr>td:last-child{padding-right:0}
/* ── авторизация: полноэкранный зелёный, без белой карточки ── */
#auth{position:fixed;inset:0;background:var(--green);z-index:100;display:none;align-items:center;justify-content:center;padding:32px 24px}
#auth.on{display:flex}
#auth .box{width:100%;max-width:340px}
#auth .brandmark{text-align:center;font-size:28px;font-weight:500;letter-spacing:.16em;color:var(--cream);margin-bottom:6px}
#auth .brandmark .par{color:var(--sand)}
#auth .brandsub{text-align:center;font-size:11px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--sand);margin-bottom:36px;opacity:.8}
#auth label{color:var(--sand);opacity:.8;margin:0 4px 6px}
#auth input{background:var(--cream);border:0;margin-bottom:14px}
#auth .btn{background:var(--sand);color:var(--green);font-weight:600;margin-top:6px}
#auth .btn:hover{background:#F3E9DC}
#auth #aErr{color:var(--sand)}
/* ── загрузка: крупный зелёный знак ── */
#loader{position:fixed;inset:0;background:var(--cream);z-index:90;display:flex;align-items:center;justify-content:center;color:var(--green);font-size:22px;font-weight:500;letter-spacing:.14em}
.addrow{display:flex;gap:8px;margin-top:8px}
.addrow>*{flex:1}
.hint{font-size:12px;color:var(--grey);margin-top:6px}
.noteline{display:flex;gap:6px;margin-top:6px}
.noteline .ico{width:13px;height:13px;margin-top:2px;color:var(--terra-deep)}
/* ── вау-моменты (2026-08-19, порт прототипа 36_8) ──
   Переменные прототипа замаплены на проектные по таблице в шапке файла:
   --green2→--green-2, --bg1→--cream, --bg2→--card, --tint1→--beige, --tint2→--sand.
   Новых цветов не заводим. */
@keyframes pop{0%{transform:scale(0) translateY(-30px) rotate(-40deg);opacity:0}
               60%{transform:scale(1.4) rotate(8deg)} 100%{transform:scale(1) rotate(0)}}
.wowbtn{border:1px solid var(--sand); background:var(--beige); color:var(--green); border-radius:8px;
  padding:4px 9px; font-size:12px; white-space:nowrap;}
.wowbtn:hover{background:var(--sand);}
.wowdone{margin:7px 0 0; padding-left:49px; font-size:12.5px; color:var(--terra);
  animation:pop .65s cubic-bezier(.2,1.6,.4,1);}
.wowbox{margin:9px 0 2px; padding:12px 14px; background:var(--beige); border:1px solid var(--sand); border-radius:11px;}
.wlbl{font-size:10.5px; text-transform:uppercase; letter-spacing:.04em; color:var(--grey); margin-right:6px;}
.wowbox .row{display:flex; gap:6px; align-items:center; flex-wrap:wrap; margin-bottom:8px;}
.wowbox .row:last-child{margin-bottom:0;}
.wchip{border:1px solid var(--sand); background:#fff; border-radius:8px; padding:4px 10px; font-size:12.5px;}
.wchip.on{background:var(--green); border-color:var(--green); color:var(--cream);}
.wchip:hover{border-color:var(--green);}
.wowown{flex:1; min-width:240px; border:1px solid var(--sand); border-radius:9px; padding:6px 11px;
  font:inherit; font-size:12.5px; background:#fff;}
.wowown:focus{outline:none; border-color:var(--green);}
.vrow2{display:flex; gap:9px; align-items:center; flex-wrap:wrap; margin-top:8px; padding-left:49px;}
.vrow2 .wowdone, .vrow2 .hintline{font-size:11.5px; margin:0; padding-left:0;}
.vrow2 .wowbtn, .vrow2 .hintbtn{font-size:11.5px; padding:3px 8px;}
.hintbtn{border:1px solid var(--line); background:#fff; color:var(--purple); border-radius:8px;
  padding:4px 9px; font-size:12px; line-height:1.4;}
.hintbtn:hover{background:var(--card); border-color:var(--purple);}
.hintbox{display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin:9px 0 2px;
  padding:10px 12px; background:var(--card); border-radius:11px;}
.hintbox .wlbl{flex:none;}
.hintbox input{flex:1; min-width:200px; border:1px solid var(--line); border-radius:9px; padding:7px 11px;
  font:inherit; font-size:12.5px; background:#fff;}
.hintbox input:focus{outline:none; border-color:var(--purple);}
.hintline{margin:7px 0 0; padding-left:49px; font-size:12.5px; color:var(--purple);}
/* Отступ вау-строки на телефоне равен отступу остальных строк карточки. До 26.08.2026 он тут
   обнулялся, и это было верно: карточка была ОДНОСТРОЧНОЙ, всё её содержимое начиналось от
   левого края, и 49px у вау-строки выбивались бы. С переходом карточки на три строки контекст
   перевернулся — под именем теперь стоят .l2, .l3, .reasons и .memo (все по 49px), и нулём
   выбивается уже сама вау-строка. Замерено на 390px: 49/49/49/49 против 0.
   Хвост правила (.wowdone/.hintline) снят вместе с ним как недостижимый: оба рисуются только
   внутри .vrow2 (app.js, wowRowHtml), а там их отступ уже обнуляет правило выше — с большей
   специфичностью, которую медиазапрос не перебивает. */
/* ── интро-плашка: «Вау-моменты» (задача 10, 2026-08-19) и «Вернувшиеся клиенты» (24.08.2026).
      Вёрстка одна на оба экрана — правится здесь, а не копией под каждый раздел ── */
.intro .intro-lead{font-size:15px; line-height:1.5; margin-bottom:14px; max-width:760px;}
.intro-cols{display:flex; gap:22px; flex-wrap:wrap;}
.intro-cols > div{flex:1; min-width:190px; font-size:12.5px; color:var(--green-2); line-height:1.5;}
.intro-cols b{display:block; font-size:10.5px; text-transform:uppercase; letter-spacing:.05em;
  color:var(--green); margin-bottom:4px; font-weight:500;}
.intro-fire{margin-top:15px; padding-top:13px; border-top:1px solid var(--sand);
  font-size:13px; color:var(--green);}
/* комета внутри плашки — не кнопка, а образец значка из списка визитов: гасим курсор и ховер,
   иначе она приглашает на клик, которого здесь нет */
.intro .pbadge{margin:0 0 0 3px; cursor:default;}  /* справа 0: за значком сразу точка */
.intro .pbadge:hover{background:var(--sand); color:var(--green); transform:none;}
.wpot{display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin:2px 0 15px;}
.wpot-note{font-size:12.5px; opacity:.7; margin-top:12px;}
.wtag{background:rgba(246,245,242,.09); border:1px solid rgba(246,245,242,.15); border-radius:9px;
  padding:4px 10px; font-size:12px; color:var(--cream); white-space:nowrap; line-height:1.4;}
.wtag small{opacity:.5; margin-left:6px; font-size:10.5px;}
.wtag.uniq{border-color:rgba(211,136,103,.55); background:rgba(211,136,103,.14);}
.wtag.mine{background:var(--sand); border-color:var(--sand); color:var(--green); font-weight:500;}
.wtag.mine small{opacity:.65;}
.wtag.fresh{animation:pop .65s cubic-bezier(.2,1.6,.4,1);}
.wcard{background:#fff; border:1px solid var(--line); border-radius:14px; padding:15px 17px; margin-bottom:10px;}
.wcard .wtop{display:flex; gap:10px; align-items:baseline; flex-wrap:wrap;}
.wcard .wtop b{font-size:14.5px; font-weight:500;}
.wcard .wn{font-size:11.5px; color:var(--grey); text-transform:uppercase; letter-spacing:.03em;}
.wcard .wact{font-size:13px; margin-top:6px;}
.wcard .whint{font-size:12.5px; color:var(--purple); margin-top:4px;}
/* откуда механика: автор(студия) и месяц появления (20.08.2026) */
.wcard .worigin{font-size:11.5px; color:var(--grey); margin-top:3px;}
.wcard .wfire{margin-left:auto; border:1px solid var(--line); background:var(--cream); border-radius:8px;
  padding:4px 10px; font-size:12px; white-space:nowrap;}
.wcard .wfire.on{background:var(--beige); border-color:var(--sand);}
.wcard .wcomm{margin-top:10px; border-top:1px solid var(--card); padding-top:9px; font-size:12.5px;}
.wcard .wcomm div{margin-bottom:5px;}
.wcard .wcomm b{font-weight:500;}
.wcomm-add{display:flex; gap:8px; margin-top:9px;}
.wcomm-add input{flex:1; min-width:0; border:1px solid var(--line); border-radius:9px; padding:7px 11px;
  font:inherit; font-size:12.5px; background:var(--cream);}
.wcomm-add input:focus{outline:none; border-color:var(--sand); background:#fff;}
.wow-new{width:100%; border:1px solid var(--line); border-radius:11px; padding:11px 13px;
  font:inherit; font-size:13.5px; min-height:64px; resize:vertical; background:#fff;}
.wow-sign{display:flex; gap:7px; align-items:center; margin-top:10px; flex-wrap:wrap;}
/* ── экран владельца «Вау-моменты» (задача 11): очередь предложений и каталог механик ── */
.wq{border:1px solid var(--line); border-radius:12px; padding:13px 15px; margin-bottom:9px;}
.wq .wq-text{font-size:14px;}
.wq .wq-who{font-size:11.5px; color:var(--grey); margin-top:4px;}
.wq .wq-act{display:flex; gap:8px; margin-top:10px; flex-wrap:wrap;}
/* поля правки в каталоге — те же, что в карточке очереди: один набор текстов, один вид */
.wq input, .wcat-edit input{width:100%; border:1px solid var(--line); border-radius:9px; padding:7px 11px;
  font:inherit; font-size:12.5px; background:#fff; margin-top:8px;}
.wcat-row{display:flex; gap:10px; align-items:center; flex-wrap:wrap;
  padding:9px 0; border-bottom:1px solid var(--card);}
.wcat-row:last-child{border-bottom:none;}
.wcat-row b{font-weight:500; font-size:13.5px;}
.wbreak{display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin-top:10px; font-size:12px;}
.wbreak b{font-weight:500; opacity:.6; margin-right:2px;}
.wbtag{background:rgba(246,245,242,.09); border:1px solid rgba(246,245,242,.15); border-radius:8px; padding:3px 9px; color:var(--cream);}
.wcat-row .wcat-n{font-size:11.5px; color:var(--grey); margin-left:auto;}
/* раскрывающаяся правка механики: занимает всю ширину строки, поэтому flex-basis:100% —
   тот же приём, что у .wcat-comm ниже */
.wcat-edit{flex-basis:100%;}
/* подпись поля (20.08.2026): заполненное поле placeholder не показывает, и без подписи
   владелец не понимал, где чип, а где триггер. Одна разметка на очередь и на правку. */
.wfield{display:block; margin-top:9px;}
.wfield>span{display:block; font-size:11px; color:var(--grey); text-transform:uppercase;
  letter-spacing:.04em; margin-bottom:2px;}
.wfield input{margin-top:0;}
.wcat-ord{display:flex; align-items:center; gap:9px; margin-top:9px; font-size:12px; color:var(--grey);}
.wcat-ord input{width:82px; margin-top:0;}
/* галочка анонимности (21.08.2026): width:auto — иначе общее правило .wcat-edit input
   растягивает квадратик чекбокса на всю строку */
.wcat-anon{display:flex; align-items:center; gap:8px; margin-top:9px; font-size:12px; color:var(--grey);}
.wcat-anon input{width:auto; margin-top:0;}
/* комментарии под механикой в каталоге владельца — та же структура, что у .wcard .wcomm,
   плюс .off для спрятанного (тот же приём затемнения, что у .rrow.off/.onbrow.off) */
.wcat-comm{flex-basis:100%; margin-top:6px; padding-top:8px; border-top:1px solid var(--card); font-size:12.5px;}
.wcat-comm div{display:flex; align-items:center; gap:8px; margin-bottom:5px;}
.wcat-comm b{font-weight:500;}
.wcat-comm .off{opacity:.5;}
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  html{scroll-behavior:auto}
}
/* ═══ DESKTOP (≥900px): сайдбар вместо таб-бара, как в «Финансах» ═══ */
@media (min-width:900px){
  /* Рама во всю ширину окна (06.09.2026, прототипы «Claude outputs/admin.html», «owner.html»).
     До этого здесь стояло max-width:1120px — вся рама, сайдбар вместе с контентом, была
     отцентрована: на мониторе 1920px это оставляло по 400px кремовых полей с двух сторон, а
     рабочие экраны («Раздача», «Статистика», «Волны») в оставшиеся 904px не влезали.
     ⚠️ Потолок ширины СНЯТ здесь и заведён ниже на .screen — на контенте, а не на раме.
     Разница видна только на ультравайде, и она принципиальная: потолок на body уводит от
     левого края и сайдбар тоже, зелёная колонка повисает в кремовом поле. Потолок на .screen
     держит сайдбар прибитым к краю при любой ширине окна, а пустое место собирается справа.
     Сайдбар держим видимым (sticky) — то же расположение, что в прототипе, но не уезжает
     при прокрутке. */
  body{max-width:none;padding-bottom:0;display:grid;grid-template-columns:216px 1fr;min-height:100vh}
  header.top{display:none}
  nav{position:sticky;top:0;align-self:start;grid-column:1;grid-row:1;height:100vh;width:216px;padding:0;overflow-y:auto;border-right:none}
  nav::before{content:"( MILKY ) TASK";display:block;color:var(--cream);font-size:17px;letter-spacing:.14em;font-weight:500;padding:28px 26px 22px;border-bottom:1px solid rgba(246,245,242,.10);margin-bottom:12px}
  nav{display:flex;flex-direction:column}
  nav .wrap{max-width:none;flex-direction:column;padding:0;height:auto;overflow:visible}
  /* подвал сайдбара по эталону «Финансов»: имя пользователя + выход, прижат вниз */
  #sideFooter{display:flex;flex-direction:column;margin-top:auto;border-top:1px solid rgba(246,245,242,.10);padding:12px 0 16px}
  #sideFooter .who{color:var(--sand);opacity:.7;font-size:10px;letter-spacing:.1em;text-transform:uppercase;padding:6px 26px 10px}
  #sideFooter button{width:100%}
  #sideFooter button.on{opacity:1;color:var(--cream);border-left-color:var(--sand);background:rgba(246,245,242,.06)}
  /* «Настройки» на десктопе живут в подвале — дубль в списке пунктов скрываем */
  nav .wrap button[data-scr="scr-settings"]{display:none}
  nav button{flex:none;display:flex;align-items:center;gap:12px;min-height:0;padding:13px 26px;font-size:12px;letter-spacing:.08em;text-align:left;color:var(--cream);opacity:.7;border-left:2px solid transparent;transition:opacity .15s,background .15s}
  nav button svg{margin:0}
  nav button.on{opacity:1;color:var(--cream);border-left-color:var(--sand);background:rgba(246,245,242,.06)}
  nav button:hover{opacity:.85;background:rgba(246,245,242,.04)}
  main{grid-column:2;grid-row:1;min-width:0}
  /* Рабочая часть на всю ширину контент-колонки, с отступами прототипа (.body 26/30/40).
     Потолок 1760px — НЕ центровка, а длина строки: без него на 2560px текст в карточках
     тянулся бы больше чем на две тысячи пикселей в строку и перестал бы читаться. Считается
     от колонки контента, а не от окна, поэтому на 1920px (колонка 1920−216=1704px) он не
     срабатывает вовсе — там ширина полная, ровно как в прототипе; включается с ≈1976px окна.
     margin оставлен 0, а не auto: контент прижат к сайдбару, пустое место уходит вправо. */
  .screen{padding:26px 30px 40px;max-width:1760px;margin:0}
  h1{font-size:32px;margin-bottom:24px}
  .eyebrow{font-size:11px}
  /* шторка отметки → модальное окно по центру */
  .sheet{left:50%;right:auto;top:50%;bottom:auto;transform:translate(-50%,-46%) scale(.98);opacity:0;pointer-events:none;transition:opacity .18s ease,transform .18s ease;border-radius:18px;width:440px;max-width:440px;max-height:90vh;box-shadow:0 24px 60px rgba(34,34,34,.28)}
  .sheet.on{opacity:1;pointer-events:auto;transform:translate(-50%,-50%) scale(1);bottom:auto}
  .handle{display:none}
}

/* ═══ «МОЙ ДЕНЬ» — редизайн A2: классы, перенесённые из прототипа ═══
   .bar/.stat/.sw уже заняты другими экранами под другую структуру (сверено в A1) —
   там, где имя конфликтует, заведён namespace md-. Остальные классы ниже уникальны для
   прототипа и переносятся без изменений имени. Палитра — см. :root выше (маппинг в комментарии). */
.scr-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin:2px 0 14px}
.scr-head .sub{font-size:12.5px;color:var(--grey)}
.datenav{display:flex;align-items:center;gap:4px}
.md-dbtn{width:26px;height:26px;border-radius:8px;border:1px solid var(--line);background:#fff;
  color:var(--green);font-size:15px;line-height:1;display:flex;align-items:center;justify-content:center}
.md-dbtn:hover{background:var(--card)}
.md-dlabel{font-size:13px;color:var(--ink);min-width:150px;text-align:center;background:none;border:0;min-height:0;padding:4px 6px}
.cols{display:flex;gap:14px;flex-wrap:wrap}
.cols>*{flex:1;min-width:250px}
/* карточки: модификаторы поверх уже существующего .card — базовый класс не переопределяем */
.card.flat{background:var(--card);border:1px solid transparent}
.card.dark{background:var(--green);color:var(--cream)}
.card.warm{background:var(--beige);border:1px solid var(--sand)}
.card h3{font-size:12.5px;text-transform:uppercase;color:var(--grey);margin-bottom:12px;letter-spacing:.02em;font-weight:500}
.card.dark h3{color:rgba(246,245,242,.6)}
/* тропинка из следов (прототип v33) — шкала шагов к премии: лапки рисует drawTrail() в app.js */
.pawtrail{position:relative;height:58px;color:var(--green-2)}
.card.dark .pawtrail{color:var(--sand)}
.pawtrail .paw{position:absolute;width:12px;height:12px;opacity:.2;transition:opacity .35s}
.pawtrail .paw.on{opacity:1}
/* инлайн-иконка «двойная лапка» у крупных счётчиков шагов */
.pawin{width:21px;height:17px;vertical-align:-1px}
/* «Уровень»: сетка цифр в тёмной карточке — namespaced md- (.stat занят на «Прогрессе» под др. структуру) */
.md-stat{display:flex;gap:22px;flex-wrap:wrap}
.md-stat div b{font-size:24px;font-weight:500;display:block;line-height:1.2}
.md-stat div small{font-size:11.5px;color:var(--grey);text-transform:uppercase}
.card.dark .md-stat div small{color:rgba(246,245,242,.6)}
/* визиты: компактная строка */
.vr{padding:9px 10px;border-radius:11px;border:1px solid transparent;border-left:3px solid #5B7FA6;background:var(--card);margin-bottom:6px}
.vr .line{display:flex;gap:11px;align-items:center;flex-wrap:wrap}
/* Три строки в карточке задачи (перенос из прототипа 36_11, 26.08.2026): .line.stack перестаёт
   быть флексом сама и раскладывает три .l друг под другом — время+имя, задача+очки, кнопки.
   Строка первого визита (регламент и анкета) осталась на прежнем однострочном .line без .stack. */
.vr .line.stack{display:block}
.vr .l{display:flex;gap:11px;align-items:center;min-width:0}
/* вторая и третья строки встают под именем, а не под временем: 38px колонки времени + 11px зазор */
.vr .l2,.vr .l3{padding-left:49px;margin-top:6px}
.vr .l1 .nm{flex:1;min-width:0}
/* во второй строке название задачи занимает столько, сколько нужно, и переносится: обрезка
   многоточием была платой за одну общую строку, теперь платить нечем */
.vr .l2 .tk2{flex:initial;white-space:normal;overflow:visible;text-overflow:clip}
.vr .l2 .w{margin-left:auto}
.vr .l2 .foc-why{margin-top:0}
.vr .l3.ctrl{justify-content:flex-start}
.vr.open{background:#fff;border-color:var(--line)}
.vr.done{opacity:.55}
.vr .tm{font-size:12px;color:var(--grey);width:38px;flex:none}
.vr .nm{font-size:13.5px;min-width:150px;flex:none}
.vr .tk2{flex:1;min-width:0;font-size:12.5px;color:var(--grey);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vr .w{font-size:11.5px;color:var(--green);white-space:nowrap;flex:none}
.vr .ctrl{display:flex;gap:5px;flex:none;flex-wrap:wrap;justify-content:flex-end}
.vr .res{font-size:11.5px;color:var(--green);flex:none}
.vr .res.no{color:var(--grey)}
.vr .ph{font-size:11.5px;color:var(--grey);letter-spacing:.02em;font-weight:460;margin-left:4px}
.vr.foc{background:#fff;border-color:var(--line);border-left-width:3px;padding:11px 13px}
/* в карточке с причиной показа («не была N дней») имя выделено — раньше это делал <b> внутри
   .nmwrap, теперь делает CSS, и разметка у обеих карточек одна */
.vr.foc .nm{font-weight:500}
.foc-why{font-size:11.5px;color:var(--terra);margin-top:2px}
.memo{margin:8px 0 0;padding-left:49px;font-size:12.5px;color:var(--purple)}
.reasons{display:flex;gap:5px;flex-wrap:wrap;align-items:center;margin:9px 0 2px;padding-left:49px}
.reason-lbl{font-size:11px;color:var(--grey);text-transform:uppercase;letter-spacing:.03em;margin-right:4px}
.mini{border:1px solid var(--line);background:#fff;border-radius:8px;padding:4px 9px;font-size:11px;color:var(--green);white-space:nowrap}
.mini:hover{background:var(--beige)}
.mini.solid{background:var(--green);color:var(--cream);border-color:var(--green)}
.mini.mute{color:var(--grey)}
.mini.circ{background:var(--beige);border-color:var(--sand);color:var(--green)}
.cmt-done{font-size:12px;color:var(--grey);max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* первый визит / регламент+анкета (срез 2 — структура уже частично есть, здесь только карточка визита) */
/* Строка первого визита осталась однострочной (решение владельца 26.08.2026), но в узкой колонке
   «Регламент и анкета» всё равно переносится под время. Пока карточки задач были однострочными,
   у них .tk2 переносился туда же и всё стояло ровно; после перехода на три строки их название
   уехало на 49px, и строка первого визита осталась единственной, кто начинается от левого края.
   Ставим её название на свою строку с тем же отступом. На широком экране перенос не нужен —
   там правило снимается, и строка снова читается слева направо. */
.vr.first .line .tk2{width:100%;padding-left:49px}
@media (min-width:900px){ .vr.first .line .tk2{width:auto;padding-left:0} }
.vr.first{border-left-color:var(--purple)}
.vr.first.yr{border-left-color:var(--terra)}
.first-b{font-size:9.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--purple);background:#EFEFF4;
  border-radius:5px;padding:1px 6px;margin-left:6px;white-space:nowrap}
.first-b.yr{color:var(--terra);background:var(--beige)}
.reg-line{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:9px;padding-left:49px}
.reg-st{font-size:12.5px;color:var(--purple)}
.reg-box{margin-top:10px;padding:14px 16px;background:var(--card);border-radius:12px}
.chk-list{margin-top:11px}
.ci{display:flex;gap:10px;align-items:flex-start;padding:7px 0}
.ci .bx{width:19px;height:19px;border-radius:6px;border:1.5px solid var(--sand);flex:none;
  display:flex;align-items:center;justify-content:center;font-size:11px;color:transparent;margin-top:1px}
.ci.on .bx{background:var(--green);border-color:var(--green);color:var(--cream)}
.ci .tx{flex:1;font-size:13.5px}
.ci.on .tx{color:var(--grey)}
.ci .mom{font-size:10.5px;text-transform:uppercase;color:var(--purple);background:#EFEFF4;border-radius:6px;padding:2px 7px;flex:none;margin-top:1px;letter-spacing:.03em}
.pbadge{width:23px;height:23px;border-radius:50%;background:var(--sand);color:var(--green);
  display:inline-flex;align-items:center;justify-content:center;font-size:13px;margin-right:8px;flex:none;vertical-align:middle;cursor:pointer;transition:background .18s,transform .18s}
.pbadge:hover{background:var(--terra);color:#fff;transform:scale(1.12)}
/* Новости (лента, срез 4-6) — лифт из прототипа admin.html #news (.post/.react/.unread),
   палитра замаплена на существующие переменные; .post-tag namespace, чтобы не задеть .tag. */
.post{background:#fff;border:1px solid var(--line);border-radius:14px;padding:15px 17px;margin-bottom:10px;position:relative}
.post.new{border-color:var(--sand);background:#FFFDF9}
.post.mine{border-left:3px solid var(--terra)}
.post-top{display:flex;gap:9px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.post-tag{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--green-2);background:var(--card);border-radius:6px;padding:3px 8px}
.post-who{font-size:12.5px;color:var(--grey)}
.post-when{font-size:11.5px;color:var(--grey);margin-left:auto}
.post h4{font-size:15px;font-weight:500;margin-bottom:4px}
.post p{font-size:13.5px;color:var(--ink);line-height:1.5;white-space:pre-line}
.post p.dry{color:var(--green-2)}
.post .addr{font-size:11px;color:var(--terra);text-transform:uppercase;letter-spacing:.03em;margin-top:6px}
.reacts{display:flex;gap:6px;margin-top:11px;flex-wrap:wrap}
.react{border:1px solid var(--line);background:var(--cream);border-radius:20px;padding:3px 10px;cursor:pointer;font-size:14px;display:flex;align-items:center;gap:5px}
.react:hover{border-color:var(--sand)}
.react.on{background:var(--beige);border-color:var(--sand)}
.react .cnt{font-size:11.5px;color:var(--grey)}
.react.on .cnt{color:var(--green)}
.unread{display:inline-block;min-width:17px;height:17px;line-height:17px;text-align:center;font-size:10px;font-weight:600;background:var(--terra);color:#fff;border-radius:9px;padding:0 5px;margin-left:7px}
.unread.zero{display:none}
/* подарок в записи ленты — перенос из прототипа milky-task-prototype_27.html (строки 402-439) */
@keyframes gfloat{0%,100%{transform:translateY(0) rotate(-4deg);}50%{transform:translateY(-6px) rotate(5deg);}}
@keyframes gshine{0%{transform:translateX(-160%) rotate(18deg);}60%,100%{transform:translateX(320%) rotate(18deg);}}
@keyframes gtwink{0%,100%{opacity:.15;}50%{opacity:.95;}}
.gcard{display:inline-flex; gap:13px; align-items:center; margin-top:11px; padding:9px 13px;
  border-radius:13px; border:1px solid var(--line); position:relative; overflow:hidden;
  background:
    radial-gradient(circle 1.4px at 20% 30%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.2px at 80% 24%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.4px at 64% 72%, #fff 92%, transparent 100%),
    radial-gradient(130% 120% at 50% 0%, #F3D3BD 0%, var(--beige) 55%, #fff 100%);}
.gem2{width:44px; height:44px; flex:none; border-radius:50%; background:#fff;
  display:flex; align-items:center; justify-content:center; font-size:21px;
  box-shadow:0 6px 14px rgba(211,136,103,.35);}
.gem2 em{display:inline-block; font-style:normal; animation:gfloat 3.4s ease-in-out infinite;}
.gdone{font-size:12px; color:var(--green-2);}
/* доска достижений — перенос из прототипа milky-task-prototype_27.html (строки 391-423).
   gfloat/gshine/gtwink уже объявлены выше (подарок в ленте) — переиспользуем, не дублируем.
   var(--tint1) прототипа не существует в проде: тот же цвет здесь уже — var(--beige) (см. .gcard
   на четыре строки выше, та же замена, тот же байт-в-байт цвет #EBDBD1). */
.gifts{display:flex; gap:14px; flex-wrap:wrap;}
.gift{width:176px; border-radius:18px; padding:20px 14px 16px; text-align:center; cursor:pointer;
  position:relative; overflow:hidden; border:1px solid var(--line); transition:transform .15s;
  background:
    radial-gradient(circle 1.6px at 18% 26%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.2px at 78% 18%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.4px at 66% 44%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.1px at 30% 58%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.6px at 86% 62%, #fff 92%, transparent 100%),
    radial-gradient(130% 95% at 50% 0%, #F3D3BD 0%, var(--beige) 52%, #fff 100%);}
.gift:hover{transform:translateY(-3px);}
.gift .gem em{display:inline-block; font-style:normal; animation:gfloat 3.4s ease-in-out infinite;}
.gift::before{content:''; position:absolute; inset:0; pointer-events:none;
  background:
    radial-gradient(circle 2px at 24% 20%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.6px at 72% 30%, #fff 92%, transparent 100%),
    radial-gradient(circle 2px at 84% 70%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.5px at 14% 66%, #fff 92%, transparent 100%);
  animation:gtwink 2.6s ease-in-out infinite;}
.gift::after{content:''; position:absolute; top:-25%; bottom:-25%; left:0; width:52px; pointer-events:none;
  background:linear-gradient(105deg, transparent, rgba(255,255,255,.8), transparent);
  transform:translateX(-160%) rotate(18deg); animation:gshine 4.6s ease-in-out infinite;}
.gift .gem{width:66px; height:66px; margin:4px auto 12px; border-radius:50%; background:#fff;
  display:flex; align-items:center; justify-content:center; font-size:31px;
  box-shadow:0 8px 20px rgba(211,136,103,.38), inset 0 -3px 8px rgba(211,136,103,.18);}
.gift b{display:block; font-size:12.5px; font-weight:500; text-transform:uppercase; letter-spacing:.05em;}
.gift .num{display:inline-block; margin-top:8px; font-size:10px; text-transform:uppercase;
  letter-spacing:.06em; background:var(--terra); color:#fff; border-radius:8px; padding:3px 10px;}
.gift small{display:block; font-size:11px; color:var(--grey); margin-top:8px; line-height:1.45;}
.gift .gdate{display:block; font-size:10px; color:var(--terra); margin-top:6px;
  text-transform:uppercase; letter-spacing:.06em;}
/* Клик по названию задачи (.tk2) — инлайн-панель с полями типа задачи (лифт .attrs/.attr из
   admin.html #today: Задача/Смысл/Формулировка/Очки, данные из BOOT.types). */
.tk2{cursor:pointer}
.tk2:hover{color:var(--green)}
.attrs{margin:9px 0 2px;padding:12px 14px;background:#fff;border:1px solid var(--line);border-radius:11px}
.vr.foc .attrs{background:var(--card);border-color:transparent}
.attr{display:flex;gap:12px;padding:5px 0;align-items:flex-start}
.attr b{font-size:10.5px;text-transform:uppercase;color:var(--grey);letter-spacing:.03em;width:104px;flex:none;margin-top:2px}
.attr span{font-size:13px;flex:1}
.attr span.script{font-style:italic;color:var(--green-2)}
.attr span.miss{color:var(--terra)}
/* Модалка «комета» — премия за возврат (лифт .veil/.modal/.premrow/.premsum из admin.html). */
.veil{position:fixed;inset:0;background:rgba(39,65,56,.4);display:none;align-items:center;justify-content:center;z-index:70;padding:20px}
.veil.on{display:flex}
.modal{background:var(--cream);border-radius:18px;max-width:460px;width:100%;padding:24px;max-height:90vh;overflow:auto}
.modal h3{font-size:16px;text-transform:uppercase;margin-bottom:4px}
.modal .act{display:flex;gap:9px;margin-top:16px;align-items:center;flex-wrap:wrap}
.premrow{display:flex;gap:12px;padding:9px 0;border-bottom:1px solid var(--line);font-size:13.5px}
.premrow:last-of-type{border-bottom:none}
.premrow b{width:132px;flex:none;font-size:11px;text-transform:uppercase;color:var(--grey);margin-top:2px}
.premrow span{flex:1}
.premsum{background:var(--beige);border-radius:12px;padding:14px 16px;margin:14px 0 4px}
.premsum b{font-size:22px;font-weight:500;display:block;color:var(--green)}
.premsum small{font-size:12.5px;color:var(--green-2)}
/* анкета визита (A6b): инлайн-разворот регламент+анкета внутри карточки визита, лифтится
   из прототипа (.stage-why/.repform/.q/.q-hint/.scale/.line-input) — этих классов у прода
   ещё не было (.reg-line/.reg-box/.chk-list/.ci/.first-b/.pbadge уже перенесены ранее). */
.stage-why{font-size:13px;color:var(--green-2);margin-bottom:11px;max-width:640px}
.repform{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.rep-head{font-size:12.5px;text-transform:uppercase;color:var(--grey);letter-spacing:.02em;margin-bottom:8px}
.rep-note{font-size:12.5px;color:var(--green-2);background:var(--card);border-radius:10px;padding:10px 12px}
.q{margin-bottom:14px}
.q>b{font-size:12px;display:block;margin-bottom:6px;font-weight:500}
.q textarea{width:100%;border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:13px;min-height:56px;resize:vertical}
.q .opts{display:flex;gap:5px;flex-wrap:wrap}
.q .opts button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:5px 11px;font-size:12px}
.q .opts button.on{background:var(--green);color:var(--cream);border-color:var(--green)}
.q .note{font-size:13px;color:var(--ink);background:var(--card);border-radius:10px;padding:9px 11px}
.line-input{width:100%;border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:13px}
.q-hint{font-size:11.5px;color:var(--grey);margin-top:6px}
.form-scale{display:flex;gap:4px;flex-wrap:wrap}
.form-scale button{width:32px;height:32px;border:1px solid var(--line);background:#fff;border-radius:8px;font-size:12.5px}
.form-scale button.on{background:var(--green);color:var(--cream);border-color:var(--green)}
.src-adm{font-size:9.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--terra);background:var(--beige);border-radius:5px;padding:1px 5px;margin-left:3px}
.src-crm{font-size:9.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--purple);background:#EFEFF4;border-radius:5px;padding:1px 5px;margin-left:3px}
/* цвет типа задачи на строке визита — намеренно НЕ переиспользует .t-* (те красят фон карточки
   задачи на «Раздаче»/«Прогрессе»), здесь только полоса слева, как в прототипе. Значения —
   те же 5 HEX, что уже определены для .t-crosssell/.t-cash/.t-bot/.t-shop/.t-next (index выше),
   маппинг по type_id, а не по прототипным 4 цветам (см. A1-отчёт, раздел 4). */
.vr.vt-cash{border-left-color:#5B7FA6}
.vr.vt-crosssell{border-left-color:#8C9497}
.vr.vt-bot{border-left-color:#B0473A}
.vr.vt-shop{border-left-color:#C9A227}
.vr.vt-next{border-left-color:#274138}
/* демо-витрина: комбо дня (без реального начисления в game.php — см. A1, решение владельца) */
.combo{display:flex;gap:7px;flex-wrap:wrap;margin-top:8px}
.chip{border:1.5px solid var(--line);border-radius:9px;padding:6px 11px;font-size:12px;color:var(--grey)}
.chip.on{border-color:var(--green);background:var(--green);color:var(--cream)}
/* демо-витрина: задания недели (нет БД/механики — см. A1) */
.qz{display:flex;gap:11px;align-items:center;padding:9px 0;border-bottom:1px solid var(--line)}
.qz:last-child{border-bottom:none}
.qz .box{width:19px;height:19px;border-radius:6px;border:1.5px solid var(--sand);flex:none;
  display:flex;align-items:center;justify-content:center;font-size:11px;color:transparent}
.qz.done .box{background:var(--green);border-color:var(--green);color:var(--cream)}
.qz .tx{flex:1;font-size:13.5px}
.qz.done .tx{color:var(--grey);text-decoration:line-through}
.qz .tx small{display:block;font-size:11.5px;color:var(--grey);text-decoration:none}
/* демо-витрина: присутствие сети (нет API-агрегата для роли admin — см. A1) */
.lamps{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}
.lamp{width:12px;height:12px;border-radius:50%;background:var(--card);border:1.5px solid var(--sand)}
.lamp.on{background:var(--green);border-color:var(--green)}

/* ═══ «РАЗДАЧА» — редизайн B2: карточные классы прототипа (owner.html, экран #give),
   namespaced rz- там, где имя занято другим смыслом (см. B1-отчёт §5: .btn — блочная кнопка
   меню/форм, .tsel — уже используется для типа задачи с другим видом, .note — полоса-«признание»
   на др. экранах). .card/.card h3/.svc/.cols/.scr-head/.line-input уже перенесены раньше и
   совпадают по смыслу — переиспользуются как есть, без переименования. Разметка ниже статическая
   (без apiFetch) — данные подключат B3–B5. Палитра — существующий :root, новых переменных не
   потребовалось (сверено в B1). */
.rz-ctrlrow{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
.rz-ctrlrow input[type=date]{max-width:190px}
.rz-ctrlrow select{max-width:230px}
.rz-hint{font-size:12.5px;color:var(--grey);flex:1;min-width:240px}
/* .btn занят полноширинной кнопкой меню/форм (min-height:48px) — пилюля прототипа namespaced */
.rz-btn{border:0;border-radius:10px;padding:9px 16px;background:var(--green);color:var(--cream);
  font-size:11px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;
  cursor:pointer;transition:background .15s}
.rz-btn:hover{background:var(--green-2)}
/* «Типы задач · веса и формулировки» — справочная карточка, 1:1 из прототипа (.tref), имя свободно */
.rz-tref{display:flex;gap:12px;align-items:flex-start;padding:10px 0;border-bottom:1px solid var(--line)}
.rz-tref:last-child{border-bottom:none}
.rz-tref .w{width:40px;flex:none;font-size:14px;font-weight:500;color:var(--green)}
.rz-tref b{font-size:13.5px;font-weight:500;display:block}
.rz-tref i{font-size:12.5px;color:var(--grey);display:block;margin-top:3px;font-style:normal}
/* карточка визита «Раздачи» (B5: renderAssignDay пишет сюда, в #gVisitCards — .ccard/#gDayList
   сняты, использовались только как скелет-заглушка до рестайла). Бордер красим по типу
   задачи через уже существующие 5 HEX .t-cash/.t-crosssell/.t-bot/.t-shop/.t-next (compound-селектор
   .rz-vcard.t-* — специфичность выше голого .t-*, иначе порядок объявления в файле отдал бы верх
   фону/бордеру .rz-vcard) — сознательно расходится с прототипом (там vcard всегда var(--green2),
   тип виден только в пикере): красим карточку по типу уже давно и осознанно продолжаем, решение
   не менять — за владельцем (см. B1-отчёт §1). */
.rz-vcard{border:1px solid var(--line);border-left:4px solid var(--green-2);border-radius:13px;
  padding:14px 16px;margin-bottom:10px;background:#fff}
.rz-vcard.t-crosssell{background:#F0F0EC;border-left-color:#8C9497}
.rz-vcard.t-cash{background:#E9EFF5;border-left-color:#5B7FA6}
.rz-vcard.t-bot{background:#F7E5E1;border-left-color:#B0473A}
.rz-vcard.t-shop{background:#F7F0DC;border-left-color:#C9A227}
.rz-vcard.t-next{background:#EAF0E9;border-left-color:#274138}
/* B5: отменившиеся клиенты — серым в конец списка, не удаляются (правило сохранено 1:1 с
   прежним .ccard.cancelled); без t-* класса, поэтому compound .rz-vcard.t-* не участвует */
.rz-vcard.cancelled{opacity:.45;color:var(--grey);background:#fff;border-left:1px solid var(--line)}
.rz-vcard-top{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.rz-vcard-top .tm{font-size:12.5px;color:var(--grey)}
.rz-vcard-top b{font-size:15px;font-weight:500}
.rz-ph{font-size:12px;color:var(--grey);font-weight:460}
.rz-vcard-top .x{margin-left:auto;border:0;background:none;color:var(--grey);cursor:pointer;
  font-size:18px;line-height:1;padding:2px}
.rz-vcard-top .x:hover{color:var(--err)}
.rz-taskrow{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:12px}
.rz-taskrow .slab{font-size:12px;color:var(--grey)}
/* .tsel занят видом «тип задачи в .ccard» — здесь тот же смысл, но «пилюльный» вид прототипа,
   scoped под .rz-vcard, чтобы не задеть .ccard .tsel/базовый .tsel (см. B1-отчёт §5) */
.rz-vcard .tsel{width:auto;min-width:230px;min-height:0;padding:8px 11px;font-size:13px;
  background:var(--beige);color:var(--green);font-weight:500;border-radius:10px}
.rz-cmt{width:auto;flex:1;min-width:200px;min-height:0;padding:8px 12px;font-size:13px}

/* ═══ «РАЗДАЧА» v13 — визитный портрет клиента инлайн под карточкой (owner13.html #give):
   таблица истории визитов (сегодня + прошлые: услуги/мастер/сумма/админ/задача-исход/анкета) +
   панель анкеты (напиток/AHA/«хочу постоянной»/спрашивала/риск/кто). Данные — getClient
   (visits + anket из visit_forms). CRM-поля (возраст/мастер/сумма) деградируют честно, как в
   прототипе («поля придут из CRM»). .ok → .hok (голого .ok в проекте нет, но избегаем путаницы). */
.vmeta2{display:flex;gap:16px;flex-wrap:wrap;margin-top:6px;font-size:12.5px;color:var(--grey)}
.vmeta2 b{color:var(--ink);font-weight:500}
.soon{font-size:10.5px;text-transform:uppercase;letter-spacing:.03em;color:var(--purple);background:#EFEFF4;border-radius:5px;padding:2px 7px}
.histbox{margin-top:11px;padding:13px 14px;background:var(--card);border-radius:12px}
.segline{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:11px;padding-bottom:11px;border-bottom:1px solid var(--line)}
.segline b{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--grey);font-weight:500;margin-right:2px}
.segline span{font-size:11.5px;color:var(--green-2);background:#fff;border:1px solid var(--line);border-radius:100px;padding:2px 9px}
.histcols{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:16px;align-items:start}
.histleft{min-width:0}
.histleft>b,.anket>b{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--grey);font-weight:500;display:block;margin-bottom:8px}
.hhead{display:flex;gap:10px;font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--tint3);padding-bottom:5px;border-bottom:1px solid var(--line)}
.hrow{display:flex;gap:10px;font-size:12.5px;padding:5px 0;border-bottom:1px solid var(--line);align-items:baseline}
.hrow:last-child{border-bottom:none}
.hd{width:44px;flex:none;color:var(--grey)}
/* 05.08.2026: услуги рендерятся построчно (мастер и его метки у каждой), обрезка по ellipsis
   съедала бы всё, кроме первой строки. Строка «сегодня» и так жила с переносом — см. .hrow.today */
.hs{flex:1;min-width:0;color:var(--grey)}
.hs b{font-weight:500;color:var(--ink)}
.hadm{width:140px;flex:none;font-size:12.5px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hadm small{color:var(--grey)}
.ht{width:128px;flex:none}
.hok{font-size:11.5px}
.hok.none,.hok.pend{color:var(--tint3)}
/* 05.08.2026: сюда же пишется причина удаления визита — «анкета» помещалась в 52px, фраза нет */
.hw{width:112px;flex:none;color:var(--grey);text-align:right}
.persm{font-style:normal;font-size:10.5px;margin-right:1px;vertical-align:1px}
.hrow.today{background:#fff;border-radius:8px;box-shadow:inset 3px 0 0 var(--terra);padding:7px 9px;margin-bottom:2px;border-bottom:none}
.hrow.today .hd{color:var(--terra)}
.hrow.today .hs{color:var(--ink)}
.hrow.today .hok.pend{color:var(--terra)}
.nowb{font-style:normal;font-size:10px;text-transform:uppercase;letter-spacing:.03em;background:var(--beige);color:var(--terra);border-radius:5px;padding:1px 6px}
.hsumline{font-size:12.5px;color:var(--grey);margin-top:9px}
.hsumline b{color:var(--ink);font-weight:500}
.hrow.hasA{cursor:pointer}
.hrow.hasA:hover{background:#fff;border-radius:8px}
.hrow.selA{background:#fff;border-radius:8px;box-shadow:inset 3px 0 0 var(--sand)}
.adot{font-style:normal;font-size:10px;text-transform:uppercase;letter-spacing:.03em;background:var(--sand);color:var(--green);border-radius:5px;padding:1px 6px}
/* Индексы клиента из CRM (18.08.2026) — чипы в строке «Портрет CRM». Форма та же, что у чипов
   сегмента (.segline span), отличают их только вес числа и цвет: меньше нуля — красный, больше
   50 — зелёный, между — обычный чип. Шкала знакопеременная и не проценты, см. indexChipsHtml(). */
.cidx{font-size:11.5px;color:var(--grey);background:#fff;border:1px solid var(--line);border-radius:100px;padding:2px 9px}
/* tabular-nums здесь не нужен (чипы не стоят колонкой, выравнивать нечего), а минус в нём
   занимает ширину цифры и отрывается от числа — «- 64» вместо «-64». */
.cidx b{font-weight:600;color:var(--ink)}
/* Заливка у обеих окрашенных сторон, не только у красной: --green-2 совпадает с цветом обычных
   чипов сегмента (.segline span), и «зелёный» одним лишь текстом на экране не читался вовсе. */
.cidx.good{border-color:rgba(55,91,79,.45);background:rgba(55,91,79,.07)}
.cidx.good b{color:var(--green-2)}
.cidx.bad{border-color:rgba(138,59,42,.45);background:rgba(138,59,42,.05)}
.cidx.bad b{color:var(--err)}
/* Способ оплаты — приписка в строке «итого», не отдельная колонка: она нужна взглядом рядом с
   суммой, а места в таблице нет. Сплит-оплата рисуется несколькими .paym через «+». */
.paym{font-style:normal;color:var(--grey)}
/* Отзывы о визите — своя строка во всю ширину под строкой визита (в колонки не влезают).
   Клиентский и мастерский различаются только цветом полоски слева. */
.hrev{display:flex;gap:8px;align-items:baseline;font-size:12px;padding:4px 9px 6px;margin:0 0 2px;
      background:#fff;border-radius:8px;color:var(--grey)}
.hrev.cli{box-shadow:inset 3px 0 0 var(--sand)}
.hrev.mas{box-shadow:inset 3px 0 0 var(--beige)}
.hrev .rvw{flex:none;color:var(--terra);letter-spacing:-.05em}
.hrev .rvt{min-width:0}
.hrev .rvt b{font-weight:500;color:var(--ink)}
.rcause{font-style:normal;font-size:10px;text-transform:uppercase;letter-spacing:.03em;
        background:var(--cream);color:var(--green);border-radius:5px;padding:1px 6px;margin-left:6px}
.anket{min-width:0;background:#fff;border-radius:11px;padding:12px 14px}
.anket.empty,.anket.stale{background:var(--cream)}
.aempty{font-size:12px;color:var(--grey);line-height:1.45}
.arow{display:flex;gap:10px;font-size:12.5px;padding:5px 0;border-bottom:1px solid var(--line)}
.arow:last-child{border-bottom:none}
.arow span{width:112px;flex:none;color:var(--grey)}
.arow.risk2{color:var(--terra)}
.rz-expand{margin-top:6px;font-size:12px;color:var(--green-2);background:none;border:0;cursor:pointer;padding:2px 0;letter-spacing:.02em}
.rz-expand:hover{color:var(--green)}

/* ═══ «ВОЗВРАТЫ» — редизайн задачи D: карточные классы прототипа (admin.html, экран #returns,
   строки 391-409/691-734). .who/.stat/.right/.ph/.win заняты другим смыслом в проекте (шапка
   .who, статы «Мой день» .stat, .task.win/#toast.win) — лифтнутые классы префиксованы rt-.
   .card/.card.dark/.warm/.flat/.card h3/.scr-head/.sub уже перенесены раньше (B2) и совпадают
   по смыслу побайтово (сверены с прототипом) — переиспользуются как есть, без переименования.
   Честность (task-D-brief §«инвариант честности»): «очков за касания» и «не приходила N дней/
   на N-й день окна» у прототипа не бэкаются — эти слоты в разметке ниже не рендерятся вовсе. */
.rt-ret{display:flex;gap:14px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--line)}
.rt-ret:last-child{border-bottom:none}
.rt-ret .rt-av{width:34px;height:34px;border-radius:50%;flex:none;background:var(--beige);color:var(--green);
  display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:500}
.rt-ret .rt-who{flex:1;min-width:0}
.rt-ret .rt-who b{font-size:14.5px;font-weight:500;display:block}
.rt-ret .rt-who small{font-size:12px;color:var(--grey);display:block;margin-top:1px}
.rt-ret .rt-who .rt-did{font-size:12.5px;color:var(--green-2);margin-top:5px}
.rt-ret .rt-who textarea{margin-top:8px}
.rt-ret .rt-right{text-align:right;flex:none;min-width:132px}
.rt-ph{font-size:11.5px;color:var(--grey);letter-spacing:.02em;font-weight:460}
.rt-win{font-size:11px;text-transform:uppercase;border-radius:6px;padding:3px 8px;display:inline-block}
.rt-win.open{background:var(--card);color:var(--grey)}
.rt-win.soon{background:var(--sand);color:var(--green)}
.rt-win.back{background:var(--green);color:var(--cream)}
.rt-win.closed{background:var(--card);color:var(--tint3)}
/* хвост прошлого месяца в «Ждём возвращения» — отбивка поверх .eyebrow, своих красок не заводим */
.rt-tail{margin:16px 0 2px;padding-top:14px;border-top:1px solid var(--line)}
.rt-tail+.rt-ret{border-top:0}
.rt-next{font-size:12px;color:var(--green-2);margin-top:4px}
.rt-next::before{content:'✓ '}
/* стрелки месяцев внутри .card.dark — контур по светлому тексту карточки */
.mnav{background:none;border:1px solid rgba(255,255,255,.3);color:#fff;border-radius:8px;
  width:28px;height:28px;font-size:15px;line-height:1;flex:none}
.mnav:disabled{opacity:.25;cursor:default}
.rt-ret.faded{opacity:.55}
.rt-stat{display:flex;gap:22px;flex-wrap:wrap}
.rt-stat div b{font-size:24px;font-weight:500;display:block;line-height:1.2}
.rt-stat div small{font-size:11.5px;color:var(--grey);text-transform:uppercase}
.card.dark .rt-stat div small{color:rgba(246,245,242,.6)}

/* ═══ «ДОСТИЖЕНИЯ» — редизайн задачи C (admin.html #progress, строки 213-228/406-409/630-638;
   PATH/plur/plurD/drawPath — строки 771-775/1205-1228, лифтнуты в <script>). Честное ядро:
   только 4 бэкаемых блока из ~12 у прототипа (см. task-C-brief и
   docs/2026-07-29-тикет-достижения-нехватка-данных.md) — «цель месяца», «рекорд недели»,
   «что это дало», «сеть вместе», «полка/титулы», «стаж», «шкала касаний», «наставничество»,
   «рестарт-бонус» не строятся вовсе (нет бэкенда — показывать выдуманные числа нельзя).
   Коллизии (сверено grep): .stat занят statgrid'ом этого же экрана (серия/премий/конв/рекорд
   дня) → «За всё время» получает свой .ac-stat. «Звёздный путь» (.pathchips/.pchip/.ladder/
   .lstep/.ac-bar) стоял здесь до 21.08.2026 — снят вместе со звёздными днями (этап 2). */
.ac-stat{display:flex;gap:22px;flex-wrap:wrap}
.ac-stat div b{font-size:24px;font-weight:500;display:block;line-height:1.2}
.ac-stat div small{font-size:11.5px;color:var(--grey);text-transform:uppercase}

/* ── владелец: экран «Новости» (написать · правила автозаписей · по сотрудникам), срез 6.
   .on-* — свои для формы/шапки; .rrow/.tflag/.sw3/.pn-*/.cbadge/.prev/.mini/.seg2 перенесены
   из owner-прототипа, цвета замаплены на прод-палитру (--tint1→rgba green, --bg2→--card,
   --purple/--sand/--terra-deep — уже в палитре). ── */
/* Кому·Тип·Подпись — всегда одна строка (правка 30.07 §2): nowrap + min-width:0, чтобы поля
   сжимались под ширину шапки и не переносились по одному на строку; текст в селекте усекается. */
.on-writerow{display:flex;gap:6px;margin-bottom:9px;flex-wrap:nowrap}
.on-writerow .line-input{flex:1 1 0;min-width:0;width:auto;padding:8px 8px;font-size:12px}
.on-text{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:13px;font-family:inherit;resize:vertical;line-height:1.5}
.on-text:focus{outline:none;border-color:var(--green)}
.on-writebar{display:flex;gap:12px;align-items:center;margin-top:10px;flex-wrap:wrap}
.on-writebar .note{flex:1;min-width:120px}
.on-runbar{margin-top:12px}

.rrow{display:flex;gap:14px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--line)}
.rrow:last-child{border-bottom:none}
.rrow.off{opacity:.5}
.rmain{flex:1;min-width:0}
.rtop{display:flex;gap:9px;align-items:baseline;flex-wrap:wrap}
.rtop b{font-size:14px;font-weight:500}
.tflag{font-size:10px;text-transform:uppercase;letter-spacing:.03em;border-radius:6px;padding:2px 8px}
.tflag.событие{background:rgba(39,65,56,.09);color:var(--green)}
.tflag.порог{background:var(--sand);color:var(--terra-deep)}
.tflag.расписание{background:#EFEFF4;color:var(--purple)}
.rwhen{font-size:12px;color:var(--grey)}
.rtpl{font-size:13px;color:var(--green-2);background:var(--card);border-radius:8px;padding:7px 10px;margin-top:7px}
.rttl{font-size:13px;font-weight:600;color:var(--green-2);margin-top:7px}
.rmeta{font-size:12px;color:var(--grey);margin-top:6px}
.rmeta b{color:var(--ink);font-weight:500}
.ract{display:flex;gap:9px;align-items:center;flex:none;flex-wrap:wrap;justify-content:flex-end}
.mini{border:1px solid var(--line);background:#fff;border-radius:8px;padding:4px 9px;font-size:12px;color:var(--ink);cursor:pointer}
.mini:hover{background:rgba(39,65,56,.04)}
.mini.solid{background:var(--green);color:var(--cream);border-color:var(--green)}
.mini.solid:hover{background:var(--green-2)}
.sw3{width:42px;height:24px;border-radius:99px;background:var(--tint3);position:relative;transition:.2s;border:none;cursor:pointer;flex:none}
.sw3 i{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:.2s}
.sw3.on{background:var(--green)} .sw3.on i{left:21px}
.on-edit{margin-top:9px}
.on-etitle{width:100%;border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:13px;font-family:inherit;margin-bottom:7px;box-sizing:border-box}
.on-etpl{width:100%;border:1px solid var(--line);border-radius:8px;padding:7px 10px;font-size:13px;font-family:inherit;resize:vertical}
.on-editrow{display:flex;gap:10px;align-items:center;margin-top:7px;flex-wrap:wrap}
.on-editrow label{font-size:12px;color:var(--grey);display:flex;gap:6px;align-items:center}
.on-editrow input{width:64px;border:1px solid var(--line);border-radius:7px;padding:4px 8px;font-size:13px}

.on-prevhead{font-size:13.5px;margin-bottom:11px;line-height:1.5}
.on-prevhead b{font-weight:500}
.prev{font-size:13px;padding:7px 11px;background:var(--card);border-radius:9px;margin-bottom:6px}
.prev.muted{color:var(--grey);background:none;padding-left:0}

.seg2{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.seg2 button{border:1.5px solid var(--line);background:#fff;border-radius:9px;padding:6px 12px;font-size:12px;color:var(--grey);cursor:pointer}
.seg2 button.on{border-color:var(--green);background:var(--green);color:var(--cream)}
.pn-block{padding:11px 0;border-bottom:1px solid var(--line)}
.pn-block:last-child{border-bottom:none}
.pn-top{display:flex;gap:12px;align-items:center;flex-wrap:wrap;cursor:pointer}
.pn-top b{font-size:14px;font-weight:500}
.pn-top small{font-size:12px;color:var(--grey)}
.pn-cnt{margin-left:auto;display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.cbadge{font-size:11px;border-radius:7px;padding:2px 9px;background:rgba(39,65,56,.09);color:var(--green)}
.cbadge.zero{background:var(--sand);color:var(--terra-deep)}
.cbadge.auto{background:var(--card);color:var(--grey)}
.pn-list{margin-top:9px;padding-left:2px}
.pn-item{display:flex;gap:11px;font-size:13px;padding:7px 0;border-bottom:1px solid var(--line);align-items:baseline}
.pn-item:last-child{border-bottom:none}
.pn-item .d{width:64px;flex:none;color:var(--grey);font-size:12px}
.pn-item .k{width:92px;flex:none;color:var(--green-2)}
.pn-item .x2{flex:1;min-width:0;color:var(--ink)}

/* ── История очков (выписка) + карточка сквозного счётчика — ТЗ «сквозной счётчик» §5–6.
   .ptslink — кликабельный счётчик на тёмной карточке «Моего дня»; .md-markrow — метки скользящей
   сотни под планкой; .lday/.lrow/.lt/.lx/.ln/.lrow.ms/.lgsub/.lfoot — модалка истории (перенос из
   прототипа_16, --tint1→светло-зелёная плашка рубежа). ── */
.ptslink{cursor:pointer}
.card.dark .ptslink small{border-bottom:1px dotted rgba(246,245,242,.5);padding-bottom:1px}
.md-markrow{display:flex;justify-content:space-between;font-size:11.5px;opacity:.75;margin-top:6px}
.lgsub{font-size:13px;color:var(--grey);margin-bottom:4px}
.lday{display:flex;align-items:baseline;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--grey);margin:14px 0 4px}
.lday b{margin-left:auto;font-weight:500;color:var(--green);font-size:11.5px;text-transform:none;letter-spacing:0}
.lrow{display:flex;gap:10px;align-items:baseline;font-size:13px;padding:6px 0;border-bottom:1px solid var(--line)}
.lrow:last-child{border-bottom:none}
.lrow .lt{width:46px;flex:none;font-size:12px;color:var(--grey)}
.lrow .lx{flex:1;min-width:0}
.lrow .ln{flex:none;color:var(--green);font-weight:500}
.lrow .lrun{flex:none;width:58px;text-align:right;color:var(--grey);font-size:12px} /* «стало N» — сквозной счётчик после начисления (правка 30.07 §10) */
.lrow.ms{background:rgba(39,65,56,.07);border-radius:9px;padding:8px 11px;margin:5px 0;border-bottom:none;color:var(--green);font-size:12.5px}
.lfoot{font-size:12px;color:var(--grey);margin-top:16px;line-height:1.5}
.lfoot b{color:var(--ink);font-weight:500}

/* ── регламент: карточка обычной задачи в стиле раздела «Задачи» прототипа ── */
.rtc{background:#fff;border-radius:14px;padding:14px 16px;margin-bottom:10px;border-left:3px solid var(--grey)}
.rtc.rt-crosssell{border-left-color:#8C9497}
.rtc.rt-cash{border-left-color:#5B7FA6}
.rtc.rt-bot{border-left-color:#B0473A}
.rtc.rt-next{border-left-color:#274138}
.rtc.rt-fillform{border-left-color:var(--purple)}
.rtc-top{display:flex;gap:9px;align-items:baseline;flex-wrap:wrap}
.rtc-top b{font-size:14.5px;font-weight:500}
.rtc-flag{font-size:10px;text-transform:uppercase;letter-spacing:.04em;border-radius:6px;padding:2px 8px;flex:none}
.rtc-flag.ok{background:var(--card);color:var(--grey)}
.rtc-flag.below{background:var(--beige);color:var(--terra-deep)}
.rtc-flag.nogoal{background:var(--sand);color:var(--green)}
.rtc-w{margin-left:auto;font-size:12px;color:var(--green);white-space:nowrap}
.rtc-open{font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--green);border:1px solid var(--line);background:#fff;border-radius:8px;padding:4px 10px;flex:none}
.rtc-open:hover{background:var(--card)}
.rtc-meta{font-size:12px;color:var(--grey);margin-top:6px}
.rtc-body{margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}
.rtc-body .tx{font-size:13.5px;color:var(--ink);margin-top:2px}
.rtc-edit label.rep-head{display:block;margin-top:12px;margin-bottom:0}
.rtc-edit input,.rtc-edit textarea,.rtc-edit select{margin-top:5px}
.rtc-edit textarea{min-height:52px;resize:vertical}
.rtc-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:14px}
/* серая отбивка между блоками карточки задачи: описание (видно админам) · подсказки отметки ·
   технический блок (только владелец). Та же линия, что делит шапку и тело карточки. */
.rtc-sep{border-top:1px solid var(--line);margin:14px 0 12px}
/* подсказки причин — не кнопки, а показ: вид чипа админа, но без hover и курсора */
.rtc-chips{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}
.rtc-chip{border:1px solid var(--line);border-radius:8px;padding:3px 9px;font-size:11px;color:var(--grey);background:var(--cream)}
.rtc-chip.circ{background:var(--beige);border-color:var(--sand);color:var(--green)}

/* ── волны (задача 11): селектор волн + текст механики разбора на снимке волны ── */
.wavesel{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
.wsel{background:var(--card);border:none;border-radius:12px;padding:8px 14px;font:inherit;color:var(--ink);cursor:pointer}
.wsel.on{background:var(--green);color:#fff}
pre.rules{white-space:pre-wrap;font:inherit;background:var(--card);border-radius:12px;padding:12px 14px;margin-top:8px}

/* ═══ ПРЕМИЯ ЗА ВОЗВРАТ в раздаче (2026-08-04) — отдельная строка под «Задача»,
   тот же ритм, что и .rz-taskrow; кнопка в фирменных скобках. */
.rz-bonusrow{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:8px}
.rz-bonusrow .slab{font-size:12px;color:var(--grey)}
.rz-bonus{padding:8px 12px;font-size:13px;border:1px solid var(--line);border-radius:10px;
  background:var(--beige);color:var(--grey);cursor:pointer;font-family:inherit}
.rz-bonus:hover:not(:disabled){border-color:var(--terra);color:var(--green)}
.rz-bonus.on{background:var(--terra);border-color:var(--terra);color:#fff;font-weight:500}
.rz-bonus:disabled{opacity:.45;cursor:not-allowed}
.rz-bonus-flat{font-size:13px;color:var(--grey)}

/* ── услуги визита построчно (05.08.2026) ── */
.svcl{display:block;line-height:1.5}
.svctot{color:var(--ink);margin-top:1px}
.delr{font-style:normal;font-size:10.5px;line-height:1.35;display:inline-block;color:var(--err)}

/* ── плашка студий в раздаче (05.08.2026) ── */
.rz-studiobar{display:flex;gap:8px;flex-wrap:wrap}
.rz-sbtn{border:1px solid var(--line);background:#fff;color:var(--grey);border-radius:100px;
  padding:7px 15px;font:inherit;font-size:12.5px;letter-spacing:.02em;cursor:pointer}
.rz-sbtn:hover{color:var(--ink)}
.rz-sbtn.on{background:var(--green-2);border-color:var(--green-2);color:#fff}
/* название студии в шапке карточки — только когда показаны все студии сразу */
.rz-st{font-size:11.5px;color:var(--grey);border:1px solid var(--line);border-radius:100px;padding:1px 8px}

/* ── премии (владелец): блоки «администратор × неделя», прототип 23 ──
   Палитра прототипа: tint2→--sand, green2→--green-2 — реально использованы; фон блока
   литеральный #fff, --card (bg2 прототипа) сюда не пошёл.
   Единица экрана — блок, а не премия: наличные выдаются человеку разом за всю неделю. */
.pblock{background:#fff;border:1.5px solid var(--sand);border-radius:16px;padding:14px 16px;margin-bottom:12px}
.pblock.paid{border:1px solid var(--line);opacity:.62}
.pb-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:10px;border-bottom:1px solid var(--line)}
.pb-head b{font-size:15px;font-weight:500}
.pb-head .wk{font-size:12px;color:var(--grey)}
.pb-head .sum{margin-left:auto;font-size:16px;font-weight:500;color:var(--green);text-align:right}
.pb-head .sum .due{display:block;font-size:11px;font-weight:400;color:var(--grey)}
.pb-head .btn{width:auto;flex:0 0 auto;padding:7px 13px;font-size:12.5px}
.pb-paid{background:none;border:none;font:inherit;font-size:11.5px;color:var(--grey);padding:2px 0}
.pb-paid:hover{color:var(--terra-deep)}
.pb-paid:disabled,.pb-head .btn:disabled{opacity:.6;cursor:default}
.prow{display:flex;gap:10px;align-items:baseline;padding:9px 0;border-bottom:1px solid var(--line);font-size:13.5px}
.prow:last-child{border-bottom:none}
.prow.paid{opacity:.55}
.prow .pk{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;border-radius:6px;padding:2px 7px;flex:none}
.prow .pk.ret{background:var(--sand);color:var(--green)}
.prow .pk.pts{background:var(--terra);color:#fff}
.prow .pw{flex:1 1 auto;min-width:0}
.prow .dt{font-size:12px;color:var(--grey);display:block}
.prow .ps{flex:none;font-weight:500;white-space:nowrap}

/* плашка «CRM не отвечает» на «Сегодня»: данные из снимка, список может быть неполным */
.warnbar{margin:8px 0;padding:10px 12px;border-radius:8px;background:#F3E4DC;color:#7A3B22;font-size:14px}

/* ── владелец: экран «Награды» (каталог · заведение · выдача), задача 6 — перенос из
   milky-task-owner-prototype_30.html:655-704 дословно. Палитра: tint1→--beige, tint2→--sand,
   bg2→--card (тот же приём, что у соседних экранов, см. комментарий у .on-writerow выше).
   gfloat/gshine/gtwink уже объявлены (строки 365-367, подарок в ленте) — не дублируем: повторное
   объявление тихо переопределило бы первое. */
.awrow{display:flex; gap:18px; align-items:flex-start; padding:15px 0; border-bottom:1px solid var(--line);}
.awrow:last-child{border-bottom:none;}
.awgem{width:120px; flex:none; border-radius:15px; padding:14px 8px 12px; text-align:center;
  border:1px solid var(--line);
  background:
    radial-gradient(circle 1.4px at 20% 24%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.2px at 76% 20%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.4px at 68% 50%, #fff 92%, transparent 100%),
    radial-gradient(130% 95% at 50% 0%, #F3D3BD 0%, var(--beige) 52%, #fff 100%);}
.awgem{position:relative; overflow:hidden;}
.awgem::before{content:''; position:absolute; inset:0; pointer-events:none;
  background:
    radial-gradient(circle 1.8px at 24% 20%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.4px at 74% 32%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.8px at 82% 72%, #fff 92%, transparent 100%),
    radial-gradient(circle 1.3px at 16% 64%, #fff 92%, transparent 100%);
  animation:gtwink 2.6s ease-in-out infinite;}
.awgem::after{content:''; position:absolute; top:-25%; bottom:-25%; left:0; width:38px; pointer-events:none;
  background:linear-gradient(105deg, transparent, rgba(255,255,255,.8), transparent);
  transform:translateX(-160%) rotate(18deg); animation:gshine 4.6s ease-in-out infinite;}
.awgem .gg{width:46px; height:46px; margin:0 auto 8px; border-radius:50%; background:#fff;
  display:flex; align-items:center; justify-content:center; font-size:22px;
  box-shadow:0 6px 14px rgba(211,136,103,.35);}
.awgem .gg em{display:inline-block; font-style:normal; animation:gfloat 3.4s ease-in-out infinite;}
.awgem b{display:block; font-size:9.5px; font-weight:500; text-transform:uppercase; letter-spacing:.05em;}
.awbody{flex:1; min-width:0;}
.awbody .nm2{font-size:14.5px; font-weight:500;}
.awchips{display:flex; gap:6px; flex-wrap:wrap; margin-top:6px;}
.awchip{font-size:10.5px; text-transform:uppercase; letter-spacing:.04em; border-radius:6px; padding:3px 8px;
  background:var(--card); color:var(--grey);}
.awchip.auto{background:var(--sand); color:var(--green);}
.awchip.man{background:var(--terra); color:#fff;}
.awnote{font-size:12.5px; color:var(--grey); margin-top:6px;}
.awgiven{font-size:12px; color:var(--grey); margin-top:9px;}
.awgiven b{font-weight:500; color:var(--ink);}
.awgiven .nlink{color:var(--green); cursor:pointer; text-decoration:underline dotted; text-underline-offset:2px;}
.sent-ok{font-size:11px; color:var(--grey);}
.sent-no{font-size:11px; color:var(--terra);}
.awpick{display:flex; gap:6px; flex-wrap:wrap; margin-top:9px;}
.awnews{margin-top:10px; background:var(--card); border-radius:11px; padding:12px 14px;}
.awnews textarea{width:100%; border:1px solid var(--line); border-radius:10px; padding:9px 12px;
  font:inherit; font-size:13px; min-height:64px; resize:vertical; background:#fff; box-sizing:border-box;}
.awnews input[data-awtitle]{width:100%; border:1px solid var(--line); border-radius:10px; padding:9px 12px;
  font:inherit; font-size:13px; background:#fff; box-sizing:border-box; margin-bottom:8px;}
.awnew{margin-top:4px; background:var(--card); border-radius:12px; padding:14px 16px;}
.awnew .row2{display:flex; gap:10px; flex-wrap:wrap; margin-top:9px;}

/* Онбординг (2026-08-15): строка сообщения в карточке владельца. Своя, а не .rrow —
   обработчик правил (onewsClick) ищет именно .rrow и принял бы чужую строку за правило. */
.onbrow{display:flex;gap:14px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--line)}
.onbrow:last-child{border-bottom:none}
.onbrow.off{opacity:.5}
.onbmain{flex:1;min-width:0}
.onbtop{display:flex;gap:9px;align-items:baseline;flex-wrap:wrap}
.onbtop b{font-size:14px;font-weight:500}
.onbnum{flex:none;opacity:.5;font-variant-numeric:tabular-nums}
.onbedit{margin-top:8px}
.onbedit .line-input{margin-bottom:6px}

/* ═══ СТАТИСТИКА ВЛАДЕЛЬЦА (2026-08-19) — порт прототипа 35_3 #stats.
   Префикс st- у всего, чьё имя в проекте занято другим смыслом: .stat — статы «Прогресса»
   (структура b+span), .bar — прогресс с жемчужиной-декором, .hrow — строки истории визитов
   клиента, .chk — строка-чекбокс. Без префикса взяты .chip/.seg2/.card.dark/.wsel/.mini/table:
   они в проекте уже есть и совпадают с прототипом.
   В самом прототипе .hrow объявлен дважды (483 и 757), вторая объявка затирает первую —
   перенесена только та, что реально действует на экране статистики. ── */

/* цвета категорий задач — в палитре проекта их не было */
:root{--t-cash:#7E93B8; --t-book:#9AA0A3; --t-bot:#C4736B; --t-goods:#C9A961}

.st-chiprow{display:flex;gap:7px;overflow-x:auto;padding-bottom:4px;margin-bottom:14px}
.st-chiprow .chip{white-space:nowrap;flex:none;background:#fff;cursor:pointer}
/* .chip.on объявлен ВЫШЕ по файлу и с той же специфичностью — без этой строки белый фон
   перебивал бы его и активный чип оказывался бы кремовым текстом по белому, то есть невидимым. */
.st-chiprow .chip.on{background:var(--green);border-color:var(--green);color:var(--cream)}

.st-wnav{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:7px}
.st-wnav b{font-size:15px;font-weight:500}
.st-warr{padding:1px 11px;font-size:17px;line-height:1.3;background:rgba(246,245,242,.16);color:var(--cream)}
.st-warr:hover:not(:disabled){background:rgba(246,245,242,.28)}
.st-warr:disabled{opacity:.35;cursor:default}
.st-wday{margin-left:auto;font-size:12.5px;opacity:.85}
.st-bar{height:9px;background:rgba(246,245,242,.18);border-radius:99px;overflow:hidden}
.st-bar i{display:block;height:100%;background:var(--sand);border-radius:99px;transition:width .6s var(--ease)}
.st-stat{display:flex;gap:22px;flex-wrap:wrap;margin-top:16px}
.st-stat div b{font-size:24px;font-weight:500;display:block;line-height:1.2}
.st-stat div small{font-size:11.5px;color:rgba(246,245,242,.6);text-transform:uppercase}
.st-stat-light div small{color:var(--grey)}
.st-dnote{font-size:12.5px;opacity:.7;margin-top:10px}

.st-tblhead{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:2px}
/* Экран владельца живёт и на телефоне: до 900px body — колонка 480px, а в таблице семь колонок.
   Прокрутка внутри карточки, а не расползание страницы вбок. Класс висит на самом #stTbl. */
.st-tblwrap{overflow-x:auto}
.st-tblwrap table{min-width:560px}
.st-who small{display:block;font-size:11.5px;color:var(--grey);font-weight:460}
.st-mainrow td{border-bottom:none !important}
/* Детали строки (прототип 35_5): категория — не плитка, а раскрывающаяся строка со своими
   причинами. Раньше на все категории было две общие кнопки, и «сильный негатив по боту»
   тонул среди «не актуально по оплате». Теперь у каждой категории своя раскрывашка. */
.st-subrow td{background:var(--card);border-radius:14px;padding:14px !important}
.st-ccats{display:flex;flex-direction:column;gap:7px}
.st-ccat{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;transition:border-color var(--dur)}
.st-ccat.open{border-color:var(--sand)}
.st-cchead{display:flex;align-items:center;gap:9px;width:100%;text-align:left;padding:11px 12px;background:none;border:0}
.st-cchead .st-ccdot{width:9px;height:9px;border-radius:3px;flex:none}
.st-cchead b{font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.02em;flex:none}
.st-cchead .st-ccw{font-size:11px;color:var(--green);background:var(--beige);border-radius:6px;padding:2px 7px;white-space:nowrap;flex:none}
.st-cchead .st-ccnums{font-size:13.5px;margin-left:auto;white-space:nowrap;font-variant-numeric:tabular-nums;flex:none}
.st-cchead .st-ccnums b{font-size:13.5px;text-transform:none;letter-spacing:0}
/* Полоска отдаёт слабину строке: на 480px ширины хватает впритык, фиксированные 52px её рвут. */
.st-cchead .st-ccbar{flex:1 1 32px;min-width:26px;max-width:52px;height:6px;border-radius:99px;background:var(--card);overflow:hidden}
.st-cchead .st-ccbar i{display:block;height:100%;border-radius:99px}
.st-cchead .st-ccpct{font-size:12px;color:var(--grey);width:32px;text-align:right;font-variant-numeric:tabular-nums;flex:none}
.st-cchead .st-ccv{color:var(--tint3);font-size:14px;width:22px;height:22px;border:1px solid var(--line);border-radius:50%;display:flex;align-items:center;justify-content:center;flex:none;transition:all var(--dur);line-height:1}
.st-ccat.open .st-ccv{background:var(--green);border-color:var(--green);color:var(--cream)}
.st-ccbody{padding:11px 12px 13px;border-top:1px solid var(--card)}
.st-cats{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.st-cd{background:#fff;border:1px solid var(--line);border-left:3px solid var(--line);border-radius:11px;padding:9px 13px 8px;font-size:12.5px;min-width:130px}
.st-cd b{display:block;font-weight:500;font-size:14.5px;font-variant-numeric:tabular-nums}
.st-cd small{font-size:10.5px;color:var(--grey);text-transform:uppercase;letter-spacing:.02em}
.st-rline{display:grid;grid-template-columns:130px 1fr;gap:6px 10px;align-items:baseline;margin-bottom:9px}
.st-rline:last-of-type{margin-bottom:0}
.st-rtags{display:flex;gap:6px;flex-wrap:wrap}
.st-rcat{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--grey)}
.st-rcat b{color:var(--ink);font-weight:500}
.st-rtag{font-size:12px;background:var(--cream);border:1px solid var(--card);border-radius:8px;padding:3px 9px;white-space:nowrap;font-variant-numeric:tabular-nums}
.st-rtag.circ{background:var(--beige);border-color:var(--sand);color:var(--green)}
.st-rtag.mute{color:var(--tint3);background:transparent;border-color:transparent}
.st-rnote{font-size:12px;color:var(--grey);margin-top:10px;line-height:1.55}

/* Панель «как считаем чистую прибыль» — внутри тёмной карточки волны, поэтому все цвета
   заданы прозрачностями по кремовому, а не переменными светлой темы. */
.st-ghostdark{margin-top:16px;background:transparent;border:1px solid rgba(246,245,242,.28);color:var(--cream);text-transform:uppercase;font-size:11px;letter-spacing:.02em;padding:6px 12px}
.st-ghostdark:hover{background:rgba(246,245,242,.12)}
.st-profbox{margin-top:14px;background:rgba(0,0,0,.14);border:1px solid rgba(246,245,242,.12);border-radius:13px;padding:16px 14px}
.st-pttl{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:rgba(246,245,242,.55);margin-bottom:11px}
.st-pttl b{font-weight:460;color:var(--sand);margin-right:5px;letter-spacing:0}
.st-ptabwrap{overflow-x:auto}
.st-ptab{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}
.st-ptab th{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:rgba(246,245,242,.4);text-align:left;padding-bottom:7px;font-weight:460}
.st-ptab td{padding:8px 6px 8px 0;border-top:1px solid rgba(246,245,242,.1);vertical-align:top}
.st-ptab td.num,.st-ptab th.num{text-align:right;white-space:nowrap;padding-left:12px}
.st-ptab td:first-child{white-space:nowrap}
.st-ptab td b{font-weight:500;color:var(--sand)}
.st-pcat{font-size:11px;text-transform:uppercase;letter-spacing:.03em;border-left:3px solid var(--line);padding-left:9px;display:inline-block}
.st-pwarn{display:block;font-size:11px;color:rgba(246,245,242,.5);white-space:normal;padding-left:12px;margin-top:3px}
.st-ptab .st-psum td{border-top:1px solid rgba(246,245,242,.35);padding-top:10px;font-size:11px;text-transform:uppercase;letter-spacing:.03em}
.st-ptab .st-psum b{font-size:14px;letter-spacing:0}
.st-pflow{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.st-pflow>div b{display:block;font-size:19px;font-weight:500;line-height:1.25;font-variant-numeric:tabular-nums}
.st-pflow>div small{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:rgba(246,245,242,.5)}
.st-pflow>span{color:rgba(246,245,242,.35);font-size:17px;font-weight:300}
.st-pflow .st-pres{background:rgba(233,210,189,.14);border:1px solid rgba(233,210,189,.3);border-radius:11px;padding:8px 14px}
.st-pflow .st-pres b{color:var(--sand)}
.st-pnote{font-size:11.5px;color:rgba(246,245,242,.5);margin-top:15px;line-height:1.6}
/* Таблица расчёта на телефоне: четыре колонки в ~290px не помещаются, а горизонтальная
   прокрутка прячет как раз главное — «итого». Поэтому не скроллим, а раскладываем строку
   в две: сверху категория и её рубли, снизу мелким — из чего они сложились. */
@media (max-width:560px){
  .st-ptab tr:first-child{display:none}
  .st-ptab tr{display:grid;grid-template-columns:1fr auto;gap:1px 10px;padding:9px 0;border-top:1px solid rgba(246,245,242,.1)}
  .st-ptab td,.st-ptab td:first-child{display:block;border:0;padding:0;white-space:normal}
  .st-ptab td:nth-child(1){grid-area:1/1}
  .st-ptab td:nth-child(4){grid-area:1/2;text-align:right}
  .st-ptab td:nth-child(2),.st-ptab td:nth-child(3){font-size:11.5px;color:rgba(246,245,242,.5)}
  .st-ptab td:nth-child(2){grid-area:2/1;text-align:left}
  .st-ptab td:nth-child(3){grid-area:2/2;text-align:right}
  .st-ptab td:nth-child(2):not(:empty)::after{content:' рез.'}
  /* Итоговая строка проще остальных: две ячейки по краям, без сетки под мелкий второй ряд. */
  .st-ptab .st-psum{display:flex;justify-content:space-between;align-items:baseline;gap:10px;
    border-top:1px solid rgba(246,245,242,.35);margin-top:3px;padding-top:11px}
  .st-ptab .st-psum td{padding:0;border:0}
  .st-ptab .st-psum td:nth-child(2),.st-ptab .st-psum td:nth-child(3){display:none}
}

.st-hday{display:flex;justify-content:space-between;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--grey);margin:14px 0 6px}
.st-hrow{display:flex;gap:10px;align-items:center;padding:7px 11px;border-left:3px solid var(--line);background:var(--card);border-radius:9px;margin-bottom:4px;font-size:13px}
.st-hrow .st-hp{margin-left:auto;color:var(--green-2);white-space:nowrap;font-size:12.5px}
.st-hrow .st-hb{width:88px;text-align:right;color:var(--grey);font-size:12px;flex:none}
/* строка рубежа в «истории шагов». Нижняя рамка досталась ей от .lvl «Закрыть день» —
   при сносе той механики (21.08.2026) перенесена сюда, чтобы вид не поехал. */
.st-hrow.mstone{background:var(--beige);border-left-color:var(--sand);font-weight:500;border-bottom:1px solid var(--line)}
.st-hrow.no{background:#fff;border:1px solid var(--line);border-left-width:3px}
.st-hwhy{font-size:12px;color:var(--grey);background:var(--cream);border-radius:7px;padding:2px 8px;margin-left:6px}
.st-hwhy.circ{background:var(--beige);color:var(--green)}

/* ── Пицца-день и активность дня (19.08.2026, прототип 36_4) ──
   Пицца — заглушка общей месячной цели сети. Картинка вынесена в img/pizza-day.webp, а не
   зашита data-URI, как в прототипе: 40 КБ base64 в index.html приезжали бы на каждую загрузку
   (index.html длинным кэшем не отдаётся, в отличие от app.js/app.css с ?v=). */
.pd-tag{text-transform:none;letter-spacing:0;background:var(--beige);color:var(--green);border-radius:6px;padding:2px 8px;margin-left:6px;font-size:11px}
.pd-body{display:flex;flex-direction:column;align-items:center;text-align:center;padding:14px 10px 8px}
.pd-art{margin-bottom:10px;overflow:visible;max-width:100%;height:auto}
.pd-soon{font-size:14px;font-weight:500}
/* Активность: десять точек, залито столько, сколько баллов; цвет — по порогу (app.js, actTier) */
.av-list{display:flex;flex-direction:column;gap:10px}
.av-row{display:flex;align-items:center;gap:12px;font-size:13px}
.av-row b{font-weight:460;flex:1;min-width:0}
.av-dots{display:flex;gap:4px;flex:none}
.av-dot{width:8px;height:8px;border-radius:50%;background:var(--card)}
.av-dots[data-t="lo"] .av-dot.on{background:var(--t-bot)}
.av-dots[data-t="mid"] .av-dot.on{background:var(--t-goods)}
.av-dots[data-t="hi"] .av-dot.on{background:var(--green)}
.av-row .av-dash{color:var(--grey);font-size:12px;flex:none}

/* ── Анкеты у владельца (порт прототипа 35_6 #forms) ─────────────────────────────────────
   Спека: docs/superpowers/specs/2026-08-21-анкеты-владельца-design.md
   Терракота на этом экране одна и только здесь: риск для отзыва — единственное место,
   где владельца надо остановить взглядом. Остальное живёт на классах «Статистики». */
.fm-risk{border-left:3px solid var(--terra);background:var(--card);border-radius:11px;
  padding:10px 12px;margin-bottom:6px;font-size:13.5px}
.fm-risk small{display:block;margin-top:4px;font-size:11.5px;color:var(--grey)}
.fm-risk b{font-weight:500;color:var(--terra-deep)}
/* «Голос Клиенток»: ответы стоят списком без карточек — цитата важнее рамки вокруг неё. */
.fm-vsec{margin-bottom:18px}
.fm-vsec:last-child{margin-bottom:0}
.fm-vsec>b{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.07em;
  color:var(--grey);margin-bottom:8px;font-weight:500}
.fm-vq{border-top:1px solid var(--line);padding:9px 0;font-size:13.5px}
.fm-vsec .fm-vq:first-of-type{border-top:none}
.fm-vwho{display:block;margin-top:3px;font-size:11.5px;color:var(--grey)}

/* Этап «Проверка» (2026-08-24): плашка «на проверке», карточка непройденных, пульс крона.
   Цвета — уже живущие в этом файле (#B0473A красный проекта, #8C9497 приглушённый),
   новых оттенков не вводим. */
.chk-pending{font-size:12px;color:#8C9497;margin-left:8px}
.vr.chk-fail{opacity:.85;border-left:3px solid #B0473A}
.chk-why{font-size:12px;color:#B0473A}
.sub.warn{color:#B0473A}
/* Находка ревью 28.08.2026: остаток очков в карточке непройденной проверки — НЕ .w (тот класс
   зелёный, как у обычного начисления, см. .vr .w) — иначе «осталось» читается как «начислили». */
.chk-rest{font-size:11.5px;color:#8C9497;white-space:nowrap;flex:none}

/* ── кешбэк (владелец): порт таблицы из Downloads/owner.html #cashback.
   Префикс cb-: имена прототипа (.stat, .win, .flag) заняты в проекте другим смыслом —
   тот же приём, что у порта экрана возвратов (rt-, выше по файлу). ── */
.cb-stat{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:14px}
.cb-stat div b{display:block;font-size:22px;font-weight:500;font-variant-numeric:tabular-nums}
.cb-stat div small{font-size:10px;text-transform:uppercase;letter-spacing:.1em;opacity:.6}
.cb-t{width:100%;border-collapse:collapse;font-size:13px}
.cb-t th{text-align:left;font-size:10px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--grey);font-weight:500;padding:0 10px 8px}
.cb-t td{padding:10px;border-top:1px solid var(--sand);vertical-align:top}
.cb-t tr.cb-open td{background:var(--card)}
.cb-t .cb-num{text-align:right;font-variant-numeric:tabular-nums}
.cb-row{cursor:pointer}
.cb-tail{color:var(--grey);font-size:11px}
.cb-tag{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11px;white-space:nowrap}
/* Цвета — готовые токены палитры, а не новые оттенки: та же пара ok/порог, что у .tflag
   (app.css:812-813) и .rt-win.soon (app.css:760). */
.cb-tag.ok{background:rgba(39,65,56,.09);color:var(--green)}
.cb-tag.wait{background:var(--beige);color:var(--green-2)}
.cb-tag.warn{background:var(--sand);color:var(--terra-deep)}
.cb-tag.off{background:var(--card);color:var(--grey)}
/* Текст .eyebrow/.note внутри тёмной карточки статистики — на .card.dark они наследуют
   var(--grey) (#8C9497 на #274138 — контраст 3.57:1, ниже нормы WCAG AA 4.5:1). Оверрайд по
   образцу .card.dark h3 (app.css:381): в этой карточке живёт #cbCron — предупреждение про
   застрявший крон, его обязаны прочитать. Селектор задевает только #scr-cashback: больше
   нигде .eyebrow/.note внутри .card.dark в разметке нет. */
.card.dark .eyebrow,.card.dark .note{color:rgba(246,245,242,.6)}
/* Только два числовых поля. Строки-чекбоксы вынесены наружу, в .addrow, и поэтому здесь
   больше нет ни оверрайда подписи, ни guard-а :not(.chk): подписи «процент» и «срок, дней»
   берут общий стиль label (app.css:64) — тот же, что «Роли» и «Студия» в карточке сотрудника.
   Своя типографика подписи была отклонением от языка форм: 11px и .06em против 10px и .12em,
   без веса и полей. Убран и align-items:flex-end — выравнивать по низу стало нечего. */
.cb-set{display:flex;flex-wrap:wrap;gap:12px}
.cb-set input[type=number]{width:110px}
.cb-set textarea{width:100%;min-height:70px}
