PageSourceSearch

https://social-publisher.web.app/assets/Manual-D17aR4UB.js

js social-publisher.web.app collected 2026-10-03 12:37:47 UTC 129,371 bytes, 1 lines download raw bytes

1import{j as e,r as g}from"./vendor-react-DiJp4Ids.js";import{L as A}from"./vendor-router-BQ9A5i6-.js";import{u as N,C as f,k as b,w as K,B as j,I as V,R as F,P as W}from"./index-DV0CPbmh.js";import{P as S}from"./PlatformBrandIcon-CAyT4Fqx.js";import{a7 as G,aV as P,aJ as M,I as O,N as Y,cN as X,ad as _,bq as C,e as L,Z as $,aq as Q,bU as J,k as Z,n as ee,l as ae,q as se,F as oe,m as te,b$ as ne,M as T,p as re,s as ie,t as le,u as ce,v as ue,w as de,x as pe,y as me,z as he,D as ge,B as fe,K as be,O as ve,cI as ye}from"./vendor-icons-Dp3csqOa.js";import{s as xe}from"./a11y-hVsZa93L.js";import"./vendor-capacitor-Brsuti7y.js";import"./i18n-translations-TdFnI7jD.js";import"./vendor-tanstack-Bh8mR0Am.js";import"./vendor-ui-CKX6mHe-.js";import"./vendor-radix-DA_kJhMJ.js";import"./vendor-datefns-Bq6ooyM0.js";import"./vendor-shared-SwkB51P9.js";import"./vendor-firebase-TSmD8Bmi.js";import"./vendor-firebase-core-4rc3q345.js";import"./vendor-firestore-ClmovigS.js";import"./vendor-motion-WsbK-hjl.js";function we(){const{t:m,language:t}=N();return e.jsx(f,{className:"border-dashed bg-muted/20 shadow-none",children:e.jsxs(b,{className:"p-5",children:[e.jsxs("div",{className:"mb-1 flex items-center gap-2.5",children:[e.jsx("span",{className:"chip-blue inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg",children:e.jsx(G,{className:"h-4 w-4"})}),e.jsx("p",{className:"text-sm font-semibold",children:t==="es"?"Cómo se conecta cada cosa (3 vías)":t==="fr"?"Comment chaque chose se connecte (3 voies)":"How each thing connects (3 routes)"})]}),e.jsx("p",{className:"mb-4 text-xs text-muted-foreground",children:t==="es"?"No es elegir una: cada vía cubre plataformas distintas. Usa OAuth siempre que exista; Maton y MCP son para lo que el Publisher no puede conectar por API oficial.":t==="fr"?"Ce n’est pas un choix unique : chaque voie couvre des plateformes différentes. Utilisez OAuth quand il existe ; Maton et MCP servent à ce que Publisher ne peut pas connecter via l’API officielle.":"It is not one-or-the-other: each route covers different platforms. Use OAuth whenever it exists; Maton and MCP cover what Publisher cannot connect through an official API."}),e.jsxs("div",{className:"grid gap-4 text-xs text-muted-foreground sm:grid-cols-3",children:[e.jsxs("div",{className:"space-y-1.5 rounded-xl border border-border/60 bg-background/60 p-3",children:[e.jsxs("p",{className:"flex items-center gap-2 text-[13px] font-semibold text-foreground",children:[e.jsx(P,{className:"h-3.5 w-3.5 text-emerald-600 dark:text-emerald-400"}),t==="es"?"OAuth del Publisher":t==="fr"?"OAuth de Publisher":"Publisher OAuth",e.jsx("span",{className:"chip-green rounded-full px-2 py-0.5 text-[10px] font-semibold",children:t==="es"?"recomendado":t==="fr"?"recommandé":"recommended"})]}),e.jsx("p",{children:t==="es"?"Autorizas la cuenta una vez y el Publisher publica y lee por la API oficial. Los tokens se renuevan solos.":t==="fr"?"Vous autorisez le compte une fois et Publisher publie et lit via l’API officielle. Les jetons se renouvellent seuls.":"You authorize the account once and Publisher posts and reads through the official API. Tokens refresh themselves."}),e.jsx("p",{className:"text-foreground/80",children:t==="es"?"Cubre: Facebook, Instagram, X, Pinterest, YouTube, TikTok, Google Business, Analytics, Search Console, Merchant y Drive.":t==="fr"?"Couvre : Facebook, Instagram, X, Pinterest, YouTube, TikTok, Google Business, Analytics, Search Console, Merchant et Drive.":"Covers: Facebook, Instagram, X, Pinterest, YouTube, TikTok, Google Business, Analytics, Search Console, Merchant and Drive."}),e.jsx("p",{className:"text-[11px]",children:t==="es"?"Es por compañía: cada workspace tiene sus cuentas.":t==="fr"?"C’est par entreprise : chaque espace a ses comptes.":"It is per company: each workspace has its own accounts."})]}),e.jsxs("div",{className:"space-y-1.5 rounded-xl border border-border/60 bg-background/60 p-3",children:[e.jsxs("p",{className:"flex items-center gap-2 text-[13px] font-semibold text-foreground",children:[e.jsx(M,{className:"h-3.5 w-3.5 text-violet-600 dar
1k:text-violet-400"}),"Maton"]}),e.jsx("p",{children:t==="es"?"Una sola cuenta de Maton guarda las autorizaciones de varias apps, así que no repites OAuth dentro del Publisher para lo que ya autorizaste allí.":t==="fr"?"Un seul compte Maton conserve les autorisations de plusieurs apps : pas besoin de refaire l’OAuth dans Publisher pour ce qui y est déjà autorisé.":"A single Maton account holds the authorizations for several apps, so you do not repeat OAuth inside Publisher for what you already authorized there."}),e.jsx("p",{className:"text-foreground/80",children:t==="es"?"Hoy el Publisher lo usa para: Notion, LinkedIn (modo alternativo) y tu correo personal (abajo).":t==="fr"?"Aujourd’hui Publisher l’utilise pour : Notion, LinkedIn (mode alternatif) et votre e-mail personnel (ci-dessous).":"Today Publisher uses it for: Notion, LinkedIn (alternative mode) and your personal mailbox (below)."}),e.jsx("p",{className:"text-[11px]",children:t==="es"?"No sustituye al OAuth de Facebook, Instagram, X, YouTube, TikTok ni Google: esas siguen conectándose arriba.":t==="fr"?"Ne remplace pas l’OAuth de Facebook, Instagram, X, YouTube, TikTok ou Google : elles se connectent toujours ci-dessus.":"It does not replace OAuth for Facebook, Instagram, X, YouTube, TikTok or Google: those still connect above."})]}),e.jsxs("div",{className:"space-y-1.5 rounded-xl border border-border/60 bg-background/60 p-3",children:[e.jsxs("p",{className:"flex items-center gap-2 text-[13px] font-semibold text-foreground",children:[e.jsx(O,{className:"h-3.5 w-3.5 text-blue-600 dark:text-blue-400"}),t==="es"||t==="fr"?"MCP de Zapier":"Zapier MCP"]}),e.jsx("p",{children:t==="es"?"Puente para lo que el Publisher no publica por API propia: pegas la URL del MCP y su token en la card de la plataforma.":t==="fr"?"Passerelle pour ce que Publisher ne publie pas via sa propre API : collez l’URL du MCP et son jeton dans la carte de la plateforme.":"A bridge for what Publisher cannot post through its own API: paste the MCP URL and its token in the platform card."}),e.jsx("p",{className:"text-foreground/80",children:t==="es"?"Cubre: LinkedIn (vía por defecto) y Pinterest como respaldo.":t==="fr"?"Couvre : LinkedIn (voie par défaut) et Pinterest en secours.":"Covers: LinkedIn (default route) and Pinterest as a fallback."}),e.jsx("p",{className:"text-[11px]",children:t==="es"?"Un MCP por compañía o por página: no reutilices el mismo token entre clientes.":t==="fr"?"Un MCP par entreprise ou par page : ne réutilisez pas le même jeton entre clients.":"One MCP per company or per page: do not reuse the same token across clients."})]})]}),e.jsxs("div",{className:"mt-4 grid gap-x-6 gap-y-4 border-t border-border/60 pt-4 text-xs text-muted-foreground sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("p",{className:"flex items-center gap-2 font-medium text-foreground",children:[e.jsx(S,{platform:"pinterest",size:"sm"})," Pinterest"]}),e.jsx("p",{children:m("pin_native_line")}),e.jsx("p",{children:m("pin_mcp_line")})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("p",{className:"flex items-center gap-2 font-medium text-foreground",children:[e.jsx(S,{platform:"linkedin",size:"sm"})," LinkedIn (Publisher)"]}),e.jsx("p",{children:m("li_mcp_line1")}),e.jsx("p",{children:m("li_mcp_line2")}),e.jsx("p",{children:m("li_mcp_line3")})]})]})]})})}const Ae=m=>{var t;return((t=W.find(a=>a.key===m))==null?void 0:t.label)||m},E=[{platform:"wordpress",method:"app_password",keywords:["wordpress","wp","blog","application password","app password"],steps:[{es:"En tu WordPress entra a Usuarios → Perfil (el usuario con el que publicas).",en:"In WordPress go to Users → Profile (the user you publish with).",fr:"Dans WordPress, va dans Utilisateurs → Profil (l'utilisateur avec lequel tu publies)."},{es:'Baja hasta "Contraseñas de aplicación" (Application Passwords).',en:'Scroll to "Application Passwords".',fr:"Descends jusqu'à « Mots de passe d'application »."},{es:'Escribe un nombre (ej. "Krealo Publisher") y pulsa "Añadir".',en:'Type a name (e.g. "
1Krealo Publisher") and click "Add New".',fr:"Écris un nom (ex. « Krealo Publisher ») et clique sur « Ajouter »."},{es:"Copia las 24 letras que aparecen (se muestran una sola vez).",en:"Copy the 24 characters shown (only shown once).",fr:"Copie les 24 caractères affichés (ils ne s'affichent qu'une seule fois)."},{es:"En Integrations → Connect WordPress: Usuario = tu usuario, App Password = esas 24 letras, y la URL del sitio.",en:"In Integrations → Connect WordPress: Username = your user, App Password = those 24 chars, plus the site URL.",fr:"Dans Integrations → Connect WordPress : Utilisateur = ton utilisateur, App Password = ces 24 caractères, plus l'URL du site."}],note:{es:"No uses tu contraseña normal. Requiere WordPress 5.6+. Si el sitio tiene varios idiomas (WPML/Polylang) el post se publica en el idioma principal; los idiomas extra dependen del plugin del sitio.",en:"Do not use your normal password. Requires WordPress 5.6+. If the site has multiple languages (WPML/Polylang) the post publishes in the main language; extra languages depend on the site's plugin.",fr:"N'utilise pas ton mot de passe habituel. Nécessite WordPress 5.6+. Si le site a plusieurs langues (WPML/Polylang), l'article se publie dans la langue principale ; les langues additionnelles dépendent du plugin du site."}},{platform:"gmail",method:"app_password",keywords:["gmail","correo","email","smtp","app password"],steps:[{es:"Activa la verificación en 2 pasos en tu Cuenta de Google (Seguridad).",en:"Turn on 2-Step Verification in your Google Account (Security).",fr:"Active la validation en 2 étapes sur ton compte Google (Sécurité)."},{es:"Entra a Cuenta de Google → Seguridad → Contraseñas de aplicaciones.",en:"Go to Google Account → Security → App passwords.",fr:"Va dans Compte Google → Sécurité → Mots de passe des applications."},{es:'Crea una (app "Correo", dispositivo "Otro") y copia las 16 letras.',en:'Create one (app "Mail", device "Other") and copy the 16 characters.',fr:"Crées-en un (app « Mail », appareil « Autre ») et copie les 16 caractères."},{es:"En Integrations → Connect Gmail: Correo = tu Gmail, App Password = esas 16 letras.",en:"In Integrations → Connect Gmail: Gmail address + App Password = those 16 chars.",fr:"Dans Integrations → Connect Gmail : adresse Gmail + App Password = ces 16 caractères."}],note:{es:"Se guarda por usuario o por compañía; los agentes envían por esa conexión, no por la cuenta global.",en:"Stored per user or per company; agents send through this connection.",fr:"Enregistré par utilisateur ou par entreprise ; les agents envoient via cette connexion, pas via le compte global."}},{platform:"google_business",method:"oauth",keywords:["google","business","my business","gmb","oauth","perfil de empresa","drive","analytics","search console"],steps:[{es:'En Integrations pulsa "Connect Google Business".',en:'In Integrations click "Connect Google Business".',fr:"Dans Integrations, clique sur « Connect Google Business »."},{es:"Inicia sesión con la cuenta de Google que administra la ficha.",en:"Sign in with the Google account that manages the profile.",fr:"Connecte-toi avec le compte Google qui gère la fiche."},{es:"Acepta permisos y elige la ubicación correcta.",en:"Accept permissions and pick the correct location.",fr:"Accepte les permissions et choisis le bon établissement."}],note:{es:"El MISMO flujo OAuth de Google sirve para Analytics, Search Console, Merchant y Drive (cada uno con su botón). Conecta Drive si quieres elegir la carpeta de trabajo de la compañía.",en:"The same Google OAuth flow powers Analytics, Search Console, Merchant and Drive. Connect Drive if you want to choose the company's working folder.",fr:"Le MÊME flux OAuth Google alimente Analytics, Search Console, Merchant et Drive (chacun avec son bouton). Connecte Drive si tu veux choisir le dossier de travail de l'entreprise."}},{platform:"facebook",method:"oauth",keywords:["facebook","meta","fb","oauth","pagina","instagram"],steps:[{es:'Pulsa "Connect Facebook" e inicia sesión en Meta.',en:'Click "Connect Facebook" and sign in to Meta.',fr:"Clique sur « Connect Facebook » et connecte-toi à Meta."},{es:"Concede acceso a las Páginas que vas a administrar.",en:"Grant access to the Pages you will manage.",fr:"Accorde l'accès aux Pages que tu vas gérer."},{es:"Para Instagram: debe ser cuenta Business vinculada a esa Página.",en:"For Instagram: it must be a Business account linked to that Page.",fr:"Pour Instagram : le compte doit être un compte Business lié à cette Page."}]}
1,{platform:"blog",method:"api_key",keywords:["blog","website","sitio","api key","llms"],steps:[{es:"Consigue la URL base del sitio y su API key.",en:"Get the site base URL and its API key.",fr:"Récupère l'URL de base du site et sa clé API."},{es:"En Integrations → Connect Blog / Website pega la URL y la API key.",en:"In Integrations → Connect Blog / Website paste the URL and API key.",fr:"Dans Integrations → Connect Blog / Website, colle l'URL et la clé API."},{es:'Pulsa "Probar conexión" para verificar antes de guardar.',en:'Click "Test connection" to verify before saving.',fr:"Clique sur « Tester la connexion » pour vérifier avant d'enregistrer."}]},{platform:"shopify",method:"api_key",keywords:["shopify","tienda","store","access token"],steps:[{es:"En Shopify Admin → Apps → Develop apps crea una app privada.",en:"In Shopify Admin → Apps → Develop apps create a private app.",fr:"Dans Shopify Admin → Apps → Develop apps, crée une app privée."},{es:"Da permisos de productos/locations e instala la app (Admin API token).",en:"Grant products/locations scopes and install the app (Admin API token).",fr:"Donne les permissions produits/emplacements et installe l'app (jeton Admin API)."},{es:"Pon la URL (mitienda.myshopify.com) y el token en Connect Shopify.",en:"Enter the URL and token in Connect Shopify.",fr:"Renseigne l'URL (monmagasin.myshopify.com) et le jeton dans Connect Shopify."}]},{platform:"maton",method:"maton",keywords:["maton","api","chat","helpers"],steps:[{es:"Consigue tu Maton API (en tu cuenta de Maton).",en:"Get your Maton API (from your Maton account).",fr:"Récupère ta Maton API (depuis ton compte Maton)."},{es:"En Integrations → Connect Maton, ponle nombre (ej. krealomedia) y pega la Maton API.",en:"In Integrations → Connect Maton, name it and paste the Maton API.",fr:"Dans Integrations → Connect Maton, donne-lui un nom (ex. krealomedia) et colle la Maton API."},{es:"Listo: el chat y los helpers usarán esta conexión automáticamente.",en:"Done: chat and helpers will use this connection automatically.",fr:"C'est fait : le chat et les Helpers utiliseront cette connexion automatiquement."}],note:{es:"Notion también se conecta a través de Maton (no MCP).",en:"Notion also connects through Maton (not MCP).",fr:"Notion se connecte aussi via Maton (pas MCP)."}},{platform:"notion",method:"maton",keywords:["notion","maton","database","base de datos"],steps:[{es:"La conexión de Notion se hace con Maton (no MCP).",en:"Notion connects through Maton (not MCP).",fr:"La connexion Notion se fait via Maton (pas MCP)."},{es:'Conecta primero Maton (ver guía "Conectar Maton" arriba).',en:'Connect Maton first (see the "Connect Maton" guide).',fr:"Connecte d'abord Maton (voir le guide « Connect Maton » ci-dessus)."},{es:"En Connect Notion indica la base de datos destino.",en:"In Connect Notion set the target database.",fr:"Dans Connect Notion, indique la base de données cible."}]},{platform:"linkedin",method:"maton",keywords:["linkedin","maton","pagina"],steps:[{es:"Elige el modo: Maton (recomendado) con tu API key/link.",en:"Pick the mode: Maton (recommended) with your API key/link.",fr:"Choisis le mode : Maton (recommandé) avec ta clé API/lien."},{es:"Indica el nombre exacto de la Página y su ID.",en:"Set the exact Page name and its ID.",fr:"Indique le nom exact de la Page et son ID."}]},{platform:"pinterest",method:"oauth",keywords:["pinterest","oauth","pins"],steps:[{es:'Recomendado: "Connect with OAuth" (imágenes y videos por la API oficial).',en:'Recommended: "Connect with OAuth" (images and videos via the official API).',fr:"Recommandé : « Connect with OAuth » (images et vidéos via l'API officielle)."}]}],je={oauth:{icon:P,label:{es:"OAuth (un clic)",en:"OAuth (one click)",fr:"OAuth (un clic)"},cls:"text-emerald-600 bg-emerald-500/10"},app_password:{icon:C,label:{es:"App Password",en:"App Password",fr:"App Password"},cls:"text-amber-600 bg-amber-500/10"},api_key:{icon:C,label:{es:"API key",en:"API key",fr:"Clé API"},cls:"text-sky-600 bg-sky-500/10"},maton:{icon:Q,label:{es:"Maton API",en:"Maton API",fr:"Maton API"},cls:"text-violet-600 bg-violet-500/10"}},qe="https://storage.googleapis.com/keneth-walters.firebasestorage.app/manual-screenshots",Ce={create:{es:"Publicar",en:"Publish",fr:"Publier"},main:{es:"Menú principal",en:"Main menu",fr:"Menu principal"}
1,content:{es:"Contenido",en:"Content",fr:"Contenu"},ai:{es:"IA y automatización",en:"AI & Automation",fr:"IA et automatisation"},seo:{es:"SEO",en:"SEO",fr:"SEO"},workspace:{es:"Workspace",en:"Workspace",fr:"Espace de travail"}},q=[{id:"create-post",group:"create",icon:J,title:{es:"Crear un post",en:"Create a post",fr:"Créer un post"}},{id:"dashboard",group:"main",icon:Z,title:{es:"Dashboard",en:"Dashboard",fr:"Tableau de bord"}},{id:"calendar",group:"main",icon:ee,title:{es:"Calendario",en:"Calendar",fr:"Calendrier"}},{id:"tasks",group:"main",icon:ae,title:{es:"Tasks",en:"Tasks",fr:"Tasks"}},{id:"statistics",group:"main",icon:se,title:{es:"Estadísticas",en:"Statistics",fr:"Statistiques"}},{id:"blogs",group:"content",icon:oe,title:{es:"Blogs",en:"Blogs",fr:"Blogs"}},{id:"approvals",group:"content",icon:te,title:{es:"Approvals",en:"Approvals",fr:"Approvals"}},{id:"history",group:"content",icon:ne,title:{es:"Posts",en:"Posts",fr:"Publications"}},{id:"inbox",group:"content",icon:T,title:{es:"Inbox",en:"Inbox",fr:"Inbox"}},{id:"team-email",group:"content",icon:re,title:{es:"Correo del equipo",en:"Team Email",fr:"Courriel de l'équipe"}},{id:"comments",group:"content",icon:T,title:{es:"Comments",en:"Comments",fr:"Comments"}},{id:"music",group:"content",icon:ie,title:{es:"Music",en:"Music",fr:"Music"}},{id:"video",group:"content",icon:le,title:{es:"Krealo Video",en:"Krealo Video",fr:"Krealo Video"}},{id:"automation",group:"ai",icon:ce,title:{es:"Automation",en:"Automation",fr:"Automation"}},{id:"agents",group:"ai",icon:ue,title:{es:"Agentes",en:"Agents",fr:"Agents"}},{id:"helpers",group:"ai",icon:de,title:{es:"Helpers",en:"Helpers",fr:"Helpers"}},{id:"chat",group:"ai",icon:pe,title:{es:"Chat",en:"Chat",fr:"Chat"}},{id:"ads",group:"ai",icon:me,title:{es:"Ads (Google / Meta)",en:"Ads (Google / Meta)",fr:"Ads (Google / Meta)"}},{id:"search-console",group:"seo",icon:L,title:{es:"Search Console",en:"Search Console",fr:"Search Console"}},{id:"google-merchant",group:"seo",icon:he,title:{es:"Google Merchant",en:"Google Merchant",fr:"Google Merchant"}},{id:"local-seo-grid",group:"seo",icon:ge,title:{es:"Local SEO Grid",en:"Local SEO Grid",fr:"Local SEO Grid"}},{id:"companies",group:"workspace",icon:fe,title:{es:"Companies",en:"Companies",fr:"Companies"}},{id:"connections",group:"workspace",icon:O,title:{es:"Conexiones",en:"Connections",fr:"Connexions"}},{id:"improvements",group:"workspace",icon:be,title:{es:"Improvements",en:"Improvements",fr:"Improvements"}},{id:"settings",group:"workspace",icon:ve,title:{es:"Settings",en:"Settings",fr:"Paramètres"}},{id:"api",group:"workspace",icon:ye,title:{es:"API pública",en:"Public API",fr:"API publique"}}];function Ke(){const{language:m}=N(),{activeCompany:t}=K(),a=g.useCallback(s=>m==="es"?s.es:m==="fr"?s.fr:s.en,[m]),[y,B]=g.useState(""),[R,U]=g.useState("wordpress"),[k,x]=g.useState("intro"),D=g.useRef(null);g.useEffect(()=>{const n=["intro",...q.map(c=>c.id)].map(c=>document.getElementById(c)).filter(c=>!!c);if(n.length===0)return;const u=new IntersectionObserver(c=>{c.forEach(v=>{v.isIntersecting&&x(v.target.id)})},{rootMargin:"-96px 0px -70% 0px",threshold:0});return n.forEach(c=>u.observe(c)),()=>u.disconnect()},[]),g.useEffect(()=>{const s=window.location.hash.replace("#","");if(!s)return;const n=document.getElementById(s);n&&requestAnimationFrame(()=>{n.scrollIntoView({behavior:"auto",block:"start"}),x(s)})},[]);const w=s=>{const n=document.getElementById(s);n&&(xe(n,{block:"start"}),window.history.replaceState(null,"",`#${s}`),x(s))},z=g.useMemo(()=>{const s=y.trim().toLowerCase();return s?E.filter(n=>n.keywords.some(u=>u.includes(s))||n.platform.includes(s)):E},[y]),o=({n:s,children:n})=>e.jsxs("li",{className:"relative pl-2 text-sm text-foreground/90",children:[e.jsx("span",{className:"absolute -left-[21px] flex h-4 w-4 items-center justify-center rounded-full bg-primary text-[10px] font-semibold text-primary-foreground",children:s}),n]}),h=({name:s,alt:n,caption:u})=>e.jsxs("figure",{className:"space-y-1.5",children:[e.jsx("img",{src:`${qe}/${s}.png`,alt:n,loading:"lazy",className:"w-full max-w-full rounded-xl border border-border/70 shadow-sm"}),u&&e.jsx("figcaption",{className:"px-1 text-xs text-muted-foreground",children:u})]}),d=({children:s})=>e.jsx("h2",{className:"pt-2 text-base font-semibold tracking-tight",children:s}),p=({children:s})=>e.jsx("p",{className:"rounded-lg bg-muted/50 px-3 py-2 text-xs text-muted-foreground",children:s}),l=({items:s})=>e.jsx("ul",{className:"list-disc space-y-1.5 pl-5 text-sm text-foreground
1/90",children:s.map((n,u)=>e.jsx("li",{children:a(n)},u))}),i=({to:s,children:n})=>e.jsx(j,{asChild:!0,size:"sm",children:e.jsx(A,{to:s,children:n})}),r=({id:s,title:n,tagline:u,children:c})=>e.jsxs("section",{id:s,className:"scroll-mt-24 space-y-4 border-b border-border/60 pb-10 last:border-0 last:pb-0",children:[e.jsxs("div",{className:"max-w-3xl",children:[e.jsx("h2",{className:"text-2xl font-semibold tracking-tight",children:n}),u&&e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:u})]}),e.jsx("div",{className:"max-w-3xl space-y-4",children:c})]}),H=t?`/companies/${t.id}/hub`:"/companies";return e.jsxs("div",{className:"flex flex-col gap-6 lg:h-[calc(100vh-8.5rem)] lg:flex-row lg:overflow-hidden",children:[e.jsxs("aside",{className:"lg:h-full lg:w-64 lg:shrink-0 lg:overflow-y-auto lg:pb-4",children:[e.jsxs("div",{className:"flex items-center gap-2 px-2 pb-3",children:[e.jsx(Y,{className:"h-5 w-5 text-primary"}),e.jsx("span",{className:"font-semibold",children:"Manual"})]}),e.jsxs("nav",{className:"flex gap-1 overflow-x-auto pb-2 lg:flex-col lg:gap-0.5 lg:overflow-visible lg:pb-0",children:[e.jsxs("button",{type:"button",onClick:()=>w("intro"),className:`flex shrink-0 items-center gap-2 rounded-lg px-3 py-2 text-sm transition-colors lg:w-full ${k==="intro"?"bg-primary/10 font-medium text-primary":"text-muted-foreground hover:bg-muted"}`,children:[e.jsx(X,{className:"h-4 w-4 shrink-0"}),a({es:"Introducción",en:"Getting started",fr:"Pour commencer"})]}),q.map((s,n)=>{const u=s.icon,c=k===s.id,v=n===0||q[n-1].group!==s.group;return e.jsxs("div",{className:"contents",children:[v&&e.jsx("div",{className:`hidden px-3 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-subtle lg:block ${n===0?"pt-1":"pt-3"}`,children:a(Ce[s.group])}),e.jsxs("button",{type:"button",onClick:()=>w(s.id),className:`flex shrink-0 items-center gap-2 rounded-lg px-3 py-2 text-sm transition-colors lg:w-full ${c?"bg-primary/10 font-medium text-primary":"text-muted-foreground hover:bg-muted"}`,children:[e.jsx(u,{className:"h-4 w-4 shrink-0"}),a(s.title)]})]},s.id)})]})]}),e.jsxs("div",{ref:D,className:"min-w-0 flex-1 space-y-10 lg:h-full lg:overflow-y-auto lg:pr-2",children:[e.jsxs("section",{id:"intro",className:"scroll-mt-24 max-w-3xl space-y-4",children:[e.jsxs("h2",{className:"text-2xl font-semibold tracking-tight",children:[a({es:"Bienvenido a ",en:"Welcome to ",fr:"Bienvenue sur "}),e.jsxs("span",{className:"blanka-accent whitespace-nowrap align-baseline",children:[e.jsx("span",{className:"text-foreground",children:"Krealo"})," ",e.jsx("span",{className:"text-primary",children:"Publisher"})]})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:a({es:"Publica en todas tus redes, blogs y fichas de Google desde un solo lugar. Este manual te explica, paso a paso y con capturas reales, cómo conectar cuentas, crear contenido, automatizar blogs, aprobar y organizar el trabajo del equipo.",en:"Publish everywhere from one place. This manual explains, step by step with real screenshots, how to connect accounts, create content, automate blogs, approve and organize team work.",fr:"Publie sur tous tes réseaux, blogs et fiches Google depuis un seul endroit. Ce manuel explique, étape par étape et avec de vraies captures d'écran, comment connecter des comptes, créer du contenu, automatiser les blogs, approuver et organiser le travail de l'équipe."})}),e.jsx(h,{name:"dashboard",alt:a({es:"Vista general del Publisher",en:"Publisher overview",fr:"Vue d'ensemble du Publisher"}),caption:a({es:"El Dashboard: tu punto de partida cada día.",en:"The Dashboard: your daily starting point.",fr:"Le Dashboard : ton point de départ chaque jour."})}),e.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:[{t:{es:"1. Conecta tus cuentas",en:"1. Connect accounts",fr:"1. Connecte tes comptes"},d:{es:"En Integrations conecta redes, blog, Google y más.",en:"Connect socials, blog, Google and more.",fr:"Dans Integrations, connecte réseaux, blog, Google et plus."},s:"connections"},{t:{es:"2. Crea contenido",en:"2. Create content",fr:"2. Crée du contenu"},d:{es:"Un post para varias redes, o un blog SEO.",en:"One post for many networks, or an SEO blog.",fr:"Un post pour plusieurs réseaux, ou un blog SEO."},s:"create-post"},{t:{es:"3. Automatiza blogs",en:"3. Automate blogs",fr:"3. Automatise les blogs"},d:{es:"Genera blogs con IA y apruébalos.",en:"Generate blogs with AI and approve them.",fr:"Génère des blogs avec l'IA et approuve-les."},s:"blogs"}
1,{t:{es:"4. Aprueba y publica",en:"4. Approve & publish",fr:"4. Approuve et publie"},d:{es:"Revisa lo automático antes de que salga.",en:"Review automatic content before it goes out.",fr:"Vérifie le contenu automatique avant sa publication."},s:"approvals"},{t:{es:"5. Vigila el Dashboard",en:"5. Watch the Dashboard",fr:"5. Surveille le Dashboard"},d:{es:"Métricas, agentes y actividad de cada compañía.",en:"Metrics, agents and activity per company.",fr:"Métriques, agents et activité de chaque entreprise."},s:"dashboard"},{t:{es:"6. Organiza con Tasks",en:"6. Organize with Tasks",fr:"6. Organise avec Tasks"},d:{es:"Tareas del equipo y calendario de publicaciones.",en:"Team tasks and the publishing calendar.",fr:"Tâches de l'équipe et calendrier des publications."},s:"tasks"}].map(s=>e.jsx(f,{className:"cursor-pointer transition-colors hover:border-primary/40",onClick:()=>w(s.s),children:e.jsxs(b,{className:"space-y-1 py-4",children:[e.jsx("p",{className:"font-medium",children:a(s.t)}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a(s.d)})]})},a(s.t)))}),e.jsx(p,{children:a({es:"Explora el índice de la izquierda para el resto: Estadísticas, Posts, Inbox, Correo del equipo, Comments, Music, Krealo Video, Automation, Agentes, Helpers, Chat, Ads, Search Console, Google Merchant, Local SEO Grid, Companies, Improvements, Settings y la API pública.",en:"Explore the index on the left for everything else: Statistics, Posts, Inbox, Team Email, Comments, Music, Krealo Video, Automation, Agents, Helpers, Chat, Ads, Search Console, Google Merchant, Local SEO Grid, Companies, Improvements, Settings and the Public API.",fr:"Explore l'index à gauche pour le reste : Statistiques, Publications, Inbox, Courriel de l'équipe, Comments, Music, Krealo Video, Automation, Agents, Helpers, Chat, Ads, Search Console, Google Merchant, Local SEO Grid, Companies, Improvements, Settings et l'API publique."})})]}),e.jsxs(r,{id:"create-post",title:a({es:"Crear un post",en:"Create a post",fr:"Créer un post"}),tagline:a({es:"Un solo formulario para publicar en varias redes a la vez: texto (con o sin IA), media, preview por plataforma, y dos salidas — programar o publicar ahora.",en:"One form to publish on several networks at once: text (with or without AI), media, per-platform preview, and two exits — schedule or publish now.",fr:"Un seul formulaire pour publier sur plusieurs réseaux à la fois : texte (avec ou sans IA), médias, aperçu par plateforme, et deux sorties — programmer ou publier maintenant."}),children:[e.jsx(h,{name:"create",alt:"Create Post",caption:a({es:"Create Post: contenido y media a la izquierda, preview en vivo y frecuencia a la derecha.",en:"Create Post: content and media on the left, live preview and frequency on the right.",fr:"Create Post : contenu et médias à gauche, aperçu en direct et fréquence à droite."})}),e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:"Ve a Create Post (menú lateral o el botón rojo). Antes de nada, revisa que la compañía activa (arriba a la izquierda) sea la correcta.",en:"Go to Create Post (side menu or the red button). First, check the active company (top-left) is the right one.",fr:"Va sur Create Post (menu latéral ou le bouton rouge). D'abord, vérifie que l'entreprise active (en haut à gauche) est la bonne."})}),e.jsx(o,{n:2,children:a({es:'Escribe el Post Title y el Global Caption — o pulsa "Generate with AI" para que la IA lo redacte. Puedes ajustar el texto por plataforma después.',en:'Write the Post Title and Global Caption — or click "Generate with AI". You can tweak the text per platform afterwards.',fr:"Écris le Post Title et le Global Caption — ou clique sur « Generate with AI ». Tu peux ajuster le texte par plateforme ensuite."})}),e.jsx(o,{n:3,children:a({es:'Sube la media: arrastra archivos, o usa "Create with Canvas", "Create with AI", "Krealo Video" (editor de video) o importa desde Drive.',en:'Upload media: drag files, or use "Create with Canvas", "Create with AI", "Krealo Video" or import from Drive.',fr:"Ajoute les médias : glisse des fichiers, ou utilise « Create with Canvas », « Create with AI », « Krealo Video » ou importe depuis Drive."})}
1),e.jsx(o,{n:4,children:a({es:"Elige las cuentas/plataformas destino y revisa el Preview en vivo de la derecha: se ve exactamente como quedará en cada red.",en:"Pick the target accounts/platforms and check the live Preview on the right.",fr:"Choisis les comptes/plateformes cibles et vérifie l'aperçu en direct à droite : il montre exactement le rendu sur chaque réseau."})}),e.jsx(o,{n:5,children:a({es:'Decide la salida: programar con fecha/hora, o "Publish now" para que salga al instante (ver abajo la diferencia).',en:'Pick the exit: schedule with date/time, or "Publish now" (see the difference below).',fr:"Choisis la sortie : programmer avec date/heure, ou « Publish now » pour publier tout de suite (voir la différence ci-dessous)."})})]}),e.jsx(d,{children:a({es:"Programar vs Publicar ahora",en:"Schedule vs Publish now",fr:"Programmer vs Publier maintenant"})}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsx(f,{children:e.jsxs(b,{className:"space-y-1.5 py-4",children:[e.jsxs("p",{className:"flex items-center gap-2 text-sm font-medium",children:[e.jsx(_,{className:"h-4 w-4 text-primary"}),a({es:"Programar",en:"Schedule",fr:"Programmer"})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a({es:"Eliges fecha y hora; el post queda en el Calendario y se publica solo, sin pasar por Aprobaciones. Puedes editarlo o cancelarlo hasta el último minuto desde Calendar.",en:"Pick a date and time; the post lands on the Calendar and publishes on its own, without going through Approvals. You can edit or cancel it from Calendar until the last minute.",fr:"Choisis une date et une heure ; le post atterrit dans le Calendrier et se publie tout seul, sans passer par Approvals. Tu peux le modifier ou l'annuler jusqu'à la dernière minute depuis Calendar."})})]})}),e.jsx(f,{children:e.jsxs(b,{className:"space-y-1.5 py-4",children:[e.jsxs("p",{className:"flex items-center gap-2 text-sm font-medium",children:[e.jsx(M,{className:"h-4 w-4 text-primary"}),a({es:"Publicar ahora",en:"Publish now",fr:"Publier maintenant"})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a({es:'Al pulsar "Publish now" aparece un popup de confirmación que lista las cuentas exactas donde va a salir el post. Revísalas y confirma — es tu última oportunidad antes de que se publique de inmediato.',en:'Clicking "Publish now" opens a confirmation popup listing the exact accounts the post will go to. Review and confirm — it is your last chance before it publishes immediately.',fr:"En cliquant sur « Publish now », une fenêtre de confirmation liste les comptes exacts où le post va être publié. Vérifie et confirme — c'est ta dernière chance avant la publication immédiate."})})]})})]}),e.jsx(p,{children:a({es:'Consejo: si aún no quieres decidir, guarda como borrador ("View Drafts" arriba a la derecha) y retómalo cuando quieras.',en:'Tip: not ready to decide? Save it as a draft ("View Drafts", top-right) and come back later.',fr:"Astuce : pas prêt à décider ? Enregistre-le en brouillon (« View Drafts », en haut à droite) et reviens-y plus tard."})}),e.jsx(i,{to:"/create",children:a({es:"Ir a Create Post",en:"Go to Create Post",fr:"Aller à Create Post"})})]}),e.jsxs(r,{id:"dashboard",title:a({es:"Dashboard",en:"Dashboard",fr:"Tableau de bord"}),tagline:a({es:"La portada del Publisher: tus agentes, el resumen de la compañía activa y accesos rápidos a todo.",en:"The Publisher home: your agents, the active company summary and quick shortcuts.",fr:"La page d'accueil du Publisher : tes agents, le résumé de l'entreprise active et des raccourcis rapides."}),children:[e.jsx(h,{name:"dashboard",alt:"Dashboard",caption:a({es:"Agentes arriba, métricas de la compañía activa abajo.",en:"Agents on top, active-company metrics below.",fr:"Agents en haut, métriques de l'entreprise active en dessous."})}),e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:'Arriba verás tus agentes (Krealo Media, Ads, asistentes…). Pulsa uno para abrir su chat, o "View all" para la lista completa.',en:'At the top you see your agents. Click one to open its chat, or "View all" for the full list.',fr:"En haut, tu vois tes agents (Krealo Media, Ads, assistants…). 
1Clique sur l'un d'eux pour ouvrir son chat, ou « View all » pour la liste complète."})}),e.jsx(o,{n:2,children:a({es:'Usa la barra "Send a message to your agents" para pedirles algo sin salir del Dashboard: elige la compañía en el selector y escribe.',en:'Use the "Send a message to your agents" bar: pick the company in the selector and type.',fr:"Utilise la barre « Send a message to your agents » pour leur demander quelque chose sans quitter le Dashboard : choisis l'entreprise et écris."})}),e.jsx(o,{n:3,children:a({es:"El bloque de la compañía activa muestra Total posts, Published, Scheduled y cuentas conectadas. Cambia el rango (7 días, 30 días…) con el selector.",en:"The active-company block shows Total posts, Published, Scheduled and connected accounts. Change the range (7 days, 30 days…) with the selector.",fr:"Le bloc de l'entreprise active affiche Total posts, Published, Scheduled et les comptes connectés. Change la période (7 jours, 30 jours…) avec le sélecteur."})}),e.jsx(o,{n:4,children:a({es:'Personaliza la vista con "Add widget" (comentarios, mensajes, tareas…) o vuelve al orden original con "Reset layout".',en:'Customize with "Add widget" (comments, messages, tasks…) or use "Reset layout".',fr:"Personnalise l'affichage avec « Add widget » (commentaires, messages, tâches…) ou reviens à l'ordre initial avec « Reset layout »."})}),e.jsx(o,{n:5,children:a({es:`Atajos: "Create Post" y "Blogs" están directo en el resumen; el banner "What's New" te avisa de novedades de cada versión.`,en:`Shortcuts: "Create Post" and "Blogs" sit right in the summary; the "What's New" banner announces each release.`,fr:"Raccourcis : « Create Post » et « Blogs » sont directement dans le résumé ; la bannière « What's New » annonce chaque nouveauté."})})]}),e.jsx(p,{children:a({es:"Consejo: el selector de compañía (arriba a la izquierda) manda en TODA la app — Dashboard, Create Post, Blogs y Calendar muestran siempre la compañía activa.",en:"Tip: the company selector (top-left) drives the WHOLE app — Dashboard, Create Post, Blogs and Calendar always show the active company.",fr:"Astuce : le sélecteur d'entreprise (en haut à gauche) contrôle TOUTE l'application — Dashboard, Create Post, Blogs et Calendar affichent toujours l'entreprise active."})})]}),e.jsxs(r,{id:"calendar",title:a({es:"Calendario",en:"Calendar",fr:"Calendrier"}),tagline:a({es:"Todo lo que está programado, día por día. Lo que se programa aquí se publica solo, sin pasar por Aprobaciones.",en:"Everything scheduled, day by day. What is scheduled here publishes on its own, without going through Approvals.",fr:"Tout ce qui est programmé, jour par jour. Ce qui est programmé ici se publie tout seul, sans passer par Approvals."}),children:[e.jsx(h,{name:"scheduler",alt:"Calendar",caption:a({es:"Calendar: cada post programado en su día y hora; filtros por compañía, plataforma y estado.",en:"Calendar: each scheduled post on its day and time; filters by company, platform and status.",fr:"Calendar : chaque post programmé à son jour et son heure ; filtres par entreprise, plateforme et statut."})}),e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:"Abre Calendar: verás todos los posts programados en su día y hora. Filtra por compañía, plataforma o estado con la barra de arriba.",en:"Open Calendar: every scheduled post shows on its day and time. Filter by company, platform or status with the top bar.",fr:"Ouvre Calendar : tous les posts programmés s'affichent à leur jour et heure. Filtre par entreprise, plateforme ou statut avec la barre du haut."})}),e.jsx(o,{n:2,children:a({es:'Pulsa "Best hours" para ver los horarios sugeridos de mejor alcance antes de elegir cuándo publicar.',en:'Click "Best hours" to see suggested high-reach time slots before picking a publish time.',fr:"Clique sur « Best hours » pour voir les créneaux suggérés à plus fort impact avant de choisir l'heure de publication."})}),e.jsx(o,{n:3,children:a({es:'Crea directo desde el calendario: "Create Post" para una publicación o "Create Event" para un evento en la fecha elegida.',en:'Create straight from the calendar: "Create Post" for a publication or "Create Event" for an event on the chosen date.',fr:"Crée directement depuis le calendrier : « Create Post » pour une publication ou « Create Event » pour un événement à la date choisie."})}),e.jsx(o,{n:4,children:a({es:"Haz clic en cualquier post programado para revisarlo, editarlo o cancelarlo antes de su hora.",en:"Click any scheduled post to review, edit or cancel it before its time.",fr:"Clique sur n'importe quel post programmé pour le vérifier, le modifier ou l'annuler avant son heure."})})]}),e.jsx(i,{to:"/scheduler",children:a({es:"Abrir Calendar",en:"Open Calendar",fr:"Ouvrir Calendar"})})]}),e.jsxs(r,{id:"tasks",title:"Tasks",tagline:a({es:"Las tareas del equipo (y de los agentes): quién hace qué, para cuándo y en qué estado.",en:"Team (and agent) tasks: who does what, by when and in what state.",fr:"Les tâches de l'équipe (et des agents) : qui fait quoi, pour quand et dans quel état."}),children:[e.jsx(h,{name:"tasks",alt:"Tasks",caption:a({es:"Tasks: contadores arr
1iba, filtros al centro y vistas Table / Kanban / By person.",en:"Tasks: counters on top, filters in the middle, Table / Kanban / By person views.",fr:"Tasks : compteurs en haut, filtres au centre, vues Table / Kanban / By person."})}),e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:"Ve a Tasks: arriba tienes los contadores Pending, In progress, Completed y Overdue de un vistazo.",en:"Go to Tasks: the Pending, In progress, Completed and Overdue counters sit on top.",fr:"Va sur Tasks : les compteurs Pending, In progress, Completed et Overdue sont en haut, en un coup d'œil."})}),e.jsx(o,{n:2,children:a({es:'Pulsa "New task" y define título, cliente/compañía, asignado, prioridad y deadline. Las tareas también pueden tomarlas los agentes.',en:'Click "New task" and set title, client/company, assignee, priority and deadline. Agents can also pick tasks up.',fr:"Clique sur « New task » et définis titre, client/entreprise, assigné, priorité et échéance. Les agents peuvent aussi prendre des tâches."})}),e.jsx(o,{n:3,children:a({es:"Cambia de vista según lo que necesites: Table (lista completa), Kanban (arrastra entre columnas), Today's progress o By person.",en:"Switch views: Table (full list), Kanban (drag between columns), Today's progress or By person.",fr:"Change de vue selon le besoin : Table (liste complète), Kanban (glisser entre colonnes), Today's progress ou By person."})}),e.jsx(o,{n:4,children:a({es:'Filtra por cliente, estado, asignado, deadline o semana — y guarda combinaciones frecuentes con "Saved views".',en:'Filter by client, status, assignee, deadline or week — and save frequent combos with "Saved views".',fr:"Filtre par client, statut, assigné, échéance ou semaine — et enregistre les combinaisons fréquentes avec « Saved views »."})}),e.jsx(o,{n:5,children:a({es:'El flujo de estados es pending → in progress → done. Las @menciones en comentarios te llegan al panel "Task mentions".',en:'Statuses flow pending → in progress → done. @mentions in comments land in the "Task mentions" panel.',fr:"Le flux des statuts est pending → in progress → done. Les @mentions dans les commentaires arrivent dans le panneau « Task mentions »."})})]}),e.jsx(i,{to:"/tasks",children:a({es:"Ir a Tasks",en:"Go to Tasks",fr:"Aller à Tasks"})})]}),e.jsxs(r,{id:"statistics",title:a({es:"Estadísticas",en:"Statistics",fr:"Statistiques"}),tagline:a({es:"El mismo panel de analítica del Dashboard, pero a página completa: rendimiento de tus posts por plataforma y por cuenta.",en:"The same analytics panel from the Dashboard, full-page: how your posts perform by platform and by account.",fr:"Le même panneau d'analytique que le Dashboard, en pleine page : la performance de tes posts par plateforme et par compte."}),children:[e.jsx(l,{items:[{es:"Desglose por plataforma: qué red rinde mejor para la compañía activa.",en:"Breakdown by platform: which network performs best for the active company.",fr:"Répartition par plateforme : quel réseau performe le mieux pour l'entreprise active."},{es:"Top posts: las publicaciones con más alcance/interacción.",en:"Top posts: the publications with the most reach/engagement.",fr:"Top posts : les publications avec le plus de portée/engagement."},{es:"Tabla de rendimiento post por post, y salud de cada cuenta conectada (token vencido, error de permisos, etc.).",en:"A post-by-post performance table, and the health of each connected account (expired token, permission error, etc.).",fr:"Un tableau de performance post par post, et l'état de chaque compte connecté (token expiré, erreur de permission, etc.)."},{es:"Exporta los datos a CSV para llevarlos a otro reporte.",en:"Export the data to CSV to bring it into another report.",fr:"Exporte les données en CSV pour les intégrer à un autre rapport."},{es:"Si la compañía tiene varias propiedades de Google Analytics conectadas, puedes fijar cuál es la POR DEFECTO: esa se abre siempre primero.",en:"If the company has several Google Analytics properties connected, you can pin the DEFAULT one: that one always opens first.",fr:"Si l'entreprise a plusieurs propriétés Google Analytics connectées, tu peux fixer celle PAR DÉFAUT : c'est elle qui s'ouvre toujours en premier."},{es:"En Reportes, el rango de fechas arranca con un periodo por defecto sensato (el mes en curso) — 
1cámbialo arriba si necesitas otro.",en:"In Reports, the date range starts with a sensible default period (the current month) — change it at the top if you need another.",fr:"Dans Rapports, la plage de dates démarre avec une période par défaut raisonnable (le mois en cours) — change-la en haut si besoin."}]}),e.jsx(i,{to:"/statistics",children:a({es:"Ir a Statistics",en:"Go to Statistics",fr:"Aller à Statistics"})})]}),e.jsxs(r,{id:"blogs",title:a({es:"Blogs automáticos",en:"Auto blogs",fr:"Blogs automatiques"}),tagline:a({es:"El Publisher genera blogs SEO con IA (texto con OpenAI, imagen con Runware) a partir de tus ideas o de Search Console, y los publica en WordPress, Shopify o Wix según la conexión de la compañía.",en:"The Publisher generates SEO blogs with AI (OpenAI text, Runware image) from your ideas or Search Console, and publishes them to WordPress, Shopify or Wix.",fr:"Le Publisher génère des blogs SEO avec l'IA (texte OpenAI, image Runware) à partir de tes idées ou de Search Console, et les publie sur WordPress, Shopify ou Wix selon la connexion de l'entreprise."}),children:[e.jsx(h,{name:"blogs",alt:"Blogs",caption:a({es:"Blogs: cola de ideas arriba (el autoblog las usa primero), lista de posts abajo.",en:"Blogs: ideas queue on top (the autoblog uses them first), post list below.",fr:"Blogs : file d'idées en haut (l'autoblog les utilise en premier), liste des posts en dessous."})}),e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:"Idiomas: define el idioma principal (y secundario/terciario si aplica) en editar-compañía. Sin idioma principal NO se generan blogs.",en:"Languages: set the primary (and secondary/tertiary) language in edit-company. Without a primary language NO blogs are generated.",fr:"Langues : définis la langue principale (et secondaire/tertiaire si besoin) dans éditer-entreprise. Sans langue principale, AUCUN blog n'est généré."})}),e.jsx(o,{n:2,children:a({es:'Frecuencia: en Automation configura los días y la hora en "Publishing frequency by company". Usa "Test frequency" para simular la próxima corrida.',en:'Frequency: in Automation set days and time under "Publishing frequency by company". Use "Test frequency" to simulate the next run.',fr:"Fréquence : dans Automation, configure les jours et l'heure dans « Publishing frequency by company ». Utilise « Test frequency » pour simuler la prochaine exécution."})}),e.jsx(o,{n:3,children:a({es:"Modo de aprobación: manual (el blog queda pendiente y lo revisas antes de publicar) o automático (se publica solo al generarse).",en:"Approval mode: manual (the blog waits for your review) or automatic (publishes on generation).",fr:"Mode d'approbation : manuel (le blog attend ta relecture) ou automatique (se publie seul dès sa génération)."})}),e.jsx(o,{n:4,children:a({es:'Ideas: añade títulos en "Blog ideas (titles)". El autoblog los consume en orden (el más viejo primero) y los marca usados; si la cola está vacía, toma un tema real de Search Console.',en:'Ideas: add titles under "Blog ideas (titles)". The autoblog consumes them oldest-first and marks them used; with an empty queue it pulls a real topic from Search Console.',fr:"Idées : ajoute des titres dans « Blog ideas (titles) ». L'autoblog les consomme du plus ancien au plus récent et les marque utilisés ; si la file est vide, il prend un vrai sujet depuis Search Console."})}),e.jsx(o,{n:5,children:a({es:'Generar ahora: pulsa "Generar blog ahora" para lanzar uno al momento, sin esperar la próxima corrida programada.',en:'Generate now: click "Generate blog now" to launch one instantly, without waiting for the next scheduled run.',fr:"Générer maintenant : clique sur « Generar blog ahora » pour en lancer un immédiatement, sans attendre la prochaine exécution programmée."})}),e.jsx(o,{n:6,children:a({es:"Catch-up: si a la hora programada el sistema estaba apagado, al volver detecta el blog perdido y lo genera (sin duplicar los ya publicados).",en:"Catch-up: if the system was off at the scheduled time, on return it detects the missed blog and generates it (never duplicating published ones).",fr:"Rattrapage : si le système était éteint à l'heure programmée, il détecte au retour le blog manqué et le génère (sans jamais dupliquer ceux déjà publiés)."})})]}),e.jsx(h,{name:"automation",alt:"Automation",caption:a({es:"Automation: frecuencia por compañía y republicación Blog → Google Business.",en:"Automation: per-company frequency and Blog → Google Business republishing.",fr:"Automation : fréquence par entreprise et republication Blog → Google Business."})}),e.jsx(d,{children:a({es:"Compañías de blogs (con fuentes)",en:"Blog companies (with sources)",fr:"Compagnies de blogs (avec sources)"})}),e.jsx(l,{items:[{es:'En editar-compañía puedes marcarla como "Compañía de blogs": solo publica contenido, y sus ideas salen de las FUENTES que definas.',en:'In edit-company you can mark it as a "Blog company": it only publishes content, and its ideas come from the SOURCES you define.',fr:"Dans éditer-entreprise, tu peux la marquer comme « Compagnie de blogs » : elle ne publie que du contenu, et ses idées viennent des SOURCES que tu définis."},{es:"Las fuentes posibles: subreddits (hasta 12), la portada del día de Hacker News, feeds RSS de cualquier página (hasta 12) y NewsAPI con tu propia key, país y búsqueda. Además puedes vetar dominios que no quieres como fuente.",en:"Possible sources: subreddits (up to 12), Hacker News front page, RSS feeds from any page (up to 12) and NewsAPI with your own key, country and query. You can also block domains you do not want as a source.",fr:"Sources possibles : subreddits (jusqu'à 12), la une du jour de Hacker News, des flux RSS de n'importe quelle page (jusqu'à 12) et NewsAPI avec ta propre clé, ton pays et ta recherche. Tu peux aussi exclure des domaines dont tu ne veux pas comme source."}
1,{es:"Con fuentes, cada blog queda anclado a un artículo real: nada inventado y nada repetido. Sin fuentes, las ideas salen del Brain y de Search Console como en cualquier otra compañía.",en:"With sources, each blog is grounded in a real article: nothing invented, nothing repeated. Without sources, ideas come from the Brain and Search Console like in any other company.",fr:"Avec des sources, chaque blog est ancré à un article réel : rien d'inventé, rien de répété. Sans sources, les idées viennent du Brain et de Search Console comme pour toute autre entreprise."}]}),e.jsx(p,{children:a({es:'Si el terciario está definido (ej. Krealo Media: en/fr/es) el blog sale en los 3 idiomas. Y si activas "Blog → Google Business", cada blog publicado sale también como post en la ficha de Google de la compañía.',en:'If a third language is set the blog is produced in all three. With "Blog → Google Business" on, each published blog also goes out as a post on the company Google profile.',fr:"Si une troisième langue est définie, le blog sort dans les 3 langues. Et si « Blog → Google Business » est activé, chaque blog publié ressort aussi en post sur la fiche Google de l'entreprise."})}),e.jsx(i,{to:"/search-console",children:a({es:"Ir a Search Console / Auto-blog",en:"Go to Search Console",fr:"Aller à Search Console"})})]}),e.jsxs(r,{id:"approvals",title:"Approvals",tagline:a({es:"El filtro humano del contenido automático: lo que generan los agentes espera aquí tu visto bueno antes de salir.",en:"The human filter for automatic content: what agents generate waits here for your go-ahead.",fr:"Le filtre humain du contenu automatique : ce que génèrent les agents attend ici ton feu vert avant de sortir."}),children:[e.jsx(h,{name:"approvals",alt:"Approvals",caption:a({es:'Approvals: interruptor de auto-posts por compañía arriba, cola "Awaiting approval" abajo.',en:'Approvals: per-company auto-posts switch on top, "Awaiting approval" queue below.',fr:"Approvals : interrupteur des auto-posts par entreprise en haut, file « Awaiting approval » en dessous."})}),e.jsx(d,{children:a({es:"La política, en una línea",en:"The policy, in one line",fr:"La politique, en une ligne"})}),e.jsx("p",{className:"rounded-lg border border-primary/20 bg-primary/5 px-3 py-2 text-sm",children:a({es:"Solo lo que se va a publicar AHORA requiere aprobación; lo programado con fecha se publica solo, sin pasar por esta cola.",en:"Only content publishing NOW requires approval; scheduled content publishes on its own, without passing through this queue.",fr:"Seul le contenu qui se publie MAINTENANT nécessite une approbation ; le contenu programmé se publie tout seul, sans passer par cette file."})}),e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:"Ve a Approvals (menú lateral, o pulsa el aviso del inbox cuando llegue algo nuevo).",en:"Go to Approvals (side menu, or click the inbox alert when something new arrives).",fr:"Va sur Approvals (menu latéral, ou clique sur l'alerte inbox quand quelque chose arrive)."})}),e.jsx(o,{n:2,children:a({es:'Opcional: activa "Auto posts (with approval)" por compañía — genera un borrador de post al día desde el Brain de la compañía, y NADA se publica solo.',en:'Optional: enable "Auto posts (with approval)" per company — it drafts one post a day from the company Brain, and NOTHING publishes alone.',fr:"Optionnel : active « Auto posts (with approval) » par entreprise — cela génère un brouillon de post par jour depuis le Brain de l'entreprise, et RIEN ne se publie seul."})}),e.jsx(o,{n:3,children:a({es:'Los pendientes aparecen en "Awaiting approval", agrupados por compañía. Usa "Select all" para operar el bloque completo de una compañía.',en:'Pending items appear under "Awaiting approval", grouped by company. Use "Select all" to act on a whole company block.',fr:"Les éléments en attente apparaissent sous « Awaiting approval », groupés par entreprise. Utilise « Select all » pour agir sur tout un bloc d'entreprise."})}),e.jsx(o,{n:4,children:a({es:"Revisa texto e imagen de cada pieza. Puedes Aprobar, Rechazar o Editar antes de decidir.",en:"Review text and image. Approve, Reject or Edit before deciding.",fr:"Vérifie le texte et l'image de chaque pièce. Tu peux Approuver, Rejeter ou Modifier avant de décider."})}),e.jsx(o,{n:5,children:a({es:"Al aprobar, la pieza se publica (o se programa si trae fecha). Al rechazar, no sale y el agente lo registra para mejorar.",en:"On approve, the piece publishes (or schedules if dated). On reject, it never goes out and the agent logs it to improve.",fr:"En approuvant, la pièce se publie (ou se programme si elle a une date). En rejetant, elle ne sort jamais et l'agent l'enregistre pour s'améliorer."})})]}),e.jsx(p,{children:a({es:"Si no apruebas a tiempo, el sistema le recuerda a tu equipo automáticamente. Los posts que TÚ programas desde Create Post no pasan por aquí: ya son decisión tuya.",en:"If not approved in time, the team gets an automatic reminder. Posts YOU schedule from Create Post never pass through here: they are already your decision.",fr:"Si tu n'approuves pas à temps, l'équipe reçoit un rappel automatique. Les posts que TU programmes depuis Create Post ne passent jamais par ici : c'est déjà ta décision."})}),e.jsx(i,{to:"/approvals",children:a({es:"Ir a Approvals",en:"Go to Approvals",fr:"Aller à Approvals"})})]}),e.jsxs(r,{id:"history",title:a({es:"Posts",en:"Posts",fr:"Publications"}),tagline:a({es:"Todo lo programado, lo publicado y lo que falló, c
1on detalle por plataforma.",en:"Everything scheduled, published and failed, with per-platform detail.",fr:"Tout ce qui est planifié, publié ou en échec, avec le détail par plateforme."}),children:[e.jsx(l,{items:[{es:"Filtra por compañía, red, estado (programado/publicado/fallido) o rango de fechas.",en:"Filter by company, network, status (scheduled/published/failed) or date range.",fr:"Filtre par entreprise, réseau, statut (planifié/publié/échoué) ou plage de dates."},{es:"Un post fallido se puede reintentar solo en la(s) plataforma(s) que fallaron, sin duplicar las que sí salieron.",en:"A failed post can be retried only on the platform(s) that failed, without duplicating the ones that already went out.",fr:"Un post échoué peut être relancé uniquement sur la ou les plateformes en échec, sans dupliquer celles déjà publiées."},{es:"También puedes borrar una publicación ya hecha directamente desde su plataforma.",en:"You can also delete an already-published post directly from its platform.",fr:"Tu peux aussi supprimer une publication déjà faite directement depuis sa plateforme."}]}),e.jsx(i,{to:"/history",children:a({es:"Ir a Posts",en:"Go to Posts",fr:"Aller aux Publications"})})]}),e.jsxs(r,{id:"inbox",title:"Inbox",tagline:a({es:"Mensajería privada del equipo y de las cuentas sociales, en dos pestañas: Messages y Social.",en:"Private messaging for the team and social accounts, in two tabs: Messages and Social.",fr:"Messagerie privée de l'équipe et des comptes sociaux, en deux onglets : Messages et Social."}),children:[e.jsx(l,{items:[{es:'Messages: chat 1 a 1 con compañeros y con agentes (incluidos los agentes de OpenClaw). Crea Grupos con "Grupo" para conversaciones de varias personas.',en:'Messages: 1-to-1 chat with teammates and agents (including OpenClaw agents). Create Groups with "Group" for multi-person conversations.',fr:"Messages : chat 1 à 1 avec des collègues et des agents (y compris les agents OpenClaw). Crée des Groupes avec « Groupe » pour les conversations à plusieurs."},{es:"Social: DMs privados reales de Facebook e Instagram por compañía (los comentarios públicos viven aparte, en Comments).",en:"Social: real private DMs from Facebook and Instagram per company (public comments live separately, in Comments).",fr:"Social : vrais DM privés de Facebook et Instagram par entreprise (les commentaires publics vivent à part, dans Comments)."},{es:"Un contador rojo en el ícono del menú avisa cuántos mensajes privados están sin responder.",en:"A red counter on the menu icon shows how many private messages are unanswered.",fr:"Un compteur rouge sur l'icône du menu indique combien de messages privés sont sans réponse."},{es:'Si una cuenta social tiene el token vencido o un error de permisos, aquí mismo aparece el aviso con "Reconnect".',en:'If a social account has an expired token or a permission error, the warning appears right here with "Reconnect".',fr:"Si un compte social a un token expiré ou une erreur de permission, l'alerte apparaît ici même avec « Reconnect »."}]}),e.jsx(i,{to:"/inbox",children:a({es:"Ir a Inbox",en:"Go to Inbox",fr:"Aller à Inbox"})})]}),e.jsxs(r,{id:"team-email",title:a({es:"Correo del equipo",en:"Team Email",fr:"Courriel de l'équipe"}),tagline:a({es:"El correo real de los clientes, de todos los buzones conectados del equipo, clasificado por compañía y en una sola bandeja. No es el Inbox: el Inbox es el chat interno.",en:"The team's real client email, from every connected mailbox, classified per company in a single shared inbox. This is not the Inbox: the Inbox is internal chat.",fr:"Le vrai courriel des clients, de toutes les boîtes connectées de l'équipe, classé par entreprise dans une seule boîte partagée. Ce n'est pas l'Inbox : l'Inbox, c'est le chat interne."}),children:[e.jsx(d,{children:a({es:"1. Conectar tu buzón",en:"1. Connect your mailbox",fr:"1. Connecter ta boîte"})}),e.jsx("p",{className:"text-sm text-foreground/90",children:a({es:"Se conecta desde tu cuenta personal (Integrations → Cuenta personal), no por compañía: es TU buzón. Hay dos vías y NO dan el mismo acceso.",en:"You connect it from your personal account (Integrations → Personal account), not per company: it is YOUR mailbox. There are two routes and they do not grant the same access.",fr:"La connexion se fait depuis ton compte personnel (Integrations → Compte personnel), pas par entreprise : c'est TA boîte. Il y a deux voies, et elles ne donnent pas le même accès."})}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsx(f,{children:e.jsxs(b,{className:"space-y-1.5 py-4",children:[e.jsxs("p",{className:"flex items-center gap-2 text-sm font-medium",children:[e.jsx(P,{className:"h-4 w-4 text-primary"}),a({es:"Google (OAuth) — solo lectura",en:"Google (OAuth) — read only",fr:"Google (OAuth) — lecture seule"})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a({es:'Pide un único permiso de lectura (gmail.readonly): el Publisher puede leer para clasificar y nada más. Es la vía con menos permiso, pero HOY no conecta a nadie — ese permiso es "restringido" para Google y su revisión no está hecha.',en:'Asks for a single read scope (gmail.readonly): the Publisher can read to classify and nothing else. It is the lowest-permission route, but TODAY it connects nobody — that scope is "restricted" for Google and its review is not done.',fr:"Demande une seule permission de lecture (gmail.readonly) : le Publisher peut lire pour classer, rien d'autre. C'est la voie la moins permissive, mais AUJOURD'HUI elle ne connecte personne — cette permission est « restreinte » chez Google et sa révision n'est pas faite."})})]})}),e.jsx(f,{children:e.jsxs(b,{className:"space-y-1.5 py-4",children:[e.jsxs("p",{className:"flex items-center gap-2 text-sm font-medium",children:[e.jsx(C,{className:"h-4 w-4 text-primary"}),a({es:"Contraseña de aplicación (IMAP + SMTP)",en:"App password (IMAP + SMTP)",fr:"Mot de passe d'application (IMAP + SMTP)"})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a({es:'Funciona hoy y además permite responder. Pero da acceso COMPLETO al buzón: leer, enviar y borrar — es MÁS permiso que la vía de Google, no menos. Se crea 
1igual que la del guía "Conectar Gmail" de más abajo.',en:'Works today and also allows replying. But it grants FULL mailbox access: read, send and delete — that is MORE permission than the Google route, not less. You create it exactly like in the "Connect Gmail" guide below.',fr:"Fonctionne aujourd'hui et permet aussi de répondre. Mais elle donne un accès COMPLET à la boîte : lire, envoyer et supprimer — c'est PLUS de permission que la voie Google, pas moins. Elle se crée comme dans le guide « Connecter Gmail » plus bas."})})]})})]}),e.jsx(p,{children:a({es:'En las dos vías el secreto se guarda cifrado en el servidor y no vuelve nunca al navegador. Y el Publisher NUNCA borra ni marca como leído: abre el buzón en modo solo-lectura, así que tus "no leídos" siguen igual que antes.',en:"On both routes the secret is stored encrypted on the server and never comes back to the browser. And the Publisher NEVER deletes nor marks as read: it opens the mailbox read-only, so your unread count stays untouched.",fr:"Dans les deux cas, le secret est stocké chiffré côté serveur et ne revient jamais au navigateur. Et le Publisher ne supprime JAMAIS et ne marque pas comme lu : la boîte est ouverte en lecture seule, tes « non lus » restent intacts."})}),e.jsx(d,{children:a({es:"2. Privacidad: el cuerpo del correo no se guarda",en:"2. Privacy: the email body is not stored",fr:"2. Confidentialité : le corps du courriel n'est pas stocké"})}),e.jsx("p",{className:"rounded-lg border border-primary/20 bg-primary/5 px-3 py-2 text-sm",children:a({es:"Por defecto el Publisher guarda solo las cabeceras (de quién, para quién, asunto, fecha) y una vista previa corta. El cuerpo completo NO se almacena. Tu buzón trae también correo personal, y ante la duda no se guarda.",en:"By default the Publisher stores only the headers (from, to, subject, date) and a short preview. The full body is NOT stored. Your mailbox also carries personal mail, and when in doubt nothing is kept.",fr:"Par défaut, le Publisher ne stocke que les en-têtes (de qui, pour qui, sujet, date) et un court aperçu. Le corps complet n'est PAS stocké. Ta boîte contient aussi du courrier personnel, et dans le doute, rien n'est conservé."})}),e.jsx(d,{children:a({es:"3. Las dos pestañas",en:"3. The two tabs",fr:"3. Les deux onglets"})}),e.jsx(l,{items:[{es:"Equipo: la bandeja compartida. Solo aparece el correo YA atribuido a una compañía a la que tú tienes acceso.",en:"Team: the shared inbox. Only mail ALREADY attributed to a company you have access to shows up here.",fr:"Équipe : la boîte partagée. On n'y voit que le courriel DÉJÀ attribué à une entreprise à laquelle tu as accès."},{es:'Sin clasificar: tu bandeja privada. Hasta que alguien dice "esto es del cliente X", no lo ve nadie más — ni siquiera un administrador.',en:'Unclassified: your private inbox. Until someone says "this belongs to client X", nobody else sees it — not even an admin.',fr:"Non classé : ta boîte privée. Tant que personne ne dit « ceci est du client X », personne d'autre ne le voit — pas même un administrateur."},{es:"Los filtros (compañía, estado, asignado, búsqueda) viven en la URL: puedes copiar el enlace y mandarle a alguien exactamente la vista que estás mirando.",en:"The filters (company, status, assignee, search) live in the URL: copy the link and send someone the exact view you are looking at.",fr:"Les filtres (entreprise, statut, assigné, recherche) vivent dans l'URL : copie le lien et envoie à quelqu'un exactement la vue que tu regardes."},{es:"Bloquear remitentes (Block senders): el spam recurrente se corta desde el propio correo — los bloqueados dejan de entrar a la bandeja sin tocar tu buzón real.",en:"Block senders: recurring spam is cut from the email itself — blocked senders stop entering the inbox without touching your real mailbox.",fr:"Bloquer des expéditeurs (Block senders) : le spam récurrent se coupe depuis le courriel lui-même — les bloqués n'entrent plus dans la boîte sans toucher ta vraie boîte."}]}),e.jsx(d,{children:a({es:"4. Cómo decide de qué compañía es un correo",en:"4. How 
1it decides which company an email belongs to",fr:"4. Comment il décide à quelle entreprise appartient un courriel"})}),e.jsx("p",{className:"text-sm text-foreground/90",children:a({es:"De la pista más fiable a la más floja. Gana la primera que da resultado; si hay EMPATE se para ahí y el correo se queda sin clasificar a propósito — atribuir mal un correo a un cliente es peor que no atribuirlo.",en:"From the most reliable clue to the weakest. The first one that resolves wins; on a TIE it stops there and the email is deliberately left unclassified — misattributing an email to a client is worse than not attributing it.",fr:"De l'indice le plus fiable au plus faible. La première règle qui aboutit l'emporte ; en cas d'ÉGALITÉ, on s'arrête et le courriel reste volontairement non classé — mal attribuer un courriel à un client est pire que ne pas l'attribuer."})}),e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:"El remitente está en los Contact emails de la compañía (confianza alta).",en:"The sender is in the company's Contact emails (high confidence).",fr:"L'expéditeur est dans les Contact emails de l'entreprise (confiance élevée)."})}),e.jsx(o,{n:2,children:a({es:"Un destinatario o CC está en los Contact emails (confianza media).",en:"A recipient or CC is in the Contact emails (medium confidence).",fr:"Un destinataire ou un CC est dans les Contact emails (confiance moyenne)."})}),e.jsx(o,{n:3,children:a({es:"El dominio del remitente está en los Contact domains (media).",en:"The sender's domain is in the Contact domains (medium).",fr:"Le domaine de l'expéditeur est dans les Contact domains (moyenne)."})}),e.jsx(o,{n:4,children:a({es:"El dominio del remitente es el mismo que el del sitio web de la compañía (media).",en:"The sender's domain equals the company's website domain (medium).",fr:"Le domaine de l'expéditeur est celui du site web de l'entreprise (moyenne)."})}),e.jsx(o,{n:5,children:a({es:"El nombre de la compañía aparece en el asunto: esto NO clasifica. Se guarda como sugerencia para que una persona lo confirme.",en:"The company name appears in the subject: this does NOT classify. It is kept as a suggestion for a human to confirm.",fr:"Le nom de l'entreprise apparaît dans le sujet : cela ne classe PAS. C'est gardé comme suggestion, à confirmer par une personne."})})]}),e.jsx(p,{children:a({es:'Los dominios públicos (gmail.com, outlook.com, yahoo, icloud, videotron, wixsite…) nunca atribuyen por dominio: si valieran, un contactDomains con "gmail.com" se llevaría el correo personal de medio equipo. Los Contact emails y domains se declaran a mano en editar-compañía.',en:`Public domains (gmail.com, outlook.com, yahoo, icloud, videotron, wixsite…) never attribute by domain: if they did, a contactDomains with "gmail.com" would swallow half the team's personal mail. Contact emails and domains are declared by hand in edit-company.`,fr:"Les domaines publics (gmail.com, outlook.com, yahoo, icloud, videotron, wixsite…) n'attribuent jamais par domaine : sinon, un contactDomains avec « gmail.com » emporterait le courrier personnel de la moitié de l'équipe. Les Contact emails et domains se déclarent à la main dans éditer-entreprise."})}),e.jsx(d,{children:a({es:"5. Reglas de asignación",en:"5. Assignment rules",fr:"5. Règles d'assignation"})}),e.jsx(l,{items:[{es:"En Settings → Correo del equipo defines de quién es un correo según el remitente o según la compañía.",en:"In Settings → Team Email you define who owns an email based on the sender or the company.",fr:"Dans Settings → Courriel de l'équipe, tu définis à qui appartient un courriel selon l'expéditeur ou l'entreprise."},{es:"Una regla de asignación no dispara nada sola: solo dice a quién pertenece el correo y quién recibe el aviso si se queda sin responder.",en:"An assignment rule fires nothing on its own: it only says who owns the email and who gets the reminder if it stays unanswered.",fr:"Une règle d'assignation ne déclenche rien toute seule : elle dit seulement à qui appartient le courriel et qui reçoit le rappel s'il reste sans réponse."},{es:"En esa misma pantalla ves qué buzones están sincronizando y, si uno falla, qué pasó y cómo arreglarlo.",en:"On that same screen you see which mailboxes are syncing and, if one fails, what happened and how to fix it.",fr:"Sur ce même écran, tu vois quelles boîtes se synchronisent et, si l'une échoue, ce qui s'est passé et comment le corriger."}]}),e.jsx(d,{children:a({es:"6. Auto-respuesta (lo más delicado)",en:"6. Auto-reply (the most delicate part)",fr:"6. Réponse automatique (le plus délicat)"})}),e.jsx("p",{className:"rounded-lg border border-primary/20 bg-primary/5 px-3 py-2 text-sm",children:a({es:"Es un correo que SALE A UN CLIENTE REAL sin que nadie lo lea. Llega apagada, y encenderla son DOS interruptores: el general (en Automation → Respuestas) y el de cada regla. Ninguno se enciende solo.",en:"It is an email that GOES OUT TO A REAL CLIENT with nobody reading it. It ships off, and turning it on takes TWO switches: the global one 
1(Automation → Replies) and the one on each rule. Neither turns itself on.",fr:"C'est un courriel qui PART VERS UN VRAI CLIENT sans que personne ne le lise. Elle arrive désactivée, et l'activer demande DEUX interrupteurs : le général (Automation → Réponses) et celui de chaque règle. Aucun ne s'active tout seul."})}),e.jsx(l,{items:[{es:"Nunca responde a una lista de correo, a un no-reply ni a algo que ya es una respuesta automática — se comprueba con las cabeceras reales, no adivinando por el texto. Si no se pudieron leer, no se envía.",en:"It never replies to a mailing list, a no-reply, or something that is already an auto-reply — checked against the real headers, not guessed from the text. If they could not be read, nothing is sent.",fr:"Elle ne répond jamais à une liste de diffusion, à un no-reply, ni à ce qui est déjà une réponse automatique — vérifié sur les vrais en-têtes, pas deviné depuis le texte. Si on n'a pas pu les lire, rien n'est envoyé."},{es:"Una sola auto-respuesta por hilo, jamás dos, con enfriamiento por remitente y un tope diario duro.",en:"One auto-reply per thread, never two, with a per-sender cooldown and a hard daily cap.",fr:"Une seule réponse automatique par fil, jamais deux, avec un délai par expéditeur et un plafond quotidien strict."},{es:"Queda marcada como automática en el historial del hilo: se distingue al instante de lo que escribió una persona.",en:"It is logged as automatic in the thread history: instantly distinguishable from what a person wrote.",fr:"Elle est marquée comme automatique dans l'historique du fil : impossible de la confondre avec ce qu'a écrit une personne."},{es:"Hoy, un buzón conectado por OAuth NO puede enviar (el permiso es de lectura): la configuración se guarda, pero no sale ningún correo y la pantalla lo avisa arriba. Por contraseña de aplicación sí puede.",en:"Today an OAuth-connected mailbox CANNOT send (the scope is read-only): the config saves, but no email goes out and the screen says so up top. With an app password it can.",fr:"Aujourd'hui, une boîte connectée par OAuth NE peut PAS envoyer (la permission est en lecture seule) : la configuration s'enregistre, mais aucun courriel ne part et l'écran le signale en haut. Avec un mot de passe d'application, oui."}]}),e.jsx(d,{children:a({es:"7. Convertir un correo en tarea",en:"7. Turn an email into a task",fr:"7. Transformer un courriel en tâche"})}),e.jsx(l,{items:[{es:"Abre el correo y usa el botón de crear tarea del panel del hilo: título, descripción, compañía y responsable salen ya rellenados del correo.",en:"Open the email and use the create-task button in the thread panel: title, description, company and assignee come pre-filled from the email.",fr:"Ouvre le courriel et utilise le bouton de création de tâche du panneau du fil : titre, description, entreprise et responsable sont pré-remplis depuis le courriel."},{es:"La tarea queda enlazada al correo, y desde entonces el hilo muestra un chip con el estado de esa tarea (in progress, done…) sin salir de la bandeja.",en:"The task stays linked to the email, and from then on the thread shows a chip with that task's status (in progress, done…) without leaving the inbox.",fr:"La tâche reste liée au courriel, et le fil affiche dès lors une puce avec le statut de cette tâche (in progress, done…) sans quitter la boîte."}]}),e.jsx(p,{children:a({es:"El correo del equipo tiene su propio permiso: poder leer el chat del Inbox NO es poder leer el correo de un cliente. Si no ves la entrada en el menú, pídesela a un administrador.",en:"Team Email has its own permission: being able to read the Inbox chat is NOT being able to read a client's email. If you cannot see the menu entry, ask an admin for it.",fr:"Le courriel de l'équipe a sa propre permission : pouvoir lire le chat de l'Inbox n'est PAS pouvoir lire le courriel d'un client. Si tu ne vois pas l'entrée du menu, demande-la à un administrateur."})}),e.jsx(i,{to:"/email",children:a({es:"Ir al Correo del equipo",en:"Go to Team Email",fr:"Aller au Courriel de l'équipe"})})]}),e.jsxs(r,{id:"comments",title:"Comments",tagline:a({es:"Comentarios públicos de Facebook, Instagram y YouTube: revísalos y responde desde un solo lugar.",en:"Public comments from Facebook, Instagram and YouTube: review and reply from one place.",fr:"Commentaires publics de Facebook, Instagram et YouTube : consulte et réponds depuis un seul endroit."}),children:[e.jsx(l,{items:[{es:"Separado del Inbox a propósito: aquí solo hay comentarios públicos, no mensajes privados.",en:"Deliberately separate from Inbox: only public comments live here, not private messages.",fr:"Volontairement séparé de l'Inbox : seuls les commentaires publics vivent ici, pas les messages privés."},{es:"Responder en público solo está disponible para comentarios de Facebook, Instagram o YouTube.",en:"Public replies are only supported for Facebook, Instagram or YouTube comments.",fr:"La réponse publique n'est disponible que pour les commentaires Facebook, Instagram ou YouTube."},{es:"Filtra por compañía y por cuenta para no perderte nada.",en:"Filter by company and account so nothing slips through.",fr:"Filtre par entreprise et par compte pour ne rien manquer."}]}),e.jsx(i,{to:"/comments",children:a({es:"Ir a Comments",en:"Go to Comments",fr:"Aller à Comments"})})]}),e.jsxs(r,{id:"music",title:"Music",tagline:a({es:"Pega un link de YouTube y el sistema extrae el audio a tu biblioteca personal de música.",en:"Paste a YouTube link and the system extracts the audio into your personal music library.",fr:"Colle un lien YouTube et le système extrait l'audio dans ta bibliothèque musicale personnelle."}),children:[e.jsx(l,{items:[{es:"Pega la URL, encola la extracción y espera: el trabajo pesado corre en segundo plano, no bloquea la página.",en:"Paste the URL, queue the extraction and wait: the heavy lifting runs in the background, it does not block the page.",fr:"Colle l'URL, mets l'extraction en file d'attente et attends : le gros du travail tourne en arrière-plan, sans bloquer la page."},{es:"Cada pista queda en tu biblioteca, lista para borrar si ya no la necesitas.",en:"Each track lands in your library, ready to delete once you no longer need it.",fr:"Chaque piste atterrit dans ta bibliothèque, prête à être supprimée si tu n'en as plus besoin."},{es:'Estas mismas canciones aparecen como "Mi música" dentro de Krealo Video, listas para usar en tus proyectos.',en:'These same songs show up as "My music" inside Krealo Video, ready to use in your projects.',fr:"Ces mêmes chansons apparaissent comme « Ma musique » dans Krealo Video, prêtes à être utilisées dans tes projets."}]}),e.jsx(i,{to:"/music",children:a({es:"Ir a Music",en:"Go to Music",fr:"Aller à Music"})})]}),e.jsxs(r,{id:"video",title:"Krealo Video",tagline:a({es:"Editor de video integrado: cortes, textos, transiciones, efectos de color, música y stickers — todo dentro del Publisher, sin salir a otra app.",en:"Built-in video editor: cuts, text, transitions, color effects, music and stickers — all inside the Publisher.",fr:"Éditeur vidéo intégré : coupes, textes, transitions, effets de couleur, musique et stickers — tout dans le Publisher, sans autre appli."}),children:[e.jsx(h,{name:"video-editor",alt:"Krealo Video",caption:a({es:"Krealo Video: tus proyectos. Cada proyecto guarda su línea de tiempo y media.",en:"Krealo Video: your projects. Each project keeps its timeline and media.",fr:"Krealo Video : tes projets. Chaque projet garde sa timeline et ses médias."})}),e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:'Abre Video Editor desde el menú, o desde Create Post con el botón "Krealo Video" (el resultado vuelve directo al post).',en:'Open Video E
1ditor from the menu, or from Create Post via the "Krealo Video" button (the result returns straight to the post).',fr:"Ouvre Video Editor depuis le menu, ou depuis Create Post via le bouton « Krealo Video » (le résultat revient directement dans le post)."})}),e.jsx(o,{n:2,children:a({es:'Crea un proyecto con "New project" (o "Create your first project"). Los proyectos quedan guardados y puedes retomarlos cuando quieras.',en:'Create a project with "New project". Projects are saved so you can resume any time.',fr:"Crée un projet avec « New project ». Les projets sont enregistrés et tu peux les reprendre à tout moment."})}),e.jsx(o,{n:3,children:a({es:"Importa tus clips e imágenes y arrástralos a la línea de tiempo. Corta, reordena y ajusta la duración de cada pieza.",en:"Import clips and images and drag them onto the timeline. Cut, reorder and adjust each piece.",fr:"Importe tes clips et images et glisse-les sur la timeline. Coupe, réordonne et ajuste la durée de chaque pièce."})}),e.jsx(o,{n:4,children:a({es:"Añade textos, transiciones entre clips y efectos de color (presets de color-grade y capa de ajuste para todo el video).",en:"Add text, transitions between clips and color effects (color-grade presets plus an adjustment layer for the whole video).",fr:"Ajoute des textes, des transitions entre les clips et des effets de couleur (préréglages color-grade et calque d'ajustement pour toute la vidéo)."})}),e.jsx(o,{n:5,children:a({es:"Música: añade una pista de audio en su propia línea, recórtala al largo del video y ajusta el volumen para que no tape la voz.",en:"Music: add an audio track on its own lane, trim it to the video length and balance the volume so it does not bury the voice.",fr:"Musique : ajoute une piste audio sur sa propre ligne, coupe-la à la longueur de la vidéo et règle le volume pour ne pas couvrir la voix."})}),e.jsx(o,{n:6,children:a({es:'Pulsa "Publish now" para exportar: el video renderizado pasa a Create Post, listo para programarse o publicarse en tus redes.',en:'Click "Publish now" to export: the rendered video lands in Create Post, ready to schedule or publish.',fr:"Clique sur « Publish now » pour exporter : la vidéo rendue arrive dans Create Post, prête à programmer ou publier."})})]}),e.jsx(p,{children:a({es:"Consejo: para formatos verticales (Reels, TikTok, Shorts) configura el proyecto en 9:16 desde el inicio; cambiarlo después obliga a reencuadrar los clips.",en:"Tip: for vertical formats (Reels, TikTok, Shorts) set the project to 9:16 from the start; switching later forces you to reframe clips.",fr:"Astuce : pour les formats verticaux (Reels, TikTok, Shorts) configure le projet en 9:16 dès le départ ; changer plus tard oblige à recadrer les clips."})}),e.jsx(i,{to:"/video-editor",children:a({es:"Abrir Krealo Video",en:"Open Krealo Video",fr:"Ouvrir Krealo Video"})})]}),e.jsxs(r,{id:"automation",title:"Automation",tagline:a({es:"El centro de control de todo lo automático, en 4 pestañas: Blogs, Posts, Reglas y Sistema.",en:"The control center for everything automatic, in 4 tabs: Blogs, Posts, Rules and System.",fr:"Le centre de contrôle de tout ce qui est automatique, en 4 onglets : Blogs, Posts, Règles et Système."}),children:[e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:"Blogs: frecuencia y hora de publicación por compañía, modo de aprobación y la cola de ideas del autoblog (ver la sección Blogs arriba).",en:"Blogs: publishing frequency and time per company, approval mode and the autoblog ideas queue (see the Blogs section above).",fr:"Blogs : fréquence et heure de publication par entreprise, mode d'approbation et la file d'idées de l'autoblog (voir la section Blogs ci-dessus)."})}),e.jsx(o,{n:2,children:a({es:'Posts: activa "Auto posts (with approval)" por compañía para que el Brain redacte un borrador de post social al día — siempre esperando tu aprobación.',en:'Posts: enable "Auto posts (with approval)" per company so the Brain drafts one social post a day — always waiting for your approval.',fr:"Posts : active « Auto posts (with approval) » par entreprise pour que le Brain rédige un brouillon de post social par jour — toujours en attente de ton approbation."})}),e.jsx(o,{n:3,children:a({es:'Reglas: automatizaciones tipo "si pasa esto, haz esto otro" (ej. si se publica un blog, republícalo como post en Google Business; si un post falla, avisa a todo el workspace).',en:'Rules: "if this happens, do that" automations (e.g. if a blog is published, republish it as a Google Business post; if a post fails, notify the whole workspace).',fr:"Règles : automatisations « si ceci arrive, fais cela » (ex. si un blog est publié, le republier en post sur Google Business ; si un post échoue, prévenir tout le workspace)."})}),e.jsx(o,{n:4,children:a({es:"Sistema: tareas recurrentes (se crean solas cada N días), estado de la sincronización con Google Merchant y salud de los schedulers.",en:"System: recurring tasks (create themselves every N days), Google Merchant sync status and scheduler health.",fr:"Système : tâches récurrentes (se créent seules tous les N jours), état de la synchronisation Google Merchant et santé des planificateurs."})})]}),e.jsx(i,{to:"/automation",children:a({es:"Ir a Automation",en:"Go to Automation",fr:"Aller à Automation"})})]}),e.jsxs(r,{id:"agents",title:a({es:"Agentes",en:"Agents",fr:"Agents"}),tagline:a({es:"El directorio de agentes de OpenClaw asignados a cada compañía: quién hace qué y con qué herramientas.",en:"The directory of OpenClaw agents assigned to each company: who does what and with which tools.",fr:"L'annuaire des agents OpenClaw assignés à chaque entreprise : qui fait quoi et avec quels outils."}),children:[e.jsx(l,{items:[{es:"Abre un agente para chatear con él directamente, igual que en Inbox → Messages.",en:"Open an agent to chat with it directly, just like in Inbox → Messages.",fr:"Ouvre un agent pour discuter directement avec lui, comme dans Inbox → Messages."},{es:"Cada tarjeta muestra la compañía a la que pertenece, su descripción, sus skills y herramientas, y el modelo que usa.",en:"Each card shows the company it belongs to, its description, skills and tools, and the model it uses.",fr:"Chaque carte affiche l'entreprise à laquelle il appartient, sa description, ses skills et outils, et le modèle qu'il utilise."},{es:"Un punto verde indica que el agente está en línea; abajo se listan sus tareas recurrentes (crons) programadas.",en:"A green dot means the agent is online; below, its scheduled recurring jobs (crons) are listed.",fr:"Un point vert indique que l'agent est en ligne ; en dessous, ses tâches récurrentes (crons) programmées sont listées."}]}),e.jsx(i,{to:"/agentes",children:a({es:"Ir a Agentes",en:"Go to Agents",fr:"Aller à Agents"})})]}),e.jsxs(r,{id:"helpers",title:"Helpers",tagline:a({es:"Agentes nativos por compañía, con su propio chat, memoria y herramientas — dentro del Publisher (fase 1, solo para administradores).",en:"Native per-company helper agents, with their own chat, memory and tools — inside the Publisher (phase 1, admin-only).",fr:"Agents Helpers n
1atifs par entreprise, avec leur propre chat, mémoire et outils — dans le Publisher (phase 1, réservé aux administrateurs)."}),children:[e.jsx(l,{items:[{es:"Cada compañía puede tener su propio Helper: un chat con historial de conversaciones, memoria, pestaña de Actividad y un catálogo de más de 35 herramientas.",en:"Each company can have its own Helper: a chat with conversation history, memory, an Activity tab and a catalog of 35+ tools.",fr:"Chaque entreprise peut avoir son propre Helper : un chat avec historique de conversations, mémoire, onglet Activité et un catalogue de plus de 35 outils."},{es:"Regla de oro: TODAS las herramientas están clavadas a la compañía del Helper. El de Univers Toutou no puede ver ni tocar datos de BonPrix — el alcance lo pone el código, no el modelo.",en:"Golden rule: ALL tools are pinned to the Helper's company. Univers Toutou's Helper cannot see or touch BonPrix data — the scope is enforced by code, not by the model.",fr:"Règle d'or : TOUS les outils sont verrouillés sur l'entreprise du Helper. Celui d'Univers Toutou ne peut ni voir ni toucher les données de BonPrix — la portée est imposée par le code, pas par le modèle."},{es:"Qué sabe hacer: ventas y stock de Shopify (por día, rango o comparativas), tráfico web (Google Analytics), SEO (Search Console), reseñas y ficha de Google Business, comentarios de redes, Meta/Google Ads, tareas, posts, blogs, aprobaciones y Brand Kit.",en:"What it can do: Shopify sales & stock (by day, range or comparisons), web traffic (Google Analytics), SEO (Search Console), Google Business reviews & profile, social comments, Meta/Google Ads, tasks, posts, blogs, approvals and the Brand Kit.",fr:"Ce qu'il sait faire : ventes et stock Shopify (par jour, plage ou comparaisons), trafic web (Google Analytics), SEO (Search Console), avis et fiche Google Business, commentaires des réseaux, Meta/Google Ads, tâches, posts, blogs, approbations et Brand Kit."},{es:'Todo lo que ESCRIBE pasa por tu aprobación: borradores de post (con fecha programada opcional), respuestas a reseñas y comentarios, y cambios del Brand Kit. Puedes "Pedir cambios" en un borrador y lo regenera.',en:'Everything it WRITES goes through your approval: post drafts (with optional scheduled date), review and comment replies, and Brand Kit changes. You can "Request changes" on a draft and it regenerates it.',fr:"Tout ce qu'il ÉCRIT passe par ton approbation : brouillons de posts (avec date programmée optionnelle), réponses aux avis et commentaires, et changements du Brand Kit. Tu peux « Demander des changements » sur un brouillon et il le régénère."},{es:"Memoria: guarda solo lo que le cuentes en el chat (extracción automática de hechos duraderos), lo que le enseñes en el panel (editable con un clic) y documentos PDF/TXT/MD que subas — les extrae el texto de verdad.",en:"Memory: it keeps what you tell it in chat (automatic extraction of durable facts), what you teach it in the panel (click to edit) and PDF/TXT/MD documents you upload — it extracts the actual text.",fr:"Mémoire : il garde ce que tu lui dis dans le chat (extraction automatique de faits durables), ce que tu lui apprends dans le panneau (clic pour corriger) et les documents PDF/TXT/MD que tu téléverses — il en extrait le vrai texte."},{es:'"Skills de la casa": en Ajustes defines procedimientos propios ("cuando pida un post de promo: precio literal, CTA a la web…") y el Helper los sigue al pie de la letra.',en:'"House skills": in Settings you define your own procedures ("when I ask for a promo post: literal price, CTA to the site…") and the Helper follows them to the letter.',fr:"« Skills maison » : dans Réglages tu définis tes propres procédures (« quand je demande un post promo : prix littéral, CTA vers le site… ») et le Helper les suit à la lettre."},{es:"Cada compañía puede tener su MASCOTA (un muñeco futurista acorde al rubro) que aparece en el chat y en la burbuja; se genera con un botón en Ajustes. También hay nota de voz, adjuntar imagen, escuchar la respuesta en audio y respuesta en vivo (streaming).",en:"Each company can have its MASCOT (a futuristic character matching its industry) shown in the chat and the bubble;
1 generated with a button in Settings. There is also voice input, image attachments, listen-aloud replies and live streaming responses.",fr:"Chaque entreprise peut avoir sa MASCOTTE (un personnage futuriste selon son secteur) affichée dans le chat et la bulle ; elle se génère d'un bouton dans Réglages. Il y a aussi la note vocale, les images jointes, l'écoute audio des réponses et la réponse en direct (streaming)."},{es:"Automatismos opcionales por compañía (nacen apagados, en Ajustes): resumen semanal los lunes 8am y alertas diarias (conexiones caducadas, posts fallidos, caída de ventas ≥X%). Y un tope mensual de gasto de IA en USD: al 80% avisa, al 100% frena el chat.",en:"Optional per-company automations (off by default, in Settings): weekly summary on Mondays 8am and daily alerts (expired connections, failed posts, sales drop ≥X%). Plus a monthly AI spending cap in USD: it warns at 80% and stops the chat at 100%.",fr:"Automatismes optionnels par entreprise (désactivés par défaut, dans Réglages) : résumé hebdo le lundi 8h et alertes quotidiennes (connexions expirées, posts échoués, baisse des ventes ≥X%). Plus un plafond mensuel de dépense IA en USD : avertit à 80 %, stoppe le chat à 100 %."},{es:'Clientes vs equipo: una cuenta de cliente ve los datos del NEGOCIO (ventas, posts, SEO) pero nunca el correo del equipo ni los costos internos. El permiso "Helpers" en Settings → Members apaga el menú y la burbuja para quien tú digas.',en:'Clients vs team: a client account sees BUSINESS data (sales, posts, SEO) but never the team inbox nor internal costs. The "Helpers" permission in Settings → Members hides the menu and the bubble for whoever you choose.',fr:"Clients vs équipe : un compte client voit les données du COMMERCE (ventes, posts, SEO) mais jamais le courriel de l'équipe ni les coûts internes. La permission « Helpers » dans Settings → Members masque le menu et la bulle pour qui tu veux."},{es:"Distinto de Agentes (OpenClaw): los Helpers viven dentro del Publisher, no en el Mac.",en:"Different from Agents (OpenClaw): Helpers live inside the Publisher, not on the Mac.",fr:"Différent des Agents (OpenClaw) : les Helpers vivent dans le Publisher, pas sur le Mac."}]}),e.jsx(i,{to:"/helpers",children:a({es:"Ir a Helpers",en:"Go to Helpers",fr:"Aller à Helpers"})})]}),e.jsxs(r,{id:"chat",title:"Chat",tagline:a({es:"Chat directo con el asistente del Publisher para resolver dudas rápidas mientras trabajas.",en:"Direct chat with the Publisher assistant to solve quick questions while you work.",fr:"Chat direct avec l'assistant du Publisher pour résoudre des questions rapides pendant que tu travailles."}),children:[e.jsx(l,{items:[{es:"Guarda tus conversaciones para retomarlas después, igual que un historial de chat normal.",en:"Saves your conversations to pick up later, just like a normal chat history.",fr:"Enregistre tes conversations pour les reprendre plus tard, comme un historique de chat classique."},{es:'Es el mismo lugar al que apunta el botón "¿Dudas? Escribe al chat del asistente" al final de este manual.',en:'It is the same place the "Questions? Use the assistant chat" button at the end of this manual points to.',fr:"C'est le même endroit vers lequel pointe le bouton « Des questions ? Écris au chat de l'assistant » à la fin de ce manuel."}]}),e.jsx(i,{to:"/chat",children:a({es:"Ir a Chat",en:"Go to Chat",fr:"Aller à Chat"})})]}),e.jsxs(r,{id:"ads",title:"Ads (Google / Meta)",tagline:a({es:"Una sola pantalla con dos pestañas — Google Ads y Meta Ads — para ver las cuentas publicitarias conectadas de la compañía activa.",en:"One screen with two tabs — Google Ads and Meta Ads — to see the active company's connected ad accounts.",fr:"Un seul écran avec deux onglets — Google Ads et Meta Ads — pour voir les comptes publicitaires connectés de l'entreprise active."}),children:[e.jsx(l,{items:[{es:'Cambia entre "Google Ads" y "Meta Ads" con los botones de arriba.',en:'Switch between "Google Ads" and "Meta Ads" with the buttons on top.',fr:"Bascule entre « Google Ads » et « Meta Ads » avec les boutons du haut."},{es:"Cada cuenta conectada tiene un acceso directo a su consola oficial (ads.google.com / adsmanager.facebook.com).",en:"Each connected account has a shortcut straight to its official console (ads.google.com / adsmanager.facebook.com).",fr:"Chaque compte connecté a un raccourci direct vers sa console officielle (ads.google.com / adsmanager.facebook.com)."},{es:"¿Falta conectar una cuenta? El botón de aquí mismo redacta el pedido y lo envía al agente de Ads.",en:"Missing an account? The button right here drafts the request and sends it to the Ads agent.",fr:"Un compte manque ? Le bouton ici même rédige la demande et l'envoie à l'agent Ads."}]}),e.jsx(d,{children:a({es:"Editar una campaña desde el Publisher",en:"Editing a campaign from the Publisher",fr:"Modifier une campagne depuis le Publisher"})}),e.jsx("p",{className:"rounded-lg border border-primary/20 bg-primary/5 px-3 py-2 text-sm",children:a({es:'Aquí se mueve dinero real de clientes, así que editar nunca guarda al vuelo: rellenas el formulario, pulsas "Revisar cambios" y ves campo por campo qué cambia y de qué valor a qué valor antes de confirmar.',en:'Real client money moves here, so editing never saves on the fly: you fill the form, hit "Review changes" and see field by field what changes and from which value to which, before confirming.',fr:"Ici, c'est de l'argent réel de clients : modifier n'enregistre jamais à la volée. Tu remplis le formulaire, tu cliques sur « Revoir les changements » et tu vois champ par champ ce qui change, et de quelle valeur à quelle valeur, avant de confirmer."})}),e.jsx(l,{items:[{es:"Se edita a nivel campaña: estado (activar/pausar) y presupuesto diario en Google; en Meta además el presupuesto total. Nada se borra nunca desde aquí.",en:"Editing works at campaign level: status (activate/pause) and daily budget on Google;
1 on Meta also the lifetime budget. Nothing is ever deleted from here.",fr:"L'édition se fait au niveau campagne : statut (activer/mettre en pause) et budget quotidien sur Google ; sur Meta, aussi le budget total. Rien n'est jamais supprimé d'ici."},{es:"Antes de dejarte editar, el Publisher comprueba en solo-lectura si de verdad puede escribir en esa cuenta. Si no puede, el diálogo se abre en solo lectura y dice qué permiso falta y quién lo arregla — nunca un botón que finge.",en:"Before letting you edit, the Publisher checks read-only whether it can actually write to that account. If it cannot, the dialog opens read-only and states which permission is missing and who fixes it — never a button that pretends.",fr:"Avant de te laisser modifier, le Publisher vérifie en lecture seule s'il peut vraiment écrire sur ce compte. Sinon, la fenêtre s'ouvre en lecture seule et indique quelle permission manque et qui la corrige — jamais un bouton qui fait semblant."},{es:"Todo cambio queda en el historial de cambios de Ads, con la misma frase que leíste al confirmarlo, y da igual si lo hizo una persona o un automatismo.",en:"Every change lands in the Ads change log, with the same sentence you read when confirming it, whether a person or an automation made it.",fr:"Chaque changement figure dans l'historique des modifications d'Ads, avec la phrase même que tu as lue en confirmant, qu'il vienne d'une personne ou d'un automatisme."},{es:'Rotación automática de creativos: por campaña, apagada de fábrica; pausa sola los anuncios que rinden peor según los umbrales que fijes, y nunca deja la campaña sin ningún anuncio activo. "Simular ahora" te enseña qué haría sin escribir nada.',en:'Automatic creative rotation: per campaign, off by default; it pauses the worst-performing ads on its own using the thresholds you set, and never leaves the campaign with no active ad. "Simulate now" shows what it would do without writing anything.',fr:"Rotation automatique des créatifs : par campagne, désactivée par défaut ; elle met en pause toute seule les annonces les moins performantes selon tes seuils, et ne laisse jamais la campagne sans annonce active. « Simuler maintenant » montre ce qu'elle ferait sans rien écrire."}]}),e.jsx(i,{to:"/ads/google",children:a({es:"Ir a Ads",en:"Go to Ads",fr:"Aller à Ads"})})]}),e.jsxs(r,{id:"search-console",title:"Search Console",tagline:a({es:"Keywords recomendadas de los últimos 30 días (impresiones y clics) para alimentar los blogs SEO — y el interruptor del auto-blog diario.",en:"Recommended keywords from the last 30 days (impressions and clicks) to fuel SEO blogs — and the daily auto-blog switch.",fr:"Mots-clés recommandés des 30 derniers jours (impressions et clics) pour alimenter les blogs SEO — et l'interrupteur de l'auto-blog quotidien."}),children:[e.jsx(l,{items:[{es:"La tabla de keywords viene directo de Google Search Console de la compañía (requiere haberlo conectado en Integrations).",en:"The keyword table comes straight from the company's Google Search Console (requires connecting it in Integrations).",fr:"Le tableau de mots-clés vient directement de Google Search Console de l'entreprise (nécessite de l'avoir connecté dans Integrations)."},{es:"El auto-blog crea 1 blog diario a las 3:00 AM, usa keywords sin repetir y exige un mínimo de menciones antes de elegir el tema.",en:"The auto-blog creates 1 blog daily at 3:00 AM, uses non-repeating keywords and requires a minimum number of mentions before picking a topic.",fr:"L'auto-blog crée 1 blog par jour à 3h00, utilise des mots-clés sans répétition et exige un minimum de mentions avant de choisir un sujet."},{es:"Estos mismos temas son los que el autoblog usa cuando la cola de ideas manual (en Blogs) está vacía.",en:"These are the same topics the autoblog uses when the manual ideas queue (in Blogs) is empty.",fr:"Ce sont ces mêmes sujets que l'autoblog utilise quand la file d'idées manuelle (dans Blogs) est vide."}]}),e.jsx(i,{to:"/search-console",children:a({es:"Ir a Search Console",en:"Go to Search Console",fr:"Aller à Search Console"})})]}),e.jsxs(r,{id:"google-merchant",title:"Google Merchant",tagline:a({es:"Sincroniza tu catálogo de productos (ej. desde Shopify) hacia Google Shopping, con ayuda de IA para las descripciones.",en:"Syncs your product catalog (e.g. from Shopify) into Google Shopping, with AI help for descriptions.",fr:"Synchronise ton catalogue de produits (ex. depuis Shopify) vers Google Shopping, avec l'aide de l'IA pour les descriptions."}),children:[e.jsx(l,{items:[{es:"Requiere conectar Google Merchant Center desde Integrations (mismo flujo OAuth de Google).",en:"Requires connecting Google Merchant Center from Integrations (same Google OAuth flow).",fr:"Nécessite de connecter Google Merchant Center depuis Integrations (même flux OAuth Google)."},{es:'Ajusta cómo la IA redacta títulos/descripciones de producto, y edita varios productos a la vez con "Bulk edit".',en:'Tune how AI writes product titles/descriptions, and edit several products at once with "Bulk edit".',fr:"Ajuste la façon dont l'IA rédige titres/descriptions de produit, et modifie plusieurs produits à la fois avec « Bulk edit »."}]}),e.jsx(i,{to:"/google-merchant",children:a({es:"Ir a Google Merchant",en:"Go to Google Merchant",fr:"Aller à Google Merchant"})})]}),e.jsxs(r,{id:"local-seo-grid",title:"Local SEO Grid",tagline:a({es:"Escanea en qué posición aparece tu ficha de Google Business alrededor de tu ubicación, punto por punto en un mapa.",en:"Scans where your Google Business profile ranks around your location, point by point on a map.",fr:"Scanne à quelle position apparaît ta fiche Google Business autour de ton emplacement, point par point sur une carte."}),children:[e.jsx(l,{items:[{es:"El mapa y la leyenda muestran, con color, qué tan bien (o mal) rankeas en cada punto del grid.",en:"The map and legend show, in color, how well (or poorly) you rank at each point of the grid.",fr:"La carte et la légende montrent, en couleur, à quel point tu te classes bien (ou mal) à chaque point de la grille."},{es:"Tabla de keywords con métricas, progreso del escaneo en curso, historial de escaneos pasados y comparación entre ellos.",en:"Keyword metrics table, progress of the current scan, history of past scans and comparison between them.",fr:"Tableau de métriques de mots-clés, progression du scan en cours, historique des scans passés et comparaison entre eux."},{es:'El "Action plan" sugiere qué hacer para mejorar el ranking local; Settings ajusta tamaño del grid, radio y keywords.',en:'The "Action plan" suggests what to do to improve local ranking;
1 Settings adjusts grid size, radius and keywords.',fr:"Le « Action plan » suggère quoi faire pour améliorer le classement local ; Settings ajuste la taille de la grille, le rayon et les mots-clés."}]}),e.jsx(i,{to:"/local-seo-grid",children:a({es:"Ir a Local SEO Grid",en:"Go to Local SEO Grid",fr:"Aller à Local SEO Grid"})})]}),e.jsxs(r,{id:"companies",title:"Companies",tagline:a({es:"Cada compañía (cliente) es un workspace separado. Ábrela para llegar a su Hub: Brain, Brand Kit, Integrations, Agente y Clientes/Portal.",en:"Each company (client) is a separate workspace. Open one to reach its Hub: Brain, Brand Kit, Integrations, Agent and Clients/Portal.",fr:"Chaque entreprise (client) est un workspace séparé. Ouvre-la pour accéder à son Hub : Brain, Brand Kit, Integrations, Agent et Clients/Portal."}),children:[e.jsx(l,{items:[{es:"Brain: conocimiento tipado (contexto, FAQ, promociones) que la IA usa cuando escribe para esta compañía.",en:"Brain: typed knowledge (context, FAQ, promotions) the AI uses when writing for this company.",fr:"Brain : connaissances typées (contexte, FAQ, promotions) que l'IA utilise en écrivant pour cette entreprise."},{es:"Brand Kit: colores, logo e imágenes/prompt de referencia para las imágenes de blogs y posts.",en:"Brand Kit: colors, logo and reference images/prompt for blog and post images.",fr:"Brand Kit : couleurs, logo et images/prompt de référence pour les images de blogs et de posts."},{es:"Integrations: las cuentas conectadas de ESA compañía en particular (no todas las de la app).",en:"Integrations: the connected accounts for THAT specific company (not the whole app).",fr:"Integrations : les comptes connectés de CETTE entreprise en particulier (pas de toute l'application)."},{es:"Agente: el agente de OpenClaw dedicado a esta compañía.",en:"Agent: the OpenClaw agent dedicated to this company.",fr:"Agent : l'agent OpenClaw dédié à cette entreprise."},{es:"GitHub: la ficha de la compañía puede enlazar sus repositorios (web del cliente, integraciones) para que el equipo sepa dónde vive cada código.",en:"GitHub: the company profile can link its repositories (client website, integrations) so the team knows where each codebase lives.",fr:"GitHub : la fiche de l'entreprise peut lier ses dépôts (site du client, intégrations) pour que l'équipe sache où vit chaque code."},{es:"Clientes/Portal: da acceso de solo-lectura a tu cliente para que vea su propio progreso en /portal, sin poder navegar al Publisher interno.",en:"Clients/Portal: gives your client read-only access to see their own progress at /portal, without ever reaching the internal Publisher.",fr:"Clients/Portal : donne à ton client un accès en lecture seule pour voir sa propre progression sur /portal, sans jamais accéder au Publisher interne."},{es:"Editar compañía: nombre, industria, idiomas (el idioma principal es obligatorio para los blogs automáticos), dirección, y la zona de peligro para archivar o borrar el workspace.",en:"Edit company: name, industry, languages (a primary language is required for auto blogs), address, and the danger zone to archive or delete the workspace.",fr:"Modifier l'entreprise : nom, secteur, langues (la langue principale est obligatoire pour les blogs automatiques), adresse, et la zone de danger pour archiver ou supprimer le workspace."}]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(i,{to:"/companies",children:a({es:"Ir a Companies",en:"Go to Companies",fr:"Aller à Companies"})}),t&&e.jsx(j,{asChild:!0,size:"sm",variant:"outline",children:e.jsx(A,{to:H,children:a({es:"Abrir mi Company Hub",en:"Open my Company Hub",fr:"Ouvrir mon Company Hub"})})})]})]}),e.jsxs(r,{id:"connections",title:a({es:"Conexiones",en:"Connections",fr:"Connexions"}),tagline:a({es:"Cómo conectar cada plataforma en Integrations (Connected Accounts). Busca la tuya.",en:"How to connect each platform in Integrations (Connected Accounts).",fr:"Comment connecter chaque plateforme dans Integrations (Connected Accounts)."}),children:[e.jsx(h,{name:"accounts",alt:a({es:"Cuentas conectadas",en:"Connected accounts",fr:"Comptes connectés"}),caption:a({es:'Connected Accounts: redes sociales arriba, plataformas de blog abajo. "Run diagnostics" valida tokens OAuth y scopes de Shopify.',en:'Connected Accounts: social networks on top, blog platforms below. "Run diagnostics" validates OAuth tokens and Shopify scopes.',fr:"Connected Accounts : réseaux sociaux en haut, plateformes de blog en dessous. « Run diagnostics » valide les tokens OAuth et les scopes Shopify."})}),e.jsx(we,{}),e.jsxs("div",{className:"relative",children:[e.jsx(L,{className:"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(V,{value:y,onChange:s=>B(s.target.value),placeholder:a({es:"Buscar: WordPress, Gmail, Google…",en:"Search…",fr:"Rechercher : WordPress, Gmail, Google…"}),className:"pl-9"})]}),e.jsx("div",{className:"space-y-3",children:z.map(s=>{const n=je[s.method],u=n.icon,c=R===s.platform;return e.jsxs(f,{className:"overflow-hidden",children:[e.jsx("button",{type:"button",className:"w-full text-left",onClick:()=>U(c?null:s.platform),"aria-expanded":c,children:e.jsxs("div",{className:"flex items-center justify-between gap-3 px-4 py-3.5",children:[e.jsxs("span",{className:"flex items-center gap-3 text-base font-semibold",children:[e.jsx(F,{platform:s.platform,className:"h-5 w-5"}),a({es:"Conectar ",en:"Connect ",fr:"Connecter "}),Ae(s.platform)]}),e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:`inline-flex items-center gap-1 rounded-full px-2.5 py-1 text-[11px] font-medium ${n.cls}`,children:[e.jsx(u,{className:"h-3 w-3"}),a(n.label)]}),e.jsx($,{className:`h-4 w-4 text-muted-foreground transition-transform ${c?"rotate-180":""}`})]})]})}),c&&e.jsxs(b,{className:"pt-0",children:[e.jsx("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:s.steps.map((v,I)=>e.jsx(o,{n:I+1,children:a(v)},I))}),s.note&&e.jsx(p,{children:a(s.note)})]})]},s.platform)})})]}),e.jsxs(r,{id:"improvements",title:a({es:"Improvements",en:"Improvements",fr:"Improvements"}),tagline:a({es:"Un formulario simple para que cualquiera del equipo sugiera una mejora o reporte algo raro (con capturas si hace falta).",en:"A simple form for anyone on the team to suggest an improvement or report something odd (with screenshots if needed).",fr:"Un formulaire simple pour que toute l'équipe suggère une amélioration ou signale un souci (avec captures si besoin)."}),children:[e.jsx(l,{items:[{es:"Escribe la idea o el problema en el cuadro de texto y adju
1nta imágenes si ayuda a explicarlo.",en:"Write the idea or the problem in the text box and attach images if it helps explain it.",fr:"Écris l'idée ou le problème dans la zone de texte et joins des images si ça aide à l'expliquer."},{es:"Todo lo enviado por el equipo aparece en una lista compartida, para que se vea que ya se reportó.",en:"Everything submitted by the team shows up in a shared list, so it is visible that it was already reported.",fr:"Tout ce qui est envoyé par l'équipe apparaît dans une liste partagée, pour montrer que c'est déjà signalé."}]}),e.jsx(p,{children:a({es:'Ojo: dentro de Settings hay una pestaña que también dice "Improvements" — esa en realidad es para tickets de soporte, no para esto. Usa esta página para ideas de producto.',en:'Heads up: inside Settings there is a tab also called "Improvements" — that one is actually for support tickets, not this. Use this page for product ideas.',fr:"Attention : dans Settings, il y a un onglet aussi appelé « Improvements » — celui-là sert en réalité aux tickets de support, pas à ceci. Utilise cette page pour les idées produit."})}),e.jsx(i,{to:"/improvements",children:a({es:"Ir a Improvements",en:"Go to Improvements",fr:"Aller à Improvements"})})]}),e.jsxs(r,{id:"settings",title:"Settings",tagline:a({es:"Tu configuración personal y la del workspace, en varias pestañas.",en:"Your personal settings and the workspace's, across several tabs.",fr:"Tes réglages personnels et ceux du workspace, répartis en plusieurs onglets."}),children:[e.jsx(l,{items:[{es:"Profile: tu nombre, foto y zona horaria.",en:"Profile: your name, photo and timezone.",fr:"Profile : ton nom, ta photo et ton fuseau horaire."},{es:"Notifications: 9 categorías con interruptor propio — post publicado, post fallido, menciones en tareas, recordatorio de posts programados, eventos del calendario de hoy, respuestas a tickets, posts por aprobar, blogs generados automáticamente, y mensajes del Inbox. Los avisos de sistema del Inbox y del asistente siempre se muestran.",en:"Notifications: 9 categories each with its own switch — post published, post failed, task mentions, upcoming scheduled posts, today's calendar events, ticket replies, posts awaiting approval, auto-generated blogs, and Inbox messages. Inbox and assistant system alerts are always shown.",fr:"Notifications : 9 catégories avec leur propre interrupteur — post publié, post échoué, mentions dans les tâches, rappel de posts programmés, événements du calendrier du jour, réponses aux tickets, posts à approuver, blogs générés automatiquement, et messages de l'Inbox. Les alertes système de l'Inbox et de l'assistant sont toujours affichées."},{es:'Billing: tu plan y el uso frente a los límites, el uso de almacenamiento (total y por módulo/compañía), y — solo para administradores — un interruptor "Admin preview" que muestra la experiencia de plan pagado con datos simulados, sin cobrar nada de verdad.',en:'Billing: your plan and usage against the limits, storage usage (total and by module/company), and — admin-only — an "Admin preview" switch that shows the paid-plan experience with simulated data, without any real charge.',fr:"Billing : ton plan et l'usage par rapport aux limites, l'utilisation du stockage (total et par module/entreprise), et — réservé aux administrateurs — un interrupteur « Admin preview » qui montre l'expérience du plan payant avec des données simulées, sans aucun vrai débit."},{es:"Security: política de dominio de quién puede ser invitado al equipo (solo administradores).",en:"Security: domain policy for who can be invited to the team (admin-only).",fr:"Security : politique de domaine sur qui peut être invité dans l'équipe (réservé aux administrateurs)."},{es:"Team Access: invita compañeros y define sus permisos por compañía.",en:"Team Access: invite teammates and set their per-company permissions.",fr:"Team Access : invite des collègues et définis leurs permissions par entreprise."},{es:"Menu Order: reordena tu propio menú lateral.",en:"Menu Order: reorder your own side menu.",fr:"Menu Order : réordonne ton propre menu latéral."},{es:"Tasks: preferencias de cómo se ve tu tablero de tareas personal.",en:"Tasks: preferences for how your personal task board looks.",fr:"Tasks : préférences d'affichage de ton tableau de tâches personnel."}
1,{es:"Improvements (pestaña): a pesar del nombre, aquí se envían tickets de soporte — para ideas de producto usa la página Improvements del menú principal.",en:"Improvements (tab): despite the name, this is where you submit support tickets — for product ideas use the standalone Improvements page in the main menu.",fr:"Improvements (onglet) : malgré le nom, c'est ici que tu soumets des tickets de support — pour les idées produit, utilise la page Improvements du menu principal."},{es:"API Keys: tus claves personales de proveedores de IA usadas para generar contenido.",en:"API Keys: your personal AI-provider keys used to generate content.",fr:"API Keys : tes clés personnelles de fournisseurs d'IA utilisées pour générer du contenu."},{es:'Members → permiso "Helpers": apaga el menú de Helpers y su burbuja de chat para el miembro que elijas.',en:'Members → "Helpers" permission: hides the Helpers menu and its chat bubble for the member you choose.',fr:"Members → permission « Helpers » : masque le menu Helpers et sa bulle de chat pour le membre de ton choix."},{es:'/diagnostics (administradores): el registro de errores de navegador de los usuarios reales — cuando alguien dice "me sale un error", aquí está el stack exacto con su pantalla y su hora.',en:'/diagnostics (admins): the browser-error log from real users — when someone says "I got an error", the exact stack with their screen and time is here.',fr:"/diagnostics (administrateurs) : le registre des erreurs de navigateur des vrais utilisateurs — quand quelqu'un dit « j'ai une erreur », le stack exact avec son écran et son heure est ici."}]}),e.jsx(i,{to:"/settings",children:a({es:"Ir a Settings",en:"Go to Settings",fr:"Aller à Settings"})})]}),e.jsxs(r,{id:"api",title:a({es:"API pública",en:"Public API",fr:"API publique"}),tagline:a({es:"Para que un agente o una herramienta externa haga en el Publisher lo mismo que haces tú en la web — crear tareas, publicar posts, generar blogs, leer ventas — sin tocar la base de datos por su cuenta.",en:"So an agent or an external tool can do in the Publisher exactly what you do in the web app — create tasks, publish posts, generate blogs, read sales — without touching the database on its own.",fr:"Pour qu'un agent ou un outil externe fasse dans le Publisher ce que tu fais dans l'app — créer des tâches, publier des posts, générer des blogs, lire les ventes — sans toucher la base de données de son côté."}),children:[e.jsx(d,{children:a({es:"1. Sacar tu API key",en:"1. Get your API key",fr:"1. Obtenir ta clé API"})}),e.jsxs("ol",{className:"space-y-2.5 border-l-2 border-border/60 pl-4",children:[e.jsx(o,{n:1,children:a({es:"Ve a Settings → pestaña API (es interna del equipo Krealo; si no la ves, no tienes acceso a la API).",en:"Go to Settings → API tab (internal to the Krealo team; if you cannot see it, you do not have API access).",fr:"Va dans Settings → onglet API (réservé à l'équipe Krealo ; si tu ne le vois pas, tu n'as pas accès à l'API)."})}),e.jsx(o,{n:2,children:a({es:'Pulsa crear token, ponle un nombre que diga PARA QUÉ es ("n8n", "agente-posteador"): así sabes cuál revocar el día que haga falta.',en:'Click create token and name it after WHAT it is for ("n8n", "posting agent"): that is how you know which one to revoke when the day comes.',fr:"Clique pour créer un jeton et nomme-le selon SON usage (« n8n », « agent de publication ») : c'est ainsi que tu sauras lequel révoquer le jour venu."})}),e.jsx(o,{n:3,children:a({es:"Cópialo AHORA. El token se muestra una sola vez; después solo verás sus últimos 4 caracteres. Si lo pierdes, creas otro y revocas el viejo.",en:"Copy it NOW. The token is shown only once; afterwards you only see its last 4 characters. Lost it? Create another and revoke the old one.",fr:"Copie-le MAINTENANT. Le jeton n'est affiché qu'une fois ; ensuite tu ne vois que ses 4 derniers caractères. Perdu ? Crées-en un autre et révoque l'ancien."})}),e.jsx(o,{n:4,children:a({es:"Úsalo en la cabecera X-Api-Token de cada petición, contra https://publisher.krealomedia.com/api. Puedes tener hasta 10 tokens activos; revocar uno es inmediato e irreversible.",en:"Send it in the X-Api-Token header of every request, against https://publisher.krealomedia.com/api. Up to 10 active tokens; revoking one is immediate and irreversible.",fr:"Envoie-le dans l'en-tête X-Api-Token de chaque requête, vers https://publisher.krealomedia.com/api. Jusqu'à 10 jetons actifs ; révoquer est immédiat et irréversible."})})]}),e.jsx(p,{children:a({es:"Un token solo puede hacer lo que TÚ puedes hacer en la web: ve exactamente tus compañías, ni una más. Y un token no puede crear otros tokens — para eso hace falta tu sesión, para que revocar el que se filtró sirva de algo.",en:"A token can only do what YOU can do in the web app: it sees exactly your companies, not one more. And a token cannot mint other tokens — that requires your session, so that revoking a leaked one actually means something.",fr:"Un jeton ne peut faire que ce que TOI tu peux faire dans l'app : il voit exactement tes entreprises, pas une de plus. Et un jeton 
1ne peut pas en créer d'autres — cela exige ta session, pour que révoquer un jeton fuité serve vraiment à quelque chose."})}),e.jsx(d,{children:a({es:"2. Los endpoints principales",en:"2. The main endpoints",fr:"2. Les principaux endpoints"})}),e.jsx(l,{items:[{es:"GET /api/docs — el catálogo vivo: todo lo que existe, devuelto por la propia API. Si dudas de algo, empieza por aquí.",en:"GET /api/docs — the live catalog: everything that exists, returned by the API itself. When in doubt, start here.",fr:"GET /api/docs — le catalogue vivant : tout ce qui existe, renvoyé par l'API elle-même. En cas de doute, commence par là."},{es:"GET /api/companies — las compañías que puedes ver, con su id. Casi todo lo demás pide un companyId, y de aquí sale.",en:"GET /api/companies — the companies you can see, with their id. Almost everything else needs a companyId, and this is where it comes from.",fr:"GET /api/companies — les entreprises que tu peux voir, avec leur id. Presque tout le reste demande un companyId, et il vient d'ici."},{es:"POST /api/tasks/create — crear una tarea (title y companyId obligatorios). GET /api/tasks para listar, GET/PATCH /api/tasks/{id} para leerla o cambiarla, POST /api/tasks/{id}/comments para comentar.",en:"POST /api/tasks/create — create a task (title and companyId required). GET /api/tasks to list, GET/PATCH /api/tasks/{id} to read or change it, POST /api/tasks/{id}/comments to comment.",fr:"POST /api/tasks/create — créer une tâche (title et companyId obligatoires). GET /api/tasks pour lister, GET/PATCH /api/tasks/{id} pour lire ou modifier, POST /api/tasks/{id}/comments pour commenter."},{es:"POST /api/posts — crear un post (programado o borrador) y GET /api/posts para listarlos.",en:"POST /api/posts — create a post (scheduled or draft) and GET /api/posts to list them.",fr:"POST /api/posts — créer un post (programmé ou brouillon) et GET /api/posts pour les lister."},{es:'POST /api/blogs — generar un blog. Tarda minutos, así que responde 202 con un jobId: el resultado se consulta en GET /api/blogs/jobs/{jobId} hasta que "finished" sea true.',en:'POST /api/blogs — generate a blog. It takes minutes, so it answers 202 with a jobId: poll GET /api/blogs/jobs/{jobId} until "finished" is true.',fr:"POST /api/blogs — générer un blog. Cela prend des minutes, donc il répond 202 avec un jobId : consulte GET /api/blogs/jobs/{jobId} jusqu'à ce que « finished » soit true."},{es:"Y además: /api/events (calendario), /api/music, /api/integrations (qué tiene conectado la compañía), /api/store/sales y /api/store/inventory (Shopify/WooCommerce), /api/analytics (GA4) y POST /api/stats para subir métricas de las redes sin API.",en:"Plus: /api/events (calendar), /api/music, /api/integrations (what the company has connected), /api/store/sales and /api/store/inventory (Shopify/WooCommerce), /api/analytics (GA4) and POST /api/stats to upload metrics from networks without an API.",fr:"Et aussi : /api/events (calendrier), /api/music, /api/integrations (ce que l'entreprise a connecté), /api/store/sales et /api/store/inventory (Shopify/WooCommerce), /api/analytics (GA4) et POST /api/stats pour téléverser les métriques des réseaux sans API."}]}),e.jsx(d,{children:a({es:"3. Detalles que ahorran una tarde",en:"3. Details that save you an afternoon",fr:"3. Détails qui font gagner une après-midi"})}),e.jsx(l,{items:[{es:"Prioridad de una tarea: alta, media o baja. También se aceptan high/medium/low (y urgent, urgente, normal), y se guardan traducidas — cualquier otra cosa devuelve un 400 diciendo qué valores valen.",en:"Task priority: alta, media or baja. high/medium/low are also accepted (plus urgent, urgente, normal) and stored translated — anything else returns a 400 stating which values are valid.",fr:"Priorité d'une tâche : alta, media ou baja. high/medium/low sont aussi acceptés (ainsi qu'urgent, urgente, normal) et stockés traduits — toute autre valeur renvoie un 400 indiquant les valeurs valides."},{es:"Descripción de una tarea: hasta 20 000 caracteres por esta API. Los agentes de OpenClaw, que entran por la API de servicio interna, la tienen recortada a 2 000 — si mandas más, se trunca sin avisar.",en:"Task description: up to 20,000 characters through this API. OpenClaw agents, which come in through the internal service API, are capped at 2,000 — send more and it is truncated silently.",fr:"Description d'une tâche : jusqu'à 20 000 caractères via cette API. Les agents OpenClaw, qui passent par l'API de service interne, sont limités à 2 000 — au-delà, c'est tronqué sans avertissement."},{es:"Al crear, la respuesta trae publisherUrl: el enlace directo a lo creado dentro del Publisher (tareas → /tasks?task=…, posts → /history?post=…, blogs → /blogs?post=…). Pégalo en un mensaje y quien lo reciba abre justo eso.",en:"On create, the response carries publisherUrl: a direct link to what you created inside the Publisher (tasks → /tasks?task=…, posts → /history?post=…, blogs → /blogs?post=…). Paste it in a message and whoever gets it lands exactly there.",fr:"À la création, la réponse contient publisherUrl : le lien direct vers ce qui a été cr
1éé dans le Publisher (tâches → /tasks?task=…, posts → /history?post=…, blogs → /blogs?post=…). Colle-le dans un message et le destinataire arrive pile dessus."},{es:"Nada se borra de verdad: borrar es archivar (archived: true). Se puede recuperar.",en:"Nothing is really deleted: deleting means archiving (archived: true). It can be recovered.",fr:"Rien n'est vraiment supprimé : supprimer signifie archiver (archived: true). C'est récupérable."},{es:"Las listas vienen recortadas y lo dicen (total, returned, truncated). Si truncated es true NO concluyas que algo no existe: sube el limit o afina los filtros.",en:"Lists come truncated and say so (total, returned, truncated). If truncated is true do NOT conclude something does not exist: raise the limit or narrow the filters.",fr:"Les listes sont tronquées et le disent (total, returned, truncated). Si truncated vaut true, ne conclus PAS qu'une chose n'existe pas : augmente le limit ou affine les filtres."},{es:"Hay límite de uso: cada respuesta trae X-RateLimit-Remaining, y un 429 trae Retry-After. Espera lo que diga; reintentar antes solo suma bloqueos.",en:"There is a usage limit: every response carries X-RateLimit-Remaining, and a 429 carries Retry-After. Wait what it says; retrying sooner only adds blocks.",fr:"Il y a une limite d'usage : chaque réponse porte X-RateLimit-Remaining, et un 429 porte Retry-After. Attends ce qu'il indique ; réessayer plus tôt ne fait qu'ajouter des blocages."},{es:"Ninguna ruta tarda más de 60 segundos. Lo que tarda más se acepta con un 202 y un jobId — un 202 no se reintenta a ciegas, se consulta.",en:"No route takes longer than 60 seconds. Anything slower is accepted with a 202 and a jobId — a 202 is not blindly retried, it is polled.",fr:"Aucune route ne dépasse 60 secondes. Ce qui est plus lent est accepté avec un 202 et un jobId — un 202 ne se réessaie pas à l'aveugle, il se consulte."}]}),e.jsx(p,{children:a({es:"La referencia completa —cada campo con su tipo, si es obligatorio, ejemplos copiables y el error exacto de permiso— está en Settings → API, debajo del token. Esta sección es el resumen; ese es el contrato.",en:"The full reference — every field with its type, whether it is required, copyable examples and the exact permission error — lives in Settings → API, below the token. This section is the summary; that one is the contract.",fr:"La référence complète — chaque champ avec son type, son caractère obligatoire, des exemples copiables et l'erreur de permission exacte — se trouve dans Settings → API, sous le jeton. Cette section est le résumé ; celle-là est le contrat."})}),e.jsx(p,{children:a({es:"Ojo, no confundir con las API Keys de Settings → API Keys: ésas son TUS claves de proveedores de IA (OpenAI y compañía) para generar contenido, no una llave del Publisher.",en:"Careful, do not confuse this with Settings → API Keys: those are YOUR AI-provider keys (OpenAI and friends) used to generate content, not a Publisher key.",fr:"Attention, à ne pas confondre avec Settings → API Keys : ce sont TES clés de fournisseurs d'IA (OpenAI et compagnie) pour générer du contenu, pas une clé du Publisher."})}),e.jsx(i,{to:"/settings",children:a({es:"Ir a Settings → API",en:"Go to Settings → API",fr:"Aller à Settings → API"})})]}),e.jsx(f,{className:"border-primary/20 bg-primary/5 max-w-3xl",children:e.jsxs(b,{className:"flex flex-col gap-3 py-4 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("span",{className:"flex items-center gap-2.5 text-sm",children:[e.jsx(G,{className:"h-4 w-4 text-primary"}),a({es:"¿Dudas? Escribe al chat del asistente.",en:"Questions? Use the assistant chat.",fr:"Des questions ? Écris au chat de l'assistant."})]}),e.jsx(j,{asChild:!0,size:"sm",variant:"outline",children:e.jsx(A,{to:"/chat",children:a({es:"Abrir chat",en:"Open chat",fr:"Ouvrir le chat"})})})]})})]})]})}export{Ke as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.