Files
ROMFASTSQL/proxmox/lxc171-claude-agent/discord-bridge/dashboard/static/tokens.css
Claude Agent 7abefa2b46 feat(discord-bridge): dashboard de control si restart, dupa modelul agentului echo
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
2026-08-30 13:18:38 +00:00

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);
}