Ontikos · Sistema de funcionamiento · v1

Cómo se divide el espacio,
cómo se despliega lo que pasa en él.

Veintiocho reglas de estructura y comportamiento, cada una con su verificación. Ninguna nombra un negocio. Este documento no describe un producto: describe el sistema sobre el que se montan los productos. RetiCash es el primero, y es el que las puso a prueba.

28reglas, en cuatro pliegos
7ganadas · pasaron la operación real
8declaradas · leídas de la referencia, aún sin probar
13en deriva · el producto hoy no las cumple

De dónde sale esto

De dos fuentes y una asimetría.

Interactive Brokers puso el marco: cinco franjas, tres columnas, un panel de contexto permanente que no cambia al cambiar de pestaña, cifras en dos niveles, barra de estado, vistas con nombre. Carbon puso las superficies y el aire: la rejilla de 16 columnas, la escala tipográfica, las piezas, la densidad. Las dos son sistemas de container-row-column con cortes de mínimo; la lógica es la misma máquina.

La asimetría es ésta: ninguna de las dos documenta el armazón de terminal. El «Ratio» de IB —que es Bootstrap— cubre sus sitios de marketing, su registro y sus portales; su sección de componentes de portal tiene tres piezas. TWS, que es lo que uno admira, no está en el sistema. Carbon cubre la barra y el riel, no la división del espacio de trabajo.

Por eso este documento existe

Lo que faltaba no era elegir entre dos sistemas: era escribir el que ninguno de los dos escribió. Y escribirlo con la disciplina que impide que se desvanezca — cada regla con su verificación, y cada verificación diciendo si hoy pasa o falla.

El axioma

La disposición es dato, no estado de usuario.

IB deja que el operador arme su escritorio: divisores arrastrables, pestañas que se abren y cierran, disposiciones guardadas. Aquí no. El que usa esto tiene a alguien enfrente, no una estación de trabajo que configurar.

La marca de estado

Ontikos fracasó cuatro veces como sistema de diseño, y siempre por la misma razón: se escribió como ideal antes de que nada hubiera operado. Éste se escribe al revés — sale de algo que operó. Para que no vuelva a pasar, cada regla lleva su marca, y la marca es dura:

Ganada

Pasó la operación real en un producto, y su verificación corre y da verde. Es la única marca que autoriza a copiar la regla a otro producto sin volver a pensarla.

Declarada

Se leyó de la referencia o se dedujo del sistema, pero todavía no la probó nadie operando. Vale como plano; no vale como evidencia.

En deriva

La regla es correcta y el producto hoy no la cumple. No se borra la regla: se deja en rojo hasta que el producto la alcance.

Nada entra a Ontikos sin verificación que corra. Una regla sin comprobación es una opinión con número, y de eso ya hubo cuatro versiones.

Pliego I · El espacio

Cómo se divide un viewport en regiones

Cuatro piezas de vocabulario. Todo lo demás del sistema se dice con estas cuatro palabras.

Armazón

El marco fijo: barra, riel, estado. Vive fuera de la rejilla y nunca se mueve.

Región

Una división del viewport restante. Declara su ancho en columnas y es dueña de su scroll.

Panel

Lo visible de una región: barra de título más cuerpo. Es la unidad que puede llevar pestañas.

Contenido

Lo que va dentro del cuerpo. Ahí manda la rejilla de documento, con su aire.

01 El armazón nunca baja Sólo las regiones tienen scroll. La página, como página, no se mueve nunca. Es la única regla del tronco común: rige los dos sistemas, el de varias regiones y el de una sola.Ganada
✓ Bien
Trabajo

Barra, riel y estado quedan. El scroll ocurre dentro de la región, y se ve dónde.

✗ Mal

La barra se fue hacia arriba y el estado desapareció: un documento estirado.

VerificaciónscrollingElement.scrollTop === 0 en todo momento, y la barra de estado visible a cualquier alto de contenido.
02 Una región declara su ancho en columnas, no en píxeles El borde de toda región cae sobre un borde de columna de la rejilla. Un ancho en píxeles es una grilla inventada con otro nombre.En deriva
✓ Bien
Lista
Trabajo
Contexto

