Panou web pe 127.0.0.1:18790, unit systemd separat de al puntii. Server stdlib
(fara dependinte noi), tokenii de design si tiparul de endpoint-uri preluate din
/home/moltbot/echo-core/dashboard (handlers/eco.py) de pe LXC 110.
Arata: starea unitatii (uptime, PID, memoria cgroup, restarturi), firele din
state.json cu tur in zbor si cost, costul zilei fata de plafon, confirmarile
PreToolUse in asteptare (aprobabile direct din pagina), bot.log / infra.log si
opt verificari de diagnostic.
Face: start / stop / restart pe punte, cautarea si curatarea orfanilor prin
cleanup.py, repornirea propriului serviciu.
Garantii, cu teste:
- unitatea controlata e fixa in cod; un {"unit": "ssh.service"} in cerere nu
schimba nimic, altfel panoul ar fi systemctl remote fara parola;
- stop/restart intorc 409 cu lista firelor active si cer force explicit, fiindca
KillMode=control-group taie tururile in desfasurare;
- state.json se citeste fara lock: panoul nu are voie sa blocheze botul;
- diagnosticul pica daca reapare Bash(ssh:*) in deny (regresia de azi).
Uptime-ul se calculeaza din time.monotonic(), nu din /proc/uptime: in LXC acela
e virtualizat de lxcfs si da diferenta negativa fata de monotonic-ul systemd.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7
70 lines
1.7 KiB
CSS
70 lines
1.7 KiB
CSS
/* Tokenii de design ai dashboard-ului puntii Discord.
|
|
Aceleasi valori ca in echo-core/dashboard/DESIGN.md, ca cele doua panouri sa
|
|
arate ca facute de aceeasi mana. Tema implicita: intunecata. */
|
|
|
|
:root {
|
|
/* suprafete */
|
|
--bg-base: #13131a;
|
|
--bg-surface: rgba(255, 255, 255, 0.12);
|
|
--bg-surface-hover: rgba(255, 255, 255, 0.16);
|
|
--bg-surface-active: rgba(255, 255, 255, 0.20);
|
|
--bg-elevated: rgba(255, 255, 255, 0.14);
|
|
--header-bg: rgba(19, 19, 26, 0.95);
|
|
|
|
/* text */
|
|
--text-primary: #ffffff;
|
|
--text-secondary: #f5f5f5;
|
|
--text-muted: #b9b9c2;
|
|
|
|
/* accent + contur */
|
|
--accent: #3b82f6;
|
|
--accent-hover: #2563eb;
|
|
--accent-subtle: rgba(59, 130, 246, 0.2);
|
|
--border: rgba(255, 255, 255, 0.3);
|
|
--border-focus: rgba(59, 130, 246, 0.7);
|
|
|
|
/* semantice */
|
|
--success: #22c55e;
|
|
--warning: #eab308;
|
|
--error: #ef4444;
|
|
|
|
/* tipografie */
|
|
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
--font-mono: 'JetBrains Mono', 'Fira Code', ui-monospace, monospace;
|
|
--text-xs: 0.75rem;
|
|
--text-sm: 0.875rem;
|
|
--text-base: 1rem;
|
|
--text-lg: 1.125rem;
|
|
--text-xl: 1.25rem;
|
|
|
|
/* grila de 8px */
|
|
--space-1: 4px;
|
|
--space-2: 8px;
|
|
--space-3: 12px;
|
|
--space-4: 16px;
|
|
--space-5: 20px;
|
|
--space-6: 24px;
|
|
--space-8: 32px;
|
|
--space-10: 40px;
|
|
|
|
--radius-sm: 6px;
|
|
--radius: 10px;
|
|
--radius-lg: 14px;
|
|
}
|
|
|
|
:root[data-theme="light"] {
|
|
--bg-base: #f6f7f9;
|
|
--bg-surface: rgba(0, 0, 0, 0.045);
|
|
--bg-surface-hover: rgba(0, 0, 0, 0.07);
|
|
--bg-surface-active: rgba(0, 0, 0, 0.1);
|
|
--bg-elevated: #ffffff;
|
|
--header-bg: rgba(246, 247, 249, 0.95);
|
|
|
|
--text-primary: #14141a;
|
|
--text-secondary: #2c2c36;
|
|
--text-muted: #5c5c6b;
|
|
|
|
--border: rgba(0, 0, 0, 0.16);
|
|
--border-focus: rgba(59, 130, 246, 0.6);
|
|
}
|