vizelberg-mockups/app_admin.html

627 lines
55 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>VIZELBERG — Кабинет администратора</title>
<style>
:root{
--sage:#7C9070; --herbal:#2F4A3C; --cream:#F5EFE6;
--terra:#E8A87C; --gold:#C9A24B; --ink:#23302a;
--line:rgba(47,74,60,.12); --soft:#8a978d; --bg:#f3eee5;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
body{font-family:'Segoe UI',-apple-system,Roboto,sans-serif;color:var(--ink);background:var(--bg);height:100vh;overflow:hidden}
.ic{width:20px;height:20px;stroke:currentColor;stroke-width:1.7;fill:none;stroke-linecap:round;stroke-linejoin:round;display:block;flex:none}
.ic-sm{width:15px;height:15px}.ic-lg{width:26px;height:26px}
.app{display:grid;grid-template-columns:240px 1fr;height:100vh}
/* sidebar */
.side{background:var(--herbal);color:var(--cream);display:flex;flex-direction:column;padding:20px 14px}
.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 20px}
.brand .lg{width:34px;height:34px;border-radius:11px;background:var(--gold);color:var(--herbal);display:flex;align-items:center;justify-content:center}
.brand .nm{font-weight:600;font-size:16px}
.brand .sb{font-size:9px;letter-spacing:2px;color:var(--sage);text-transform:uppercase}
.nav{display:flex;flex-direction:column;gap:3px;flex:1}
.nav a{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:11px;color:rgba(245,239,230,.72);cursor:pointer;font-size:13.5px;transition:.12s}
.nav a:hover{background:rgba(255,255,255,.06);color:#fff}
.nav a.on{background:var(--sage);color:#fff}
.nav .badge{margin-left:auto;background:var(--gold);color:var(--herbal);font-size:10px;font-weight:700;border-radius:10px;padding:1px 7px}
.side .me{display:flex;align-items:center;gap:10px;padding:10px 8px;border-top:1px solid rgba(255,255,255,.1);margin-top:10px}
.side .me .av{width:34px;height:34px;border-radius:50%;background:var(--sage);display:flex;align-items:center;justify-content:center}
.side .me .nm{font-size:13px}.side .me .rl{font-size:10px;color:var(--sage)}
/* main */
.main{display:flex;flex-direction:column;overflow:hidden}
.topbar{height:62px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:16px;padding:0 26px;flex:none}
.topbar h1{font-family:Georgia,serif;font-size:20px;color:var(--herbal)}
.search{margin-left:auto;display:flex;align-items:center;gap:8px;background:var(--bg);border-radius:11px;padding:8px 13px;width:260px;color:var(--soft)}
.search input{border:none;background:none;outline:none;font-family:inherit;font-size:13px;width:100%;color:var(--ink)}
.tb-ic{width:38px;height:38px;border-radius:11px;background:var(--bg);display:flex;align-items:center;justify-content:center;color:var(--herbal);cursor:pointer;position:relative}
.tb-ic .dot{position:absolute;top:8px;right:9px;width:7px;height:7px;border-radius:50%;background:var(--gold)}
.view{flex:1;overflow-y:auto;padding:26px}
.view{display:none}.view.on{display:block;animation:fade .2s}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
/* generic */
.h2{font-family:Georgia,serif;font-size:18px;color:var(--herbal);margin:4px 0 14px}
.muted{color:var(--soft);font-size:12px}
.card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:18px}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.grid2{display:grid;grid-template-columns:1.4fr 1fr;gap:16px}
/* KPI */
.kpi{display:flex;flex-direction:column;gap:8px}
.kpi .ico{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#fff}
.kpi .val{font-size:26px;font-weight:700;color:var(--herbal);font-family:Georgia,serif}
.kpi .lbl{font-size:12px;color:var(--soft)}
.kpi .tr{font-size:11px;font-weight:600}
.up{color:var(--sage)}.down{color:#c0584f}
/* table */
table{width:100%;border-collapse:collapse}
th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--soft);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--line)}
td{padding:12px;border-bottom:1px solid var(--line);font-size:13px}
tr.clk{cursor:pointer;transition:.1s}
tr.clk:hover td{background:var(--cream)}
.who{display:flex;align-items:center;gap:10px}
.who .av{width:34px;height:34px;border-radius:50%;background:var(--sage);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex:none}
.tag{display:inline-flex;align-items:center;gap:5px;border-radius:20px;padding:3px 10px;font-size:11px;font-weight:600}
.t-act{background:rgba(124,144,112,.18);color:#4d6249}
.t-warn{background:rgba(201,162,75,.2);color:#8a6d1f}
.t-end{background:rgba(192,88,79,.16);color:#a8453c}
.mini-bar{height:7px;width:90px;background:#e9e2d6;border-radius:5px;overflow:hidden;display:inline-block;vertical-align:middle}
.mini-bar i{display:block;height:7px;background:var(--sage);border-radius:5px}
.btn{background:var(--herbal);color:#fff;border:none;font-family:inherit;border-radius:11px;padding:10px 16px;font-size:13px;font-weight:600;display:inline-flex;align-items:center;gap:8px;cursor:pointer;transition:.12s}
.btn:active{transform:scale(.98)}
.btn.gold{background:var(--gold);color:#3a2e10}
.btn.outline{background:transparent;color:var(--herbal);border:1.5px solid var(--herbal)}
.btn.sm{padding:7px 12px;font-size:12px}
.head-row{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.head-row .sp{margin-left:auto;display:flex;gap:10px}
/* client detail */
.back{display:inline-flex;align-items:center;gap:6px;color:var(--herbal);cursor:pointer;font-size:13px;margin-bottom:12px}
.back svg{transform:rotate(180deg)}
.prof{display:flex;align-items:center;gap:16px}
.prof .av{width:64px;height:64px;border-radius:50%;background:var(--sage);color:#fff;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:600}
.prof .nm{font-size:20px;font-weight:600;color:var(--herbal)}
.tabs{display:flex;gap:6px;margin:18px 0;border-bottom:1px solid var(--line)}
.tabs a{padding:9px 14px;font-size:13px;color:var(--soft);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs a.on{color:var(--herbal);border-color:var(--gold);font-weight:600}
.ctab{display:none}.ctab.on{display:block;animation:fade .2s}
.field{display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px dashed var(--line);font-size:13px}
.field b{color:var(--herbal)}
/* menu builder */
.mb{display:grid;grid-template-columns:260px 1fr;gap:16px}
.dish{display:flex;align-items:center;gap:10px;padding:9px;border:1px solid var(--line);border-radius:11px;margin-bottom:8px;cursor:grab;font-size:12.5px;background:#fff}
.dish .ico{color:var(--sage)}
.day{border:1px solid var(--line);border-radius:12px;padding:10px;background:#fff}
.day h4{font-size:12px;color:var(--herbal);margin-bottom:8px;display:flex;align-items:center;gap:6px}
.slot{font-size:11.5px;color:var(--soft);padding:7px 9px;border:1px dashed var(--line);border-radius:9px;margin-bottom:6px}
.slot b{color:var(--ink);font-weight:600;display:block}
/* checkins */
.ci{display:flex;align-items:center;gap:12px;padding:13px;border:1px solid var(--line);border-radius:13px;margin-bottom:10px;background:#fff}
.ci.flag{border-color:rgba(201,162,75,.5);background:rgba(201,162,75,.06)}
.ci .av{width:38px;height:38px;border-radius:50%;background:var(--sage);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex:none}
/* messages */
.msglist{display:flex;flex-direction:column;gap:2px}
.mrow{display:flex;align-items:center;gap:12px;padding:12px;border-radius:12px;cursor:pointer}
.mrow:hover{background:#fff}
.mrow .av{width:40px;height:40px;border-radius:50%;background:var(--sage);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;flex:none}
.mrow .unread{width:9px;height:9px;border-radius:50%;background:var(--gold);margin-left:auto;flex:none}
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--herbal);color:#fff;padding:12px 20px;border-radius:13px;font-size:13px;opacity:0;pointer-events:none;transition:.3s;z-index:50;display:flex;align-items:center;gap:9px}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.legend-note{margin-top:8px;color:var(--soft);font-size:12px}
</style>
</head>
<body>
<style>
.seg{display:inline-flex;background:#fff;border:1px solid var(--line);border-radius:11px;padding:3px;gap:2px}
.seg a{padding:7px 14px;font-size:12.5px;border-radius:8px;cursor:pointer;color:var(--soft)}
.seg a.on{background:var(--herbal);color:#fff}
.chb{font-size:9px;font-weight:700;border-radius:5px;padding:2px 6px;color:#fff}
.chb.tg{background:#2AABEE}.chb.max{background:#6d4aff}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:10px}
.cal .day{background:#fff;border:1px solid var(--line);border-radius:13px;padding:9px;min-height:160px;display:flex;flex-direction:column;gap:7px}
.cal .day .dn{font-size:11px;color:var(--soft);display:flex;justify-content:space-between;align-items:center}
.cal .day .dn b{color:var(--herbal)}
.cal .day .add{color:var(--soft);font-size:11px;border:1px dashed var(--line);border-radius:8px;padding:7px;text-align:center;cursor:pointer;transition:.12s}
.cal .day .add:hover{border-color:var(--sage);color:var(--sage)}
.pchip{border-radius:9px;padding:7px 8px;font-size:10.5px;color:#fff;cursor:pointer;line-height:1.35}
.pchip .chs{display:flex;gap:4px;margin-top:5px}
.pchip .chs .chb{font-size:8px;padding:1px 4px}
.rub-bowl{background:#2F4A3C}.rub-fire{background:#7C9070}.rub-rec{background:#C9A24B;color:#3a2e10}.rub-air{background:#3c5b4a}
.editor{display:grid;grid-template-columns:1fr 350px;gap:20px;align-items:start}
.lbl2{font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--soft);margin:15px 0 7px;display:block}
.lbl2:first-child{margin-top:0}
.inp{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-family:inherit;font-size:13px;outline:none;background:#fff;color:var(--ink)}
.inp:focus{border-color:var(--sage)}
textarea.inp{min-height:130px;resize:vertical;line-height:1.5}
.tplrow{display:flex;gap:8px;flex-wrap:wrap}
.tpl{width:70px;height:46px;border-radius:9px;cursor:pointer;border:2px solid transparent;display:flex;align-items:flex-end;padding:5px;font-size:8px;color:#fff}
.tpl.on{border-color:var(--gold);box-shadow:0 0 0 2px rgba(201,162,75,.25)}
.rubpill{cursor:pointer;border:1px solid var(--line);border-radius:20px;padding:6px 13px;font-size:12px;color:var(--herbal)}
.rubpill.on{background:var(--herbal);color:#fff;border-color:var(--herbal)}
.chk{display:inline-flex;align-items:center;gap:7px;font-size:13px;margin-right:16px;cursor:pointer}
.prevCover{border-radius:10px;padding:14px;color:#fff;min-height:84px;display:flex;flex-direction:column;justify-content:space-between}
.prevCover .pl{font-size:10px;letter-spacing:2px;text-transform:uppercase;opacity:.85}
.prevCover .ph{font-family:Georgia,serif;font-size:15px;line-height:1.25}
</style>
<svg width="0" height="0" style="position:absolute" aria-hidden="true">
<symbol id="i-leaf" viewBox="0 0 24 24"><path d="M5 19C5 11 11 5 20 5c0 9-6 14-14 14z"/><path d="M5 19c4-1 7-4 9-8"/></symbol>
<symbol id="i-grid" viewBox="0 0 24 24"><rect x="4" y="4" width="7" height="7" rx="1.5"/><rect x="13" y="4" width="7" height="7" rx="1.5"/><rect x="4" y="13" width="7" height="7" rx="1.5"/><rect x="13" y="13" width="7" height="7" rx="1.5"/></symbol>
<symbol id="i-users" viewBox="0 0 24 24"><circle cx="9" cy="8" r="3"/><path d="M3 20c0-3.5 2.7-5 6-5s6 1.5 6 5"/><path d="M16 5.5a3 3 0 0 1 0 5.5M21 20c0-3-1.5-4.5-4-4.8"/></symbol>
<symbol id="i-bowl" viewBox="0 0 24 24"><path d="M3 11h18a9 9 0 0 1-18 0z"/><path d="M2 11h20"/><path d="M9 7c0-1.5 1-2 1-3M13 7c0-1.5 1-2 1-3"/></symbol>
<symbol id="i-check" viewBox="0 0 24 24"><path d="M5 12l4.5 4.5L19 7"/></symbol>
<symbol id="i-clip" viewBox="0 0 24 24"><rect x="6" y="4" width="12" height="17" rx="2"/><path d="M9 4h6v3H9zM9 11h6M9 15h4"/></symbol>
<symbol id="i-chat" viewBox="0 0 24 24"><path d="M5 5h14a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H10l-4 4v-4H5a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1z"/><path d="M8 9h8M8 12h5"/></symbol>
<symbol id="i-edit" viewBox="0 0 24 24"><path d="M5 19h14"/><path d="M14 5l5 5-9 9H5v-5z"/></symbol>
<symbol id="i-ruble" viewBox="0 0 24 24"><path d="M8 20V4h5a4 4 0 0 1 0 8H8"/><path d="M5 14h8M5 17h6"/></symbol>
<symbol id="i-trend" viewBox="0 0 24 24"><path d="M4 16l5-5 4 4 7-7"/><path d="M16 8h4v4"/></symbol>
<symbol id="i-gear" viewBox="0 0 24 24"><circle cx="12" cy="12" r="3.2"/><path d="M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1"/></symbol>
<symbol id="i-search" viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M20 20l-4-4"/></symbol>
<symbol id="i-bell" viewBox="0 0 24 24"><path d="M6 16V11a6 6 0 0 1 12 0v5l1.5 2H4.5z"/><path d="M10 20a2 2 0 0 0 4 0"/></symbol>
<symbol id="i-user" viewBox="0 0 24 24"><circle cx="12" cy="8" r="3.4"/><path d="M5.5 20c0-4 3-6 6.5-6s6.5 2 6.5 6"/></symbol>
<symbol id="i-arrow" viewBox="0 0 24 24"><path d="M5 12h13"/><path d="M12 6l6 6-6 6"/></symbol>
<symbol id="i-plus" viewBox="0 0 24 24"><path d="M12 5v14M5 12h14"/></symbol>
<symbol id="i-flag" viewBox="0 0 24 24"><path d="M6 21V4h12l-3 4 3 4H6"/></symbol>
<symbol id="i-spark" viewBox="0 0 24 24"><path d="M12 3l1.8 5.2L19 10l-5.2 1.8L12 17l-1.8-5.2L5 10l5.2-1.8z"/></symbol>
<symbol id="i-fire" viewBox="0 0 24 24"><path d="M12 3c1 3 4 4 4 8a4 4 0 0 1-8 0c0-1 .5-2 1-2.5C9 11 12 8 12 3z"/></symbol>
<symbol id="i-scale" viewBox="0 0 24 24"><circle cx="12" cy="13" r="8"/><path d="M12 13l4-4M12 5V3"/></symbol>
<symbol id="i-cal" viewBox="0 0 24 24"><rect x="4" y="5" width="16" height="15" rx="2"/><path d="M4 9h16M8 3v4M16 3v4"/></symbol>
<symbol id="i-clock" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8"/><path d="M12 8v4l3 2"/></symbol>
<symbol id="i-image" viewBox="0 0 24 24"><rect x="4" y="5" width="16" height="14" rx="2"/><circle cx="9" cy="10" r="1.6"/><path d="M5 17l4-4 4 3 3-3 3 3"/></symbol>
<symbol id="i-send" viewBox="0 0 24 24"><path d="M4 12l16-7-7 16-2-7-7-2z"/></symbol>
<symbol id="i-megaphone" viewBox="0 0 24 24"><path d="M4 10v4h3l9 5V5l-9 5z"/><path d="M19 9a4 4 0 0 1 0 6"/></symbol>
<symbol id="i-logout" viewBox="0 0 24 24"><path d="M14 4H6v16h8"/><path d="M10 12h10M17 9l3 3-3 3"/></symbol>
</svg>
<div class="app">
<!-- SIDEBAR -->
<aside class="side">
<div class="brand"><div class="lg"><svg class="ic ic-lg"><use href="#i-leaf"/></svg></div><div><div class="nm">vizelberg</div><div class="sb">admin</div></div></div>
<nav class="nav" id="nav">
<a class="on" data-v="dash"><svg class="ic"><use href="#i-grid"/></svg> Дашборд</a>
<a data-v="clients"><svg class="ic"><use href="#i-users"/></svg> Клиенты <span class="badge">42</span></a>
<a data-v="menu"><svg class="ic"><use href="#i-bowl"/></svg> Конструктор меню</a>
<a data-v="checkins"><svg class="ic"><use href="#i-clip"/></svg> Чек-ины <span class="badge">3</span></a>
<a data-v="messages"><svg class="ic"><use href="#i-chat"/></svg> Сообщения <span class="badge">5</span></a>
<a data-v="content"><svg class="ic"><use href="#i-megaphone"/></svg> Канал</a>
<a data-v="billing"><svg class="ic"><use href="#i-ruble"/></svg> Подписки</a>
<a data-v="analytics"><svg class="ic"><use href="#i-trend"/></svg> Аналитика</a>
<a data-v="settings"><svg class="ic"><use href="#i-gear"/></svg> Настройки</a>
</nav>
<div class="me"><div class="av"><svg class="ic ic-sm"><use href="#i-user"/></svg></div><div><div class="nm">Имя Фамилия</div><div class="rl">нутрициолог</div></div></div>
</aside>
<!-- MAIN -->
<div class="main">
<div class="topbar">
<h1 id="title">Дашборд</h1>
<div class="search"><svg class="ic ic-sm"><use href="#i-search"/></svg><input placeholder="Поиск клиента, блюда, документа…" oninput="searchClients(this.value)"></div>
<div class="tb-ic" onclick="toast('5 новых сообщений')"><svg class="ic"><use href="#i-bell"/></svg><span class="dot"></span></div>
<div class="tb-ic" onclick="show('settings')"><svg class="ic"><use href="#i-gear"/></svg></div>
</div>
<!-- DASHBOARD -->
<div class="view on" id="v-dash">
<div class="grid4">
<div class="card kpi"><div class="ico" style="background:var(--sage)"><svg class="ic"><use href="#i-users"/></svg></div><div class="val">42</div><div class="lbl">Активных клиентов</div><div class="tr up">▲ +6 за месяц</div></div>
<div class="card kpi"><div class="ico" style="background:var(--gold)"><svg class="ic"><use href="#i-ruble"/></svg></div><div class="val">418k ₽</div><div class="lbl">Выручка (MRR)</div><div class="tr up">▲ +14%</div></div>
<div class="card kpi"><div class="ico" style="background:var(--herbal)"><svg class="ic"><use href="#i-clip"/></svg></div><div class="val">38</div><div class="lbl">Чек-инов сегодня</div><div class="tr"><span class="muted">3 требуют внимания</span></div></div>
<div class="card kpi"><div class="ico" style="background:var(--terra)"><svg class="ic"><use href="#i-trend"/></svg></div><div class="val">87%</div><div class="lbl">Удержание</div><div class="tr up">▲ +3%</div></div>
</div>
<div class="grid2" style="margin-top:16px">
<div class="card">
<div class="head-row"><b style="color:var(--herbal)">Требуют внимания сегодня</b><div class="sp"><button class="btn outline sm" onclick="show('checkins')">Все чек-ины</button></div></div>
<div class="ci flag"><div class="av">АП</div><div style="flex:1"><b style="color:var(--herbal);font-size:13px">Анна П.</b><div class="muted">Пропустила ужин 2 дня · вес встал</div></div><button class="btn sm" onclick="toast('Открываю карточку Анны')">Разобрать</button></div>
<div class="ci flag"><div class="av">МК</div><div style="flex:1"><b style="color:var(--herbal);font-size:13px">Мария К.</b><div class="muted">Жалуется на тягу к сладкому вечером</div></div><button class="btn sm" onclick="toast('Открываю карточку Марии')">Разобрать</button></div>
<div class="ci flag"><div class="av">ЕС</div><div style="flex:1"><b style="color:var(--herbal);font-size:13px">Елена С.</b><div class="muted">Подписка истекает через 2 дня</div></div><button class="btn sm gold" onclick="toast('Отправлено напоминание о продлении')">Напомнить</button></div>
</div>
<div class="card">
<div class="head-row"><b style="color:var(--herbal)">Задачи на сегодня</b></div>
<div class="field"><span>Составить меню — 3 клиента</span><button class="btn sm gold" onclick="show('menu')"><svg class="ic ic-sm"><use href="#i-spark"/></svg> ИИ</button></div>
<div class="field"><span>Ответить в чате — 5 сообщений</span><button class="btn sm outline" onclick="show('messages')">Открыть</button></div>
<div class="field"><span>Опубликовать пост недели</span><button class="btn sm outline" onclick="show('content')">Контент</button></div>
<div class="field" style="border:none"><span>Разбор анализов — Ольга Т.</span><button class="btn sm outline" onclick="toast('Открываю анализы')">Открыть</button></div>
</div>
</div>
</div>
<!-- CLIENTS -->
<div class="view" id="v-clients">
<div class="head-row">
<span class="muted">42 клиента · 38 активных</span>
<div class="sp"><button class="btn outline sm"><svg class="ic ic-sm"><use href="#i-clip"/></svg> Фильтр</button><button class="btn sm" onclick="toast('Форма добавления клиента')"><svg class="ic ic-sm"><use href="#i-plus"/></svg> Добавить</button></div>
</div>
<div class="card" style="padding:6px">
<table id="clientsTable">
<thead><tr><th>Клиент</th><th>Тариф</th><th>Прогресс к цели</th><th>Последний чек-ин</th><th>Статус</th></tr></thead>
<tbody>
<tr class="clk" onclick="show('client')"><td><div class="who"><div class="av">АП</div><div><b>Анна Петрова</b><div class="muted">Цель: 5 кг</div></div></div></td><td>Сопровождение 3 мес</td><td><span class="mini-bar"><i style="width:62%"></i></span> 62%</td><td class="muted">сегодня</td><td><span class="tag t-warn"><svg class="ic ic-sm"><use href="#i-flag"/></svg> внимание</span></td></tr>
<tr class="clk" onclick="show('client')"><td><div class="who"><div class="av">МК</div><div><b>Мария Кузнецова</b><div class="muted">Цель: ЖКТ</div></div></div></td><td>Поддержка</td><td><span class="mini-bar"><i style="width:45%"></i></span> 45%</td><td class="muted">вчера</td><td><span class="tag t-warn"><svg class="ic ic-sm"><use href="#i-flag"/></svg> внимание</span></td></tr>
<tr class="clk" onclick="show('client')"><td><div class="who"><div class="av">ОТ</div><div><b>Ольга Титова</b><div class="muted">Цель: набор массы</div></div></div></td><td>Сопровождение 3 мес</td><td><span class="mini-bar"><i style="width:78%"></i></span> 78%</td><td class="muted">сегодня</td><td><span class="tag t-act">активна</span></td></tr>
<tr class="clk" onclick="show('client')"><td><div class="who"><div class="av">ЕС</div><div><b>Елена Смирнова</b><div class="muted">Цель: 8 кг</div></div></div></td><td>Поддержка</td><td><span class="mini-bar"><i style="width:90%"></i></span> 90%</td><td class="muted">2 дня</td><td><span class="tag t-end">истекает</span></td></tr>
<tr class="clk" onclick="show('client')"><td><div class="who"><div class="av">ДВ</div><div><b>Дарья Волкова</b><div class="muted">Цель: энергия</div></div></div></td><td>Сопровождение 3 мес</td><td><span class="mini-bar"><i style="width:33%"></i></span> 33%</td><td class="muted">сегодня</td><td><span class="tag t-act">активна</span></td></tr>
<tr class="clk" onclick="show('client')"><td><div class="who"><div class="av">НИ</div><div><b>Наталья Иванова</b><div class="muted">Цель: 3 кг</div></div></div></td><td>Разовый разбор</td><td><span class="mini-bar"><i style="width:15%"></i></span> 15%</td><td class="muted">3 дня</td><td><span class="tag t-act">активна</span></td></tr>
</tbody>
</table>
</div>
</div>
<!-- CLIENT DETAIL -->
<div class="view" id="v-client">
<div class="back" onclick="show('clients')"><svg class="ic ic-sm"><use href="#i-arrow"/></svg> К списку клиентов</div>
<div class="card">
<div class="head-row" style="margin:0">
<div class="prof"><div class="av">АП</div><div><div class="nm">Анна Петрова</div><div class="muted">32 года · цель: 5 кг · на сопровождении 2 мес</div></div></div>
<div class="sp"><button class="btn outline sm" onclick="toast('Открываю чат с Анной')"><svg class="ic ic-sm"><use href="#i-chat"/></svg> Чат</button><button class="btn sm gold" onclick="show('menu')"><svg class="ic ic-sm"><use href="#i-spark"/></svg> Сгенерировать меню</button></div>
</div>
<div class="tabs" id="ctabs">
<a class="on" data-c="ov">Обзор</a><a data-c="menu">Меню</a><a data-c="prog">Прогресс</a><a data-c="anal">Анализы</a>
</div>
<div class="ctab on" id="c-ov">
<div class="grid3">
<div class="card" style="background:var(--cream)"><div class="muted">Текущий вес</div><div class="kpi val" style="font-size:22px">68,4 кг</div><div class="tr up">2,1 кг</div></div>
<div class="card" style="background:var(--cream)"><div class="muted">Калорийность</div><div class="kpi val" style="font-size:22px">1900</div><div class="muted">Б150 Ж63 У190</div></div>
<div class="card" style="background:var(--cream)"><div class="muted">Дисциплина</div><div class="kpi val" style="font-size:22px">82%</div><div class="muted">чек-ины 23/28</div></div>
</div>
<h4 style="margin:16px 0 8px;color:var(--herbal)">Заметки нутрициолога</h4>
<div class="card">Хорошо реагирует на сложные углеводы. Сложности с вечерними перекусами — добавить белковый перекус в 17:00. Контролировать сон.</div>
</div>
<div class="ctab" id="c-menu"><div class="card">Текущее меню на неделю · <a style="color:var(--gold);cursor:pointer" onclick="show('menu')">открыть в конструкторе →</a><div class="field" style="margin-top:8px"><span>Пн · Завтрак</span><b>Овсянка с ягодами</b></div><div class="field"><span>Пн · Обед</span><b>Гречка с индейкой</b></div><div class="field"><span>Пн · Ужин</span><b>Лосось с овощами</b></div></div></div>
<div class="ctab" id="c-prog"><div class="card"><h4 style="color:var(--herbal);margin-bottom:8px">Динамика веса</h4><svg viewBox="0 0 500 120" style="width:100%;height:140px"><polyline points="0,90 80,84 160,66 240,60 320,40 400,30 500,20" fill="none" stroke="#7C9070" stroke-width="3" stroke-linecap="round"/><line x1="0" y1="110" x2="500" y2="110" stroke="rgba(0,0,0,.1)"/></svg></div></div>
<div class="ctab" id="c-anal"><div class="card"><div class="field"><span>Ферритин</span><b style="color:var(--sage)">норма · 45</b></div><div class="field"><span>Витамин D</span><b style="color:#c0584f">низкий · 18</b></div><div class="field"><span>Глюкоза</span><b style="color:var(--sage)">норма · 4.9</b></div><button class="btn outline sm" style="margin-top:10px" onclick="toast('Загрузка нового результата')"><svg class="ic ic-sm"><use href="#i-plus"/></svg> Добавить анализ</button></div></div>
</div>
</div>
<!-- MENU BUILDER -->
<div class="view" id="v-menu">
<div class="head-row">
<span class="muted">Конструктор меню · клиент: <b style="color:var(--herbal)">Анна Петрова</b> (1900 ккал)</span>
<div class="sp"><button class="btn gold sm" onclick="aiMenu()"><svg class="ic ic-sm"><use href="#i-spark"/></svg> ИИ: собрать неделю</button><button class="btn sm" onclick="toast('Меню отправлено клиенту')"><svg class="ic ic-sm"><use href="#i-check"/></svg> Отправить клиенту</button></div>
</div>
<div class="mb">
<div class="card">
<b style="color:var(--herbal);font-size:13px">База блюд</b>
<div class="muted" style="margin-bottom:10px">перетащи в день</div>
<div class="dish"><div class="ico"><svg class="ic ic-sm"><use href="#i-bowl"/></svg></div>Овсянка с ягодами · 320</div>
<div class="dish"><div class="ico"><svg class="ic ic-sm"><use href="#i-bowl"/></svg></div>Гречка с индейкой · 480</div>
<div class="dish"><div class="ico"><svg class="ic ic-sm"><use href="#i-bowl"/></svg></div>Лосось с овощами · 420</div>
<div class="dish"><div class="ico"><svg class="ic ic-sm"><use href="#i-bowl"/></svg></div>Творог с орехами · 240</div>
<div class="dish"><div class="ico"><svg class="ic ic-sm"><use href="#i-bowl"/></svg></div>Куриный суп · 310</div>
<button class="btn outline sm" style="width:100%;margin-top:6px" onclick="toast('Добавить новое блюдо в базу')"><svg class="ic ic-sm"><use href="#i-plus"/></svg> Новое блюдо</button>
</div>
<div class="grid3" id="weekGrid">
<div class="day"><h4><svg class="ic ic-sm"><use href="#i-fire"/></svg> Понедельник <span class="muted" style="margin-left:auto;font-weight:400">1900</span></h4><div class="slot"><b>Завтрак</b>Овсянка с ягодами</div><div class="slot"><b>Обед</b>Гречка с индейкой</div><div class="slot"><b>Ужин</b>Лосось с овощами</div></div>
<div class="day"><h4>Вторник <span class="muted" style="margin-left:auto;font-weight:400"></span></h4><div class="slot">+ завтрак</div><div class="slot">+ обед</div><div class="slot">+ ужин</div></div>
<div class="day"><h4>Среда <span class="muted" style="margin-left:auto;font-weight:400"></span></h4><div class="slot">+ завтрак</div><div class="slot">+ обед</div><div class="slot">+ ужин</div></div>
</div>
</div>
<div class="legend-note">В рабочей версии: drag-and-drop блюд, авто-подсчёт КБЖУ по дню, ИИ-генерация под цель и ограничения клиента, сохранение шаблонов меню.</div>
</div>
<!-- CHECKINS -->
<div class="view" id="v-checkins">
<div class="head-row"><span class="muted">38 чек-инов сегодня · 3 требуют внимания</span></div>
<div class="ci flag"><div class="av">АП</div><div style="flex:1"><b style="color:var(--herbal);font-size:13px">Анна Петрова <span class="tag t-warn" style="margin-left:6px"><svg class="ic ic-sm"><use href="#i-flag"/></svg> флаг</span></b><div class="muted">Пропустила ужин 2 дня подряд · вес не снижается 5 дней</div></div><button class="btn sm" onclick="resolveCi(this)">Разобрать</button></div>
<div class="ci flag"><div class="av">МК</div><div style="flex:1"><b style="color:var(--herbal);font-size:13px">Мария Кузнецова <span class="tag t-warn" style="margin-left:6px"><svg class="ic ic-sm"><use href="#i-flag"/></svg> флаг</span></b><div class="muted">Самочувствие: тяга к сладкому вечером, низкая энергия</div></div><button class="btn sm" onclick="resolveCi(this)">Разобрать</button></div>
<div class="ci flag"><div class="av">ДВ</div><div style="flex:1"><b style="color:var(--herbal);font-size:13px">Дарья Волкова <span class="tag t-warn" style="margin-left:6px"><svg class="ic ic-sm"><use href="#i-flag"/></svg> флаг</span></b><div class="muted">Вода 3 дня ниже нормы · пропуск завтраков</div></div><button class="btn sm" onclick="resolveCi(this)">Разобрать</button></div>
<div class="ci"><div class="av">ОТ</div><div style="flex:1"><b style="color:var(--herbal);font-size:13px">Ольга Титова</b><div class="muted">Всё по плану · вес +0,4 кг (набор) · энергия высокая</div></div><span class="tag t-act"><svg class="ic ic-sm"><use href="#i-check"/></svg> ок</span></div>
<div class="ci"><div class="av">НИ</div><div style="flex:1"><b style="color:var(--herbal);font-size:13px">Наталья Иванова</b><div class="muted">Чек-ин фото загружено · придерживается меню</div></div><span class="tag t-act"><svg class="ic ic-sm"><use href="#i-check"/></svg> ок</span></div>
<div class="legend-note">ИИ автоматически помечает флагом отклонения (пропуски, остановка прогресса, жалобы) — вы видите только тех, кому реально нужно внимание.</div>
</div>
<!-- MESSAGES -->
<div class="view" id="v-messages">
<div class="head-row"><span class="muted">5 непрочитанных</span><div class="sp"><button class="btn outline sm" onclick="toast('ИИ подготовил черновики ответов')"><svg class="ic ic-sm"><use href="#i-spark"/></svg> ИИ-черновики ответов</button></div></div>
<div class="card msglist">
<div class="mrow" onclick="toast('Открываю диалог с Анной')"><div class="av">АП</div><div style="flex:1"><b>Анна Петрова</b><div class="muted">А можно заменить гречку на булгур?</div></div><span class="muted">5 мин</span><span class="unread"></span></div>
<div class="mrow" onclick="toast('Открываю диалог с Марией')"><div class="av">МК</div><div style="flex:1"><b>Мария Кузнецова</b><div class="muted">Вечером очень хочется сладкого, что делать?</div></div><span class="muted">22 мин</span><span class="unread"></span></div>
<div class="mrow" onclick="toast('Открываю диалог с Ольгой')"><div class="av">ОТ</div><div style="flex:1"><b>Ольга Титова</b><div class="muted">Спасибо, самочувствие отличное!</div></div><span class="muted">1 ч</span><span class="unread"></span></div>
<div class="mrow" onclick="toast('Открываю диалог с Дарьей')"><div class="av">ДВ</div><div style="flex:1"><b>Дарья Волкова</b><div class="muted">Прикрепила фото обеда</div></div><span class="muted">3 ч</span><span class="unread"></span></div>
<div class="mrow" onclick="toast('Открываю диалог с Еленой')"><div class="av">ЕС</div><div style="flex:1"><b>Елена Смирнова</b><div class="muted">Как продлить подписку?</div></div><span class="muted">5 ч</span><span class="unread"></span></div>
</div>
</div>
<!-- CHANNEL / MEDIA PLAN -->
<div class="view" id="v-content">
<div class="head-row">
<div class="seg" id="planSeg">
<a class="on" data-seg="week" onclick="segPlan(this)">Неделя</a>
<a data-seg="month" onclick="segPlan(this)">Месяц</a>
<a data-seg="drafts" onclick="segPlan(this)">Черновики</a>
<a data-seg="done" onclick="segPlan(this)">Опубликовано</a>
</div>
<div class="sp">
<button class="btn outline sm" onclick="aiPlan()"><svg class="ic ic-sm"><use href="#i-spark"/></svg> ИИ: план на неделю</button>
<button class="btn sm" onclick="openPost()"><svg class="ic ic-sm"><use href="#i-plus"/></svg> Публикация</button>
</div>
</div>
<div class="head-row" style="margin-bottom:14px;flex-wrap:wrap">
<span class="muted">Рубрики:</span>
<span class="rubpill on" style="background:#2F4A3C;color:#fff;border:none">Разбор тарелки</span>
<span class="rubpill on" style="background:#7C9070;color:#fff;border:none">Привычка</span>
<span class="rubpill on" style="background:#C9A24B;color:#3a2e10;border:none">Рецепт</span>
<span class="rubpill on" style="background:#3c5b4a;color:#fff;border:none">Эфир</span>
<span class="sp muted" style="display:flex;align-items:center;gap:7px">Каналы: <span class="chb tg">TG</span><span class="chb max">MAX</span></span>
</div>
<div class="cal" id="calWeek">
<div class="day"><div class="dn"><b>Пн</b> 25</div>
<div class="pchip rub-bowl" onclick="openPost()">10:00 · Разбор тарелки<br>Сыр и кисломолочка<div class="chs"><span class="chb tg">TG</span><span class="chb max">MAX</span></div></div>
</div>
<div class="day"><div class="dn"><b>Вт</b> 26</div><div class="add" onclick="openPost()">+ публикация</div></div>
<div class="day"><div class="dn"><b>Ср</b> 27</div>
<div class="pchip rub-fire" onclick="openPost()">11:00 · Привычка<br>Белковый перекус 17:00<div class="chs"><span class="chb tg">TG</span><span class="chb max">MAX</span></div></div>
</div>
<div class="day"><div class="dn"><b>Чт</b> 28</div><div class="add" onclick="openPost()">+ публикация</div></div>
<div class="day"><div class="dn"><b>Пт</b> 29</div>
<div class="pchip rub-rec" onclick="openPost()">10:00 · Рецепт<br>Ароматный бульон<div class="chs"><span class="chb tg">TG</span></div></div>
</div>
<div class="day"><div class="dn"><b>Сб</b> 30</div><div class="add" onclick="openPost()">+ публикация</div></div>
<div class="day"><div class="dn"><b>Вс</b> 31</div>
<div class="pchip rub-air" onclick="openPost()">19:00 · Эфир<br>Долголетие и энергия<div class="chs"><span class="chb tg">TG</span><span class="chb max">MAX</span></div></div>
</div>
</div>
<div class="legend-note">ИИ предлагает план под рубрики и оптимальное время; публикация уходит в Telegram и MAX одновременно. Перетаскивание постов между днями — в рабочей версии.</div>
</div>
<!-- POST EDITOR -->
<div class="view" id="v-post">
<div class="back" onclick="show('content')"><svg class="ic ic-sm"><use href="#i-arrow"/></svg> К медиаплану</div>
<div class="editor">
<div class="card">
<span class="lbl2">Рубрика</span>
<div class="tplrow" id="rubPick">
<span class="rubpill on" data-r="bowl" data-c="#2F4A3C" data-l="Разбор тарелки" onclick="pickRub(this)">Разбор тарелки</span>
<span class="rubpill" data-r="fire" data-c="#7C9070" data-l="Привычка" onclick="pickRub(this)">Привычка</span>
<span class="rubpill" data-r="rec" data-c="#C9A24B" data-l="Рецепт" onclick="pickRub(this)">Рецепт</span>
<span class="rubpill" data-r="air" data-c="#3c5b4a" data-l="Эфир" onclick="pickRub(this)">Эфир</span>
</div>
<span class="lbl2">Обложка</span>
<div class="tplrow" id="covPick">
<div class="tpl on" style="background:#2F4A3C" data-c="#2F4A3C" onclick="pickCov(this)">тёмная</div>
<div class="tpl" style="background:#7C9070" data-c="#7C9070" onclick="pickCov(this)">шалфей</div>
<div class="tpl" style="background:#C9A24B;color:#3a2e10" data-c="#C9A24B" onclick="pickCov(this)">золото</div>
<div class="tpl" style="background:#3c5b4a" data-c="#3c5b4a" onclick="pickCov(this)">эфир</div>
</div>
<span class="lbl2">Заголовок</span>
<input class="inp" id="postTitle" value="Как правильно есть сыр и кисломолочку" oninput="syncPrev()">
<span class="lbl2">Текст публикации</span>
<textarea class="inp" id="postText" oninput="syncPrev()">Здоровая тарелка — это не только про КБЖУ. Это ещё и про сочетания продуктов, нагрузку на ЖКТ и гликемический ответ.
Разбираем, как встроить сыр и кисломолочку без вреда 🌿</textarea>
<button class="btn outline sm" style="margin-top:10px" onclick="aiText()"><svg class="ic ic-sm"><use href="#i-spark"/></svg> ИИ: написать / улучшить текст</button>
<div class="two" style="margin-top:16px">
<div><span class="lbl2">Дата и время</span><input class="inp" id="postWhen" value="Пн, 10:00"></div>
<div><span class="lbl2">Каналы публикации</span>
<div style="margin-top:8px"><label class="chk"><input type="checkbox" id="chTg" checked> <span class="chb tg">TG</span> Telegram</label><label class="chk"><input type="checkbox" id="chMax" checked> <span class="chb max">MAX</span> MAX</label></div>
</div>
</div>
<div style="display:flex;gap:10px;margin-top:20px;flex-wrap:wrap">
<button class="btn outline" onclick="toast('Черновик сохранён')">Сохранить черновик</button>
<button class="btn" onclick="schedulePost()"><svg class="ic ic-sm"><use href="#i-cal"/></svg> Запланировать</button>
<button class="btn gold" onclick="publishPost()"><svg class="ic ic-sm"><use href="#i-send"/></svg> Опубликовать сейчас</button>
</div>
</div>
<div>
<span class="lbl2">Превью публикации</span>
<div class="card" style="padding:0;overflow:hidden;margin-bottom:14px">
<div style="background:#2AABEE;color:#fff;padding:9px 13px;font-size:12px;font-weight:600;display:flex;align-items:center;gap:7px"><svg class="ic ic-sm"><use href="#i-send"/></svg> Telegram</div>
<div style="padding:12px">
<div class="prevCover" id="prevCovTg" style="background:#2F4A3C"><div class="pl" id="plTg">Разбор тарелки</div><div class="ph" id="phTg">Как правильно есть сыр и кисломолочку</div></div>
<div id="ptTg" style="font-size:11.5px;margin-top:9px;color:#3a463f;white-space:pre-wrap;line-height:1.5"></div>
</div>
</div>
<div class="card" style="padding:0;overflow:hidden">
<div style="background:#6d4aff;color:#fff;padding:9px 13px;font-size:12px;font-weight:600;display:flex;align-items:center;gap:7px"><svg class="ic ic-sm"><use href="#i-megaphone"/></svg> MAX</div>
<div style="padding:12px">
<div class="prevCover" id="prevCovMax" style="background:#2F4A3C"><div class="pl" id="plMax">Разбор тарелки</div><div class="ph" id="phMax">Как правильно есть сыр и кисломолочку</div></div>
<div id="ptMax" style="font-size:11.5px;margin-top:9px;color:#3a463f;white-space:pre-wrap;line-height:1.5"></div>
</div>
</div>
</div>
</div>
</div>
<!-- BILLING -->
<div class="view" id="v-billing">
<div class="grid4">
<div class="card kpi"><div class="muted">MRR</div><div class="val">418k ₽</div><div class="tr up">▲ +14%</div></div>
<div class="card kpi"><div class="muted">Средний чек</div><div class="val">9 950 ₽</div></div>
<div class="card kpi"><div class="muted">LTV клиента</div><div class="val">31 200 ₽</div><div class="tr up">▲ +8%</div></div>
<div class="card kpi"><div class="muted">Отток</div><div class="val">4,2%</div><div class="tr up">▼ хорошо</div></div>
</div>
<div class="card" style="margin-top:16px;padding:6px">
<table>
<thead><tr><th>Клиент</th><th>Тариф</th><th>Сумма</th><th>Дата</th><th>Статус</th></tr></thead>
<tbody>
<tr><td><div class="who"><div class="av">ОТ</div><b>Ольга Титова</b></div></td><td>Сопровождение 3 мес</td><td><b>24 900 ₽</b></td><td class="muted">сегодня</td><td><span class="tag t-act">оплачено</span></td></tr>
<tr><td><div class="who"><div class="av">ДВ</div><b>Дарья Волкова</b></div></td><td>Сопровождение 3 мес</td><td><b>24 900 ₽</b></td><td class="muted">вчера</td><td><span class="tag t-act">оплачено</span></td></tr>
<tr><td><div class="who"><div class="av">МК</div><b>Мария Кузнецова</b></div></td><td>Поддержка (продление)</td><td><b>4 900 ₽</b></td><td class="muted">2 дня</td><td><span class="tag t-act">оплачено</span></td></tr>
<tr><td><div class="who"><div class="av">ЕС</div><b>Елена Смирнова</b></div></td><td>Поддержка</td><td><b>4 900 ₽</b></td><td class="muted">истекает</td><td><span class="tag t-end">ожидает оплаты</span></td></tr>
</tbody>
</table>
</div>
</div>
<!-- ANALYTICS -->
<div class="view" id="v-analytics">
<div class="grid2">
<div class="card"><h4 style="color:var(--herbal);margin-bottom:10px">Выручка по месяцам</h4>
<svg viewBox="0 0 500 160" style="width:100%;height:170px">
<g fill="#7C9070">
<rect x="20" y="100" width="46" height="50" rx="4"/><rect x="90" y="80" width="46" height="70" rx="4"/><rect x="160" y="70" width="46" height="80" rx="4"/><rect x="230" y="55" width="46" height="95" rx="4"/><rect x="300" y="40" width="46" height="110" rx="4"/><rect x="370" y="22" width="46" height="128" rx="4" fill="#C9A24B"/>
</g>
</svg>
<div class="muted">Дек · Янв · Фев · Мар · Апр · Май</div>
</div>
<div class="card"><h4 style="color:var(--herbal);margin-bottom:10px">Воронка</h4>
<div class="field"><span>Лид-магнит (бот)</span><b>820</b></div>
<div class="field"><span>Разовый разбор</span><b>156</b></div>
<div class="field"><span>Программа сопровождения</span><b>48</b></div>
<div class="field" style="border:none"><span>Продлили (подписка)</span><b>34</b></div>
</div>
</div>
<div class="grid3" style="margin-top:16px">
<div class="card kpi"><div class="muted">Загрузка нутрициолога</div><div class="val">42 / 60</div><div class="muted">есть место для роста</div></div>
<div class="card kpi"><div class="muted">Конверсия разбор→программа</div><div class="val">31%</div><div class="tr up">▲ +5%</div></div>
<div class="card kpi"><div class="muted">Среднее удержание</div><div class="val">4,1 мес</div></div>
</div>
</div>
<!-- SETTINGS -->
<div class="view" id="v-settings">
<div class="grid3">
<div class="card"><h4 style="color:var(--herbal);margin-bottom:8px">Тарифы и цены</h4><div class="field"><span>Сопровождение 3 мес</span><b>24 900 ₽</b></div><div class="field"><span>Поддержка / мес</span><b>4 900 ₽</b></div><div class="field" style="border:none"><span>Разовый разбор</span><b>3 500 ₽</b></div><button class="btn outline sm" style="margin-top:10px" onclick="toast('Редактирование тарифов')"><svg class="ic ic-sm"><use href="#i-edit"/></svg> Изменить</button></div>
<div class="card"><h4 style="color:var(--herbal);margin-bottom:8px">Интеграции</h4><div class="field"><span>Telegram bot</span><b style="color:var(--sage)">подключён</b></div><div class="field"><span>MAX mini-app</span><b style="color:var(--sage)">подключён</b></div><div class="field" style="border:none"><span>Эквайринг / СБП</span><b style="color:var(--sage)">активен</b></div></div>
<div class="card"><h4 style="color:var(--herbal);margin-bottom:8px">ИИ-ассистент</h4><div class="field"><span>Генерация меню</span><b style="color:var(--sage)">вкл</b></div><div class="field"><span>Флаги чек-инов</span><b style="color:var(--sage)">вкл</b></div><div class="field" style="border:none"><span>Черновики ответов</span><b style="color:var(--sage)">вкл</b></div></div>
</div>
</div>
</div>
</div>
<div class="toast" id="toast"></div>
<script>
const titles={dash:'Дашборд',clients:'Клиенты',client:'Карточка клиента',menu:'Конструктор меню',checkins:'Чек-ины',messages:'Сообщения',content:'Канал и медиаплан',post:'Подготовка публикации',billing:'Подписки и платежи',analytics:'Аналитика',settings:'Настройки'};
function show(v){
document.querySelectorAll('.view').forEach(x=>x.classList.remove('on'));
document.getElementById('v-'+v).classList.add('on');
document.getElementById('title').textContent=titles[v]||'';
document.querySelectorAll('#nav a').forEach(a=>a.classList.toggle('on',a.dataset.v===v));
document.querySelector('.view.on').scrollTop=0;
}
document.querySelectorAll('#nav a').forEach(a=>a.onclick=()=>show(a.dataset.v));
// client detail tabs
document.querySelectorAll('#ctabs a').forEach(a=>a.onclick=()=>{
document.querySelectorAll('#ctabs a').forEach(x=>x.classList.remove('on'));a.classList.add('on');
document.querySelectorAll('.ctab').forEach(x=>x.classList.remove('on'));
document.getElementById('c-'+a.dataset.c).classList.add('on');
});
let t;function toast(m){const e=document.getElementById('toast');e.textContent=m;e.classList.add('show');clearTimeout(t);t=setTimeout(()=>e.classList.remove('show'),1900);}
function aiMenu(){
toast('ИИ собирает меню на неделю под цель 5 кг…');
setTimeout(()=>{
document.querySelectorAll('#weekGrid .day').forEach((d,i)=>{
if(i===0)return;
d.querySelector('h4 .muted').textContent='1900';
const slots=d.querySelectorAll('.slot');
const meals=[['Завтрак','Творог с орехами'],['Обед','Куриный суп'],['Ужин','Лосось с овощами']];
slots.forEach((s,k)=>{s.innerHTML='<b>'+meals[k][0]+'</b>'+meals[k][1];});
});
toast('Меню готово · проверьте и отправьте клиенту');
},1100);
}
function resolveCi(btn){
const ci=btn.closest('.ci');ci.classList.remove('flag');
ci.querySelector('.muted').textContent='Разобрано · скорректировано меню, отправлено сообщение';
btn.outerHTML='<span class="tag t-act"><svg class="ic ic-sm"><use href="#i-check"/></svg> решено</span>';
toast('Чек-ин обработан');
}
function searchClients(q){
q=q.toLowerCase();
document.querySelectorAll('#clientsTable tbody tr').forEach(r=>{
r.style.display=r.textContent.toLowerCase().includes(q)?'':'none';
});
if(q&&!document.getElementById('v-clients').classList.contains('on'))show('clients');
}
/* ===== Канал / медиаплан ===== */
function segPlan(el){
document.querySelectorAll('#planSeg a').forEach(a=>a.classList.remove('on'));el.classList.add('on');
const m={week:'Неделя',month:'Месяц',drafts:'Черновики',done:'Опубликовано'};
if(el.dataset.seg!=='week')toast('Режим: '+m[el.dataset.seg]+' (демо)');
}
function aiPlan(){
toast('ИИ подбирает темы и время под рубрики…');
setTimeout(()=>{
const fills=[
{sel:1,cls:'rub-air',html:'18:00 · Эфир<br>Q&A по анализам<div class="chs"><span class="chb tg">TG</span><span class="chb max">MAX</span></div>'},
{sel:3,cls:'rub-bowl',html:'10:00 · Разбор тарелки<br>Завтрак, который насыщает<div class="chs"><span class="chb tg">TG</span><span class="chb max">MAX</span></div>'},
{sel:5,cls:'rub-rec',html:'12:00 · Рецепт<br>Тёплый салат на ужин<div class="chs"><span class="chb tg">TG</span></div>'}
];
const days=document.querySelectorAll('#calWeek .day');
fills.forEach(f=>{
const add=days[f.sel].querySelector('.add');if(!add)return;
const chip=document.createElement('div');chip.className='pchip '+f.cls;chip.innerHTML=f.html;chip.onclick=openPost;
add.replaceWith(chip);
});
toast('План на неделю готов · проверьте и опубликуйте');
},1100);
}
let curRub={r:'bowl',c:'#2F4A3C',l:'Разбор тарелки'};
function openPost(){show('post');syncPrev();}
function pickRub(el){
document.querySelectorAll('#rubPick .rubpill').forEach(x=>x.classList.remove('on'));el.classList.add('on');
curRub={r:el.dataset.r,c:el.dataset.c,l:el.dataset.l};
// подсветить обложку в тон рубрики
document.querySelectorAll('#covPick .tpl').forEach(t=>t.classList.toggle('on',t.dataset.c===curRub.c));
syncPrev(curRub.c);
}
function pickCov(el){
document.querySelectorAll('#covPick .tpl').forEach(t=>t.classList.remove('on'));el.classList.add('on');
syncPrev(el.dataset.c);
}
function syncPrev(coverColor){
const title=document.getElementById('postTitle').value;
const text=document.getElementById('postText').value;
const c=coverColor||document.querySelector('#covPick .tpl.on')?.dataset.c||'#2F4A3C';
['Tg','Max'].forEach(s=>{
document.getElementById('pl'+s).textContent=curRub.l;
document.getElementById('ph'+s).textContent=title;
document.getElementById('pt'+s).textContent=text;
const cov=document.getElementById('prevCov'+s);cov.style.background=c;
cov.style.color=(c==='#C9A24B')?'#3a2e10':'#fff';
});
}
function aiText(){
toast('ИИ пишет текст в фирменном тоне…');
setTimeout(()=>{
document.getElementById('postText').value=
'Здоровая тарелка — это не только про калории. Это про сочетания, нагрузку на ЖКТ и спокойную энергию весь день.\n\n'+
'Как встроить сыр и кисломолочку без вреда:\n'+
'• выбирайте кисломолочное без сахара и наполнителей\n'+
'• сыр — небольшой порцией, к овощам и зелени\n'+
'• не сочетайте с быстрыми углеводами на голодный желудок\n\n'+
'Сохрани, чтобы не забыть 🌿';
syncPrev();
toast('Текст готов · отредактируйте при необходимости');
},1000);
}
function chTxt(){
const tg=document.getElementById('chTg').checked,mx=document.getElementById('chMax').checked;
return [tg?'Telegram':null,mx?'MAX':null].filter(Boolean).join(' + ')||'каналы не выбраны';
}
function schedulePost(){toast('Запланировано в '+chTxt()+' · '+document.getElementById('postWhen').value);setTimeout(()=>show('content'),900);}
function publishPost(){toast('Опубликовано в '+chTxt()+' ✓');setTimeout(()=>show('content'),900);}
</script>
<script>syncPrev&&syncPrev();</script>
</body>
</html>