3 · 8 · 5 de las 16. Cada borde coincide con una línea de la rejilla.

✗ Mal
Lista · 296 px
Trabajo

296 px cae entre dos columnas. Ese resto es el que después obliga a inventar márgenes para taparlo.

Verificación cero anchos en px en la declaración de regiones; y medido, cada borde de región coincide con un borde de columna con tolerancia 0.
03 Una región se divide sólo en el eje contrario al de su padre Si el padre partió en columnas, el hijo parte en filas. Es lo que mantiene la rejilla legible al mirarla.Declarada
✓ Bien
Lista
Trabajo
Detalle
Contexto

Corte vertical arriba, horizontal adentro. Los bordes siguen alineados de arriba abajo.

✗ Mal
Lista
Trabajo
Extra
Contexto

Vertical dentro de vertical: cuatro bandas y ninguna jerarquía.

Verificación estática sobre el archivo de disposición: ninguna región comparte eje con su padre.
04 Profundidad máxima de división: dos Es la diferencia entre una terminal legible y una confusa, y no es de color ni de tipografía. La vista de cotización de IB es profundidad 1. Su espacio de mosaico es 2 y ya cuesta más. Más abajo, se pierde.Declarada
✓ Bien

profundidad 1  ·  profundidad 2

✗ Mal

profundidad 3

Nadie puede decir de un vistazo dónde termina una cosa y empieza la otra.

Verificación profundidad máxima del árbol declarado ≤ 2, contada sobre el archivo.
05 Toda región lleva un panel, y todo panel lleva barra de título Nada flota. Un rótulo suelto sobre un bloque no dice dónde empieza ni dónde termina lo que nombra.En deriva
✓ Bien
Pendientes
Últimos movimientos

El título está dentro del borde: nombra un recinto, no una zona vaga.

✗ Mal
Pendientes
Últimos movimientos

Rótulos flotando sobre bloques sin recinto. Al segundo ya no se sabe si el rótulo abre o cierra.

Verificación cero regiones sin panel; cero rótulos de bloque fuera de una barra de título.
06 Las pestañas cambian el cuerpo, nunca la región En la vista de cotización de IB, cinco pestañas mueven la columna del centro y dejan el panel de contexto intacto. Lo que cambia es el material para decidir, no la acción.Declarada
✓ Bien

Tres pestañas, un mismo rectángulo de contexto. La acción está siempre en el mismo lugar.

✗ Mal

El contexto se encoge y en la tercera desaparece. Hay que volver atrás para poder actuar.

Verificación al recorrer todas las pestañas de una vista, el getBoundingClientRect() de la región de contexto no cambia en ningún valor.
07 Dentro del cuerpo manda la rejilla de documento La región no es una excusa para colocar a mano. Adentro se reestablece la rejilla —subrejilla— y el contenido se alinea a ella.Declarada
✓ Bien
Trabajo · subrejilla de 8

Cuatro tarjetas, dos bloques, una tabla. Todo cae en las mismas líneas.

✗ Mal
Trabajo

Cada fila arranca en un sitio distinto. Prolijo por bloque, desordenado por columna.

Verificación todo cuerpo declara subrejilla; cero anchos absolutos dentro de un cuerpo.
08 Al angostar, las regiones se pliegan en un orden declarado, y la que lleva la acción se pliega última La columna de contexto no es un lujo del ancho máximo: es la que permite actuar.En deriva
✓ Bien

ancho máximo  ·  medio  ·  mínimo de terminal

La lista se pliega primero y pasa a pestaña. El contexto —y por lo tanto la acción— se queda.

✗ Mal

Se salvó la lista y se perdió la acción. Ya no se puede cerrar una operación sin abrir otra cosa.

Verificación el orden de plegado está declarado, y la región que contiene la acción primaria es la última de esa lista. Comprobado a los cuatro anchos.

Pliego II · El despliegue

Qué pasa cuando algo se abre

Una apertura cobra. Lo que cobra tiene que valer lo que impide.

