Etiqueta (con
Concepto breve ¿Por qué se usó?
traducción)
Garantiza
<!DOCTYPE html> (tipo Define el tipo compatibilidad con
de documento) de documento navegadores
modernos.
Raíz del
<html lang="es"> (html Mejora accesibilidad y
documento +
idioma español) SEO geolocalizado.
idioma
Incluye información
Contenedor de
<head> (encabezado) para buscadores y
metadatos
configuración inicial.
Permite mostrar
<meta charset="UTF-8">
Codificación de acentos y caracteres
(meta codificación
caracteres especiales
UTF-8)
correctamente.
<meta
Asegura diseño
name="viewport"...> Configuración
responsive en móviles
(meta ventana gráfica de vista
y pantallas.
adaptable)
<meta
Autor del Da crédito y mejora
name="author"...>
documento SEO.
(meta autor)
<meta
Descripción del Mejora indexación en
name="description"...>
sitio buscadores.
(meta descripción)
<meta
name="keywords"...> Palabras clave Ayuda al SEO temático.
(meta palabras clave)
Aparece en pestaña
Título de la del navegador y
<title> (título)
página resultados de
búsqueda.
<link Vincula CSS Aplica diseño visual al
Etiqueta (con
Concepto breve ¿Por qué se usó?
traducción)
rel="stylesheet"...>
formulario.
(enlace hoja de estilos)
Contenido Contiene todo lo que
<body> (cuerpo)
visible ve el usuario.
Agrupa el formulario
<main> (contenido Sección
como núcleo de la
principal) principal
página.
Envía datos a
Formulario de
<form> (formulario) FormSubmit de forma
pago
segura.
<div
Contenedor de Agrupa inputs y
class="formulario">
campos secciones.
(división formulario)
<input type="hidden"> Configuran captcha y
Campos ocultos
(entrada oculta) plantilla de envío.
<section class="seccion-
Bloque de Agrupa datos de
facturacion"> (sección
facturación dirección y contacto.
facturación)
Indica sección de
<h1> (encabezado 1) Título principal
facturación.
<div class="campo"> Contenedor de Agrupa etiqueta y
(campo) campo entrada.
Etiqueta de Mejora accesibilidad y
<label> (etiqueta)
campo claridad.
<input type="text"> Entrada de Captura nombre,
(entrada texto) texto dirección, ciudad, etc.
<input type="email"> Entrada de Captura email y valida
(entrada correo) correo formato.
<div class="grupo- Grupo de Organiza estado y
cuatro"> (grupo campos código postal juntos.
Etiqueta (con
Concepto breve ¿Por qué se usó?
traducción)
horizontal)
<section class="seccion- Agrupa datos de
Bloque de pago
pago"> (sección pago) tarjeta.
Indica sección de
<h2> (encabezado 2) Subtítulo
tarjeta.
Muestra logos de
<img> (imagen) Imagen tarjetas
tarjetas aceptadas.
Entrada
<input type="text"> Captura datos
nombre/númer
(entrada texto tarjeta) impresos en tarjeta.
o tarjeta
<div class="boton"> Contenedor Agrupa botón de
(botón) botón envío.
Botón de Envía datos del
<button> (botón enviar)
acción formulario.
<div id="modal-
Fondo de
overlay"> (superposición Modal overlay
confirmación/error.
modal)
<div id="modal-
Modal Caja con ícono y
contenido"> (contenido
contenido mensaje.
modal)
<img id="modal-icono"> Muestra estado del
Ícono modal
(imagen modal) pago (check o X).
<p id="modal-
Texto de confirmación
mensaje"> (mensaje Texto modal
o error.
modal)
Valida datos y controla
<script> (script) Script externo
modal.
Derechos de autor y
<footer> (pie de página) Pie de página
cierre.
<p> (párrafo) Texto copyright Protege autoría y
Etiqueta (con
Concepto breve ¿Por qué se usó?
traducción)
fecha.
Esto es para que lo leas y te recuerdes de
los campos como están distribuidos :
🧩 Campos <input> con validación aplicada
Justificación
Campo Etiqueta <input> completa
técnica
<input type="text" id="nombre" Campo obligatorio
Nombre
name="nombre" placeholder="Justin para identificar al
completo
Quiles" required> titular.
<input type="email" id="email"
Correo Campo obligatorio
name="email"
electrónic con validación de
placeholder="example@[Link]"
o formato email.
required>
<input type="text" id="direccion" Campo obligatorio
Dirección name="direccion" placeholder="Casa - para ubicación
Calle - Sector" required> física.
<input type="text" id="ciudad" Campo obligatorio
Ciudad name="ciudad" placeholder="Caracas" para referencia
required> geográfica.
<input type="text" id="estado" Campo obligatorio
Estado name="estado" placeholder="Venezuela" para región o
required> entidad federal.
<input type="text" id="codigo-postal"
name="codigo-postal" Campo numérico
Código
placeholder="123456" required obligatorio.
postal
maxlength="6" pattern="\d{1,6}" Máximo 6 dígitos.
inputmode="numeric">
Nombre <input type="text" id="nombre-tarjeta" Campo obligatorio
en la name="nombre-tarjeta" para validar
Justificación
Campo Etiqueta <input> completa
técnica
coincidencia con
tarjeta placeholder="Mr. Justin Quiles" required>
tarjeta.
<input type="text" id="numero-tarjeta"
name="numero-tarjeta" Campo numérico
Número
placeholder="1111222233334444" obligatorio.
de tarjeta
required maxlength="16" pattern="\ Máximo 16 dígitos.
d{16}" inputmode="numeric">
Campo obligatorio
<input type="text" id="mes-exp" para mes. Se
Mes de
name="mes-exp" placeholder="Octubre" mantiene como
expiración
required> texto por formato
variable.
<input type="text" id="anio-exp"
Campo numérico
Año de name="anio-exp" placeholder="2025"
obligatorio.
expiración required maxlength="4" pattern="\d{4}"
Máximo 4 dígitos.
inputmode="numeric">
Campo numérico
<input type="text" id="cvv" name="cvv"
obligatorio.
placeholder="123" required
Máximo 3 dígitos.
CVV maxlength="3" pattern="\d{3}"
Autocompletar
inputmode="numeric"
desactivado por
autocomplete="off">
seguridad.
ESTO ES MIO:
🧾 RESUMEN CSS: Selectores + Concepto + Justificación
Selector / Regla Concepto breve ¿Por qué se usó?
Importa fuente
Mejora legibilidad, estética
@import url(...) Poppins desde
moderna y coherencia visual.
Google Fonts
Define paleta de colores para
:root Variables globales consistencia y fácil
mantenimiento.
Selector / Regla Concepto breve ¿Por qué se usó?
Reset universal de Evita inconsistencias entre
* márgenes y navegadores y aplica fuente
paddings global.
Impide que la página se comprima
Límite mínimo de
html, body más allá de 338px en modo
ancho
inspección.
Centra el contenido vertical y
Estructura base
body horizontalmente, con fondo
centrada
oscuro.
Contenedor Define ancho máximo, padding
main principal del interno y bordes redondeados
formulario para estética y legibilidad.
main (animación Animación de Hace que el formulario aparezca
slideUp) entrada suavemente al cargar.
Agrupación de Organiza las secciones en dos
.formulario
secciones columnas en escritorio.
.seccion- Distribuye los campos
Secciones
facturacion, .secc verticalmente dentro de cada
individuales
ion-pago sección.
Contenedor de Agrupa label e input para
.campo
cada campo alineación vertical y espaciado.
.campo Estilo de foco Mejora navegación con teclado y
input:focus accesible accesibilidad.
Contenedor de
Muestra íconos de tarjetas
.tarjetas imágenes de
aceptadas en fila con separación.
tarjetas
Estilo visual de las Aplica sombra sutil para resaltar
.tarjetas img
tarjetas sobre fondo blanco.
Alinea campos como Estado,
Grupo horizontal
.grupo-cuatro Código Postal, Año Exp y CVV en
de campos
una sola fila.
Selector / Regla Concepto breve ¿Por qué se usó?
Estilo del botón Define color, tamaño, bordes y
.boton button
principal transición para interacción visual.
Cambia el color al pasar el mouse
.boton Efecto hover del
para mejorar experiencia de
button:hover botón
usuario.
Añade borde superior y tipografía
footer (mejorado) Pie de página
más discreta para elegancia.
🧾 RESUMEN JavaScript: Funciones + Concepto + Justificación
Concepto
Función / Bloque ¿Por qué se usó?
breve
Asegura que el script se
Espera carga del
DOMContentLoaded ejecute cuando todo el
DOM
HTML esté listo.
[Link]("sub Captura envío Permite validar antes de
mit") del formulario enviar datos.
Comprueba
Evita envíos con campos
Validaciones básicas nombre, email,
vacíos o incorrectos.
tarjeta y CVV
Garantiza formato
Validación más
Regex (email, tarjeta, CVV) correcto de datos
robusta
sensibles.
Muestra ícono y
Da retroalimentación clara
Modal dinámico mensaje de
al usuario.
éxito/error
setTimeout([Link], Retraso en envío Permite mostrar el modal
Concepto
Función / Bloque ¿Por qué se usó?
breve
2000) antes de enviar datos.
[Link]("cli Cierra modal al Mejora experiencia de
ck") hacer clic fuera usuario.
Cierra modal con Añade accesibilidad y
keydown Escape
tecla ESC comodidad.
YAI TUYO:
1.📌 ¿Define claramente el problema que busca resolver?
El código aborda el problema de recopilar datos de facturación y
tarjeta de forma segura y organizada. Busca resolver la necesidad
de que un usuario pueda ingresar información personal y de pago con
validaciones que eviten errores comunes (como correos inválidos,
números de tarjeta incompletos o CVV incorrectos).
🎯 Objetivo principal de la aplicación
El objetivo principal es crear un formulario de pago seguro,
accesible y validado, que permita enviar datos de manera confiable a
través de un servicio externo (FormSubmit). Además, ofrece
retroalimentación inmediata al usuario mediante un modal visual que
confirma si los datos fueron enviados correctamente o si hubo errores.
MIO:
2.✅ Justificación de la utilidad de la solución
🖥️Explicación de la UI (Interfaz de Usuario)
Botones
o El botón principal es “Enviar pago”.
o Tiene un color llamativo (morado) y cambia al pasar el
mouse (hover).
o Su función es iniciar la validación y envío del
formulario.
Campos
o Cada campo (nombre, email, dirección, tarjeta, CVV, etc.)
está acompañado de un label texto descriptivo.
o Los campos sensibles (tarjeta y CVV) tienen validaciones:
longitud fija, solo números, y en el caso del CVV se desactiva
el autocompletar.
o Esto asegura que el usuario sepa qué debe escribir y
cómo.
Mensajes (Modal)
o Al enviar, aparece una ventana modal con un ícono y un
mensaje:
✅ Éxito: “Pago completado y enviado”.
❌ Error: “Pago inválido. Verifica los campos.”
o El modal se puede cerrar haciendo clic fuera o presionando
la tecla ESC.
📌 Caso real de ejemplo para explicar en la pizarra
1. Usuario escribe mal el correo electrónico
o Ejemplo: [Link] (sin @).
o El sistema detecta que el formato no es válido.
o Resultado: aparece el modal de error con el ícono rojo ❌ y
el mensaje:
“Pago inválido. Verifica los campos.”
2. Usuario ingresa un número de tarjeta incompleto
o Ejemplo: 12345678 (solo 8 dígitos en vez de 16).
o El sistema valida la longitud y detecta el error.
o Resultado: se muestra el modal de error y el campo puede
marcarse en rojo.
[Link] corrige los datos y vuelve a enviar
Ahora escribe un correo válido y un número de tarjeta de 16
dígitos.
Resultado: aparece el modal de éxito con el ícono verde ✅ y el
mensaje:
“Pago completado y enviado”.
Después de 2 segundos, el formulario se envía correctamente a
FormSubmit.
MIO
Lista completa: JavaScript + Explicación simple
[Link]("DOMContentLoaded", () => { 👉 Espera a
que la página cargue antes de ejecutar el código.
const form = [Link]("form"); 👉 Busca el formulario
en el HTML y lo guarda en una variable.
const modal = [Link]("modal-overlay"); 👉
Selecciona la ventana modal (overlay).
const icono = [Link]("modal-icono"); 👉 Selecciona
la imagen dentro del modal.
const mensaje = [Link]("modal-mensaje"); 👉
Selecciona el texto dentro del modal.
[Link]("submit", (event) => { 👉 Detecta cuando el
usuario intenta enviar el formulario.
[Link](); 👉 Evita que se envíe automáticamente sin
validar.
const campos = { ... } 👉 Guarda los valores de nombre, email, tarjeta y
CVV en un objeto.
.trim() 👉 Elimina espacios en blanco al inicio y final del texto.
let valido = true; 👉 Variable que indica si los datos son correctos.
if (![Link] || ![Link] || ![Link] || ![Link])
{ valido = false; } 👉 Si algún campo está vacío, marca como inválido.
if ( || [Link] !== 16 ||
isNaN([Link]) || [Link] !== 3 ||
isNaN([Link])) { valido = false; } 👉 Revisa formato: email con
“@”, tarjeta con 16 números, CVV con 3 números.
[Link]("oculto"); 👉 Muestra la ventana modal.
✅ Si es válido: yainniris esto es tuyo del javacript
[Link] = "./imagenes/[Link]"; 👉 Pone ícono verde de éxito.
[Link] = "Pago completado"; 👉 Texto alternativo del ícono.
[Link] = "✅ Payment completado y enviado"; 👉 Mensaje
de confirmación.
[Link] = "[Link] 👉 Define a dónde se envían
los datos.
[Link] = "POST"; 👉 Método de envío.
setTimeout(() => [Link](), 2000); 👉 Espera 2 segundos y envía el
formulario.
❌ Si es inválido:
[Link] = "./imagenes/[Link]"; 👉 Pone ícono rojo de error.
[Link] = "Pago inválido"; 👉 Texto alternativo del ícono.
[Link] = "❌ Payment inválido. Verifica los campos."; 👉
Mensaje de error.
[Link]("click", () =>
{ [Link]("oculto"); }); 👉 Si haces clic fuera del modal, se
cierra.
}); 👉 Cierra la función principal.
MIO
Conclusión breve
El proyecto demuestra un enfoque profesional: código semántico y metadatos orientados a
SEO, estructura modular que facilita escalabilidad y evolución hacia arquitecturas seguras,
y una UX accesible que reduce errores y amplía inclusión. Las decisiones técnicas priorizan
la experiencia del usuario, la mantenibilidad del producto y la protección de datos —
requisitos imprescindibles para cualquier pasarela de pagos seria.
Cierre para la presentación
Gracias por el trabajo conjunto: con estas bases pueden defender el diseño ante auditorías
técnicas y comerciales; el siguiente paso es integrar tokenización con una pasarela
certificada y completar las pruebas de seguridad y accesibilidad. Buen trabajo, Emmanuel y
compañera — listos para la implementación.