PageSourceSearch

https://sodana.ai/ia-contenido/

html sodana.ai collected 2026-10-05 13:32:10 UTC 53,597 bytes, 398 lines download raw bytes

1<!DOCTYPE html><html lang="es"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Crear contenido con IA: ideas, guiones, imágenes y video | Sodana</title><meta name="description" content="Convierte datos y tendencias en ideas, guiones, imágenes y videos con IA. Analiza y mejora cada pieza con el contexto real de tu marca en Sodana."><meta name="robots" content="index,follow"><meta name="theme-color" content="#000042"><link rel="canonical" href="https://sodana.ai/ia-contenido/"><link rel="alternate" hreflang="es" href="https://sodana.ai/ia-contenido/"><link rel="alternate" hreflang="en" href="https://sodana.ai/en/ai-content/"><link rel="alternate" hreflang="x-default" href="https://sodana.ai/ia-contenido/"><meta property="og:type" content="website"><meta property="og:site_name" content="Sodana"><meta property="og:locale" content="es_ES"><meta property="og:locale:alternate" content="en_US"><meta property="og:title" content="Crear contenido con IA: ideas, guiones, imágenes y video | Sodana"><meta property="og:description" content="Convierte datos y tendencias en ideas, guiones, imágenes y videos con IA. Analiza y mejora cada pieza con el contexto real de tu marca en Sodana."><meta property="og:image" content="https://sodana.ai/miniatura-website.png"><meta property="og:image:width" content="1672"><meta property="og:image:height" content="941"><meta property="og:image:alt" content="Crear contenido con IA en Sodana"><meta property="og:url" content="https://sodana.ai/ia-contenido/"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Crear contenido con IA: ideas, guiones, imágenes y video | Sodana"><meta name="twitter:description" content="Convierte datos y tendencias en ideas, guiones, imágenes y videos con IA. Analiza y mejora cada pieza con el contexto real de tu marca en Sodana."><meta name="twitter:image" content="https://sodana.ai/miniatura-website.png"><meta name="twitter:image:alt" content="Crear contenido con IA en Sodana"><link rel="icon" type="image/png" sizes="32x32" href="/favicon.png"><link rel="icon" type="image/png" sizes="192x192" href="/favicon.png"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@500;600;700&family=Jost:wght@400;500;600;700&display=swap" rel="stylesheet">
1<script type="application/ld+json">[{"@context":"https://schema.org","@type":"Organization","@id":"https://sodana.ai/#organization","name":"BICODE SAS","legalName":"BICODE SAS","url":"https://bicode.co/","address":{"@type":"PostalAddress","addressCountry":"CO"},"identifier":{"@type":"PropertyValue","propertyID":"NIT","value":"901081283"},"brand":{"@id":"https://sodana.ai/#brand"},"contactPoint":{"@type":"ContactPoint","contactType":"customer support","email":"[email protected]","availableLanguage":["es","en"]}},{"@context":"https://schema.org","@type":"Brand","@id":"https://sodana.ai/#brand","name":"Sodana","url":"https://sodana.ai","logo":"https://sodana.ai/brand/sodana-logo-main.png"},{"@context":"https://schema.org","@type":"WebSite","@id":"https://sodana.ai/#website","name":"Sodana","url":"https://sodana.ai","inLanguage":["es","en"],"publisher":{"@id":"https://sodana.ai/#organization"}},{"@context":"https://schema.org","@type":"WebPage","@id":"https://sodana.ai/ia-contenido/#webpage","name":"Crear contenido con IA: ideas, guiones, imágenes y video | Sodana","description":"Convierte datos y tendencias en ideas, guiones, imágenes y videos con IA. Analiza y mejora cada pieza con el contexto real de tu marca en Sodana.","url":"https://sodana.ai/ia-contenido/","inLanguage":"es","isPartOf":{"@id":"https://sodana.ai/#website"},"about":{"@id":"https://sodana.ai/#software"}}]</script>
1<script>(function(){var K="sodana-theme";var A="data-theme-pref";function p(v){if(v==="light"||v==="dark")return v;return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";}var pref;try{pref=localStorage.getItem(K);}catch(e){}if(pref!=="light"&&pref!=="dark"&&pref!=="system")pref="system";var resolved=p(pref);document.documentElement.setAttribute("data-theme",resolved);document.documentElement.setAttribute(A,pref);var m=document.querySelector('meta[name="theme-color"]');if(m){m.setAttribute("content",resolved==="dark"?"#000017":"#fef7e6");}})();</script>
1<style>.hero-platform-strip[data-astro-cid-25chmtg5]{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem}.page-hero .hero-platform-strip[data-astro-cid-25chmtg5]{margin-top:1.7rem}.hero-platform-strip[data-astro-cid-25chmtg5] small[data-astro-cid-25chmtg5]{flex-basis:100%;margin-top:.15rem;color:var(--text-soft);font-size:.82rem}.hero-social[data-astro-cid-25chmtg5]{display:inline-flex;width:3rem;height:3rem;align-items:center;justify-content:center;border:1px solid rgba(0,0,66,.08);border-radius:.78rem;background:#fff;box-shadow:0 14px 30px -22px #00004299}.sr-only[data-astro-cid-25chmtg5]{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.hero-social[data-astro-cid-25chmtg5] svg[data-astro-cid-25chmtg5]{width:1.6rem;height:1.6rem;fill:currentColor}.hero-social-tt[data-astro-cid-25chmtg5]{color:#111126}.hero-social-yt[data-astro-cid-25chmtg5]{color:red}.hero-social-fb[data-astro-cid-25chmtg5]{color:#1877f2}.hero-social-x[data-astro-cid-25chmtg5]{color:#111126}.hero-social-x[data-astro-cid-25chmtg5] strong[data-astro-cid-25chmtg5]{font-size:1.25rem;line-height:1}.hero-platform-note[data-astro-cid-25chmtg5]{max-width:6rem;margin-left:.35rem;padding-left:1rem;border-left:1px solid rgba(0,0,66,.14);color:var(--text-muted);font-size:.82rem;line-height:1.25}[data-theme=dark] .hero-social[data-astro-cid-25chmtg5]{border-color:#f9f9f91f;background:#f9f9f9f0}@media(prefers-color-scheme:dark){[data-theme=system] .hero-social[data-astro-cid-25chmtg5]{border-color:#f9f9f91f;background:#f9f9f9f0}}@media(max-width:720px){.hero-platform-strip[data-astro-cid-25chmtg5]{flex-wrap:nowrap;gap:.45rem}.hero-social[data-astro-cid-25chmtg5]{width:2.8rem;height:2.8rem;flex:0 0 2.8rem}.hero-platform-note[data-astro-cid-25chmtg5]{margin-left:.15rem;padding-left:.65rem}.hero-platform-strip[data-astro-cid-25chmtg5] small[data-astro-cid-25chmtg5]{display:none}}
2</style>
3<link rel="stylesheet" href="/_astro/engagement.DUb-OL2K.css"></head> <body> <div class="site-shell"> <header class="site-header" data-clerk-publishable-key="pk_live_xxxxx"> <div class="container header-inner"> <div class="header-brand-shell"> <a class="brand" href="/" aria-label="Ir al inicio de Sodana"> <img src="/brand/sodana-logo-main.png" alt="Sodana" class="brand-logo brand-logo-light"> <img src="/brand/sodana-logo-dark.png" alt="Sodana" class="brand-logo brand-logo-dark"> </a> </div> <nav class="desktop-nav" aria-label="Navegación principal"> <a href="/"> Inicio </a><a href="/plataforma/"> Plataforma </a><a href="/ia-contenido/" aria-current="page"> Crear con IA </a><a href="/interacciones/"> Interacciones </a><a href="/framework/"> Framework </a><a href="/planes/"> Planes </a> </nav> <div class="header-actions"> <div class="header-settings"><button type="button" class="header-settings-btn" data-settings-toggle aria-label="Ajustes" aria-expanded="false" aria-haspopup="true"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M12 15.5a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7Z" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9c.26.604.852.997 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1Z" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"></path></svg></button><div class="header-settings-panel" data-settings-panel hidden><div class="settings-section"><span class="settings-section-label">Tema</span><div class="settings-options" role="group" aria-label="Tema"><button type="button" class="settings-option" data-theme-switch data-theme-value="light" aria-label="Modo claro" aria-pressed="false"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><circle cx="12" cy="12" r="4.5" stroke="currentColor" stroke-width="1.8"></circle><path d="M12 2.5v2.2M12 19.3v2.2M4.7 4.7l1.6 1.6M17.7 17.7l1.6 1.6M2.5 12h2.2M19.3 12h2.2M4.7 19.3l1.6-1.6M17.7 6.3l1.6-1.6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg><span>Modo claro</span></button><button type="button" class="settings-option" data-theme-switch data-theme-value="dark" aria-label="Modo oscuro" aria-pressed="false"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><path d="M20 14.5A8.5 8.5 0 0 1 9.5 4 7 7 0 1 0 20 14.5Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"></path></svg><span>Modo oscuro</span></button><button type="button" class="settings-option" data-theme-switch data-theme-value="system" aria-label="Usar tema del sistema" aria-pressed="false"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" aria-hidden="true"><rect x="3.5" y="4.5" width="17" height="11.5" rx="2" stroke="currentColor" stroke-width="1.8"></rect><path d="M9.5 20.5h5" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"></path></svg><span>Usar tema del sistema</span></button></div></div><div class="settings-section"><span class="settings-section-label">Idioma</span><div class="settings-options settings-options-lang" role="group" aria-label="Idioma"><a href="/ia-contenido/" class="settings-option is-active" data-locale-switch data-locale="es" hreflang="es">
4ES
5</a><a href="/en/ai-content/" class="settings-option" data-locale-switch data-locale="en" hreflang="en">
6EN
7</a></div></div></div></div> <div class="header-auth" data-clerk-auth-root> <div class="header-auth-guest" data-auth-guest> <a class="button button-ghost" href="https://app.sodana.ai/sign-in"> Iniciar sesión </a> <a class="button button-primary button-compact" href="https://app.sodana.ai/sign-up">Crear cuenta</a> </div> <div class="header-auth-user" data-auth-user hidden> <span class="header-auth-name" data-auth-name></span> <a class="button button-primary button-compact" data-auth-app href="https://app.sodana.ai/dashboard"> Ir a la app </a> </div> </div> </div> <button class="mobile-nav-toggle" aria-label="Abrir menú" aria-expanded="false"> <span class="hamburger-line"></span> <span class="hamburger-line"></span> <span class="hamburger-line"></span> </button> </div> <nav class="mobile-nav container" aria-label="Menú móvil" hidden> <a href="/"> Inicio </a><a href="/plataforma/"> Plataforma </a><a href="/ia-contenido/" aria-current="page"> Crear con IA </a><a href="/interacciones/"> Interacciones </a><a href="/framework/"> Framework </a><a href="/planes/"> Planes </a> <div class="mobile-nav-settings"><div class="settings-section"><span class="settings-section-label">Tema</span><div class="settings-options" role="group" aria-label="Tema"><button type="button" class="settings-option" data-theme-switch data-theme-value="light" aria-label="Modo claro" aria-pressed="false">Modo claro</button><button type="button" class="settings-option" data-theme-switch data-theme-value="dark" aria-label="Modo oscuro" aria-pressed="false">Modo oscuro</button><button type="button" class="settings-option" data-theme-switch data-theme-value="system" aria-label="Usar tema del sistema" aria-pressed="false">Usar tema del sistema</button></div></div><div class="settings-section"><span class="settings-section-label">Idioma</span><div class="settings-options settings-options-lang" role="group" aria-label="Idioma"><a href="/ia-contenido/" class="settings-option is-active" data-locale-switch data-locale="es" hreflang="es">
8ES
9</a><a href="/en/ai-content/" class="settings-option" data-locale-switch data-locale="en" hreflang="en">
10EN
11</a></div></div></div> <div class="mobile-nav-actions"> <div class="header-auth" data-clerk-auth-root> <div class="header-auth-guest" data-auth-guest> <a class="button button-ghost" href="https://app.sodana.ai/sign-in"> Iniciar sesión </a> <a class="button button-primary button-compact" href="https://app.sodana.ai/sign-up">Crear cuenta</a> </div> <div class="header-auth-user" data-auth-user hidden> <span class="header-auth-name" data-auth-name></span> <a class="button button-primary button-compact" data-auth-app href="https://app.sodana.ai/dashboard"> Ir a la app </a> </div> </div> </div> </nav> </header> 
11<script>(function(){var K="sodana-public-auth";var MAX=2592000000;try{var raw=localStorage.getItem(K);if(!raw)return;var d=JSON.parse(raw);if(!d||d.status!=="signed_in"||!d.name)return;if(d.updatedAt&&Date.now()-d.updatedAt>MAX){localStorage.removeItem(K);return;}document.querySelectorAll("[data-clerk-auth-root]").forEach(function(root){var guest=root.querySelector("[data-auth-guest]");var user=root.querySelector("[data-auth-user]");var nameEl=root.querySelector("[data-auth-name]");if(!guest||!user||!nameEl)return;nameEl.textContent=d.name;guest.hidden=true;user.hidden=false;root.classList.add("is-auth-cached","is-auth-ready");});}catch(e){}})();</script>
11 
11<script type="module" src="/_astro/SiteHeader.astro_astro_type_script_index_0_lang.cOFS88q3.js"></script>
11 <main id="top">   <section class="page-hero section ia-hero"> <div class="container page-hero-grid"> <div> <span class="eyebrow ia-reveal">Crear con IA</span> <h1 class="ia-reveal" style="--d:1"> De una señal a una pieza lista para producir. </h1> <p class="ia-reveal" style="--d:2"> Encuentra la idea, escribe y mejora el guion, genera los elementos multimedia y organiza la publicación. Sodana conecta cada paso con lo que sí funciona en tu marca. </p> <div class="hero-actions ia-reveal" style="--d:3"> <a class="button button-primary" href="https://app.sodana.ai/sign-up">Empezar gratis</a> <a class="button button-secondary" href="/framework/">Ver plataforma</a> </div> <div class="hero-platform-strip ia-reveal" style="--d:4" aria-label="Plataformas soportadas" data-astro-cid-25chmtg5> <span class="hero-social hero-social-ig" title="Instagram" data-astro-cid-25chmtg5> <svg aria-hidden="true" viewBox="0 0 24 24" data-astro-cid-25chmtg5> <rect x="3" y="3" width="18" height="18" rx="5" fill="url(#hero-ig-gradient)" data-astro-cid-25chmtg5></rect> <circle cx="12" cy="12" r="4" fill="none" stroke="#fff" stroke-width="1.9" data-astro-cid-25chmtg5></circle> <circle cx="17.1" cy="6.9" r="1.15" fill="#fff" data-astro-cid-25chmtg5></circle> <defs data-astro-cid-25chmtg5> <linearGradient id="hero-ig-gradient" x1="3" y1="21" x2="21" y2="3" gradientUnits="userSpaceOnUse" data-astro-cid-25chmtg5> <stop offset="0" stop-color="#feda75" data-astro-cid-25chmtg5></stop> <stop offset="0.35" stop-color="#fa7e1e" data-astro-cid-25chmtg5></stop> <stop offset="0.65" stop-color="#d62976" data-astro-cid-25chmtg5></stop> <stop offset="1" stop-color="#4f5bd5" data-astro-cid-25chmtg5></stop> </linearGradient> </defs> </svg> <span class="sr-only" data-astro-cid-25chmtg5>Instagram</span> </span> <span class="hero-social hero-social-tt" title="TikTok" data-astro-cid-25chmtg5> <svg aria-hidden="true" viewBox="0 0 24 24" data-astro-cid-25chmtg5> <path d="M16.6 3c.3 2.4 1.7 3.9 4.1 4.1v3.3c-1.5 0-2.9-.5-4.1-1.3v6.2c0 3.1-2.5 5.7-5.7 5.7S5.2 18.4 5.2 15.3c0-3.1 2.5-5.7 5.7-5.7.3 0 .6 0 .9.1v3.4a2.4 2.4 0 1 0 1.5 2.2V3h3.3z" data-astro-cid-25chmtg5></path> </svg> <span class="sr-only" data-astro-cid-25chmtg5>TikTok</span> </span> <span class="hero-social hero-social-yt" title="YouTube" data-astro-cid-25chmtg5> <svg aria-hidden="true" viewBox="0 0 24 24" data-astro-cid-25chmtg5> <path d="M22.1 7.2c-.2-1-.9-1.7-1.9-1.9C18.7 5 12 5 12 5s-6.7 0-8.2.3c-1 .2-1.7 1-1.9 1.9C1.6 8.7 1.6 12 1.6 12s0 3.3.3 4.8c.2 1 .9 1.7 1.9 1.9C5.3 19 12 19 12 19s6.7 0 8.2-.3c1-.2 1.7-1 1.9-1.9.3-1.5.3-4.8.3-4.8s0-3.3-.3-4.8z" data-astro-cid-25chmtg5></path> <path d="M9.9 15V9l5.5 3-5.5 3z" fill="#fff" data-astro-cid-25chmtg5></path> </svg> <span class="sr-only" data-astro-cid-25chmtg5>YouTube</span> </span> <span class="hero-social hero-social-fb" title="Facebook" data-astro-cid-25chmtg5> <svg aria-hidden="true" viewBox="0 0 24 24" data-astro-cid-25chmtg5> <circle cx="12" cy="12" r="10" data-astro-cid-25chmtg5></circle> <path d="M13.3 21v-6.8h2.3l.4-2.7h-2.7V9.8c0-.8.4-1.4 1.5-1.4h1.3V6c-.3 0-1.1-.1-2-.1-2.1 0-3.5 1.3-3.5 3.6v2.1H8.3v2.7h2.3V21z" fill="#fff" data-astro-cid-25chmtg5></path> </svg> <span class="sr-only" data-astro-cid-25chmtg5>Facebook</span> </span> <span class="hero-social hero-social-x" title="X · planes pagos" data-astro-cid-25chmtg5> <strong aria-hidden="true" data-astro-cid-25chmtg5>𝕏</strong> <span class="sr-only" data-astro-cid-25chmtg5>X, planes pagos</span> </span> <span class="hero-platform-note" data-astro-cid-25chmtg5>Free · hasta 2 perfiles</span> <small data-astro-cid-25chmtg5>Sin tarjeta · OAuth seguro · X en planes pagos.</small> </div>  </div> <div class="plat-hero-visual ia-reveal" style="--d:3"> <figure class="screenshot-frame screenshot-frame-light plat-shot"> <div class="window-bar"> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-address">app.sodana.ai/ideas-scripts</span> </div> <div class="screenshot-media">  <img src="/showcase/ia-generator/ia-generator-es-light.webp" alt="Ideas y guiones con contexto de marca. Brief, conceptos puntuados y guiones listos para producir." loading="eager" fetchpriority="high" decoding="async" class="screenshot-image-light has-theme-variant"> <img src="/showcase/ia-generator/ia-generator-es-dark.webp" alt="" aria-hidden="true" loading="eager" fetchpriority="high" decoding="async" class="screenshot-image-dark"> </div> <figcaption> <strong>Ideas y guiones con contexto de marca</strong> <span>Brief, conceptos puntuados y guiones listos para producir.</span>
11 </figcaption> </figure> <article class="plat-float plat-float-a" aria-hidden="true"> <span>Ideas generadas</span> <strong data-count data-count-to="3">3</strong> <em>puntuadas por marca</em> </article> <article class="plat-float plat-float-b ia-float-fix" aria-hidden="true"> <span class="ia-float-badge">Guion listo</span> <strong>Hook + valor + CTA</strong> <em>editable y exportable</em> </article> </div> </div> </section>  <section class="section ia-analysis-section"> <div class="container section-heading centered-section-heading ia-reveal"> <span class="eyebrow">Análisis con IA</span> <h2>Entiende por qué funcionó <mark>y, sobre todo, por qué no.</mark></h2> <p> Análisis multimodal por pieza: la IA no solo celebra los aciertos, también diagnostica las debilidades y te dice exactamente qué cambiar. </p> </div> <div class="container split-grid ia-analysis-grid"> <div class="plat-analytics-visual ia-reveal"> <figure class="screenshot-frame screenshot-frame-dark plat-shot"> <div class="window-bar"> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-address">app.sodana.ai/analytics</span> </div> <div class="screenshot-media">  <img src="/showcase/ia-analysis-detail/ia-analysis-detail-es-light.webp" alt="Detalle de análisis de video. Drivers de debilidad y mejoras priorizadas." loading="lazy" fetchpriority="auto" decoding="async" class="screenshot-image-light has-theme-variant"> <img src="/showcase/ia-analysis-detail/ia-analysis-detail-es-dark.webp" alt="" aria-hidden="true" loading="lazy" fetchpriority="auto" decoding="async" class="screenshot-image-dark"> </div> <figcaption> <strong>Detalle de análisis de video</strong> <span>Drivers de debilidad y mejoras priorizadas.</span> </figcaption> </figure> <article class="plat-float ia-float-weak" aria-hidden="true"> <span class="ia-float-badge ia-badge-weak">Punto débil</span> <strong>CTA tardío</strong> <em>aparece en seg. 26</em> </article> </div> <div class="ia-reveal" style="--d:1"> <span class="eyebrow">Por qué no funcionó + cómo mejorarlo</span> <h2>De la crítica honesta a la pieza corregida.</h2> <p> Cada video se analiza por hook, valor y CTA. Si una pieza rindió por debajo de tu línea base, la IA explica la causa y propone una versión mejor, anclada en lo que sí te funciona. </p> <div class="ia-outputs"> <article class="ia-output ia-output-verdict"> <span class="ia-output-icon" aria-hidden="true"></span> <div> <strong>Veredicto honesto</strong> <p>La IA dice si la pieza funcionó o no y contra qué línea base se mide, sin adornos.</p> </div> </article><article class="ia-output ia-output-weak"> <span class="ia-output-icon" aria-hidden="true"></span> <div> <strong>Por qué no funcionó</strong> <p>Identifica los drivers de debilidad: hook flojo, valor difuso, CTA tardío o ritmo que pierde a la audiencia.</p> </div> </article><article class="ia-output ia-output-fix"> <span class="ia-output-icon" aria-hidden="true"></span> <div> <strong>Mejoras priorizadas</strong> <p>Propone cambios concretos y ordenados por impacto para reescribir la pieza con más probabilidad de funcionar.</p> </div> </article><article class="ia-output ia-output-pattern"> <span class="ia-output-icon" aria-hidden="true"></span> <div> <strong>Patrón reutilizable</strong> <p>Extrae la fórmula de hook, contexto y CTA, más señales de playbook: duración, segundo de hook y ubicación del CTA.</p> </div> </article> </div> </div> </div> <!-- SUB-BLOQUE: RETENCIÓN INSTAGRAM --> <div class="container ia-retention ia-reveal"> <div class="ia-retention-head"> <span class="v3-chip v3-chip-ig ia-retention-chip"> <svg aria-hidden="true" viewBox="0 0 24 24"><rect x="4" y="4" width="16" height="16" rx="5"></rect><circle cx="12" cy="12" r="3.5"></circle><circle cx="17" cy="7" r="1"></circle></svg> Instagram · Reels </span> <h3>Sube tu Reel y lee la curva de retención.</h3> <p>Carga el insight de un Reel, deja que Sodana reconstruya la curva y recibe un diagnóstico de retención con recomendaciones.</p> </div> <div class="ia-retention-grid"> <div class="ia-retention-steps"> <div class="ia-retention-line" aria-hidden="true"><i data-loop-line></i></div> <article class="ia-retention-step" style="--d:0"> <span>1</span> <strong>Sube el insight del Reel</strong> <p>Carga la captura de insights de un Reel de Instagram desde un asistente guiado.</p> </article><article class="ia-retention-step" style="--d:1"> <span>
112</span> <strong>Sodana extrae la curva</strong> <p>Reconstruye la curva de retención del video listo para analizar, segundo a segundo.</p> </article><article class="ia-retention-step" style="--d:2"> <span>3</span> <strong>La IA diagnostica</strong> <p>Efectividad de hook, valor y CTA, zonas de caída, señales de rewatch y recomendaciones accionables.</p> </article> </div> <div class="ia-retention-visual"> <figure class="screenshot-frame screenshot-frame-light plat-shot"> <div class="window-bar"> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-address">app.sodana.ai/analytics</span> </div> <div class="screenshot-media">  <img src="/showcase/ia-retention-curve/ia-retention-curve-es-light.webp" alt="Gráfica de retención del video. Curva del video corto + diagnóstico de la IA." loading="lazy" fetchpriority="auto" decoding="async" class="screenshot-image-light has-theme-variant"> <img src="/showcase/ia-retention-curve/ia-retention-curve-es-dark.webp" alt="" aria-hidden="true" loading="lazy" fetchpriority="auto" decoding="async" class="screenshot-image-dark"> </div> <figcaption> <strong>Gráfica de retención del video</strong> <span>Curva del video corto + diagnóstico de la IA.</span> </figcaption> </figure> <div class="ia-retention-curve" aria-hidden="true"> <svg viewBox="0 0 240 90" preserveAspectRatio="none"> <path class="ia-curve-fill" d="M0 14 L40 22 L80 30 L120 52 L160 60 L200 66 L240 72 L240 90 L0 90 Z"></path> <polyline class="ia-curve-line" data-draw points="0,14 40,22 80,30 120,52 160,60 200,66 240,72"></polyline> </svg> <span class="ia-curve-drop" aria-hidden="true">Caída · seg. 7</span> </div> </div> </div> </div> </section>  <section class="section ia-make-section"> <div class="container section-heading centered-section-heading ia-reveal"> <span class="eyebrow">IA que crea</span> <h2>Pregunta desde la evidencia <mark>y genera tu próxima pieza.</mark></h2> </div> <div class="container ia-bento-grid"> <article class="ia-bento-card ia-bento-large ia-reveal"> <span class="v3-chip">Chat semántico · Ask AI</span> <h3>Pregunta sobre tus propios posts.</h3> <p>Búsqueda semántica sobre tu workspace. Si no hay evidencia, no inventa: te lo dice.</p> <div class="v3-chat" aria-hidden="true" data-chat> <div class="v3-chat-stream" data-chat-stream> <div class="v3-chat-turn" data-turn> <div class="v3-chat-q">¿Por qué cayó el alcance de mis Reels este mes?</div> <div class="v3-chat-a"> <span class="v3-typing"><i></i><i></i><i></i></span> <span class="v3-chat-text">Tus Reels &gt; 35s perdieron retención antes del seg. 8. Tus mejores piezas resuelven el hook en el seg. 1.</span> </div> </div><div class="v3-chat-turn" data-turn> <div class="v3-chat-q">¿Qué tema repito esta semana?</div> <div class="v3-chat-a"> <span class="v3-typing"><i></i><i></i><i></i></span> <span class="v3-chat-text">Repite comparativas rápidas: tuvieron +27% de guardados y más comentarios que tus posts informativos largos.</span> </div> </div><div class="v3-chat-turn" data-turn> <div class="v3-chat-q">¿Hay evidencia para hablar de precio?</div> <div class="v3-chat-a"> <span class="v3-typing"><i></i><i></i><i></i></span> <span class="v3-chat-text">Sí: 4 de tus 6 posts con mejor conversión mencionan ahorro o retorno antes del segundo 5.</span> </div> </div><div class="v3-chat-turn" data-turn> <div class="v3-chat-q">¿Qué idea convierto en script?</div> <div class="v3-chat-a"> <span class="v3-typing"><i></i><i></i><i></i></span> <span class="v3-chat-text">Convierte la objeción “no tengo tiempo” en un Reel de 22s con demostración directa y CTA temprano.</span> </div> </div><div class="v3-chat-turn" data-turn> <div class="v3-chat-q">¿Qué formato visual uso?</div> <div class="v3-chat-a"> <span class="v3-typing"><i></i><i></i><i></i></span> <span class="v3-chat-text">Usa pantalla dividida: problema a la izquierda, resultado a la derecha. Ese patrón elevó tu retención media.</span> </div> </div> </div> </div> </article> <article class="ia-bento-card ia-reveal" style="--d:1"> <span class="v3-chip">Ideas · Scripts</span> <h3>Crea desde tu contexto de marca</h3> <p>Parte de un objetivo, formato y plataforma para generar conceptos puntuados y guiones editables.</p> </article><article class="ia-bento-card ia-reveal" style="--d:2"> <span class="v3-chip">Guiones · Diagnóstico PEP</span> <h3>
11Analiza y mejora antes de grabar</h3> <p>Evalúa hook, valor y CTA; recibe variantes, una versión mejorada y un plan de rodaje accionable.</p> </article><article class="ia-bento-card ia-reveal" style="--d:3"> <span class="v3-chip">Assets · Acceso anticipado</span> <h3>Genera imagen y video</h3> <p>Produce assets desde texto o referencias y organiza los resultados en una biblioteca visual integrada.</p> </article><article class="ia-bento-card ia-reveal" style="--d:4"> <span class="v3-chip">Métricas · Multi-agente</span> <h3>Análisis de métricas con agentes</h3> <p>Cuenta, posts y comentarios analizados por agentes especializados que detectan patrones de contenido ganador.</p> </article><article class="ia-bento-card ia-reveal" style="--d:5"> <span class="v3-chip">Dashboard</span> <h3>Insights de IA en el dashboard</h3> <p>Resumen ejecutivo, lectura por sección y acciones recomendadas sobre tus propios datos.</p> </article><article class="ia-bento-card ia-reveal" style="--d:6"> <span class="v3-chip">Trends · Signal desk</span> <h3>Genera ideas desde tendencias</h3> <p>Señales del día por país, con sentimiento y relevancia, conectadas directo al generador de contenido.</p> </article> </div> <div class="container ia-pipeline-head ia-reveal"> <span class="eyebrow">Flujo creativo conectado</span> <h2>Idea, guion, producción y activación en un solo lugar.</h2> <p>Cada herramienta comparte el contexto de tu marca para que el trabajo avance sin volver a empezar en cada paso.</p> </div> <div class="container v3-pipeline-grid ia-pipeline-grid"> <article class="v3-pipeline-card ia-reveal" style="--d:0"> <span class="v3-pipeline-step">Idea</span> <h3>3 ideas por ejecución</h3> <p>Por objetivo, formato y plataforma, con hook, estructura, CTA y por qué funciona.</p> <span class="v3-pipeline-arrow" aria-hidden="true">→</span> </article><article class="v3-pipeline-card ia-reveal" style="--d:1"> <span class="v3-pipeline-step">Guion</span> <h3>Guion analizado y mejorado</h3> <p>Diagnóstico PEP, variantes de hook y CTA, propuesta mejorada y plan de rodaje.</p> <span class="v3-pipeline-arrow" aria-hidden="true">→</span> </article><article class="v3-pipeline-card ia-reveal" style="--d:2"> <span class="v3-pipeline-step">Produce</span> <h3>Imagen y video con IA</h3> <p>Genera assets desde texto o referencias y consérvalos en tu biblioteca creativa.</p> <span class="v3-pipeline-arrow" aria-hidden="true">→</span> </article><article class="v3-pipeline-card ia-reveal" style="--d:3"> <span class="v3-pipeline-step">Activa</span> <h3>Tendencias y calendario</h3> <p>Convierte señales relevantes en oportunidades y lleva la pieza a tu agenda de contenido.</p>  </article> </div> <div class="container ia-generator-shot ia-reveal"> <figure class="screenshot-frame screenshot-frame-yellow plat-shot"> <div class="window-bar"> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-address">app.sodana.ai/ideas-scripts</span> </div> <div class="screenshot-media">  <img src="/showcase/ia-generator/ia-generator-es-light.webp" alt="Generador de ideas y scripts. Brief, 3 ideas con score y zona de guion." loading="lazy" fetchpriority="auto" decoding="async" class="screenshot-image-light has-theme-variant"> <img src="/showcase/ia-generator/ia-generator-es-dark.webp" alt="" aria-hidden="true" loading="lazy" fetchpriority="auto" decoding="async" class="screenshot-image-dark"> </div> <figcaption> <strong>Generador de ideas y scripts</strong> <span>Brief, 3 ideas con score y zona de guion.</span> </figcaption> </figure> <article class="plat-float ia-float-gen" aria-hidden="true"> <span class="ia-float-badge">Listo para producir</span> <strong><i data-count data-count-to="3">3</i> ideas</strong> <em>con score por marca y método</em> </article> </div> <div class="container ia-make-strip ia-reveal" aria-hidden="true"> <span>Insights del dashboard</span> <figure class="screenshot-frame screenshot-frame-light plat-shot ia-strip-shot"> <div class="window-bar"> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-dot"></span> <span class="window-address">app.sodana.ai/dashboard</span> </div> <div class="screenshot-media">  <img src="/showcase/ia-dashboard-insights/ia-dashboard-insights-es-light.webp" alt="Insights del dashboard. Resumen ejecutivo + lectura de IA por sección." loading="lazy" fetchpriority="auto" decoding="async" class="screenshot-image-light has-theme-variant"> <img src="/showcase/ia-dashboard-insights/ia-dashboard-insights-es-dark.webp" alt="" aria-hidden="true" loading="lazy" fetchpriority="auto" decoding="async" class="screenshot-image-dark"> </div> <figcaption> <strong>Insights del dashboard</strong> <span>Resumen ejecutivo + lectura de IA por sección.</span>
11 </figcaption> </figure> </div> </section> <section class="section cta-section"> <div class="container cta-panel"> <div> <span class="eyebrow">Tu estudio creativo</span> <h2>Convierte tus mejores señales en contenido listo para producir.</h2> <p>Crea una cuenta para recorrer el flujo completo: idea, guion, mejora, producción y publicación.</p> </div> <div class="cta-actions"> <a class="button button-primary" href="https://app.sodana.ai/sign-up">Crear cuenta</a> <a class="button button-secondary" href="/planes/">Comparar planes</a> </div> </div> </section>  </main> <footer class="site-footer"> <div class="container footer-grid"> <div class="footer-brand"> <img src="/brand/sodana-logo-main.png" alt="Sodana" class="footer-logo footer-logo-light"> <img src="/brand/sodana-logo-dark.png" alt="Sodana" class="footer-logo footer-logo-dark"> <p>Sodana convierte el rendimiento social de múltiples cuentas en decisiones claras y contenido personalizado para marcas, creadores y equipos.</p> <a class="footer-contact" href="mailto:[email protected]">[email protected]</a> </div> <div class="footer-navigation"> <nav class="footer-links" aria-label="Producto"> <h2>Producto</h2> <a href="/">Inicio</a><a href="/plataforma/">Analíticas</a><a href="/ia-contenido/">Crear con IA</a><a href="/interacciones/">Interacciones</a><a href="/planes/">Planes</a><a href="/framework/">Framework</a><a href="/recursos/">
11Recursos</a> </nav> <nav class="footer-links" aria-label="Legal"> <h2>Legal</h2> <a href="/legal/privacy/">Privacidad</a><a href="/legal/terms/">Términos</a> </nav> </div> </div> <div class="container footer-bottom"> <small>© 2026 Sodana. Todos los derechos reservados.</small> <span class="footer-credit" aria-hidden="true">·</span> <a class="footer-credit" href="https://bicode.co" target="_blank" rel="noreferrer">Powered by BICODE</a> </div> </footer> </div> <button type="button" class="back-to-top" data-back-to-top aria-label="Volver arriba" title="Volver arriba" hidden> <svg viewBox="0 0 24 24" width="20" height="20" fill="none" aria-hidden="true"> <path d="M12 19V5m0 0-6 6m6-6 6 6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"></path> </svg> </button> 
11<script>
12  (() => {
13    const button = document.querySelector("[data-back-to-top]");
14    if (!button) return;
15
16    const THRESHOLD = 480;
17    let visible = false;
18
19    const update = () => {
20      const shouldShow = window.scrollY > THRESHOLD;
21      if (shouldShow === visible) return;
22      visible = shouldShow;
23      button.hidden = false;
24      button.classList.toggle("is-visible", shouldShow);
25    };
26
27    update();
28    window.addEventListener("scroll", update, { passive: true });
29
30    button.addEventListener("click", () => {
31      window.scrollTo({ top: 0, behavior: "smooth" });
32    });
33  })();
34</script>
34 <aside class="language-suggestion" data-language-suggestion data-current-locale="es" data-cookie-name="sodana-public-lang" hidden aria-label="Your browser is set to English. Would you like to view this page in English?"> <p>Your browser is set to English. Would you like to view this page in English?</p> <div class="language-suggestion__actions"> <a class="button button-primary" href="/en/ai-content/" data-locale-switch data-locale="en" hreflang="en"> View in English </a> <button type="button" class="button button-secondary" data-language-stay>Continue in Spanish</button> </div> <button type="button" class="language-suggestion__close" data-language-stay aria-label="Close language suggestion">×</button> </aside> 
34<script>
35  (() => {
36    const banner = document.querySelector("[data-language-suggestion]");
37    if (!banner) return;
38    const cookieName = banner.getAttribute("data-cookie-name");
39    const currentLocale = banner.getAttribute("data-current-locale");
40    const preferredLocale = (navigator.language || "").slice(0, 2).toLowerCase();
41    const hasPreference = cookieName && document.cookie.split("; ").some((item) => item.startsWith(`${cookieName}=`));
42
43    if (!hasPreference && ["es", "en"].includes(preferredLocale) && preferredLocale !== currentLocale) {
44      banner.hidden = false;
45    }
46
47    banner.querySelectorAll("[data-language-stay]").forEach((button) => {
48      button.addEventListener("click", () => {
49        if (cookieName && currentLocale) {
50          document.cookie = `${cookieName}=${currentLocale};path=/;max-age=31536000;samesite=lax`;
51        }
52        banner.hidden = true;
53      });
54    });
55  })();
56</script>
56  
56<script>(function(){const posthogKey = "phc_osCfB4qGrvKAkUqu5VLyxgRPzvkgV5Gke7mcVSDp9KZ8";
57const posthogHost = "https://us.i.posthog.com";
58
59      !(function (t, e) {
60        var o, n, p, r;
61        e.__SV ||
62          ((window.posthog = e),
63          (e._i = []),
64          (e.init = function (i, s, a) {
65            function g(t, e) {
66              var o = e.split(".");
67              2 == o.length && ((t = t[o[0]]), (e = o[1])),
68                (t[e] = function () {
69                  t.push([e].concat(Array.prototype.slice.call(arguments, 0)));
70                });
71            }
72            ((p = t.createElement("script")).type = "text/javascript"),
73              (p.crossOrigin = "anonymous"),
74              (p.async = !0),
75              (p.src =
76                s.api_host.replace(".i.posthog.com", "-assets.i.posthog.com") + "/static/array.js"),
77              (r = t.getElementsByTagName("script")[0]).parentNode.insertBefore(p, r);
78            var u = e;
79            for (void 0 !== a ? (u = e[a] = []) : (a = "posthog"), u.people = u.people || [], u.toString = function (
80              t
81            ) {
82              var e = "posthog";
83              return "posthog" !== a && (e += "." + a), t || (e += " (stub)"), e;
84            }, u.people.toString = function () {
85              return u.toString(1) + ".people (stub)";
86            }, o =
87              "init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_out_capturing has_opted_out_capturing opt_in_capturing clear_opt_in_out_capturing debug".split(
88                " "
89              ), n = 0; n < o.length; n++)
90              g(u, o[n]);
91            e._i.push([i, s, a]);
92          }),
93          (e.__SV = 1));
94      })(document, window.posthog || []);
95      const CONSENT_KEY = "sodana-analytics-consent";
96      const readConsent = () => window.localStorage.getItem(CONSENT_KEY);
97      const getAcquisition = () => {
98        const params = new URLSearchParams(window.location.search);
99        const stored = readConsent() === "granted" ? (() => {
100          try { return JSON.parse(window.localStorage.getItem("sodana-acquisition") || "{}"); } catch { return {}; }
101        })() : {};
102        const safeReferrer = (() => {
103          try {
104            const url = document.referrer ? new URL(document.referrer) : null;
105            return url ? `${url.origin}${url.pathname}` : "direct";
106          } catch { return "direct"; }
107        })();
108        const values = {
109          initial_path: stored.initial_path || window.location.pathname,
110          initial_referrer: stored.initial_referrer || safeReferrer,
111          utm_source: params.get("utm_source") || undefined,
112          utm_medium: params.get("utm_medium") || undefined,
113          utm_campaign: params.get("utm_campaign") || undefined,
114          utm_content: params.get("utm_content") || undefined,
115          utm_term: params.get("utm_term") || undefined,
116        };
117        const result = Object.fromEntries(Object.entries({ ...stored, ...values }).filter(([, value]) => value));
118        if (readConsent() === "granted") window.localStorage.setItem("sodana-acquisition", JSON.stringify(result));
119        return result;
120      };
121      const decorateAppLinks = () => {
122        const acquisition = getAcquisition();
123        const keys = ["utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term", "initial_path", "initial_referrer"];
124        document.querySelectorAll('a[href^="https://app.sodana.ai"]').forEach((anchor) => {
125          try {
126            const url = new URL(anchor.href);
127            keys.forEach((key) => { if (acquisition[key] && !url.searchParams.has(key)) url.searchParams.set(key, acquisition[key]); });
128            anchor.href = url.toString();
129          } catch { /* Ignore malformed third-party links. */ }
130        });
131      };
132      const boot = () => {
133        if (readConsent() !== "granted") return;
134        if (window.posthog?.__sodanaBooted) {
135          window.posthog.opt_in_capturing?.();
136          window.posthog.startSessionRecording?.();
137          return;
138        }
139        window.posthog?.init?.(posthogKey, {
140          api_host: posthogHost,
141          defaults: "2026-05-30",
142          capture_pageview: true,
143          capture_pageleave: true,
144          autocapture: false,
145          persistence: "localStorage+cookie",
146          session_recording: {
147            sampleRate: 0.1,
148            maskAllInputs: true,
149            maskAllText: true,
150            blockAllMedia: true,
151          },
152        });
153        window.posthog?.register?.(getAcquisition());
154        window.posthog.__sodanaBooted = true;
155        for (const item of window.__sodanaAnalyticsQueue ?? []) {
156          window.posthog.capture(item.name, item.properties);
157        }
158        window.__sodanaAnalyticsQueue = [];
159      };
160      window.addEventListener("sodana:analytics-consent", () => { boot(); decorateAppLinks(); });
161      if (readConsent() === "granted") boot();
162      decorateAppLinks();
163      window.addEventListener("DOMContentLoaded", decorateAppLinks, { once: true });
164      })();</script>
164<div class="sodana-consent" data-sodana-consent hidden><div class="sodana-consent__card" role="dialog" aria-modal="false" aria-labelledby="sodana-consent-title"><div class="sodana-consent__eyebrow">SODANA · <span>PRIVACIDAD</span></div><h2 id="sodana-consent-title">Ayúdanos a mejorar Sodana</h2><p>Usamos analítica anónima para entender qué funciona, mejorar la experiencia y detectar errores. Nunca enviamos prompts, contenido, tokens ni datos de tus redes.</p><div class="sodana-consent__details" data-consent-details hidden>Analítica de navegación y funciones, más replay con muestreo del 10%. Texto, campos, multimedia y pantallas sensibles quedan enmascarados.</div><div class="sodana-consent__actions"><button type="button" data-consent-accept>Aceptar analítica</button><button type="button" data-consent-deny>Solo necesarias</button><button type="button" class="sodana-consent__more" data-consent-more>Ver detalles</button></div></div></div>
164<script>
165        (() => {
166          const key = "sodana-analytics-consent";
167          const banner = document.querySelector("[data-sodana-consent]");
168          const accept = document.querySelector("[data-consent-accept]");
169          const deny = document.querySelector("[data-consent-deny]");
170          const more = document.querySelector("[data-consent-more]");
171          const details = document.querySelector("[data-consent-details]");
172          const open = () => { banner.hidden = false; };
173          const close = () => { banner.hidden = true; };
174          const select = (value) => {
175            window.localStorage.setItem(key, value);
176            if (value === "denied") {
177              window.posthog?.opt_out_capturing?.();
178              window.posthog?.stopSessionRecording?.();
179            }
180            window.dispatchEvent(new CustomEvent("sodana:analytics-consent", { detail: { consent: value } }));
181            close();
182          };
183          accept.addEventListener("click", () => select("granted"));
184          deny.addEventListener("click", () => select("denied"));
185          more.addEventListener("click", () => { details.hidden = !details.hidden; });
186          if (window.localStorage.getItem(key)) close(); else open();
187        })();
188      </script>
188 
188<script>(function(){var K="sodana-theme";var A="data-theme-pref";function resolve(pref){if(pref==="light"||pref==="dark")return pref;return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";}function syncButtons(pref){document.querySelectorAll("[data-theme-switch]").forEach(function(btn){var v=btn.getAttribute("data-theme-value");var active=v===pref;btn.classList.toggle("is-active",active);btn.setAttribute("aria-pressed",active?"true":"false");});}function apply(pref){var resolved=resolve(pref);document.documentElement.setAttribute("data-theme",resolved);document.documentElement.setAttribute(A,pref);try{localStorage.setItem(K,pref);}catch(e){}var m=document.querySelector('meta[name="theme-color"]');if(m){m.setAttribute("content",resolved==="dark"?"#000017":"#fef7e6");}syncButtons(pref);}var pref=document.documentElement.getAttribute(A);if(pref!=="light"&&pref!=="dark"&&pref!=="system"){try{pref=localStorage.getItem(K);}catch(e){}}if(pref!=="light"&&pref!=="dark"&&pref!=="system")pref="system";apply(pref);document.querySelectorAll("[data-theme-switch]").forEach(function(btn){btn.addEventListener("click",function(){var t=btn.getAttribute("data-theme-value");if(t)apply(t);});});window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",function(){var current=document.documentElement.getAttribute(A)||"system";if(current==="system")apply("system");});})();</script>
188 
188<script>(function(){var K="sodana-public-lang";document.querySelectorAll("[data-locale-switch]").forEach(function(btn){btn.addEventListener("click",function(e){e.preventDefault();var loc=btn.getAttribute("data-locale");var href=btn.getAttribute("href");if(loc){document.cookie=K+"="+loc+";path=/;max-age=31536000;samesite=lax";}if(href)location.href=href;});});})();</script>
188 
188<script>(function(){
189  var btn=document.querySelector("[data-settings-toggle]");
190  var panel=document.querySelector("[data-settings-panel]");
191  if(!btn||!panel)return;
192  function close(){
193    btn.setAttribute("aria-expanded","false");
194    panel.hidden=true;
195  }
196  function open(){
197    btn.setAttribute("aria-expanded","true");
198    panel.hidden=false;
199  }
200  btn.addEventListener("click",function(e){
201    e.stopPropagation();
202    var isOpen=btn.getAttribute("aria-expanded")==="true";
203    if(isOpen)close();else open();
204  });
205  document.addEventListener("click",function(e){
206    if(!panel.hidden&&!panel.contains(e.target)&&e.target!==btn&&!btn.contains(e.target))close();
207  });
208  document.addEventListener("keydown",function(e){
209    if(e.key==="Escape"&&!panel.hidden)close();
210  });
211  panel.querySelectorAll("[data-theme-switch],[data-locale-switch]").forEach(function(el){
212    el.addEventListener("click",function(){close();});
213  });
214})();</script>
214 
214<script>
215      const header = document.querySelector(".site-header");
216      const navToggle = document.querySelector(".mobile-nav-toggle");
217      const mobileNav = document.querySelector(".mobile-nav");
218
219      const updateHeader = () => {
220        header?.classList.toggle("is-scrolled", window.scrollY > 10);
221      };
222
223      updateHeader();
224      window.addEventListener("scroll", updateHeader, { passive: true });
225
226      navToggle?.addEventListener("click", () => {
227        const isOpen = navToggle.getAttribute("aria-expanded") === "true";
228        navToggle.setAttribute("aria-expanded", String(!isOpen));
229        navToggle.classList.toggle("is-open", !isOpen);
230        if (mobileNav) {
231          mobileNav.hidden = isOpen;
232        }
233      });
234
235      mobileNav?.querySelectorAll("a").forEach((link) => {
236        link.addEventListener("click", () => {
237          navToggle?.setAttribute("aria-expanded", "false");
238          navToggle?.classList.remove("is-open");
239          if (mobileNav) {
240            mobileNav.hidden = true;
241          }
242        });
243      });
244    </script>
244 </body> </html> 
244<script>
245  const revealEls = document.querySelectorAll(".ia-reveal");
246  if ("IntersectionObserver" in window && !window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
247    const io = new IntersectionObserver(
248      (entries) => {
249        entries.forEach((entry) => {
250          if (!entry.isIntersecting) return;
251          const el = entry.target;
252          el.classList.add("is-visible");
253          el.querySelectorAll("[data-count]").forEach((node) => {
254            const to = Number(node.getAttribute("data-count-to") || "0");
255            const dur = 1100;
256            const start = performance.now();
257            const tick = (now) => {
258              const p = Math.min((now - start) / dur, 1);
259              const eased = 1 - Math.pow(1 - p, 3);
260              node.textContent = String(Math.round(to * eased));
261              if (p < 1) requestAnimationFrame(tick);
262            };
263            requestAnimationFrame(tick);
264          });
265          io.unobserve(el);
266        });
267      },
268      { threshold: 0.15, rootMargin: "0px 0px -6% 0px" }
269    );
270    revealEls.forEach((el) => io.observe(el));
271  } else {
272    revealEls.forEach((el) => {
273      el.classList.add("is-visible");
274      el.querySelectorAll("[data-count]").forEach((node) => {
275        node.textContent = node.getAttribute("data-count-to") || "0";
276      });
277    });
278  }
279
280  // ---- Chat IA simulado (loop compacto) ----
281  (function () {
282    const stream = document.querySelector("[data-chat-stream]");
283    if (!stream) return;
284    const turns = Array.from(stream.querySelectorAll("[data-turn]"));
285    if (!turns.length) return;
286    const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
287    const WINDOW_SIZE = Math.min(3, turns.length);
288
289    if (reduce) {
290      turns.forEach((turn, index) => {
291        turn.classList.toggle("is-visible", index < WINDOW_SIZE);
292        turn.querySelector(".v3-chat-q")?.classList.add("is-in");
293        turn.querySelector(".v3-chat-a")?.classList.add("is-in", "show-text");
294      });
295      return;
296    }
297
298    const TYPING = 1200;
299    const READ = 2600;
300    const STEP = 700;
301    const LEAVE = 320;
302
303    let running = false;
304    let timers = [];
305    let resolvers = [];
306    const wait = (ms) => new Promise((res) => {
307      const timer = setTimeout(() => {
308        timers = timers.filter((t) => t !== timer);
309        resolvers = resolvers.filter((r) => r !== res);
310        res();
311      }, ms);
312      timers.push(timer);
313      resolvers.push(res);
314    });
315    const clearTimers = () => {
316      timers.forEach(clearTimeout);
317      timers = [];
318      resolvers.forEach((res) => res());
319      resolvers = [];
320    };
321
322    const resetTurn = (turn) => {
323      turn.classList.remove("is-visible", "is-leaving");
324      turn.querySelector(".v3-chat-q")?.classList.remove("is-in");
325      turn.querySelector(".v3-chat-a")?.classList.remove("is-in", "show-text");
326      return turn;
327    };
328
329    const revealTurn = async (turn) => {
330      resetTurn(turn);
331      stream.appendChild(turn);
332      turn.classList.add("is-visible");
333      await wait(STEP);
334      if (!running) return;
335      turn.querySelector(".v3-chat-q")?.classList.add("is-in");
336      await wait(STEP);
337      if (!running) return;
338      const answer = turn.querySelector(".v3-chat-a");
339      answer?.classList.add("is-in");
340      await wait(TYPING);
341      if (!running) return;
342      answer?.classList.add("show-text");
343    };
344
345    const showCompleteTurn = (turn) => {
346      resetTurn(turn);
347      stream.appendChild(turn);
348      turn.classList.add("is-visible");
349      turn.querySelector(".v3-chat-q")?.classList.add("is-in");
350      turn.querySelector(".v3-chat-a")?.classList.add("is-in", "show-text");
351    };
352
353    const hideTurn = async (turn) => {
354      turn.classList.add("is-leaving");
355      await wait(LEAVE);
356      resetTurn(turn);
357    };
358
359    const prime = () => {
360      turns.forEach(resetTurn);
361      const visibleTurns = [];
362      for (let i = 0; i < WINDOW_SIZE; i++) {
363        showCompleteTurn(turns[i]);
364        visibleTurns.push(turns[i]);
365      }
366      return visibleTurns;
367    };
368
369    async function play() {
370      let visibleTurns = prime();
371      let nextIndex = WINDOW_SIZE;
372      while (running) {
373        await wait(READ);
374        if (!running) return;
375        const oldestTurn = visibleTurns.shift();
376        if (oldestTurn) await hideTurn(oldestTurn);
377        if (!running) return;
378        const nextTurn = turns[nextIndex % turns.length];
379        await revealTurn(nextTurn);
380        visibleTurns.push(nextTurn);
381        nextIndex = (nextIndex + 1) % turns.length;
382      }
383    }
384
385    const start = () => { if (running) return; running = true; play(); };
386    const stop = () => { running = false; clearTimers(); };
387
388    if ("IntersectionObserver" in window) {
389      const io = new IntersectionObserver(
390        (entries) =>
390 entries.forEach((e) => (e.isIntersecting ? start() : stop())),
391        { threshold: 0.25 }
392      );
393      io.observe(stream);
394    } else {
395      start();
396    }
397  })();
398</script>

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.