Todo lo que se abre le quita al usuario una parte de lo que estaba viendo. Elegir la superficie es elegir cuánto se le quita. La pregunta no es «¿qué se ve mejor?», sino ¿qué pierde de vista mientras esto está abierto, y lo necesitaba?

Las cinco superficies

Región de contexto

no cobra nada

Ya está en pantalla. Seleccionar la llena. No aparece nada nuevo.

En sitio

no cobra nada

La fila crece donde está. Nada se corre salvo lo que viene debajo.

Anclada

cobra poco

Pegada a lo que la abrió. Efímera: se va al elegir o al tocar afuera.

Cajón

cobra su región

Entra por el borde de su región, no de la pantalla.

Modal

cobra todo

Impide todo lo demás. Vale sólo cuando seguir sin decidir sería un error.

La tabla que decide

No hay que discutirlo cada vez. Lo que se abre determina la superficie.

Lo que se abreSuperficiePor qué
El detalle de algo seleccionadoRegión de contextoya está en pantalla y no cuesta nada
Un menú de opciones de un elementoAncladaefímera, y hay que ver de qué elemento es
Filtros de una listaEn sitio, sobre la listapertenecen a la región y hay que ver el efecto
Un formulario de varios camposCajón en su regiónnecesita espacio, no necesita bloquear
Confirmar algo irreversibleModalseguir sin decidir sería el error
Un aviso que no exige acciónEn línea, en la regióninforma sin interrumpir
Una condición que impide operarCompuerta sobre la regióncubre y ofrece el acto que desbloquea · no un banner con los controles vivos debajo
El resultado de una acción ya hechaAviso pasajero sobre el armazónno hay nada que decidir; se va solo

La compuerta: una corrección que vino del producto

Esta fila decía «banner de la región». El documento del primer producto ya tenía la regla mejor resuelta y ganada: el bloqueo no es un aviso, es una compuerta. Un banner deja los controles vivos debajo, y un control que no va a funcionar no debe poder tocarse. La compuerta cubre su región y ofrece el acto que desbloquea. Se corrigió aquí, no allá — es la disciplina funcionando en la dirección que importa: lo que operó gana sobre lo que se dedujo.

09 Seleccionar no abre nada Elegir una fila llena la región de contexto. Es el movimiento por omisión y debería cubrir la mayor parte de lo que el usuario hace en un día.En deriva
✓ Bien

La lista no se movió, el rectángulo de contexto tampoco. Sólo cambió lo que hay dentro.

✗ Mal

Mirar un registro cobra la pantalla entera. Es lo que hace hoy el producto.

Verificación seleccionar no crea ninguna superficie nueva, y el getBoundingClientRect() de la región de contexto no cambia.
10 Toda apertura ocurre dentro de la región que la disparó Una superficie no puede exceder su región. La única excepción es el modal, y es excepción declarada, no descuido.Declarada
✓ Bien

El cajón entra por el borde de su región. La lista y el contexto siguen a la vista.

✗ Mal

Salió de su región, tapó el contexto y hasta la barra. Ya no se sabe para quién se está llenando el formulario.

Verificación el rectángulo de toda superficie abierta está contenido en el de su región. Excepción única: las marcadas modal en la disposición.
11 El modal es uno solo, y confirma lo irreversible Si bloquear no está justificado por una consecuencia que no se puede deshacer, no es un modal. Es la superficie más cara del sistema y hay que gastarla bien.En deriva
✓ Bien

Una pregunta y dos salidas. Detrás no hay nada que el usuario pueda seguir haciendo, y así debe ser.

✗ Mal

Ver, filtrar y editar también bloquean. Cuando todo bloquea, bloquear no significa nada y se confirma sin leer.

Verificación se cuentan los modales por vista; cada uno debe terminar en una acción declarada como irreversible. Un modal que sólo muestra, no pasa.
12 Nada tapa el dato que la decisión necesita En IB la boleta de orden va al lado del gráfico, nunca encima. Un formulario que tapa aquello sobre lo que uno decide obliga a recordar en vez de mirar.Declarada
✓ Bien

