Files
site_aegisone/py_service/app/static/css/service-theme.css
T
angel 72b6879f4b v1.7.0: refactor max_bot to flat structure, add VCF+UserModel+NLP history context, portal pages and proxy fixes
- Refactored max_bot from nested packages to flat module structure
- Q2: Extended BotUser model (patronymic, email, org, address, vcf_raw, contact_hash, phone_verified, email_verified, last_interaction, total_conversations, total_tickets)
- Q2: VCF parser (FN, N, TEL, EMAIL, ORG, ADR), upsert on re-contact, NLP history context (_get_user_history_context -> YandexGPT)
- Q1: Broadcast preview modal with 10s confirmation timer
- Q3: CSS var(--white)->var(--bg-card), var(--text)->var(--text-primary)
- Q4: bot_settings showNotification(), editable max_bot_id
- Q5: Webhook secret passthrough via X-Max-Bot-Api-Secret
- Masking sensitive keys, dialog_cleared handler, migrate via _add_column_if_not_exists()
- Rate limit (asyncio.sleep 0.5 per 10), dead code removed, conv.intent context in contact.py
- Portal pages: bot_consent, bot_kb (edit), bot_settings, bot_test, bot_tickets, portal_settings
- Tests: 21/21 passing, added test_yandex_gpt.py, test_email_sender.py
- Deploy: deploy_full.sh, schema.sql, seed_knowledge_base.sql
2026-05-29 02:30:30 +03:00

165 lines
3.6 KiB
CSS

@charset "UTF-8";
:root {
--bg-body: #0D1B2A;
--bg-card: #1B2838;
--bg-card-hover: #1e3044;
--bg-sidebar: #0A1628;
--bg-input: #1e2a3e;
--border: #253248;
--border-focus: #00ADEF;
--text-primary: #E8EDF2;
--text-secondary: #A0B4C8;
--text-muted: #6B8299;
--accent: #00ADEF;
--accent-hover: #33c4f5;
--accent-dim: rgba(0, 173, 239, 0.15);
--success: #22c55e;
--warning: #f59e0b;
--danger: #ef4444;
--info: #6366f1;
--font: 'Inter', 'Segoe UI', sans-serif;
--radius: 10px;
--shadow: 0 2px 12px rgba(0,0,0,0.4);
}
[data-theme="light"] {
--bg-body: #F5F7FA;
--bg-card: #FFFFFF;
--bg-card-hover: #f0f4f8;
--bg-sidebar: #FFFFFF;
--bg-input: #FFFFFF;
--border: #e2e8f0;
--border-focus: #00ADEF;
--text-primary: #1a1a2e;
--text-secondary: #5a6a7a;
--text-muted: #8899aa;
--accent: #00ADEF;
--accent-hover: #0095cc;
--accent-dim: rgba(0, 173, 239, 0.1);
--success: #16a34a;
--warning: #d97706;
--danger: #dc2626;
--info: #4f46e5;
--shadow: 0 2px 12px rgba(10, 42, 77, 0.1);
}
[data-theme="dark"] {
--bg-body: #0D1B2A;
--bg-card: #1B2838;
--bg-card-hover: #1e3044;
--bg-sidebar: #0A1628;
--bg-input: #1e2a3e;
--border: #253248;
--border-focus: #00ADEF;
--text-primary: #E8EDF2;
--text-secondary: #A0B4C8;
--text-muted: #6B8299;
--accent: #00ADEF;
--accent-hover: #33c4f5;
--accent-dim: rgba(0, 173, 239, 0.15);
--success: #22c55e;
--warning: #f59e0b;
--danger: #ef4444;
--info: #6366f1;
--shadow: 0 2px 12px rgba(0,0,0,0.4);
}
body {
background: var(--bg-body);
color: var(--text-primary);
transition: background 0.3s, color 0.3s;
}
.theme-switcher {
display: flex;
align-items: center;
gap: 6px;
}
.theme-switcher button {
background: var(--accent-dim);
border: 1px solid var(--border);
border-radius: 6px;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 16px;
color: var(--text-secondary);
transition: all 0.2s;
}
.theme-switcher button:hover {
background: var(--accent);
color: #fff;
border-color: var(--accent);
}
/* EasyMDE dark theme overrides */
[data-theme="dark"] .EasyMDEContainer .editor-toolbar {
background: var(--bg-card);
border-color: var(--border);
}
[data-theme="dark"] .EasyMDEContainer .CodeMirror {
background: var(--bg-input);
color: var(--text-primary);
border-color: var(--border);
}
[data-theme="dark"] .editor-toolbar button {
color: var(--text-secondary);
border-color: transparent;
}
[data-theme="dark"] .editor-toolbar button:hover {
background: var(--accent-dim);
border-color: var(--accent);
color: var(--text-primary);
}
[data-theme="dark"] .editor-toolbar button.active {
background: var(--accent-dim);
border-color: var(--accent);
color: var(--accent);
}
[data-theme="dark"] .CodeMirror-cursor {
border-color: var(--accent) !important;
}
[data-theme="dark"] .CodeMirror-selected {
background: var(--accent-dim) !important;
}
[data-theme="dark"] .editor-preview {
background: var(--bg-card);
color: var(--text-primary);
}
[data-theme="dark"] .editor-preview-side {
background: var(--bg-card);
color: var(--text-primary);
border-color: var(--border);
}
[data-theme="dark"] .editor-statusbar {
color: var(--text-muted);
}
/* Sticky editor toolbar */
.EasyMDEContainer .editor-toolbar {
position: sticky;
top: 0;
z-index: 10;
background: var(--bg-card);
border-radius: var(--radius) var(--radius) 0 0;
}
/* Sticky bottom actions on edit page */
.edit-form-actions {
position: sticky;
bottom: 0;
z-index: 10;
background: var(--bg-card);
padding: 12px 0;
border-top: 1px solid var(--border);
margin-top: 8px;
}