diff --git a/controladores/concierto_zonas.php b/controladores/concierto_zonas.php
new file mode 100644
index 0000000..881d12d
--- /dev/null
+++ b/controladores/concierto_zonas.php
@@ -0,0 +1,44 @@
+<?php
+include 'conexion.php';
+
+header('Content-Type: application/json');
+error_reporting(E_ALL);
+ini_set('display_errors', 1);
+
+if (!isset($_GET['id'])) {
+    echo json_encode(["error" => "No se proporcion贸 un ID de concierto"]);
+    exit;
+}
+
+$conciertoId = intval($_GET['id']);
+
+$consulta = "SELECT nombre_zona, capacidad, precio FROM zonas WHERE id_concierto = ? ORDER BY FIELD(nombre_zona, 'General', 'Plata', 'Oro', 'VIP')";
+
+$stmt = $conexionBD->prepare($consulta);
+if (!$stmt) {
+    echo json_encode(["error" => "Error en la preparaci贸n de la consulta: " . $conexionBD->error]);
+    exit;
+}
+
+$stmt->bind_param('i', $conciertoId);
+$stmt->execute();
+$resultado = $stmt->get_result();
+
+$zonas = [];
+while ($fila = $resultado->fetch_assoc()) {
+    $zonas[] = [
+        'nombre_zona' => $fila['nombre_zona'],
+        'capacidad' => $fila['capacidad'],
+        'precio' => $fila['precio']
+    ];
+}
+
+if (empty($zonas)) {
+    echo json_encode(["error" => "No se encontraron zonas para este concierto"]);
+} else {
+    echo json_encode($zonas, JSON_PRETTY_PRINT);
+}
+
+$stmt->close();
+$conexionBD->close();
+?>
\ No newline at end of file
diff --git a/css/zonas.css b/css/zonas.css
new file mode 100644
index 0000000..6e2a65d
--- /dev/null
+++ b/css/zonas.css
@@ -0,0 +1,101 @@
+.mapa-estadio {
+    position: relative;
+    width: 600px;
+    height: 500px;
+    background-color: #f0f0f0;
+    border-radius: 50% 50% 0 0;
+    margin: auto;
+    display: flex;
+    justify-content: center;
+    align-items: flex-end;
+    flex-direction: column;
+    overflow: hidden;
+}
+
+.escenario {
+    position: absolute;
+    bottom: 0;
+    left: 50%;
+    transform: translateX(-50%);
+    width: 100%;
+    height: 140px;
+    background-color: black;
+    color: white;
+    text-align: center;
+    line-height: 60px;
+    font-weight: bold;
+    border-radius: 10px 10px 0 0;
+}
+
+.zona {
+    position: absolute;
+    cursor: pointer;
+    text-align: center;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    font-weight: bold;
+    color: white;
+    border-radius: 50% 50% 0 0;
+}
+
+.general {
+    background-color: gray;
+    width: 100%;
+    height: 40%;
+    bottom: 10%;
+    left: 0;
+    border-radius: 50% 50% 0 0;
+}
+
+.plata {
+    background-color: silver;
+    width: 80%;
+    height: 30%;
+    bottom: 20%;
+    left: 10%;
+    border-radius: 50% 50% 0 0;
+}
+
+.oro {
+    background-color: gold;
+    width: 60%;
+    height: 25%;
+    bottom: 30%;
+    left: 20%;
+    border-radius: 50% 50% 0 0;
+}
+
+.vip {
+    background-color: purple;
+    width: 40%;
+    height: 20%;
+    bottom: 10%;
+    left: 30%;
+    border-radius: 50% 50% 0 0;
+}
+
+.selected { border: 3px solid red; }
+
+.asientos-container {
+    display: none;
+    margin-top: 20px;
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: center;
+}
+
+.asiento {
+    width: 30px;
+    height: 30px;
+    margin: 5px;
+    display: inline-block;
+    text-align: center;
+    line-height: 30px;
+    border-radius: 5px;
+    cursor: pointer;
+    background-color: green;
+    color: white;
+}
+
+.asiento.seleccionado { background-color: orange; }
\ No newline at end of file
diff --git a/js/conciertos.js b/js/conciertos.js
index 4f44c17..0494e1f 100644
--- a/js/conciertos.js
+++ b/js/conciertos.js
@@ -110,7 +110,7 @@ async function cargarConciertos(filtro = "") {
                     <p class="card-text">馃師 ${concierto.capacidad_total} Asistentes</p>
                     ${zonasHTML}
                 </div>
-                <button class="btn-comprar">Comprar Boletos</button>
+                <button class="btn-comprar" data-id="${concierto.id}">Comprar Boletos</button>
             `;
 
             // Evento para editar
@@ -124,6 +124,11 @@ async function cargarConciertos(filtro = "") {
                 mostrarModalConfirmacion(id);
             });
 
+            tarjeta.querySelector(".btn-comprar").addEventListener("click", (e) => {
+                const id = e.target.dataset.id;
+                window.location.href = `ventaBoletos.html?id=${id}`;
+            });
+
             listaConciertos.appendChild(tarjeta);
             tarjetas.push(tarjeta);
         });
diff --git a/js/crearConciertos.js b/js/crearConciertos.js
index fc892ed..82abb6a 100644
--- a/js/crearConciertos.js
+++ b/js/crearConciertos.js
@@ -9,28 +9,39 @@ document.addEventListener("DOMContentLoaded", () => {
 
         if (paso === 3) {
             capacidadTotal = parseInt(document.getElementById("capacidad_total").value) || 0;
-            document.getElementById("capacidad_disponible").textContent = capacidadTotal;
+            const capacidadDisponible = document.getElementById("capacidad_disponible");
+            if (capacidadDisponible) {
+                capacidadDisponible.textContent = capacidadTotal;
+            }
         }
     }
 
     function actualizarCapacidad() {
         let asignado = 0;
         ["capacidad_general", "capacidad_plata", "capacidad_oro", "capacidad_vip"].forEach(id => {
-            asignado += parseInt(document.getElementById(id).value) || 0;
+            const input = document.getElementById(id);
+            if (input) {
+                asignado += parseInt(input.value) || 0;
+            }
         });
 
         const restante = capacidadTotal - asignado;
-        document.getElementById("capacidad_disponible").textContent = restante < 0 ? "Excede la capacidad total" : restante;
+        const capacidadDisponible = document.getElementById("capacidad_disponible");
+        if (capacidadDisponible) {
+            capacidadDisponible.textContent = restante < 0 ? "Excede la capacidad total" : restante;
+        }
     }
 
     formulario.addEventListener("submit", async (event) => {
         event.preventDefault();
 
-        if (parseInt(document.getElementById("capacidad_disponible").textContent) < 0) {
+        const capacidadDisponible = document.getElementById("capacidad_disponible");
+        if (capacidadDisponible && parseInt(capacidadDisponible.textContent) < 0) {
             mensajeDiv.innerHTML = '<div class="alert alert-danger">Error: La suma de capacidades de zonas no puede exceder la capacidad total.</div>';
             return;
         }
 
+        // 馃敼 Construir objeto JSON con todas las zonas
         const datosConcierto = {
             nombre_concierto: document.getElementById("nombre_concierto").value.trim(),
             artista: document.getElementById("artista").value.trim(),
@@ -40,10 +51,59 @@ document.addEventListener("DOMContentLoaded", () => {
             numero_direccion: document.getElementById("numero_direccion").value.trim(),
             codigo_postal: document.getElementById("codigo_postal").value.trim(),
             estado: document.getElementById("estado").value.trim(),
-            capacidad_total: capacidadTotal
+            capacidad_total: capacidadTotal,
+            zonas: [
+                {
+                    nombre_zona: "General",
+                    capacidad: parseInt(document.getElementById("capacidad_general").value) || 0,
+                    precio: parseFloat(document.getElementById("precio_general").value) || 0
+                },
+                {
+                    nombre_zona: "Plata",
+                    capacidad: parseInt(document.getElementById("capacidad_plata").value) || 0,
+                    precio: parseFloat(document.getElementById("precio_plata").value) || 0
+                },
+                {
+                    nombre_zona: "Oro",
+                    capacidad: parseInt(document.getElementById("capacidad_oro").value) || 0,
+                    precio: parseFloat(document.getElementById("precio_oro").value) || 0
+                },
+                {
+                    nombre_zona: "VIP",
+                    capacidad: parseInt(document.getElementById("capacidad_vip").value) || 0,
+                    precio: parseFloat(document.getElementById("precio_vip").value) || 0
+                }
+            ]
         };
 
-        mensajeDiv.innerHTML = '<div class="alert alert-success">Concierto registrado correctamente.</div>';
+        console.log("Enviando datos:", JSON.stringify(datosConcierto)); // Depuraci贸n
+
+        try {
+            const respuesta = await fetch("controladores/insertar_concierto.php", {
+                method: "POST",
+                headers: {
+                    "Content-Type": "application/json"
+                },
+                body: JSON.stringify(datosConcierto)
+            });
+
+            const resultado = await respuesta.json();
+            console.log("Respuesta del servidor:", resultado); // Depuraci贸n
+
+            if (!resultado.insercionCorrecta) {
+                throw new Error(resultado.error || "Error al guardar el concierto");
+            }
+
+            mensajeDiv.innerHTML = '<div class="alert alert-success">Concierto registrado correctamente.</div>';
+
+            setTimeout(() => {
+                window.location.href = "ventanaConciertos.html";
+            }, 2000);
+
+        } catch (error) {
+            console.error("Error:", error);
+            mensajeDiv.innerHTML = `<div class="alert alert-danger">Error: ${error.message}</div>`;
+        }
     });
 
     window.siguientePaso = siguientePaso;
diff --git a/js/ventaBoletos.js b/js/ventaBoletos.js
new file mode 100644
index 0000000..6f859fc
--- /dev/null
+++ b/js/ventaBoletos.js
@@ -0,0 +1,67 @@
+document.addEventListener("DOMContentLoaded", async () => {
+    const urlParams = new URLSearchParams(window.location.search);
+    const conciertoId = urlParams.get("id");
+    if (!conciertoId) {
+        alert("No se encontr贸 el ID del concierto.");
+        return;
+    }
+    
+    try {
+        const respuesta = await fetch(`controladores/concierto_zonas.php?id=${conciertoId}`);
+        if (!respuesta.ok) throw new Error("Error al cargar las zonas del concierto");
+        
+        const zonas = await respuesta.json();
+        cargarZonas(zonas);
+    } catch (error) {
+        console.error(error);
+        alert("Error al cargar los datos del concierto");
+    }
+});
+
+function cargarZonas(zonas) {
+    const container = document.getElementById('zonas-container');
+    container.innerHTML = "";
+
+    zonas.forEach(zona => {
+        let div = document.createElement('div');
+        div.classList.add('zona', zona.nombre_zona.toLowerCase());
+        div.textContent = `${zona.nombre_zona} - ${zona.capacidad} asientos - $${zona.precio}`;
+        div.onclick = function() {
+            document.querySelectorAll('.zona').forEach(el => el.classList.remove('selected'));
+            div.classList.add('selected');
+            mostrarAsientos(zona.capacidad);
+        };
+        container.appendChild(div);
+    });
+}
+
+function mostrarAsientos(capacidad) {
+    const asientosContainer = document.getElementById('asientos-container');
+    asientosContainer.innerHTML = "";
+    asientosContainer.style.display = "flex";
+    
+    for (let i = 0; i < capacidad; i++) {
+        let asiento = document.createElement('div');
+        asiento.classList.add('asiento');
+        asiento.textContent = i + 1;
+        asiento.onclick = function() {
+            asiento.classList.toggle('seleccionado');
+        };
+        asientosContainer.appendChild(asiento);
+    }
+}
+
+document.getElementById("confirmarSeleccion").addEventListener("click", () => {
+    let selectedZona = document.querySelector('.zona.selected');
+    if (!selectedZona) {
+        alert("No has seleccionado ninguna zona.");
+        return;
+    }
+    let selectedAsientos = document.querySelectorAll('.asiento.seleccionado');
+    if (selectedAsientos.length === 0) {
+        alert("No has seleccionado ning煤n asiento.");
+        return;
+    }
+    let asientosSeleccionados = Array.from(selectedAsientos).map(asiento => asiento.textContent);
+    alert(`Zona seleccionada: ${selectedZona.textContent}\nAsientos: ${asientosSeleccionados.join(', ')}`);
+});
diff --git a/ventaBoletos.html b/ventaBoletos.html
index a0605fb..3450ec5 100644
--- a/ventaBoletos.html
+++ b/ventaBoletos.html
@@ -3,50 +3,45 @@
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Registro de Conciertos</title>
-    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
-    <link rel="stylesheet" href="css/ventanaPrincipal.css">
+    <title>Compra de Boletos</title>
+    <script src="https://cdn.tailwindcss.com"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
+    <script defer src="js/ventaBoletos.js"></script>
+    <link rel="stylesheet" href="css/conciertos.css">
+    <link rel="stylesheet" href="css/zonas.css">
 </head>
 <body>
-    
-    
-    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
-        <div class="container-fluid">
-            <a class="navbar-brand" href="ventanaPrincipal.html">TicketFei</a>
-            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
-                <span class="navbar-toggler-icon"></span>
-            </button>
-            <div class="collapse navbar-collapse" id="navbarNav">
-                <ul class="navbar-nav me-auto">
-                    <li class="nav-item">
-                        <a class="nav-link active" href="ventanaPrincipal.html">Conciertos</a>
-                    </li>
-                    <li class="nav-item">
-                        <a class="nav-link" href="#">Reporte Ventas</a>
-                    </li>
-                    <li class="nav-item">
-                        <form class="d-flex">
-                            <input class="form-control me-2" type="search" id="buscadorColaborador" placeholder="Buscar concierto" aria-label="Buscar">
-                            <button class="btn btn-outline-light" type="submit" id="buscadorBoton">
-                                <i class="bi bi-search"></i>
-                            </button>
-                        </form>
-                    </li>
-                    
-                </ul>
-                <button class="btn btn-danger" id="cerrarSesion">Cerrar Sesi贸n</button>
-                
-            </div>
+
+    <nav>
+        <a href="ventanaInsertarConcierto.html" class="navbar-brand">TicketFei</a>
+        <div class="nav-links">
+            <a href="ventanaInsertarConcierto.html">Crear Conciertos</a>
+            <a href="ventanaConciertos.html">Ver Conciertos</a>
+            <a href="#">Reporte Ventas</a>
+        </div>
+        <div class="search-container">
+            <input type="search" id="buscadorColaborador" placeholder="Buscar...">
+            <button id="buscadorBoton">Buscar</button>
         </div>
     </nav>
 
-
-    <div class="container mt-5">
-        
-        
+    <div class="container mt-4 text-center">
+        <h2>Selecciona tu zona</h2>
+    </div>
+
+    <div class="mapa-estadio">
+        <div class="escenario">ESCENARIO</div>
+        <div class="zona general" onclick="seleccionarZona('General')">General</div>
+        <div class="zona plata" onclick="seleccionarZona('Plata')">Plata</div>
+        <div class="zona oro" onclick="seleccionarZona('Oro')">Oro</div>
+        <div class="zona vip" onclick="seleccionarZona('VIP')">VIP</div>
+    </div>
+
+    <div id="asientos-container" class="asientos-container"></div>
+
+    <div class="text-center mt-3">
+        <button class="btn btn-primary" id="confirmarSeleccion">Confirmar selecci贸n</button>
     </div>
 
-    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
-    <script src="js/conciertos.js"></script>
 </body>
-</html>
+</html>
\ No newline at end of file