El formulario y el dato que lo justifica están en pantalla al mismo tiempo.

✗ Mal

Cayó justo sobre la cifra que hay que copiar. El usuario cierra, mira, vuelve a abrir.

Verificación con la superficie abierta, todo dato citado por sus campos sigue visible. Se comprueba caso por caso, no por clase.
13 Profundidad de apertura: uno Nada se abre sobre algo abierto. Es la regla 04 en el otro eje: si hace falta un segundo nivel, la primera superficie estaba mal elegida.Declarada
✓ Bien

Un nivel. Para llegar a otra decisión, primero se resuelve ésta.

✗ Mal

Modal sobre modal. Ya no se sabe qué cierra qué, ni qué queda a medio hacer si se cancela.

Verificación cero superficies abiertas mientras otra lo está. Un contador basta: nunca pasa de 1.
14 El disparador queda visible, y se cierra por donde se abrió Lo que abrió una superficie tiene que seguir en pantalla mientras está abierta. Es el hilo de vuelta.Declarada
✓ Bien

La fila que abrió el cajón queda marcada y a la vista. Esc o volver a ella lo cierran.

✗ Mal

El disparador quedó tapado. Sin marca ni hilo de vuelta, cerrar es adivinar.

Verificación el disparador conserva rectángulo visible y marca de estado mientras la superficie está abierta; Esc y el propio disparador la cierran.
15 Entra por su propio borde, en un movimiento Nada aparece de la nada y nada viaja por la pantalla. Un solo eje, y por debajo del umbral en que el ojo tiene que seguir la cosa: 240 ms.Ganada
✓ Bien

Sale del borde donde va a quedarse. El ojo ya sabe dónde mirar antes de que termine.

✗ Mal

Nace en un lugar y termina en otro. El usuario persigue la superficie en vez de leerla.

Verificación duración ≤ 240 ms, desplazamiento en un solo eje, y el origen del movimiento sobre el borde donde la superficie queda. Cero apariciones instantáneas y cero traslados.
16 La acción primaria no se abre: está Lo que uno vino a hacer no se invoca. Si la acción principal de una vista vive detrás de una apertura, la vista está mal armada.En deriva
✓ Bien

Las dos acciones están en pantalla desde que la vista abre. Cero clics para poder actuar.

✗ Mal

Menú, después cajón, y recién ahí el botón. Dos aperturas para hacer lo único que la pantalla existe para hacer.

Verificación en toda vista de trabajo, la acción primaria es alcanzable sin abrir ninguna superficie. Se mide en clics: 0 para llegar a ella.

Pliego III · La frontera

Dónde cambia la gramática

La frontera no es un corte más de la rejilla: es donde cambian las reglas que gobiernan.

Los otros cortes refluyen contenido dentro de un mismo sistema —tres columnas pasan a dos, una tarjeta se angosta—. Éste no reordena nada. Antes de él manda el sistema de una región; después, el de varias. Por eso es uno solo y por eso hay que declararlo.

mínimo
Una región
refluye
Una región
FRONTERA
Varias regiones
refluye
Varias regiones
máximo
Varias regiones
sistema de una regiónsistema de varias regiones

Cuatro cortes, una sola frontera. Los demás refluyen dentro de su sistema; sólo uno cambia de sistema.

17 Hay una frontera, y una sola Un único ancho en que cambia el sistema, declarado en un solo lugar y leído desde ahí por el CSS y por el JS. Dos fronteras no son un matiz: son una tercera gramática que nadie diseñó y por lo tanto nadie probó.En deriva
✓ Bien

Un solo umbral. De un lado un sistema entero; del otro, el otro entero. No hay estado intermedio que probar.

✗ Mal

La del medio no es ninguna de las dos: riel y barra de estado del sistema de varias regiones, encima de un contenido que baja.

Verificación un único valor de frontera en el código; cero reglas del sistema de varias regiones fuera de él.
18 El cruce es reversible y no deja estado Ir y volver devuelve exactamente lo mismo. Si el regreso difiere, algo del otro sistema se quedó pegado y va a aparecer después, sin que nada lo explique.En deriva
✓ Bien

