1<!DOCTYPE html><html lang="es" class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/chunks/066jf0nk75nic.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/0lt87fraue.2o.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0c0kht~qdlx3k.js"/>
1<script src="/_next/static/chunks/0x9x-1-qkqbx2.js" async=""></script>
1<script src="/_next/static/chunks/0o9f..j36560k.js" async=""></script>
1<script src="/_next/static/chunks/12oc6wc~pjv9z.js" async=""></script>
1<script src="/_next/static/chunks/turbopack-03j~c2tk9bia3.js" async=""></script>
1<script src="/_next/static/chunks/0gnf5gv8-rmh7.js" async=""></script>
1<script src="/_next/static/chunks/0bwljmcumcp~p.js" async=""></script>
1<script src="/_next/static/chunks/02g_pyjav1flq.js" async=""></script>
1<script src="/_next/static/chunks/044k0k03n2rk5.js" async=""></script>
1<script src="/_next/static/chunks/15mdi~f-83c55.js" async=""></script>
1<script src="/_next/static/chunks/11cgf11vlae8d.js" async=""></script>
1<meta name="next-size-adjust" content=""/><title>Tenant BI</title><meta name="description" content="Looker Studio dashboards segmented by tenant token."/><link rel="shortcut icon" href="/favicon.ico?v=2"/><link rel="icon" href="/favicon.ico?favicon.16tpuit2gh5dp.ico" sizes="40x40" type="image/x-icon"/><link rel="icon" href="/favicon.svg?v=2" type="image/svg+xml"/><link rel="icon" href="/favicon.ico?v=2" sizes="any"/>
1<script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script>
1</head><body class="min-h-full flex flex-col"><div hidden=""><!--$--><!--/$--></div><main class="min-h-svh bg-background text-foreground"><header class="sticky top-0 z-20 border-b bg-background/90 backdrop-blur"><div class="mx-auto flex h-16 w-full max-w-7xl items-center justify-between px-4 sm:px-6"><a class="flex items-center gap-3 font-semibold" href="/"><span class="flex size-9 items-center justify-center rounded-lg bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-plug-zap" aria-hidden="true"><path d="M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z"></path><path d="m2 22 3-3"></path><path d="M7.5 13.5 10 11"></path><path d="M10.5 16.5 13 14"></path><path d="m18 3-4 4h6l-4 4"></path></svg></span><span>Tenant BI</span></a><nav class="hidden items-center gap-7 text-sm text-muted-foreground md:flex"><a class="transition-colors hover:text-foreground" href="#platform">Plataforma</a><a class="transition-colors hover:text-foreground" href="#demo">Demo</a><a class="transition-colors hover:text-foreground" href="#sources">Fuentes</a><a class="transition-colors hover:text-foreground" href="#pricing">Planes</a><a class="transition-colors hover:text-foreground" href="#access">Permisos</a></nav><div class="flex items-center gap-2"><a data-slot="button" data-variant="ghost" data-size="sm" class="group/button shrink-0 items-center justify-center border border-transparent bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5 hidden sm:inline-flex" href="/login">Entrar</a><a data-marketing-event="marketing.signup_click" data-marketing-label="nav" data-slot="button" data-variant="default" data-size="sm" class="group/button inline-flex shrink-0 items-center justify-center border border-transparent bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 bg-primary text-primary-foreground [a]:hover:bg-primary/80 h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5" href="/signup?utm_source=tenant-bi-site&utm_medium=owned&utm_campaign=looker-multitenant-template">Crear cuenta<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true" data-icon="inline-end"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div></header><section class="relative isolate overflow-hidden border-b"><div aria-hidden="true" class="absolute inset-0 -z-10 overflow-hidden"><div class="absolute inset-0 bg-[linear-gradient(180deg,var(--background)_0%,var(--muted)_100%)]"></div><div class="absolute inset-x-0 top-0 h-px bg-border"></div><div class="absolute right-[-8rem] top-10 hidden w-[56rem] rotate-[-8deg] rounded-2xl border bg-card/90 p-4 shadow-2xl shadow-foreground
1/10 backdrop-blur md:block"><div class="rounded-xl border bg-background"><div class="flex h-12 items-center justify-between border-b px-4"><div class="flex items-center gap-2"><span class="size-3 rounded-full bg-chart-4"></span><span class="size-3 rounded-full bg-chart-3"></span><span class="size-3 rounded-full bg-primary"></span></div><div class="h-2 w-40 rounded-full bg-muted"></div></div><div class="grid grid-cols-[13rem_1fr]"><div class="border-r p-4"><div class="mb-5 h-9 rounded-lg bg-primary"></div><div class="grid gap-3"><div class="flex items-center gap-3"><span class="size-7 rounded-md bg-chart-2"></span><span class="h-2 flex-1 rounded-full bg-muted"></span></div><div class="flex items-center gap-3"><span class="size-7 rounded-md bg-muted"></span><span class="h-2 flex-1 rounded-full bg-muted"></span></div><div class="flex items-center gap-3"><span class="size-7 rounded-md bg-muted"></span><span class="h-2 flex-1 rounded-full bg-muted"></span></div><div class="flex items-center gap-3"><span class="size-7 rounded-md bg-muted"></span><span class="h-2 flex-1 rounded-full bg-muted"></span></div><div class="flex items-center gap-3"><span class="size-7 rounded-md bg-muted"></span><span class="h-2 flex-1 rounded-full bg-muted"></span></div></div></div><div class="p-5"><div class="grid grid-cols-4 gap-3"><div class="rounded-lg border bg-card p-3"><div class="h-2 w-16 rounded-full bg-muted"></div><div class="mt-8 flex h-24 items-end gap-1"><span class="w-full rounded-md bg-primary" style="height:72%"></span><span class="w-full rounded-md bg-primary" style="height:54%"></span><span class="w-full rounded-md bg-primary" style="height:44%"></span></div></div><div class="rounded-lg border bg-card p-3"><div class="h-2 w-16 rounded-full bg-muted"></div><div class="mt-8 flex h-24 items-end gap-1"><span class="w-full rounded-md bg-chart-2" style="height:56%"></span><span class="w-full rounded-md bg-chart-2" style="height:38%"></span><span class="w-full rounded-md bg-chart-2" style="height:28%"></span></div></div><div class="rounded-lg border bg-card p-3"><div class="h-2 w-16 rounded-full bg-muted"></div><div class="mt-8 flex h-24 items-end gap-1"><span class="w-full rounded-md bg-chart-3" style="height:84%"></span><span class="w-full rounded-md bg-chart-3" style="height:66%"></span><span class="w-full rounded-md bg-chart-3" style="height:56%"></span></div></div><div class="rounded-lg border bg-card p-3"><div class="h-2 w-16 rounded-full bg-muted"></div><div class="mt-8 flex h-24 items-end gap-1"><span class="w-full rounded-md bg-chart-4" style="height:41%"></span><span class="w-full rounded-md bg-chart-4" style="height:23%"></span><span class="w-full rounded-md bg-chart-4" style="height:22%"></span></div></div></div><div class="mt-4 rounded-lg border bg-card"><div class="grid grid-cols-[1fr_8rem_7rem] gap-4 border-b px-4 py-3 last:border-b-0"><span class="font-mono text-xs">acme-co</span><span class="h-2 rounded-full bg-muted"></span><span class="h-2 rounded-full bg-primary"></span></div><div class="grid grid-cols-[1fr_8rem_7rem] gap-4 border-b px-4 py-3 last:border-b-0"><span class="font-mono text-xs">nimbus-retail</span><span class="h-2 rounded-full bg-muted"></span><span class="h-2 rounded-full bg-chart-2"></span></div><div class="grid grid-cols-[1fr_8rem_7rem] gap-4 border-b px-4 py-3 last:border-b-0"><span class="font-mono text-xs">atlas-health</span><span class="h-2 rounded-full bg-muted"></span><span class="h-2 rounded-full bg-primary"></span></div><div class="grid grid-cols-[1fr_8rem_7rem] gap-4 border-b px-4 py-3 last:border-b-0"><span class="font-mono text-xs">northwind</span><span class="h-2 rounded-full bg-muted"></span><span class="h-2 rounded-full bg-chart-2"></span></div></div></div></div></div></div></div><div class="mx-auto flex min-h-[calc(100svh-4rem)] max-w-7xl flex-col justify-end px-4 pb-8 pt-20 sm:px-6 lg:pb-10"><div class="max-w-3xl"><h1 class="max-w-4xl text-4xl font-semibold leading-none tracking-normal text-balance sm:text-6xl lg:text-7xl">Dashboards por cliente en Looker Studio</h1><p class="mt-6 max-w-2xl text-lg leading-8 text-muted-foreground sm:text-xl">Tenant BI convierte reportes compartidos en un SaaS multiempresa: tokens seguros, perfiles cifrados, billing y consultas optimizadas desde la fuente.</p><div class="mt-8 flex flex-col gap-3 sm:flex-row"><a data-marketing-event="marketing.signup_click" data-marketing-label="hero" data-slot="button" data-variant="default" data-size="lg" class="group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-
1px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground [a]:hover:bg-primary/80 gap-1.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 h-11 px-4 text-base" href="/signup?utm_source=tenant-bi-site&utm_medium=hero&utm_campaign=looker-multitenant-template">Activar SaaS<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true" data-icon="inline-end"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a data-marketing-event="marketing.demo_open" data-marketing-label="hero" data-slot="button" data-variant="outline" data-size="lg" class="group/button inline-flex shrink-0 items-center justify-center rounded-lg border bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 gap-1.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 h-11 px-4 text-base" href="/demo">Ver demo<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right" aria-hidden="true" data-icon="inline-end"><path d="m9 18 6-6-6-6"></path></svg></a></div><div class="mt-8 rounded-2xl border bg-card p-3 shadow-sm md:hidden"><div class="rounded-xl border bg-background"><div class="flex items-center justify-between border-b px-3 py-2"><span class="font-mono text-xs">tenant: acme-co</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80">valid</span></div><div class="grid grid-cols-3 gap-2 p-3"><div class="flex h-24 items-end rounded-lg bg-muted p-1"><span class="w-full rounded-md bg-primary" style="height:68%"></span></div><div class="flex h-24 items-end rounded-lg bg-muted p-1"><span class="w-full rounded-md bg-chart-2" style="height:46%"></span></div><div class="flex h-24 items-end rounded-lg bg-muted p-1"><span class="w-full rounded-md bg-chart-3" style="height:82%"></span></div></div><div class="grid gap-2 border-t p-3"><div class="flex items-center gap-2"><span class="size-2 rounded-full bg-primary"></span><span class="font-mono text-xs text-muted-foreground">token</span><span class="ml-auto h-2 w-16 rounded-full bg-muted"></span></div><div class="flex items-center gap-2"><span class="size-2 rounded-full bg-chart-2"></span><span class="font-mono text-xs text-muted-foreground">profile</span><span class="ml-auto h-2 w-16 rounded-full bg-muted"></span></div><div class="flex items-center gap-2">
1<span class="size-2 rounded-full bg-chart-3"></span><span class="font-mono text-xs text-muted-foreground">subscription</span><span class="ml-auto h-2 w-16 rounded-full bg-muted"></span></div></div></div></div></div><div class="mt-12 grid gap-3 sm:grid-cols-3"><div class="rounded-xl border bg-background/80 p-4 backdrop-blur"><p class="text-2xl font-semibold tabular-nums">50k+</p><p class="mt-1 text-sm text-muted-foreground">filas probadas en Neon</p></div><div class="rounded-xl border bg-background/80 p-4 backdrop-blur"><p class="text-2xl font-semibold tabular-nums">60s</p><p class="mt-1 text-sm text-muted-foreground">cache seguro de validacion</p></div><div class="rounded-xl border bg-background/80 p-4 backdrop-blur"><p class="text-2xl font-semibold tabular-nums">0</p><p class="mt-1 text-sm text-muted-foreground">secretos en links</p></div></div></div></section><section id="demo" class="border-b bg-foreground text-background"><div class="mx-auto grid w-full max-w-[92rem] gap-8 px-4 py-20 sm:px-6 lg:grid-cols-[0.68fr_1.32fr] lg:items-center"><div class="min-w-0"><span data-slot="badge" data-variant="default" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! [a]:hover:bg-primary/80 bg-background text-foreground hover:bg-background">Demo real embebido</span><h2 class="mt-5 max-w-xl text-3xl font-semibold leading-tight tracking-normal sm:text-5xl">Un reporte real. Muchos clientes. Cero credenciales en links.</h2><p class="mt-5 max-w-xl text-base leading-7 text-background/70">Tres clientes activos comparten el mismo reporte publicado. Un cuarto escenario usa token vencido para demostrar que el conector bloquea schema y data antes de consultar cualquier fuente.</p><div class="mt-6 grid gap-3 sm:grid-cols-2"><div class="rounded-xl border border-background/15 bg-background/5 p-4"><p class="font-medium text-background">Sin Tenant BI</p><ul class="mt-3 grid gap-2 text-sm text-background/65"><li class="flex items-center gap-2"><span class="size-1.5 rounded-full bg-background/50"></span>Reportes duplicados</li><li class="flex items-center gap-2"><span class="size-1.5 rounded-full bg-background/50"></span>Filtros manuales</li><li class="flex items-center gap-2"><span class="size-1.5 rounded-full bg-background/50"></span>Credenciales repetidas</li></ul></div><div class="rounded-xl border border-background/15 bg-background/5 p-4"><p class="font-medium text-background">Con Tenant BI</p><ul class="mt-3 grid gap-2 text-sm text-background/65"><li class="flex items-center gap-2"><span class="size-1.5 rounded-full bg-background/50"></span>Un reporte parametrizado</li><li class="flex items-center gap-2"><span class="size-1.5 rounded-full bg-background/50"></span>Token expirable</li><li class="flex items-center gap-2"><span class="size-1.5 rounded-full bg-background/50"></span>Secretos server-side</li></ul></div></div><div class="mt-8 grid gap-2" data-testid="tenant-switcher"><button type="button" aria-pressed="true" data-testid="tenant-option-acme-retail" data-marketing-event="marketing.tenant_switch" data-marketing-label="acme-retail" class="flex w-full min-w-0 items-center gap-3 rounded-xl border px-4 py-3 text-left transition border-background bg-background text-foreground"><span class="size-3 shrink-0 rounded-full bg-primary"></span><span class="min-w-0 flex-1"><span class="block truncate font-medium">Acme Retail</span><span class="text-sm text-muted-foreground">Retail<!-- --> / <!-- -->generando JWT...</span></span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80">Activo</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right size-4 shrink-0" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></button><button type="button" aria-pressed="false" data-testid="tenant-option-nova-health" data-marketing-event="marketing.tenant_switch" data-marketing-label="nova-health" class="flex w-full min-w-0 items-center gap-3 rounded-xl border px-4 py-3 text-left transition border-background/15 bg-background/5 text-background hover:bg-background/10"><span class="size-3 shrink-0 rounded-full bg-chart-2"></span><span class="min-w-0 flex-1"><span class="block truncate font-medium">Nova Health</span><span class="text-sm text-background/60">Healthcare<!-- --> / <!-- -->generando JWT...</span></span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80">Activo</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right size-4 shrink-0" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></button><button type="button" aria-pressed="false" data-testid="tenant-option-atlas-ops" data-marketing-event="marketing.tenant_switch" data-marketing-label="atlas-ops" class="flex w-full min-w-0 items-center gap-3 rounded-xl border px-4 py-3 text-left transition border-background/15 bg-background/5 text-background hover:bg-background/10"><span class="size-3 shrink-0 rounded-full bg-chart-4"></span><span class="min-w-0 flex-1"><span class="block truncate font-medium">Atlas Ops</span><span class="text-sm text-background/60">Operations<!-- --> / <!-- -->generando JWT...</span></span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80">Activo</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right size-4 shrink-0" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></button></div><div class="mt-4 grid gap-2 text-xs text-background/70"><p>3<!-- --> tenants activos y <!-- -->0<!-- --> escenarios bloqueados.</p></div><div class="mt-6 rounded-xl border border-background/15 bg-background/5 p-4 font-mono text-xs text-background/70"><span class="mr-2 font-sans text-[0.7rem] uppercase text-background/50">URL params seguro</span><span class="text-background">params=</span>{"ds0.tenantToken":"generando-jwt"}</div><div class="mt-3 flex flex-col gap-2 sm:flex-row"><button data-slot="button" data-variant="secondary" data-size="sm" class="group/button inline-flex shrink-0 items-center border border-transparent bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-
1px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5 justify-center" type="button" disabled=""><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy" aria-hidden="true" data-icon="inline-start"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copiar params</button><a data-marketing-event="marketing.demo_mode_open" data-marketing-label="demo-page" data-slot="button" data-variant="outline" data-size="sm" class="group/button inline-flex shrink-0 items-center border bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5 justify-center border-background/30 bg-transparent text-background hover:bg-background hover:text-foreground" href="/demo"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right" aria-hidden="true" data-icon="inline-start"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg>Modo presentacion</a></div></div><div class="min-w-0 overflow-hidden rounded-2xl border border-background/15 bg-background p-2 text-foreground shadow-2xl shadow-black/30"><div class="grid gap-2 border-b px-4 py-3"><div class="flex flex-wrap items-center justify-between gap-3"><div class="flex min-w-0 items-center gap-3"><span class="size-3 shrink-0 rounded-full bg-primary"></span><div class="min-w-0"><p class="truncate font-medium">Looker Studio / <!-- -->Acme Retail</p><p class="text-xs text-muted-foreground">filtersApplied=true / tenant scoped</p></div></div><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80">generando tokens</span></div><div class="grid gap-2 rounded-xl border bg-muted/40 p-2 sm:grid-cols-3"><div class="rounded-lg border bg-background px-3 py-2"><p class="text-[0.65rem] font-medium uppercase tracking-normal text-muted-foreground">Revenue</p><p class="mt-1 truncate text-lg font-semibold">$99,666</p></div><div class="rounded-lg border bg-background px-3 py-2"><p class="text-[0.65rem] font-medium uppercase tracking-normal text-muted-foreground">Orders</p><p class="mt-1 truncate text-lg font-semibold">1,248</p></div><div class="rounded-lg border bg-background px-3 py-2"><p class="text-[0.65rem] font-medium uppercase tracking-normal text-muted-foreground">Latency</p><p class="mt-1 truncate text-lg font-semibold">0.7s</p></div></div><div class="grid gap-2 text-xs text-muted-foreground sm:grid-cols-3"><div class="flex min-w-0 items-center gap-2 rounded-lg border bg-background px-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check size-3.5 shrink-0 text-foreground" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg><span class="truncate">tenant scope</span><span class="ml-auto font-mono text-foreground">token</span></div><div class="flex min-w-0 items-center gap-2 rounded-lg border bg-background px-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database size-3.5 shrink-0 text-foreground" aria-hidden="true"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span class="truncate">pushdown</span><span class="ml-auto font-mono text-foreground">SQL</span></div><div class="flex min-w-0 items-center gap-2 rounded-lg border bg-background px-3 py-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap size-3.5 shrink-0 text-foreground" aria-hidden="true"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><span class="truncate">freshness</span><span class="ml-auto font-mono text-foreground">live</span></div></div><div class="h-px bg-gradient-to-r from-transparent via-border to-transparent"></div><div class="rounded-lg border bg-muted/30 px-3 py-2 text-xs text-muted-foreground">Fallback comercial: si Google bloquea temporalmente el embed, el link "Abrir reporte real" conserva los mismos params y permite validar el flujo completo.</div></div><div class="grid grid-cols-[0.35rem_1fr_0.35rem] bg-muted/30 sm:grid-cols-[0.75rem_1fr_0.75rem]"><div class="border-r bg-[repeating-linear-gradient(180deg,var(--border)_0_1px,transparent_1px_12px)]"></div><div class="flex min-w-0 items-center gap-3"><div class="grid h-[34rem] w-full place-items-center bg-background text-sm text-muted-foreground sm:h-[40rem] lg:h-[44rem]">Generando tokens seguros para Looker Studio</div></div><div class="border-l bg-[repeating-linear-gradient(180deg,var(--border)_0_1px,transparent_1px_12px)]"></div></div></div></div></section><section id="template" class="border-b bg-background"><div class="mx-auto grid max-w-7xl gap-10 px-4 py-20 sm:px-6 lg:grid-cols-[0.82fr_1.18fr] lg:items-start"><div class="lg:sticky lg:top-24"><h2 class="max-w-2xl text-3xl font-semibold leading-tight tracking-normal sm:text-5xl">Template comercial listo para anuncios, demos y copias por cliente.</h2><p class="mt-5 max-w-xl text-base leading-7 text-muted-foreground">El flujo de venta arranca mostrando un Looker Studio real: el prospecto prueba tenant activo, token vencido y despues crea su propio reporte desde el template reusable.</p><div class="mt-6 flex flex-col gap-3 sm:flex-row"><a data-marketing-event="marketing.demo_open" data-marketing-label="template-section" data-slot="button" data-variant="default" data-size="default" class="group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-
1px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground [a]:hover:bg-primary/80 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2" href="/demo">Probar demo con mi cliente<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true" data-icon="inline-end"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a data-marketing-event="marketing.template_console_open" data-marketing-label="template-section" data-slot="button" data-variant="outline" data-size="default" class="group/button inline-flex shrink-0 items-center justify-center rounded-lg border bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2" href="/dashboard/templates">Ver template en Looker Studio<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link" aria-hidden="true" data-icon="inline-end"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div><div class="mt-8 grid gap-3"><div class="flex items-center gap-3 rounded-xl border bg-muted/30 p-3 text-sm"><span class="flex size-7 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Dashboards por cliente sin duplicar reportes.</span></div><div class="flex items-center gap-3 rounded-xl border bg-muted/30 p-3 text-sm"><span class="flex size-7 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Looker Studio multi-tenant con tokens seguros.</span></div><div class="flex items-center gap-3 rounded-xl border bg-muted/30 p-3 text-sm"><span class="flex size-7 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Entrega analytics a cada cliente sin exponer credenciales.</span></div></div></div><div class="grid gap-4"><div class="overflow-hidden rounded-2xl border bg-card shadow-sm"><img alt="Tenant BI Looker Studio template preview" loading="lazy" width="1280" height="720" decoding="async" data-nimg="1" class="h-auto w-full" style="color:transparent" src="/marketing/template-dashboard.svg"/></div><div class="grid gap-4 md:grid-cols-2"><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground
1/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl overflow-hidden rounded-xl"><img alt="Cambio de tenant" loading="lazy" width="640" height="420" decoding="async" data-nimg="1" class="h-auto w-full border-b bg-muted/30" style="color:transparent" src="/marketing/tenant-switch-storyboard.svg"/><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Cambio de tenant</div><div data-slot="card-description" class="text-sm text-muted-foreground">Storyboard para video corto: un reporte, tres clientes.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl overflow-hidden rounded-xl"><img alt="Token activo vs vencido" loading="lazy" width="640" height="420" decoding="async" data-nimg="1" class="h-auto w-full border-b bg-muted/30" style="color:transparent" src="/marketing/token-access-comparison.svg"/><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Token activo vs vencido</div><div data-slot="card-description" class="text-sm text-muted-foreground">Grafico simple para explicar seguridad y bloqueo de acceso.</div></div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Audiencias iniciales</div><div data-slot="card-description" class="text-sm text-muted-foreground">Mensajes listos para Google Search, LinkedIn outbound y retargeting.</div></div><div data-slot="card-content" class="px-4 group-data-[size=sm]/card:px-3 flex flex-wrap gap-2"><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">Agencias de marketing con reportes por cliente</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">SaaS B2B que entregan analitica a varias empresas</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">Software houses que montan portales de BI para clientes</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">Operaciones con dashboards por sede, pais o franquicia</span></div></div></div></div></section><section id="platform" class="border-b"><div class="mx-auto grid max-w-7xl gap-10 px-4 py-20 sm:px-6 lg:grid-cols-[0.75fr_1.25fr] lg:items-start"><div class="lg:sticky lg:top-24"><h2 class="max-w-xl text-3xl font-semibold leading-tight tracking-normal sm:text-5xl">Un reporte, muchos clientes, cero fugas.</h2><p class="mt-5 max-w-lg text-base leading-7 text-muted-foreground">Tenant BI convierte Looker Studio en una capa comercial para SaaS: cada token decide que tenant, perfil y suscripcion puede consultar.</p></div><div class="grid gap-4 sm:grid-cols-2"><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground
1/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-landmark" aria-hidden="true"><path d="M10 18v-7"></path><path d="M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z"></path><path d="M14 18v-7"></path><path d="M18 18v-7"></path><path d="M3 22h18"></path><path d="M6 18v-7"></path></svg></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Looker multi-tenant sin Enterprise</div><div data-slot="card-description" class="text-sm text-muted-foreground">Publica un reporte y segmenta cada vista por cliente sin duplicar dashboards ni exponer credenciales.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database" aria-hidden="true"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Perfiles gestionados por SaaS</div><div data-slot="card-description" class="text-sm text-muted-foreground">Crea tenants, perfiles y tokens desde una consola con auditoria, billing y validacion remota.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-column" aria-hidden="true"><path d="M3 3v16a2 2 0 0 0 2 2h16"></path><path d="M18 17V9"></path><path d="M13 17V5"></path><path d="M8 17v-3"></path></svg></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Rendimiento desde la consulta</div><div data-slot="card-description" class="text-sm text-muted-foreground">El conector evita filas crudas cuando puede proyectar, filtrar y agrupar directamente en SQL o HTTP.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden py-4 text-sm r
1ing-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl bg-primary text-primary-foreground"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkles" aria-hidden="true"><path d="M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z"></path><path d="M20 2v4"></path><path d="M22 4h-4"></path><circle cx="4" cy="20" r="2"></circle></svg><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Listo para vender</div><div data-slot="card-description" class="text-sm text-primary-foreground/75">Portal, migraciones, conector Apps Script, Bold y validacion managed ya publicados en produccion.</div></div></div></div></div></section><section class="border-b bg-muted/40"><div class="mx-auto max-w-7xl px-4 py-20 sm:px-6"><div class="max-w-2xl"><h2 class="text-3xl font-semibold tracking-normal sm:text-5xl">Seguridad disenada para reportes compartidos.</h2><p class="mt-5 text-base leading-7 text-muted-foreground">El link del dashboard no contiene passwords, API keys ni secretos de infraestructura. Solo viaja el token del tenant.</p></div><div class="mt-10 grid gap-4 lg:grid-cols-4"><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl relative rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex items-center justify-between gap-3"><div class="flex size-10 items-center justify-center rounded-lg bg-background text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-key-round" aria-hidden="true"><path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"></path><circle cx="16.5" cy="7.5" r=".5" fill="currentColor"></circle></svg></div><span data-slot="badge" data-variant="outline" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground">1</span></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Tenant token</div><div data-slot="card-description" class="text-sm text-muted-foreground">El cliente abre Looker con un parametro por URL.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground
1/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl relative rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex items-center justify-between gap-3"><div class="flex size-10 items-center justify-center rounded-lg bg-background text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg></div><span data-slot="badge" data-variant="outline" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground">2</span></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Control plane</div><div data-slot="card-description" class="text-sm text-muted-foreground">El portal valida tenant, perfil, suscripcion y scopes.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl relative rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex items-center justify-between gap-3"><div class="flex size-10 items-center justify-center rounded-lg bg-background text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lock-keyhole" aria-hidden="true"><circle cx="12" cy="16" r="1"></circle><rect x="3" y="10" width="18" height="12" rx="2"></rect><path d="M7 10V7a5 5 0 0 1 10 0v3"></path></svg></div><span data-slot="badge" data-variant="outline" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground">3</span></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Managed profile</div><div data-slot="card-description" class="text-sm text-muted-foreground">Las credenciales cifradas solo vuelven al conector autorizado.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground
1/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl relative rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex items-center justify-between gap-3"><div class="flex size-10 items-center justify-center rounded-lg bg-background text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-workflow" aria-hidden="true"><rect width="8" height="8" x="3" y="3" rx="2"></rect><path d="M7 11v4a2 2 0 0 0 2 2h4"></path><rect width="8" height="8" x="13" y="13" rx="2"></rect></svg></div><span data-slot="badge" data-variant="outline" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground">4</span></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">SQL pushdown</div><div data-slot="card-description" class="text-sm text-muted-foreground">Campos, filtros, fechas y agregaciones bajan hasta la fuente.</div></div></div></div></div></section><section id="sources" class="border-b"><div class="mx-auto grid max-w-7xl gap-10 px-4 py-20 sm:px-6 lg:grid-cols-[1fr_1fr] lg:items-center"><div class="min-w-0"><h2 class="text-3xl font-semibold tracking-normal sm:text-5xl">Conecta la data donde ya vive.</h2><p class="mt-5 max-w-xl text-base leading-7 text-muted-foreground">El producto no intenta copiar toda la informacion a tu backend. La consulta pesada queda en PostgreSQL, BigQuery, APIs o bases del cliente, con pushdown cuando es seguro.</p><div class="mt-7 flex flex-wrap gap-2"><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">PostgreSQL</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">BigQuery</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">MySQL</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">SQL Server</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">Oracle</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">HTTP APIs</span><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1">CSV</span></div></div><div class="min-w-0 overflow-hidden rounded-2xl border bg-card p-4 shadow-sm"><div class="min-w-0 rounded-xl border bg-background p-4"><div class="flex min-w-0 items-center justify-between gap-4 border-b pb-4"><div class="min-w-0"><p class="font-medium">Consulta optimizada</p><p class="text-sm text-muted-foreground">
1Looker pide day + revenue</p></div><span data-slot="badge" data-variant="default" class="group/badge inline-flex h-5 w-fit items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-primary text-primary-foreground [a]:hover:bg-primary/80 shrink-0">filtersApplied=true</span></div><div class="mt-4 grid min-w-0 gap-3 font-mono text-xs"><div class="flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2"><span class="size-2 shrink-0 rounded-full bg-primary"></span><span class="min-w-0 truncate text-muted-foreground">select day, sum(revenue) revenue</span></div><div class="flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2"><span class="size-2 shrink-0 rounded-full bg-chart-2"></span><span class="min-w-0 truncate text-muted-foreground">from analytics_daily</span></div><div class="flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2"><span class="size-2 shrink-0 rounded-full bg-chart-3"></span><span class="min-w-0 truncate text-muted-foreground">where tenant_id = :tenant_id</span></div><div class="flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2"><span class="size-2 shrink-0 rounded-full bg-chart-4"></span><span class="min-w-0 truncate text-muted-foreground">and day between :start_date and :end_date</span></div><div class="flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2"><span class="size-2 shrink-0 rounded-full bg-chart-5"></span><span class="min-w-0 truncate text-muted-foreground">group by day order by day</span></div></div><div class="mt-5 grid grid-cols-3 gap-2"><div class="rounded-lg border bg-card p-3"><p class="text-xl font-semibold text-muted-foreground">50k</p><p class="mt-1 text-xs text-muted-foreground">filas crudas</p></div><div class="rounded-lg border bg-card p-3"><p class="text-xl font-semibold">7</p><p class="mt-1 text-xs text-muted-foreground">respuesta</p></div><div class="rounded-lg border bg-card p-3"><p class="text-xl font-semibold"><1s</p><p class="mt-1 text-xs text-muted-foreground">tiempo</p></div></div></div></div></div></section><section id="pricing" class="border-b bg-muted/30"><div class="mx-auto max-w-7xl px-4 py-20 sm:px-6"><div class="flex flex-col gap-5 lg:flex-row lg:items-end lg:justify-between"><div class="max-w-2xl"><h2 class="text-3xl font-semibold tracking-normal sm:text-5xl">Planes para vender desde el primer piloto.</h2><p class="mt-5 text-base leading-7 text-muted-foreground">Cada plan controla limites comerciales del SaaS: tenants, perfiles managed, validaciones mensuales, soporte y conectores avanzados. El checkout ya queda ligado a un planId.</p></div><div class="flex items-center gap-2 text-sm text-muted-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clock3 lucide-clock-3" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 6v6h4"></path></svg><span>Bold production + suscripcion activa antes de consultar</span></div></div><div class="mt-10 grid gap-4 lg:grid-cols-3"><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex items-start justify-between gap-4"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg></div><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80">Piloto</span></div><div><div data-slot="card-title" class="font-heading font-medium group-data-[size=sm]/card:text-sm text-2xl">Starter</div><div data-slot="card-description" class="text-sm text-muted-foreground">Para validar el producto con pocos clientes y un reporte principal.</div></div><div class="flex items-end gap-1"><span class="text-3xl font-semibold tracking-normal">COP 9.900</span><span class="pb-1 text-sm text-muted-foreground">/mes</span></div></div>
1<div data-slot="card-content" class="px-4 group-data-[size=sm]/card:px-3 grid gap-5"><div class="grid gap-2"><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>3 tenants</span></div><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>2 perfiles managed</span></div><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>10k validaciones/mes</span></div><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>Soporte asincrono</span></div></div><div class="grid gap-2 border-t pt-4"><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Tokens por URL</span></div><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>PostgreSQL, HTTP y CSV</span></div><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Secretos cifrados</span></div><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Bold activo</span></div></div></div><div data-slot="card-footer" class="flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3"><a data-slot="button" data-variant="outline" data-size="default" class="group/button inline-flex shrink-0 items-center justify-center rounded-lg border bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full" href="/signup">Activar <!-- -->Starter<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true" data-icon="inline-end"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground
1/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl border-primary shadow-lg shadow-primary/10"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex items-start justify-between gap-4"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-gauge" aria-hidden="true"><path d="m12 14 4-4"></path><path d="M3.34 19a10 10 0 1 1 17.32 0"></path></svg></div><span data-slot="badge" data-variant="default" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-primary text-primary-foreground [a]:hover:bg-primary/80">Recomendado</span></div><div><div data-slot="card-title" class="font-heading font-medium group-data-[size=sm]/card:text-sm text-2xl">Growth</div><div data-slot="card-description" class="text-sm text-muted-foreground">Para vender dashboards multiempresa con varias fuentes y monitoreo.</div></div><div class="flex items-end gap-1"><span class="text-3xl font-semibold tracking-normal">COP 49.900</span><span class="pb-1 text-sm text-muted-foreground">/mes</span></div></div><div data-slot="card-content" class="px-4 group-data-[size=sm]/card:px-3 grid gap-5"><div class="grid gap-2"><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>25 tenants</span></div><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>10 perfiles managed</span></div><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>100k validaciones/mes</span></div><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>Soporte prioritario</span></div></div><div class="grid gap-2 border-t pt-4"><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>SQL pushdown</span></div><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Date range automatico</span></div><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>BigQuery standard</span></div><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Auditoria de eventos</span></div></div></div><div data-slot="card-footer" class="flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3"><a data-slot="button" data-variant="default" data-size="default" class="group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-
1px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground [a]:hover:bg-primary/80 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full" href="/signup">Activar <!-- -->Growth<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true" data-icon="inline-end"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex items-start justify-between gap-4"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-building2 lucide-building-2" aria-hidden="true"><path d="M10 12h4"></path><path d="M10 8h4"></path><path d="M14 21v-3a2 2 0 0 0-4 0v3"></path><path d="M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2"></path><path d="M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16"></path></svg></div><span data-slot="badge" data-variant="secondary" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80">Privado</span></div><div><div data-slot="card-title" class="font-heading font-medium group-data-[size=sm]/card:text-sm text-2xl">Scale</div><div data-slot="card-description" class="text-sm text-muted-foreground">Para despliegues privados, conectores dedicados y clientes con SLA.</div></div><div class="flex items-end gap-1"><span class="text-3xl font-semibold tracking-normal">A medida</span><span class="pb-1 text-sm text-muted-foreground"></span></div></div><div data-slot="card-content" class="px-4 group-data-[size=sm]/card:px-3 grid gap-5"><div class="grid gap-2"><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>Tenants a medida</span></div><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>Perfiles ilimitables</span></div><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>SLA y soporte directo</span></div><div class="flex items-center gap-2 text-sm"><span class="size-1.5 rounded-full bg-primary"></span><span>Conector privado</span></div></div><div class="grid gap-2 border-t pt-4"><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>BigQuery Advanced</span></div><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Ambientes separados</span></div><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Hardening de seguridad</span></div><div class="flex items-center gap-3 text-sm"><span class="flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>Roadmap de integraciones</span></div></div></div><div data-slot="card-footer" class="flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3"><a data-slot="button" data-variant="outline" data-size="default" class="group/button inline-flex shrink-0 items-center justify-center rounded-lg border bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-
1px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full" href="/signup">Activar <!-- -->Scale<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true" data-icon="inline-end"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div></div></div></section><section id="access" class="border-b bg-background"><div class="mx-auto grid max-w-7xl gap-10 px-4 py-20 sm:px-6 lg:grid-cols-[0.85fr_1.15fr] lg:items-start"><div><h2 class="text-3xl font-semibold tracking-normal sm:text-5xl">Permisos del conector sin friccion para el cliente.</h2><p class="mt-5 max-w-xl text-base leading-7 text-muted-foreground">El conector usa getAuthType: NONE para no meter otro login en Looker Studio. La autorizacion real vive en Tenant BI y se valida antes de getSchema y getData.</p><div class="mt-6 flex flex-wrap gap-2"><span data-slot="badge" data-variant="outline" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground">tenantToken override only</span><span data-slot="badge" data-variant="outline" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground">x-service-token privado</span><span data-slot="badge" data-variant="outline" class="group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground">admin diagnostics allowlist</span></div></div><div class="grid gap-4 sm:grid-cols-2"><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Usuario del portal</div><div data-slot="card-description" class="text-sm text-muted-foreground">Better Auth protege dashboard, tenants, perfiles, billing y emision de tokens.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground
1/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Permiso del conector</div><div data-slot="card-description" class="text-sm text-muted-foreground">Looker no pide login extra; el acceso lo decide tenantToken + perfil + suscripcion.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-lock-keyhole" aria-hidden="true"><circle cx="12" cy="16" r="1"></circle><rect x="3" y="10" width="18" height="12" rx="2"></rect><path d="M7 10V7a5 5 0 0 1 10 0v3"></path></svg></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Canal servidor a servidor</div><div data-slot="card-description" class="text-sm text-muted-foreground">El connectionProfile cifrado solo se entrega si llega x-service-token valido.</div></div></div><div data-slot="card" data-size="default" class="group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl"><div data-slot="card-header" class="group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3"><div class="flex size-10 items-center justify-center rounded-lg bg-muted text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-credit-card" aria-hidden="true"><rect width="20" height="14" x="2" y="5" rx="2"></rect><line x1="2" x2="22" y1="10" y2="10"></line></svg></div><div data-slot="card-title" class="font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm">Billing activo</div><div data-slot="card-description" class="text-sm text-muted-foreground">Si la suscripcion esta inactiva, el token o perfil queda bloqueado antes de consultar.</div></div></div></div></div></section><footer class="bg-muted/30"><div class="mx-auto flex max-w-7xl flex-col gap-4 px-4 py-8 text-sm text-muted-foreground sm:flex-row sm:items-center sm:justify-between sm:px-6"><p>Tenant BI - seguridad, soporte y cumplimiento para reportes multi-tenant.</p><nav class="flex flex-wrap gap-4"><a class="underline underline-offset-4" href="/legal/privacy">Privacidad</a><a class="underline underline-offset-4" href="/legal/terms">Terminos</a><a class="underline underline-offset-4" href="/legal/dpa">DPA</a><a class="underline underline-offset-4" href="mailto:[email protected]">Soporte</a></nav></div></footer></main><!--$--><!--/$-->
1<section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section>
1<script src="/_next/static/chunks/0c0kht~qdlx3k.js" id="_R_" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[65986,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\"],\"TooltipProvider\"]\n3:I[12942,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\"],\"default\"]\n4:I[7770,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\"],\"default\"]\n5:I[71957,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\"],\"Toaster\"]\n6:I[12420,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\",\"/_next/static/chunks/11cgf11vlae8d.js\"],\"MarketingEventTracker\"]\n7:I[68573,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\",\"/_next/static/chunks/11cgf11vlae8d.js\"],\"\"]\n8:I[53534,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\",\"/_next/static/chunks/11cgf11vlae8d.js\"],\"default\"]\n16:I[77818,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/066jf0nk75nic.css\",\"style\"]\n:HL[\"/_next/static/chunks/0lt87fraue.2o.css\",\"style\"]\n:HL[\"/_next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script>
1<script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/066jf0nk75nic.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0lt87fraue.2o.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0bwljmcumcp~p.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/02g_pyjav1flq.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/044k0k03n2rk5.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/_next/static/chunks/15mdi~f-83c55.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"es\",\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable h-full antialiased\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-full flex flex-col\",\"children\":[\"$\",\"$L2\",null,{\"children\":[[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L5\",null,{}]]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"main\",null,{\"className\":\"min-h-svh bg-background text-foreground\",\"children\":[[\"$\",\"$L6\",null,{\"page\":\"landing\"}],[\"$\",\"header\",null,{\"className\":\"sticky top-0 z-20 border-b bg-background/90 backdrop-blur\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto flex h-16 w-full max-w-7xl items-center justify-between px-4 sm:px-6\",\"children\":[[\"$\",\"$L7\",null,{\"href\":\"/\",\"className\":\"flex items-center gap-3 font-semibold\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-9 items-center justify-center rounded-lg bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z\",\"key\":\"goz73y\"}],[\"path\",{\"d\":\"m2 22 3-3\",\"key\":\"19mgm9\"}],[\"path\",{\"d\":\"M7.5 13.5 10 11\",\"key\":\"7xgeeb\"}],[\"path\",{\"d\":\"M10.5 16.5 13 14\",\"key\":\"10btkg\"}],[\"path\",{\"d\":\"m18 3-4 4h6l-4 4\",\"key\":\"16psg9\"}]],\"className\":\"lucide-plug-zap\"}]}],[\"$\",\"span\",null,{\"children\":\"Tenant BI\"}]]}],[\"$\",\"nav\",null,{\"className\":\"hidden items-center gap-7 text-sm text-muted-foreground md:flex\",\"children\":[[\"$\",\"$L7\",null,{\"className\":\"transition-colors hover:text-foreground\",\"href\":\"#platform\",\"children\":\"Plataforma\"}],[\"$\",\"$L7\",null,{\"className\":\"transition-colors hover:text-foreground\",\"href\":\"#demo\",\"children\":\"Demo\"}],[\"$\",\"$L7\",null,{\"className\":\"transition-colors hover:text-foreground\",\"href\":\"#sources\",\"children\":\"Fuentes\"}],[\"$\",\"$L7\",null,{\"className\":\"transition-colors hover:text-foreground\",\"href\":\"#pricing\",\"children\":\"Planes\"}],[\"$\",\"$L7\",null,{\"className\":\"transition-colors hover:text-foreground\",\"href\":\"#access\",\"children\":\"Permisos\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"$L7\",null,{\"href\":\"/login\",\"children\":\"Entrar\",\"data-slot\":\"button\",\"data-variant\":\"ghost\",\"data-size\":\"sm\",\"className\":\"group/button shrink-0 items-center justify-center border border-transparent bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-
1px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [\u0026_svg:not([class*='size-'])]:size-3.5 hidden sm:inline-flex\",\"ref\":null}],\"$L9\"]}]]}]}],\"$La\",\"$Lb\",\"$Lc\",\"$Ld\",\"$Le\",\"$Lf\",\"$L10\",\"$L11\",\"$L12\"]}],[\"$L13\"],\"$L14\"]}],{},null,false,null]},null,false,null],\"$L15\",false]],\"m\":\"$undefined\",\"G\":[\"$16\",[\"$L17\",\"$L18\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"XYGBtlJNU0gIDPG1foyRK\"}\n"])</script>
1<script>self.__next_f.push([1,"1b:I[67473,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\",\"/_next/static/chunks/11cgf11vlae8d.js\"],\"DataStudioTenantDemo\"]\n3a:I[69478,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\"],\"OutletBoundary\"]\n3b:\"$Sreact.suspense\"\n3d:I[69478,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\"],\"ViewportBoundary\"]\n3f:I[69478,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\"],\"MetadataBoundary\"]\n9:[\"$\",\"$L7\",null,{\"href\":\"/signup?utm_source=tenant-bi-site\u0026utm_medium=owned\u0026utm_campaign=looker-multitenant-template\",\"data-marketing-event\":\"marketing.signup_click\",\"data-marketing-label\":\"nav\",\"children\":[\"Crear cuenta\",[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M5 12h14\",\"key\":\"1ays0h\"}],[\"path\",{\"d\":\"m12 5 7 7-7 7\",\"key\":\"xquz4c\"}]],\"className\":\"lucide-arrow-right\",\"data-icon\":\"inline-end\"}]],\"data-slot\":\"button\",\"data-variant\":\"default\",\"data-size\":\"sm\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center border border-transparent bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 bg-primary text-primary-foreground [a]:hover:bg-primary/80 h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [\u0026_svg:not([class*='size-'])]:size-3.5\",\"ref\":null}]\n"])</script>
1<script>self.__next_f.push([1,"a:[\"$\",\"section\",null,{\"className\":\"relative isolate overflow-hidden border-b\",\"children\":[[\"$\",\"div\",null,{\"aria-hidden\":true,\"className\":\"absolute inset-0 -z-10 overflow-hidden\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute inset-0 bg-[linear-gradient(180deg,var(--background)_0%,var(--muted)_100%)]\"}],[\"$\",\"div\",null,{\"className\":\"absolute inset-x-0 top-0 h-px bg-border\"}],[\"$\",\"div\",null,{\"className\":\"absolute right-[-8rem] top-10 hidden w-[56rem] rotate-[-8deg] rounded-2xl border bg-card/90 p-4 shadow-2xl shadow-foreground/10 backdrop-blur md:block\",\"children\":[\"$\",\"div\",null,{\"className\":\"rounded-xl border bg-background\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex h-12 items-center justify-between border-b px-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-3 rounded-full bg-chart-4\"}],[\"$\",\"span\",null,{\"className\":\"size-3 rounded-full bg-chart-3\"}],[\"$\",\"span\",null,{\"className\":\"size-3 rounded-full bg-primary\"}]]}],[\"$\",\"div\",null,{\"className\":\"h-2 w-40 rounded-full bg-muted\"}]]}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-[13rem_1fr]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"border-r p-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-5 h-9 rounded-lg bg-primary\"}],[\"$\",\"div\",null,{\"className\":\"grid gap-3\",\"children\":[[\"$\",\"div\",\"Tenants\",{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-7 rounded-md bg-chart-2\"}],[\"$\",\"span\",null,{\"className\":\"h-2 flex-1 rounded-full bg-muted\"}]]}],[\"$\",\"div\",\"Profiles\",{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-7 rounded-md bg-muted\"}],[\"$\",\"span\",null,{\"className\":\"h-2 flex-1 rounded-full bg-muted\"}]]}],[\"$\",\"div\",\"Tokens\",{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-7 rounded-md bg-muted\"}],[\"$\",\"span\",null,{\"className\":\"h-2 flex-1 rounded-full bg-muted\"}]]}],[\"$\",\"div\",\"Billing\",{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-7 rounded-md bg-muted\"}],[\"$\",\"span\",null,{\"className\":\"h-2 flex-1 rounded-full bg-muted\"}]]}],[\"$\",\"div\",\"Health\",{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-7 rounded-md bg-muted\"}],[\"$\",\"span\",null,{\"className\":\"h-2 flex-1 rounded-full bg-muted\"}]]}]]}]]}],[\"$\",\"div\",null,{\"className\":\"p-5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"grid grid-cols-4 gap-3\",\"children\":[[\"$\",\"div\",\"72\",{\"className\":\"rounded-lg border bg-card p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"h-2 w-16 rounded-full bg-muted\"}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex h-24 items-end gap-1\",\"children\":[[\"$\",\"span\",\"0\",{\"className\":\"w-full rounded-md bg-primary\",\"style\":{\"height\":\"72%\"}}],[\"$\",\"span\",\"1\",{\"className\":\"w-full rounded-md bg-primary\",\"style\":{\"height\":\"54%\"}}],[\"$\",\"span\",\"2\",{\"className\":\"w-full rounded-md bg-primary\",\"style\":{\"height\":\"44%\"}}]]}]]}],[\"$\",\"div\",\"56\",{\"className\":\"rounded-lg border bg-card p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"h-2 w-16 rounded-full bg-muted\"}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex h-24 items-end gap-1\",\"children\":[[\"$\",\"span\",\"0\",{\"className\":\"w-full rounded-md bg-chart-2\",\"style\":{\"height\":\"56%\"}}],[\"$\",\"span\",\"1\",{\"className\":\"w-full rounded-md bg-chart-2\",\"style\":{\"height\":\"38%\"}}],[\"$\",\"span\",\"2\",{\"className\":\"w-full rounded-md bg-chart-2\",\"style\":{\"height\":\"28%\"}}]]}]]}],[\"$\",\"div\",\"84\",{\"className\":\"rounded-lg border bg-card p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"h-2 w-16 rounded-full bg-muted\"}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex h-24 items-end gap-1\",\"children\":[[\"$\",\"span\",\"0\",{\"className\":\"w-full rounded-md bg-chart-3\",\"style\":{\"height\"
1:\"84%\"}}],[\"$\",\"span\",\"1\",{\"className\":\"w-full rounded-md bg-chart-3\",\"style\":{\"height\":\"66%\"}}],[\"$\",\"span\",\"2\",{\"className\":\"w-full rounded-md bg-chart-3\",\"style\":{\"height\":\"56%\"}}]]}]]}],[\"$\",\"div\",\"41\",{\"className\":\"rounded-lg border bg-card p-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"h-2 w-16 rounded-full bg-muted\"}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex h-24 items-end gap-1\",\"children\":[[\"$\",\"span\",\"0\",{\"className\":\"w-full rounded-md bg-chart-4\",\"style\":{\"height\":\"41%\"}}],[\"$\",\"span\",\"1\",{\"className\":\"w-full rounded-md bg-chart-4\",\"style\":{\"height\":\"23%\"}}],[\"$\",\"span\",\"2\",{\"className\":\"w-full rounded-md bg-chart-4\",\"style\":{\"height\":\"22%\"}}]]}]]}]]}],\"$L19\"]}]]}]]}]}]]}],\"$L1a\"]}]\n"])</script>
1<script>self.__next_f.push([1,"b:[\"$\",\"$L1b\",null,{\"baseReportUrl\":\"$undefined\"}]\n"])</script>
1<script>self.__next_f.push([1,"c:[\"$\",\"section\",null,{\"id\":\"template\",\"className\":\"border-b bg-background\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto grid max-w-7xl gap-10 px-4 py-20 sm:px-6 lg:grid-cols-[0.82fr_1.18fr] lg:items-start\",\"children\":[[\"$\",\"div\",null,{\"className\":\"lg:sticky lg:top-24\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"max-w-2xl text-3xl font-semibold leading-tight tracking-normal sm:text-5xl\",\"children\":\"Template comercial listo para anuncios, demos y copias por cliente.\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 max-w-xl text-base leading-7 text-muted-foreground\",\"children\":\"El flujo de venta arranca mostrando un Looker Studio real: el prospecto prueba tenant activo, token vencido y despues crea su propio reporte desde el template reusable.\"}],[\"$\",\"div\",null,{\"className\":\"mt-6 flex flex-col gap-3 sm:flex-row\",\"children\":[[\"$\",\"$L7\",null,{\"href\":\"/demo\",\"data-marketing-event\":\"marketing.demo_open\",\"data-marketing-label\":\"template-section\",\"children\":[\"Probar demo con mi cliente\",[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$9:props:children:1:props:iconNode\",\"className\":\"lucide-arrow-right\",\"data-icon\":\"inline-end\"}]],\"data-slot\":\"button\",\"data-variant\":\"default\",\"data-size\":\"default\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground [a]:hover:bg-primary/80 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\"ref\":null}],[\"$\",\"$L7\",null,{\"href\":\"/dashboard/templates\",\"data-marketing-event\":\"marketing.template_console_open\",\"data-marketing-label\":\"template-section\",\"children\":[\"Ver template en Looker Studio\",[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M15 3h6v6\",\"key\":\"1q9fwt\"}],[\"path\",{\"d\":\"M10 14 21 3\",\"key\":\"gplh6r\"}],[\"path\",{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\",\"key\":\"a6xqqp\"}]],\"className\":\"lucide-external-link\",\"data-icon\":\"inline-end\"}]],\"data-slot\":\"button\",\"data-variant\":\"outline\",\"data-size\":\"default\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\"ref\":null}]]}],[\"$\",\"div\",null,{\"className\":\"mt-8 grid gap-3\",\"children\":[[\"$\",\"div\",\"Dashboards por cliente sin duplicar reportes.\",{\"className\":\"flex items-center gap-3 rounded-xl border bg-muted/30 p-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-7 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":\"$L1c\"}],\"$L1d\"]}],\"$L1e\",\"$L1f\"]}]]}],\"$L20\"]}]}]\n"])</script>
1<script>self.__next_f.push([1,"d:[\"$\",\"section\",null,{\"id\":\"platform\",\"className\":\"border-b\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto grid max-w-7xl gap-10 px-4 py-20 sm:px-6 lg:grid-cols-[0.75fr_1.25fr] lg:items-start\",\"children\":[[\"$\",\"div\",null,{\"className\":\"lg:sticky lg:top-24\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"max-w-xl text-3xl font-semibold leading-tight tracking-normal sm:text-5xl\",\"children\":\"Un reporte, muchos clientes, cero fugas.\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 max-w-lg text-base leading-7 text-muted-foreground\",\"children\":\"Tenant BI convierte Looker Studio en una capa comercial para SaaS: cada token decide que tenant, perfil y suscripcion puede consultar.\"}]]}],[\"$\",\"div\",null,{\"className\":\"grid gap-4 sm:grid-cols-2\",\"children\":[[[\"$\",\"div\",\"Looker multi-tenant sin Enterprise\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M10 18v-7\",\"key\":\"wt116b\"}],[\"path\",{\"d\":\"M11.12 2.198a2 2 0 0 1 1.76.006l7.866 3.847c.476.233.31.949-.22.949H3.474c-.53 0-.695-.716-.22-.949z\",\"key\":\"1m329m\"}],[\"path\",{\"d\":\"M14 18v-7\",\"key\":\"vav6t3\"}],[\"path\",{\"d\":\"M18 18v-7\",\"key\":\"aexdmj\"}],[\"path\",{\"d\":\"M3 22h18\",\"key\":\"8prr45\"}],[\"path\",{\"d\":\"M6 18v-7\",\"key\":\"1ivflk\"}]],\"className\":\"lucide-landmark\"}]}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Looker multi-tenant sin Enterprise\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Publica un reporte y segmenta cada vista por cliente sin duplicar dashboards ni exponer credenciales.\"}]]}]}],[\"$\",\"div\",\"Perfiles gestionados por SaaS\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"ellipse\",{\"cx\":\"12\",\"cy\":\"5\",\"rx\":\"9\",\"ry\":\"3\",\"key\":\"msslwz\"}],[\"path\",{\"d\":\"M3 5V19A9 3 0 0 0 21 19V5\",\"key\":\"1wlel7\"}],[\"path\",{\"d\":\"M3 12A9 3 0 0 0 21 12\",\"key\":\"mv7ke4\"}]],\"className\":\"lucide-database\"}]}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Perfiles gestionados por SaaS\"}],\"$L21\"]}]}],\"$L22\"],\"$L23\"]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"e:[\"$\",\"section\",null,{\"className\":\"border-b bg-muted/40\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-7xl px-4 py-20 sm:px-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-2xl\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-3xl font-semibold tracking-normal sm:text-5xl\",\"children\":\"Seguridad disenada para reportes compartidos.\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-base leading-7 text-muted-foreground\",\"children\":\"El link del dashboard no contiene passwords, API keys ni secretos de infraestructura. Solo viaja el token del tenant.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-10 grid gap-4 lg:grid-cols-4\",\"children\":[[\"$\",\"div\",\"Tenant token\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl relative rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between gap-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-background text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z\",\"key\":\"1s6t7t\"}],[\"circle\",{\"cx\":\"16.5\",\"cy\":\"7.5\",\"r\":\".5\",\"fill\":\"currentColor\",\"key\":\"w0ekpg\"}]],\"className\":\"lucide-key-round\"}]}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"outline\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\"children\":1}]]}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Tenant token\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"El cliente abre Looker con un parametro por URL.\"}]]}]}],[\"$\",\"div\",\"Control plane\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl relative rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[\"$L24\",\"$L25\",\"$L26\"]}]}],\"$L27\",\"$L28\"]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"f:[\"$\",\"section\",null,{\"id\":\"sources\",\"className\":\"border-b\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto grid max-w-7xl gap-10 px-4 py-20 sm:px-6 lg:grid-cols-[1fr_1fr] lg:items-center\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-3xl font-semibold tracking-normal sm:text-5xl\",\"children\":\"Conecta la data donde ya vive.\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 max-w-xl text-base leading-7 text-muted-foreground\",\"children\":\"El producto no intenta copiar toda la informacion a tu backend. La consulta pesada queda en PostgreSQL, BigQuery, APIs o bases del cliente, con pushdown cuando es seguro.\"}],[\"$\",\"div\",null,{\"className\":\"mt-7 flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"PostgreSQL\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"PostgreSQL\"}],[\"$\",\"span\",\"BigQuery\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"BigQuery\"}],[\"$\",\"span\",\"MySQL\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"MySQL\"}],[\"$\",\"span\",\"SQL Server\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"SQL Server\"}],[\"$\",\"span\",\"Oracle\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"Oracle\"}],\"$L29\",\"$L2a\"]}]]}],\"$L2b\"]}]}]\n"])</script>
1<script>self.__next_f.push([1,"10:[\"$\",\"section\",null,{\"id\":\"pricing\",\"className\":\"border-b bg-muted/30\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-7xl px-4 py-20 sm:px-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-5 lg:flex-row lg:items-end lg:justify-between\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-2xl\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-3xl font-semibold tracking-normal sm:text-5xl\",\"children\":\"Planes para vender desde el primer piloto.\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-base leading-7 text-muted-foreground\",\"children\":\"Cada plan controla limites comerciales del SaaS: tenants, perfiles managed, validaciones mensuales, soporte y conectores avanzados. El checkout ya queda ligado a un planId.\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 text-sm text-muted-foreground\",\"children\":[[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"circle\",{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\",\"key\":\"1mglay\"}],[\"path\",{\"d\":\"M12 6v6h4\",\"key\":\"135r8i\"}]],\"className\":\"lucide-clock3 lucide-clock-3\"}],[\"$\",\"span\",null,{\"children\":\"Bold production + suscripcion activa antes de consultar\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-10 grid gap-4 lg:grid-cols-3\",\"children\":[[\"$\",\"div\",\"starter\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\",\"key\":\"1yyitq\"}],[\"path\",{\"d\":\"M16 3.128a4 4 0 0 1 0 7.744\",\"key\":\"16gr8j\"}],[\"path\",{\"d\":\"M22 21v-2a4 4 0 0 0-3-3.87\",\"key\":\"kshegd\"}],[\"circle\",{\"cx\":\"9\",\"cy\":\"7\",\"r\":\"4\",\"key\":\"nufk8\"}]],\"className\":\"lucide-users\"}]}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\"children\":\"Piloto\"}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading font-medium group-data-[size=sm]/card:text-sm text-2xl\",\"children\":\"Starter\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Para validar el producto con pocos clientes y un reporte principal.\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-end gap-1\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-3xl font-semibold tracking-normal\",\"children\":\"COP 9.900\"}],[\"$\",\"span\",null,{\"className\":\"pb-1 text-sm text-muted-foreground\",\"children\":\"/mes\"}]]}]]}],[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"px-4 group-data-[size=sm]/card:px-3 grid gap-5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"grid gap-2\",\"children\":[\"$L2c\",\"$L2d\",\"$L2e\",\"$L2f\"]}],\"$L30\"]}],\"$L31\"]}],\"$L32\",\"$L33\"]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"11:[\"$\",\"section\",null,{\"id\":\"access\",\"className\":\"border-b bg-background\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto grid max-w-7xl gap-10 px-4 py-20 sm:px-6 lg:grid-cols-[0.85fr_1.15fr] lg:items-start\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-3xl font-semibold tracking-normal sm:text-5xl\",\"children\":\"Permisos del conector sin friccion para el cliente.\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 max-w-xl text-base leading-7 text-muted-foreground\",\"children\":\"El conector usa getAuthType: NONE para no meter otro login en Looker Studio. La autorizacion real vive en Tenant BI y se valida antes de getSchema y getData.\"}],[\"$\",\"div\",null,{\"className\":\"mt-6 flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"outline\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\"children\":\"tenantToken override only\"}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"outline\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\"children\":\"x-service-token privado\"}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"outline\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\"children\":\"admin diagnostics allowlist\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"grid gap-4 sm:grid-cols-2\",\"children\":[[\"$\",\"div\",\"Usuario del portal\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[\"$L34\",\"$L35\",\"$L36\"]}]}],\"$L37\",\"$L38\",\"$L39\"]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"12:[\"$\",\"footer\",null,{\"className\":\"bg-muted/30\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto flex max-w-7xl flex-col gap-4 px-4 py-8 text-sm text-muted-foreground sm:flex-row sm:items-center sm:justify-between sm:px-6\",\"children\":[[\"$\",\"p\",null,{\"children\":\"Tenant BI - seguridad, soporte y cumplimiento para reportes multi-tenant.\"}],[\"$\",\"nav\",null,{\"className\":\"flex flex-wrap gap-4\",\"children\":[[\"$\",\"$L7\",null,{\"className\":\"underline underline-offset-4\",\"href\":\"/legal/privacy\",\"children\":\"Privacidad\"}],[\"$\",\"$L7\",null,{\"className\":\"underline underline-offset-4\",\"href\":\"/legal/terms\",\"children\":\"Terminos\"}],[\"$\",\"$L7\",null,{\"className\":\"underline underline-offset-4\",\"href\":\"/legal/dpa\",\"children\":\"DPA\"}],[\"$\",\"a\",null,{\"className\":\"underline underline-offset-4\",\"href\":\"mailto:[email protected]\",\"children\":\"Soporte\"}]]}]]}]}]\n13:[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/11cgf11vlae8d.js\",\"async\":true,\"nonce\":\"$undefined\"}]\n14:[\"$\",\"$L3a\",null,{\"children\":[\"$\",\"$3b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@3c\"}]}]\n15:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L3d\",null,{\"children\":\"$L3e\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L3f\",null,{\"children\":[\"$\",\"$3b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L40\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\n17:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/066jf0nk75nic.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n18:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0lt87fraue.2o.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script>
1<script>self.__next_f.push([1,"44:I[86989,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\",\"/_next/static/chunks/11cgf11vlae8d.js\"],\"Image\"]\n"])</script>
1<script>self.__next_f.push([1,"19:[\"$\",\"div\",null,{\"className\":\"mt-4 rounded-lg border bg-card\",\"children\":[[\"$\",\"div\",\"acme-co\",{\"className\":\"grid grid-cols-[1fr_8rem_7rem] gap-4 border-b px-4 py-3 last:border-b-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-xs\",\"children\":\"acme-co\"}],[\"$\",\"span\",null,{\"className\":\"h-2 rounded-full bg-muted\"}],[\"$\",\"span\",null,{\"className\":\"h-2 rounded-full bg-primary\"}]]}],[\"$\",\"div\",\"nimbus-retail\",{\"className\":\"grid grid-cols-[1fr_8rem_7rem] gap-4 border-b px-4 py-3 last:border-b-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-xs\",\"children\":\"nimbus-retail\"}],[\"$\",\"span\",null,{\"className\":\"h-2 rounded-full bg-muted\"}],[\"$\",\"span\",null,{\"className\":\"h-2 rounded-full bg-chart-2\"}]]}],[\"$\",\"div\",\"atlas-health\",{\"className\":\"grid grid-cols-[1fr_8rem_7rem] gap-4 border-b px-4 py-3 last:border-b-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-xs\",\"children\":\"atlas-health\"}],[\"$\",\"span\",null,{\"className\":\"h-2 rounded-full bg-muted\"}],[\"$\",\"span\",null,{\"className\":\"h-2 rounded-full bg-primary\"}]]}],[\"$\",\"div\",\"northwind\",{\"className\":\"grid grid-cols-[1fr_8rem_7rem] gap-4 border-b px-4 py-3 last:border-b-0\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-xs\",\"children\":\"northwind\"}],[\"$\",\"span\",null,{\"className\":\"h-2 rounded-full bg-muted\"}],[\"$\",\"span\",null,{\"className\":\"h-2 rounded-full bg-chart-2\"}]]}]]}]\n"])</script>
1<script>self.__next_f.push([1,"1a:[\"$\",\"div\",null,{\"className\":\"mx-auto flex min-h-[calc(100svh-4rem)] max-w-7xl flex-col justify-end px-4 pb-8 pt-20 sm:px-6 lg:pb-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-3xl\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"max-w-4xl text-4xl font-semibold leading-none tracking-normal text-balance sm:text-6xl lg:text-7xl\",\"children\":\"Dashboards por cliente en Looker Studio\"}],[\"$\",\"p\",null,{\"className\":\"mt-6 max-w-2xl text-lg leading-8 text-muted-foreground sm:text-xl\",\"children\":\"Tenant BI convierte reportes compartidos en un SaaS multiempresa: tokens seguros, perfiles cifrados, billing y consultas optimizadas desde la fuente.\"}],[\"$\",\"div\",null,{\"className\":\"mt-8 flex flex-col gap-3 sm:flex-row\",\"children\":[[\"$\",\"$L7\",null,{\"href\":\"/signup?utm_source=tenant-bi-site\u0026utm_medium=hero\u0026utm_campaign=looker-multitenant-template\",\"data-marketing-event\":\"marketing.signup_click\",\"data-marketing-label\":\"hero\",\"children\":[\"Activar SaaS\",[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$9:props:children:1:props:iconNode\",\"className\":\"lucide-arrow-right\",\"data-icon\":\"inline-end\"}]],\"data-slot\":\"button\",\"data-variant\":\"default\",\"data-size\":\"lg\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground [a]:hover:bg-primary/80 gap-1.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 h-11 px-4 text-base\",\"ref\":null}],[\"$\",\"$L7\",null,{\"href\":\"/demo\",\"data-marketing-event\":\"marketing.demo_open\",\"data-marketing-label\":\"hero\",\"children\":[\"Ver demo\",[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m9 18 6-6-6-6\",\"key\":\"mthhwq\"}]],\"className\":\"lucide-chevron-right\",\"data-icon\":\"inline-end\"}]],\"data-slot\":\"button\",\"data-variant\":\"outline\",\"data-size\":\"lg\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border bg-clip-padding font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 gap-1.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 h-11 px-4 text-base\",\"ref\":null}]]}],[\"$\",\"div\",null,{\"className\":\"mt-8 rounded-2xl border bg-card p-3 shadow-sm md:hidden\",\"children\":[\"$\",\"div\",null,{\"className\":\"rounded-xl border bg-background\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between border-b px-3 py-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-xs\",\"children\":\"tenant: acme-co\"}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\"children\":\"valid\"}]]}],\"$L41\",\"$L42\"]}]}]]}],\"$L43\"]}]\n"])</script>
1<script>self.__next_f.push([1,"1c:[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M20 6 9 17l-5-5\",\"key\":\"1gmf2c\"}]],\"className\":\"lucide-check\"}]\n1d:[\"$\",\"span\",null,{\"children\":\"Dashboards por cliente sin duplicar reportes.\"}]\n1e:[\"$\",\"div\",\"Looker Studio multi-tenant con tokens seguros.\",{\"className\":\"flex items-center gap-3 rounded-xl border bg-muted/30 p-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-7 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"Looker Studio multi-tenant con tokens seguros.\"}]]}]\n1f:[\"$\",\"div\",\"Entrega analytics a cada cliente sin exponer credenciales.\",{\"className\":\"flex items-center gap-3 rounded-xl border bg-muted/30 p-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-7 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"Entrega analytics a cada cliente sin exponer credenciales.\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"20:[\"$\",\"div\",null,{\"className\":\"grid gap-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"overflow-hidden rounded-2xl border bg-card shadow-sm\",\"children\":[\"$\",\"$L44\",null,{\"src\":\"/marketing/template-dashboard.svg\",\"alt\":\"Tenant BI Looker Studio template preview\",\"width\":1280,\"height\":720,\"className\":\"h-auto w-full\",\"priority\":false}]}],[\"$\",\"div\",null,{\"className\":\"grid gap-4 md:grid-cols-2\",\"children\":[[\"$\",\"div\",\"tenant-switch\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl overflow-hidden rounded-xl\",\"children\":[[\"$\",\"$L44\",null,{\"src\":\"/marketing/tenant-switch-storyboard.svg\",\"alt\":\"Cambio de tenant\",\"width\":640,\"height\":420,\"className\":\"h-auto w-full border-b bg-muted/30\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Cambio de tenant\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Storyboard para video corto: un reporte, tres clientes.\"}]]}]]}],[\"$\",\"div\",\"token-access\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl overflow-hidden rounded-xl\",\"children\":[[\"$\",\"$L44\",null,{\"src\":\"/marketing/token-access-comparison.svg\",\"alt\":\"Token activo vs vencido\",\"width\":640,\"height\":420,\"className\":\"h-auto w-full border-b bg-muted/30\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Token activo vs vencido\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Grafico simple para explicar seguridad y bloqueo de acceso.\"}]]}]]}]]}],[\"$\",\"div\",null,{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[\"$L45\",\"$L46\"]}],\"$L47\"]}]]}]\n"])</script>
1<script>self.__next_f.push([1,"21:[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Crea tenants, perfiles y tokens desde una consola con auditoria, billing y validacion remota.\"}]\n"])</script>
1<script>self.__next_f.push([1,"22:[\"$\",\"div\",\"Rendimiento desde la consulta\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M3 3v16a2 2 0 0 0 2 2h16\",\"key\":\"c24i48\"}],[\"path\",{\"d\":\"M18 17V9\",\"key\":\"2bz60n\"}],[\"path\",{\"d\":\"M13 17V5\",\"key\":\"1frdt8\"}],[\"path\",{\"d\":\"M8 17v-3\",\"key\":\"17ska0\"}]],\"className\":\"lucide-chart-column\"}]}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Rendimiento desde la consulta\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"El conector evita filas crudas cuando puede proyectar, filtrar y agrupar directamente en SQL o HTTP.\"}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"23:[\"$\",\"div\",null,{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden py-4 text-sm ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl bg-primary text-primary-foreground\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\",\"key\":\"1s2grr\"}],[\"path\",{\"d\":\"M20 2v4\",\"key\":\"1rf3ol\"}],[\"path\",{\"d\":\"M22 4h-4\",\"key\":\"gwowj6\"}],[\"circle\",{\"cx\":\"4\",\"cy\":\"20\",\"r\":\"2\",\"key\":\"6kqj1y\"}]],\"className\":\"lucide-sparkles\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Listo para vender\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-primary-foreground/75\",\"children\":\"Portal, migraciones, conector Apps Script, Bold y validacion managed ya publicados en produccion.\"}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"24:[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between gap-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-background text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\"key\":\"oel41y\"}],[\"path\",{\"d\":\"m9 12 2 2 4-4\",\"key\":\"dzmm74\"}]],\"className\":\"lucide-shield-check\"}]}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"outline\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\"children\":2}]]}]\n25:[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Control plane\"}]\n26:[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"El portal valida tenant, perfil, suscripcion y scopes.\"}]\n"])</script>
1<script>self.__next_f.push([1,"27:[\"$\",\"div\",\"Managed profile\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl relative rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between gap-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-background text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"circle\",{\"cx\":\"12\",\"cy\":\"16\",\"r\":\"1\",\"key\":\"1au0dj\"}],[\"rect\",{\"x\":\"3\",\"y\":\"10\",\"width\":\"18\",\"height\":\"12\",\"rx\":\"2\",\"key\":\"6s8ecr\"}],[\"path\",{\"d\":\"M7 10V7a5 5 0 0 1 10 0v3\",\"key\":\"1pqi11\"}]],\"className\":\"lucide-lock-keyhole\"}]}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"outline\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\"children\":3}]]}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Managed profile\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Las credenciales cifradas solo vuelven al conector autorizado.\"}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"28:[\"$\",\"div\",\"SQL pushdown\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl relative rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between gap-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-background text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"rect\",{\"width\":\"8\",\"height\":\"8\",\"x\":\"3\",\"y\":\"3\",\"rx\":\"2\",\"key\":\"by2w9f\"}],[\"path\",{\"d\":\"M7 11v4a2 2 0 0 0 2 2h4\",\"key\":\"xkn7yn\"}],[\"rect\",{\"width\":\"8\",\"height\":\"8\",\"x\":\"13\",\"y\":\"13\",\"rx\":\"2\",\"key\":\"1cgmvn\"}]],\"className\":\"lucide-workflow\"}]}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"outline\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\"children\":4}]]}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"SQL pushdown\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Campos, filtros, fechas y agregaciones bajan hasta la fuente.\"}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"29:[\"$\",\"span\",\"HTTP APIs\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"HTTP APIs\"}]\n2a:[\"$\",\"span\",\"CSV\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"CSV\"}]\n"])</script>
1<script>self.__next_f.push([1,"2b:[\"$\",\"div\",null,{\"className\":\"min-w-0 overflow-hidden rounded-2xl border bg-card p-4 shadow-sm\",\"children\":[\"$\",\"div\",null,{\"className\":\"min-w-0 rounded-xl border bg-background p-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-w-0 items-center justify-between gap-4 border-b pb-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-medium\",\"children\":\"Consulta optimizada\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground\",\"children\":\"Looker pide day + revenue\"}]]}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"default\",\"className\":\"group/badge inline-flex h-5 w-fit items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-primary text-primary-foreground [a]:hover:bg-primary/80 shrink-0\",\"children\":\"filtersApplied=true\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-4 grid min-w-0 gap-3 font-mono text-xs\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-2 shrink-0 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"className\":\"min-w-0 truncate text-muted-foreground\",\"children\":\"select day, sum(revenue) revenue\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-2 shrink-0 rounded-full bg-chart-2\"}],[\"$\",\"span\",null,{\"className\":\"min-w-0 truncate text-muted-foreground\",\"children\":\"from analytics_daily\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-2 shrink-0 rounded-full bg-chart-3\"}],[\"$\",\"span\",null,{\"className\":\"min-w-0 truncate text-muted-foreground\",\"children\":\"where tenant_id = :tenant_id\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-2 shrink-0 rounded-full bg-chart-4\"}],[\"$\",\"span\",null,{\"className\":\"min-w-0 truncate text-muted-foreground\",\"children\":\"and day between :start_date and :end_date\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex min-w-0 items-center gap-3 rounded-lg bg-muted/60 px-3 py-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-2 shrink-0 rounded-full bg-chart-5\"}],[\"$\",\"span\",null,{\"className\":\"min-w-0 truncate text-muted-foreground\",\"children\":\"group by day order by day\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-5 grid grid-cols-3 gap-2\",\"children\":[[\"$\",\"div\",null,{\"className\":\"rounded-lg border bg-card p-3\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-xl font-semibold text-muted-foreground\",\"children\":\"50k\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-xs text-muted-foreground\",\"children\":\"filas crudas\"}]]}],[\"$\",\"div\",null,{\"className\":\"rounded-lg border bg-card p-3\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-xl font-semibold\",\"children\":\"7\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-xs text-muted-foreground\",\"children\":\"respuesta\"}]]}],[\"$\",\"div\",null,{\"className\":\"rounded-lg border bg-card p-3\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-xl font-semibold\",\"children\":\"\u003c1s\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-xs text-muted-foreground\",\"children\":\"tiempo\"}]]}]]}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"2c:[\"$\",\"div\",\"3 tenants\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"3 tenants\"}]]}]\n2d:[\"$\",\"div\",\"2 perfiles managed\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"2 perfiles managed\"}]]}]\n2e:[\"$\",\"div\",\"10k validaciones/mes\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"10k validaciones/mes\"}]]}]\n2f:[\"$\",\"div\",\"Soporte asincrono\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"Soporte asincrono\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"30:[\"$\",\"div\",null,{\"className\":\"grid gap-2 border-t pt-4\",\"children\":[[\"$\",\"div\",\"Tokens por URL\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"Tokens por URL\"}]]}],[\"$\",\"div\",\"PostgreSQL, HTTP y CSV\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"PostgreSQL, HTTP y CSV\"}]]}],[\"$\",\"div\",\"Secretos cifrados\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"Secretos cifrados\"}]]}],[\"$\",\"div\",\"Bold activo\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"Bold activo\"}]]}]]}]\n"])</script>
1<script>self.__next_f.push([1,"31:[\"$\",\"div\",null,{\"data-slot\":\"card-footer\",\"className\":\"flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3\",\"children\":[\"$\",\"$L7\",null,{\"href\":\"/signup\",\"children\":[\"Activar \",\"Starter\",[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$9:props:children:1:props:iconNode\",\"className\":\"lucide-arrow-right\",\"data-icon\":\"inline-end\"}]],\"data-slot\":\"button\",\"data-variant\":\"outline\",\"data-size\":\"default\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full\",\"ref\":null}]}]\n"])</script>
1<script>self.__next_f.push([1,"32:[\"$\",\"div\",\"growth\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl border-primary shadow-lg shadow-primary/10\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m12 14 4-4\",\"key\":\"9kzdfg\"}],[\"path\",{\"d\":\"M3.34 19a10 10 0 1 1 17.32 0\",\"key\":\"19p75a\"}]],\"className\":\"lucide-gauge\"}]}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"default\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\"children\":\"Recomendado\"}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading font-medium group-data-[size=sm]/card:text-sm text-2xl\",\"children\":\"Growth\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Para vender dashboards multiempresa con varias fuentes y monitoreo.\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-end gap-1\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-3xl font-semibold tracking-normal\",\"children\":\"COP 49.900\"}],[\"$\",\"span\",null,{\"className\":\"pb-1 text-sm text-muted-foreground\",\"children\":\"/mes\"}]]}]]}],[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"px-4 group-data-[size=sm]/card:px-3 grid gap-5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"grid gap-2\",\"children\":[[\"$\",\"div\",\"25 tenants\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"25 tenants\"}]]}],[\"$\",\"div\",\"10 perfiles managed\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"10 perfiles managed\"}]]}],[\"$\",\"div\",\"100k validaciones/mes\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"100k validaciones/mes\"}]]}],[\"$\",\"div\",\"Soporte prioritario\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"Soporte prioritario\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"grid gap-2 border-t pt-4\",\"children\":[[\"$\",\"div\",\"SQL pushdown\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"SQL pushdown\"}]]}],[\"$\",\"div\",\"Date range automatico\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[\"$L48\",\"$L49\"]}],\"$L4a\",\"$L4b\"]}]]}],\"$L4c\"]}]\n"])</script>
1<script>self.__next_f.push([1,"33:[\"$\",\"div\",\"scale\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start justify-between gap-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M10 12h4\",\"key\":\"a56b0p\"}],[\"path\",{\"d\":\"M10 8h4\",\"key\":\"1sr2af\"}],[\"path\",{\"d\":\"M14 21v-3a2 2 0 0 0-4 0v3\",\"key\":\"1rgiei\"}],[\"path\",{\"d\":\"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2\",\"key\":\"secmi2\"}],[\"path\",{\"d\":\"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16\",\"key\":\"16ra0t\"}]],\"className\":\"lucide-building2 lucide-building-2\"}]}],[\"$\",\"span\",null,{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\"children\":\"Privado\"}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading font-medium group-data-[size=sm]/card:text-sm text-2xl\",\"children\":\"Scale\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Para despliegues privados, conectores dedicados y clientes con SLA.\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-end gap-1\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-3xl font-semibold tracking-normal\",\"children\":\"A medida\"}],[\"$\",\"span\",null,{\"className\":\"pb-1 text-sm text-muted-foreground\",\"children\":\"\"}]]}]]}],[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"px-4 group-data-[size=sm]/card:px-3 grid gap-5\",\"children\":[[\"$\",\"div\",null,{\"className\":\"grid gap-2\",\"children\":[[\"$\",\"div\",\"Tenants a medida\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"Tenants a medida\"}]]}],[\"$\",\"div\",\"Perfiles ilimitables\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"Perfiles ilimitables\"}]]}],[\"$\",\"div\",\"SLA y soporte directo\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"SLA y soporte directo\"}]]}],[\"$\",\"div\",\"Conector privado\",{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-1.5 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"children\":\"Conector privado\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"grid gap-2 border-t pt-4\",\"children\":[[\"$\",\"div\",\"BigQuery Advanced\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":\"$L4d\"}],\"$L4e\"]}],\"$L4f\",\"$L50\",\"$L51\"]}]]}],\"$L52\"]}]\n"])</script>
1<script>self.__next_f.push([1,"34:[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$10:props:children:props:children:1:props:children:0:props:children:0:props:children:0:props:children:0:props:children:props:iconNode\",\"className\":\"lucide-users\"}]}]\n35:[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Usuario del portal\"}]\n36:[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Better Auth protege dashboard, tenants, perfiles, billing y emision de tokens.\"}]\n"])</script>
1<script>self.__next_f.push([1,"37:[\"$\",\"div\",\"Permiso del conector\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$24:props:children:0:props:children:props:iconNode\",\"className\":\"lucide-shield-check\"}]}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Permiso del conector\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Looker no pide login extra; el acceso lo decide tenantToken + perfil + suscripcion.\"}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"38:[\"$\",\"div\",\"Canal servidor a servidor\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$27:props:children:props:children:0:props:children:0:props:children:props:iconNode\",\"className\":\"lucide-lock-keyhole\"}]}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Canal servidor a servidor\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"El connectionProfile cifrado solo se entrega si llega x-service-token valido.\"}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"39:[\"$\",\"div\",\"Billing activo\",{\"data-slot\":\"card\",\"data-size\":\"default\",\"className\":\"group/card flex flex-col gap-4 overflow-hidden bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[\u003eimg:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl rounded-xl\",\"children\":[\"$\",\"div\",null,{\"data-slot\":\"card-header\",\"className\":\"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex size-10 items-center justify-center rounded-lg bg-muted text-primary\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"rect\",{\"width\":\"20\",\"height\":\"14\",\"x\":\"2\",\"y\":\"5\",\"rx\":\"2\",\"key\":\"ynyp8z\"}],[\"line\",{\"x1\":\"2\",\"x2\":\"22\",\"y1\":\"10\",\"y2\":\"10\",\"key\":\"1b3vmo\"}]],\"className\":\"lucide-credit-card\"}]}],[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Billing activo\"}],[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Si la suscripcion esta inactiva, el token o perfil queda bloqueado antes de consultar.\"}]]}]}]\n"])</script>
1<script>self.__next_f.push([1,"41:[\"$\",\"div\",null,{\"className\":\"grid grid-cols-3 gap-2 p-3\",\"children\":[[\"$\",\"div\",\"68\",{\"className\":\"flex h-24 items-end rounded-lg bg-muted p-1\",\"children\":[\"$\",\"span\",null,{\"className\":\"w-full rounded-md bg-primary\",\"style\":{\"height\":\"68%\"}}]}],[\"$\",\"div\",\"46\",{\"className\":\"flex h-24 items-end rounded-lg bg-muted p-1\",\"children\":[\"$\",\"span\",null,{\"className\":\"w-full rounded-md bg-chart-2\",\"style\":{\"height\":\"46%\"}}]}],[\"$\",\"div\",\"82\",{\"className\":\"flex h-24 items-end rounded-lg bg-muted p-1\",\"children\":[\"$\",\"span\",null,{\"className\":\"w-full rounded-md bg-chart-3\",\"style\":{\"height\":\"82%\"}}]}]]}]\n42:[\"$\",\"div\",null,{\"className\":\"grid gap-2 border-t p-3\",\"children\":[[\"$\",\"div\",\"token\",{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-2 rounded-full bg-primary\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-xs text-muted-foreground\",\"children\":\"token\"}],[\"$\",\"span\",null,{\"className\":\"ml-auto h-2 w-16 rounded-full bg-muted\"}]]}],[\"$\",\"div\",\"profile\",{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-2 rounded-full bg-chart-2\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-xs text-muted-foreground\",\"children\":\"profile\"}],[\"$\",\"span\",null,{\"className\":\"ml-auto h-2 w-16 rounded-full bg-muted\"}]]}],[\"$\",\"div\",\"subscription\",{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"size-2 rounded-full bg-chart-3\"}],[\"$\",\"span\",null,{\"className\":\"font-mono text-xs text-muted-foreground\",\"children\":\"subscription\"}],[\"$\",\"span\",null,{\"className\":\"ml-auto h-2 w-16 rounded-full bg-muted\"}]]}]]}]\n43:[\"$\",\"div\",null,{\"className\":\"mt-12 grid gap-3 sm:grid-cols-3\",\"children\":[[\"$\",\"div\",\"filas probadas en Neon\",{\"className\":\"rounded-xl border bg-background/80 p-4 backdrop-blur\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-2xl font-semibold tabular-nums\",\"children\":\"50k+\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm text-muted-foreground\",\"children\":\"filas probadas en Neon\"}]]}],[\"$\",\"div\",\"cache seguro de validacion\",{\"className\":\"rounded-xl border bg-background/80 p-4 backdrop-blur\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-2xl font-semibold tabular-nums\",\"children\":\"60s\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm text-muted-foreground\",\"children\":\"cache seguro de validacion\"}]]}],[\"$\",\"div\",\"secretos en links\",{\"className\":\"rounded-xl border bg-background/80 p-4 backdrop-blur\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-2xl font-semibold tabular-nums\",\"children\":\"0\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm text-muted-foreground\",\"children\":\"secretos en links\"}]]}]]}]\n45:[\"$\",\"div\",null,{\"data-slot\":\"card-title\",\"className\":\"font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm\",\"children\":\"Audiencias iniciales\"}]\n46:[\"$\",\"div\",null,{\"data-slot\":\"card-description\",\"className\":\"text-sm text-muted-foreground\",\"children\":\"Mensajes listos para Google Search, LinkedIn outbound y retargeting.\"}]\n"])</script>
1<script>self.__next_f.push([1,"47:[\"$\",\"div\",null,{\"data-slot\":\"card-content\",\"className\":\"px-4 group-data-[size=sm]/card:px-3 flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"Agencias de marketing con reportes por cliente\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"Agencias de marketing con reportes por cliente\"}],[\"$\",\"span\",\"SaaS B2B que entregan analitica a varias empresas\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"SaaS B2B que entregan analitica a varias empresas\"}],[\"$\",\"span\",\"Software houses que montan portales de BI para clientes\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"Software houses que montan portales de BI para clientes\"}],[\"$\",\"span\",\"Operaciones con dashboards por sede, pais o franquicia\",{\"data-slot\":\"badge\",\"data-variant\":\"secondary\",\"className\":\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden border border-transparent text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [\u0026\u003esvg]:pointer-events-none [\u0026\u003esvg]:size-3! bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80 rounded-md px-3 py-1\",\"children\":\"Operaciones con dashboards por sede, pais o franquicia\"}]]}]\n"])</script>
1<script>self.__next_f.push([1,"48:[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}]\n49:[\"$\",\"span\",null,{\"children\":\"Date range automatico\"}]\n4a:[\"$\",\"div\",\"BigQuery standard\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"BigQuery standard\"}]]}]\n4b:[\"$\",\"div\",\"Auditoria de eventos\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"Auditoria de eventos\"}]]}]\n4c:[\"$\",\"div\",null,{\"data-slot\":\"card-footer\",\"className\":\"flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3\",\"children\":[\"$\",\"$L7\",null,{\"href\":\"/signup\",\"children\":[\"Activar \",\"Growth\",[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$9:props:children:1:props:iconNode\",\"className\":\"lucide-arrow-right\",\"data-icon\":\"inline-end\"}]],\"data-slot\":\"button\",\"data-variant\":\"default\",\"data-size\":\"default\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground [a]:hover:bg-primary/80 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full\",\"ref\":null}]}]\n4d:[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]\n4e:[\"$\",\"span\",null,{\"children\":\"BigQuery Advanced\"}]\n4f:[\"$\",\"div\",\"Ambientes separados\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"Ambientes separados\"}]]}]\n50:[\"$\",\"div\",\"Hardening de seguridad\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"Hardening de seguridad\"}]]}]\n51:[\"$\",\"div\",\"Roadmap de integraciones\",{\"className\":\"flex items-center gap-3 text-sm\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex size-6 items-center justify-center rounded-md bg-primary text-primary-foreground\",\"children\":[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$1c:props:iconNode\",\"className\":\"lucide-check\"}]}],[\"$\",\"span\",null,{\"children\":\"Roadmap de integraciones\"}]]}]\n52:[\"$\",\"div\",null,{\"data-slot\":\"card-footer\",\"className\":\"flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3\",\"children\":[\"$\",\"$L7\",null,{\"href\":\"/signup\",\"children\":[\"Activar \",\"Scale\",[\"$\",\"$L8\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$9:props:children:1:props:iconNode\",\"className\":\"lucide-arrow-right\",\"data-icon\":\"inline-end\"}]],\"data-slot\":\"button\",\"data-variant\":\"outline\",\"data-size\":\"default\",\"className\":\"group/button inline-flex shrink-0 items-center justify-center rounded-lg bord"])</script>
1<script>self.__next_f.push([1,"er bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [\u0026_svg]:pointer-events-none [\u0026_svg]:shrink-0 [\u0026_svg:not([class*='size-'])]:size-4 border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 w-full\",\"ref\":null}]}]\n"])</script>
1<script>self.__next_f.push([1,"3e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script>
1<script>self.__next_f.push([1,"53:I[82984,[\"/_next/static/chunks/0gnf5gv8-rmh7.js\",\"/_next/static/chunks/0bwljmcumcp~p.js\",\"/_next/static/chunks/02g_pyjav1flq.js\",\"/_next/static/chunks/044k0k03n2rk5.js\",\"/_next/static/chunks/15mdi~f-83c55.js\"],\"IconMark\"]\n3c:null\n40:[[\"$\",\"title\",\"0\",{\"children\":\"Tenant BI\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Looker Studio dashboards segmented by tenant token.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.ico?v=2\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.16tpuit2gh5dp.ico\",\"sizes\":\"40x40\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/favicon.svg?v=2\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"5\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?v=2\",\"sizes\":\"any\"}],[\"$\",\"$L53\",\"6\",{}]]\n"])</script>
1</body></html>
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.