Files
EveFlow/src/styles/tokens.css
T
LogiFlowandClaude 6fc38d335b feat: serveur MCP, heures calmes, mode mission, widget glanceable, barge-in (v2.4.0) (#14)
Serveur MCP local
- Endpoint /mcp (JSON-RPC 2.0, Streamable HTTP, réponses JSON) sur le serveur
  webhook : initialize, tools/list, tools/call, ping. Même secret que le
  webhook. 14 outils : capture_screen (image MCP), lock_session, open_app,
  open_url, media_key, clipboard_get/set, find_files, speak_text,
  notify_user, set_hud_state, get_app_status, get_conversation_history,
  show_message. Les outils UI transitent par IPC vers le renderer.
- Les mêmes actions système sont proposées au modèle en chat completions.

Notifications
- Heures calmes (plage horaire, franchissement de minuit), mots prioritaires,
  échecs de crons toujours lus, résumé vocal des messages entrants (n premières
  phrases), thème nuit automatique, compteur de non-lus.

Conversation
- Mode mission : bouton dans la barre de commande, second modèle Hermes
  (hermes.missionModel) pour les tâches longues.
- Barge-in : la parole de l'utilisateur coupe la voix ; seuil d'énergie et
  ratio relevés pendant la synthèse pour ignorer l'écho.

Widget compact
- Bandeau glanceable : état, dernière phrase, non-lus, indicateurs heures
  calmes et mission.

Tests : 28 tests unitaires (heures calmes, priorité, résumé), e2e Electron
sous Xvfb : MCP initialize/tools/list/tools/call (presse-papiers, capture en
image, état et message via le renderer), bandeau compact, aucune erreur.


Claude-Session: https://claude.ai/code/session_017Wn5VX9HNbJ7N54hR24u9Y

Co-authored-by: Claude <noreply@anthropic.com>
2026-09-04 00:47:34 +02:00

174 lines
4.0 KiB
CSS

:root {
--font-display: 'Orbitron', 'Rajdhani', 'Segoe UI', sans-serif;
--font-ui: 'Rajdhani', 'Segoe UI', 'Helvetica Neue', sans-serif;
--font-mono: 'Share Tech Mono', 'Cascadia Mono', 'Consolas', monospace;
--bg-0: #02060c;
--bg-1: #050c16;
--bg-2: #081422;
--bg-3: #0c1c2e;
--ink-0: #e9fbff;
--ink-1: #b9e8f5;
--ink-2: #7fb6c9;
--ink-3: #4d7d91;
--accent: #34e4ff;
--accent-rgb: 52, 228, 255;
--accent-soft: rgba(52, 228, 255, 0.14);
--accent-line: rgba(52, 228, 255, 0.32);
--accent-glow: rgba(52, 228, 255, 0.55);
--gold: #ffc35a;
--gold-rgb: 255, 195, 90;
--danger: #ff5c6c;
--danger-rgb: 255, 92, 108;
--success: #4ef0a8;
--success-rgb: 78, 240, 168;
--warn: #ffab40;
--panel: rgba(6, 16, 28, 0.72);
--panel-strong: rgba(6, 16, 28, 0.92);
--line: rgba(52, 228, 255, 0.18);
--line-strong: rgba(52, 228, 255, 0.42);
--radius: 10px;
--shadow-glow: 0 0 24px rgba(var(--accent-rgb), 0.25);
--transition: 180ms cubic-bezier(0.2, 0.7, 0.2, 1);
}
:root[data-theme='gold'] {
--accent: #ffc35a;
--accent-rgb: 255, 195, 90;
--accent-soft: rgba(255, 195, 90, 0.14);
--accent-line: rgba(255, 195, 90, 0.32);
--accent-glow: rgba(255, 195, 90, 0.55);
--line: rgba(255, 195, 90, 0.18);
--line-strong: rgba(255, 195, 90, 0.42);
--ink-1: #f6e7c8;
--ink-2: #c9ad7a;
--ink-3: #8a7247;
--bg-1: #0d0a05;
--bg-2: #171106;
--bg-3: #221a0a;
--panel: rgba(20, 14, 6, 0.72);
--panel-strong: rgba(20, 14, 6, 0.92);
}
:root[data-theme='crimson'] {
--accent: #ff5c6c;
--accent-rgb: 255, 92, 108;
--accent-soft: rgba(255, 92, 108, 0.14);
--accent-line: rgba(255, 92, 108, 0.32);
--accent-glow: rgba(255, 92, 108, 0.55);
--line: rgba(255, 92, 108, 0.18);
--line-strong: rgba(255, 92, 108, 0.42);
--ink-1: #ffd9dd;
--ink-2: #c98d95;
--ink-3: #8a4f56;
--bg-1: #0d0507;
--bg-2: #17080b;
--bg-3: #240c11;
--panel: rgba(22, 7, 10, 0.72);
--panel-strong: rgba(22, 7, 10, 0.92);
}
:root[data-theme='emerald'] {
--accent: #4ef0a8;
--accent-rgb: 78, 240, 168;
--accent-soft: rgba(78, 240, 168, 0.14);
--accent-line: rgba(78, 240, 168, 0.32);
--accent-glow: rgba(78, 240, 168, 0.55);
--line: rgba(78, 240, 168, 0.18);
--line-strong: rgba(78, 240, 168, 0.42);
--ink-1: #d3f7e6;
--ink-2: #86c4a6;
--ink-3: #4a7f66;
--bg-1: #040d09;
--bg-2: #07170f;
--bg-3: #0b2217;
--panel: rgba(5, 18, 12, 0.72);
--panel-strong: rgba(5, 18, 12, 0.92);
}
*,
*::before,
*::after {
box-sizing: border-box;
}
html,
body,
#root {
height: 100%;
margin: 0;
background: transparent;
}
body {
font-family: var(--font-ui);
font-size: 15px;
color: var(--ink-1);
-webkit-font-smoothing: antialiased;
overflow: hidden;
user-select: none;
}
button,
input,
select,
textarea {
font-family: inherit;
font-size: inherit;
color: inherit;
}
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: rgba(var(--accent-rgb), 0.25);
border-radius: 8px;
}
::-webkit-scrollbar-thumb:hover {
background: rgba(var(--accent-rgb), 0.45);
}
:root[data-motion='reduce'] *,
:root[data-motion='reduce'] *::before,
:root[data-motion='reduce'] *::after {
animation-iteration-count: 1 !important;
animation-duration: 0.001s !important;
transition-duration: 0.001s !important;
}
@media (prefers-reduced-motion: reduce) {
:root:not([data-motion='full']) *,
:root:not([data-motion='full']) *::before,
:root:not([data-motion='full']) *::after {
animation-iteration-count: 1 !important;
animation-duration: 0.001s !important;
transition-duration: 0.001s !important;
}
}
.error-banner span,
.activity-item .detail,
.row-item .desc,
.row-item .meta,
.core-sub,
.kv dd {
user-select: text;
}
/* Quiet hours: dimmer HUD, softer glow. */
:root[data-night] {
--accent-glow: rgba(var(--accent-rgb), 0.18);
}
:root[data-night] .hud-root,
:root[data-night] .compact-root {
filter: brightness(0.72) saturate(0.85);
}
:root[data-night] .core-stage canvas {
opacity: 0.8;
}