a3f1 → … → a3f1

✗ Mal

a3f1 → … → c0b9

Volvió con un bloque menos. Un plegado automático se comió un aviso al cruzar.

Verificación se toma la huella del DOM en el ancho mínimo, se cruza al máximo y se vuelve. Las dos huellas deben ser idénticas, en ambos sentidos.
19 Ninguna regla cruza Cada regla declara a qué sistema pertenece, y su implementación vive dentro del media query de ese sistema. Una regla que aplica a los dos lados es una regla que nadie verificó en uno de ellos.En deriva
✓ Bien
@media (max-width: FRONTERA - .02){ /* una región */ .fila { … } } @media (min-width: FRONTERA){ /* varias regiones */ .region { … } }

Cada regla se puede probar en un solo lado. Tocar un sistema no puede mover el otro, y se sabe sin leer el código.

✗ Mal
.panel { gap: 16px } ← los dos lados @media (min-width: FRONTERA){ .region .pieza { display:none } ↑ apunta a algo que no existe hasta más ancho }

Arriba, una regla sin sistema: al tocarla se movió el ritmo del otro lado. Abajo, una regla declarada que no aplica a nada.

Verificación estática: cero selectores de un sistema fuera de su media query, en ambas direcciones. Tiene que dar 0.
20 Lo que cruza es el contenido, nunca la disposición Los dos sistemas comparten todo lo que dice qué es la cosa, y no comparten nada de lo que dice dónde va.Ganada
✓ Cruza

Los fichas de color · la escala tipográfica · el vocabulario de estados · las palabras de la interfaz · los datos y la capa de servicio · la ontología: qué entidad, qué acción, qué pregunta responde la pantalla.

✗ No cruza

Las regiones · las superficies y su costo · el orden de plegado · el riel · la barra de estado · el cajón · la profundidad de división. Nada de esto significa lo mismo del otro lado, y varias cosas ni siquiera existen ahí.

Verificación el conjunto de fichas y el vocabulario de estados es idéntico a ambos lados; y ningún nombre de región aparece en el sistema de una región.
21 Un ancho de cero no decide nada La frontera se cruza midiendo el ancho real, nunca el dispositivo ni el agente. Y una medición que da cero no es «el chico»: es que no se pudo medir. Ante eso, no se decide.Ganada
✓ Bien
ancho = medir() si ancho === 0: no decidir nada volver a medir si ancho ≥ frontera: varias regiones si no: una región

La medición sin resultado se distingue de la medición chica. Son cosas distintas y se tratan distinto.

✗ Mal
si ancho ≥ frontera: varias regiones si no: una región ↑ un panel oculto informa 0 y la disposición se desarma sola

Costó un desbordamiento inexistente y unos gráficos dibujados en blanco: el panel oculto informaba ancho 0 y cero cuadros de animación.

Verificación ninguna decisión de gramática se toma con ancho 0; y la decisión no consulta el agente de usuario en ningún punto — se busca la cadena y tiene que dar cero apariciones.

Pliego IV · La región única

El sistema del lado angosto

No es el otro sistema con menos columnas. Es otro sistema, y tratarlo como una degradación es el error que produce interfaces estiradas.

Aquí el armazón también es fijo. Lo que cambia es que cuelga una sola región.

Es el hallazgo que reordenó este documento: la regla 01 no pertenece al sistema de varias regiones. Un armazón fijo con una región que baja ya la cumplía, y la cumplía antes de que existieran estos pliegos. La regla 01 es del tronco común.

Y el costo se mide distinto. En varias regiones lo caro es tapar el dato. Aquí tapar es normal y barato: lo caro es perder el lugar. Se mide en gestos para volver, no en superficie cubierta.

