Permanencia — Design System (kit técnico)
Este sitio es el kit (Canon v2). Humanos y agentes leen lo mismo.
Tokens:app/assets/css/tokens.css· Specs operativas:/specs· Agentes:AGENTS.md· Logos:public/logo/
Paquete:permanencia-canon· Sitio de aplicación: oqo.cl (oqo-permanencia)
Todo lo necesario para implementar y comunicar OQO bajo Permanencia está dentro de este kit. No hace falta abrir un brandbook HTML ni rutas del disco de nadie.
1. Brand
| Campo | Valor |
|---|---|
| Brand name | Permanencia |
| Organización | Agencia OQO |
| Tagline | Cálida. Sólida. Presente. / Lo que dura, se siente. |
| Scores | Claridad 5 · Longevidad 5 · Atrevimiento 3 · Presencia 5 |
| Personalidad | Cálida · Sólida · Cercana · Minimalista |
| Pilares | Permanencia · Evidencia · Cercanía · Precisión · Criterio |
Resumen. Permanencia es la base canónica de OQO: canvas Origen (~40%), ink Base (~28%), Roble generoso en acción (~16%), Resalte como señal tech (~4%), triángulo tipográfico + mono, y fotografía bajo Materia + máquina (estilo-fotografico.md). Treinta años depurados — no reinventa.
Referencia viva de UI: el homepage (/ · componentes Home*) es el sistema visual aceptado — ritmo de bandas, motion GSAP, UiButton, media a sangre, header morph. Al implementar o auditar, priorizar fidelidad al home sobre descripciones heredadas del brandbook.
1.1 Estrategia de marca (incluida aquí)
Esta sección concentra la base estratégica. Es autónoma: no depende de otros documentos fuera del kit.
Verdad central
OQO se mide por el crecimiento sostenido de sus clientes — no por campañas puntuales ni entregables aislados. No vende campañas: construye, con cada cliente, algo que sigue en pie después de la primera entrega.
Misión y visión
| Declaración | |
|---|---|
| Misión | En OQO construimos el crecimiento de nuestros clientes con relaciones que duran, no campañas que pasan. |
| Visión | Ser la agencia en la que las empresas chilenas con trayectoria piensan primero cuando buscan no una campaña, sino un socio para los próximos diez años. |
Valores
| Valor | Significa | No significa |
|---|---|---|
| Permanencia sobre lo puntual | Éxito en años de relación, no en campañas cerradas | Negarse a proyectos puntuales cuando el cliente los necesita |
| Base antes que tendencia | Construir sobre lo que ya funciona; la IA se apoya en oficio | Evitar innovación |
| Tecnología con alma | La IA amplifica el criterio humano; hay revisión humana | Usar menos tecnología que la competencia |
Posicionamiento
Para empresas chilenas con trayectoria — inmobiliarias, marcas de ecommerce y compañías de servicios — que necesitan crecer sin perder solidez, OQO es la agencia de marketing y tecnología que construye crecimiento sostenido, integrando estrategia, creatividad, medios e inteligencia artificial bajo un mismo equipo desde hace más de 30 años.
Versión corta: OQO construye crecimiento sostenido — no campañas puntuales — con estrategia, creatividad, medios e IA bajo un mismo equipo hace 30+ años.
Personalidad y promesa
- Personalidad: cálida · sólida · cercana · minimalista
- Promesa: cada proyecto se construye para seguir dando resultado después de entregado
- Verticales foco: inmobiliario · ecommerce · servicios profesionales
- Claims «30+ años» / liderazgo en IA: solo con evidencia cercana; si no hay evidencia, no se afirma
Pilares comunicacionales (detalle)
| Pilar | Qué implica |
|---|---|
| Permanencia | Sistemas, relaciones y crecimiento que duran — no moda de la semana |
| Evidencia | Prueba o silencio; nunca métricas inventadas |
| Cercanía | Lenguaje humano, sin postureo de agencia cool |
| Precisión | Una promesa por bloque; CTAs con verbo + objeto |
| Criterio | Oficio antes que tendencia; la IA amplifica, no sustituye |
2. Color tokens
Fuente operativa: /specs. Cada color tiene --nombre (hex) y --nombre-rgb (canales 0–255, espacio). En código: var(--origen) o rgb(var(--origen-rgb) / .7). En Figma: hex + RGB con comas. Cero hex sueltos.
2.1 Dieta principal (suma 100%)
| Token | Hex | RGB | Rol | % uso |
|---|---|---|---|---|
--origen | #FAF6EE | 250 246 238 | Canvas / fondo principal | 40% |
--base | #1C1815 | 28 24 21 | Texto / ink / chrome oscuro / bandas ink | 28% |
--roble | #B07A3E | 176 122 62 | CTA / acento / kickers de relato / links | 16% |
--veta | #E4D4BC | 228 212 188 | Superficie madera suave / bandas | 8% |
--resalte | #5C93C9 | 92 147 201 | Señal tech · foco del dato · alias --tinta-sig | 4% |
--piedra | #C9C2B6 | 201 194 182 | Bordes / meta / disabled | 4% |
Gamas de Resalte (el 4% es el sólido; estas no suman extra):
| Token | Hex | RGB | Rol |
|---|---|---|---|
--resalte / --tinta-sig | #5C93C9 | 92 147 201 | Señal sobre ink · columna destacada · foco del dato |
--resalte-12 | #EEF4FA | 238 244 250 | Wash / zebra dentro del panel blanco |
--resalte-24 | #DDECF7 | 221 236 247 | Celda o nodo de apoyo |
--resalte-shade-15 | #4E7FB0 | 78 127 176 | Hover sobre resalte (links ≥18px) |
Blanco (fuera de la dieta % — no es canvas):
| Token | Hex | RGB | Rol |
|---|---|---|---|
--blanco | #FFFFFF | 255 255 255 | Texto del CTA · superficie de diagrama / chart / matriz / captura |
--info-paper | alias | — | Igual que --blanco — el papel del gráfico |
El blanco no es página. Es el papel del gráfico, anclado en Origen (borde ink-14, radio 16 px). Ver propuestas/design-v2.md.
Alias: --p = Roble · --d = Base · --l = Origen · --s = Veta · --a = Roble.
2.1.1 Resalte — cuándo y cómo
Un solo azul aprobado, y entra al %. No sustituye Roble en CTAs, nav activo ni links principales. Sobre bandas ink se nombra también --tinta-sig.
| Uso | Ejemplo |
|---|---|
| Bullet / línea de estado activo en listas o timeline | Ítem «Hoy» en trayectoria |
| Kicker o meta sobre banda ink | «Lo que la máquina repite» |
| Columna o categoría destacada (línea superior + bullets) | Etapa «Operar» en Alcance (HomeScope) |
| Señal tech / IA en nav de áreas | Ítem IA en HomeServices (color-mix(resalte 88%, base)) |
| Etiquetas técnicas puntuales (agente, IA) | Label en snippet de conversación |
Usos canónicos estables en el home: (1) etapa «Operar» en Alcance · (2) área «IA» en Áreas. Siempre señal tech; nunca CTA.
Rol extra (propuestas / módulos de dato): dentro de un panel --blanco, Resalte es el dedo que señala — nodo, serie, columna o hito. Fuera del módulo, el acento sigue siendo Roble. Un solo foco Resalte por página. Si ninguna serie es «la que importa», no uses Resalte: queda la dieta v1.
No usar resalte para: CTA primario, nav activo, kicker de relato, relleno de logo, fondos dominantes, purple genérico «AI look», ni más de un foco resalte por bloque visible.
Fuente CSS: app/assets/css/tokens.css (:root).
Lectura de la dieta (identidad): Origen es el canvas de marca. Base concentra masa tipográfica, chrome y bandas ink. Resalte es la señal técnica del sistema (home: Operar, IA, Hoy), no un extra. Los % (40/28/16/8/4/4) miden presencia de marca en el sistema, no un histogram por página.
Lectura en el homepage (superficie de scroll): el home invierte la proporción visual — ~65–70% superficie oscura (Hero velado + Alcance ink + Áreas fotográficas + Novedades ink) vs ~30–35% clara (Trayecto, Evidencia/veta, Equipo, CTA cierre). Hero y Áreas no son bandas ink puras: son media full-bleed velada con Base. Origen sigue dominando como color de texto sobre ink. Ver §4.1.
2.2 Gamas derivadas (solo estas)
Roble sobre Origen (tints) — wash, bandas, paneles de apoyo (CTA sólido sigue #B07A3E):
| Token | Hex | RGB | Uso |
|---|---|---|---|
--roble-08 | #F4ECE0 | 244 236 224 | Hover / wash |
--roble-16 | #EEE2D2 | 238 226 210 | Bandas suaves |
--roble-24 | #E8D8C4 | 232 216 196 | Paneles apoyo |
--roble-40 | #DCC4A8 | 220 196 168 | Énfasis seco |
Roble hacia Base (shades):
| Token | Hex | RGB | Uso |
|---|---|---|---|
--roble-shade-15 | #9A6B38 | 154 107 56 | Hover CTA |
--roble-shade-30 | #845D32 | 132 93 50 | Pressed / texto contraste |
--roble-shade-50 | #66492A | 102 73 42 | Ink cálido |
Ink (Base sobre Origen):
| Token | Hex | RGB |
|---|---|---|
--ink-08 | #E8E4DD | 232 228 221 |
--ink-14 | #DBD7D0 | 219 215 208 |
--ink-42 | #9D9993 | 157 153 147 |
--ink-68 | #635F5A | 99 95 90 |
--ink-85 | #3D3936 | 61 57 54 |
Superficies Veta:
| Token | Hex | RGB |
|---|---|---|
--veta-35 | #F2EADD | 242 234 221 |
--veta-55 | #EEE3D3 | 238 227 211 |
--veta-75 | #EADDC9 | 234 221 201 |
--piedra-soft | #E2DCD2 | 226 220 210 |
2.3 Contraste (referencia)
| Par | Ratio | Nota |
|---|---|---|
| Base / Origen | 16.36:1 | AAA cuerpo |
| Blanco / Roble | 3.68:1 | AA large — CTA primario ≥18px bold, blanco sobre Roble |
| Base / Roble | 4.79:1 | AA texto en botón denso |
| Roble / Origen (small) | 3.42:1 | No AA small — solo links ≥18px bold / subrayados |
| Piedra / Origen | ~1.6:1 | Solo bordes — nunca texto |
| Resalte / Base (ink) | ~5.2:1 | AA meta / kickers ≥11px uppercase |
| Resalte / Origen | ~2.8:1 | Solo bullets, líneas, iconos — no body small |
2.4 Color prohibitions
- No pasteles por pilar (coral, salvia scrape, neones, purple AI genérico).
- No otros azules fuera de
--resalte(#5C93C9). - No teñir el logo de Roble ni degradé.
- No reducir Roble a chip <8%; Permanencia exige ~16% de presencia en acción.
- Veta nunca como CTA ni fill del logo.
- Piedra nunca como CTA.
- Blanco nunca como canvas de página. Solo texto de CTA y módulo de información.
- No sustituir Roble por Resalte «para que se vea moderno».
3. Tipografía
Triángulo + mono. Cada familia tiene una capa. Se mezclan en la misma página si cada una está en la suya — no si un titular de sección se escribe como interfaz.
| Rol | Familias | Capa | Regla |
|---|---|---|---|
| Story | Fraunces + Manrope | La marca le habla al lector | Titulares de sección en Fraunces, caja normal |
| Producto | PP Formula + PP Rader | El lector usa o elige | Plataformas, chips, fichas, CTAs, forms |
| Meta | PP Supply Mono | La máquina reporta | Rótulos, datos, grilla técnica |
Regla operativa: si es una frase que la marca le dice al lector, va en Fraunces. Si es una cosa que el lector usa o elige, va en Formula. Si es un dato que la máquina reporta, va en Mono.
Mayúsculas solo en rótulos ≤3 palabras (chips, kickers, B2B, CHECKOUT). Toda frase va en caja normal. Techo: si tiene más de tres palabras, no va en mayúsculas. La autoridad no levanta la voz.
3.1 Familias y tokens CSS
| Rol interno | Familias | CSS vars | Fallbacks web |
|---|---|---|---|
| Producto / UI display | PP Formula Narrow | --font-ui | 'Arial Narrow', sans-serif |
| Producto / UI body | PP Rader | --font-ui-b | Georgia, serif |
| Story display | Fraunces | --font-story | Georgia, serif |
| Story body | Manrope | --font-story-b | system-ui, sans-serif |
| Meta | PP Supply Mono | --font-m | ui-monospace, monospace |
Medida (tokens): --fw-story 600 · --fw-story-body 400 · --fw-ui 600 · --fw-mono 500 · --track-story −0.015em · --track-ui −0.02em · --track-cta 0.06em · --track-mono 0.12em · --lh-body 1.55.
Self-host (kit y web): empaquetar en assets/fonts/ (kit) y servir en /fonts/ (oqo.cl, brandbook, Nuxt). Licencia Pangram Pangram: uso interno OQO; no redistribuir el kit a terceros sin acuerdo de licencia.
Google Fonts: Fraunces (opsz 9..144, 500–700) + Manrope (400–700).
3.2 Cuándo cuál
| Contexto | Sistema |
|---|---|
| Titular de sección (home, servicio, agencia) | Fraunces · caja normal |
| Nav, plataformas, chips, CTAs, fichas, forms | Formula + Rader |
| About, casos climax, historia de marca, landing emocional | Fraunces + Manrope |
| Rótulos, hex, scores, datos, grilla técnica | Supply Mono |
Riesgo A: Fraunces en toda la UI → se pierde precisión de producto.
Riesgo B: Formula en todos los titulares de sección → la página no tiene voz; lee como interfaz. Es el error de la auditoría de servicios.
3.3 Escala de cuerpo (cuatro tokens + piso)
Nada de font-size en rem con decimales. 11px es el piso. Titulares en clamp() fluido aparte.
| Token | Tamaño | Rol |
|---|---|---|
--fs-xs | 11px | Rótulos y etiquetas en mono |
--fs-sm | 13px | Letra chica: pie de tarjeta, meta |
--fs-md | 15px | Cuerpo secundario: listas, tarjetas, chips |
--fs-lg | 17px | Cuerpo y bajadas |
3.4 Escalas de display
Producto / UI (cosas que se usan o eligen — no titulares de sección)
| Nivel | Familia | Size | Weight / tracking |
|---|---|---|---|
| Display UI | Formula | clamp(48–96px) | 700 · −0.02em · UPPER solo si ≤3 palabras |
| Card / chip | Formula | 15–18px | 600 · UPPER si rótulo corto |
| Body | Rader | --fs-lg 17px / 1.55 | 400–500 · max ~60ch |
| CTA | Formula | ≥18px | 600 · 0.06em · UPPER · blanco sobre Roble |
| Meta | Supply Mono | --fs-xs 11px | 500 · 0.12em · UPPER |
Emoción / story (la marca le habla al lector)
| Nivel | Familia | Size | Weight / tracking |
|---|---|---|---|
| Display / H2 de sección | Fraunces | 44–80px · clamp | 600–700 · −0.015em · caja normal |
| Lead | Manrope | 19–22px / 1.55 | 500 |
| Body | Manrope | --fs-lg 17px / 1.6 | 400–500 |
4. Layout tokens
| Token | Valor | Uso |
|---|---|---|
--space-1 | 8px | Gaps densos, iconos, meta |
--space-2 | 16px | Padding control / nav items |
--space-3 | 24px | Bloques internos |
--space-4 | 40px | Secciones compactas |
--space-5 | 64px | Padding vertical sección (mín) |
--space-6 | 120px | Padding vertical sección (máx) |
--wrap | min(1180px, 100%) | Contenedor |
| Gutters | clamp(20px, 4vw, 64px) | Padding horizontal sección |
--nav-h | 56px | Altura nav |
--radius | 16px | Superficies / paneles |
--btn-radius | 999px | Botones / chips (pill canónico) |
--ease | cubic-bezier(0.32, 0.72, 0, 1) | Motion default |
--dur-ack | 110ms | Acuse de recibo (hover/press corto) |
--dur-state | 220ms | Cambio de estado |
--dur-enter | 560ms | Entrada / reveal |
--fs-xs … --fs-lg | 11 / 13 / 15 / 17px | Cuerpo. Piso --fs-floor 11px |
--touch-min | 44px | Objetivo táctil mínimo |
Grid sugerido: 12-col mental dentro de wrap; splits ~1.05fr / 0.95fr; breakpoints ~900px / 800px / 700px.
Sombra: Permanencia evita multi-layer shadows. Preferir bordes --line / ink-14, box-shadow: inset 0 0 0 1px (borde por inset) y contraste de bandas. Si hace falta elevación mínima: 0 1px 0 color-mix(in srgb, var(--d) 8%, transparent) — no glow.
Hero overlay (foto oscura):linear-gradient(185deg, rgba(28,24,21,.14) 0%, rgba(28,24,21,.42) 48%, rgba(28,24,21,.93) 100%)
En home: velos con color-mix(in srgb, var(--base) …%) — nunca negro puro inventado.
4.1 Home — sistema visual aceptado
El homepage (app/pages/index.vue + app/components/home/Home*) fija el ritmo, los componentes y el motion del sitio. No «corregir» el home hacia % de dieta abstractos; alinear otras páginas story al home.
Ritmo de bandas (alternancia estricta)
Nunca dos bandas oscuras consecutivas. Oscuro ↔ claro en todo el scroll:
| # | Sección | Componente | Carácter | Banda / superficie |
|---|---|---|---|---|
| 01 | Hero | HomeHero | oscura | Origen marco + video/velo Base (sticky ~250vh) |
| 02 | Trayecto | HomePath | clara | --origen (+ overhang del hero) |
| 03 | Alcance | HomeScope | oscura | --base (ink) |
| 04 | Evidencia | HomeEvidence | clara | SectionShell band="veta" |
| 05 | Áreas | HomeServices | oscura | foto a sangre + velo Base |
| 06 | Equipo | HomeTeam | clara | --origen (tren parallax — no forzar ink) |
| 07 | Novedades | HomeBlog | oscura | SectionShell band="ink" |
| 08 | CTA cierre | inline | clara | SectionShell band="paper" |
Ocultas a propósito (no reactivar sin brief): HomeInsights, HomeInfo.
Tone tipográfico del home: story (Fraunces + Manrope) en toda la página; Formula/Rader solo en roles producto puntuales (hitos Path, tabs Scope, watermarks Evidence, CTAs UiButton). Los titulares de sección del home son el patrón correcto: Fraunces, caja normal.
Escala de texto / superficie sobre ink
| Rol | Token |
|---|---|
| Título | --origen 100% |
| Lead | color-mix(origen 70%) |
| Meta / body suave | color-mix(origen 68–72%) |
| Líneas / bordes | color-mix(origen 12–13%) |
| Superficies / badges | color-mix(origen 6–10%) |
Media a sangre
En paneles con foto/video, la media va a sangre del contenedor (sin padding ni radio propio que la deje flotando). Confirmado en Scope, Áreas, Novedades, Equipo (escena fuera del wrap + mask-image). Filtros estándar: brightness(0.82) contrast(1.05) (Scope) · grayscale(0.16) contrast(1.04) → color en hover (Equipo).
Wrap
--wrap / --section-wrap = min(1180px, 100%). Única excepción documentada: Áreas amplía a ~1240px en ≥1024px por sticky + cards.
4.2 Motion (lenguaje canónico)
Implementación: GSAP + ScrollTrigger, import dinámico en onMounted, cleanup con gsap.context() + ctx.revert(). Respetar prefers-reduced-motion (estado final sin scrub/loops).
| Patrón | Especificación |
|---|---|
| Ease UI (CSS) | --ease: cubic-bezier(0.32, 0.72, 0, 1) · --dur-ack 110ms · --dur-state 220ms |
| Ease entrada | power2.out · --dur-enter 560ms (reveals) · power3.out (bloques grandes) |
| Ease morph largo | cubic-bezier(0.22, 1, 0.36, 1) (header, cards Áreas, hover Equipo) |
| Reveal estándar | opacity 0→1 + y 18–22→0 · 0.55–0.7s · stagger 0.09–0.12 · trigger top 75–82% · once: true — sin blur |
| Reveal lateral | x 20→0 o translate3d(4rem,0,0) (entrada desde la derecha) |
| Scrub | true (Hero 1:1) · 0.55 (Path) · 1.2–1.6 (header). Nunca scrub largo en lectura |
| Loops | ease: 'none' · repeat: -1 · tracks duplicados xPercent ±50 · sentidos opuestos a distinta velocidad |
| Hover-slow | timeScale → 0.2 en ~0.5s al hover/focusin (marquee Evidencia, tren Equipo) |
| Dot / spring | back.out(1.6) solo en aparición de dots del riel |
| Elevación hover | translateY(-2px) máx · scale solo en media (1.06–1.08) o :active 0.965–0.97 |
Header morph: barra full sobre --base + logo blanco.png → pill compacto a la derecha al scroll (--h-p 0→1, smoothstep, rango ~480px). Nav links se desvanecen; burger aparece; CTA «Hablemos!» permanece. Ver AppHeader.vue.
4.3 Bandas oscuras: ink y tech
Dos nombres, la misma trampa. .band-ink / .section--ink es espresso de relato. .band-tech / .section--tech es espresso de señal (plataformas, integraciones, dato). El texto sobre ambas usa la escala de Origen sobre Base (§4.1).
Regla: todo override de color para banda oscura se escribe para ink y tech a la vez. Si solo se cubre una, hay un agujero de contraste (bajadas a 2,4:1). Foco de teclado visible con variante por banda. Objetivo táctil ≥ --touch-min 44px.
5. Componentes
5.1 Botón — UiButton (canónico del sitio)
Implementación: app/components/ui/UiButton.vue. El kit .btn / .btn-ghost es fallback para brandbook/HTML; en Nuxt usar siempre UiButton.
| Variante | Fondo | Texto | Tipo | Icono circular |
|---|---|---|---|---|
primary | --roble | #fff | Formula ≥18px / 600 / UPPER / 0.06em | sí · círculo cream · flecha Base |
ghost | color-mix(origen 10%) + blur · borde origen 28% | --origen | Formula ≥18px | sí |
secondary | transparente · borde color-mix(roble 55%) | --base | Supply Mono --fs-xs 11px | solo si hay slot |
secondary-on-dark | transparente · borde origen 72% | --origen | Formula ≥18px | sí |
- Pill asimétrico con icono a la derecha (
paddingdenso al lado del círculo). - Hover primary →
--roble-shade-15. - Un CTA dominante por viewport. Copy cálido tipo Hablemos! (no genéricos fríos).
- Label del CTA: Formula; nunca Fraunces en el botón.
5.2 Kicker con dot
Patrón canónico (Path, Scope, CTA cierre, etc.):
- Supply Mono 11px · 500 ·
letter-spacing: 0.12em· UPPER · color--roble - Dot 0.45–0.5rem ·
border-radius: 999px· mismo color (o--resaltesi el bloque es foco tech) - Variante sin dot:
.section__kickervíaSectionHeader
5.3 Tags, pills y chips
| Familia | Uso | Spec |
|---|---|---|
| Tag informativo | CTA cierre | pill borde --ink-14 · Manrope 14px · no interactivo |
| Pill con icono | Scope | borde línea clara · icono lucide · acento resalte puntual |
| Chip toggle | Scope needs / Evidencia tabs | min-height: 44px · aria-pressed · activo = inversión fondo/texto |
| Pill categoría | Novedades | Supply Mono 10px · tonos roble / base invertido / shade |
| Badge cuadrado | Novedades kicker | excepción al pill · radius 8px |
5.4 Nav / header
- Fondo siempre
--base· logoblanco.png(~72px en full) - Links: Supply Mono · active = fondo Roble + texto blanco
- CTA «Hablemos!» primary Roble
- Morph a pill compacto a la derecha (ver §4.2) — no recrear nav cream/claro del brandbook legado
5.5 Links en cuerpo
- Color Roble; preferir underline o weight en body
- Small text: no Roble plano sobre cream — usar Base / ink-85 / shade-30
- Hover: shade-15 o underline más marcado
5.6 Formularios
- Campos mínimos (nombre, email, mensaje / proyecto)
- Input: fondo Origen o Veta-soft · borde ink-14 / Piedra · radius 12–16px (inputs) o pill en chat-like
- Focus: borde Roble · outline suave Roble-24
- Label: Supply Mono o Rader 14px · color ink-68
- Submit:
UiButtonprimary - Sin chat flotante ruidoso; expectativa de respuesta en meta
5.7 Cards
- Default: no cards decorativas
- Cards solo con interacción real (link, filtro, selección,
aria-pressed) - Tipologías del home:
- Glass sobre oscuro (Áreas):
color-mix(base 42%)+backdrop-filter: blur(10px)· radius ~1.5rem · hover a ~55% - Contenido sobre ink (Novedades): borde
origen 12%· fondoorigen 6%· radius--radius· hover en media - Panel-card (Scope): borde por
inset 0 0 0 1px(noborderque mueva layout) - Flotantes hero: única excepción decorativa ·
aria-hidden· composición del sticky, no contenido
- Glass sobre oscuro (Áreas):
- Elevación por borde/inset — nunca multi-shadow ni glow
5.8 Módulo de información (propuestas · v2)
Ajuste sobre la v1. No es otra marca. Si la página no trae diagrama ni dato denso, se diseña solo con v1 (Origen / Veta).
| Spec | |
|---|---|
| Superficie | --blanco #fff |
| Borde | ink-14 o inset 0 0 0 1px — sin sombra, sin glow |
| Radio | --radius 16 px digital / 8–12 pt print |
| Padding | 16–24 px (A4) · 24–40 px (16:9) |
| Anclaje | Sobre Origen o banda Veta — el blanco dentro, no al revés |
| Foco | Un nodo / serie / hito en Resalte. El resto Base · ink-68 · Veta |
| Label del dato | Supply Mono Resalte o ink-68 — el azul etiqueta el dato, no la sección |
| Kicker de página | Supply Mono Roble (sigue v1) |
| CTA / inversión | Roble + --blanco en el botón |
Máximo un panel de información focal por página. Detalle: propuestas/design-v2.md.
6. Logo
| Variante | Path (relativo al kit) | Uso |
|---|---|---|
| Negro | public/logo/negro.png | Sobre Origen, Veta, Piedra, cream |
| Blanco | public/logo/blanco.png | Sobre Base, Roble, foto oscura |
Reglas
- Monocromo únicamente (negro o blanco). Nunca teñir de Roble / filtros / degradé.
- Clear space ≥ diámetro del punto de la Q.
- No distorsionar, rotar, sesgar ni comprimir proporciones.
- No fondos ajenos a la dieta Permanencia.
7. Photography / imagery
Concepto madre: Materia + máquina — oficio (roble, papel, grano) y tecnología (pantallas, datos, campañas) en el mismo plano editorial.
Estándar operativo (fuente de verdad): estilo-fotografico.md — dos modos:
| Modo | Tesis | Texto en UI |
|---|---|---|
| Físico | Pedido/materia + dispositivo con catálogo limpio (sin ruido decorativo) | Por defecto no |
| Digital | Servicio en UI creíble sobre roble; tipografía nítida; locale Chile / CLP si hay montos | Sí cuando comunica |
Dieta común: Origen / Roble / Base — luz cream, sombra suave, una idea por frame. Agencia de marketing: oficio y resultado, no madera abstracta ni open space stock.
Capas de mood (brandbook): Camino D · Materia Digital + A Materia / B Mesa / C Pieza — recetas en PHOTO.md. No sustituyen los modos Físico/Digital en páginas de servicio o campaña.
Permanencia Servicio (/servicios/*): frames Hero · Empaque · Compra · Operación acoplados al copy + modo Físico o Digital según vertical. Ver estilo-fotografico.md §7. Assets: public/images/servicios/<slug>/.
Proveedores: el estándar es agnóstico. Registrar jobs en la carpeta del asset. Exploración en calidad baja; cierre en media-alta / ≥2k cuando tipografía importe.
7.1 Render en light y dark
Toda pieza Permanencia debe leerse en canvas claro (Origen) y en bandas ink (Base), sin inventar hex.
| Contexto | Fondo | Texto | CTA | Logo |
|---|---|---|---|---|
| Canvas claro | Origen / Veta / Roble-08 | Base / ink-85 | Roble + blanco ≥18px | negro.png |
| Banda ink | Base | Origen (+ escala §4.1) | Roble + blanco ≥18px | blanco.png |
| Foto / video hero o break | overlay / velo Base (color-mix) | Origen | Roble + blanco | blanco.png |
| Header sitio | Base | Origen | Roble + blanco | blanco.png |
Emails y PDF: asumir fondo claro; si el visor fuerza dark mode, preferir banda ink completa con Origen como texto — no grises inventados.
7.2 Gobernanza (validación)
- Permanencia es la base del nuevo framework de identidad; el brandbook HTML es presentación.
- Propuestas nuevas:
propuestas/design.md. La cadena coral (brand-voice v1.2) sigue vigente solo en deals en curso hasta migrar. - Fuente de verdad técnica: este kit. No inventar clientes, métricas ni servicios.
8. Do / Don't
| Do | Don't |
|---|---|
| Un acento Roble generoso en acción | Chip Roble “discreto” o Resalte como CTA |
| Titular de sección en Fraunces, caja normal | H2 de servicio en Formula UPPER |
| Mayúsculas solo en rótulos ≤3 palabras | Frases completas en caja alta |
Escala --fs-xs…--fs-lg · piso 11px | font-size en rem con decimales / texto a 9–10px |
| Override oscuro en ink y tech | Color de banda clara olvidado sobre espresso |
#fff solo en CTA y módulo de dato | Página / PDF / slide con canvas blanco |
| Dual tipográfico etiquetado | Fraunces en toda la UI de producto |
| Logo negro/blanco según fondo | Logo teñido o con filtros |
| Una promesa + evidencia | “IA mágica / next-level / 360” vacío |
| Hero full-bleed / sticky con un job | Dashboard clutter / badges flotantes |
| Cards solo con interacción | Cards decorativas (salvo composición hero aria-hidden) |
| Alternancia oscuro↔claro (ritmo home) | Dos bandas ink consecutivas |
| Media a sangre del contenedor | Foto inset con padding/radio flotante |
| Motion del vocabulario §4.2 | Blur-reveal genérico / glow / scrub en lectura |
Tokens desde app/assets/css/tokens.css | Hex inventados por campaña |
| Atmósfera madera / cream + ink fotográfico | Purple AI / neon / gibberish |
| Fidelidad al homepage como sistema | «Corregir» Equipo/CTA a oscuro por simetría |
9. AI implementation notes
- Este kit (
content/canon/design.md+AGENTS.md+app/assets/css/tokens.css) es la fuente de verdad instalable. - Skill Cursor (si está instalada):
oqo-permanencia-branding— buscar el kit en el workspace (oqo-permanencia,permanencia-kitobrand/). - Roles: Dev (Cursor) implementa UI/código; Comercial (Claude) escribe propuestas/copy.
- No inventar servicios, clientes, métricas, años ni headcount.
- Diseño web: un job por sección, brand-first hero, sin purple AI default.
- UI canónica: homepage (
Home*) +UiButton+ header morph — ver §4.1–5. - Español latinoamericano neutro (tuteo o impersonal; sin voseo).
10. Sitemap sugerido (oqo.cl · Permanencia)
Home
├── Servicios (hub: Estrategia · Digital · Medios · Creatividad · IA)
│ └── Servicio detalle (hero · problema · enfoque · evidencia · CTA)
├── Casos (listado + ficha)
├── Agencia (sentido · trayectoria · criterio)
├── Novedades (listado + artículo)
└── Contacto (formulario único)
Home (sistema aceptado · ver §4.1):
Hero sticky (video + cards overhang) → Trayecto (Path) → Alcance ink → Evidencia veta → Áreas sticky/cards → Equipo tren → Novedades ink → CTA paper.
Tone story · UiButton · media a sangre · motion GSAP §4.2 · header morph.
Servicio detalle: Nav + hero full-bleed (1 CTA) → problema → enfoque → features si aplica → evidencia → CTA. Titulares de sección en Fraunces, caja normal. Formula/Rader en plataformas, chips, fichas y CTA. Mono en rótulos y dato. Referencia: /servicios/ecommerce. La mitad-máquina y la mitad-materia conviven; nunca solo pantalla.
Servicios de referencia: Ecommerce, Desarrollo Web, Marketing Digital, Branding, Audiovisual, Agentes Conversacionales, Estrategia, SEO, Social Media, SFCC, Automatización, Medios, Investigación, Contenido — alinear con oqo.cl vigente; no inventar nombres nuevos.
11. File map (este kit)
Rutas relativas a la raíz de permanencia-canon. No uses rutas absolutas del disco de nadie.
| Path | Contenido |
|---|---|
content/canon/design.md | Este documento (fuente de verdad) |
content/canon/propuestas/design.md | Design system de propuestas v1 |
content/canon/propuestas/design-v2.md | Ajuste: panel blanco + Resalte |
content/canon/AGENTS.md | Mandatos Dev + Comercial |
app/assets/css/tokens.css | :root canónico: hex + --*-rgb, tipo, ritmo |
data/specs-tokens.ts | Inventario operativo de /specs |
app/pages/specs.vue | Specs: base para diseño y código |
public/logo/negro.png | Logo sobre fondos claros |
public/logo/blanco.png | Logo sobre fondos oscuros |
public/fonts/ | PP Formula, Rader, Supply Mono |
content/canon/cursor/SKILL.md | Skill Cursor de referencia |
content/canon/estilo-fotografico.md | Estándar Físico/Digital |
content/canon/PHOTO.md | Mood Camino D (subordinado) |
data/palette.ts · type-roles.ts · voice.ts | UI de capítulos |
El sitio oqo-permanencia sigue siendo la aplicación viva (oqo.cl). Este repo es el Canon: manual + verdad para agentes.
12. Arranque
cp .env.example .env
npm install
npm run dev
Skill operativa: oqo-permanencia-branding. No duplicar como permanencia-branding.