@javierfrancoleal/dsh-supervisor 1.0.3 → 1.0.4

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.
Files changed (3) hide show
  1. package/dashboard.html +14 -14
  2. package/package.json +1 -1
  3. package/panel.html +13 -13
package/dashboard.html CHANGED
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <meta name="theme-color" content="#4D6BFE">
7
- <title>Veilleux — Dashboard</title>
7
+ <title>Le Veilleux — Dashboard</title>
8
8
  <style>
9
9
  :root{--blue:#4D6BFE;--green:#22c55e;--amber:#facc15;--red:#ef4444;--ink:#101828;--muted:#667085;--bg:#f6f7fb;--card:#fff;--card2:var(--card2);--line:var(--line);--line2:var(--line2)}
10
10
  body.dark{--ink:#e6ecf7;--muted:#94a3b8;--bg:#0b1220;--card:#141f31;--card2:#18253a;--line:#26334d;--line2:#26334d}
@@ -116,7 +116,7 @@ body.wall pre{max-height:40vh}
116
116
  </head>
117
117
  <body>
118
118
  <header>
119
- <h1 id="appTitle">🏢 Veilleux</h1>
119
+ <h1 id="appTitle"><svg width="26" height="26" viewBox="0 0 64 64" aria-hidden="true"><path d="M10 33c6.5-11 13-16 22-16s15.5 5 22 16c-6.5 11-13 16-22 16S16.5 44 10 33z" fill="none" stroke="#ffffff" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/><path d="M32 24c4.2 4.2 6.2 7.4 6.2 10.4a6.2 6.2 0 1 1-12.4 0c0-3 2-6.2 6.2-10.4z" fill="#FACC15"/></svg> <span style="vertical-align:5px">Le Veilleux</span></h1>
120
120
  <span class="who" id="who"></span>
121
121
  <span class="chip" id="idChip" style="display:none"></span>
122
122
  <button class="btn small gray" id="darkBtn">🌙</button>
@@ -126,8 +126,8 @@ body.wall pre{max-height:40vh}
126
126
  <main>
127
127
  <div id="loginView" class="card" style="max-width:440px;margin:26px auto">
128
128
  <div class="loginbrand">
129
- <div class="mark">🏢</div>
130
- <h2>Veilleux</h2>
129
+ <div class="mark" style="background:none;box-shadow:none"><svg width="64" height="64" viewBox="0 0 64 64" aria-hidden="true"><rect width="64" height="64" rx="16" fill="url(#lg)" style="display:none"/><rect width="64" height="64" rx="16" fill="#4D6BFE"/><path d="M10 33c6.5-11 13-16 22-16s15.5 5 22 16c-6.5 11-13 16-22 16S16.5 44 10 33z" fill="none" stroke="#ffffff" stroke-width="4.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M32 24c4.2 4.2 6.2 7.4 6.2 10.4a6.2 6.2 0 1 1-12.4 0c0-3 2-6.2 6.2-10.4z" fill="#FACC15"/></svg></div>
130
+ <h2>Le Veilleux</h2>
131
131
  <p id="tagline">The AI works. The human decides.</p>
132
132
  </div>
133
133
  <h2 id="loginTitle" style="font-size:14px;color:var(--muted);text-align:center">Log in</h2>
@@ -269,16 +269,16 @@ body.wall pre{max-height:40vh}
269
269
  "use strict";
270
270
  const LANG={es:"ES",en:"EN",fr:"FR",de:"DE",it:"IT",pt:"PT",zh:"中文",ja:"日本語",ko:"한국어",ar:"العربية"};
271
271
  const S={
272
- en:{login:"Log in",user:"User",password:"Password",loginBtn:"Log in",loginHint:"Accounts are managed by the business owner.",loginFailed:"Login failed.",cannotReach:"Cannot reach the supervisor server. Is it running?",workerAdded:"Worker added.",saved:"Saved.",reportSent:"Report sent.",feedbackSent:"Feedback sent.",wallOpen:"Live wallboard",logout:"Log out",overview:"Overview",field:"Field",rules:"Rules",reports:"Reports",week:"This week",feedback:"Feedback",workersActive:"Workers active",reportsTotal:"Reports total",workers:"Workers",thUser:"User",thRole:"Role",addWorker:"Add worker",userName:"User name",addBtn:"Add worker",usage:"Usage & cost",usageSub:"(per worker, estimated)",thWorker:"Worker",thSessions:"Sessions",thTokens:"Tokens",thCost:"Est. cost",panel:"Action Panel",panelNote:"Workers open the panel from their tablet or phone.",openPanel:"Open Action Panel",fieldReports:"Field reports",feedbackQueue:"Feedback queue",feedbackHint:"The agent reads this queue and resolves errors and improvements.",refresh:"Refresh",autoOn:"Auto-refresh: ON",autoOff:"Auto-refresh: OFF",rulesTitle:"Business rules",rulesHint:"These rules train the traffic light.",saveRules:"Save rules",listen:"🎙️ LISTEN",hi:"👋 ",reportTitle:"Field report",reportPh:"What happened on your shift?",sendReport:"Send report",fbTitle:"Field feedback",fbPh:"What happened? What should improve?",sendFeedback:"Send feedback",switchUser:"Switch user",wallHead:"🏭 Veilleux — Live",wallPulse:"Field pulse",noActivity:"(no field activity yet)",start:"▶ START",listening:"Listening… speak now",listeningHint:"The conversation is being captured and split by person.",stopListening:"⏹ Stop listening",summaryTitle:"Conversation summary",confirm:"Confirm ✓",confirmed:"Confirmed ✓",sentNote:"Sent to kitchen & central",newConv:"New conversation",ordersTitle:"Orders — kitchen & bill",person:"Person",noSummary:"The summary will appear here as the conversation is detected.",prep:"Preparing",ready:"Ready",delivered:"Delivered",sent:"Sent",back:"Back",sayPh:"Speak or type what each person said…",sendPhrase:"Send phrase",dictate:"🎙️ Dictate",aiHint:"Speech and text go straight to the AI — the summary appears automatically.",micUnsupported:"Dictation not supported in this browser",processing:"The AI is summarizing…",sectorTab:"Sector",sectorPresets:"Sector presets",customSector:"Custom sector",saveSector:"Save sector",sectorSaved:"Sector saved.",aiSuggest:"Suggest with AI (copy prompt)",aiSectorCopied:"AI prompt copied — paste it in DeepSeek Harness.",fillBoth:"Enter your user and password.",loggingIn:"Logging in…",noOrders:"No orders yet — confirm items in the summary.",noUsage:"No usage reported yet.",noReports:"No field reports yet.",lvlEmployee:"Field",lvlLead:"Supervisor",lvlOwner:"Owner",labelPh:"Role label (e.g. Cook)",newOrder:"NEW ORDER",enableNotif:"🔔 Enable notifications",notifHint:"The kitchen tablet beeps and flashes when an order arrives.",tagline:"The AI works. The human watches, decides, reviews."},
273
- es:{login:"Iniciar sesión",user:"Usuario",password:"Contraseña",loginBtn:"Entrar",loginHint:"Las cuentas las gestiona el dueño del negocio.",loginFailed:"Datos incorrectos.",cannotReach:"No se puede contactar el servidor. ¿Está corriendo?",workerAdded:"Trabajador añadido.",saved:"Guardado.",reportSent:"Reporte enviado.",feedbackSent:"Feedback enviado.",wallOpen:"Wallboard en vivo",logout:"Salir",overview:"Resumen",field:"Campo",rules:"Reglas",reports:"Reportes",week:"Esta semana",feedback:"Feedback",workersActive:"Trabajadores activos",reportsTotal:"Reportes totales",workers:"Trabajadores",thUser:"Usuario",thRole:"Rol",addWorker:"Añadir trabajador",userName:"Nombre de usuario",addBtn:"Añadir trabajador",usage:"Uso y coste",usageSub:"(por trabajador, estimado)",thWorker:"Trabajador",thSessions:"Sesiones",thTokens:"Tokens",thCost:"Coste est.",panel:"Panel de Acción",panelNote:"Los trabajadores abren el panel desde su tablet o teléfono.",openPanel:"Abrir Panel de Acción",fieldReports:"Reportes de campo",feedbackQueue:"Cola de feedback",feedbackHint:"El agente lee esta cola y resuelve errores y mejoras.",refresh:"Actualizar",autoOn:"Auto: ON",autoOff:"Auto: OFF",rulesTitle:"Reglas del negocio",rulesHint:"Estas reglas entrenan el semáforo.",saveRules:"Guardar reglas",listen:"🎙️ ESCUCHAR",hi:"👋 ",reportTitle:"Reporte de campo",reportPh:"¿Qué pasó en tu turno?",sendReport:"Enviar reporte",fbTitle:"Feedback de campo",fbPh:"¿Qué pasó? ¿Qué debe mejorar?",sendFeedback:"Enviar feedback",switchUser:"Cambiar de usuario",wallHead:"🏭 Veilleux — En vivo",wallPulse:"Pulso del campo",noActivity:"(sin actividad de campo aún)",start:"▶ INICIAR",listening:"Escuchando… habla ahora",listeningHint:"La conversación se captura y divide por persona.",stopListening:"⏹ Detener",summaryTitle:"Resumen de la conversación",confirm:"Confirmar ✓",confirmed:"Confirmado ✓",sentNote:"Enviado a cocina y central",newConv:"Nueva conversación",ordersTitle:"Pedidos — cocina y cuenta",person:"Persona",noSummary:"El resumen aparecerá aquí conforme se detecta la conversación.",prep:"Preparando",ready:"Listo",delivered:"Entregado",sent:"Enviado",back:"Volver",sayPh:"Habla o escribe lo que dijo cada persona…",sendPhrase:"Enviar frase",dictate:"🎙️ Dictar",aiHint:"Voz y texto van directo a la IA — el resumen aparece solo.",micUnsupported:"Dictado no soportado en este navegador",processing:"La IA está resumiendo…",sectorTab:"Sector",sectorPresets:"Sectores predefinidos",customSector:"Sector personalizado",saveSector:"Guardar sector",sectorSaved:"Sector guardado.",aiSuggest:"Sugerir con IA (copiar prompt)",aiSectorCopied:"Prompt de IA copiado — pégalo en DeepSeek Harness.",fillBoth:"Escribe tu usuario y contraseña.",loggingIn:"Entrando…",noOrders:"Aún no hay pedidos — confirma elementos en el resumen.",noUsage:"Aún no hay uso reportado.",noReports:"Aún no hay reportes de campo.",lvlEmployee:"Terreno",lvlLead:"Supervisor",lvlOwner:"Dueño",labelPh:"Etiqueta de rol (ej. Cocinero)",newOrder:"NUEVO PEDIDO",enableNotif:"🔔 Activar notificaciones",notifHint:"La tablet de cocina suena y parpadea cuando llega un pedido.",tagline:"La IA trabaja. El humano vela, decide, revisa."},
274
- fr:{login:"Connexion",user:"Utilisateur",password:"Mot de passe",loginBtn:"Se connecter",loginHint:"Les comptes sont gérés par le propriétaire.",loginFailed:"Échec de connexion.",cannotReach:"Serveur injoignable. Est-il lancé ?",workerAdded:"Employé ajouté.",saved:"Enregistré.",reportSent:"Rapport envoyé.",feedbackSent:"Feedback envoyé.",wallOpen:"Tableau en direct",logout:"Déconnexion",overview:"Vue d'ensemble",field:"Terrain",rules:"Règles",reports:"Rapports",week:"Cette semaine",feedback:"Feedback",workersActive:"Employés actifs",reportsTotal:"Total rapports",workers:"Employés",thUser:"Utilisateur",thRole:"Rôle",addWorker:"Ajouter un employé",userName:"Nom d'utilisateur",addBtn:"Ajouter",usage:"Usage et coût",usageSub:"(par employé, estimé)",thWorker:"Employé",thSessions:"Sessions",thTokens:"Jetons",thCost:"Coût est.",panel:"Panneau d'action",panelNote:"Les employés ouvrent le panneau depuis leur tablette ou téléphone.",openPanel:"Ouvrir le panneau",fieldReports:"Rapports terrain",feedbackQueue:"File de feedback",feedbackHint:"L'agent lit cette file et résout erreurs et améliorations.",refresh:"Actualiser",autoOn:"Auto : ON",autoOff:"Auto : OFF",rulesTitle:"Règles du commerce",rulesHint:"Ces règles entraînent le feu tricolore.",saveRules:"Enregistrer",listen:"🎙️ ÉCOUTER",hi:"👋 ",reportTitle:"Rapport terrain",reportPh:"Que s'est-il passé pendant votre quart ?",sendReport:"Envoyer",fbTitle:"Feedback terrain",fbPh:"Que s'est-il passé ? Que faut-il améliorer ?",sendFeedback:"Envoyer",switchUser:"Changer d'utilisateur",wallHead:"🏭 Veilleux — En direct",wallPulse:"Pouls du terrain",noActivity:"(aucune activité)",start:"▶ DÉMARRER",listening:"Écoute… parlez maintenant",listeningHint:"La conversation est captée et répartie par personne.",stopListening:"⏹ Arrêter",summaryTitle:"Résumé de la conversation",confirm:"Confirmer ✓",confirmed:"Confirmé ✓",sentNote:"Envoyé en cuisine et au central",newConv:"Nouvelle conversation",ordersTitle:"Commandes — cuisine et addition",person:"Personne",noSummary:"Le résumé apparaîtra ici au fil de la conversation.",prep:"En préparation",ready:"Prêt",delivered:"Servi",sent:"Envoyé",back:"Retour",sayPh:"Parlez ou écrivez ce que chaque personne a dit…",sendPhrase:"Envoyer",dictate:"🎙️ Dicter",aiHint:"La voix et le texte vont directement à l’IA — le résumé apparaît seul.",micUnsupported:"Dictée non prise en charge",processing:"L’IA résume…",sectorTab:"Secteur",sectorPresets:"Secteurs prédéfinis",customSector:"Secteur personnalisé",saveSector:"Enregistrer le secteur",sectorSaved:"Secteur enregistré.",aiSuggest:"Suggérer avec l’IA (copier l’invite)",aiSectorCopied:"Invite copiée — collez-la dans DeepSeek Harness.",fillBoth:"Saisissez votre utilisateur et votre mot de passe.",loggingIn:"Connexion…",noOrders:"Aucune commande — confirmez des éléments dans le résumé.",noUsage:"Aucun usage signalé.",noReports:"Aucun rapport terrain.",lvlEmployee:"Terrain",lvlLead:"Superviseur",lvlOwner:"Propriétaire",labelPh:"Intitulé du rôle (ex. Cuisinier)",newOrder:"NOUVELLE COMMANDE",enableNotif:"🔔 Activer les notifications",notifHint:"La tablette de cuisine sonne et clignote à l'arrivée d'une commande.",tagline:"L'IA travaille. L'humain veille, décide, revoit."},
275
- de:{login:"Anmelden",user:"Benutzer",password:"Passwort",loginBtn:"Anmelden",loginHint:"Konten verwaltet der Inhaber.",loginFailed:"Anmeldung fehlgeschlagen.",cannotReach:"Server nicht erreichbar. Läuft er?",workerAdded:"Mitarbeiter hinzugefügt.",saved:"Gespeichert.",reportSent:"Bericht gesendet.",feedbackSent:"Feedback gesendet.",wallOpen:"Live-Anzeige",logout:"Abmelden",overview:"Übersicht",field:"Feld",rules:"Regeln",reports:"Berichte",week:"Diese Woche",feedback:"Feedback",workersActive:"Aktive Mitarbeiter",reportsTotal:"Berichte gesamt",workers:"Mitarbeiter",thUser:"Benutzer",thRole:"Rolle",addWorker:"Mitarbeiter hinzufügen",userName:"Benutzername",addBtn:"Hinzufügen",usage:"Nutzung & Kosten",usageSub:"(pro Mitarbeiter, geschätzt)",thWorker:"Mitarbeiter",thSessions:"Sitzungen",thTokens:"Tokens",thCost:"Kosten ca.",panel:"Aktionspanel",panelNote:"Mitarbeiter öffnen das Panel auf Tablet oder Handy.",openPanel:"Panel öffnen",fieldReports:"Feldberichte",feedbackQueue:"Feedback-Warteschlange",feedbackHint:"Der Agent liest diese Warteschlange und behebt Fehler.",refresh:"Aktualisieren",autoOn:"Auto: AN",autoOff:"Auto: AUS",rulesTitle:"Geschäftsregeln",rulesHint:"Diese Regeln trainieren die Ampel.",saveRules:"Regeln speichern",listen:"🎙️ ZUHÖREN",hi:"👋 ",reportTitle:"Feldbericht",reportPh:"Was ist in Ihrer Schicht passiert?",sendReport:"Senden",fbTitle:"Feld-Feedback",fbPh:"Was ist passiert? Was soll besser werden?",sendFeedback:"Senden",switchUser:"Benutzer wechseln",wallHead:"🏭 Veilleux — Live",wallPulse:"Puls im Feld",noActivity:"(noch keine Aktivität)",start:"▶ STARTEN",listening:"Höre zu… sprich jetzt",listeningHint:"Das Gespräch wird erfasst und pro Person aufgeteilt.",stopListening:"⏹ Stopp",summaryTitle:"Gesprächsübersicht",confirm:"Bestätigen ✓",confirmed:"Bestätigt ✓",sentNote:"An Küche & Zentrale gesendet",newConv:"Neues Gespräch",ordersTitle:"Bestellungen — Küche & Rechnung",person:"Person",noSummary:"Die Übersicht erscheint hier, sobald das Gespräch erkannt wird.",prep:"In Zubereitung",ready:"Fertig",delivered:"Serviert",sent:"Gesendet",back:"Zurück",sayPh:"Sprechen oder tippen Sie, was jede Person gesagt hat…",sendPhrase:"Senden",dictate:"🎙️ Diktieren",aiHint:"Sprache und Text gehen direkt an die KI — die Übersicht erscheint automatisch.",micUnsupported:"Diktat nicht unterstützt",processing:"Die KI fasst zusammen…",sectorTab:"Branche",sectorPresets:"Branchen-Vorlagen",customSector:"Eigene Branche",saveSector:"Branche speichern",sectorSaved:"Branche gespeichert.",aiSuggest:"Mit KI vorschlagen (Prompt kopieren)",aiSectorCopied:"KI-Prompt kopiert — in DeepSeek Harness einfügen.",fillBoth:"Benutzer und Passwort eingeben.",loggingIn:"Anmeldung…",noOrders:"Noch keine Bestellungen — Elemente in der Übersicht bestätigen.",noUsage:"Noch keine Nutzung gemeldet.",noReports:"Noch keine Feldberichte.",lvlEmployee:"Feld",lvlLead:"Aufsicht",lvlOwner:"Inhaber",labelPh:"Rollenname (z. B. Koch)",newOrder:"NEUE BESTELLUNG",enableNotif:"🔔 Benachrichtigungen aktivieren",notifHint:"Das Küchen-Tablet piept und blinkt bei neuer Bestellung.",tagline:"Die KI arbeitet. Der Mensch wacht, entscheidet, prüft."},
276
- it:{login:"Accedi",user:"Utente",password:"Password",loginBtn:"Accedi",loginHint:"Gli account li gestisce il proprietario.",loginFailed:"Accesso fallito.",cannotReach:"Server non raggiungibile. È in esecuzione?",workerAdded:"Lavoratore aggiunto.",saved:"Salvato.",reportSent:"Report inviato.",feedbackSent:"Feedback inviato.",wallOpen:"Schermo live",logout:"Esci",overview:"Panoramica",field:"Campo",rules:"Regole",reports:"Report",week:"Questa settimana",feedback:"Feedback",workersActive:"Lavoratori attivi",reportsTotal:"Report totali",workers:"Lavoratori",thUser:"Utente",thRole:"Ruolo",addWorker:"Aggiungi lavoratore",userName:"Nome utente",addBtn:"Aggiungi",usage:"Uso e costi",usageSub:"(per lavoratore, stimato)",thWorker:"Lavoratore",thSessions:"Sessioni",thTokens:"Token",thCost:"Costo stim.",panel:"Pannello Azioni",panelNote:"I lavoratori aprono il pannello da tablet o telefono.",openPanel:"Apri il pannello",fieldReports:"Report di campo",feedbackQueue:"Coda feedback",feedbackHint:"L'agente legge questa coda e risolve errori e migliorie.",refresh:"Aggiorna",autoOn:"Auto: ON",autoOff:"Auto: OFF",rulesTitle:"Regole del negozio",rulesHint:"Queste regole addestrano il semaforo.",saveRules:"Salva regole",listen:"🎙️ ASCOLTA",hi:"👋 ",reportTitle:"Report di campo",reportPh:"Cosa è successo nel tuo turno?",sendReport:"Invia",fbTitle:"Feedback di campo",fbPh:"Cosa è successo? Cosa va migliorato?",sendFeedback:"Invia",switchUser:"Cambia utente",wallHead:"🏭 Veilleux — Live",wallPulse:"Battito del campo",noActivity:"(nessuna attività)",start:"▶ INIZIA",listening:"In ascolto… parla ora",listeningHint:"La conversazione viene catturata e divisa per persona.",stopListening:"⏹ Ferma",summaryTitle:"Riepilogo conversazione",confirm:"Conferma ✓",confirmed:"Confermato ✓",sentNote:"Inviato a cucina e centrale",newConv:"Nuova conversazione",ordersTitle:"Ordini — cucina e conto",person:"Persona",noSummary:"Il riepilogo apparirà qui man mano che la conversazione viene rilevata.",prep:"In preparazione",ready:"Pronto",delivered:"Servito",sent:"Inviato",back:"Indietro",sayPh:"Parla o scrivi cosa ha detto ogni persona…",sendPhrase:"Invia",dictate:"🎙️ Detta",aiHint:"Voce e testo vanno direttamente all’IA — il riepilogo appare da solo.",micUnsupported:"Dettatura non supportata",processing:"L’IA sta riassumendo…",sectorTab:"Settore",sectorPresets:"Settori predefiniti",customSector:"Settore personalizzato",saveSector:"Salva settore",sectorSaved:"Settore salvato.",aiSuggest:"Suggerisci con l’IA (copia prompt)",aiSectorCopied:"Prompt copiato — incollalo in DeepSeek Harness.",fillBoth:"Inserisci utente e password.",loggingIn:"Accesso…",noOrders:"Ancora nessun ordine — conferma elementi nel riepilogo.",noUsage:"Nessun utilizzo segnalato.",noReports:"Nessun report di campo.",lvlEmployee:"Terreno",lvlLead:"Supervisore",lvlOwner:"Proprietario",labelPh:"Etichetta ruolo (es. Cuoco)",newOrder:"NUOVO ORDINE",enableNotif:"🔔 Attiva notifiche",notifHint:"Il tablet di cucina suona e lampeggia all'arrivo di un ordine.",tagline:"L'IA lavora. L'umano veglia, decide, rivede."},
277
- pt:{login:"Entrar",user:"Usuário",password:"Senha",loginBtn:"Entrar",loginHint:"As contas são geridas pelo dono.",loginFailed:"Falha no login.",cannotReach:"Servidor inacessível. Está a correr?",workerAdded:"Trabalhador adicionado.",saved:"Guardado.",reportSent:"Relatório enviado.",feedbackSent:"Feedback enviado.",wallOpen:"Painel ao vivo",logout:"Sair",overview:"Visão geral",field:"Campo",rules:"Regras",reports:"Relatórios",week:"Esta semana",feedback:"Feedback",workersActive:"Trabalhadores ativos",reportsTotal:"Total de relatórios",workers:"Trabalhadores",thUser:"Usuário",thRole:"Função",addWorker:"Adicionar trabalhador",userName:"Nome de usuário",addBtn:"Adicionar",usage:"Uso e custo",usageSub:"(por trabalhador, estimado)",thWorker:"Trabalhador",thSessions:"Sessões",thTokens:"Tokens",thCost:"Custo est.",panel:"Painel de Ação",panelNote:"Os trabalhadores abrem o painel no tablet ou telemóvel.",openPanel:"Abrir painel",fieldReports:"Relatórios de campo",feedbackQueue:"Fila de feedback",feedbackHint:"O agente lê esta fila e resolve erros e melhorias.",refresh:"Atualizar",autoOn:"Auto: ON",autoOff:"Auto: OFF",rulesTitle:"Regras do negócio",rulesHint:"Estas regras treinam o semáforo.",saveRules:"Guardar regras",listen:"🎙️ OUVIR",hi:"👋 ",reportTitle:"Relatório de campo",reportPh:"O que aconteceu no seu turno?",sendReport:"Enviar",fbTitle:"Feedback de campo",fbPh:"O que aconteceu? O que deve melhorar?",sendFeedback:"Enviar",switchUser:"Trocar de usuário",wallHead:"🏭 Veilleux — Ao vivo",wallPulse:"Pulso do campo",noActivity:"(sem atividade)",start:"▶ INICIAR",listening:"A ouvir… fale agora",listeningHint:"A conversa é captada e dividida por pessoa.",stopListening:"⏹ Parar",summaryTitle:"Resumo da conversa",confirm:"Confirmar ✓",confirmed:"Confirmado ✓",sentNote:"Enviado para cozinha e central",newConv:"Nova conversa",ordersTitle:"Pedidos — cozinha e conta",person:"Pessoa",noSummary:"O resumo aparece aqui conforme a conversa é detetada.",prep:"A preparar",ready:"Pronto",delivered:"Entregue",sent:"Enviado",back:"Voltar",sayPh:"Fale ou escreva o que cada pessoa disse…",sendPhrase:"Enviar",dictate:"🎙️ Ditar",aiHint:"Voz e texto vão direto à IA — o resumo aparece sozinho.",micUnsupported:"Ditado não suportado",processing:"A IA está a resumir…",sectorTab:"Setor",sectorPresets:"Setores predefinidos",customSector:"Sector personalizado",saveSector:"Guardar setor",sectorSaved:"Setor guardado.",aiSuggest:"Sugerir com IA (copiar prompt)",aiSectorCopied:"Prompt copiado — cole no DeepSeek Harness.",fillBoth:"Digite usuário e senha.",loggingIn:"A entrar…",noOrders:"Ainda sem pedidos — confirme itens no resumo.",noUsage:"Ainda sem uso reportado.",noReports:"Ainda sem relatórios de campo.",lvlEmployee:"Terreno",lvlLead:"Supervisor",lvlOwner:"Dono",labelPh:"Função (ex. Cozinheiro)",newOrder:"NOVO PEDIDO",enableNotif:"🔔 Ativar notificações",notifHint:"O tablet da cozinha apita e pisca quando chega um pedido.",tagline:"A IA trabalha. O humano vela, decide, revê."},
278
- zh:{login:"登录",user:"用户",password:"密码",loginBtn:"登录",loginHint:"账户由企业主管理。",loginFailed:"登录失败。",cannotReach:"无法连接服务器。它是否在运行?",workerAdded:"员工已添加。",saved:"已保存。",reportSent:"报告已发送。",feedbackSent:"反馈已发送。",wallOpen:"实时看板",logout:"退出",overview:"总览",field:"现场",rules:"规则",reports:"报告",week:"本周",feedback:"反馈",workersActive:"活跃员工",reportsTotal:"报告总数",workers:"员工",thUser:"用户",thRole:"角色",addWorker:"添加员工",userName:"用户名",addBtn:"添加",usage:"用量与成本",usageSub:"(每位员工,估算)",thWorker:"员工",thSessions:"会话",thTokens:"Token",thCost:"预估成本",panel:"操作面板",panelNote:"员工在平板或手机上打开面板。",openPanel:"打开面板",fieldReports:"现场报告",feedbackQueue:"反馈队列",feedbackHint:"智能体读取此队列并解决问题。",refresh:"刷新",autoOn:"自动:开",autoOff:"自动:关",rulesTitle:"业务规则",rulesHint:"这些规则训练红绿灯。",saveRules:"保存规则",listen:"🎙️ 聆听",hi:"👋 ",reportTitle:"现场报告",reportPh:"你的班次发生了什么?",sendReport:"发送",fbTitle:"现场反馈",fbPh:"发生了什么?什么需要改进?",sendFeedback:"发送",switchUser:"切换用户",wallHead:"🏭 Veilleux — 实时",wallPulse:"现场脉搏",noActivity:"(暂无现场活动)",start:"▶ 开始",listening:"正在聆听…请说话",listeningHint:"对话正在被捕捉并按人员划分。",stopListening:"⏹ 停止",summaryTitle:"对话摘要",confirm:"确认 ✓",confirmed:"已确认 ✓",sentNote:"已发送至厨房与中央系统",newConv:"新对话",ordersTitle:"订单 — 厨房与账单",person:"人员",noSummary:"随着对话被识别,摘要将显示在这里。",prep:"制作中",ready:"完成",delivered:"已送达",sent:"已发送",back:"返回",sayPh:"说出或输入每个人说的话……",sendPhrase:"发送",dictate:"🎙️ 听写",aiHint:"语音和文字直达 AI — 摘要自动出现。",micUnsupported:"此浏览器不支持听写",processing:"AI 正在总结……",sectorTab:"行业",sectorPresets:"预设行业",customSector:"自定义行业",saveSector:"保存行业",sectorSaved:"行业已保存。",aiSuggest:"用 AI 建议(复制提示)",aiSectorCopied:"AI 提示已复制 — 粘贴到 DeepSeek Harness。",fillBoth:"请输入用户名和密码。",loggingIn:"登录中……",noOrders:"暂无订单 — 请在摘要中确认项目。",noUsage:"暂无用量报告。",noReports:"暂无现场报告。",lvlEmployee:"现场",lvlLead:"主管",lvlOwner:"业主",labelPh:"角色标签(如:厨师)",newOrder:"新订单",enableNotif:"🔔 开启通知",notifHint:"新订单到达时厨房平板会响铃并闪烁。",tagline:"AI 工作,人来守护、决定、复核。"},
279
- ja:{login:"ログイン",user:"ユーザー",password:"パスワード",loginBtn:"ログイン",loginHint:"アカウントは事業主が管理します。",loginFailed:"ログイン失敗。",cannotReach:"サーバーに接続できません。起動していますか?",workerAdded:"従業員を追加しました。",saved:"保存しました。",reportSent:"報告を送信しました。",feedbackSent:"フィードバックを送信しました。",wallOpen:"ライブ掲示板",logout:"ログアウト",overview:"概要",field:"現場",rules:"ルール",reports:"報告",week:"今週",feedback:"フィードバック",workersActive:"稼働中の従業員",reportsTotal:"報告総数",workers:"従業員",thUser:"ユーザー",thRole:"役割",addWorker:"従業員を追加",userName:"ユーザー名",addBtn:"追加",usage:"利用量とコスト",usageSub:"(従業員ごと、推定)",thWorker:"従業員",thSessions:"セッション",thTokens:"トークン",thCost:"推定コスト",panel:"アクションパネル",panelNote:"従業員はタブレットやスマホでパネルを開きます。",openPanel:"パネルを開く",fieldReports:"現場報告",feedbackQueue:"フィードバック待ち行列",feedbackHint:"エージェントがこの行列を読み、問題を解決します。",refresh:"更新",autoOn:"自動: ON",autoOff:"自動: OFF",rulesTitle:"業務ルール",rulesHint:"これらのルールが信号を訓練します。",saveRules:"ルールを保存",listen:"🎙️ 聞く",hi:"👋 ",reportTitle:"現場報告",reportPh:"シフトで何がありましたか?",sendReport:"送信",fbTitle:"現場フィードバック",fbPh:"何が起きましたか?何を改善すべき?",sendFeedback:"送信",switchUser:"ユーザー切替",wallHead:"🏭 Veilleux — ライブ",wallPulse:"現場の鼓動",noActivity:"(まだ現場活動なし)",start:"▶ 開始",listening:"聞いています…どうぞ",listeningHint:"会話を捕捉し、人物ごとに分けています。",stopListening:"⏹ 停止",summaryTitle:"会話のまとめ",confirm:"確認 ✓",confirmed:"確認済み ✓",sentNote:"厨房と中央へ送信済み",newConv:"新しい会話",ordersTitle:"注文 — 厨房と会計",person:"人",noSummary:"会話が検出されるとここにまとめが表示されます。",prep:"調理中",ready:"完成",delivered:"提供済み",sent:"送信済み",back:"戻る",sayPh:"各人が話した内容を話すか入力…",sendPhrase:"送信",dictate:"🎙️ 音声入力",aiHint:"音声とテキストは直接AIへ — まとめは自動で表示されます。",micUnsupported:"音声入力非対応",processing:"AIが要約中…",sectorTab:"セクター",sectorPresets:"セクタープリセット",customSector:"カスタムセクター",saveSector:"セクターを保存",sectorSaved:"セクターを保存しました。",aiSuggest:"AIで提案(プロンプトをコピー)",aiSectorCopied:"AIプロンプトをコピーしました — DeepSeek Harnessに貼り付け。",fillBoth:"ユーザーとパスワードを入力してください。",loggingIn:"ログイン中…",noOrders:"まだ注文がありません — まとめで項目を確認してください。",noUsage:"まだ利用報告がありません。",noReports:"まだ現場報告がありません。",lvlEmployee:"現場",lvlLead:"監督",lvlOwner:"オーナー",labelPh:"役割名(例:調理師)",newOrder:"新規注文",enableNotif:"🔔 通知を有効化",notifHint:"注文が届くと厨房タブレットが音と点滅で知らせます。",tagline:"AIが働き、人間が見守り、決め、見直す。"},
280
- ko:{login:"로그인",user:"사용자",password:"비밀번호",loginBtn:"로그인",loginHint:"계정은 사업주가 관리합니다.",loginFailed:"로그인 실패.",cannotReach:"서버에 연결할 수 없습니다. 실행 중인가요?",workerAdded:"직원이 추가되었습니다.",saved:"저장되었습니다.",reportSent:"보고서를 보냈습니다.",feedbackSent:"피드백을 보냈습니다.",wallOpen:"라이브 보드",logout:"로그아웃",overview:"개요",field:"현장",rules:"규칙",reports:"보고서",week:"이번 주",feedback:"피드백",workersActive:"활성 직원",reportsTotal:"총 보고서",workers:"직원",thUser:"사용자",thRole:"역할",addWorker:"직원 추가",userName:"사용자 이름",addBtn:"추가",usage:"사용량 및 비용",usageSub:"(직원별, 추정)",thWorker:"직원",thSessions:"세션",thTokens:"토큰",thCost:"추정 비용",panel:"액션 패널",panelNote:"직원은 태블릿이나 휴대폰에서 패널을 엽니다.",openPanel:"패널 열기",fieldReports:"현장 보고서",feedbackQueue:"피드백 대기열",feedbackHint:"에이전트가 이 대기열을 읽고 문제를 해결합니다.",refresh:"새로고침",autoOn:"자동: ON",autoOff:"자동: OFF",rulesTitle:"사업 규칙",rulesHint:"이 규칙이 신호등을 훈련합니다.",saveRules:"규칙 저장",listen:"🎙️ 듣기",hi:"👋 ",reportTitle:"현장 보고서",reportPh:"근무 중 무슨 일이 있었나요?",sendReport:"보내기",fbTitle:"현장 피드백",fbPh:"무슨 일이 있었나요? 무엇을 개선할까요?",sendFeedback:"보내기",switchUser:"사용자 전환",wallHead:"🏭 Veilleux — 라이브",wallPulse:"현장의 맥박",noActivity:"(현장 활동 없음)",start:"▶ 시작",listening:"듣는 중… 말씀하세요",listeningHint:"대화를 포착하여 사람별로 나누고 있습니다.",stopListening:"⏹ 중지",summaryTitle:"대화 요약",confirm:"확인 ✓",confirmed:"확인됨 ✓",sentNote:"주방 및 중앙으로 전송됨",newConv:"새 대화",ordersTitle:"주문 — 주방 및 계산",person:"사람",noSummary:"대화가 감지되면 요약이 여기에 표시됩니다.",prep:"조리 중",ready:"완료",delivered:"서빙됨",sent:"전송됨",back:"뒤로",sayPh:"각 사람이 말한 내용을 말하거나 입력…",sendPhrase:"보내기",dictate:"🎙️ 받아쓰기",aiHint:"음성과 텍스트가 AI로 바로 전달 — 요약이 자동 표시됩니다.",micUnsupported:"받아쓰기 미지원",processing:"AI가 요약 중…",sectorTab:"업종",sectorPresets:"업종 프리셋",customSector:"사용자 정의 업종",saveSector:"업종 저장",sectorSaved:"업종이 저장되었습니다.",aiSuggest:"AI로 제안(프롬프트 복사)",aiSectorCopied:"AI 프롬프트 복사됨 — DeepSeek Harness에 붙여넣기.",fillBoth:"사용자와 비밀번호를 입력하세요.",loggingIn:"로그인 중…",noOrders:"아직 주문이 없습니다 — 요약에서 항목을 확인하세요.",noUsage:"아직 사용 보고가 없습니다.",noReports:"아직 현장 보고서가 없습니다.",lvlEmployee:"현장",lvlLead:"감독",lvlOwner:"소유주",labelPh:"역할 이름(예: 요리사)",newOrder:"새 주문",enableNotif:"🔔 알림 활성화",notifHint:"주문이 도착하면 주방 태블릿이 소리와 함께 깜박입니다.",tagline:"AI가 일하고 사람이 지키고, 결정하고, 검토합니다."},
281
- ar:{login:"تسجيل الدخول",user:"المستخدم",password:"كلمة المرور",loginBtn:"دخول",loginHint:"الحسابات يديرها صاحب العمل.",loginFailed:"فشل تسجيل الدخول.",cannotReach:"تعذر الوصول إلى الخادم. هل هو قيد التشغيل؟",workerAdded:"تمت إضافة الموظف.",saved:"تم الحفظ.",reportSent:"تم إرسال التقرير.",feedbackSent:"تم إرسال الملاحظات.",wallOpen:"اللوحة المباشرة",logout:"خروج",overview:"نظرة عامة",field:"الميدان",rules:"القواعد",reports:"التقارير",week:"هذا الأسبوع",feedback:"الملاحظات",workersActive:"موظفون نشطون",reportsTotal:"إجمالي التقارير",workers:"الموظفون",thUser:"المستخدم",thRole:"الدور",addWorker:"إضافة موظف",userName:"اسم المستخدم",addBtn:"إضافة",usage:"الاستخدام والتكلفة",usageSub:"(لكل موظف، تقديري)",thWorker:"الموظف",thSessions:"الجلسات",thTokens:"الرموز",thCost:"التكلفة التقديرية",panel:"لوحة الإجراءات",panelNote:"يفتح الموظفون اللوحة من أجهزتهم.",openPanel:"فتح اللوحة",fieldReports:"تقارير الميدان",feedbackQueue:"قائمة الملاحظات",feedbackHint:"يقرأ الوكيل هذه القائمة ويحل المشكلات.",refresh:"تحديث",autoOn:"تلقائي: ON",autoOff:"تلقائي: OFF",rulesTitle:"قواعد العمل",rulesHint:"هذه القواعد تدرّب الإشارة الضوئية.",saveRules:"حفظ القواعد",listen:"🎙️ استمع",hi:"👋 ",reportTitle:"تقرير ميداني",reportPh:"ماذا حدث في نوبتك؟",sendReport:"إرسال",fbTitle:"ملاحظات ميدانية",fbPh:"ماذا حدث؟ ما الذي يجب تحسينه؟",sendFeedback:"إرسال",switchUser:"تبديل المستخدم",wallHead:"🏭 Veilleux — مباشر",wallPulse:"نبض الميدان",noActivity:"(لا نشاط بعد)",start:"▶ ابدأ",listening:"أستمع… تفضل بالحديث",listeningHint:"يتم التقاط المحادثة وتقسيمها حسب الأشخاص.",stopListening:"⏹ إيقاف",summaryTitle:"ملخص المحادثة",confirm:"تأكيد ✓",confirmed:"مؤكد ✓",sentNote:"أُرسل إلى المطبخ والنظام المركزي",newConv:"محادثة جديدة",ordersTitle:"الطلبات — المطبخ والحساب",person:"شخص",noSummary:"سيظهر الملخص هنا مع اكتشاف المحادثة.",prep:"قيد التحضير",ready:"جاهز",delivered:"تم التسليم",sent:"أُرسل",back:"رجوع",sayPh:"تحدث أو اكتب ما قاله كل شخص…",sendPhrase:"إرسال",dictate:"🎙️ إملاء",aiHint:"الصوت والنص يصلان مباشرة إلى الذكاء الاصطناعي — يظهر الملخص تلقائيًا.",micUnsupported:"الإملاء غير مدعوم",processing:"الذكاء الاصطناعي يلخّص…",sectorTab:"القطاع",sectorPresets:"القطاعات المحددة مسبقًا",customSector:"قطاع مخصص",saveSector:"حفظ القطاع",sectorSaved:"تم حفظ القطاع.",aiSuggest:"اقترح بالذكاء الاصطناعي (نسخ الموجه)",aiSectorCopied:"تم نسخ الموجه — الصقه في DeepSeek Harness.",fillBoth:"أدخل المستخدم وكلمة المرور.",loggingIn:"جارٍ الدخول…",noOrders:"لا توجد طلبات بعد — أكّد العناصر في الملخص.",noUsage:"لا يوجد استخدام مُبلّغ بعد.",noReports:"لا توجد تقارير ميدانية بعد.",lvlEmployee:"الميدان",lvlLead:"مشرف",lvlOwner:"المالك",labelPh:"مسمى الدور (مثال: طباخ)",newOrder:"طلب جديد",enableNotif:"🔔 تفعيل الإشعارات",notifHint:"يصدر صوت ويومض لوح المطبخ عند وصول طلب جديد.",tagline:"الذكاء الاصطناعي يعمل، والإنسان يراقب ويقرر ويراجع."}
272
+ en:{login:"Log in",user:"User",password:"Password",loginBtn:"Log in",loginHint:"Accounts are managed by the business owner.",loginFailed:"Login failed.",cannotReach:"Cannot reach the supervisor server. Is it running?",workerAdded:"Worker added.",saved:"Saved.",reportSent:"Report sent.",feedbackSent:"Feedback sent.",wallOpen:"Live wallboard",logout:"Log out",overview:"Overview",field:"Field",rules:"Rules",reports:"Reports",week:"This week",feedback:"Feedback",workersActive:"Workers active",reportsTotal:"Reports total",workers:"Workers",thUser:"User",thRole:"Role",addWorker:"Add worker",userName:"User name",addBtn:"Add worker",usage:"Usage & cost",usageSub:"(per worker, estimated)",thWorker:"Worker",thSessions:"Sessions",thTokens:"Tokens",thCost:"Est. cost",panel:"Action Panel",panelNote:"Workers open the panel from their tablet or phone.",openPanel:"Open Action Panel",fieldReports:"Field reports",feedbackQueue:"Feedback queue",feedbackHint:"The agent reads this queue and resolves errors and improvements.",refresh:"Refresh",autoOn:"Auto-refresh: ON",autoOff:"Auto-refresh: OFF",rulesTitle:"Business rules",rulesHint:"These rules train the traffic light.",saveRules:"Save rules",listen:"🎙️ LISTEN",hi:"👋 ",reportTitle:"Field report",reportPh:"What happened on your shift?",sendReport:"Send report",fbTitle:"Field feedback",fbPh:"What happened? What should improve?",sendFeedback:"Send feedback",switchUser:"Switch user",wallHead:"🏭 Le Veilleux — Live",wallPulse:"Field pulse",noActivity:"(no field activity yet)",start:"▶ START",listening:"Listening… speak now",listeningHint:"The conversation is being captured and split by person.",stopListening:"⏹ Stop listening",summaryTitle:"Conversation summary",confirm:"Confirm ✓",confirmed:"Confirmed ✓",sentNote:"Sent to kitchen & central",newConv:"New conversation",ordersTitle:"Orders — kitchen & bill",person:"Person",noSummary:"The summary will appear here as the conversation is detected.",prep:"Preparing",ready:"Ready",delivered:"Delivered",sent:"Sent",back:"Back",sayPh:"Speak or type what each person said…",sendPhrase:"Send phrase",dictate:"🎙️ Dictate",aiHint:"Speech and text go straight to the AI — the summary appears automatically.",micUnsupported:"Dictation not supported in this browser",processing:"The AI is summarizing…",sectorTab:"Sector",sectorPresets:"Sector presets",customSector:"Custom sector",saveSector:"Save sector",sectorSaved:"Sector saved.",aiSuggest:"Suggest with AI (copy prompt)",aiSectorCopied:"AI prompt copied — paste it in DeepSeek Harness.",fillBoth:"Enter your user and password.",loggingIn:"Logging in…",noOrders:"No orders yet — confirm items in the summary.",noUsage:"No usage reported yet.",noReports:"No field reports yet.",lvlEmployee:"Field",lvlLead:"Supervisor",lvlOwner:"Owner",labelPh:"Role label (e.g. Cook)",newOrder:"NEW ORDER",enableNotif:"🔔 Enable notifications",notifHint:"The kitchen tablet beeps and flashes when an order arrives.",tagline:"The AI works. The human watches, decides, reviews."},
273
+ es:{login:"Iniciar sesión",user:"Usuario",password:"Contraseña",loginBtn:"Entrar",loginHint:"Las cuentas las gestiona el dueño del negocio.",loginFailed:"Datos incorrectos.",cannotReach:"No se puede contactar el servidor. ¿Está corriendo?",workerAdded:"Trabajador añadido.",saved:"Guardado.",reportSent:"Reporte enviado.",feedbackSent:"Feedback enviado.",wallOpen:"Wallboard en vivo",logout:"Salir",overview:"Resumen",field:"Campo",rules:"Reglas",reports:"Reportes",week:"Esta semana",feedback:"Feedback",workersActive:"Trabajadores activos",reportsTotal:"Reportes totales",workers:"Trabajadores",thUser:"Usuario",thRole:"Rol",addWorker:"Añadir trabajador",userName:"Nombre de usuario",addBtn:"Añadir trabajador",usage:"Uso y coste",usageSub:"(por trabajador, estimado)",thWorker:"Trabajador",thSessions:"Sesiones",thTokens:"Tokens",thCost:"Coste est.",panel:"Panel de Acción",panelNote:"Los trabajadores abren el panel desde su tablet o teléfono.",openPanel:"Abrir Panel de Acción",fieldReports:"Reportes de campo",feedbackQueue:"Cola de feedback",feedbackHint:"El agente lee esta cola y resuelve errores y mejoras.",refresh:"Actualizar",autoOn:"Auto: ON",autoOff:"Auto: OFF",rulesTitle:"Reglas del negocio",rulesHint:"Estas reglas entrenan el semáforo.",saveRules:"Guardar reglas",listen:"🎙️ ESCUCHAR",hi:"👋 ",reportTitle:"Reporte de campo",reportPh:"¿Qué pasó en tu turno?",sendReport:"Enviar reporte",fbTitle:"Feedback de campo",fbPh:"¿Qué pasó? ¿Qué debe mejorar?",sendFeedback:"Enviar feedback",switchUser:"Cambiar de usuario",wallHead:"🏭 Le Veilleux — En vivo",wallPulse:"Pulso del campo",noActivity:"(sin actividad de campo aún)",start:"▶ INICIAR",listening:"Escuchando… habla ahora",listeningHint:"La conversación se captura y divide por persona.",stopListening:"⏹ Detener",summaryTitle:"Resumen de la conversación",confirm:"Confirmar ✓",confirmed:"Confirmado ✓",sentNote:"Enviado a cocina y central",newConv:"Nueva conversación",ordersTitle:"Pedidos — cocina y cuenta",person:"Persona",noSummary:"El resumen aparecerá aquí conforme se detecta la conversación.",prep:"Preparando",ready:"Listo",delivered:"Entregado",sent:"Enviado",back:"Volver",sayPh:"Habla o escribe lo que dijo cada persona…",sendPhrase:"Enviar frase",dictate:"🎙️ Dictar",aiHint:"Voz y texto van directo a la IA — el resumen aparece solo.",micUnsupported:"Dictado no soportado en este navegador",processing:"La IA está resumiendo…",sectorTab:"Sector",sectorPresets:"Sectores predefinidos",customSector:"Sector personalizado",saveSector:"Guardar sector",sectorSaved:"Sector guardado.",aiSuggest:"Sugerir con IA (copiar prompt)",aiSectorCopied:"Prompt de IA copiado — pégalo en DeepSeek Harness.",fillBoth:"Escribe tu usuario y contraseña.",loggingIn:"Entrando…",noOrders:"Aún no hay pedidos — confirma elementos en el resumen.",noUsage:"Aún no hay uso reportado.",noReports:"Aún no hay reportes de campo.",lvlEmployee:"Terreno",lvlLead:"Supervisor",lvlOwner:"Dueño",labelPh:"Etiqueta de rol (ej. Cocinero)",newOrder:"NUEVO PEDIDO",enableNotif:"🔔 Activar notificaciones",notifHint:"La tablet de cocina suena y parpadea cuando llega un pedido.",tagline:"La IA trabaja. El humano vela, decide, revisa."},
274
+ fr:{login:"Connexion",user:"Utilisateur",password:"Mot de passe",loginBtn:"Se connecter",loginHint:"Les comptes sont gérés par le propriétaire.",loginFailed:"Échec de connexion.",cannotReach:"Serveur injoignable. Est-il lancé ?",workerAdded:"Employé ajouté.",saved:"Enregistré.",reportSent:"Rapport envoyé.",feedbackSent:"Feedback envoyé.",wallOpen:"Tableau en direct",logout:"Déconnexion",overview:"Vue d'ensemble",field:"Terrain",rules:"Règles",reports:"Rapports",week:"Cette semaine",feedback:"Feedback",workersActive:"Employés actifs",reportsTotal:"Total rapports",workers:"Employés",thUser:"Utilisateur",thRole:"Rôle",addWorker:"Ajouter un employé",userName:"Nom d'utilisateur",addBtn:"Ajouter",usage:"Usage et coût",usageSub:"(par employé, estimé)",thWorker:"Employé",thSessions:"Sessions",thTokens:"Jetons",thCost:"Coût est.",panel:"Panneau d'action",panelNote:"Les employés ouvrent le panneau depuis leur tablette ou téléphone.",openPanel:"Ouvrir le panneau",fieldReports:"Rapports terrain",feedbackQueue:"File de feedback",feedbackHint:"L'agent lit cette file et résout erreurs et améliorations.",refresh:"Actualiser",autoOn:"Auto : ON",autoOff:"Auto : OFF",rulesTitle:"Règles du commerce",rulesHint:"Ces règles entraînent le feu tricolore.",saveRules:"Enregistrer",listen:"🎙️ ÉCOUTER",hi:"👋 ",reportTitle:"Rapport terrain",reportPh:"Que s'est-il passé pendant votre quart ?",sendReport:"Envoyer",fbTitle:"Feedback terrain",fbPh:"Que s'est-il passé ? Que faut-il améliorer ?",sendFeedback:"Envoyer",switchUser:"Changer d'utilisateur",wallHead:"🏭 Le Veilleux — En direct",wallPulse:"Pouls du terrain",noActivity:"(aucune activité)",start:"▶ DÉMARRER",listening:"Écoute… parlez maintenant",listeningHint:"La conversation est captée et répartie par personne.",stopListening:"⏹ Arrêter",summaryTitle:"Résumé de la conversation",confirm:"Confirmer ✓",confirmed:"Confirmé ✓",sentNote:"Envoyé en cuisine et au central",newConv:"Nouvelle conversation",ordersTitle:"Commandes — cuisine et addition",person:"Personne",noSummary:"Le résumé apparaîtra ici au fil de la conversation.",prep:"En préparation",ready:"Prêt",delivered:"Servi",sent:"Envoyé",back:"Retour",sayPh:"Parlez ou écrivez ce que chaque personne a dit…",sendPhrase:"Envoyer",dictate:"🎙️ Dicter",aiHint:"La voix et le texte vont directement à l’IA — le résumé apparaît seul.",micUnsupported:"Dictée non prise en charge",processing:"L’IA résume…",sectorTab:"Secteur",sectorPresets:"Secteurs prédéfinis",customSector:"Secteur personnalisé",saveSector:"Enregistrer le secteur",sectorSaved:"Secteur enregistré.",aiSuggest:"Suggérer avec l’IA (copier l’invite)",aiSectorCopied:"Invite copiée — collez-la dans DeepSeek Harness.",fillBoth:"Saisissez votre utilisateur et votre mot de passe.",loggingIn:"Connexion…",noOrders:"Aucune commande — confirmez des éléments dans le résumé.",noUsage:"Aucun usage signalé.",noReports:"Aucun rapport terrain.",lvlEmployee:"Terrain",lvlLead:"Superviseur",lvlOwner:"Propriétaire",labelPh:"Intitulé du rôle (ex. Cuisinier)",newOrder:"NOUVELLE COMMANDE",enableNotif:"🔔 Activer les notifications",notifHint:"La tablette de cuisine sonne et clignote à l'arrivée d'une commande.",tagline:"L'IA travaille. L'humain veille, décide, revoit."},
275
+ de:{login:"Anmelden",user:"Benutzer",password:"Passwort",loginBtn:"Anmelden",loginHint:"Konten verwaltet der Inhaber.",loginFailed:"Anmeldung fehlgeschlagen.",cannotReach:"Server nicht erreichbar. Läuft er?",workerAdded:"Mitarbeiter hinzugefügt.",saved:"Gespeichert.",reportSent:"Bericht gesendet.",feedbackSent:"Feedback gesendet.",wallOpen:"Live-Anzeige",logout:"Abmelden",overview:"Übersicht",field:"Feld",rules:"Regeln",reports:"Berichte",week:"Diese Woche",feedback:"Feedback",workersActive:"Aktive Mitarbeiter",reportsTotal:"Berichte gesamt",workers:"Mitarbeiter",thUser:"Benutzer",thRole:"Rolle",addWorker:"Mitarbeiter hinzufügen",userName:"Benutzername",addBtn:"Hinzufügen",usage:"Nutzung & Kosten",usageSub:"(pro Mitarbeiter, geschätzt)",thWorker:"Mitarbeiter",thSessions:"Sitzungen",thTokens:"Tokens",thCost:"Kosten ca.",panel:"Aktionspanel",panelNote:"Mitarbeiter öffnen das Panel auf Tablet oder Handy.",openPanel:"Panel öffnen",fieldReports:"Feldberichte",feedbackQueue:"Feedback-Warteschlange",feedbackHint:"Der Agent liest diese Warteschlange und behebt Fehler.",refresh:"Aktualisieren",autoOn:"Auto: AN",autoOff:"Auto: AUS",rulesTitle:"Geschäftsregeln",rulesHint:"Diese Regeln trainieren die Ampel.",saveRules:"Regeln speichern",listen:"🎙️ ZUHÖREN",hi:"👋 ",reportTitle:"Feldbericht",reportPh:"Was ist in Ihrer Schicht passiert?",sendReport:"Senden",fbTitle:"Feld-Feedback",fbPh:"Was ist passiert? Was soll besser werden?",sendFeedback:"Senden",switchUser:"Benutzer wechseln",wallHead:"🏭 Le Veilleux — Live",wallPulse:"Puls im Feld",noActivity:"(noch keine Aktivität)",start:"▶ STARTEN",listening:"Höre zu… sprich jetzt",listeningHint:"Das Gespräch wird erfasst und pro Person aufgeteilt.",stopListening:"⏹ Stopp",summaryTitle:"Gesprächsübersicht",confirm:"Bestätigen ✓",confirmed:"Bestätigt ✓",sentNote:"An Küche & Zentrale gesendet",newConv:"Neues Gespräch",ordersTitle:"Bestellungen — Küche & Rechnung",person:"Person",noSummary:"Die Übersicht erscheint hier, sobald das Gespräch erkannt wird.",prep:"In Zubereitung",ready:"Fertig",delivered:"Serviert",sent:"Gesendet",back:"Zurück",sayPh:"Sprechen oder tippen Sie, was jede Person gesagt hat…",sendPhrase:"Senden",dictate:"🎙️ Diktieren",aiHint:"Sprache und Text gehen direkt an die KI — die Übersicht erscheint automatisch.",micUnsupported:"Diktat nicht unterstützt",processing:"Die KI fasst zusammen…",sectorTab:"Branche",sectorPresets:"Branchen-Vorlagen",customSector:"Eigene Branche",saveSector:"Branche speichern",sectorSaved:"Branche gespeichert.",aiSuggest:"Mit KI vorschlagen (Prompt kopieren)",aiSectorCopied:"KI-Prompt kopiert — in DeepSeek Harness einfügen.",fillBoth:"Benutzer und Passwort eingeben.",loggingIn:"Anmeldung…",noOrders:"Noch keine Bestellungen — Elemente in der Übersicht bestätigen.",noUsage:"Noch keine Nutzung gemeldet.",noReports:"Noch keine Feldberichte.",lvlEmployee:"Feld",lvlLead:"Aufsicht",lvlOwner:"Inhaber",labelPh:"Rollenname (z. B. Koch)",newOrder:"NEUE BESTELLUNG",enableNotif:"🔔 Benachrichtigungen aktivieren",notifHint:"Das Küchen-Tablet piept und blinkt bei neuer Bestellung.",tagline:"Die KI arbeitet. Der Mensch wacht, entscheidet, prüft."},
276
+ it:{login:"Accedi",user:"Utente",password:"Password",loginBtn:"Accedi",loginHint:"Gli account li gestisce il proprietario.",loginFailed:"Accesso fallito.",cannotReach:"Server non raggiungibile. È in esecuzione?",workerAdded:"Lavoratore aggiunto.",saved:"Salvato.",reportSent:"Report inviato.",feedbackSent:"Feedback inviato.",wallOpen:"Schermo live",logout:"Esci",overview:"Panoramica",field:"Campo",rules:"Regole",reports:"Report",week:"Questa settimana",feedback:"Feedback",workersActive:"Lavoratori attivi",reportsTotal:"Report totali",workers:"Lavoratori",thUser:"Utente",thRole:"Ruolo",addWorker:"Aggiungi lavoratore",userName:"Nome utente",addBtn:"Aggiungi",usage:"Uso e costi",usageSub:"(per lavoratore, stimato)",thWorker:"Lavoratore",thSessions:"Sessioni",thTokens:"Token",thCost:"Costo stim.",panel:"Pannello Azioni",panelNote:"I lavoratori aprono il pannello da tablet o telefono.",openPanel:"Apri il pannello",fieldReports:"Report di campo",feedbackQueue:"Coda feedback",feedbackHint:"L'agente legge questa coda e risolve errori e migliorie.",refresh:"Aggiorna",autoOn:"Auto: ON",autoOff:"Auto: OFF",rulesTitle:"Regole del negozio",rulesHint:"Queste regole addestrano il semaforo.",saveRules:"Salva regole",listen:"🎙️ ASCOLTA",hi:"👋 ",reportTitle:"Report di campo",reportPh:"Cosa è successo nel tuo turno?",sendReport:"Invia",fbTitle:"Feedback di campo",fbPh:"Cosa è successo? Cosa va migliorato?",sendFeedback:"Invia",switchUser:"Cambia utente",wallHead:"🏭 Le Veilleux — Live",wallPulse:"Battito del campo",noActivity:"(nessuna attività)",start:"▶ INIZIA",listening:"In ascolto… parla ora",listeningHint:"La conversazione viene catturata e divisa per persona.",stopListening:"⏹ Ferma",summaryTitle:"Riepilogo conversazione",confirm:"Conferma ✓",confirmed:"Confermato ✓",sentNote:"Inviato a cucina e centrale",newConv:"Nuova conversazione",ordersTitle:"Ordini — cucina e conto",person:"Persona",noSummary:"Il riepilogo apparirà qui man mano che la conversazione viene rilevata.",prep:"In preparazione",ready:"Pronto",delivered:"Servito",sent:"Inviato",back:"Indietro",sayPh:"Parla o scrivi cosa ha detto ogni persona…",sendPhrase:"Invia",dictate:"🎙️ Detta",aiHint:"Voce e testo vanno direttamente all’IA — il riepilogo appare da solo.",micUnsupported:"Dettatura non supportata",processing:"L’IA sta riassumendo…",sectorTab:"Settore",sectorPresets:"Settori predefiniti",customSector:"Settore personalizzato",saveSector:"Salva settore",sectorSaved:"Settore salvato.",aiSuggest:"Suggerisci con l’IA (copia prompt)",aiSectorCopied:"Prompt copiato — incollalo in DeepSeek Harness.",fillBoth:"Inserisci utente e password.",loggingIn:"Accesso…",noOrders:"Ancora nessun ordine — conferma elementi nel riepilogo.",noUsage:"Nessun utilizzo segnalato.",noReports:"Nessun report di campo.",lvlEmployee:"Terreno",lvlLead:"Supervisore",lvlOwner:"Proprietario",labelPh:"Etichetta ruolo (es. Cuoco)",newOrder:"NUOVO ORDINE",enableNotif:"🔔 Attiva notifiche",notifHint:"Il tablet di cucina suona e lampeggia all'arrivo di un ordine.",tagline:"L'IA lavora. L'umano veglia, decide, rivede."},
277
+ pt:{login:"Entrar",user:"Usuário",password:"Senha",loginBtn:"Entrar",loginHint:"As contas são geridas pelo dono.",loginFailed:"Falha no login.",cannotReach:"Servidor inacessível. Está a correr?",workerAdded:"Trabalhador adicionado.",saved:"Guardado.",reportSent:"Relatório enviado.",feedbackSent:"Feedback enviado.",wallOpen:"Painel ao vivo",logout:"Sair",overview:"Visão geral",field:"Campo",rules:"Regras",reports:"Relatórios",week:"Esta semana",feedback:"Feedback",workersActive:"Trabalhadores ativos",reportsTotal:"Total de relatórios",workers:"Trabalhadores",thUser:"Usuário",thRole:"Função",addWorker:"Adicionar trabalhador",userName:"Nome de usuário",addBtn:"Adicionar",usage:"Uso e custo",usageSub:"(por trabalhador, estimado)",thWorker:"Trabalhador",thSessions:"Sessões",thTokens:"Tokens",thCost:"Custo est.",panel:"Painel de Ação",panelNote:"Os trabalhadores abrem o painel no tablet ou telemóvel.",openPanel:"Abrir painel",fieldReports:"Relatórios de campo",feedbackQueue:"Fila de feedback",feedbackHint:"O agente lê esta fila e resolve erros e melhorias.",refresh:"Atualizar",autoOn:"Auto: ON",autoOff:"Auto: OFF",rulesTitle:"Regras do negócio",rulesHint:"Estas regras treinam o semáforo.",saveRules:"Guardar regras",listen:"🎙️ OUVIR",hi:"👋 ",reportTitle:"Relatório de campo",reportPh:"O que aconteceu no seu turno?",sendReport:"Enviar",fbTitle:"Feedback de campo",fbPh:"O que aconteceu? O que deve melhorar?",sendFeedback:"Enviar",switchUser:"Trocar de usuário",wallHead:"🏭 Le Veilleux — Ao vivo",wallPulse:"Pulso do campo",noActivity:"(sem atividade)",start:"▶ INICIAR",listening:"A ouvir… fale agora",listeningHint:"A conversa é captada e dividida por pessoa.",stopListening:"⏹ Parar",summaryTitle:"Resumo da conversa",confirm:"Confirmar ✓",confirmed:"Confirmado ✓",sentNote:"Enviado para cozinha e central",newConv:"Nova conversa",ordersTitle:"Pedidos — cozinha e conta",person:"Pessoa",noSummary:"O resumo aparece aqui conforme a conversa é detetada.",prep:"A preparar",ready:"Pronto",delivered:"Entregue",sent:"Enviado",back:"Voltar",sayPh:"Fale ou escreva o que cada pessoa disse…",sendPhrase:"Enviar",dictate:"🎙️ Ditar",aiHint:"Voz e texto vão direto à IA — o resumo aparece sozinho.",micUnsupported:"Ditado não suportado",processing:"A IA está a resumir…",sectorTab:"Setor",sectorPresets:"Setores predefinidos",customSector:"Sector personalizado",saveSector:"Guardar setor",sectorSaved:"Setor guardado.",aiSuggest:"Sugerir com IA (copiar prompt)",aiSectorCopied:"Prompt copiado — cole no DeepSeek Harness.",fillBoth:"Digite usuário e senha.",loggingIn:"A entrar…",noOrders:"Ainda sem pedidos — confirme itens no resumo.",noUsage:"Ainda sem uso reportado.",noReports:"Ainda sem relatórios de campo.",lvlEmployee:"Terreno",lvlLead:"Supervisor",lvlOwner:"Dono",labelPh:"Função (ex. Cozinheiro)",newOrder:"NOVO PEDIDO",enableNotif:"🔔 Ativar notificações",notifHint:"O tablet da cozinha apita e pisca quando chega um pedido.",tagline:"A IA trabalha. O humano vela, decide, revê."},
278
+ zh:{login:"登录",user:"用户",password:"密码",loginBtn:"登录",loginHint:"账户由企业主管理。",loginFailed:"登录失败。",cannotReach:"无法连接服务器。它是否在运行?",workerAdded:"员工已添加。",saved:"已保存。",reportSent:"报告已发送。",feedbackSent:"反馈已发送。",wallOpen:"实时看板",logout:"退出",overview:"总览",field:"现场",rules:"规则",reports:"报告",week:"本周",feedback:"反馈",workersActive:"活跃员工",reportsTotal:"报告总数",workers:"员工",thUser:"用户",thRole:"角色",addWorker:"添加员工",userName:"用户名",addBtn:"添加",usage:"用量与成本",usageSub:"(每位员工,估算)",thWorker:"员工",thSessions:"会话",thTokens:"Token",thCost:"预估成本",panel:"操作面板",panelNote:"员工在平板或手机上打开面板。",openPanel:"打开面板",fieldReports:"现场报告",feedbackQueue:"反馈队列",feedbackHint:"智能体读取此队列并解决问题。",refresh:"刷新",autoOn:"自动:开",autoOff:"自动:关",rulesTitle:"业务规则",rulesHint:"这些规则训练红绿灯。",saveRules:"保存规则",listen:"🎙️ 聆听",hi:"👋 ",reportTitle:"现场报告",reportPh:"你的班次发生了什么?",sendReport:"发送",fbTitle:"现场反馈",fbPh:"发生了什么?什么需要改进?",sendFeedback:"发送",switchUser:"切换用户",wallHead:"🏭 Le Veilleux — 实时",wallPulse:"现场脉搏",noActivity:"(暂无现场活动)",start:"▶ 开始",listening:"正在聆听…请说话",listeningHint:"对话正在被捕捉并按人员划分。",stopListening:"⏹ 停止",summaryTitle:"对话摘要",confirm:"确认 ✓",confirmed:"已确认 ✓",sentNote:"已发送至厨房与中央系统",newConv:"新对话",ordersTitle:"订单 — 厨房与账单",person:"人员",noSummary:"随着对话被识别,摘要将显示在这里。",prep:"制作中",ready:"完成",delivered:"已送达",sent:"已发送",back:"返回",sayPh:"说出或输入每个人说的话……",sendPhrase:"发送",dictate:"🎙️ 听写",aiHint:"语音和文字直达 AI — 摘要自动出现。",micUnsupported:"此浏览器不支持听写",processing:"AI 正在总结……",sectorTab:"行业",sectorPresets:"预设行业",customSector:"自定义行业",saveSector:"保存行业",sectorSaved:"行业已保存。",aiSuggest:"用 AI 建议(复制提示)",aiSectorCopied:"AI 提示已复制 — 粘贴到 DeepSeek Harness。",fillBoth:"请输入用户名和密码。",loggingIn:"登录中……",noOrders:"暂无订单 — 请在摘要中确认项目。",noUsage:"暂无用量报告。",noReports:"暂无现场报告。",lvlEmployee:"现场",lvlLead:"主管",lvlOwner:"业主",labelPh:"角色标签(如:厨师)",newOrder:"新订单",enableNotif:"🔔 开启通知",notifHint:"新订单到达时厨房平板会响铃并闪烁。",tagline:"AI 工作,人来守护、决定、复核。"},
279
+ ja:{login:"ログイン",user:"ユーザー",password:"パスワード",loginBtn:"ログイン",loginHint:"アカウントは事業主が管理します。",loginFailed:"ログイン失敗。",cannotReach:"サーバーに接続できません。起動していますか?",workerAdded:"従業員を追加しました。",saved:"保存しました。",reportSent:"報告を送信しました。",feedbackSent:"フィードバックを送信しました。",wallOpen:"ライブ掲示板",logout:"ログアウト",overview:"概要",field:"現場",rules:"ルール",reports:"報告",week:"今週",feedback:"フィードバック",workersActive:"稼働中の従業員",reportsTotal:"報告総数",workers:"従業員",thUser:"ユーザー",thRole:"役割",addWorker:"従業員を追加",userName:"ユーザー名",addBtn:"追加",usage:"利用量とコスト",usageSub:"(従業員ごと、推定)",thWorker:"従業員",thSessions:"セッション",thTokens:"トークン",thCost:"推定コスト",panel:"アクションパネル",panelNote:"従業員はタブレットやスマホでパネルを開きます。",openPanel:"パネルを開く",fieldReports:"現場報告",feedbackQueue:"フィードバック待ち行列",feedbackHint:"エージェントがこの行列を読み、問題を解決します。",refresh:"更新",autoOn:"自動: ON",autoOff:"自動: OFF",rulesTitle:"業務ルール",rulesHint:"これらのルールが信号を訓練します。",saveRules:"ルールを保存",listen:"🎙️ 聞く",hi:"👋 ",reportTitle:"現場報告",reportPh:"シフトで何がありましたか?",sendReport:"送信",fbTitle:"現場フィードバック",fbPh:"何が起きましたか?何を改善すべき?",sendFeedback:"送信",switchUser:"ユーザー切替",wallHead:"🏭 Le Veilleux — ライブ",wallPulse:"現場の鼓動",noActivity:"(まだ現場活動なし)",start:"▶ 開始",listening:"聞いています…どうぞ",listeningHint:"会話を捕捉し、人物ごとに分けています。",stopListening:"⏹ 停止",summaryTitle:"会話のまとめ",confirm:"確認 ✓",confirmed:"確認済み ✓",sentNote:"厨房と中央へ送信済み",newConv:"新しい会話",ordersTitle:"注文 — 厨房と会計",person:"人",noSummary:"会話が検出されるとここにまとめが表示されます。",prep:"調理中",ready:"完成",delivered:"提供済み",sent:"送信済み",back:"戻る",sayPh:"各人が話した内容を話すか入力…",sendPhrase:"送信",dictate:"🎙️ 音声入力",aiHint:"音声とテキストは直接AIへ — まとめは自動で表示されます。",micUnsupported:"音声入力非対応",processing:"AIが要約中…",sectorTab:"セクター",sectorPresets:"セクタープリセット",customSector:"カスタムセクター",saveSector:"セクターを保存",sectorSaved:"セクターを保存しました。",aiSuggest:"AIで提案(プロンプトをコピー)",aiSectorCopied:"AIプロンプトをコピーしました — DeepSeek Harnessに貼り付け。",fillBoth:"ユーザーとパスワードを入力してください。",loggingIn:"ログイン中…",noOrders:"まだ注文がありません — まとめで項目を確認してください。",noUsage:"まだ利用報告がありません。",noReports:"まだ現場報告がありません。",lvlEmployee:"現場",lvlLead:"監督",lvlOwner:"オーナー",labelPh:"役割名(例:調理師)",newOrder:"新規注文",enableNotif:"🔔 通知を有効化",notifHint:"注文が届くと厨房タブレットが音と点滅で知らせます。",tagline:"AIが働き、人間が見守り、決め、見直す。"},
280
+ ko:{login:"로그인",user:"사용자",password:"비밀번호",loginBtn:"로그인",loginHint:"계정은 사업주가 관리합니다.",loginFailed:"로그인 실패.",cannotReach:"서버에 연결할 수 없습니다. 실행 중인가요?",workerAdded:"직원이 추가되었습니다.",saved:"저장되었습니다.",reportSent:"보고서를 보냈습니다.",feedbackSent:"피드백을 보냈습니다.",wallOpen:"라이브 보드",logout:"로그아웃",overview:"개요",field:"현장",rules:"규칙",reports:"보고서",week:"이번 주",feedback:"피드백",workersActive:"활성 직원",reportsTotal:"총 보고서",workers:"직원",thUser:"사용자",thRole:"역할",addWorker:"직원 추가",userName:"사용자 이름",addBtn:"추가",usage:"사용량 및 비용",usageSub:"(직원별, 추정)",thWorker:"직원",thSessions:"세션",thTokens:"토큰",thCost:"추정 비용",panel:"액션 패널",panelNote:"직원은 태블릿이나 휴대폰에서 패널을 엽니다.",openPanel:"패널 열기",fieldReports:"현장 보고서",feedbackQueue:"피드백 대기열",feedbackHint:"에이전트가 이 대기열을 읽고 문제를 해결합니다.",refresh:"새로고침",autoOn:"자동: ON",autoOff:"자동: OFF",rulesTitle:"사업 규칙",rulesHint:"이 규칙이 신호등을 훈련합니다.",saveRules:"규칙 저장",listen:"🎙️ 듣기",hi:"👋 ",reportTitle:"현장 보고서",reportPh:"근무 중 무슨 일이 있었나요?",sendReport:"보내기",fbTitle:"현장 피드백",fbPh:"무슨 일이 있었나요? 무엇을 개선할까요?",sendFeedback:"보내기",switchUser:"사용자 전환",wallHead:"🏭 Le Veilleux — 라이브",wallPulse:"현장의 맥박",noActivity:"(현장 활동 없음)",start:"▶ 시작",listening:"듣는 중… 말씀하세요",listeningHint:"대화를 포착하여 사람별로 나누고 있습니다.",stopListening:"⏹ 중지",summaryTitle:"대화 요약",confirm:"확인 ✓",confirmed:"확인됨 ✓",sentNote:"주방 및 중앙으로 전송됨",newConv:"새 대화",ordersTitle:"주문 — 주방 및 계산",person:"사람",noSummary:"대화가 감지되면 요약이 여기에 표시됩니다.",prep:"조리 중",ready:"완료",delivered:"서빙됨",sent:"전송됨",back:"뒤로",sayPh:"각 사람이 말한 내용을 말하거나 입력…",sendPhrase:"보내기",dictate:"🎙️ 받아쓰기",aiHint:"음성과 텍스트가 AI로 바로 전달 — 요약이 자동 표시됩니다.",micUnsupported:"받아쓰기 미지원",processing:"AI가 요약 중…",sectorTab:"업종",sectorPresets:"업종 프리셋",customSector:"사용자 정의 업종",saveSector:"업종 저장",sectorSaved:"업종이 저장되었습니다.",aiSuggest:"AI로 제안(프롬프트 복사)",aiSectorCopied:"AI 프롬프트 복사됨 — DeepSeek Harness에 붙여넣기.",fillBoth:"사용자와 비밀번호를 입력하세요.",loggingIn:"로그인 중…",noOrders:"아직 주문이 없습니다 — 요약에서 항목을 확인하세요.",noUsage:"아직 사용 보고가 없습니다.",noReports:"아직 현장 보고서가 없습니다.",lvlEmployee:"현장",lvlLead:"감독",lvlOwner:"소유주",labelPh:"역할 이름(예: 요리사)",newOrder:"새 주문",enableNotif:"🔔 알림 활성화",notifHint:"주문이 도착하면 주방 태블릿이 소리와 함께 깜박입니다.",tagline:"AI가 일하고 사람이 지키고, 결정하고, 검토합니다."},
281
+ ar:{login:"تسجيل الدخول",user:"المستخدم",password:"كلمة المرور",loginBtn:"دخول",loginHint:"الحسابات يديرها صاحب العمل.",loginFailed:"فشل تسجيل الدخول.",cannotReach:"تعذر الوصول إلى الخادم. هل هو قيد التشغيل؟",workerAdded:"تمت إضافة الموظف.",saved:"تم الحفظ.",reportSent:"تم إرسال التقرير.",feedbackSent:"تم إرسال الملاحظات.",wallOpen:"اللوحة المباشرة",logout:"خروج",overview:"نظرة عامة",field:"الميدان",rules:"القواعد",reports:"التقارير",week:"هذا الأسبوع",feedback:"الملاحظات",workersActive:"موظفون نشطون",reportsTotal:"إجمالي التقارير",workers:"الموظفون",thUser:"المستخدم",thRole:"الدور",addWorker:"إضافة موظف",userName:"اسم المستخدم",addBtn:"إضافة",usage:"الاستخدام والتكلفة",usageSub:"(لكل موظف، تقديري)",thWorker:"الموظف",thSessions:"الجلسات",thTokens:"الرموز",thCost:"التكلفة التقديرية",panel:"لوحة الإجراءات",panelNote:"يفتح الموظفون اللوحة من أجهزتهم.",openPanel:"فتح اللوحة",fieldReports:"تقارير الميدان",feedbackQueue:"قائمة الملاحظات",feedbackHint:"يقرأ الوكيل هذه القائمة ويحل المشكلات.",refresh:"تحديث",autoOn:"تلقائي: ON",autoOff:"تلقائي: OFF",rulesTitle:"قواعد العمل",rulesHint:"هذه القواعد تدرّب الإشارة الضوئية.",saveRules:"حفظ القواعد",listen:"🎙️ استمع",hi:"👋 ",reportTitle:"تقرير ميداني",reportPh:"ماذا حدث في نوبتك؟",sendReport:"إرسال",fbTitle:"ملاحظات ميدانية",fbPh:"ماذا حدث؟ ما الذي يجب تحسينه؟",sendFeedback:"إرسال",switchUser:"تبديل المستخدم",wallHead:"🏭 Le Veilleux — مباشر",wallPulse:"نبض الميدان",noActivity:"(لا نشاط بعد)",start:"▶ ابدأ",listening:"أستمع… تفضل بالحديث",listeningHint:"يتم التقاط المحادثة وتقسيمها حسب الأشخاص.",stopListening:"⏹ إيقاف",summaryTitle:"ملخص المحادثة",confirm:"تأكيد ✓",confirmed:"مؤكد ✓",sentNote:"أُرسل إلى المطبخ والنظام المركزي",newConv:"محادثة جديدة",ordersTitle:"الطلبات — المطبخ والحساب",person:"شخص",noSummary:"سيظهر الملخص هنا مع اكتشاف المحادثة.",prep:"قيد التحضير",ready:"جاهز",delivered:"تم التسليم",sent:"أُرسل",back:"رجوع",sayPh:"تحدث أو اكتب ما قاله كل شخص…",sendPhrase:"إرسال",dictate:"🎙️ إملاء",aiHint:"الصوت والنص يصلان مباشرة إلى الذكاء الاصطناعي — يظهر الملخص تلقائيًا.",micUnsupported:"الإملاء غير مدعوم",processing:"الذكاء الاصطناعي يلخّص…",sectorTab:"القطاع",sectorPresets:"القطاعات المحددة مسبقًا",customSector:"قطاع مخصص",saveSector:"حفظ القطاع",sectorSaved:"تم حفظ القطاع.",aiSuggest:"اقترح بالذكاء الاصطناعي (نسخ الموجه)",aiSectorCopied:"تم نسخ الموجه — الصقه في DeepSeek Harness.",fillBoth:"أدخل المستخدم وكلمة المرور.",loggingIn:"جارٍ الدخول…",noOrders:"لا توجد طلبات بعد — أكّد العناصر في الملخص.",noUsage:"لا يوجد استخدام مُبلّغ بعد.",noReports:"لا توجد تقارير ميدانية بعد.",lvlEmployee:"الميدان",lvlLead:"مشرف",lvlOwner:"المالك",labelPh:"مسمى الدور (مثال: طباخ)",newOrder:"طلب جديد",enableNotif:"🔔 تفعيل الإشعارات",notifHint:"يصدر صوت ويومض لوح المطبخ عند وصول طلب جديد.",tagline:"الذكاء الاصطناعي يعمل، والإنسان يراقب ويقرر ويراجع."}
282
282
  };
283
283
  function haptic(){try{if(navigator.vibrate)navigator.vibrate(25);}catch(e){}if(soundOn){try{const C=window.AudioContext||window.webkitAudioContext;if(!window.__ac)window.__ac=new C();const c=window.__ac;const o=c.createOscillator(),g=c.createGain();o.frequency.value=880;o.connect(g);g.connect(c.destination);g.gain.setValueAtTime(.12,c.currentTime);g.gain.exponentialRampToValueAtTime(.001,c.currentTime+.12);o.start();o.stop(c.currentTime+.12);}catch(e){}}}
284
284
  const $=id=>document.getElementById(id);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@javierfrancoleal/dsh-supervisor",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "The Veilleux central control plane of the J.Franco agentic workflow suite: user accounts, the live conversation flow (listen → per-person summary → confirm → orders), telemetry, and the universal sector dashboard with 10 languages. Created by J.Franco.",
5
5
  "author": "J.Franco",
6
6
  "license": "MIT",
package/panel.html CHANGED
@@ -5,10 +5,10 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <meta name="theme-color" content="#4D6BFE">
7
7
  <meta name="apple-mobile-web-app-capable" content="yes">
8
- <meta name="apple-mobile-web-app-title" content="Veilleux">
8
+ <meta name="apple-mobile-web-app-title" content="Le Veilleux">
9
9
  <link rel="manifest" href="manifest.webmanifest">
10
10
  <link rel="apple-touch-icon" href="icons/apple-icon-180.png">
11
- <title>Veilleux — Action Panel</title>
11
+ <title>Le Veilleux — Action Panel</title>
12
12
  <style>
13
13
  :root{--blue:#4D6BFE;--ink:#101828;--muted:#667085;--bg:#f6f7fb;--card:#fff;--line:#e3e6ee;--line2:#eef0f7;--ok:#22c55e;--bad:#ef4444}
14
14
  body.dark{--ink:#e6ecf7;--muted:#94a3b8;--bg:#0b1220;--card:#141f31;--line:#26334d;--line2:#26334d}
@@ -56,7 +56,7 @@ code{background:var(--line2);border-radius:6px;padding:2px 6px;font-size:13px}
56
56
  </head>
57
57
  <body>
58
58
  <header>
59
- <div class="logo">🎙️</div>
59
+ <div class="logo"><svg width="26" height="26" viewBox="0 0 64 64" aria-hidden="true"><path d="M10 33c6.5-11 13-16 22-16s15.5 5 22 16c-6.5 11-13 16-22 16S16.5 44 10 33z" fill="none" stroke="#ffffff" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/><path d="M32 24c4.2 4.2 6.2 7.4 6.2 10.4a6.2 6.2 0 1 1-12.4 0c0-3 2-6.2 6.2-10.4z" fill="#FACC15"/></svg></div>
60
60
  <div class="ht">
61
61
  <h1 id="title">DSH Assistant — Action Panel</h1>
62
62
  <p id="subtitle">J.Franco · DeepSeek Harness · Québec 🍁</p>
@@ -114,7 +114,7 @@ const LANG={es:"escucha",en:"listen",fr:"écoute",de:"hör zu",it:"ascolta",pt:"
114
114
  const VOICE={es:"es-ES",en:"en-US",fr:"fr-FR",de:"de-DE",it:"it-IT",pt:"pt-PT",zh:"zh-CN",ja:"ja-JP",ko:"ko-KR",ar:"ar-SA"};
115
115
  const END={es:"eso es todo",en:"that's all",fr:"c'est tout",de:"das ist alles",it:"è tutto",pt:"é tudo",zh:"说完了",ja:"以上です",ko:"이상입니다",ar:"هذا كل شيء"};
116
116
  const S={
117
- es:{worker:"Usuario",role:"Puesto",title:"🎙️ Veilleux — Panel de Acción",subtitle:"Suite J.Franco · DeepSeek Harness",
117
+ es:{worker:"Usuario",role:"Puesto",title:"🎙️ Le Veilleux — Panel de Acción",subtitle:"Suite J.Franco · DeepSeek Harness",
118
118
  listen:"🎙️ ESCUCHAR / DICTAR",stop:"⏹️ DETENER",copy:"📋 Copiar para DSH",copied:"✅ ¡Copiado!",
119
119
  speak:"🔊 Leer en voz alta",nospeech:"🎙️ Dictado no soportado",
120
120
  recording:"🔴 Grabando — toca DETENER al terminar",micError:"Micrófono no disponible — revisa los permisos del navegador.",
@@ -124,7 +124,7 @@ const S={
124
124
  clue:(w)=>`DSH, ${w} — comienzo a escuchar. Dime la conversación o las peticiones. Si aparecen varios idiomas, activa la interpretación cuando lo pida; el flujo principal (anotar, escribir, abrir aplicaciones…) sigue el análisis del input.`,
125
125
  note:(end)=>`Pulsa ESCUCHAR, habla la conversación y di «${end}». Luego copia y pega la instrucción en una nueva sesión de DeepSeek Harness — o usa la app «DSH Asistente» para ejecución autónoma.`,
126
126
  legend:"Semáforo: 🟢 automático · ⚑ semi-automático (verifícalo) · 🟡 propuesta (tú decides) · 🔴 pregunta.",fbTitle:"Feedback de campo",fbPh:"¿Qué pasó? ¿Qué debe mejorar?",fbSent:"Enviado — el agente lo leerá",fbOffline:"Supervisor sin conexión — prompt copiado para DSH",catError:"Error",catImprovement:"Mejora",catIdea:"Idea"},
127
- en:{worker:"User",role:"Role",title:"🎙️ Veilleux — Action Panel",subtitle:"J.Franco Suite · DeepSeek Harness",
127
+ en:{worker:"User",role:"Role",title:"🎙️ Le Veilleux — Action Panel",subtitle:"J.Franco Suite · DeepSeek Harness",
128
128
  listen:"🎙️ LISTEN / DICTATE",stop:"⏹️ STOP",copy:"📋 Copy for DSH",copied:"✅ Copied!",
129
129
  speak:"🔊 Read aloud",nospeech:"🎙️ Dictation not supported",
130
130
  recording:"🔴 Recording — tap STOP when done",micError:"Microphone unavailable — check browser permissions.",
@@ -134,7 +134,7 @@ const S={
134
134
  clue:(w)=>`DSH, ${w} — I'm starting to listen. Tell me the conversation or the requests. If several languages appear, activate interpretation when asked; the main flow (noting, writing, opening apps…) follows the input analysis.`,
135
135
  note:(end)=>`Tap LISTEN, speak the conversation and say "${end}". Then copy and paste the instruction into a new DeepSeek Harness session — or use the "DSH Assistant" app for autonomous runs.`,
136
136
  legend:"Traffic light: 🟢 automatic · ⚑ semi-automatic (verify it) · 🟡 proposal (you decide) · 🔴 ask.",fbTitle:"Field Feedback",fbPh:"What happened? What should improve?",fbSent:"Sent — the agent will read it",fbOffline:"Supervisor offline — prompt copied for DSH",catError:"Error",catImprovement:"Improvement",catIdea:"Idea"},
137
- fr:{worker:"Utilisateur",role:"Fonction",title:"🎙️ Veilleux — Panneau d'Action",subtitle:"Suite J.Franco · DeepSeek Harness",
137
+ fr:{worker:"Utilisateur",role:"Fonction",title:"🎙️ Le Veilleux — Panneau d'Action",subtitle:"Suite J.Franco · DeepSeek Harness",
138
138
  listen:"🎙️ ÉCOUTER / DICTER",stop:"⏹️ ARRÊTER",copy:"📋 Copier pour DSH",copied:"✅ Copié !",
139
139
  speak:"🔊 Lire à voix haute",nospeech:"🎙️ Dictée non prise en charge",
140
140
  recording:"🔴 Enregistrement — touchez ARRÊTER à la fin",micError:"Micro indisponible — vérifiez les autorisations du navigateur.",
@@ -144,7 +144,7 @@ const S={
144
144
  clue:(w)=>`DSH, ${w} — je commence à écouter. Racontez-moi la conversation ou les demandes. Si plusieurs langues apparaissent, activez l'interprétation à la demande ; le flux principal (noter, écrire, ouvrir des applications…) suit l'analyse.`,
145
145
  note:(end)=>`Touchez ÉCOUTER, parlez et dites « ${end} ». Copiez ensuite l'instruction dans une nouvelle session DeepSeek Harness — ou utilisez l'app « DSH Assistant » pour l'exécution autonome.`,
146
146
  legend:"Feux : 🟢 automatique · ⚑ semi-automatique (vérifiez) · 🟡 proposition (vous décidez) · 🔴 demandez.",fbTitle:"Feedback terrain",fbPh:"Que s'est-il passé ? Que faut-il améliorer ?",fbSent:"Envoyé — l'agent le lira",fbOffline:"Superviseur hors ligne — invite copiée pour DSH",catError:"Erreur",catImprovement:"Amélioration",catIdea:"Idée"},
147
- de:{worker:"Benutzer",role:"Rolle",title:"🎙️ Veilleux — Aktionspanel",subtitle:"J.Franco-Suite · DeepSeek Harness",
147
+ de:{worker:"Benutzer",role:"Rolle",title:"🎙️ Le Veilleux — Aktionspanel",subtitle:"J.Franco-Suite · DeepSeek Harness",
148
148
  listen:"🎙️ ZUHÖREN / DIKTIEREN",stop:"⏹️ STOPP",copy:"📋 Für DSH kopieren",copied:"✅ Kopiert!",
149
149
  speak:"🔊 Vorlesen",nospeech:"🎙️ Diktat nicht unterstützt",
150
150
  recording:"🔴 Aufnahme — tippen Sie STOPP am Ende",micError:"Mikrofon nicht verfügbar — Browser-Berechtigungen prüfen.",
@@ -154,7 +154,7 @@ const S={
154
154
  clue:(w)=>`DSH, ${w} — ich beginne zuzuhören. Erzählen Sie mir das Gespräch oder die Anfragen. Bei mehreren Sprachen aktivieren Sie das Dolmetschen auf Zuruf; der Hauptablauf folgt der Analyse.`,
155
155
  note:(end)=>`Tippen Sie auf ZUHÖREN, sprechen Sie und sagen Sie «${end}». Kopieren Sie die Anweisung in eine neue Sitzung — oder nutzen Sie die App „DSH Assistent“.`,
156
156
  legend:"Ampel: 🟢 automatisch · ⚑ halbautomatisch (prüfen) · 🟡 Vorschlag (Sie entscheiden) · 🔴 fragen.",fbTitle:"Feld-Feedback",fbPh:"Was ist passiert? Was soll besser werden?",fbSent:"Gesendet — der Agent liest es",fbOffline:"Supervisor offline — Prompt für DSH kopiert",catError:"Fehler",catImprovement:"Verbesserung",catIdea:"Idee"},
157
- it:{worker:"Utente",role:"Ruolo",title:"🎙️ Veilleux — Pannello Azioni",subtitle:"Suite J.Franco · DeepSeek Harness",
157
+ it:{worker:"Utente",role:"Ruolo",title:"🎙️ Le Veilleux — Pannello Azioni",subtitle:"Suite J.Franco · DeepSeek Harness",
158
158
  listen:"🎙️ ASCOLTA / DETTA",stop:"⏹️ FERMA",copy:"📋 Copia per DSH",copied:"✅ Copiato!",
159
159
  speak:"🔊 Leggi ad alta voce",nospeech:"🎙️ Dettatura non supportata",
160
160
  recording:"🔴 Registrazione — tocca FERMA alla fine",micError:"Microfono non disponibile — controlla i permessi.",
@@ -164,7 +164,7 @@ const S={
164
164
  clue:(w)=>`DSH, ${w} — comincio ad ascoltare. Raccontami la conversazione o le richieste. Se compaiono più lingue, attiva l'interpretazione quando richiesto; il flusso principale segue l'analisi.`,
165
165
  note:(end)=>`Tocca ASCOLTA, parla e di' «${end}». Poi copia e incolla l'istruzione in una nuova sessione — oppure usa l'app «DSH Assistente».`,
166
166
  legend:"Semaforo: 🟢 automatico · ⚑ semi-automatico (verificalo) · 🟡 proposta (decidi tu) · 🔴 chiedi.",fbTitle:"Feedback di campo",fbPh:"Cosa è successo? Cosa va migliorato?",fbSent:"Inviato — l'agente lo leggerà",fbOffline:"Supervisore offline — prompt copiato per DSH",catError:"Errore",catImprovement:"Miglioria",catIdea:"Idea"},
167
- pt:{worker:"Usuário",role:"Função",title:"🎙️ Veilleux — Painel de Ação",subtitle:"Suite J.Franco · DeepSeek Harness",
167
+ pt:{worker:"Usuário",role:"Função",title:"🎙️ Le Veilleux — Painel de Ação",subtitle:"Suite J.Franco · DeepSeek Harness",
168
168
  listen:"🎙️ OUVIR / DITAR",stop:"⏹️ PARAR",copy:"📋 Copiar para o DSH",copied:"✅ Copiado!",
169
169
  speak:"🔊 Ler em voz alta",nospeech:"🎙️ Ditado não suportado",
170
170
  recording:"🔴 A gravar — toque PARAR no fim",micError:"Microfone indisponível — verifique as permissões.",
@@ -174,7 +174,7 @@ const S={
174
174
  clue:(w)=>`DSH, ${w} — começo a ouvir. Conte-me a conversa ou os pedidos. Se aparecerem várias línguas, ative a interpretação quando pedido; o fluxo principal segue a análise.`,
175
175
  note:(end)=>`Toque em OUVIR, fale e diga «${end}». Depois copie e cole a instrução numa nova sessão — ou use a app «DSH Assistente».`,
176
176
  legend:"Semáforo: 🟢 automático · ⚑ semi-automático (verifique) · 🟡 proposta (você decide) · 🔴 pergunte.",fbTitle:"Feedback de campo",fbPh:"O que aconteceu? O que deve melhorar?",fbSent:"Enviado — o agente vai ler",fbOffline:"Supervisor offline — prompt copiado para o DSH",catError:"Erro",catImprovement:"Melhoria",catIdea:"Ideia"},
177
- zh:{worker:"用户",role:"职位",title:"🎙️ Veilleux — 操作面板",subtitle:"J.Franco 套件 · DeepSeek Harness",
177
+ zh:{worker:"用户",role:"职位",title:"🎙️ Le Veilleux — 操作面板",subtitle:"J.Franco 套件 · DeepSeek Harness",
178
178
  listen:"🎙️ 聆听 / 听写",stop:"⏹️ 停止",copy:"📋 复制到 DSH",copied:"✅ 已复制!",
179
179
  speak:"🔊 朗读",nospeech:"🎙️ 不支持听写",
180
180
  recording:"🔴 录音中 — 完成后点击停止",micError:"麦克风不可用 — 请检查浏览器权限。",
@@ -184,7 +184,7 @@ const S={
184
184
  clue:(w)=>`DSH,${w} — 我开始聆听。请告诉我对话或请求。若出现多种语言,按需启用口译;主流程跟随输入分析。`,
185
185
  note:(end)=>`点击「聆听」,说出对话并说「${end}」。然后将指令复制粘贴到新的会话 — 或使用「DSH 助手」应用。`,
186
186
  legend:"红绿灯:🟢 自动 · ⚑ 半自动(请核实)· 🟡 提议(你决定)· 🔴 询问。",fbTitle:"现场反馈",fbPh:"发生了什么?什么需要改进?",fbSent:"已发送 — 智能体会读取",fbOffline:"主管离线 — 提示已复制到 DSH",catError:"错误",catImprovement:"改进",catIdea:"想法"},
187
- ja:{worker:"ユーザー",role:"役割",title:"🎙️ Veilleux — アクションパネル",subtitle:"J.Franco スイート · DeepSeek Harness",
187
+ ja:{worker:"ユーザー",role:"役割",title:"🎙️ Le Veilleux — アクションパネル",subtitle:"J.Franco スイート · DeepSeek Harness",
188
188
  listen:"🎙️ 聞く / 音声入力",stop:"⏹️ 停止",copy:"📋 DSHへコピー",copied:"✅ コピー済み!",
189
189
  speak:"🔊 読み上げ",nospeech:"🎙️ 音声入力非対応",
190
190
  recording:"🔴 録音中 — 終わったら停止をタップ",micError:"マイクが使えません — ブラウザの権限を確認してください。",
@@ -194,7 +194,7 @@ const S={
194
194
  clue:(w)=>`DSH、${w} — 聞き始めます。会話や依頼を教えてください。複数の言語が出たら、求めに応じて通訳を有効化;主フローは入力分析に従います。`,
195
195
  note:(end)=>`「聞く」をタップし、会話を話して「${end}」と言います。その後、指示を新しいセッションに貼り付け — または「DSH アシスタント」アプリで自律実行。`,
196
196
  legend:"信号:🟢 自動 · ⚑ 半自動(確認)· 🟡 提案(あなたが決定)· 🔴 質問。",fbTitle:"現場フィードバック",fbPh:"何が起きましたか?何を改善すべき?",fbSent:"送信済み — エージェントが読みます",fbOffline:"スーパーバイザーオフライン — プロンプトをDSH用にコピー",catError:"エラー",catImprovement:"改善",catIdea:"アイデア"},
197
- ko:{worker:"사용자",role:"역할",title:"🎙️ Veilleux — 액션 패널",subtitle:"J.Franco 스위트 · DeepSeek Harness",
197
+ ko:{worker:"사용자",role:"역할",title:"🎙️ Le Veilleux — 액션 패널",subtitle:"J.Franco 스위트 · DeepSeek Harness",
198
198
  listen:"🎙️ 듣기 / 받아쓰기",stop:"⏹️ 중지",copy:"📋 DSH로 복사",copied:"✅ 복사됨!",
199
199
  speak:"🔊 소리내어 읽기",nospeech:"🎙️ 받아쓰기 미지원",
200
200
  recording:"🔴 녹음 중 — 끝나면 중지를 누르세요",micError:"마이크를 사용할 수 없습니다 — 브라우저 권한을 확인하세요.",
@@ -204,7 +204,7 @@ const S={
204
204
  clue:(w)=>`DSH, ${w} — 듣기 시작합니다. 대화나 요청을 말씀해 주세요. 여러 언어가 나오면 요청 시 통역을 활성화합니다. 주 흐름은 입력 분석을 따릅니다.`,
205
205
  note:(end)=>`「듣기」를 누르고 대화를 말한 뒤 「${end}」라고 하세요. 그런 다음 지시를 새 세션에 붙여넣기 — 또는 「DSH 어시스턴트」 앱으로 자율 실행.`,
206
206
  legend:"신호등: 🟢 자동 · ⚑ 반자동(확인) · 🟡 제안(당신이 결정) · 🔴 질문.",fbTitle:"현장 피드백",fbPh:"무슨 일이 있었나요? 무엇을 개선할까요?",fbSent:"전송됨 — 에이전트가 읽습니다",fbOffline:"감독자 오프라인 — DSH용 프롬프트 복사됨",catError:"오류",catImprovement:"개선",catIdea:"아이디어"},
207
- ar:{worker:"المستخدم",role:"الدور",title:"🎙️ Veilleux — لوحة الإجراءات",subtitle:"مجموعة J.Franco · DeepSeek Harness",
207
+ ar:{worker:"المستخدم",role:"الدور",title:"🎙️ Le Veilleux — لوحة الإجراءات",subtitle:"مجموعة J.Franco · DeepSeek Harness",
208
208
  listen:"🎙️ استمع / أملي",stop:"⏹️ إيقاف",copy:"📋 نسخ إلى DSH",copied:"✅ تم النسخ!",
209
209
  speak:"🔊 قراءة بصوت عالٍ",nospeech:"🎙️ الإملاء غير مدعوم",
210
210
  recording:"🔴 جارٍ التسجيل — اضغط إيقاف عند الانتهاء",micError:"الميكروفون غير متاح — تحقق من أذونات المتصفح.",