En sitio
0
gestos para volver
Hoja inferior
1
toca fuera y vuelve
Pantalla empujada
1
si el «atrás» funciona
Modal
1 + decidir
no se sale sin resolver
22 Una sola región, enmarcada por el armazón fijo Barra arriba, región al medio, barra de alcance abajo; las dos barras no bajan y respetan el área segura del aparato.Ganada
.armazon { flex-shrink:0; padding: calc(env(safe-area-inset-top) + n) … } .region { flex:1; overflow-y:auto; min-height:0 } .alcance { flex-shrink:0; padding-block-end: calc(env(safe-area-inset-bottom) + n) }

El área segura contemplada arriba y abajo es lo que evita que la barra de alcance quede debajo del indicador del aparato.

VerificaciónscrollingElement.scrollTop === 0 a cualquier alto de contenido; las dos barras visibles siempre.
23 Lo caro es perder el lugar, no tapar Toda superficie tiene una salida visible y devuelve al mismo punto de scroll. Tapar entero es aceptable; no saber cómo volver, no.En deriva

La salida suele estar —una cruz arriba a la derecha, y el velo que se toca—. Lo que casi nunca está garantizado es la vuelta al mismo punto: la región se repinta y el usuario aterriza arriba, en una lista por la que ya había bajado.

Verificación abrir y cerrar cada superficie devuelve el mismo scrollTop de la región, con tolerancia 0 px.
24 El alcance manda: navegación, acción y aviso viven abajo Lo que se toca está en el tercio inferior. Lo que sólo se lee puede estar arriba.Ganada
.nav { order: último } ← navegación abajo .pie .boton { flex: 1 } ← botones al pie, ancho completo .aviso { bottom: … } ← el aviso también abajo .nav .destino { flex: 1 1 0 } ← los destinos, ancho parejo

Los destinos se reparten el ancho en partes iguales: ninguno queda más difícil de acertar que otro.

Verificación el rectángulo de la acción primaria cae dentro del tercio inferior en todas las vistas de trabajo.
25 La hoja sube desde abajo La misma superficie es hoja inferior de un lado y ventana centrada del otro. Cambia de forma al cruzar la frontera, y eso está bien: es la regla 20 funcionando. Lo que no puede es cambiar en otro ancho.En deriva
.velo{ align-items: flex-end } ← hoja, sube desde abajo @media(min-width: otro umbral){ align-items:center } ← ventana centrada @media(min-width: otro más){ align-items:center } ← otra vez, 39 px después

La regla estaba bien pensada desde el principio. Lo que se fue de norma es dónde cambia: en dos umbrales, y ninguno es la frontera.

Verificación la hoja cambia de forma en la frontera declarada y en ningún otro ancho.
26 Una sola orientación, y está defendida Si el producto se diseñó vertical, el horizontal no se tolera a medias: se declara y se bloquea con una pantalla que lo dice.Ganada
@media (orientation: landscape) and (max-width: …){ body::before{ content: "Gira tu dispositivo"; position:fixed; inset:0; … } }

Es la regla más inusual del sistema y la más firme. Al lado ancho no le aplica: allá el ancho es el material de trabajo.

Verificación en la orientación no soportada, la pantalla de bloqueo cubre todo y ninguna vista queda operable por debajo.
27 Cada sistema tiene su escala de esquina, y son distintas Un lado puede ser redondo y el otro recto. Las dos están bien; lo que no está bien es que una de las dos no sea una escala.En deriva
14
12
16
99
8
10
6
5
18
11
9
7
4
3
2
13

Diecisiete radios distintos medidos en el producto de referencia, contra dos del otro lado. Eso no es una escala redonda: es una acumulación de decisiones sueltas tomadas en momentos distintos.

Y corrige a quien verifica. Medir un lado contra la norma del otro produce falsos rojos. Cada sistema declara la suya, y sólo dentro de ella se juzga.

Verificación cada sistema declara su escala de esquina y ningún radio queda fuera de ella. Meta para el lado redondo: de 17 valores a 4.
28 Cambiar de vista es navegar Cada vista es una entrada de historia, y el gesto de «atrás» del aparato vuelve a la anterior. Es el gesto más usado del lado angosto.En deriva
.vista { display:none } .vista.activa { display:flex } ← se conmuta, no se navega history.pushState({guard1}) ← dos marcadores, no dos vistas history.pushState({guard2}) onpopstate → confirm("¿Salir?") ← el gesto se intercepta

