From 43d7cf49cf6118d15b0ecd3d8b7ab9f749b5b820 Mon Sep 17 00:00:00 2001 From: neo Date: Sat, 20 Jun 2026 20:03:48 +0500 Subject: [PATCH] =?UTF-8?q?v4:=20KPI=20=D1=81=D1=82=D1=80=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BF=D0=BE=20=D0=B8=D1=81=D1=81=D0=BB=D0=B5=D0=B4?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8E=20=E2=80=94=20E-com(AOV/CV?= =?UTF-8?q?R/CLV/ROAS),=20Services(WinRate/SalesCycle/PipelineCoverage),?= =?UTF-8?q?=20Production(OEE/DefectRate/OEE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard-mockup.html | 1075 ++++++++++++++--------------------------- 1 file changed, 358 insertions(+), 717 deletions(-) diff --git a/dashboard-mockup.html b/dashboard-mockup.html index 59ed710..37a6774 100644 --- a/dashboard-mockup.html +++ b/dashboard-mockup.html @@ -12,866 +12,507 @@ :root { --bg: #09090b; - --bg-card: #111113; - --bg-card-hover: #16161a; + --card: #111113; --border: rgba(255,255,255,0.06); - --border-hover: rgba(255,255,255,0.1); + --border-h: rgba(255,255,255,0.1); --text: #fafafa; - --text-sec: #a1a1aa; - --text-muted: #52525b; - --green: #22c55e; - --green-dim: rgba(34,197,94,0.12); - --blue: #3b82f6; - --blue-dim: rgba(59,130,246,0.12); - --amber: #f59e0b; - --amber-dim: rgba(245,158,11,0.12); - --red: #ef4444; - --red-dim: rgba(239,68,68,0.12); - --purple: #a855f7; - --purple-dim: rgba(168,85,247,0.12); - --cyan: #06b6d4; - --cyan-dim: rgba(6,182,212,0.12); + --sec: #a1a1aa; + --muted: #52525b; + --g: #22c55e; --gd: rgba(34,197,94,0.12); + --b: #3b82f6; --bd: rgba(59,130,246,0.12); + --a: #f59e0b; --ad: rgba(245,158,11,0.12); + --r: #ef4444; --rd: rgba(239,68,68,0.12); + --p: #a855f7; --pd: rgba(168,85,247,0.12); + --c: #06b6d4; --cd: rgba(6,182,212,0.12); --mono: 'JetBrains Mono', monospace; --ease: cubic-bezier(0.4, 0, 0.2, 1); } body { font-family: 'Inter', -apple-system, sans-serif; - background: var(--bg); - color: var(--text); - line-height: 1.6; - -webkit-font-smoothing: antialiased; - min-height: 100vh; - overflow-x: hidden; -} - -/* Ambient glow */ -body::before { - content: ''; - position: fixed; - top: -200px; - left: 50%; - transform: translateX(-50%); - width: 600px; - height: 400px; - background: radial-gradient(ellipse, rgba(34,197,94,0.04) 0%, transparent 70%); - pointer-events: none; + background: var(--bg); color: var(--text); + line-height: 1.6; -webkit-font-smoothing: antialiased; + min-height: 100vh; overflow-x: hidden; } /* ============================================ HEADER ============================================ */ .header { - display: flex; - align-items: center; - justify-content: space-between; + display: flex; align-items: center; justify-content: space-between; padding: 12px 28px; - background: rgba(17,17,19,0.85); - backdrop-filter: blur(16px); - border-bottom: 1px solid var(--border); - position: sticky; - top: 0; - z-index: 100; + background: rgba(17,17,19,0.85); backdrop-filter: blur(16px); + border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 100; } - .logo { - font-family: var(--mono); - font-weight: 700; - font-size: 15px; - letter-spacing: -0.3px; - display: flex; - align-items: center; - gap: 8px; + font-family: var(--mono); font-weight: 700; font-size: 15px; + letter-spacing: -0.3px; display: flex; align-items: center; gap: 8px; } - -.logo-dot { - width: 8px; height: 8px; - background: var(--green); - border-radius: 50%; - animation: pulse 2s ease-in-out infinite; +.dot { + width: 8px; height: 8px; background: var(--g); border-radius: 50%; box-shadow: 0 0 8px rgba(34,197,94,0.4); -} - -@keyframes pulse { - 0%, 100% { box-shadow: 0 0 8px rgba(34,197,94,0.4); } - 50% { box-shadow: 0 0 16px rgba(34,197,94,0.15); } -} - -.header-right { - display: flex; - align-items: center; - gap: 16px; - font-size: 12px; -} - -.live-badge { - display: flex; - align-items: center; - gap: 6px; - color: var(--green); - font-weight: 600; -} - -.live-dot { - width: 6px; height: 6px; - background: var(--green); - border-radius: 50%; animation: pulse 2s ease-in-out infinite; } - -.clock { - font-family: var(--mono); - color: var(--text-muted); - font-size: 11px; +@keyframes pulse { + 0%,100%{box-shadow:0 0 8px rgba(34,197,94,0.4);} + 50%{box-shadow:0 0 16px rgba(34,197,94,0.15);} } +.hdr-right { display:flex; align-items:center; gap:16px; font-size:12px; } +.live { display:flex; align-items:center; gap:6px; color:var(--g); font-weight:600; } +.live .dot { width:6px; height:6px; } +.clock { font-family:var(--mono); color:var(--muted); font-size:11px; } /* ============================================ - SEGMENT SWITCHER + SWITCHER ============================================ */ -.switcher-wrap { - display: flex; - justify-content: center; - padding: 32px 24px 0; +.sw-wrap { display:flex; justify-content:center; padding:32px 24px 0; } +.sw { + display:flex; gap:4px; padding:5px; + background:var(--card); border:1px solid var(--border); + border-radius:14px; } - -.switcher { - display: flex; - gap: 4px; - padding: 5px; - background: var(--bg-card); - border: 1px solid var(--border); - border-radius: 14px; -} - .sw-btn { - padding: 10px 20px; - border: none; - background: transparent; - color: var(--text-sec); - font-family: var(--mono); - font-size: 12px; - font-weight: 500; - border-radius: 10px; - cursor: pointer; - transition: all 0.25s var(--ease); - white-space: nowrap; - display: flex; - align-items: center; - gap: 6px; + padding:10px 20px; border:none; background:transparent; + color:var(--sec); font-family:var(--mono); font-size:12px; + font-weight:500; border-radius:10px; cursor:pointer; + transition:all .25s var(--ease); white-space:nowrap; + display:flex; align-items:center; gap:6px; } - -.sw-btn:hover { color: var(--text); } - -.sw-btn.active { - background: var(--green-dim); - color: var(--green); - box-shadow: 0 0 0 1px rgba(34,197,94,0.2); +.sw-btn:hover{color:var(--text);} +.sw-btn.active{ + background:var(--gd); color:var(--g); + box-shadow:0 0 0 1px rgba(34,197,94,0.2); } -.sw-btn .icon { font-size: 15px; } - /* ============================================ - KPI GRID — 6 cards + KPI GRID — 6 cards, research-backed ============================================ */ .kpi-grid { - display: grid; - grid-template-columns: repeat(6, 1fr); - gap: 12px; - padding: 24px 24px 0; - max-width: 1280px; - margin: 0 auto; + display:grid; grid-template-columns:repeat(6,1fr); + gap:12px; padding:24px; max-width:1280px; margin:0 auto; } - .kpi { - background: var(--bg-card); - border: 1px solid var(--border); - border-radius: 12px; - padding: 16px; - position: relative; - overflow: hidden; - transition: all 0.25s var(--ease); - opacity: 0; - transform: translateY(12px); + background:var(--card); border:1px solid var(--border); + border-radius:12px; padding:16px; + position:relative; overflow:hidden; + transition:all .25s var(--ease); + opacity:0; transform:translateY(12px); } - -.kpi.visible { - opacity: 1; - transform: translateY(0); -} - -.kpi:hover { - border-color: var(--border-hover); - transform: translateY(-2px); -} - +.kpi.vis { opacity:1; transform:translateY(0); } +.kpi:hover{border-color:var(--border-h); transform:translateY(-2px);} .kpi-accent { - position: absolute; - top: 0; left: 0; - width: 3px; height: 100%; - opacity: 0; - transition: opacity 0.25s; + position:absolute; top:0;left:0; width:3px; height:100%; opacity:0; transition:opacity .25s; } - -.kpi:hover .kpi-accent { opacity: 1; } - +.kpi:hover .kpi-accent{opacity:1;} .kpi-name { - font-size: 10px; - text-transform: uppercase; - letter-spacing: 0.08em; - color: var(--text-muted); - font-weight: 600; - margin-bottom: 8px; + font-size:10px; text-transform:uppercase; letter-spacing:.08em; + color:var(--muted); font-weight:600; margin-bottom:8px; } - .kpi-val { - font-family: var(--mono); - font-size: 22px; - font-weight: 700; - margin-bottom: 6px; - line-height: 1.1; + font-family:var(--mono); font-size:22px; font-weight:700; + margin-bottom:6px; line-height:1.1; } - -.kpi-meta { - display: flex; - align-items: center; - gap: 6px; - font-size: 11px; -} - -.kpi-trend { - display: inline-flex; - align-items: center; - gap: 3px; - padding: 2px 6px; - border-radius: 5px; - font-family: var(--mono); - font-weight: 600; - font-size: 10px; -} - -.kpi-trend.up { color: var(--green); background: var(--green-dim); } -.kpi-trend.down { color: var(--red); background: var(--red-dim); } -.kpi-trend.neutral { color: var(--blue); background: var(--blue-dim); } - -.kpi-period { - color: var(--text-muted); - font-size: 10px; +.kpi-meta { display:flex; align-items:center; gap:6px; font-size:11px; } +.trend { + display:inline-flex; align-items:center; gap:3px; + padding:2px 6px; border-radius:5px; + font-family:var(--mono); font-weight:600; font-size:10px; } +.t.up{color:var(--g);background:var(--gd);} +.t.down{color:var(--r);background:var(--rd);} +.t.neu{color:var(--b);background:var(--bd);} +.per { color:var(--muted); font-size:10px; } /* ============================================ - CHART ROWS + CHARTS ============================================ */ -.chart-row { - display: grid; - gap: 12px; - padding: 16px 24px; - max-width: 1280px; - margin: 0 auto; +.cr { display:grid; gap:12px; padding:12px 24px; max-width:1280px; margin:0 auto; } +.cr2 { grid-template-columns:2fr 1fr; } +.cr3 { grid-template-columns:1fr 1fr 1fr; } +.cc { + background:var(--card); border:1px solid var(--border); + border-radius:14px; padding:20px; transition:border-color .25s; } +.cc:hover{border-color:var(--border-h);} +.ch { margin-bottom:4px; } +.ct { font-size:13px; font-weight:600; color:var(--text); } +.cs { font-size:11px; color:var(--muted); } +.cd { width:100%; height:280px; } +.cd.s { height:200px; } -.chart-row.two { grid-template-columns: 2fr 1fr; } -.chart-row.three { grid-template-columns: 1fr 1fr 1fr; } +.metric-list { display:flex; flex-direction:column; gap:10px; margin-top:12px; } +.mi { display:flex; align-items:center; justify-content:space-between; padding:8px 0; border-bottom:1px solid var(--border); } +.mi:last-child{border-bottom:none;} +.ml { font-size:12px; color:var(--sec); flex:1; } +.mv { font-family:var(--mono); font-size:12px; font-weight:600; color:var(--text); margin:0 12px; min-width:60px; text-align:right; } +.mb { width:70px; height:4px; background:var(--border); border-radius:2px; overflow:hidden; } +.mf { height:100%; border-radius:2px; width:0; transition:width 1s var(--ease); } -.chart-card { - background: var(--bg-card); - border: 1px solid var(--border); - border-radius: 14px; - padding: 20px; - transition: border-color 0.25s; +.section-hdr { text-align:center; padding:40px 24px 20px; } +.section-hdr h2 { font-size:clamp(1.6rem,4vw,2.2rem); font-weight:800; letter-spacing:-.5px; margin-bottom:6px; } +.section-hdr p { color:var(--sec); font-size:14px; } + +@media(max-width:1024px){ + .kpi-grid{grid-template-columns:repeat(3,1fr);} + .cr2,.cr3{grid-template-columns:1fr;} } - -.chart-card:hover { border-color: var(--border-hover); } - -.chart-head { - margin-bottom: 4px; -} - -.chart-title { - font-size: 13px; - font-weight: 600; - color: var(--text); -} - -.chart-sub { - font-size: 11px; - color: var(--text-muted); -} - -.chart-dom { - width: 100%; - height: 280px; -} - -.chart-dom.small { height: 200px; } - -/* ============================================ - METRIC LIST - ============================================ */ -.metric-list { - display: flex; - flex-direction: column; - gap: 10px; - margin-top: 12px; -} - -.metric-item { - display: flex; - align-items: center; - justify-content: space-between; - padding: 8px 0; - border-bottom: 1px solid var(--border); -} - -.metric-item:last-child { border-bottom: none; } - -.metric-label { - font-size: 12px; - color: var(--text-sec); - flex: 1; -} - -.metric-val { - font-family: var(--mono); - font-size: 12px; - font-weight: 600; - color: var(--text); - margin: 0 12px; - min-width: 60px; - text-align: right; -} - -.metric-bar { - width: 70px; height: 4px; - background: var(--border); - border-radius: 2px; - overflow: hidden; -} - -.metric-fill { - height: 100%; - border-radius: 2px; - width: 0; - transition: width 1s var(--ease); -} - -/* ============================================ - SECTION HEADER - ============================================ */ -.section-header { - text-align: center; - padding: 40px 24px 20px; -} - -.section-header h2 { - font-size: clamp(1.6rem, 4vw, 2.2rem); - font-weight: 800; - letter-spacing: -0.5px; - margin-bottom: 6px; -} - -.section-header p { - color: var(--text-sec); - font-size: 14px; -} - -/* ============================================ - RESPONSIVE - ============================================ */ -@media (max-width: 1024px) { - .kpi-grid { grid-template-columns: repeat(3, 1fr); } - .chart-row.two, - .chart-row.three { grid-template-columns: 1fr; } -} - -@media (max-width: 640px) { - .kpi-grid { grid-template-columns: repeat(2, 1fr); } - .sw-btn { padding: 8px 12px; font-size: 11px; } - .sw-btn .label { display: none; } +@media(max-width:640px){ + .kpi-grid{grid-template-columns:repeat(2,1fr);} + .sw-btn{padding:8px 12px;font-size:11px;} } -
- -
-
- - Live -
-
--:--:--
+ +
+
Live
+
- -
+

Все ключевые цифры — в одном месте

-

Переключите бизнес, чтобы увидеть свой дашборд

+

Переключите бизнес — увидите свои метрики

- -
-
- - - +
+
+ + +
-
-
- - -
-
-
-
Выручка
-
12 месяцев · с трендом
-
-
+
+
+
+
-
-
-
ROI по каналам
-
Текущий период
-
-
+
+
+
- - -
-
-
-
ROMI рекламных кампаний
-
Возврат инвестиций в маркетинг
-
-
+
+
+
+
-
-
-
Воронка продаж
-
Конверсия по этапам
-
-
+
+
+
-
-
-
Выполнение плана
-
Ключевые метрики
-
+
+
Выполнение плана
Ключевые метрики
-