neuroalpha 0.5.16 → 0.5.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/admin.html +6 -4
- package/public/app.js +5 -5
- package/public/landing.html +2 -1
- package/public/legal.html +3 -2
- package/public/styles.css +23 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "neuroalpha",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.17",
|
|
4
4
|
"description": "НейроАльфа — ИИ-автопилот для рынка акций Мосбиржи: эмбеддинги акций, самообучение правил, коннекторы Т-Банк / БКС / Финам / Алор и боты Telegram / MAX",
|
|
5
5
|
"author": "Roman A. Perepelkin",
|
|
6
6
|
"license": "UNLICENSED",
|
package/public/admin.html
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
<title>Админ-консоль · НейроАльфа</title>
|
|
8
8
|
<style>
|
|
9
9
|
:root {
|
|
10
|
+
color-scheme: dark;
|
|
10
11
|
--bg: #0b0e14;
|
|
11
12
|
--panel: #131822;
|
|
12
13
|
--panel2: #18202f;
|
|
@@ -20,7 +21,8 @@
|
|
|
20
21
|
}
|
|
21
22
|
* { box-sizing: border-box; }
|
|
22
23
|
body { margin: 0; background: var(--bg); color: var(--text); font: 14px/1.55 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
|
23
|
-
a { color: var(--accent); text-decoration: none; }
|
|
24
|
+
a, a:visited { color: var(--accent); text-decoration: none; }
|
|
25
|
+
a.brand, a.brand:visited { color: var(--text); }
|
|
24
26
|
code { background: rgba(255,255,255,0.06); padding: 2px 6px; border-radius: 4px; font-size: 12.5px; color: #93c5fd; }
|
|
25
27
|
.wrap { max-width: 1180px; margin: 0 auto; padding: 24px 24px 64px; }
|
|
26
28
|
.top { display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; padding-bottom: 16px; margin-bottom: 22px; border-bottom: 1px solid var(--line); }
|
|
@@ -50,9 +52,9 @@
|
|
|
50
52
|
input:focus, select:focus { outline: none; border-color: var(--accent); }
|
|
51
53
|
input.secret-input { -webkit-text-security: disc; }
|
|
52
54
|
input.secret-input:focus { -webkit-text-security: none; }
|
|
53
|
-
button, .btn { background: var(--panel2); color: var(--text); border: 1px solid var(--line); border-radius: 7px; padding: 8px 14px; font: inherit; font-weight: 500; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; }
|
|
54
|
-
button:hover, .btn:hover { border-color: #3b4963; }
|
|
55
|
-
button.primary, .btn.primary { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
|
|
55
|
+
button, .btn, a.btn, a.btn:visited { background: var(--panel2); color: var(--text); border: 1px solid var(--line); border-radius: 7px; padding: 8px 14px; font: inherit; font-weight: 500; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; text-decoration: none; }
|
|
56
|
+
button:hover, .btn:hover, a.btn:hover { border-color: #3b4963; color: var(--text); }
|
|
57
|
+
button.primary, .btn.primary, a.btn.primary, a.btn.primary:visited { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
|
|
56
58
|
button:disabled { opacity: 0.45; cursor: default; }
|
|
57
59
|
table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
|
|
58
60
|
th, td { text-align: left; padding: 9px 10px; border-bottom: 1px solid var(--line); }
|
package/public/app.js
CHANGED
|
@@ -3590,7 +3590,7 @@ async function renderCloudPane() {
|
|
|
3590
3590
|
<div class="hint">Управление пользователями, тарифами, приёмом платежей ЮKassa, промокодами, VIP-токенами, OAuth-провайдерами и юридическими реквизитами оферты вынесено в отдельное приложение.</div>
|
|
3591
3591
|
</div>
|
|
3592
3592
|
<div class="row-gap" style="flex-wrap:wrap">
|
|
3593
|
-
<a class="btn primary" href="/admin"
|
|
3593
|
+
<a class="btn primary" href="/admin">Открыть админ-консоль (/admin) →</a>
|
|
3594
3594
|
</div>
|
|
3595
3595
|
</div>`;
|
|
3596
3596
|
} else {
|
|
@@ -3648,7 +3648,7 @@ async function renderCloudPane() {
|
|
|
3648
3648
|
<button type="button" id="btn-promo-redeem">Активировать код / VIP</button>
|
|
3649
3649
|
<button type="button" class="primary" data-checkout="investor">Тариф «Инвестор» · 3 900 ₽</button>
|
|
3650
3650
|
<button type="button" class="primary" data-checkout="pro">Тариф «Профи» · 9 900 ₽</button>
|
|
3651
|
-
<a class="btn" href="/landing#pricing"
|
|
3651
|
+
<a class="btn" href="/landing#pricing">Согласовать VIP →</a>
|
|
3652
3652
|
</div>
|
|
3653
3653
|
</div>
|
|
3654
3654
|
<div class="srow sblock">
|
|
@@ -3661,10 +3661,10 @@ async function renderCloudPane() {
|
|
|
3661
3661
|
</div>
|
|
3662
3662
|
</div>
|
|
3663
3663
|
<div class="row-gap" style="flex-wrap:wrap">
|
|
3664
|
-
${tgUrl ? `<a class="btn" href="${esc(tgUrl)}" target="_blank" rel="noopener"
|
|
3665
|
-
${maxUrl ? `<a class="btn" href="${esc(maxUrl)}" target="_blank" rel="noopener"
|
|
3664
|
+
${tgUrl ? `<a class="btn" href="${esc(tgUrl)}" target="_blank" rel="noopener">Открыть Telegram</a>` : ''}
|
|
3665
|
+
${maxUrl ? `<a class="btn" href="${esc(maxUrl)}" target="_blank" rel="noopener">Открыть MAX</a>` : ''}
|
|
3666
3666
|
<button type="button" id="btn-notify-test">Тест уведомления</button>
|
|
3667
|
-
<a class="btn" href="/legal" target="_blank"
|
|
3667
|
+
<a class="btn" href="/legal" target="_blank">Договор-оферта →</a>
|
|
3668
3668
|
</div>
|
|
3669
3669
|
</div>
|
|
3670
3670
|
${adminLinkHtml}
|
package/public/landing.html
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
<title>НейроАльфа — ИИ-автопилот для рынка акций</title>
|
|
8
8
|
<style>
|
|
9
9
|
:root {
|
|
10
|
+
color-scheme: dark;
|
|
10
11
|
--bg: #060911;
|
|
11
12
|
--bg2: #0b101d;
|
|
12
13
|
--panel: rgba(17, 24, 39, 0.72);
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
font: 16px/1.6 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
31
32
|
overflow-x: hidden;
|
|
32
33
|
}
|
|
33
|
-
a { color: inherit; text-decoration: none; }
|
|
34
|
+
a, a:visited { color: inherit; text-decoration: none; }
|
|
34
35
|
.wrap { max-width: 1200px; margin: 0 auto; padding: 0 24px; position: relative; z-index: 2; }
|
|
35
36
|
|
|
36
37
|
/* ---------- Фоновое свечение и сетка ---------- */
|
package/public/legal.html
CHANGED
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
7
7
|
<title>Правовые документы · НейроАльфа</title>
|
|
8
8
|
<style>
|
|
9
|
-
:root { --bg: #0b0e14; --panel: #131822; --line: #242c3d; --text: #eef2f6; --muted: #94a3b8; --accent: #3b82f6; }
|
|
9
|
+
:root { color-scheme: dark; --bg: #0b0e14; --panel: #131822; --line: #242c3d; --text: #eef2f6; --muted: #94a3b8; --accent: #3b82f6; }
|
|
10
10
|
* { box-sizing: border-box; }
|
|
11
11
|
body { margin: 0; background: var(--bg); color: var(--text); font: 15.5px/1.65 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
|
12
|
-
a { color: var(--accent); text-decoration: none; }
|
|
12
|
+
a, a:visited { color: var(--accent); text-decoration: none; }
|
|
13
|
+
a.brand, a.brand:visited { color: var(--text); }
|
|
13
14
|
.wrap { max-width: 900px; margin: 0 auto; padding: 36px 24px 70px; }
|
|
14
15
|
.top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 28px; padding-bottom: 16px; border-bottom: 1px solid var(--line); }
|
|
15
16
|
.brand { font-weight: 700; font-size: 19px; color: var(--text); }
|
package/public/styles.css
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/* Copyright (c) 2026 Roman A. Perepelkin. All rights reserved. Proprietary software. */
|
|
2
2
|
:root {
|
|
3
|
+
color-scheme: dark;
|
|
3
4
|
--bg: #0d1016;
|
|
4
|
-
--panel: #
|
|
5
|
-
--line: #
|
|
5
|
+
--panel: #151a24;
|
|
6
|
+
--line: #30394a;
|
|
7
|
+
--border: #30394a;
|
|
8
|
+
--bg1: #0d1016;
|
|
9
|
+
--bg2: #151a24;
|
|
6
10
|
--text: #e6edf3;
|
|
7
|
-
--muted: #
|
|
8
|
-
--accent: #
|
|
11
|
+
--muted: #9da7b8;
|
|
12
|
+
--accent: #5895ff;
|
|
9
13
|
--green: #3fb950;
|
|
10
14
|
--red: #f85149;
|
|
11
15
|
--yellow: #d29922;
|
|
@@ -13,13 +17,17 @@
|
|
|
13
17
|
--best-bg: #13241a;
|
|
14
18
|
--flash-bg: #2a1f45;
|
|
15
19
|
--chat-w: 38%;
|
|
16
|
-
--accent-bg: rgba(
|
|
17
|
-
--hover-bg: rgba(255, 255, 255, 0.
|
|
20
|
+
--accent-bg: rgba(88, 149, 255, 0.15);
|
|
21
|
+
--hover-bg: rgba(255, 255, 255, 0.06);
|
|
18
22
|
}
|
|
19
23
|
body.light {
|
|
24
|
+
color-scheme: light;
|
|
20
25
|
--bg: #f6f8fa;
|
|
21
26
|
--panel: #ffffff;
|
|
22
27
|
--line: #d0d7de;
|
|
28
|
+
--border: #d0d7de;
|
|
29
|
+
--bg1: #f6f8fa;
|
|
30
|
+
--bg2: #ffffff;
|
|
23
31
|
--text: #1f2328;
|
|
24
32
|
--muted: #57606a;
|
|
25
33
|
--accent: #2457d6;
|
|
@@ -35,6 +43,8 @@ body.light {
|
|
|
35
43
|
* { box-sizing: border-box; }
|
|
36
44
|
html, body { height: 100%; }
|
|
37
45
|
body { margin: 0; background: var(--bg); color: var(--text); font: 14px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; overflow: hidden; }
|
|
46
|
+
a, a:visited { color: var(--accent); text-decoration: none; }
|
|
47
|
+
a:hover { color: var(--accent); text-decoration: underline; }
|
|
38
48
|
.muted { color: var(--muted); }
|
|
39
49
|
.small { font-size: 12px; }
|
|
40
50
|
.grow { flex: 1; }
|
|
@@ -52,8 +62,11 @@ header { height: 48px; display: flex; justify-content: space-between; align-item
|
|
|
52
62
|
.dot.bad { background: var(--red); }
|
|
53
63
|
|
|
54
64
|
input, select, textarea { background: var(--panel); color: var(--text); border: 1px solid var(--line); border-radius: 6px; padding: 6px 8px; font: inherit; }
|
|
65
|
+
input:focus, select:focus, textarea:focus { border-color: var(--accent); outline: none; }
|
|
66
|
+
input::placeholder, textarea::placeholder { color: var(--muted); opacity: 0.82; }
|
|
67
|
+
select option, select optgroup { background: var(--panel); color: var(--text); }
|
|
55
68
|
textarea { resize: none; width: 100%; }
|
|
56
|
-
button, a.hdr-btn {
|
|
69
|
+
button, a.hdr-btn, a.hdr-btn:visited, a.btn, a.btn:visited {
|
|
57
70
|
display: inline-flex;
|
|
58
71
|
align-items: center;
|
|
59
72
|
justify-content: center;
|
|
@@ -71,10 +84,10 @@ button, a.hdr-btn {
|
|
|
71
84
|
text-decoration: none;
|
|
72
85
|
transition: background .15s, border-color .15s, color .15s;
|
|
73
86
|
}
|
|
74
|
-
button:hover:not(:disabled), a.hdr-btn:hover { border-color: var(--accent); color: var(--accent); background: var(--hover-bg); }
|
|
87
|
+
button:hover:not(:disabled), a.hdr-btn:hover, a.btn:hover { border-color: var(--accent); color: var(--accent); background: var(--hover-bg); text-decoration: none; }
|
|
75
88
|
button:disabled { opacity: .55; cursor: default; }
|
|
76
|
-
button.primary { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
|
|
77
|
-
button.primary:hover:not(:disabled) { background: var(--accent); border-color: var(--accent); color: #fff; filter: brightness(1.08); }
|
|
89
|
+
button.primary, a.btn.primary, a.btn.primary:visited { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
|
|
90
|
+
button.primary:hover:not(:disabled), a.btn.primary:hover { background: var(--accent); border-color: var(--accent); color: #fff; filter: brightness(1.08); text-decoration: none; }
|
|
78
91
|
button.icon { padding: 4px 9px; color: var(--text); background: var(--panel); border: 1px solid var(--line); }
|
|
79
92
|
button.icon-lg { width: 40px; height: 40px; padding: 0; font-size: 15px; flex: none; }
|
|
80
93
|
.hdr-btn { padding: 4px 10px; font-size: 12.5px; }
|