Menú Cerrar
Huellas Verdes — Pedido Quincenal @import url(‘https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300;0,9..144,600;1,9..144,300&family=DM+Sans:wght@400;500&display=swap’); :root { –verde-bosque: #2D5016; –verde-musgo: #4A7C2F; –verde-lima: #8DB94A; –crema: #F7F3EA; –crema-oscura: #EDE5D0; –tierra: #8B5E3C; –arcilla: #C4733A; –texto: #1E1E1E; –texto-suave: #5A5A4A; –blanco: #FFFFFF; –sombra: rgba(45,80,22,0.12); } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: ‘DM Sans’, sans-serif; background: var(–crema); color: var(–texto); min-height: 100vh; } header { background: var(–verde-bosque); position: sticky; top: 0; z-index: 100; box-shadow: 0 2px 12px rgba(0,0,0,0.2); } .header-top { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; } .logo { display: flex; align-items: center; gap: 10px; } .logo-icon { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; flex-shrink: 0; } .logo-text { font-family: ‘Fraunces’, serif; font-size: 1.2rem; font-weight: 600; color: var(–crema); line-height: 1; } .logo-sub { font-family: ‘DM Sans’, sans-serif; font-size: 0.6rem; color: var(–verde-lima); letter-spacing: 0.1em; text-transform: uppercase; display: block; margin-top: 2px; } .carrito-btn { background: var(–arcilla); border: none; border-radius: 24px; padding: 8px 14px; color: white; font-family: ‘DM Sans’, sans-serif; font-size: 0.85rem; font-weight: 500; cursor: pointer; display: flex; align-items: center; gap: 6px; transition: background 0.2s; flex-shrink: 0; } .carrito-btn:hover { background: #b5632d; } .carrito-count { background: white; color: var(–arcilla); border-radius: 50%; width: 20px; height: 20px; font-size: 0.75rem; font-weight: 700; display: flex; align-items: center; justify-content: center; } .quincena-banner { background: linear-gradient(135deg, var(–verde-musgo), var(–verde-bosque)); padding: 8px 16px; text-align: center; font-size: 0.78rem; color: var(–crema-oscura); letter-spacing: 0.05em; } .nombre-section { background: var(–blanco); padding: 16px; border-bottom: 2px solid var(–crema-oscura); } .nombre-section h2 { font-family: ‘Fraunces’, serif; font-size: 1.05rem; font-weight: 300; color: var(–verde-bosque); margin-bottom: 8px; } .nombre-input { width: 100%; padding: 12px 16px; border: 2px solid var(–crema-oscura); border-radius: 10px; font-family: ‘DM Sans’, sans-serif; font-size: 1rem; background: var(–crema); color: var(–texto); transition: border-color 0.2s; outline: none; } .nombre-input:focus { border-color: var(–verde-musgo); background: white; } .nombre-input.error { border-color: #c0392b; background: #fff5f5; } .categorias-nav { background: var(–blanco); padding: 10px 12px; overflow-x: auto; display: flex; gap: 8px; border-bottom: 1px solid var(–crema-oscura); scrollbar-width: none; position: sticky; top: 64px; z-index: 50; } .categorias-nav::-webkit-scrollbar { display: none; } .cat-pill { flex-shrink: 0; padding: 6px 12px; border-radius: 20px; border: 2px solid var(–crema-oscura); background: transparent; font-family: ‘DM Sans’, sans-serif; font-size: 0.78rem; font-weight: 500; color: var(–texto-suave); cursor: pointer; transition: all 0.2s; white-space: nowrap; } .cat-pill:hover { border-color: var(–verde-musgo); color: var(–verde-musgo); } .cat-pill.active { background: var(–verde-bosque); border-color: var(–verde-bosque); color: white; } .productos-main { padding: 12px; max-width: 700px; margin: 0 auto; } .categoria-header { display: flex; align-items: center; gap: 10px; margin: 20px 0 10px; padding-bottom: 6px; border-bottom: 2px solid var(–crema-oscura); } .categoria-header:first-of-type { margin-top: 6px; } .cat-emoji { font-size: 1.3rem; } .cat-nombre { font-family: ‘Fraunces’, serif; font-size: 1.1rem; font-weight: 600; color: var(–verde-bosque); } .cat-count { font-size: 0.72rem; color: var(–texto-suave); margin-left: auto; background: var(–crema-oscura); padding: 2px 8px; border-radius: 12px; } .productos-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } @media (max-width: 480px) { .productos-grid { grid-template-columns: repeat(2, 1fr); gap: 6px; } } .producto-card { background: var(–blanco); border-radius: 12px; padding: 10px 8px 8px; box-shadow: 0 1px 4px var(–sombra); display: flex; flex-direction: column; align-items: center; gap: 6px; transition: box-shadow 0.2s; border: 2px solid transparent; text-align: center; } .producto-card:hover { box-shadow: 0 4px 14px var(–sombra); } .producto-card.en-carrito { border-color: var(–verde-lima); background: #f8fdf3; } .producto-info { width: 100%; } .producto-nombre { font-size: 0.8rem; font-weight: 500; color: var(–texto); line-height: 1.25; min-height: 2.5em; display: flex; align-items: center; justify-content: center; } .producto-detalle { font-size: 0.68rem; color: var(–texto-suave); margin-top: 2px; } .producto-productor { font-size: 0.65rem; color: var(–arcilla); font-weight: 500; margin-top: 1px; } .producto-precio { font-family: ‘Fraunces’, serif; font-size: 0.95rem; font-weight: 600; color: var(–verde-bosque); white-space: nowrap; } .cantidad-control { display: flex; align-items: center; width: 100%; justify-content: center; } .qty-btn { width: 30px; height: 30px; border: 2px solid var(–crema-oscura); background: var(–crema); color: var(–verde-bosque); font-size: 1.1rem; font-weight: 700; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.15s; line-height: 1; flex-shrink: 0; } .qty-btn.minus { border-radius: 8px 0 0 8px; } .qty-btn.plus { border-radius: 0 8px 8px 0; border-left: none; } .qty-btn:hover { background: var(–crema-oscura); } .qty-btn:active { transform: scale(0.92); } .qty-display { width: 38px; height: 30px; border: 2px solid var(–crema-oscura); border-left: none; border-right: none; background: white; text-align: center; font-family: ‘DM Sans’, sans-serif; font-size: 0.88rem; font-weight: 500; color: var(–texto); display: flex; align-items: center; justify-content: center; } .hidden { display: none; } .carrito-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.5); z-index: 200; backdrop-filter: blur(2px); } .carrito-overlay.visible { display: block; } .carrito-panel { position: fixed; right: 0; top: 0; bottom: 0; width: min(420px, 100vw); background: var(–blanco); z-index: 201; display: flex; flex-direction: column; transform: translateX(100%); transition: transform 0.3s ease; box-shadow: -4px 0 24px rgba(0,0,0,0.2); } .carrito-panel.visible { transform: translateX(0); } .carrito-header { background: var(–verde-bosque); padding: 18px 20px; color: white; display: flex; justify-content: space-between; align-items: center; } .carrito-header h2 { font-family: ‘Fraunces’, serif; font-weight: 300; font-size: 1.25rem; } .cerrar-btn { background: none; border: none; color: white; font-size: 1.5rem; cursor: pointer; padding: 4px; line-height: 1; } .carrito-items { flex: 1; overflow-y: auto; padding: 14px; } .carrito-item { padding: 10px 0; border-bottom: 1px solid var(–crema-oscura); display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; } .carrito-item-nombre { font-size: 0.86rem; font-weight: 500; flex: 1; } .carrito-item-meta { font-size: 0.73rem; color: var(–texto-suave); margin-top: 2px; } .carrito-item-precio { font-family: ‘Fraunces’, serif; font-weight: 600; color: var(–verde-bosque); font-size: 0.92rem; white-space: nowrap; } .carrito-vacio { text-align: center; padding: 40px 20px; color: var(–texto-suave); } .carrito-vacio span { font-size: 2.5rem; display: block; margin-bottom: 12px; } .carrito-footer { padding: 16px; background: var(–crema); border-top: 2px solid var(–crema-oscura); } .carrito-total { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .carrito-total span { font-size: 0.88rem; color: var(–texto-suave); } .carrito-total strong { font-family: ‘Fraunces’, serif; font-size: 1.35rem; color: var(–verde-bosque); } .comentario-section { margin-bottom: 12px; } .comentario-section label { display: block; font-size: 0.82rem; font-weight: 500; color: var(–texto-suave); margin-bottom: 6px; } .comentario-input { width: 100%; padding: 10px 12px; border: 2px solid var(–crema-oscura); border-radius: 8px; font-family: ‘DM Sans’, sans-serif; font-size: 0.88rem; background: white; color: var(–texto); resize: vertical; min-height: 60px; outline: none; transition: border-color 0.2s; } .comentario-input:focus { border-color: var(–verde-musgo); } .enviar-btn { width: 100%; padding: 15px; background: var(–arcilla); color: white; border: none; border-radius: 12px; font-family: ‘DM Sans’, sans-serif; font-size: 1rem; font-weight: 500; cursor: pointer; transition: background 0.2s; display: flex; align-items: center; justify-content: center; gap: 8px; } .enviar-btn:hover { background: #b5632d; } .enviar-btn:disabled { opacity: 0.65; cursor: not-allowed; } .modal-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.6); z-index: 300; align-items: center; justify-content: center; } .modal-overlay.visible { display: flex; } .modal-box { background: white; border-radius: 20px; padding: 36px 28px; max-width: 320px; width: 90%; text-align: center; box-shadow: 0 8px 40px rgba(0,0,0,0.25); } .modal-icon { font-size: 3rem; margin-bottom: 12px; } .modal-box h2 { font-family: ‘Fraunces’, serif; font-size: 1.4rem; color: var(–verde-bosque); margin-bottom: 10px; } .modal-box p { font-size: 0.9rem; color: var(–texto-suave); margin-bottom: 20px; line-height: 1.5; } .modal-btn { background: var(–verde-musgo); color: white; border: none; border-radius: 10px; padding: 12px 28px; font-family: ‘DM Sans’, sans-serif; font-size: 1rem; font-weight: 500; cursor: pointer; } .modal-btn:hover { background: var(–verde-bosque); } footer { text-align: center; padding: 24px 16px; font-size: 0.78rem; color: var(–texto-suave); border-top: 1px solid var(–crema-oscura); margin-top: 20px; } .spinner { width: 18px; height: 18px; border: 2px solid rgba(255,255,255,0.4); border-top-color: white; border-radius: 50%; animation: spin 0.7s linear infinite; display: inline-block; } @keyframes spin { to { transform: rotate(360deg); } }
🌿 Oferta quincenal · 10 de junio · Productos frescos orgánicos de temporada

¿Quién hace este pedido?

Hecho por Claude con 💚 para Huellas Verdes · Cooperativa de Consumo Responsable

🛒 Mi pedido

🥬Aún no has agregado nada.
¡Explora la oferta!
// ============================================================ // ⚙️ URL DEL SCRIPT — ya configurada, no tocar // ============================================================ const GOOGLE_SCRIPT_URL = ‘https://script.google.com/macros/s/AKfycbzaojcr2rAB7yeaxwfa70pkbRflr8XWqFxOtBKJVbWRnV6JJ9EdOel-j5RwNMOoX00/exec’; // ============================================================ // 📦 PRODUCTOS // Categorías: unidad | kilo | hojas | sabrosos | fruta | andrea | otros | huevos | paltas // paso: 1 = de uno en uno, 0.5 = de medio en medio kilo // ============================================================ const PRODUCTOS = [ // VERDURAS POR UNIDAD (paso 1) { id: 1, cat: ‘unidad’, paso: 1, nombre: ‘Apio’, precio: 1666, unidad: ‘unidad’, productor: ‘Andrea’ }, { id: 2, cat: ‘unidad’, paso: 1, nombre: ‘Apio papa’, precio: 1904, unidad: ‘unidad’, productor: ‘Andrea’ }, { id: 3, cat: ‘unidad’, paso: 1, nombre: ‘Betarraga’, precio: 1547, unidad: ‘atado’, productor: ‘Andrea’ }, { id: 4, cat: ‘unidad’, paso: 1, nombre: ‘Coliflor’, precio: 1785, unidad: ‘unidad’, productor: ‘Gonzalo’ }, { id: 5, cat: ‘unidad’, paso: 1, nombre: ‘Colirábano morado/blanco tierno’, precio: 1190, unidad: ‘unidad’, productor: ‘Andrea’ }, { id: 6, cat: ‘unidad’, paso: 1, nombre: ‘Nabo’, precio: 833, unidad: ‘unidad’, productor: ‘Cholitas’ }, { id: 7, cat: ‘unidad’, paso: 1, nombre: ‘Pimiento rojo’, precio: 476, unidad: ‘unidad’, productor: ‘Gonzalo’ }, { id: 8, cat: ‘unidad’, paso: 1, nombre: ‘Pimiento verde’, precio: 476, unidad: ‘unidad’, productor: ‘Gonzalo’ }, { id: 9, cat: ‘unidad’, paso: 1, nombre: ‘Puerro’, precio: 595, unidad: ‘unidad’, productor: ‘Andrea’ }, { id: 10, cat: ‘unidad’, paso: 1, nombre: ‘Rabanito’, precio: 1190, unidad: ‘atado’, productor: ‘Cholitas’ }, { id: 11, cat: ‘unidad’, paso: 1, nombre: ‘Rábano Nero Tondo’, precio: 2975, unidad: ‘atado ½ kg (2 un)’, productor: ‘Tamara’ }, { id: 12, cat: ‘unidad’, paso: 1, nombre: ‘Rábano Wasabi’, precio: 2975, unidad: ‘atado ½ kg (2 un)’, productor: ‘Tamara’ }, { id: 13, cat: ‘unidad’, paso: 1, nombre: ‘Ruibarbo’, precio: 8925, unidad: ‘atado ½ kg’, productor: ‘Tamara’ }, { id: 14, cat: ‘unidad’, paso: 1, nombre: ‘Zapallo Camote trozo’, precio: 1904, unidad: ‘kilo’, productor: ‘Andrea’ }, // VERDURAS POR KILO (paso 0.5) { id: 15, cat: ‘kilo’, paso: 0.5, nombre: ‘Apio papa’, precio: 9520, unidad: ‘kilo’, productor: ‘Tamara’ }, { id: 16, cat: ‘kilo’, paso: 0.5, nombre: ‘Apio Tango’, precio: 6545, unidad: ‘kilo’, productor: ‘Tamara’ }, { id: 17, cat: ‘kilo’, paso: 0.5, nombre: ‘Papa’, precio: 1904, unidad: ‘kilo’, productor: ‘Andrea’ }, { id: 18, cat: ‘kilo’, paso: 0.5, nombre: ‘Tomate herencia colores’, precio: 4165, unidad: ‘kilo’, productor: ‘Pato Pro’ }, { id: 19, cat: ‘kilo’, paso: 0.5, nombre: ‘Tomate negro Black Beauty’, precio: 4165, unidad: ‘kilo’, productor: ‘Pato Pro’ }, { id: 20, cat: ‘kilo’, paso: 0.5, nombre: ‘Tomate rojo criollo’, precio: 4165, unidad: ‘kilo’, productor: ‘Pato Pro’ }, { id: 21, cat: ‘kilo’, paso: 0.5, nombre: ‘Tomate rosado’, precio: 4165, unidad: ‘kilo’, productor: ‘Pato Pro’ }, { id: 22, cat: ‘kilo’, paso: 0.5, nombre: ‘Topinambur’, precio: 5355, unidad: ‘kilo’, productor: ‘Pato Pro’ }, { id: 23, cat: ‘kilo’, paso: 0.5, nombre: ‘Topinambur’, precio: 9520, unidad: ‘kilo’, productor: ‘Tamara’ }, { id: 24, cat: ‘kilo’, paso: 0.5, nombre: ‘Zanahorias’, precio: 2368, unidad: ‘kilo’, productor: ‘Cholitas’ }, // HOJAS (paso 1) { id: 25, cat: ‘hojas’, paso: 1, nombre: ‘Acelga color’, precio: 1785, unidad: ‘atado 400 gr’, productor: ‘Pato Pro’ }, { id: 26, cat: ‘hojas’, paso: 1, nombre: ‘Acelga mix’, precio: 3570, unidad: ‘atado 500 gr’, productor: ‘Tamara’ }, { id: 27, cat: ‘hojas’, paso: 1, nombre: ‘Achicoria crespa’, precio: 952, unidad: ‘unidad’, productor: ‘Andrea’ }, { id: 28, cat: ‘hojas’, paso: 1, nombre: ‘Kale crespo colores’, precio: 1785, unidad: ‘bolsa 250 gr’, productor: ‘Pato Pro’ }, { id: 29, cat: ‘hojas’, paso: 1, nombre: ‘Kale Darkibor’, precio: 2142, unidad: ‘porción 300 gr’, productor: ‘Tamara’ }, { id: 30, cat: ‘hojas’, paso: 1, nombre: ‘Kale Lacinato’, precio: 2142, unidad: ‘porción 300 gr’, productor: ‘Tamara’ }, { id: 31, cat: ‘hojas’, paso: 1, nombre: ‘Kale Redbor’, precio: 2142, unidad: ‘porción 300 gr’, productor: ‘Tamara’ }, { id: 32, cat: ‘hojas’, paso: 1, nombre: ‘Kale Toscano’, precio: 1785, unidad: ‘porción 250 gr’, productor: ‘Pato Pro’ }, { id: 33, cat: ‘hojas’, paso: 1, nombre: ‘Lechuga Bambi’, precio: 1785, unidad: ‘unidad’, productor: ‘Tamara’ }, { id: 34, cat: ‘hojas’, paso: 1, nombre: ‘Lechuga costina’, precio: 952, unidad: ‘unidad’, productor: ‘Pato Pro’ }, { id: 35, cat: ‘hojas’, paso: 1, nombre: ‘Lechuga española morada’, precio: 714, unidad: ‘unidad’, productor: ‘Gonzalo’ }, { id: 36, cat: ‘hojas’, paso: 1, nombre: ‘Lechuga española verde’, precio: 714, unidad: ‘unidad’, productor: ‘Gonzalo’ }, { id: 37, cat: ‘hojas’, paso: 1, nombre: ‘Lechuga marina morada’, precio: 714, unidad: ‘unidad’, productor: ‘Gonzalo’ }, { id: 38, cat: ‘hojas’, paso: 1, nombre: ‘Lechuga marina verde’, precio: 714, unidad: ‘unidad’, productor: ‘Gonzalo’ }, { id: 39, cat: ‘hojas’, paso: 1, nombre: ‘Lechuga marina verde’, precio: 952, unidad: ‘unidad’, productor: ‘Pato Pro’ }, { id: 40, cat: ‘hojas’, paso: 1, nombre: ‘Lechuga sorpresa’, precio: 774, unidad: ‘unidad’, productor: ‘Andrea’ }, { id: 41, cat: ‘hojas’, paso: 1, nombre: ‘Lechuga Volcana’, precio: 1785, unidad: ‘unidad’, productor: ‘Tamara’ }, { id: 42, cat: ‘hojas’, paso: 1, nombre: ‘Mix de hojas’, precio: 1428, unidad: ‘porción 100 gr’, productor: ‘Andrea’ }, { id: 43, cat: ‘hojas’, paso: 1, nombre: ‘Mix de hojas’, precio: 5355, unidad: ‘porción 300 gr’, productor: ‘Tamara’ }, // OTROS SABROSOS (paso 1) { id: 44, cat: ‘sabrosos’, paso: 1, nombre: ‘Ají variedad sorpresa’, precio: 238, unidad: ‘unidad’, productor: ‘Andrea’ }, { id: 45, cat: ‘sabrosos’, paso: 1, nombre: ‘Ajo’, precio: 536, unidad: ‘unidad’, productor: ‘Andrea’ }, { id: 46, cat: ‘sabrosos’, paso: 1, nombre: ‘Ajo chilote’, precio: 1190, unidad: ‘unidad’, productor: ‘Tamara’ }, { id: 47, cat: ‘sabrosos’, paso: 1, nombre: ‘Cebolla’, precio: 1190, unidad: ‘kilo’, productor: ‘Andrea’ }, { id: 48, cat: ‘sabrosos’, paso: 1, nombre: ‘Cebolla’, precio: 1428, unidad: ‘kilo’, productor: ‘Gonzalo’ }, { id: 49, cat: ‘sabrosos’, paso: 1, nombre: ‘Cebolla unidad’, precio: 286, unidad: ‘unidad ~200 gr’, productor: ‘Gonzalo’ }, { id: 50, cat: ‘sabrosos’, paso: 1, nombre: ‘Cebollín’, precio: 464, unidad: ‘unidad’, productor: ‘Cholitas’ }, { id: 51, cat: ‘sabrosos’, paso: 1, nombre: ‘Lemongrass / Hierba Luisa’, precio: 1785, unidad: ‘atado’, productor: ‘Cholitas’ }, { id: 52, cat: ‘sabrosos’, paso: 1, nombre: ‘Matico’, precio: 1785, unidad: ‘atado’, productor: ‘Cholitas’ }, { id: 53, cat: ‘sabrosos’, paso: 1, nombre: ‘Melisa’, precio: 1666, unidad: ‘atado’, productor: ‘Cholitas’ }, { id: 54, cat: ‘sabrosos’, paso: 1, nombre: ‘Menta’, precio: 1547, unidad: ‘atado’, productor: ‘Cholitas’ }, { id: 55, cat: ‘sabrosos’, paso: 1, nombre: ‘Menta’, precio: 595, unidad: ‘atado’, productor: ‘Pato Pro’ }, { id: 56, cat: ‘sabrosos’, paso: 1, nombre: ‘Menta negra’, precio: 2678, unidad: ‘ramo 150 gr’, productor: ‘Tamara’ }, { id: 57, cat: ‘sabrosos’, paso: 1, nombre: ‘Orégano’, precio: 952, unidad: ‘paquete’, productor: ‘Pato Pro’ }, { id: 58, cat: ‘sabrosos’, paso: 1, nombre: ‘Perejil’, precio: 1071, unidad: ‘atado’, productor: ‘Andrea’ }, { id: 59, cat: ‘sabrosos’, paso: 1, nombre: ‘Perejil crespo’, precio: 2142, unidad: ‘ramo 150 gr’, productor: ‘Tamara’ }, { id: 60, cat: ‘sabrosos’, paso: 1, nombre: ‘Perejil liso’, precio: 2142, unidad: ‘ramo 150 gr’, productor: ‘Tamara’ }, { id: 61, cat: ‘sabrosos’, paso: 1, nombre: ‘Romero’, precio: 952, unidad: ‘paquete’, productor: ‘Pato Pro’ }, { id: 62, cat: ‘sabrosos’, paso: 1, nombre: ‘Ruda’, precio: 1785, unidad: ‘atado’, productor: ‘Cholitas’ }, { id: 63, cat: ‘sabrosos’, paso: 1, nombre: ‘Salvia’, precio: 1785, unidad: ‘atado’, productor: ‘Cholitas’ }, // FRUTA (paso 0.5) { id: 64, cat: ‘fruta’, paso: 0.5, nombre: ‘Caqui’, precio: 2261, unidad: ‘kilo’, productor: ‘Andrea’ }, { id: 65, cat: ‘fruta’, paso: 0.5, nombre: ‘Kiwi’, precio: 2368, unidad: ‘kilo’, productor: ‘Cholitas’ }, { id: 66, cat: ‘fruta’, paso: 0.5, nombre: ‘Limón’, precio: 714, unidad: ‘kilo’, productor: ‘Gonzalo’ }, { id: 67, cat: ‘fruta’, paso: 0.5, nombre: ‘Manzana roja’, precio: 2142, unidad: ‘kilo’, productor: ‘Cholitas’ }, { id: 68, cat: ‘fruta’, paso: 0.5, nombre: ‘Manzana verde’, precio: 2023, unidad: ‘kilo’, productor: ‘Cholitas’ }, { id: 69, cat: ‘fruta’, paso: 0.5, nombre: ‘Membrillo’, precio: 1666, unidad: ‘kilo’, productor: ‘Andrea’ }, { id: 70, cat: ‘fruta’, paso: 0.5, nombre: ‘Naranjas’, precio: 2368, unidad: ‘kilo’, productor: ‘Cholitas’ }, { id: 71, cat: ‘fruta’, paso: 0.5, nombre: ‘Uva Red sin pepas’, precio: 2142, unidad: ‘kilo’, productor: ‘Andrea’ }, // ENVASADOS ANDREA (paso 1) { id: 72, cat: ‘andrea’, paso: 1, nombre: ‘Jugo de tomate con sal de mar’, precio: 1904, unidad: ‘botella 250 ml’, productor: ‘Andrea’ }, { id: 73, cat: ‘andrea’, paso: 1, nombre: ‘Jugo de uva (sin azúcar añadida)’, precio: 1904, unidad: ‘botella 250 ml’, productor: ‘Andrea’ }, { id: 74, cat: ‘andrea’, paso: 1, nombre: ‘Jugo frutilla (sin azúcar añadida)’, precio: 1904, unidad: ‘botella 250 ml’, productor: ‘Andrea’ }, { id: 75, cat: ‘andrea’, paso: 1, nombre: ‘Jugo uva/frutilla (sin azúcar añadida)’, precio: 1904, unidad: ‘botella 250 ml’, productor: ‘Andrea’ }, { id: 76, cat: ‘andrea’, paso: 1, nombre: ‘Mermelada de damasco (25% azúcar org.)’, precio: 5355, unidad: ‘frasco 450 gr’, productor: ‘Andrea’ }, { id: 77, cat: ‘andrea’, paso: 1, nombre: ‘Mermelada de frutilla (25% azúcar org.)’, precio: 5355, unidad: ‘frasco 450 gr’, productor: ‘Andrea’ }, { id: 78, cat: ‘andrea’, paso: 1, nombre: ‘Mermelada de membrillo’, precio: 5355, unidad: ‘frasco 450 gr’, productor: ‘Andrea’ }, { id: 79, cat: ‘andrea’, paso: 1, nombre: ‘Mermelada frutilla/damasco (25% azúcar org.)’, precio: 5355, unidad: ‘frasco 450 gr’, productor: ‘Andrea’ }, { id: 80, cat: ‘andrea’, paso: 1, nombre: ‘Néctar de damasco (con azúcar org.)’, precio: 1904, unidad: ‘botella 250 ml’, productor: ‘Andrea’ }, { id: 81, cat: ‘andrea’, paso: 1, nombre: ‘Néctar de membrillo (con azúcar org.)’, precio: 1904, unidad: ‘botella 250 ml’, productor: ‘Andrea’ }, { id: 82, cat: ‘andrea’, paso: 1, nombre: ‘Néctar frutilla (con azúcar org.)’, precio: 1904, unidad: ‘botella 250 ml’, productor: ‘Andrea’ }, { id: 83, cat: ‘andrea’, paso: 1, nombre: ‘Salsa Tomate (pulpa sin sal ni pepas)’, precio: 4165, unidad: ‘frasco 450 gr’, productor: ‘Andrea’ }, { id: 84, cat: ‘andrea’, paso: 1, nombre: ‘Salsa Tomate (pulpa sin sal ni pepas)’, precio: 5355, unidad: ‘frasco 650 gr’, productor: ‘Andrea’ }, // OTROS ENVASADOS (paso 1) { id: 85, cat: ‘otros’, paso: 1, nombre: ‘Queso fresco de vaca’, precio: 5950, unidad: ‘pieza 500 gr’, productor: ‘Pato Pro’ }, { id: 86, cat: ‘otros’, paso: 1, nombre: ‘Miel de pradera’, precio: 10710, unidad: ‘kilo’, productor: ‘Pato Pro’ }, { id: 87, cat: ‘otros’, paso: 1, nombre: ‘Miel en panal’, precio: 5712, unidad: ‘porción 200 gr’, productor: ‘Pato Pro’ }, // HUEVOS (paso 1) { id: 88, cat: ‘huevos’, paso: 1, nombre: ‘Huevos’, precio: 2200, unidad: ‘ficha 6 unids’, productor: ‘Bravial’ }, // PALTAS (paso 0.5) { id: 89, cat: ‘paltas’, paso: 0.5, nombre: ‘Palta Hass’, precio: 4000, unidad: ‘kilo’, productor: ‘Gabriela’ }, { id: 90, cat: ‘paltas’, paso: 0.5, nombre: ‘Palta Negra DLC’, precio: 3200, unidad: ‘kilo’, productor: ‘Juanjo’ }, ]; const CATEGORIAS = [ { id: ‘unidad’, nombre: ‘Verduras por unidad’, emoji: ‘🥦’ }, { id: ‘kilo’, nombre: ‘Verduras por kilo’, emoji: ‘⚖️’ }, { id: ‘hojas’, nombre: ‘Hojas’, emoji: ‘🌿’ }, { id: ‘sabrosos’,nombre: ‘Otros sabrosos’, emoji: ‘🧄’ }, { id: ‘fruta’, nombre: ‘Fruta’, emoji: ‘🍎’ }, { id: ‘andrea’, nombre: ‘Envasados Andrea’, emoji: ‘🫙’ }, { id: ‘otros’, nombre: ‘Otros envasados’, emoji: ‘🍯’ }, { id: ‘huevos’, nombre: ‘Huevos’, emoji: ‘🥚’ }, { id: ‘paltas’, nombre: ‘Paltas’, emoji: ‘🥑’ }, ]; const cantidades = {}; let catActiva = ‘todas’; function formatNum(n) { // Muestra 0.5 como “0,5” y enteros sin decimales return n % 1 === 0 ? String(n) : String(n).replace(‘.’, ‘,’); } function formatPrecio(n) { return ‘$’ + Math.round(n).toLocaleString(‘es-CL’); } function renderProductos() { const main = document.getElementById(‘productos-main’); main.innerHTML = ”; CATEGORIAS.forEach(cat => { const prods = PRODUCTOS.filter(p => p.cat === cat.id); if (prods.length === 0) return; const section = document.createElement(‘div’); section.className = ‘categoria-section’; section.dataset.cat = cat.id; section.innerHTML = `
${cat.emoji} ${cat.nombre} ${prods.length} producto${prods.length !== 1 ? ‘s’ : ”}
`; const grid = document.createElement(‘div’); grid.className = ‘productos-grid’; prods.forEach(prod => { const qty = cantidades[prod.id] || 0; const card = document.createElement(‘div’); card.className = `producto-card${qty > 0 ? ‘ en-carrito’ : ”}`; card.id = `card-${prod.id}`; card.innerHTML = `
${prod.nombre}
${prod.unidad}
🌱 ${prod.productor}
${formatPrecio(prod.precio)}
${formatNum(qty)}
`; grid.appendChild(card); }); section.appendChild(grid); main.appendChild(section); }); aplicarFiltro(); } function cambiarQty(id, delta) { const prod = PRODUCTOS.find(p => p.id === id); const paso = prod.paso || 1; const actual = cantidades[id] || 0; const nuevo = Math.round(Math.max(0, actual + delta * paso) * 10) / 10; cantidades[id] = nuevo; document.getElementById(`qty-${id}`).textContent = formatNum(nuevo); const card = document.getElementById(`card-${id}`); card.classList.toggle(‘en-carrito’, nuevo > 0); actualizarContadorCarrito(); } function actualizarContadorCarrito() { const total = Object.values(cantidades).filter(v => v > 0).length; document.getElementById(‘carrito-count’).textContent = total; } function filtrarCat(cat, btn) { catActiva = cat; document.querySelectorAll(‘.cat-pill’).forEach(b => b.classList.remove(‘active’)); btn.classList.add(‘active’); aplicarFiltro(); } function aplicarFiltro() { document.querySelectorAll(‘.categoria-section’).forEach(sec => { if (catActiva === ‘todas’ || sec.dataset.cat === catActiva) { sec.classList.remove(‘hidden’); } else { sec.classList.add(‘hidden’); } }); } function abrirCarrito() { renderCarrito(); document.getElementById(‘carrito-overlay’).classList.add(‘visible’); document.getElementById(‘carrito-panel’).classList.add(‘visible’); document.body.style.overflow = ‘hidden’; } function cerrarCarrito() { document.getElementById(‘carrito-overlay’).classList.remove(‘visible’); document.getElementById(‘carrito-panel’).classList.remove(‘visible’); document.body.style.overflow = ”; } function renderCarrito() { const items = PRODUCTOS.filter(p => (cantidades[p.id] || 0) > 0); const el = document.getElementById(‘carrito-items’); if (items.length === 0) { el.innerHTML = `
🥬Aún no has agregado nada.
¡Explora la oferta!
`; document.getElementById(‘carrito-total’).textContent = ‘$0’; return; } let total = 0; el.innerHTML = ”; items.forEach(p => { const qty = cantidades[p.id]; const sub = p.precio * qty; total += sub; const div = document.createElement(‘div’); div.className = ‘carrito-item’; div.innerHTML = `
${p.nombre}
${formatNum(qty)} × ${p.unidad} · ${p.productor}
${formatPrecio(sub)}
`; el.appendChild(div); }); document.getElementById(‘carrito-total’).textContent = formatPrecio(total); } async function enviarPedido() { const rut = document.getElementById(‘nombre-socio’).value.trim(); if (!rut) { cerrarCarrito(); const input = document.getElementById(‘nombre-socio’); input.classList.add(‘error’); input.focus(); input.scrollIntoView({ behavior: ‘smooth’, block: ‘center’ }); return; } const items = PRODUCTOS.filter(p => (cantidades[p.id] || 0) > 0); if (items.length === 0) { alert(‘Agrega al menos un producto antes de enviar.’); return; } const btn = document.getElementById(‘enviar-btn’); btn.disabled = true; btn.innerHTML = ‘ Enviando…’; const filaProductos = {}; PRODUCTOS.forEach(p => { filaProductos[p.nombre + ‘ (‘ + p.unidad + ‘) – ‘ + p.productor] = cantidades[p.id] || 0; }); const comentario = document.getElementById(‘comentario-pedido’).value.trim(); const pedido = { rut, fecha: new Date().toLocaleString(‘es-CL’), comentario, productos: filaProductos, }; try { await fetch(GOOGLE_SCRIPT_URL, { method: ‘POST’, mode: ‘no-cors’, body: JSON.stringify(pedido), }); mostrarExito(rut); } catch (e) { alert(‘Hubo un error al enviar. Por favor intenta de nuevo.’); btn.disabled = false; btn.innerHTML = ‘Enviar mi pedido 🌿’; } } function mostrarExito(rut) { cerrarCarrito(); document.getElementById(‘modal-texto’).textContent = `¡Gracias! El pedido de ${rut} fue registrado. Nos vemos en la próxima distribución. 🌿`; document.getElementById(‘modal-exito’).classList.add(‘visible’); Object.keys(cantidades).forEach(k => delete cantidades[k]); renderProductos(); actualizarContadorCarrito(); document.getElementById(‘nombre-socio’).value = ”; document.getElementById(‘comentario-pedido’).value = ”; const btn = document.getElementById(‘enviar-btn’); btn.disabled = false; btn.innerHTML = ‘Enviar mi pedido 🌿’; } function cerrarModal() { document.getElementById(‘modal-exito’).classList.remove(‘visible’); } renderProductos();