Las vistas se encienden y se apagan; no entran en la historia. Y lo que sí entra son dos marcadores de guarda, puestos para que el gesto de atrás pregunte si uno quiere salir. O sea: el gesto no está sin implementar — está implementado al revés de esta regla, y cuesta un diálogo cada vez.

La guarda resuelve un problema real —salirse sin querer— pero lo resuelve interceptando en vez de navegando. Con vistas apiladas, el mismo gesto haría lo que el usuario espera y la guarda sólo haría falta en la primera.

Verificación desde la tercera vista, el gesto de atrás devuelve a la segunda y después a la primera, sin salir.

Piezas · la primera

El proceso: un compromiso que atraviesa hitos

Es la única pieza que entra a Ontikos por ahora, y entra porque los dos sistemas de referencia le guardan sitio por separado: Carbon la tiene como Progress Indicator; «Ratio» de IB tiene Progress Steps entre los tres únicos componentes de su sección de portal.

Cuando dos sistemas que no se hablan reservan lugar para la misma pieza, la pieza no es de un negocio. Lo que sigue son tres negocios distintos con la misma pieza, sin una línea de CSS de diferencia entre ellos.

Seguros · colocar una póliza
Cotizada12 mar · 09:41
Emitidafalta la firma del tomadorvence en 3 d
Pagada
Vigente
La póliza está emitida y sin firmar.
Quedan tres días de vigencia de la cotización. Envíe el enlace de firma al tomador.

Hitos y palabras del producto. Forma, estados y plazo del sistema.

ERP genérico · entregar un producto
Pedido02 sep · 16:20
Preparado03 sep · 08:05
Despachadoen ruta · guía 44-8812
Entregado
El pedido va en ruta.
Confirme la recepción cuando el transportista reporte la entrega.

Cuatro hitos, sin plazo: no todo compromiso lo tiene, y el que no lo tiene no lo muestra.

RetiCash · registrar una orden
Solicitada14:02
Precio congelado1.042 · USD 4.20011 min
Cobrada en caja
El precio está congelado y corre el plazo.
Quedan once minutos. Envíe al cliente a caja o libere el precio.

Tres hitos. Los mismos estados, la misma marca, el mismo plazo — y el negocio no aparece en ninguna clase.

El cuarto estado · el compromiso que no se cumplió
Solicitada11:30
Precio congeladovenció sin cobrovencido
Cobrada en caja
El plazo venció y la orden no se cobró.
Vuelva a cotizar al precio vigente si el cliente sigue interesado.

Fallido no es un color más: es un estado del compromiso, y el mensaje sigue terminando en verbo.

Lo que se dejó afuera al generalizarla

La versión que operó en RetiCash hace tres cosas que no viajan, y conviene tenerlas escritas para que no vuelvan a entrar:

Lo que hacíaPor qué se queda en el producto
El hito actual pulsaEl pulso pide una atención que el hito no necesita. Ninguno de los dos sistemas de referencia anima su indicador de proceso.
Conector de 3 px redondeadoCarbon usa 1 px recto. El grosor era peso visual sin información.
El hito activo se tiñe según compra o ventaEs vocabulario del cambio de divisa. Una póliza no tiene lado.

Cómo se evita la contradicción que tuvimos hoy

La pieza vive en proceso.css, un solo archivo. Este documento la importa y la muestra; el documento del producto la importa y sólo declara sus hitos y sus palabras. Ninguno de los dos la redacta dos veces — que es exactamente lo que permitió que la compuerta fuera falsa en un documento y verdadera en el otro durante media tarde.

Verificación medido: las cuatro muestras las dibuja el mismo proceso.css · cero clases de negocio · cero colores literales fuera del bloque de fichas · un solo umbral, en la frontera · cero animaciones. Sin medir: la geometría y el cambio de orientación en navegador — el panel no ejecuta scripts sobre archivos locales, así que queda declarado, no comprobado.

