productsTrae tus productos sin complicaciones
Gestiona tus envíos desde China hasta tu destino en un solo lugar. Más claridad, más control y cero sorpresas.
Mobile · splash, onboarding y auth
logo-source.mjs guarda el wordmark como cinco paths, uno por letra. El splash de la app no dibuja la marca: la arma — la m entra por la izquierda, la o cae desde arriba, la g cruza desde la derecha, la o sube desde abajo, la s se descuelga; convergen con ease-spring y stagger de 60 ms, cae el punto rojo, se dibuja la regla y aparece «Importamos futuro». La misma coreografía, comprimida a 1,4 s, es la placa que tapa la latencia del login. Detrás vienen veinticinco pantallas a 390 × 844: cuatro slides de onboarding con escenas de marca y las once puertas con la aurora de noche arriba y los campos del producto abajo.
Hoy apps/mobile-client tiene un AnimatedSplash que hace aparecer el isotipo y ya. La app nueva hace otra cosa: las cinco letras del wordmark son cinco paths distintos en tools/logo-source.mjs, y eso permite animarlas una por una desde el vector real, sin redibujar nada y sin que check-logo.mjs tenga de qué quejarse.
Cada letra entra desde fuera del marco, en su propia dirección y con su propio giro de entrada, y converge con ease-spring y stagger de 60 ms. Cuando las cinco aterrizan, un destello celeste marca el golpe; cae el punto rojo desde arriba, se dibuja la regla --grad-marca con scaleX y aparece «Importamos futuro» en Oswald. Es la marca hecha movimiento: traer cosas de lejos y que lleguen a su sitio.
Mogos Group · China y USA → Venezuela
Restaurando tu sesión…
m entra por la izquierda con −9°, la primera o cae desde arriba, la g cruza desde la derecha, la segunda o sube desde abajo y la s se descuelga en diagonal. Las traslaciones van en unidades del viewBox (1500 unidades ≈ 386 px): la letra arranca de verdad fuera del teléfono.
Los keyframes están escritos en porcentaje sobre una variable --T. El splash de arranque usa 4600 ms de ciclo (2,2 s de coreografía + reposo antes de repetir); la placa de sesión usa 3500 ms, con lo que el tag termina de entrar exactamente en el piso de 1,4 s que fija la spec Aurora. Un solo bloque de CSS, dos tiempos.
Cae 250 unidades desde arriba con ease-spring cuando las cinco letras ya están puestas. Es el gesto que la marca ya tiene en el link-in-bio y en la placa de la web: se conserva idéntico para que se reconozca.
Un radial de celeste al 42 % escala de 0,6 a 1,35 y se apaga entre el 20 % y el 44 % del ciclo. No es un efecto: es lo que hace que la convergencia se lea como un golpe y no como cinco cosas que se acomodan.
Mientras supabase-js lee el secure store y decide (onboarding → login → app), la pantalla es la misma placa ya terminada con una barra determinada abajo y «Restaurando tu sesión…». Cero salto, cero segundo logo. Si la restauración tarda menos que el piso, se espera al piso.
Con AccessibilityInfo.isReduceMotionEnabled las letras no viajan: el wordmark entero aparece con un fade de 260 ms, el punto y la regla salen puestos, los glows no derivan y el piso baja a 600 ms. Se ve la marca, no el truco.
Izquierda: el splash corriendo (recarga la página para verlo otra vez). Derecha: la pantalla de carga, que es el mismo fotograma final con la barra abajo — congelada aquí a 2,60 s para poder mirarla.
Una animación se mira, no se asume: seis instantes del mismo --T, congelados con un delay negativo.
0,00 smarco vacío
0,38 sentran m y o
0,64 scruza la g
1,02 saterrizan · destello
1,33 spunto + regla
1,90 scompleto
El copy es el de la cantera, literal (ONBOARDING_SLIDES, con sus tramos en negrita). Lo que cambia es la ilustración: en vez de las cuatro fotos de stock de apps/mobile-client, cada slide lleva una escena construida con los tokens sobre la noche de marca — el avión que hace la ruta Cantón → Caracas, el riel de estados con el nodo vivo, la estantería del almacén, las burbujas del acompañamiento. Cuatro JPG no son un sistema; cuatro escenas sí, y se pueden animar.
Al deslizar, la escena viaja a 0,4× del gesto y el texto a 1×: el parallax es lo que hace que cuatro pantallas se sientan un recorrido y no cuatro pantallas. Los puntos de paso se estiran a pastilla en el activo (260 ms). Omitir está arriba a la derecha con área de toque de 44 px desde el primer slide — nadie queda encerrado en el recorrido.
productsGestiona tus envíos desde China hasta tu destino en un solo lugar. Más claridad, más control y cero sorpresas.
trackingRevisa el estado, aprobaciones y actualizaciones de tus paquetes cuando quieras, desde tu celular.
warehouseNo solo enviamos. También almacenamos. Guarda tus envíos o cualquier mercancía en un espacio seguro.
supportAccede a tutoriales, misiones y sesiones 1:1 para aprender y aprovechar al máximo cada envío.
El avión viaja por el mismo arco que dibuja la línea punteada: la curva es su recorrido, no un adorno detrás. Con offset-rotate:auto se inclina solo — sale de Cantón mirando arriba, cruza el ápice horizontal y entra a Caracas mirando abajo, sin un keyframe de rotación. Ciclo de 5,4 s, entra y sale con un fade para que el bucle no salte. En nativo: getPointAtLength() del path con react-native-svg + Reanimated, o Path.getPosTan() de Skia; la cadena de la curva es la misma.
42 × 3 px de --grad-marca sobre el título. Es la firma de la casa: la misma que abre los correos, la placa y las cabeceras de auth. Cuatro slides sin ella serían cuatro pantallas cualesquiera.
En el cuarto el botón se reserva el espacio pero se apaga: no hay nada que saltar, y la única acción es Comenzar. Se conserva el hueco para que el título no salte de posición entre slides.
La bandera vive en expo-secure-store (MMKV para lo no sensible). El gate de index.tsx decide onboarding → login → app. Se corrige de paso la deuda de la cantera: RESET_ONBOARDING = true quedó encendido en mobile-client.
El texto va sobre --marino-deep, no sobre la foto: el cuerpo en rgba(255,255,255,.84) da 12,4:1 y el título en blanco 16,7:1. Era el problema real de la versión con fotografía, donde el contraste dependía de qué imagen tocara.
La spec Aurora ya decía qué pasa en móvil: «el panel del client colapsa y la aurora queda como acento del header». Aquí está, medido para 390: cabecera de 300 px con --grad-hero, los dos glows a la deriva (celeste 12 s, lima 16 s, en alternate) y el barco del manual al 7 %; debajo, una hoja clara de radio 14 que muerde la aurora 20 px y sostiene los campos del producto tal cual los definió MF-01. En las pantallas de trabajo largo (registro, OTP, perfil) la cabecera baja a 148 px: la marca sigue presente, pero manda el formulario.
El clic en Iniciar sesión dispara a la vez la petición y la placa. La placa tiene piso de 1,4 s: la latencia se esconde detrás de la marca y el tiempo percibido es uno, no dos. Si falla, la placa se retira en 240 ms, el error aparece bajo el campo y el foco vuelve al correo — nunca queda una celebración colgada sobre un login que no ocurrió.
/loginImportamos futuro
De la fábrica en Cantón a tu puerta en Caracas, en una sola pantalla.
Bienvenido de nuevo. Entra y sigue tus envíos.
¿Aún no importas con nosotros? Crea tu cuenta
BrandPlate · piso 1,4 sImportamos futuro
De la fábrica en Cantón a tu puerta en Caracas, en una sola pantalla.
Bienvenido de nuevo. Entra y sigue tus envíos.
signInWithIdTokenImportamos futuro
De la fábrica en Cantón a tu puerta en Caracas, en una sola pantalla.
Bienvenido de nuevo. Entra y sigue tus envíos.
Hoja del sistema de @react-native-google-signin.
Radio 14 arriba y una sombra 0 −12px 32px rgba(1,18,58,.28) — marino, no negro, como el resto de superficies elevadas de la capa de marca. Esos 20 px de solape son lo que hace que la pantalla se lea como una sola cosa y no como dos bloques apilados.
La puerta ofrece correo y contraseña y Continuar con Google. Nada más: no hay Sign in with Apple (decisión de Fabrizio, sección 12). Con un único botón de OAuth, el separador «o» separa dos caminos de verdad y la misma pantalla sirve igual en iOS y en Android — sin condicionales de plataforma.
La hoja nativa de Google se traga la pantalla: cualquier coreografía que empiece ahí se pierde. El formulario baja a .42 de opacidad con saturación .7 y el botón queda ocupado. La placa espera en /auth/continue, que es donde de verdad se abre la sesión.
La placa es aria-hidden y decorativa. Lo que lee el lector de pantalla es un aria-live="polite": «Iniciando sesión…», y el mensaje de error si falla. Con reduced motion no hay placa: el botón conserva su spinner y se navega directo.
La placa del centro está congelada a 1,50 s — la coreografía completa, que es lo que se ve mientras la sesión termina de abrirse. En vivo se ve entera cada vez que se recarga la sección 01.
El reparto real de la web (no el del brief): el paso 1 pide nombre, apellido, correo, país + teléfono, términos y notificaciones; el paso 2 es solo la contraseña con su checklist de seis reglas. Se replica así, con la cabecera corta de 148 px y el paso en la esquina — Paso 1 de 2, cifras tabulares.
El banner de referido se resuelve con ?code= o con el deep link mogosapp://register?code=, consulta promotions/by-code y se queda en first-touch. Va encima del formulario, en marino con el halo de lima: es la única mancha de lima en un formulario de toda la familia, y por eso se ve.
/registerComencemos. Completa los detalles a continuación para crear tu cuenta.
CARLOS10¿Ya tienes cuenta? Inicia sesión
password-fields.tsxPara finalizar, crea una contraseña segura que cumpla con los requisitos de seguridad.
Al crear tu cuenta te enviamos un código a tu correo.
Flecha de vuelta de 36 px (con hitSlop de 8 → 52 px de área real) sobre un lavado blanco al 8 %, wordmark reducido a 86 px y Paso 1 de 2 a la derecha. La hoja clara empieza directamente con el título: cero chrome repetido dentro del área de trabajo.
Las seis reglas de lib/password-validation.ts se marcan en vivo mientras se escribe, en verde de producto. Es la misma lista que usa reset-password y activate: una sola fuente para las tres pantallas.
MF-01 ya lo decidió: Select abre en hoja inferior con las filas de SelectItem. Con bandera, prefijo y buscador — 200+ países no caben en un menú flotante de 390 px.
Crear la cuenta abre sesión, así que ahí sí va la coreografía (spec Aurora §2). En el paso 1 no: ahí el botón mantiene su spinner y ya. Evento user_signed_up al volver.
El OTP de auth es el que fijó MF-01: 44 × 48, radio 11, tinta marino, foco celeste-deep con anillo al 18 % y la caja levantada 1 px, cursor parpadeante. Inválido en rojo con anillo al 14 % y sacudida de 160 ms. Nada de eso es el InputOTP agrupado de shadcn: ese queda para códigos fuera de auth.
Lo único que cambia entre correo y WhatsApp es la pastilla de canal —dónde llegó el código y a qué dirección o número— y el texto del reenvío. El cooldown va en cifras tabulares para que el número no baile mientras baja.
users/me/verify-emailIntroduce el código enviado a tu correo. Si no lo encuentras, revisa spam o toca «Volver a enviar».
¿No te llegó? Reenviar en 42 s
users/me/verify-phone-otpIntroduce el código enviado por WhatsApp. Si no lo encuentras, verifica que recibiste el mensaje.
Código inválido
Reenviar código
En iOS textContentType="oneTimeCode" y en Android el SMS Retriever / lectura de portapapeles: el código entra solo desde la notificación de WhatsApp o del correo, y las seis cajas se llenan de una. Si eso pasa, se verifica sin tocar Continuar.
El bloque OTP queda por encima del pliegue del teclado numérico (≈ 291 px en iPhone 15) y el botón sube con KeyboardAvoidingView. Es la razón de que la cabecera aquí sea de 148 px y no de 300.
Se muestra el contador, no un botón apagado sin explicación: «Reenviar en 42 s» en cifras tabulares y, al llegar a cero, «Reenviar código» en enlace. Al reenviar, las cajas se vacían y el foco vuelve a la primera.
Las seis cajas se ponen en rojo con el mensaje debajo, pero el código sigue ahí: casi siempre es un dígito mal leído, no el código entero. Sacudida de 160 ms y haptic notificationError.
El enlace de recuperación que manda Supabase apunta a la web, no a la app: los universal links llegan en MF-14. Hasta entonces el camino principal es el código inline — se pide el correo, llega un OTP y la contraseña se cambia sin abrir el navegador. El enlace sigue existiendo y funciona, pero no es el camino que la pantalla propone.
/forgot-passwordIntroduce el correo electrónico vinculado a tu cuenta y te enviaremos un código para recuperar el acceso.
alternativeCodeOptionIngresa el código de 6 dígitos que recibiste en tu correo.
Reenviar código
/reset-passwordElige una contraseña que cumpla con los seis requisitos.
Los tres estados de reset-password que la web ya tiene —«Verificando el enlace…», «Enlace no válido» con Solicitar un enlace nuevo, y el formulario— se heredan tal cual: el primero es un Skeleton sobre la hoja clara, el segundo un Alert destructivo con un solo botón.
Quien ya era cliente de Mogos v1 no se registra: activa. Tres pantallas —bienvenida, código, contraseña nueva— con la cabecera larga de 300 px, porque aquí la marca sí tiene que hablar: la persona ya conoce Mogos y lo que necesita es entender por qué le piden algo. El correo llega enmascarado desde auth/migration-status, y si no es el suyo hay una salida a soporte por WhatsApp con el mensaje ya escrito.
welcomeImportamos futuro
Tu cuenta de siempre, en la app nueva.
Mogos tiene una nueva versión. Para mantener tu cuenta segura, necesitamos que confirmes tu identidad y crees una nueva contraseña.
Te enviaremos un código de 6 dígitos a:
a•••@importadoraluz.com
verify-codeIngresa el código de 6 dígitos que enviamos a a•••@importadoraluz.com.
Reenviar código en 27 s
set-passwordCrea una contraseña para tu cuenta. La usarás para iniciar sesión a partir de ahora.
Al terminar entras directo: aquí sí aparece la placa.
Correo, teléfono, cédula y dirección. El stepper vive arriba de la hoja clara con la barra de progreso de la web, y cada paso tiene su Saltar: se puede entrar a la app con el perfil a medias y volver después. Entre paso y paso hay una StepSuccessTransition de 640 ms —un anillo celeste con el check— que da la sensación de avance sin cambiar de pantalla.
En modo migration los campos llegan pre-cargados de la cuenta v1 y cada uno lleva la pastilla «De tu cuenta anterior» en celeste: se ve de un vistazo qué escribió la persona y qué trajo el sistema. El paso 4 —la dirección— tiene sección propia, porque tiene mapa.
emailPara garantizar la calidad y seguridad de nuestros servicios de envío, necesitamos verificar tu información.
Reenviar código
migrationTe enviaremos un código por WhatsApp para confirmarlo.
documentLo necesitamos para la nacionalización de tus envíos.
640 msLo necesitamos para la nacionalización de tus envíos.
Pasando al siguiente paso…
ghost a ancho completo debajo del primario. Si la persona no tiene la cédula a mano, la salida está a la vista y con 44 px de alto: esconderla no consigue el dato, consigue abandonos.
Los pasos hechos quedan en azul con el check y se puede volver a ellos; los pendientes están en gris y no responden. El label accesible es «Progreso de registro» y cada paso anuncia completado / paso actual / pendiente.
Pastilla en celeste-soft con tinta celeste-ink (AA sobre ese fondo). El campo sigue siendo editable: el dato viejo es una sugerencia, no un candado.
El velo blanco al 96 % vive dentro de la hoja clara; la cabecera de marca y el stepper se siguen viendo. Así el avance se lee sin que la pantalla parezca haber cambiado de sitio.
En la web, capturar una dirección es un modal con el mapa dentro. En un teléfono eso es al revés: el mapa es la pantalla —a sangre, de borde a borde— y el formulario es una hoja inferior en tres alturas (colapsada 132 px → media 420 → completa). Así el mapa nunca queda del tamaño de un sello, que es lo que pasa cuando se porta el diálogo tal cual.
El pin no se arrastra: está clavado en el centro de la pantalla y lo que se mueve es el mapa debajo, con su sombra en el suelo. Es el gesto que la gente ya conoce de cualquier app de entrega, se hace con el pulgar y no exige puntería. Al soltar, geocoding/reverse devuelve la dirección y la hoja se actualiza; mientras tanto dice «Actualizando ubicación…», y si no hay resultado, «Ubicación seleccionada (sin detalle)» con el camino manual a mano.
locations/countries|states|citiesUbicación detectada
Av. Francisco de Miranda, Los Palos Grandes,
Caracas 1060, Miranda
address-capture · el kitCompletionConfirmationImportamos futuro
Ya podemos llevarte cosas.
Tu cuenta está lista. Esta es la dirección que registraste:
Podrás agregar más direcciones desde tu perfil.
El mapa no es superficie de marca y no hay token para él: se representa con los grises del producto (tierra gray-100, manzanas gray-50, vías blancas), el agua en celeste-soft y los parques en lima-soft. Es on-system y se lee como el mapa que va a salir con PROVIDER_GOOGLE. Las miniaturas —la de la tarjeta de confirmación— son Static Maps por expo-image, no un mapa montado.
132 px para leer la dirección y seguir; 420 px para el kit completo; completa cuando el teclado sube. La hoja arrastra con el pulgar y el mapa sigue vivo detrás — en un modal, no.
Casa pide «N° o nombre de la casa»; apartamento pide edificio, torre, piso y apto; oficina, centro empresarial y local; almacén, nombre del galpón y n° de portón. El alias se sugiere solo según el tipo y se puede cambiar. Es el mismo mapa de campos de la web, sin recortar.
Si Google Maps no carga, la web ya lo dice: «No es posible guardar una dirección sin mapa». En nativo igual — con Reintentar y, si el permiso de ubicación está denegado, un atajo a los ajustes del sistema. Nunca se guarda una dirección sin coordenadas.
Tres pantallas que cierran la familia. /auth/continue es donde la placa cobra sentido en OAuth: la sesión se abre al volver de Google, no al tocar el botón. El modal de bienvenida usa los cuatro slides de la web (onboarding.slides.*) — que no son los mismos del recorrido pre-sesión: uno enseña la marca, el otro enseña el producto, y los dos se conservan. Y access-denied no es un error del producto: es la última pantalla de la puerta, con dos salidas reales.
/auth/continueAbriendo tu sesión…
onboarding.slides.*Descubre lo que puedes hacer en la plataforma
Rastrea tus envíos en tiempo real
Sigue cada paquete desde China hasta tu puerta. Recibe notificaciones automáticas en cada etapa del camino.
/access-deniedLa app de Mogos es para clientes. Tu cuenta ana@mogosgroup.com es de operaciones: entra por el panel de administración en la web.
Bajo la coreografía, la cuenta que volvió de Google en una pastilla de vidrio y «Abriendo tu sesión…». Es el único sitio donde la placa lleva texto además del tag: en OAuth la persona acaba de elegir entre varias cuentas y necesita ver cuál entró.
Hoja alta sobre el velo rgba(2,27,84,.70) con el dashboard atenuado detrás: se entiende que ya se está dentro. Cuatro slides, Omitir arriba a la derecha, y la escena en marino dentro de una tarjeta — la marca visita el producto, no lo repinta.
Nombra la cuenta que falló y el motivo (cuenta de operaciones, no de cliente). Salir a otra cuenta, o escribirnos con el mensaje ya redactado. Nunca un «no tienes permiso» sin nombre ni salida.
Aquí la aurora ocupa las 844 px: es la pantalla donde no hay formulario que sostener y donde el tono tiene que cambiar. El mismo recurso que la spec Aurora reserva para la puerta de admin.
Todo lo que se ve en esta página es CSS porque el estudio es HTML; en la app es Moti sobre Reanimated, que es el stack cerrado en MF-01. Esta tabla es el puente: cada coreografía con su duración, su curva y la forma que toma en nativo. Las duraciones salen de la escala del estudio (80 / 160 / 260 / 420 / 640) que MF-01 dejó como pregunta abierta; si Fabrizio prefiere los ms literales de la web, se cambia el token y esta tabla se recalcula sola.
| Coreografía | Dónde | Duración | Curva | En nativo |
|---|---|---|---|---|
| Convergencia de las 5 letras | splash | 720 ms · stagger 60 | ease-spring | MotiView por letra sobre react-native-svg <Path>; withSpring damping 12 · stiffness 120 |
| Caída del punto rojo | splash · placa | 500 ms | ease-spring | translateY −64 → 0 con withDelay |
| Trazo de la regla | splash · placa · slides | 450 ms | ease-out | scaleX 0 → 1, transformOrigin izquierda |
| Destello de aterrizaje | splash | 640 ms | ease-out | MotiView con opacity + scale; radial con expo-linear-gradient |
| Deriva de los glows | aurora, todas las puertas | 12 s / 16 s | ease-out · alternate | withRepeat(withTiming, −1, true); se apaga con reduced motion |
| Entrada / salida de la placa | login · continue · registro · activate | 180 / 240 ms | ease-out / in-out | AnimatePresence con exit; piso de 1,4 s con Promise.all([auth, sleep]) |
| Parallax de la escena | onboarding | sigue al gesto | — | useAnimatedScrollHandler · interpolate a 0,4× del offset |
| Punto de paso a pastilla | onboarding · bienvenida | 260 ms | ease-out | withTiming sobre width |
| Press de botón y fila | toda la familia | 160 ms | ease-out | scale .95 (filas .98) + Haptics.impactAsync(Light) |
| Foco de caja OTP | verify-otp · whatsapp · activate | 160 ms | ease-out | borderColor + translateY −1; cursor con withRepeat |
| Error de OTP | verify-otp · whatsapp | 160 ms | ease-in-out | withSequence ±6 px · notificationAsync(Error) |
| Transición entre pasos | complete-profile | 640 ms | ease-spring | velo MotiView + anillo con scale 0,8 → 1 |
| Hoja inferior · tres alturas | dirección · país · action sheets | abre 420 · cierra 260 | ease-out / in-out | @gorhom/bottom-sheet con snap points 132 / 420 / 92 % |
| Atenuación por OAuth | login | 260 ms | ease-out | opacity 1 → .42 sobre el contenedor del formulario |
Con AccessibilityInfo.isReduceMotionEnabled se apagan las cuatro primeras filas y el parallax; la marca aparece con un fade de 260 ms, los glows quedan quietos y el piso de la placa baja a 600 ms. Nada de esto cambia lo que se puede hacer, solo cómo llega.
Las cinco letras entran desde fuera del marco y convergen con ease-spring y stagger de 60 ms. Se descarta el ascenso escalonado del link-in-bio (correcto pero ya visto) y el trazo dibujado (los paths son formas rellenas: el stroke se ve grueso y falso).
Los keyframes van en porcentaje sobre --T: 4600 ms el splash de arranque, 3500 ms la placa —con lo que el piso cae exacto en 1,4 s, el que fija la spec Aurora. Un solo bloque de código para las dos.
Aurora de 300 px en las puertas (login, OAuth, activate, confirmación), 148 px en el trabajo largo y 844 px solo en access-denied. La hoja clara muerde 20 px, radio 14, sombra a marino.
Dentro de la hoja todo es Contexto B verbatim de MF-01. Cero campos de vidrio sobre la noche: sería un segundo sistema de formulario que mantener, y la web no lo tiene.
Cuatro escenas con los tokens en vez de las cuatro fotos de stock de la cantera. Copy literal de onboarding-data.ts; parallax a 0,4× del gesto. Contraste medido sobre la noche, no sobre una foto que cambia.
El recorrido pre-sesión (4 slides de la cantera, marca) y el modal post-registro (4 slides de la web, producto) son piezas distintas y las dos se conservan. Mismo lenguaje visual, distinto trabajo.
signInWithIdToken con @react-native-google-signin (DECISIONS #14, sin la parte de Apple). La hoja del sistema se traga la pantalla: la placa vive en /auth/continue, con la cuenta que volvió a la vista.
react-native-maps + PROVIDER_GOOGLE a sangre, pin fijo al centro con el mapa moviéndose debajo, hoja inferior en tres alturas. Miniaturas por Static Maps con expo-image. Sin mapa no se guarda dirección.
Paso 1: nombre, apellido, correo, país + teléfono, términos, notificaciones. Paso 2: solo la contraseña con su checklist. Es lo que renderiza register-step1.tsx / step2.tsx hoy, que es la verdad (DECISIONS #3).
El enlace de Supabase apunta a la web hasta MF-14. La pantalla propone el OTP; el enlace sigue funcionando pero no es lo que se ofrece.
Decisión de Fabrizio (2026-09-01): la app no ofrece Apple. Ni botón, ni flag, ni el botón apagado que la web arrastra en register/page.tsx. OAuth es solo Google. La cláusula 4.8 de la App Store se revisa cuando la app vaya a salir (MF-15), no aquí: en MF-02 no hay nada que esconder detrás de una condición.
onboarding-1..4.jpg de apps/mobile-client quedan sin uso con las escenas vectoriales. ¿Se van en MF-17 con el resto de la cantera, o alguna se recicla (tutoriales, landing, correos)?
Las dos preguntas que dejó MF-01 ya están cerradas: Fabrizio eligió el 2026-08-30 las sombras tintadas a marino —con el FAB en su índigo— y la escala de duraciones del estudio (80/160/260/420/640). Esta pieza usa las dos, así que por ese lado no queda nada abierto.