/* ============================================================ DOS OCÉANOS — Datos de la carta, fechas especiales y logística Edita aquí precios, platos, zonas de domicilio y promociones. ============================================================ */ const WA = "573023839789"; // WhatsApp del restaurante window.PHOTOS = { "Arroz Marinero": "uploads/Arror Marinero-de03a71e.png", "Bocachico": "uploads/Bocachico-efb82860.png", "Mojarra": "uploads/Mojarra-f5e2ef68.png", "Picuda": "uploads/Picuda-69561e5c.png", "Ceviche de camarón": "uploads/Ceviche de camaron.png", "Pasta de Camarón": "uploads/Pasta Marinera.png", "Bagre marinero": "uploads/Bragre Marinero-40f4cb69.png", "Corbina marinera": "uploads/Corbina Marinera.png", "Arroz de Camarón": "uploads/Arroz de Camarones.png", "Cazuela de Mariscos": "uploads/Cazuela mariscos.png", "Corbina": "uploads/Corbina.png", "Filete de Róbalo": "uploads/Filete.png", "Lenguado": "uploads/Lenguado.png", "Tilapia asada": "uploads/Tilapia Asada.png", "Trucha asada": "uploads/Trucha Asada.png", "Salmón asado": "uploads/Salmon Asado.png", "Limonada Cerezada": "uploads/Cerezada.png", "Limonada Natural": "uploads/Limonada Natural.png", }; // Para activar el autocompletado de direcciones, pega aquí tu clave de Google Maps // (Google Cloud → APIs → "Maps JavaScript API" + "Places API", con facturación activa). // Mientras esté vacía, el campo de dirección funciona como texto normal. const GOOGLE_MAPS_API_KEY = ""; const MENU_URL = "https://www.dosoceanos.co"; // a dónde apunta el QR const MENU_PDF = "Menu Dos Oceanos.html?embed=1"; // menú digital mostrado en "Ver Menú Digital" const PHONES = [ { label: "Domicilios", num: "302 383 9789", wa: true }, { label: "Domicilios", num: "310 340 4613", wa: true }, { label: "Fijo", num: "445 5895", wa: false }, ]; const ADDRESS = "Cra 138A # 142C - 61"; // Redes sociales — reemplaza con los enlaces reales del restaurante const SOCIAL = { instagram: "https://instagram.com/dosoceanos", facebook: "https://facebook.com/dosoceanos", tiktok: "https://tiktok.com/@dosoceanos", }; // Opciones de personalización const RICE = [ { id: "coco", label: "Arroz con coco" }, { id: "blanco", label: "Arroz blanco" }, ]; const DRINKS = [ { id: "lim", label: "Limonada natural", extra: 0 }, { id: "boro", label: "Borojó", extra: 0 }, ]; const MAR = "Pulpo, mejillón, chipichipi, calamar, anillo, camarón y palmito"; /* ---- Categorías de la carta ---- includes: qué trae el plato (define qué se puede personalizar) serves: texto de "Incluye" que se muestra en el modal */ const CATS = [ { id: "entradas", name: "Entradas", kicker: "Para empezar", c: "soft", note: "Frescas del día, para abrir el apetito frente al mar.", includes: { rice: false, drink: false }, serves: "", items: [ { n: "Ceviche de camarón", from: 35000, suggested: true, d: "Fresquísimo y cítrico, marinado en limón con cebolla morada y cilantro recién picado.", ing: ["Camarón", "Limón", "Cebolla morada", "Cilantro"] }, ], }, { id: "fritos", name: "Pescados Fritos", kicker: "Frito & crocante", c: "sun", note: "Frito entero hasta quedar dorado y crujiente, como en la costa.", includes: { rice: true, drink: true }, serves: "Arroz (coco o blanco), ensalada, patacón, sancocho de pescado y bebida.", items: [ { n: "Pargo Rojo", from: 60000, to: 80000, tag: "Favorito", suggested: true, weights: [500, 650, 800], d: "Exquisito y contundente, de piel dorada y carne jugosa e intensa, un clásico marino.", ing: ["Pargo rojo", "Sal marina", "Limón"] }, { n: "Róbalo", from: 40000, to: 70000, weights: [400, 600, 800], d: "Delicado y sin grasa, de carne blanca finísima, uno de los más apetecidos.", ing: ["Róbalo", "Sal marina", "Limón"] }, { n: "Corbina", from: 40000, to: 60000, tag: "Favorito", suggested: true, weights: [400, 550, 700], d: "Jugosa y generosa, de carne blanca de buen tamaño, dorada entera.", ing: ["Corbina", "Sal marina", "Limón"] }, { n: "Sierra", from: 35000, to: 45000, tag: "Favorito", suggested: true, weights: [350, 450, 550], d: "Crocante y firme, frita entera hasta quedar bien dorada por fuera.", ing: ["Sierra", "Sal marina", "Limón"] }, { n: "Picuda", from: 35000, to: 45000, weights: [350, 450, 550], d: "Ligera y magra, crujiente por fuera y jugosa por dentro.", ing: ["Picuda", "Sal marina", "Limón"] }, { n: "Lenguado", from: 35000, to: 45000, weights: [350, 450, 550], d: "Suave y de sabor fino, frita a la perfección, ideal para paladares delicados.", ing: ["Lenguado", "Sal marina", "Limón"] }, { n: "Bocachico", from: 40000, to: 60000, weights: [400, 500, 600], d: "Tradicional e inconfundible, el sabor clásico de nuestros ríos.", ing: ["Bocachico", "Sal marina", "Limón"] }, { n: "Bagre", from: 40000, d: "Mantecoso y sin escamas, de río, con una textura suave que se deshace en la boca.", ing: ["Bagre", "Sal marina", "Limón"] }, { n: "Mojarra", from: 35000, tag: "Favorito", suggested: true, d: "Clásica y crocante, dorada entera, perfecta para compartir en la mesa.", ing: ["Mojarra", "Sal marina", "Limón"] }, ], }, { id: "salsa", name: "En Salsa", kicker: "Bañado en salsa", c: "brass", note: "Pescado bañado en salsa criolla de la casa, con tomate y cebolla.", includes: { rice: true, drink: true }, serves: "Arroz (coco o blanco), ensalada, patacón, sancocho de pescado y bebida.", items: [ { n: "Pargo Rojo en salsa", from: 60000, to: 80000, weights: [500, 650, 800], d: "Jugoso y festivo, bañado por completo en nuestra salsa criolla de tomate y cebolla.", ing: ["Pargo rojo", "Tomate", "Cebolla", "Salsa de la casa"] }, { n: "Róbalo en salsa", from: 40000, to: 70000, weights: [400, 600, 800], d: "Fino y cremoso, de carne delicada cubierta en salsa criolla de la casa.", ing: ["Róbalo", "Tomate", "Cebolla", "Salsa de la casa"] }, { n: "Corbina en salsa", from: 40000, to: 60000, weights: [400, 550, 700], d: "Jugosa y reconfortante, de carne blanca bañada en salsa criolla.", ing: ["Corbina", "Tomate", "Cebolla", "Salsa de la casa"] }, { n: "Viudo", from: 40000, d: "Tradicional y contundente, preparación típica de río con yuca y salsa criolla.", ing: ["Pescado de río", "Tomate", "Cebolla", "Yuca"] }, { n: "Bocachico en salsa", from: 40000, to: 60000, weights: [400, 500, 600], d: "Clásico y sabroso, el favorito de río, bañado en salsa de la casa.", ing: ["Bocachico", "Tomate", "Cebolla", "Salsa de la casa"] }, { n: "Bagre en salsa", from: 40000, d: "Mantecoso y suave, cubierto en una generosa salsa criolla.", ing: ["Bagre", "Tomate", "Cebolla", "Salsa de la casa"] }, ], }, { id: "marineros", name: "Salsa Marinera", kicker: "Frutos del mar", c: "aqua", note: "En salsa de mariscos: " + MAR + ".", includes: { rice: true, drink: true }, serves: "Arroz (coco o blanco), ensalada, patacón, sancocho de pescado y bebida.", items: [ { n: "Pargo Rojo marinero", from: 90000, tag: "Premium", suggested: true, d: "Espectacular y generoso, coronado con una abundante salsa marinera de frutos del mar.", ing: ["Pargo rojo", "Salsa marinera", MAR.toLowerCase()] }, { n: "Corbina marinera", from: 60000, to: 80000, weights: [400, 550, 700], d: "Cremosa y abundante, bañada en una generosa salsa de mariscos.", ing: ["Corbina", "Salsa marinera", MAR.toLowerCase()] }, { n: "Róbalo marinero", from: 70000, d: "Fino y cremoso, de carne delicada bajo una salsa marinera envolvente.", ing: ["Róbalo", "Salsa marinera", MAR.toLowerCase()] }, { n: "Salmón marinero", from: 65000, tag: "La especialidad", d: "Irresistible y suculento, bañado en una salsa de frutos del mar bien cargada.", ing: ["Salmón", "Salsa marinera", MAR.toLowerCase()] }, { n: "Bagre marinero", from: 60000, d: "Mantecoso y sabroso, envuelto en nuestra salsa marinera.", ing: ["Bagre", "Salsa marinera", MAR.toLowerCase()] }, { n: "Filete marinero", from: 55000, d: "Ligero y sin espinas, bañado en una generosa salsa de mariscos.", ing: ["Filete de pescado", "Salsa marinera", MAR.toLowerCase()] }, { n: "Trucha marinera", from: 60000, d: "Suave y delicada, cubierta con una cremosa salsa marinera.", ing: ["Trucha", "Salsa marinera", MAR.toLowerCase()] }, { n: "Mojarra marinera", from: 60000, d: "Generosa y sabrosa, coronada con abundantes frutos del mar.", ing: ["Mojarra", "Salsa marinera", MAR.toLowerCase()] }, { n: "Tilapia marinera", from: 55000, d: "Suave y ligera, bañada en salsa de mariscos bien sazonada.", ing: ["Tilapia", "Salsa marinera", MAR.toLowerCase()] }, ], }, { id: "asados", name: "Pescados Asados", kicker: "A la parrilla", c: "coral", note: "Asados a la parrilla, sin espinas, ligeros y llenos de sabor.", includes: { rice: true, drink: true }, serves: "Arroz (coco o blanco), ensalada, patacón, sancocho de pescado y bebida.", items: [ { n: "Salmón asado", from: 45000, d: "Jugoso y aromático, a la parrilla con hierbas frescas y un toque de limón.", ing: ["Salmón", "Aceite de oliva", "Hierbas", "Limón"] }, { n: "Trucha asada", from: 40000, d: "Suave y ligera, a la parrilla, con hierbas y un toque cítrico.", ing: ["Trucha", "Hierbas", "Limón"] }, { n: "Filete de Róbalo", from: 30000, d: "Fino y sin espinas, a la parrilla, delicado y lleno de sabor.", ing: ["Róbalo", "Hierbas", "Limón"] }, { n: "Tilapia asada", from: 30000, d: "Ligera y sabrosa, a la parrilla, ideal para una comida liviana.", ing: ["Tilapia", "Hierbas", "Limón"] }, ], }, { id: "cazuela", name: "Cazuela", kicker: "Caldo cremoso", c: "deep", note: "Sopa caliente y cremosa de mariscos en leche de coco.", includes: { rice: true, drink: true }, serves: "Arroz (coco o blanco), patacón y bebida.", items: [ { n: "Cazuela de Mariscos", from: 40000, suggested: true, tag: "La especialidad", d: "Reconfortante y contundente, frutos del mar en un caldo cremoso de leche de coco.", ing: [MAR.toLowerCase(), "Leche de coco", "Hogao"] }, ], }, { id: "arroces", name: "Arroces", kicker: "Salteado al wok", c: "brass", note: "Arroz salteado con frutos del mar, bien servido.", includes: { rice: false, drink: false }, serves: "Ensalada y patacón.", items: [ { n: "Arroz Marinero", from: 45000, tag: "Completo", suggested: true, d: "Completo y contundente, salteado con frutos del mar, ensalada, patacón y un trozo de tilapia.", ing: [MAR.toLowerCase(), "Arroz", "Tilapia"] }, { n: "Arroz de Camarón", from: 35000, d: "Sabroso y bien servido, salteado con camarones, ensalada de cebolla y tomate.", ing: ["Camarón", "Arroz", "Cebolla", "Tomate"] }, ], }, { id: "pastas", name: "Pastas", kicker: "Al parmesano", c: "brass", note: "Pasta con frutos del mar y queso parmesano.", includes: { rice: false, drink: false }, serves: "Patacón y queso parmesano.", items: [ { n: "Pasta Marinera", from: 45000, d: "Exquisita y bien servida, frutos del mar sobre pasta, con patacón y parmesano.", ing: [MAR.toLowerCase(), "Pasta", "Parmesano"] }, { n: "Pasta de Camarón", from: 35000, d: "Sabrosa y generosa, camarones salteados con patacones y queso parmesano.", ing: ["Camarón", "Pasta", "Parmesano"] }, ], }, { id: "bebidas", name: "Bebidas Naturales", kicker: "Del trópico", c: "soft", note: "Naturales y refrescantes, hechas al momento.", includes: { rice: false, drink: false }, serves: "", items: [ { n: "Limonada de Coco", from: 10000, suggested: true, d: "Cremosa e irresistible, dulce, espesa y muy refrescante.", ing: ["Limón", "Coco", "Hielo"] }, { n: "Limonada Cerezada", from: 8000, d: "Dulce y refrescante, con un delicado toque de cereza.", ing: ["Limón", "Cereza", "Hielo"] }, { n: "Limonada Natural", from: 6000, d: "Fresca y clásica, el refrescante de siempre, bien helado.", ing: ["Limón", "Agua", "Hielo"] }, ], }, ]; // Plato estrella const FEATURE = { n: "Langosta Marinera", catId: "marineros", from: 80000, to: 100000, tag: "La especialidad", weights: [400, 500, 600], d: "Exquisita y suculenta, langosta con frutos del mar bañada en una cremosa salsa de leche de coco, la joya de la casa.", ing: ["Langosta", MAR.toLowerCase(), "Leche de coco"], includes: { rice: true, drink: true }, serves: "Arroz (coco o blanco), ensalada, patacón, sancocho y bebida.", }; /* ---- Fechas especiales (Colombia 2026) ---- Se muestra automáticamente la más cercana. */ const SPECIAL_DATES = [ { id: "mujer", name: "Día de la Mujer", date: "2026-03-08", dateLabel: "8 de marzo", kicker: "Para ellas, del mar", title: "Celebremos a las mujeres", msg: "Reserva tu mesa y recíbela con una limonada de coco de cortesía.", cta: "Reservar para ellas", theme: "rose", target: "reservas" }, { id: "semana", name: "Semana Santa", date: "2026-03-29", dateLabel: "29 mar – 5 abr", kicker: "Semana de mar", title: "Semana Santa frente al mar", msg: "Es temporada de pescado: arma tu combo familiar y pide a domicilio.", cta: "Ver pescados", theme: "deep", target: "menu" }, { id: "madre", name: "Día de la Madre", date: "2026-05-10", dateLabel: "10 de mayo", kicker: "Para mamá", title: "Celebra a mamá con sabor a mar", msg: "Combo especial para mamá + postre de cortesía. Reserva con anticipación.", cta: "Reservar para mamá", theme: "rose", target: "reservas" }, { id: "padre", name: "Día del Padre", date: "2026-06-21", dateLabel: "21 de junio", kicker: "Para el capitán de la casa", title: "Este día, el papá come como rey", msg: "Combo del capitán: pargo rojo + cerveza fría. Reserva o pide a domicilio.", cta: "Reservar para papá", theme: "deep", target: "reservas" }, ]; // Domicilio: tarifa base + recargo oculto por distancia + envío gratis por monto mínimo // (el cliente solo ve el valor final, nunca la condición). const DELIVERY_FEE = 5000; // tarifa base (radio cercano) const DELIVERY_SURCHARGE_KM = 1200; // recargo si la dirección cae en el rango medio const DELIVERY_SURCHARGE_MIN_KM = 3; // desde 3 km... const DELIVERY_SURCHARGE_MAX_KM = 5; // ...hasta antes de 5 km const FREE_DELIVERY_MIN = 80000; // domicilio gratis en pedidos superiores a este monto // Ubicación del restaurante para calcular distancia (Google Maps → clic derecho → "¿Qué hay aquí?" → copiar lat/lng). // Mientras quede en null, no se aplica el recargo por distancia (solo tarifa base + envío gratis). const RESTAURANT_LOCATION = { lat: null, lng: null }; /* ---- Métodos de pago ---- */ const PAYMENTS = [ { id: "pse", label: "PSE", desc: "Pago en línea con tu banco", pse: true }, { id: "nequi", label: "Nequi", desc: "Transferencia desde la app" }, { id: "daviplata", label: "Daviplata", desc: "Transferencia desde la app" }, { id: "efectivo", label: "Efectivo", desc: "Paga al recibir" }, { id: "datafono", label: "Tarjeta", desc: "Datáfono en el local" }, ]; /* ---- Horarios ---- */ const HOURS = { open: 11.5, close: 17, kitchenClose: 16.5, label: "11:30 am – 5:00 pm", kitchenLabel: "4:30 pm", days: "Todos los días" }; /* ---- Promociones por día de la semana (0=Dom … 6=Sáb) ---- Se muestra automáticamente la promo del día. catId/itemName son opcionales (a dónde lleva el botón "Ver"). Edita libremente. */ const WEEKLY_PROMOS = { 3: { id: "miercoles-mariscos", kicker: "Miércoles de Mariscos", title: "Miércoles de Mariscos 🦐", msg: "Hoy los frutos del mar están de fiesta: cazuela, arroz y pasta marinera con precio especial.", cta: "Ver mariscos", catId: "marineros", color: "sun" }, 5: { id: "viernes-pargo", kicker: "Viernes de Pargo", title: "Viernes de Pargo Rojo", msg: "Cierra la semana con nuestro pargo rojo, festivo y de sabor intenso.", cta: "Pedir pargo", itemName: "Pargo Rojo", color: "sea" }, 6: { id: "sabado-familiar", kicker: "Sábado Familiar", title: "Sábado en familia, frente al mar", msg: "Arma tu bandeja para compartir y pide a domicilio para toda la familia.", cta: "Ver la carta", catId: "fritos", color: "sea" }, 0: { id: "domingo-sancocho", kicker: "Domingo de Sancocho", title: "Domingo de buen caldo", msg: "El día perfecto para una cazuela cremosa de mariscos en leche de coco.", cta: "Pedir cazuela", itemName: "Cazuela de Mariscos", color: "sea" }, }; /* clase de color para las etiquetas de recomendación (cálidas, para llevar el ojo) */ function tagClass(tag) { if (!tag) return ""; const t = tag.toLowerCase(); if (t.includes("premium")) return "t-premium"; if (t.includes("complet")) return "t-complete"; if (t.includes("especial")) return "t-special"; return "t-fav"; // Favorito, Sugerido, etc. } Object.assign(window, { WA, MENU_URL, MENU_PDF, PHONES, ADDRESS, RICE, DRINKS, CATS, FEATURE, SPECIAL_DATES, WEEKLY_PROMOS, DELIVERY_FEE, DELIVERY_SURCHARGE_KM, DELIVERY_SURCHARGE_MIN_KM, DELIVERY_SURCHARGE_MAX_KM, FREE_DELIVERY_MIN, RESTAURANT_LOCATION, PAYMENTS, HOURS, GOOGLE_MAPS_API_KEY, SOCIAL, tagClass, });