El reparto

 Una regiónVarias regiones
Armazónfijo, no baja nunca  ·  tronco común · regla 01
Regionesunadeclaradas, de 2 a 4
Quién manda el altoel viewport, de los dos lados
Navegaciónbarra de alcance, abajoriel con rótulo, al costado
Superficiesen sitio · hoja · pantalla empujada · modalcontexto · en sitio · anclada · cajón · modal
Lo caroperder el lugar · se mide en gestostapar el dato · se mide en superficie
Esquinasu propia escalasu propia escala
Reglas01 · 22 – 2801 – 16
La frontera17 – 21

Estado de las verificaciones

Corrido contra el código que sirve producción del primer producto. Esta tabla la reescribe verificar.py; si envejece, es porque nadie la corrió — y eso también se ve.

ReglaComprobaciónFechaResultado
17Hay una frontera, y una sola4 sep 2026 2 umbrales de terminal · 1056 · 1312
17Ancho de la tierra de nadie4 sep 2026 256 px en total · 1056–1311 px (256)
19Ninguna regla cruza · reglas inertes4 sep 2026 5 regla(s) declaradas antes de que exista la región · nace en 1312 px
Umbrales que deciden algo en la plataforma4 sep 2026 12 umbrales distintos · 400 · 430 · 520 · 560 · 561 · 600 · 671 · 860 · 900 · 1055 · 1056 · 1312
02Regiones declaradas en columnas, no en píxeles4 sep 2026 4 en píxeles · #rc-menu → 78px · .bnav.cds--side-nav--rail: → 74px · .bnav.cds--side-nav.cds--s → 78px
21La gramática no consulta el agente de usuario4 sep 2026 cero en el compositor · 2 en core.js, ajenos a la disposición
21Un ancho de cero no decide nada4 sep 2026 guarda presente en el compositor
27Escala de esquina por sistema4 sep 2026 una región: 17 valores (meta 4) · varias regiones: 0
28Cambiar de vista es navegar4 sep 2026 el gesto atrás está interceptado para preguntar si salir, no para volver a la vista anterior
Pieza · proceso: de sistema, no de negocio4 sep 2026 sin literales · sin negocio · 1 umbral (1055 px) · sin animación
Pieza · proceso: una sola implementación4 sep 2026 dos implementaciones · carbon/linea.css aún dibuja: marca · conector · estados · animación
01El armazón nunca baja · navegador4 sep 2026Cumple en una región; en varias, sin medir
06Las pestañas no mueven la región · navegadorNo aplica todavía: no hay pestañas de región
16La acción primaria no se abre · navegador4 sep 2026No cumple: registrar orden exige abrir un panel
18El cruce es reversible · navegador4 sep 2026Huella de ida y vuelta sin comparar
23Vuelta al mismo punto de scroll · navegadorSin medir
Pieza · proceso: geometría y orientación · navegadorSin medir · el panel no ejecuta scripts sobre archivos locales

Cómo se monta un producto sobre esto

Ontikos no trae colores, ni tipografía, ni componentes. Trae la casa; cada producto pone los muebles.

Lo pone OntikosLo pone el producto
El armazón y las regionesQué va en cada región
Las cinco superficies y su costoQué se abre en cada una
La frontera y su reversibilidadEn qué ancho cae, y por qué
Que haya escala de esquina, de color y de tipografíaLos valores de cada escala
Que cada pantalla responda una pregunta y habilite una acciónCuál es la pregunta y cuál la acción
Que toda regla traiga verificaciónQue la verificación corra en su tubería

La disciplina que impide la quinta versión

Este sistema existe porque los cuatro intentos anteriores se escribieron como ideal antes de que nada operara. Éste sale al revés: de un producto que operó. Para que no se repita, la regla de entrada es dura y no admite excepción —

Nada entra a Ontikos sin una verificación que corra y un producto donde haya pasado. Una regla sin comprobación es una opinión con número. De las veintiocho, hoy sólo siete están ganadas; las otras veintiuna llevan su marca a la vista, y no se pueden citar como evidencia hasta que la pierdan.