Código fuente de la Floristería López

HTML


       
    <!-- PÁGINA PRINCIPAL -->                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               <!DOCTYPE html>
<html lang="es">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Floristería</title>
    <link rel="stylesheet" href="../CSS/estilos.css">
    <link rel="icon" href="../IMG/logo_floristeria-removebg-preview.png" type="icon/jpg">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
        integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Great+Vibes&display=swap" rel="stylesheet">
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="../hq-countdown-timer/hq-countdown-timer.min.js"></script>
</head>

<body id="body">
    <header>
        <div class="centrar">
            <nav>
                <figure class="figure_logo">
                    <img src="../IMG/logo_floristeria-removebg-preview.png" alt="img logo de floristeria">
                    <p class="nombre_floristeria">Floristería López</p>
                </figure>
                <ul class="ul_nav">
                                
                    <a href="../HTML/inicioSesion.html">
                        <li class="li_nav">Inicio Sesión/
                        <span class="small_let">Regístrate</span>
                        </li>
                    </a>
                    <li class="li_nav cesta">
                        <button popovertarget="my_popover" id="icono_cesta1">
                            <i class="fa-solid fa-bag-shopping" title="Cesta de compra"></i>
                            <div class="mostrar_cantidad_en_cesta">0</div>
                        </button>
                    </li>
                </ul>
                <!-- Cesta -->
                <div id="my_popover" popover>
                    <h3 class="h3_cesta">Cesta de Compra</h3>
                    <p id="mensaje_no_hay_articulos">No tienes artículos en la cesta</p>
                    <form action="" id="form_cesta" method="post"></form>
                    <div class="footer_cesta">
                        <p>Total : <span class="total_cesta">0.00 €</span></p>
                        <hr>
                        <button id="pagar">Realizar compra</button>
                    </div>
                </div>
                <!-- Cesta -->

                <!-- MENU DESPLEGABLE -->
                <div id="div_menu">
                    <div class="div_icons">
                        <i class="fa-solid fa-bars" id="menu_icon" title="Menú"></i>
                        <i class="fa-solid fa-x" id="close_icon"></i>
                    </div>

                      <ul id="dropDown_box">
                        <li class="options"><a href="../HTML/inicioSesion.html"><i class="fa-solid fa-user"></i>Inicia
                                Sesión</a></li>
                        <li class="options"><button popovertarget="my_popover" id="icono_cesta2"><i
                                    class="fa-solid fa-bag-shopping" title="Cesta de compra"></i>Tu cesta</button></li>
                    </ul>
                </div>
            </nav>

            <section class="description">
                <h1>Floristería López</h1>
                <p>Lorem ipsum<ins>dolor sit amet</ins> consectetur adipisicing elit. Omnis
                    fuga a fugit, porro earum eveniet ipsum temporibus sequi
                    eligendi non at illo, quia veritatis hic error amet rem minus placeat.</p>
                <a href="/HTML/blog.html" class="btn">Saber más</a>
            </section>
        </div>
    </header>
    <main id="main">
        <div class="centrar">
            <ul class="ul_main">
                <a href="#dinamic_div"><li class="btn" id="btn_flores"> Flores</li></a>
                <a href="#dinamic_div"><li class="btn" id="btn_eventos">Eventos</li></a>
                <a href="#dinamic_div"><li class="btn" id="btn_cestas">Cestas</li></a>
                <a href="../HTML/crealoTuMismo.html" target="_blank"><li class="btn">Créalo tú...</li></a>
                <a href="#dinamic_div"><li class="btn" id="btn_ramos">Ramos</li></a>
                <a href="#dinamic_div"><li class="btn" id="btn_regalos">Regalos</li></a>
                <a href="#dinamic_div"><li class="btn" id="ofertas">Ofertas</li></a>
            </ul>

            <section id="dinamic_section">
                <div class="container_carousel">
                    <div class="over_flow">
                        <i class="fa-solid fa-angle-left" id="left_arrow_carr"></i>
                        <ul id="ul_carousel">
                            <li class="li_carousel">
                                <div class="description_carousel">
                                    <h2>Ramos con búcaros</h2>
                                    <h3>Escoge tu ramo y búcaro</h3>
                                    <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
                                        Ullam adipisci veritatis, voluptas ratione at doloribus
                                        officia dolorum quod quae vero ab minus error voluptatem.
                                    </p>
                                    <div class="div_btn_carousel">
                                        <button class="btn_carousel">Ver</button>
                                    </div>
                                </div>
                                <figure class="img_carousel">
                                    <img src="../IMG/bucaro flores.avif" alt="imagen de bucaro con flores">
                                </figure>
                            </li>
                            <li class="li_carousel">
                                <div class="description_carousel">
                                    <h2>Crea tu cesta</h2>
                                    <h3>Así de fácil:</h3>
                                    <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
                                        Ullam adipisci veritatis, voluptas ratione at doloribus
                                        officia dolorum quod quae vero ab minus error voluptatem.
                                    </p>
                                    <div class="div_btn_carousel">
                                        <button class="btn_carousel">Ver</button>
                                    </div>
                                </div>
                                <figure class="img_carousel">
                                    <img src="../IMG/cesta flors y dulces.jpg" alt="imagen de cesta con flores y dulces">
                                </figure>
                            </li>
                            <li class="li_carousel activo">
                                <div class="description_carousel">
                                    <h2>Decoración de eventos</h2>
                                    <h3>Un día especial con decoración especial</h3>
                                    <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
                                        Ullam adipisci veritatis, voluptas ratione at doloribus
                                        officia dolorum quod quae vero ab minus error voluptatem.
                                    </p>
                                    <div class="div_btn_carousel">
                                        <button class="btn_carousel">Ver</button>
                                    </div>
                                </div>
                                <figure class="img_carousel">
                                    <img src="../IMG/boda.jpg" alt="imagen de un evento de boda">
                                </figure>
                            </li>
                            <li class="li_carousel">
                                <div class="description_carousel">
                                    <h2>Crea tu propio ramo</h2>
                                    <h3>Así de fácil:</h3>
                                    <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
                                        Ullam adipisci veritatis, voluptas ratione at doloribus
                                        officia dolorum quod quae vero ab minus error voluptatem.
                                    </p>
                                    <div class="div_btn_carousel">
                                        <button class="btn_carousel">Ver</button>
                                    </div>
                                </div>
                                <figure class="img_carousel">
                                    <img src="../IMG/flores sueltas.jpg" alt="imagen de flores sueltas">
                                </figure>
                            </li>
                            <li class="li_carousel">
                                <div class="description_carousel">
                                    <h2>Crea tu propio ramo</h2>
                                    <h3>Así de fácil:</h3>
                                    <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit.
                                        Ullam adipisci veritatis, voluptas ratione at doloribus
                                        officia dolorum quod quae vero ab minus error voluptatem.
                                    </p>
                                    <div class="div_btn_carousel">
                                        <button class="btn_carousel">Ver</button>
                                    </div>
                                </div>
                                <figure class="img_carousel">
                                    <img src="../IMG/flores sueltas.jpg" alt="imagen de flores sueltas">
                                </figure>
                            </li>
                        </ul>
                        <i class="fa-solid fa-angle-right" id="right_arrow_carr"></i>
                    </div>
                </div>
                <div id="dinamic_div">
                    <h1 id="dinamic_title"></h1>
                    <p id="description"></p>
                    <div id="countdown">
                        <h3>Últimos minutos:</h3>
                        <div class="hq-countdown" data-target-date="2025-12-31T23:59:59">
                            <div class="hq-countdown-item">
                                <div class="hq-number hq-days">00</div>
                                <div class="hq-label">Days</div>
                            </div>
                            <div class="hq-countdown-item">
                                <div class="hq-number hq-hours">00</div>
                                <div class="hq-label">Hours</div>
                            </div>
                            <div class="hq-countdown-item">
                                <div class="hq-number hq-minutes">00</div>
                                <div class="hq-label">Minutes</div>
                            </div>
                            <div class="hq-countdown-item">
                                <div class="hq-number hq-seconds">00</div>
                                <div class="hq-label">Seconds</div>
                            </div>
                        </div>
                    </div>
                    <div id="div_container">
                        <!-- javascript -->
                    </div>
                    <hr class="hr">
                </div>
            </section>
        </div>
    </main>

    <footer>
        <div class="centrar">
            <ul class="ul_footer">
                <li class="li_footer">
                    <h4>¿Dónde estamos?</h4>
                    <a>
                        <i class="fa-solid fa-location-dot"></i>
                        <p>Avenida San Pedro,18, local 1,Benidorm,Spain</p>
                    </a>
                </li>
                <li class="li_footer">
                    <h4>Contactos</h4>
                    <a href="tel:618307291"><i class="fa-brands fa-whatsapp"></i>604107211</a>
                    <a href="mailto:chalo45@gmail.com"><i
                            class="fa-regular fa-envelope"></i>otaolachalo@gmail.com</a>
                    <a href="tel:968723456"><i class="fa-solid fa-phone"></i>968723456</a>
                </li>
                <li class="li_footer">
                    <h4>Documentos Legales</h4>
                    <a href="#">Política de privacidad</a>
                    <a href="#">Aviso Legal</a>
                    <a href="#">Política de cookies</a>
                </li>
            </ul>
        </div>
    </footer>
    <!-- para el countdown de ofertas -->
    <script>
        $(document).ready(function () {
            $('.hq-countdown').hqCountdownTimer({
                endMessage: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check"><polyline points="20 6 9 17 4 12"/></svg> Countdown Completed!',
                onEnd: function () {
                    console.log('Countdown finished!');
                }
            });
        });
    </script>
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-1VDDWMRSTH"></script>
    <script>
        window.dataLayer = window.dataLayer || [];
        function gtag() { dataLayer.push(arguments); }
        gtag('js', new Date());
        gtag('config', 'G-1VDDWMRSTH');
    </script>
    <script>
        try {
            fetch(new Request("https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js", { method: 'HEAD', mode: 'no-cors' })).then(function (response) {
                return true;
            }).catch(function (e) {
                var carbonScript = document.createElement("script");
                carbonScript.src = "//cdn.carbonads.com/carbon.js?serve=CK7DKKQU&placement=wwwjqueryscriptnet";
                carbonScript.id = "_carbonads_js";
                document.getElementById("carbon-block").appendChild(carbonScript);
            });
        } catch (error) {
            console.log(error);
        }
    </script>
    <!-- fin del countdown -->
    <script src="../JS/productos.js"></script>
    <script src="../JS/programa.js"></script>
    <script src="../JS/carrito.js"></script>
</body>

</html>   


 <!-- PÁGINA DE INICIO DE SESIÓN -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Floristería-Inicio de Sesión</title>
    <link rel="icon" href="/IMG/img icon.jpg">
    <link rel="stylesheet" href="../CSS/inicioSesion.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
        integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>

<body>
    <div id="form_main_container">
        <div class="div_container" id='div_container_login'>
            <form  class="form" id="form_login">
                <h1>Inicia Sesión</h1>
                <div class="div_input">
                    <input type="email" id="input_email"  class="input" required  data-boolean="false">
                    <label for="input_email">Correo electrónico</label>
                    <div class="div_icon">
                        <i class="fa-solid fa-envelope icon" ></i>
                    </div>
                    <p class="error_message">No está registrado o la escritura es incorrecta</p>
                </div>
                <div class="div_input">
                    <input type="password" id="input_password" class="input" required maxlength="20" data-boolean="false">
                    <label for="input_password">Contraseña</label>
                    <div class="div_icon">
                        <i class="fa-solid fa-lock icon" ></i>
                    </div>
                    <p class="error_message">La contraseña es incorrecta</p>
                </div>
                <div class="div_recordar">
                    <input type="checkbox" name="chekbox_password" id="input_recordar1" data-boolean="false">
                    <label for="input_recordar">Recuerdame la contraseña</label>
                </div>
                <div class="div_btn">
                    <button type="submit">Entrar</button>
                </div>
                <div class="div_lost_password_no_account">
                    <a href="#">¿No recuerdas la contraseña?</a>
                    <p>¿No tienes cuenta?<span class="span" id="enlace_registro">Regístrate</span></p>
                </div>
            </form>
        </div>
        <div class="div_container" id="div_container_register">
            <form action="#" class="form" id="form_register">
                <h1>Regístrate</h1>
                <div class="div_input">
                    <input type="text" id="input_full_name" class="input" required  data-boolean="false">
                    <label for="input_full_name">Nombre y Apellidos</label>
                    <div class="div_icon">
                        <i class="fa-solid fa-user icon " ></i>
                    </div>
                    <p class="error_message">Solo caracteres alfabéticos, no símbolos ni números (!@$%&123 etc...)</p>
                </div>
                <div class="div_input">
                    <input type="email" id="input_create_email"  class="input" required  data-boolean="false">
                    <label for="input_create_email">Correo electrónico</label>
                    <div class="div_icon">
                        <i class="fa-solid fa-envelope icon"></i>
                    </div>
                    <p class="error_message">No existe esta dirección de correo electrónico</p>
                </div>
                <div class="div_input">
                    <input type="tel" id="input_tel" class="input" required  maxlength="9" data-boolean="false">
                    <label for="input_tel">Teléfono</label>
                    <div class="div_icon">
                        <i class="fa-solid fa-phone icon"></i>
                    </div>
                    <p class="error_message">No admite letras solo caracteres numéricos</p>
                </div>

                <div class="div_input">
                    <input type="password" id="input_create_password" class="input" required  maxlength="20" data-boolean="false">
                    <label for="input_create_password">Crear una contraseña</label>
                    <div class="div_icon">
                        <i class="fa-solid fa-lock icon"></i>
                    </div>
                    <p class="error_message">
                        Para mayor seguridad la contraseña de be contener:<br>
                        ✔Contener al menos 8 caracteres.<br>
                        ✔Al menos una mayúscula.<br>
                        ✔Al menos un número.<br>
                        ✔Al menos un símbolo.<br>
                    </p>
                </div>
                <div class="div_input">
                    <input type="password" id="input_confirm_password" class="input" required  maxlength="20" data-boolean="false">
                    <label for="input_confirm_password">Confirmar contraseña</label>
                    <div class="div_icon">
                        <i class="fa-solid fa-lock icon "></i>
                    </div>
                    <p class="error_message">La contraseña debe ser igual</p>
                </div>
                <div class="div_recordar">
                    <input type="checkbox" name="chekbox_password"  id="input_recordar">
                    <label for="input_recordar">Recuerdame la contraseña</label>
                </div>
                <div class="div_btn">
                    <button type="submit">Registrarme</button>
                </div>
                <div class="div_lost_password_no_account">
                    <p>¿Ya estás registrado?<span class="span" id="enlace_incio_sesion">Iniciar Sesión</span></p>
                </div>
            </form>
        </div>
    </div>
  

    <script src="../JS/inicioSesion.js"></script>
</body>

</html>    


 <!-- PÁGINA DE PAGO -->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
        integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
    <link rel="stylesheet" href="../CSS/pagar.css">
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Great+Vibes&display=swap" rel="stylesheet">
    <title>Pago de artículos</title>
</head>

<body>
    <div id="div_container">
        <header>
            <div class="caja_header">
                <figure>
                    <img src="../IMG/tarjetas de credito.png" alt="imagen de tarjetas de crédito">
                </figure>
                <div>
                    <h1>Sección de pago</h1>
                    <p>Empresa receptora: <span class="font_title">Floristería López</span></p>
                </div>
            </div>
        </header>
        <main>
            <aside>
                <ol id="div_list_aside">
                    <li class="li_1 active">1.Resumen</li>
                    <li class="li_2">2.Datos de envío</li>
                    <li class="li_3">3.Datos de tarjeta</li>
                    <li class="li_4">4.Recibo</li>
                </ol>
            </aside>

            <article id="article">
                <div id="loading" data-value="0">
                    <div class="centrar">
                        <p>REALIZANDO EL PAGO</p>
                        <div class="caja_punticos">
                            <img class="punticos" src="../IMG/flor loading.png">
                            <img class="punticos" src="../IMG/flor loading.png">
                            <img class="punticos" src="../IMG/flor loading.png">
                            <img class="punticos" src="../IMG/flor loading.png">
                            <img class="punticos" src="../IMG/flor loading.png">
                        </div>
                        <p>Espere por favor</p>
                    </div>
                </div>
                <section id="section_resumen">
                    <h2>Resumen de tu carrito</h2>
                    <p>Vas a realizar la compra de los siguientes productos:</p>
                    <div class="alinear">

                        <div class="padre_resumen_dinamico">
                            <div id="div_section_resumen"><!-- javascript --></div>
                            <div class="resumen_footer">
                                <hr>
                                <p>Subtotal : <span id="subtotal_resumen"></span></p>
                                <p>Precio de Envío : <span id="precio_envio">3.50 €</span></p>
                                <p>Impuestos IVA% : <span id="impuesto_iva"></span></p>
                                <p>Total a pagar : <span id="total_pagar_resumen"></span></p>
                                <hr>
                                <button id="pagar_resumen">Confirmo datos correctos</button>
                            </div>
                        </div>

                        <div id="contenedor_nota_regalo">
                            <div id="cerrar_mensaje" title="cerrar mensaje">X</div>
                            <p>Escribe el mensaje para el regalo</p>
                            <p class="indicaciones_mensaje">
                                El mensaje no puede contener más
                                de 100 caracteres incluyendo espacios.
                            </p>
                            <textarea name="mensaje_regalo" id="textarea_mensaje_regalo" maxlength="100" rows="5"
                                placeholder="Escribe aquí..."></textarea>
                            <button id="btn_guardar_mensaje">Guardar</button>
                        </div>
                    </div>
                </section>
                <section id="section_datos_envio">
                    <h2>Datos de envío</h2>
                    <div id="div_section_datos_envio">
                        <form action="" id="form_datos_envio">
                            <div>
                                <label for="input_envio_nomb_apell">Nombre y Apellidos *</label>
                                <input type="text" id="input_envio_nomb_apell" required maxlength="30">
                                <div class="ms_error">
                                    <p>Solo admite letras y espacios</p>
                                </div>
                            </div>
                            <div>
                                <label for="input_envio_direcc">Dirección *</label>
                                <input type="text" id="input_envio_direcc" required maxlength="30">
                            </div>
                            <div>
                                <label for="input_provincia">Provincia *</label>
                                <select name="" id="input_provincia" required>
                                    <option value="" disabled selected></option>
                                    <option value="Valencia">Valencia</option>
                                    <option value="Madrid">Madrid</option>
                                    <option value="Badajoz">Badajoz</option>
                                    <option value="Almeria">Almería</option>
                                    <option value="Sevilla">Sevilla</option>
                                    <option value="Ciudad_real">Ciudad Real</option>
                                </select>
                            </div>
                            <div>
                                <label for="input_cp">Código Postal *</label>
                                <input type="number" id="input_cp" name="cp" required oninput="limitLength(event,8)">
                            </div>
                            <div>
                                <label for="input_telefono">Teléfono *</label>
                                <div class="contenedor_codig_y_num">
                                    <div id="desplegable_codigo_pais">
                                        <div class="placeholder_fake option" id="cambiante">
                                            <img src="../IMG/españa.png" alt="icono_españa">
                                            <span>+34 </span>
                                            <i class="fa-solid fa-play girar"></i>
                                        </div>
                                        <ul id="ul_country_code">
                                            <li class="option" title="España">
                                                <img src="../IMG/españa.png" alt="icono_españa" title="España">
                                                <span>+34</span>
                                            </li>
                                            <li class="option" title="Francia">
                                                <img src="../IMG/francia.png" alt="icono_francia" title="Francia">
                                                <span>+33</span>
                                            </li>
                                            <li class="option" title="Reino Unido">
                                                <img src="../IMG/reino-unido.png" alt="icono_reino_unido"
                                                    title="Reino Unido">
                                                <span>+44</span>
                                            </li>
                                            <li class="option" title="Italia">
                                                <img src="../IMG/italia.png" alt="icono_italia" title="Italia">
                                                <span>+39</span>
                                            </li>
                                            <li class="option" title="Alemania">
                                                <img src="../IMG/alemania.png" alt="icono_alemania" title="Alemania">
                                                <span>+49</span>
                                            </li>
                                            <li class="option" title="Noruega">
                                                <img src="../IMG/noruega.png" alt="icono_noruega" title="Noruega">
                                                <span>+47</span>
                                            </li>
                                        </ul>
                                    </div>
                                    <input type="number" id="input_telefono" required oninput="limitLength(event,9)">
                                </div>

                            </div>
                            <div>
                                <p class="p_observaciones">Observaciones para el envío</p>
                                <textarea name=" nota_cliente" cols="40" rows="5" maxlength="150"
                                    placeholder="Escribe aquí..."></textarea>
                            </div>
                            <button type="submit" id="guardar_direcc"> Guardar dirección</button>
                        </form>
                    </div>
                </section>
                <section id="section_datos_tarjeta">
                    <h2>Datos de la tarjeta</h2><!-- utilizar display grid aquí -->
                    <form action="" id="form_datos_tarjeta" method="post">
                        <h4>Seleccione su tipo de tarjeta:</h4>
                        <div class="div_icono_tarjetas">
                            <div>
                                <input type="radio" name="icon_card" id="visa">
                                <label for="visa"><img src="../IMG/visa.png" alt="icono tarjeta visa"></label>
                            </div>
                            <div>
                                <input type="radio" name="icon_card" id="mastercard">
                                <label for="mastercard"><img src="../IMG/mastercard.png"
                                        alt="icono tarjeta mastercard"></label>
                            </div>
                            <div>
                                <input type="radio" name="icon_card" id="american_express">
                                <label for="american_express"><img src="../IMG/american express.png"
                                        alt="icono tarjeta american express"></label>
                            </div>
                            <div>
                                <input type="radio" name="icon_card" id="carnet">
                                <label for="carnet"><img src="../IMG/carnet.jpg" alt="icono tarjeta carnet"></label>
                            </div>
                        </div>
                        <div class="div_inputs_info">
                            <div class="div_izquierdo">
                                <div>
                                    <label for="input_nombre">Nombre del titular</label>
                                    <input type="text" id="input_nombre" required maxlength="28">
                                    <div class="ms_error">
                                        <p>Solo admite letras y espacios</p>
                                    </div>
                                </div>
                                <div>
                                    <label for="input_apellidos">Apellidos del titular</label>
                                    <input type="text" id="input_apellidos" required maxlength="35">
                                    <div class="ms_error">
                                        <p>Solo admite letras y espacios</p>
                                    </div>
                                </div>
                                <div>
                                    <label for="input_numero_tarjeta">Número de tarjeta</label>
                                    <input type="number" id="input_numero_tarjeta" required
                                        oninput="limitLength(event,16)" placeholder="4675 8976 8765 1234">
                                    <div class="ms_error">
                                        <p>Solo admite números</p>
                                    </div>
                                </div>
                                <div>
                                    <label for="input_expiracion">Expiración (mm/yy)</label>
                                    <input type="month" id="input_expiracion" required>
                                    <div class="ms_error">
                                        <p>Solo admite números</p>
                                    </div>
                                </div>
                                <div>
                                    <label for="input_c_seguridad">Código de seguridad (CVV)</label>
                                    <input type="number" id="input_c_seguridad" oninput="limitLength(event,3)" required>
                                    <div class="ms_error">
                                        <p>Solo admite números</p>
                                    </div>
                                </div>
                                <div>
                                    <label for="input_email">Email</label>
                                    <input type="email" id="input_email" required>
                                </div>
                            </div>

                            <div class="div_derecho">
                                <img src="../IMG/tarjeta.webp" alt="imagen de tarjeta de crédito">
                                <div class="cuadrototal">
                                    <p>Total de la compra:</p>
                                    <hr>
                                    <p id="mostrar_total_pago2">546</p>
                                </div>
                            </div>
                        </div>
                        <button type="submit" id="btn_pagar_banco">PAGAR <i
                                class="fa-regular fa-credit-card"></i></button>
                    </form>
                </section>
                <section id="section_recibo">

                    <div id="div_section_recibo">
                        <h2> Recibo de pago</h2>
                        <div class="centrar_recibo">
                            <span>Fecha:</span><span id="fecha_compra"></span>
                            <p>Nº de Envío: <span id="numero_envio"></span></p>
                            <div>
                                <h3>Emisor:</h3>
                                <p class="font_title">Floristería López</p>
                            </div>
                            <div>

                                <p class="info_entrega_envio">El envío se entregará el <span id="plazo_entrega"></span>
                                    a la siguiente dirección:</p>
                                <p id="direcc_entreg"></p>
                            </div>
                        </div>

                    </div>
                </section>
            </article>
        </main>
    </div>
</body>
<script src="../JS/pago.js"></script>

</html>

<!-- PÁGINA CRÉALO TU MISMO -->
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Floristería López - Créalo tu mismo</title>
    <link rel="stylesheet" href="../CSS/crealoTuMismo.css">
</head>
<body id="body">
    <header>
        <div class="centrar">
            <h1>Crea tu ramo de flores</h1>
            <div class="flores_escogidas">
                <!-- JAVASCRIPT, deben venir ya las flores que escogió en la sección  de flores,
                  poner allí un botón de 'Para crear ramo' y  otro para 'Añadir a cesta' -->
            </div>
          <form action="" >
            <h3>Escoge dónde colocarás tus flores </h3>
            <div class="opciones">
                <div class="caja" >
                    <input type="radio" name="opcion" id="cesta" checked>
                    <label for="cesta" id="cestas">
                        <img src="../IMG/cesta1.jpg" alt="cesta">
                        <p>Cestas</p>
                    </label>
                </div>
                <div class="caja">
                    <input type="radio" name="opcion" id="molde">
                    <label for="molde" id="moldes">
                        <img src="../IMG/moldecorazón.jpg" alt="molde espuma">
                        <p>Molde de espuma</p>
                    </label>
                </div>
                <div class="caja">
                    <input type="radio" name="opcion" id="jarron">
                    <label for="jarron" id="jarrones">
                        <img src="../IMG/jarron1.webp" alt="jarron">
                        <p>Jarrón</p>
                    </label>
                </div>
                <div class="caja">
                    <input type="radio" name="opcion" id="envoltura">
                    <label for="envoltura" id="envolturas">
                        <img src="../IMG/hojasenvolturadeflores4.jpg" alt="plastico">
                        <p>Envoltura de flores</p>
                    </label>
                </div>
            </div>
            <hr>
          </form>
        </div>
    </header>
    <main>
        <div class="centrar">
            <form class="mostrar_opcion"><!-- JS, mostrar los colores de la opción seleccionada -->
                <!-- DINÁMICO posiblemente para que aperezca una opción tengo que hacer aquí la opción de las cestas -->
                 <h2 id="titulo_opcion"></h2>
                 <div id="opciones_seleccion"></div>
                 <div id="contenedor_dinamico">
                    <h3 id="h3"></h3>
                    <div id="mostrar"></div>
                   
                 </div>
      
            </form>

        </div>
    </main>
    <script src="../JS/productos.js"></script>
    <script src="../JS/crealoTuMismo.js"></script>
</body>
</html>
  

CSS


/* ESTILOS PRINCIPALES */
@import url(../CSS/dinamicMenu.css);
@import url(../CSS/carrito.css);

/* ESTILOS GLOBALES */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande',
        'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
    scroll-behavior: smooth;
}

a {
    text-decoration: none;
    color: black;
}

ul {
    list-style: none;

}

body {
    width: 100%;
    height: 100vh;
    position: relative;
}
#body{
     width: 100%;
    height: 100vh;
    position: relative;
}
.centrar {
    max-width: 1200px;
    margin: auto;
   
}

:root {
    --darkPink-color: rgba(245, 107, 157, 0.514);
    --mediumPink-color: rgba(236, 141, 228, 0.514);
    --btn-letter-color:rgb(253, 252, 252);
    --golden-color: linear-gradient(to right, #BF953F, #FCF6BA, #B38728, #FBF5B7, #AA771C);
    --box-shadow-golden: #BF953F;
    --purple-color: rgb(243, 98, 243);
    --black-color: rgb(10, 10, 10);
}




/* HEADER */
header {
    width: 100%;
    padding: 10px;
    background: url(../IMG/fondo\ prueba3.jpeg);
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
    position: relative;
    overflow: hidden;
}

.figure_logo {
    width: 50%;
    max-width: 200px;
    min-width: 100px;
    height: 130px;
    text-align: center;
    border-radius: 27px;
    padding: 3px 20px;
    position: relative;
   
}

.figure_logo img {
    width: 80%;
    position: absolute;
    z-index: 0;
    left: 0;
  
}

.nombre_floristeria {
/*     background: url(../IMG/fondo\ titulo\ letras.jpg);
    background-clip: text;
    -webkit-text-fill-color: transparent; */
    font-family: "Great Vibes", serif;
    font-weight: 600;
    font-style: normal;
    font-size: 25px;
    line-height: 20px;
    position: absolute;
    z-index: 10;
    bottom: 0;
    left: 0;
    padding: 6px;
    color: rgb(252, 251, 249);
}



nav {
    width: 100%;
    display: flex;
    justify-content: space-between;
}


.ul_nav {
    width: 100%;
    height: 30px;
    margin:20px 0px 0px 10px;
    display: flex;
    justify-content: flex-end;
    gap: 70px;
    align-items: center;

}

.small_let {
    font-size: 13px;
}

.li_nav {
    margin-left: 15px;
    color: var(--btn-letter-color);
    background-color:var(--box-shadow-golden);
    cursor: pointer;
    border-radius: 15px 2px 15px 15px;
    padding: 10px 20px;
}

.cesta button {
    position: relative;
}

.mostrar_cantidad_en_cesta{
    width: 17px;
    height: 17px;
    border-radius: 50%;
    display:flex;
    justify-content: center;
    align-items:center ;
    position: absolute;
    top: -6px;
    right: -13px;
    font-size: 60%;
    color: #f9f9f7;
    background: rgb(94, 93, 93);
}


.ul_nav li i {
    font-size: 20px;
    color: var(--btn-letter-color);
}

/* nav desplegable */

#div_menu {
    width: 100%;
    max-width: 500px;
    display: none;
    padding:6px;
    position: absolute;
    right: 0;
    z-index: 3;
}

.decoration {
    backdrop-filter: blur(10px);
    border-radius: 6px;
    border: 1px solid var(--mediumPink-color);
}

.div_icons {
    height: 10px;
    position: relative;
}
.div_icons i{
     font-size: 22px;
     cursor: pointer;
}



#close_icon, #menu_icon {
    display: none;
    position: absolute;
    right: 10px;
    top: 0;
}
#menu_icon{
    font-size: 25px;
}

.displayblock {
    display: none;
    
}

#dropDown_box {
    display: none;

}
  .options {
    padding: 6px 0px 6px 20px;
    }

.options i{
    margin-right: 15px;
    font-size: 20px;
}
.options button{
    background-color: transparent;
    border: none;
    font-size: 16px;
    color: white;
}
.options:hover {
    cursor: pointer;
    background-color: var(--darkPink-color);
}
.options a{
    color:white;
}

.description {
    display: flex;
    flex-direction: column;
    gap: 25px;
    text-align: center;
    border-radius: 10px;
    color: white;
    padding: 10px;
    width: 100%;
    max-width: 500px;
    margin: 10px auto;
    animation: backShowup 1.3s ease-in-out 1.3s forwards;
}

.description h1 {
    font-family: "Great Vibes", serif;
    font-size: 3em;
    transform: translateX(calc(100vw + 10px));
    animation: showup 1.5s ease-in-out forwards;
}

.description p {
    transform: translateX(calc(-100vw - 10px));
    animation: showup 1.5s ease-in-out 0.7s forwards;
}

.description a {
    transform: translateY(calc(200% + 10px));
    max-width: 200px;
    margin: auto;
    animation: showup 1.5s ease-in-out 1.4s forwards;
    color: rgb(252, 251, 251);
}

@keyframes showup {
    to {
        transform: translate(0%, 0%);
    }
}

@keyframes backShowup {
    to {
        backdrop-filter: blur(10px);
        box-shadow: 0px 0px 5px 0px var(--box-shadow-golden);
    }
}



.a_description:hover {
    background-color: var(--mediumPink-color);
}

.description p {
    font-size: 12px;
    margin: 4px 0px 10px 0px;

}

/* MAIN */
#main {
    width: 100%;
    padding: 10px 0;

    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;
    /* flex: 1; */
}

#main .centrar {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.ul_main {
    width: 100%;
    max-width: 1100px;
    margin: auto;
    display: flex;
    justify-content: space-between;
   
}

.btn {
    cursor: pointer;
    padding: 10px 15px;
    border-radius: 15px 2px 15px 15px;
    background: var(--box-shadow-golden);
    color: var(--btn-letter-color);
    transition: .3s;
    
    
}

.btn:hover {
    scale: 1.1;
}

/* BTN-OFERTAS */
#ofertas {
    background: rgb(209, 77, 77);
}

.span_oferta {
    font-size: 12px;
    font-weight: bold;
}

/* countdown */
#countdown{
    display: none;
}

:root {
    --primary: #282829;
    --secondary: rgba(241, 119, 119, 0.829);
    --glass: rgba(255, 255, 255, 0.1);
    --shadow: 0 8px 32px rgba(29, 30, 39, 0.678);
}


.hq-countdown {
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    display: flex;
    justify-content: space-around;
    width: 100%;
    max-width: 400px;
    padding: 3px;
    margin: auto;
    border-radius: 5px;
    backdrop-filter: blur(10px);
    transition: all 0.3s ease;
}

.hq-countdown-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 10px 20px;
    background: linear-gradient(145deg, var(--primary), var(--secondary));
    border-radius: 7px;
    backdrop-filter: blur(5px);
    border: 1px solid rgba(255, 255, 255, 0.1);
    transition: transform 0.3s ease;
    box-shadow: var(--shadow);
}

.hq-countdown-item:hover {
    transform: translateY(-5px);
}

.hq-number {
    font-size: 20px;
    font-weight: 700;
    background: linear-gradient(45deg, #fff, #e0e7ff);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.hq-label {
    color: rgba(255, 255, 255, 0.9);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 1px;
    font-weight: 500;
}

/* Ended state */
.hq-ended {
    background: linear-gradient(145deg, #ef4444, #dc2626);
    animation: pulse 1.5s infinite;
}

.hq-ended .hq-countdown-item {
    background: rgba(255, 255, 255, 0.15);
}

.hq-countdown-ended {
    color: white;
    font-size: 1.5rem;
    font-weight: 600;
    padding: 2rem;
    display: flex;
    align-items: center;
    gap: 0.75rem;
}

@keyframes pulse {
    0% {
        transform: scale(1);
    }

    50% {
        transform: scale(1.02);
    }

    100% {
        transform: scale(1);
    }
}

/* SECTION DINAMIC_CONTENT */
#dinamic_section {
    width: 100%;
}

.container_carousel {
    width: 100%;
    padding: 10px;
    background-position: center;
    display: flex;
    justify-content: center;
    align-items: center;
}

.over_flow {
    width: 100%;
    max-width: 600px;
    display: flex;
    align-items: center;
    gap: 20px;
}

.over_flow i {
    font-size: 3em;
    font-weight: bold;
}

#ul_carousel {
    width: 100%;
    display: flex;
    gap: 50px;
    padding: 4px;
    overflow: hidden;
    color: #000000;
}

.li_carousel {
    display: flex;
    width: 100%;
    flex-shrink: 0;
    border: 1px solid var(--mediumPink-color);
    border-radius: 7px;
    padding: 4px;
    transition: 1s;
}

.description_carousel {
    width: 60%;
    display: flex;
    flex-direction: column;
    justify-content: space-around;
    gap: 15px;
}

.description_carousel h2 {
    font-size: 25px;
}

.description_carousel h3 {
    font-size: 15px;
}

.description_carousel p {
    font-size: 12px;
    padding: 6px 0px;
}

.div_btn_carousel {
    width: 100px;
    margin: 0 auto;
}

.btn_carousel {
    width: 100%;
    padding: 6px;
    border: none;
    background-color: var(--box-shadow-golden);
    border-radius: 7px;
    font-size: 15px;
}

.img_carousel {
    width: 40%;
    display: flex;
    justify-content: center;
    align-items: center;
}

.img_carousel img {
    width: 100%;
    border-radius: 7px;
    aspect-ratio: 1;
}

/* FLORES */
#div_container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    justify-items: center;
    align-items: center;

}

.caja-flor {
    width: 100%;
    height: 100%;
    max-height: 400px;
    max-width: 250px;
    border: 1px solid rgb(211, 210, 210);
    border-radius: 7px;
    padding: 7px;
    display: flex;
    align-items: center;
    flex-direction: column;
    gap: 8px;
}

.caja-flor img {
    width: 100%;
    max-width: 160px;
    border-radius: 7px;
    object-fit: cover;
    aspect-ratio: 1;
}

.caja-flor button {
    width: 80%;
    max-width: 100px;
    background-color: var(--box-shadow-golden);
    color:var(--btn-letter-color);
    padding: 8px 0px;
    border-radius: 7px;
    border: none;
    outline: none;
    cursor: pointer;
   
}

.caja-flor p {
    font-size: 12px;
}

/* OFERTAS */
.hr{
    margin: 50px;
}

/* FOOTER */
footer {
    background: var(--darkPink-color);
    width: 100%;
    padding: 3px;
}

.ul_footer {
    width: 100%;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}

.li_footer {
    max-width: 200px;
    margin: 6px auto;
    display: flex;
    flex-direction: column;
    justify-content: space-around;
}

.li_footer a{
    display: flex;
    align-items: center;
    gap: 5px;
}

#icon {
    border-radius: 100%;
}

/* MEDIA QUERIES */
/* @media (max-width:600px) {

    #div_menu {
        display: block;
        padding: 2px;
    }

    #menu_icon {
        display: block;
    }


    .ul_carousel {
        width: 90%;
    }

    .ul_nav {
        display: none;
    }

    .options {
        padding: 3px;
    }

    .div_description h2 {
        font-size: 15px;
    }

}
 */


@media (max-width:1000px) {
    .ul_main{
        padding: 4px;
        margin: auto;
        max-width: 800px;
        display: grid;
        grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
        gap: 10px;
    }
    .ul_main li{
        text-align: center;
    }
     #div_menu {
        display: block;
        
    }

    #menu_icon {
        display: block;
    }


    .ul_carousel {
        width: 90%;
    }

    .ul_nav {
        display: none;
    }

    .div_description h2 {
        font-size: 15px;
    }
    .li_footer{
        font-size: calc(100% - 5px);
    }
}

/* INICIO DE SESIÓN */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    color: white;
    font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
}

a {
    text-decoration: none;
}


:root {
    --darkPink-color: rgba(245, 107, 157, 0.514);
    --mediumPink-color: rgba(236, 141, 228, 0.514);
    --btn-letter-color: rgb(253, 252, 252);
    --purple-color: rgb(243, 98, 243);
    --black-color: rgb(10, 10, 10);
    --golden-color: linear-gradient(to right, #BF953F, #FCF6BA, #B38728, #FBF5B7, #AA771C);
    --box-shadow-golden: #BF953F;
}

body {
    background: url(../IMG/fondo\ prueba3.jpeg);
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
    display: flex;
    justify-content: center;
    align-items: center;
}

#form_main_container {
    width: 100%;
    max-width: 370px;
    text-align: center;
    overflow: hidden;
    display: flex;
    gap: 60px;
    margin-top: 30px;
}

.div_container {
    width: 100%;
    height: 100%;
    flex-shrink: 0;
    padding: 10px;


}

#div_container_login,
#div_container_register {
    transition: 1s;
}



.form {
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: space-around;
    backdrop-filter: blur(40px);
    border-radius: 10px;

    font-size: 14px;
}

.form h1 {
    margin: 20px 0px 6px 0px;
}

.div_input {
    position: relative;
    margin: 10px 0px;
    padding: 10px;
}

.error_message {
    font-size: 10px;
    text-align: left;
    display: none;
}

.styles_error_message {
    display: block;
    color: rgb(235, 5, 5);
    font-weight: bold;
}
.error_message.styles_error_message{
    background-color:rgba(255, 0, 0, 0.411) ;
    color: white;
    margin-top: 3px;
}

.style_right_icon {
    color: rgb(33, 136, 33);
}

.input {
    border: none;
    outline: none;
    background-color: transparent;
    height: 20px;
    width: 100%;
    border-bottom: 2px solid white;
}

.style_right_input {
    border-bottom: 2px solid rgb(33, 136, 33);
}

.div_icon {
    width: 15px;
    height: 15px;
    position: absolute;
    display: grid;
    place-items: center;
    top: 5px;
    right: 0;
    margin-right: 15px;
}


.div_input label {
    transition: .2s;
    font-size: 14px;
    position: absolute;
    left: 0;
    margin-left: 10px;
}

.div_input input:focus~label,
.div_input input:valid~label {
    transform: translateY(-110%);
    font-size: 10px;
}

.div_btn {
    width: 70%;
    height: 30px;
    max-width: 300px;
    margin: 0 auto;
    overflow: hidden;
    border-radius: 7px;
    cursor: pointer;
    position: relative;
}

.div_btn button {
    position: absolute;
    width: 100%;
    height: 100%;
    left: 0;
    border: none;
    outline: none;
    padding: 7px;
    background-color: transparent;
    cursor: pointer;
    z-index: 1;
    transition: .2s;
}

.div_btn::before {
    position: absolute;
    top: 0;
    left: 0;
    content: '';
    width: 110%;
    height: 60px;
    background: linear-gradient(180deg, var(--box-shadow-golden), rgb(240, 220, 130), var(--box-shadow-golden), rgb(240, 220, 130));
    transition: .3s;
    z-index: 0;
}

.div_btn:hover::before {
    transform: translateY(-40%);
}

.div_btn:hover button {
    text-transform: uppercase;
    letter-spacing: 1px;
    font-weight: bold;
}

.div_recordar,
.div_btn {
    margin: 7px auto;
}

.div_lost_password_no_account {
    margin: 20px 0px;
}

.span {
    font-weight: bold;
    color: rgb(129, 75, 5);
    padding: 6px;
    cursor: pointer;
}

.span:hover {
    color: var(--box-shadow-golden);
}

/* MENÚ DINÁMICO */
#dinamic_div {
    width: 100%;
    max-width: 1100px;
    margin: 40px auto 0px;
    padding: 20px 30px;
    text-align: center;

}


#div_container {
    width: 100%;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
    gap: 15px;

}

#dinamic_title {
    font-size: 40px;
    margin-bottom: 4px;
}

#description {
    text-align: left;
    font-size: 13px;
    margin: 10px auto 60px;
    max-width: 600px;
}

.caja {
    width: 100%;
    max-width: 200px;
    border-radius: 7px;
    margin: 0 auto;
    border: 1px solid rgb(206, 203, 203);
}

.figure_render {
    width: 100%;

}

.figure_render img {
    width: 100%;
    aspect-ratio: 1;
    border-radius: 7px;
}

.div_description {
    width: 100%;
}

.description_p {
    margin: 7px 0px;
    font-size: 12px;
}
.span_precio_actual{
    color: var(--box-shadow-golden);
    font-weight: bold;
    display: block;
}
.span_precio_antes{
    display: block;
    color: rgb(160, 159, 159);
    font-size: 12px;
    position: relative;
}

.span_precio_antes::after{
    position: absolute;
    content: '';
    width: 50px;
    height: 1px;    
    background-color: rgb(194, 191, 191);
    transform: rotate(5deg) translate(-45px,13px);
}

.div_description button {
    padding: 8px;
    border: none;
    background: var(--box-shadow-golden);
    border-radius: 5px;
    margin: 3px 0px;
    cursor: pointer;
    transition: .3s;
}

.div_description button:hover {
    cursor: pointer;
    scale: 1.04;

}

/* DINAMIC PRODUCT */
.dinamic_product_figure {
    width: 100%;
    max-width: 300px;
}
.dinamic_product_figure.oferta{
        position: relative;
    overflow: hidden;
    
}

.img_cambiante {
    width: 100%;
    aspect-ratio: 1;
    object-fit: cover;
    border-radius: 10px;
}

.oferta::after{
    content:'Antes: ' attr(data-oldprice);
    position: absolute;
    top: 0;
    right: 0;
    background-color: red;
    width: 100%;
    height: 40px;
    font-weight: bold;
    color: white;
    transform: rotate(30deg) translate(60px);
    display: flex;
    justify-content: center;
    align-items: center;
}
#dinamic_product_section {
    width: 100%;
    min-width: 400px;
}

#dinamic_container_product1 {
    width: 100%;
    display: flex;
    gap: 20px;

}

#dinamic_container_product1.diferent_style {
    display: inline;
    text-align: center;
    font-size: 40px;
    font-weight: bold;
    color: rgb(249, 148, 7);
}

.small_imgs {
    display: flex;
    justify-content: space-around;
    gap: 6px;
}

.caja_peq_flor {
    width: 50px;
    transition: .3s;
    cursor: pointer;
    border-radius: 4px;
    aspect-ratio: 1;
    object-fit: cover;
}

.caja_peq_flor:hover {
    scale: 1.1;
}

.caja_producto_dinamico {
    width: 50%;
    max-width: 220px;
    margin: auto;
    box-shadow: inset 0px 0px 8px 7px var(--box-shadow-golden);
    border-radius: 7px;
    position: relative;
    transition: .3s;
}

.caja_producto_dinamico h5 {
    font-size: 14px;
}

.caja_producto_dinamico label {
    display: block;
    border-radius: 3px;
    padding: 4px 2px;
    width: 100%;
    height: 100%;
    cursor: pointer;
}

.caja_color {
    width: 40%;
    min-width: 70px;
    max-width: 100px;
    padding: 4px;
    border-radius: 5px;
    box-shadow: 0px 0px 1px 1px rgb(193, 192, 192);
    cursor: pointer;
    transition: .3s;
    position: relative;
}

.caja_color:hover {
    scale: 1.1;
}

.caja_producto_dinamico input {
    opacity: 0;
    position: absolute;
}

.caja_producto_dinamico:hover {
    box-shadow: inset 0px 0px 25px 26px var(--box-shadow-golden);
}

.p_description_product {
    margin: 4px 0px;
    font-size: 12px;
}

.cantidad_flores textarea {
    resize: none;
    padding: 6px;
    width: 90%;
    max-width: 400px;
    border: 1px solid var(--box-shadow-golden);
    outline: none;
    border-radius: 6px;
}

.price {
    color: rgb(146, 86, 8);
    font-weight: bold;
    font-size: 16px;
    margin-top: 8px;
}

.main_container_color {
    margin-top: 15px;

    display: flex;
    flex-direction: column;
    gap: 15px;
}

.btn_crear_ramo {
    width: 80%;
    max-width: 200px;
    margin: auto;
    color: black;
    padding: 10px 0px;
    border-radius: 6px;
    background: var(--box-shadow-golden);
    box-shadow: 0px 0px 3px 3px var(--box-shadow-golden);
}

.input_producto_precio:not(:checked)~label {
    opacity: 0.7;
}

.input_producto_precio:checked~label {
    background-color: var(--box-shadow-golden);

}


.container_color {
    margin-top: 10px;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 10px;
}

.input_color {
    border: 1px solid rgb(158, 158, 154);
    font-size: 12px;
    padding: 7px;
    border-radius: 5px;

}

.color_input {
    opacity: 0;
    position: absolute;
    cursor: pointer;
}

.input_cantidad {
    padding: 4px;
    text-align: center;
}

.btn_anadir_carrito {
    padding: 12px;
    width: 100%;
    max-width: 300px;
    margin: auto;
    background: var(--box-shadow-golden);
    box-shadow: 0px 0px 3px 3px var(--box-shadow-golden);
    border: none;
    border-radius: 7px;
    outline: none;
    cursor: pointer;
    transition: .3s;
    text-transform: uppercase;
    font-weight: bold;

}

.btn_anadir_carrito:hover {
    scale: 1.1;
}

#mensaje_anadido {
    font-size: 12px;
    width: 250px;
    margin: auto;
    color: green;
    background-color: rgb(208, 251, 208);
    opacity: 0;
    transition: .5s;
    padding: 6px;
}

.check {
    color: green;
    font-size: 18px;
}




/* MEDIA QUERIES */
@media (max-width:600px) {
    #div_container {
        width: 100%;
        display: grid;
        grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
        gap: 15px;
    }

    #dinamic_title {
        font-size: 25px;
    }

    #dinamic_product_section {
        min-width: none;
    }

    #dinamic_product_section h3 {
        font-size: 15px;
    }
}



/* CARRITO */
@import url(../CSS/estilos.css);

.li_nav button {
    background-color: transparent;
    outline: none;
    border: none;
}

#my_popover {
    background: var(--darkPink-color);
    max-height: 100vh;
    overflow-y: auto;
    width: 100%;
    max-width: 600px;
    margin: auto;
    border: none;
    text-align: center;
    position: relative;
}

#my_popover::backdrop {
    backdrop-filter: blur(6px);

}

.li_nav:nth-of-type(4) {
    position: relative;
}

#mensaje_no_hay_articulos {
    text-align: center;
    padding: 40px 0px;

}

#my_popover .h3_cesta {
    position: sticky;
    top: 0;
    padding: 20px 0px;
    background: var(--box-shadow-golden);
    text-transform: uppercase;
    font-size: 20px;
    color: white;
}

.caja_articulo {
    width: 100%;
    font-size: calc(100% - 2px);
    border: 1px solid rgba(128, 128, 128, 0.342);
    padding: 5px;
    display: flex;
    justify-content: center;
    justify-content: space-between;

}

.footer_cesta {
    background: var(--box-shadow-golden);
    padding: 10px 6px;
}

.footer_cesta p {
    text-align: left;
    text-transform: uppercase;
    font-weight: bold;
    margin-left: 6px;
}

.total_cesta {
    font-size: 17px;
    margin-left: 12px;
}

#pagar {
    width: 60%;
    padding: 10px 7px;
    margin-top: 10px;
    font-size: 15px;
    font-weight: bold;
    color: black;
    background: antiquewhite;
    box-shadow: inset 0px 0px 5px 5px rgb(153, 138, 119);
    border: none;
    border-radius: 5px;
    cursor: pointer;
    transition: .3s;
}

#pagar:hover {
    box-shadow: inset 0px 0px 11px 11px rgb(153, 138, 119);
}

.caja_articulo .caja_description {
    width: 30%;
    max-width: 130px;

}

.caja_articulo .caja_description img {
    width: 100%;
    object-fit: cover;
    aspect-ratio: 1;
    height: 100px;
    border-radius: 10px;
}

.caja_articulo .caja_cantidad {
    width: 30%;
    max-width: 150px;
    display: flex;
    justify-content: center;
    justify-content: space-between;
    align-items: center;
}

.caja_articulo .caja_cantidad input {
    width: 60%;
}

.caja_precio_total {
    width: 30%;
    display: flex;
    justify-content: space-between;
}

.caja_precio_total div:nth-child(3) {
    display: grid;
    place-content: center;
}

/* PAGO */
:root {
    --darkPink-color: rgba(241, 76, 186, 0.514);
    --mediumPink-color: rgba(236, 141, 228, 0.514);
    --lightPink-color: rgba(243, 187, 236, 0.322);
    --golden-color: linear-gradient(to right, #BF953F, #FCF6BA, #B38728, #FBF5B7, #AA771C);
    --box-shadow-golden: #BF953F;
    --purple-color: rgb(243, 98, 243);
    --black-color: rgb(10, 10, 10);
}



* {
    margin: 0;
    padding: 0;
    text-decoration: none;
    box-sizing: border-box;
    font-family: 'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
    color: var(--extraDarkBrown-color);
}


input {
    outline: none;
    border: 1px solid grey;
}

#div_container {
    width: 100%;
    max-width: 1200px;
    background-color: var(--golden-color);
    margin: auto;
}

header {
    width: 100%;
    color: white;
    background: linear-gradient(80deg,var(--black-color)28%, var(--purple-color), transparent);
}

.caja_header {
    display: flex;
    padding: 30px 0px 30px 40px;
}

.caja_header h1 {
    font-size: 2.5em;

}

.font_title {
    font-family: "Great Vibes", serif;
    font-size: 28px;
    font-weight: 500;
}

.caja_header div {
    margin-left: 15px;
}

.caja_header figure {
    width: 10%;
    max-width: 70px;
    display: grid;
    place-content: center;
}

.caja_header figure img {
    width: 100%;
    object-fit: cover;
    aspect-ratio: 1;
}

main {
    width: 100%;
    height: calc(100% - 91px);
    display: flex;
}

aside {
    width: 20%;
        color: white;
    background:linear-gradient(180deg,var(--black-color)15%,var(--purple-color),transparent);
}

#div_list_aside {
    list-style: none;
}

#div_list_aside li {
    padding: 20px 0px 20px 10px;
    font-weight: bold;
    font-size: 16px;
    display: flex;
    align-items: center;
}

.active {
    background-color: rgba(153, 152, 152, 0.315);
}


article {
    width: 80%;
    padding: 20px 0px 0px 0px;
}

article h2 {
    font-size: 30px;

}

article:first-child {
    font-size: 13px;
    margin-left: 40px;
    margin-bottom: 7px;
}

#section_resumen {

    width: 100%;
    padding: 0px 20px;

}

#section_datos_envio,
#section_datos_tarjeta,
#section_recibo {
    
    display: none;
}


/*SECCIÓN RESUMEN */
.alinear {
    display: flex;
    gap: 15px;
    margin-top: 20px;
}

.padre_resumen_dinamico {
    box-shadow: 0px 0px 2px 2px rgb(129, 129, 128);
    border: 1px dashed rgb(129, 129, 128);
    width: 100%;
    max-width: 700px;
}

#div_section_resumen {
    margin-bottom: 8px;
}

.caja_producto {
    width: 95%;
    margin: auto;
    padding: 7px;
    display: flex;
    justify-content: space-around;
    gap: 16px;
    font-size: 13px;
    text-align: center;
    border-bottom: 1px dashed rgb(129, 129, 128);
}

.caja_producto figure {

    width: 40%;
    text-align: left;
    max-width: 200px;

}

.caja_producto figure * {
    text-align: center;
}

.caja_producto figure img {
    display: block;
    margin: 8px auto;
    width: 80%;
    max-width: 150px;
    border-radius: 20px;
    box-shadow: 0px 3px 4px 0px grey;
}

.caja_producto h4 {
    font-size: 14px;
    margin-bottom: 10px;
}

.caja_producto div:nth-of-type(1) {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}

.p_cantidad_flores {
    font-size: 30px;
    font-weight: bold;
    text-align: center;
}

.nota {
    font-size: 10px;
    margin-bottom: 50px;
}

.div_delete {
    width: 20px;
    height: 20px;
    margin: auto 10px;

}

.div_delete i {
    font-size: 18px;
    cursor: pointer;
}

.caja_producto div:nth-of-type(2) {
    text-align: center;
}

.resumen_footer {
    padding: 4px;
}

.resumen_footer p {
    font-size: 12px;
    padding: 4px 0px;
    font-weight: 600;
}

.resumen_footer p>span {
    float: right;
    font-size: 14px;
    font-weight: bold;
}

#pagar_resumen {
    display: block;
    width: 70%;
    max-width: 300px;
    margin: 15px auto;
    outline: none;
    border: none;
    padding: 10px 20px;
    box-shadow: inset 0px 0px 10px 10px rgb(129, 129, 129);
    background-color:rgb(170, 170, 170);
    border-radius: 7px;
    cursor: pointer;
    text-transform: uppercase;
    font-weight: bold;
    font-size: 14px;
}

#contenedor_nota_regalo {
    width: 200px;
    height: 200px;
   
    margin: 20px auto;
    display: none;
    position: relative;
    
}

.nota {
    font-size: 10px;
    margin-bottom: 50px;
}

#cerrar_mensaje {
    position: absolute;
    right: 0;
    top: -30px;
    width: 30px;
    height: 30px;
    cursor: pointer;
    display: grid;
    place-content: center;
    border-radius: 5px;
    background-color: var(--lightBrown-color);
    box-shadow: inset 0px 0px 3px 3px var(--darkBrown-color);
}

#textarea_mensaje_regalo {
    width: 100%;
    resize: none;
    border: none;
    outline: none;
    padding: 6px;
    box-shadow: 0px 0px 2px 2px grey;
    border-radius: 4px;
}

.indicaciones_mensaje {
    font-size: 10px;
    font-weight: bold;
    margin: 6px 0px 10px 0px;
}

#btn_guardar_mensaje {
    display: block;
    margin: 10px auto;
    padding: 5px 20px;
    border: none;
    border-radius: 6px;
    outline: none;
    cursor: pointer;
    background-color: var(--lightBrown-color);
    box-shadow: inset 0px 0px 3px 3px var(--darkBrown-color);
}

.mail {
    color: rgb(33, 131, 33);
    font-size: 30px;
}

.editar_ms,
.borrar_ms {
    cursor: pointer;
    font-size: 12px;
    margin: 3px 0px;
}

.editar_ms:hover {
    color: rgb(155, 97, 10);
}

.borrar_ms:hover {
    color: red;
}

/* SECCIÓN DATOS ENVÍO */
#section_datos_envio {
    padding: 0px 10px;
}

#div_section_datos_envio {
    width: 90%;
    max-width: 400px;
    margin-left: 40px;

}

#form_datos_envio>div {
    display: flex;
    flex-direction: column;
    margin: 20px 0px;

}

.ms_error {
    display: none;
}

.ms_error p {
    color: red;
    font-size: 12px;
}

#div_section_datos_envio div:nth-child(2) input {
    width: 100%;
}

#div_section_datos_envio input,
select {
    border-radius: 4px;
/*     border: none; */
    outline: none;
    padding: 6px 3px;
    width: 60%;
}

#div_section_datos_envio input:focus,
select:focus {
    border: none;
    box-shadow: 0px 0px 3px 1px rgb(87, 124, 179);
}

#div_section_datos_envio textarea {
    border-radius: 4px;

    outline: none;
    resize: none;
    padding: 6px;
}

#div_section_datos_envio label,
.p_observaciones {
    margin-left: 6px;
}

.contenedor_codig_y_num {
    width: 100%;
    display: flex;
}

#desplegable_codigo_pais {
    background-color: white;
    margin-right: 6px;
    position: relative;
}

#ul_country_code {
    background-color: white;
    position: absolute;
    width: 100%;
    display: none;
}

#ul_country_code .option:hover {
    background-color: rgb(212, 192, 166);
}

#desplegable_codigo_pais .option {
    width: 100%;
    height: 30px;
    display: flex;
    gap: 4px;
    justify-content: center;
    align-items: center;
    cursor: pointer;
}

.placeholder_fake {
    opacity: 0.3;
}

.placeholder_fake:hover {
    opacity: 1;
}

.girar {
    font-size: 12px;
    margin-left: 15px;
    transform: rotate(30deg);
}

#desplegable_codigo_pais .option img {
    width: 20px;
    object-fit: contain;
}


#guardar_direcc {
    display: block;
    width: 80%;
    max-width: 200px;
    margin: 20px auto;
    padding: 15px 0px;
    text-align: center;
    border-radius: 10px;
    font-weight: bold;
    text-transform: uppercase;
      box-shadow: inset 0px 0px 10px 10px rgb(129, 129, 129);
    background-color:rgb(170, 170, 170);
}

/* SECCIÓN TARJETA   SECCIÓN TARJETA */
#section_datos_tarjeta {
    width: 100%;
}

.div_icono_tarjetas {
    display: flex;
    gap: 7px;
    margin-left: 30px;
}

.div_icono_tarjetas input {
    display: none;
}

.div_icono_tarjetas label {
    font-size: 12px;
    margin-left: 3px;
}

.div_icono_tarjetas div {
    width: 50px;

}

.div_icono_tarjetas img:hover {
    box-shadow: 0px 0px 1px 1px rgb(87, 124, 179);
    cursor: pointer;
}

.div_icono_tarjetas div img {
    width: 100%;
    object-fit: cover;
    aspect-ratio: 1.5;
    background-color: rgba(252, 250, 250, 0.329);
}

.div_inputs_info {
    width: 100%;
    display: flex;

    gap: 3px;
    justify-content: space-between;
}

.div_inputs_info input {
    display: block;
    border-radius: 4px;
    padding: 6px 2px;
    width: 90%;
}

.div_inputs_info input:focus {
    border: none;
    box-shadow: 0px 0px 1px 1px rgb(87, 124, 179);
}

#input_expiracion {
    width: 40%;
}

#input_c_seguridad {
    width: 40%;
    max-width: 50px;
}

input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
.div_derecho{
    width: 100%;
  
    display: grid;
    place-items: center;
}

.div_derecho img {
    width: 100%;
    min-width: 100px;
    max-width: 250px;
}
.cuadrototal p:first-child{
    font-weight: bold;

}
#mostrar_total_pago2{
    font-size: 30px ;
    font-weight: bold;
}
.div_izquierdo {
    padding: 15px;
 
    width: 100%;
    max-width: 500px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;

}

.div_izquierdo div {
    margin-bottom: 10px;
}

#btn_pagar_banco {
    display: block;
    width: 80%;
    max-width: 200px;
    margin: 20px auto;
    padding: 15px 0px;
    text-align: center;
    border-radius: 10px;
    font-weight: bold;
    text-transform: uppercase;
      box-shadow: inset 0px 0px 10px 10px rgb(129, 129, 129);
    background-color:rgb(170, 170, 170);
}
#loading{
    height: 100vh;
    width: 100%;
    display: grid;
    place-items: center;
    backdrop-filter: blur(5px);
    display: none;
}
.centrar{
    width: 90%;
    height: 40%;
    text-align: center;
    
}
.caja_punticos{
    display: flex;
    justify-content: center;
    gap:9px;
    margin: 15px 0px;
}
.punticos{
    width: 40px;
    height: 40px;
    border-radius: 50%;
    opacity: 0.2;
    
}
.animacion_activa{
    animation: transicion 5s ease infinite ;
}
.centrar:first-child{
    font-weight: bold;
    font-size: 25px;
    
}
.centrar p:nth-child(3){
    font-size: 13px;
    text-align: center;
}

.punticos:nth-child(1){
    animation-delay: 0s;
}
.punticos:nth-child(2){
    animation-delay: 1s ;
} 
 .punticos:nth-child(3){
    animation-delay: 2s ;
}
 .punticos:nth-child(4){
    animation-delay: 3s ;
}
 .punticos:nth-child(5){
    animation-delay: 4s ;
}


@keyframes transicion {
0% {
    
    opacity: 1;
}
20%{
    opacity: 0.2;
}
}


/* SECCION RECIBO  SECCION RECIBO */

#div_section_recibo{
    width: 90%;
    max-width: 700px;
    margin:0px auto 40px;
    border: dashed 1px grey;
    box-shadow: 0px 0px 2px 2px rgb(189, 188, 188);
}
.centrar_recibo{
    display: flex;
    flex-direction: column;
    gap: 20px;
    padding: 10px;
}
.info_entrega_envio{
    margin-bottom: 8px;
}
.d_envio{
    display: flex;
    flex-direction: column;
    gap: 8px;
}
#div_section_recibo h2{
    text-align: center;
    background: linear-gradient(45deg, var(--darkBrown-color),var(--lightBrown-color),transparent);
}
#plazo_entrega{
    font-weight: bold;
}
.bold{
    font-weight: bold;
}

/* MEDIA QUERIES */
@media (max-width: 980px) {
    .alinear {
        display: grid;
    }

    #contenedor_nota_regalo {
        
        width: 70%;
        max-width: 500px;
        grid-column: 1/2;
        grid-row: 1/2;
    }
}


/* CRÉALO TU MISMO */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;

}

body {
    height: 100%;
    background: linear-gradient(rgba(0, 0, 0, 0.460), rgba(0, 0, 0, 0.460)), url(../IMG/background\ crealo\ tu\ mismo.avif);
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
    color: white;
}

.centrar {
    width: 100%;
    max-width: 1200px;
    margin: auto;
}

h1 {
    text-align: center;
    width: 100%;
    padding: 40px 0;
    font-size: 3em;

}

form {
    width: 100%;
}

h3 {
    text-align: center;
    margin-bottom: 30px;

}

.opciones {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    justify-content: space-between;
}

.opciones input {
    display: none;
}

.caja {
    max-width: 200px;
    height: 60px;
    background: white;
    border-radius: 7px;
    transition: .3s;

}

.caja label {
    width: 100%;
    height: 100%;
    border-radius: 7px;
    display: flex;
    align-items: center;
    gap: 20px;
    cursor: pointer;
}

.opciones label:hover {
    background-color: rgb(228, 218, 175);
}

.opciones label p {
    color: black;
    font-weight: bold;
}

.opciones label img {
    width: 30%;
    aspect-ratio: 1;
    object-fit: cover;
    border-radius: 10px;
}

.opciones input:checked~label {
    background-color: rgb(228, 218, 175);
}

hr {
    margin: 20px 0;
}

#titulo_opcion {
    text-align: center;
    padding: 20px 0;
    font-size: 3em;
}

#opciones_seleccion {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 10px;
}

#opciones_seleccion div {
    max-width: 200px;
    margin: auto;
    padding: 10px;
    text-align: center;
    background-color: rgba(0, 0, 0, 0.534);
    cursor: pointer;
    border-radius: 10px;
}

#opciones_seleccion div img {
    width: 100%;
    border-radius: 10px;
    object-fit: cover;
    aspect-ratio: 1;
}

#opciones_seleccion div p {
    padding: 10px 0;
    font-size: 17px;
}

#contenedor_dinamico {
    background: rgba(0, 0, 0, 0.61);
    margin-top: 30px;
}

#h3 {
    padding-top: 20px;
    font-size: 2em;
}

#mostrar {
    display: grid;
    padding: 10px;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 20px;
}

#mostrar img {
    width: 100%;
    margin: auto;
    max-width: 300px;
    aspect-ratio: 1;
    object-fit: cover;
    border-radius: 7px;
}

.aside_tamano {
    max-width: 400px;
    margin: auto;
    display: flex;
    flex-direction: column;
    gap: 20px;

}

.aside_tamano h4 {
    margin-bottom: 10px;
    font-size: 20px;
    text-align: center;
}

.aside_tamano button {
    width: 100%;
    max-width: 300px;
    margin: auto;
    padding: 10px 0px;
    border: none;
    background-color: rgb(244, 238, 238);
    border-radius: 7px;
    font-size: 20px;
    cursor: pointer;
}

#div_tamano {
    display: flex;
    gap: 20px;
}

.div2 {
    max-width: 250px;
    text-align: center;
    background-color: rgba(107, 101, 101, 0.507);
    border-radius: 7px;
    padding: 3px;
    cursor: pointer;

}

.div2:hover {
    background-color: rgba(250, 235, 215, 0.411);
}

.div2 img {
    width: 100%;
    object-fit: cover;
    aspect-ratio: 1;
}

.div2 span {
    font-size: 18px;
    color: rgb(239, 127, 8);
}

.div2 :first-child {
    font-weight: bold;
    font-size: 17px;
    margin-bottom: 6px;
}

.div2 p:nth-of-type(2) {
    font-size: 12px;
}

#opciones_seleccion div:nth-of-type(1) {
    background-color: rgb(228, 218, 175);
    color: black;
}

#mensaje {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(90px, 1fr));
    gap: 6px;
}

.div_mensaje {
    width: 90px;
    padding: 6px;
    cursor: pointer;
    text-align: center;
    border-radius: 3px;
}

.div_mensaje:hover {
    background-color: rgba(250, 235, 215, 0.411);
}
  

JavaScript



/* PÁGINA PRINCIPAL */

//CARRUSEL moviendo los li en lugar del ul; ya que tiene over-flow: hidden 
const getId = function (id) {
        return document.getElementById(id)
}
const ulCarrouselNodeList = document.querySelectorAll('#ul_carousel li')
const rightArrow = getId('right_arrow_carr')
const leftArrow = getId('left_arrow_carr')
let index = 0
let position = 0
let percentage = 0
let gap = 0

rightArrow.addEventListener('click', () => {
        if (index == ulCarrouselNodeList.length - 1) {
                rightArrow.style.color = 'rgb(199, 197, 197)'
                return
        }
        rightArrow.style.color = '#000000'
        leftArrow.style.color = '#000000'
        index += 1
        position -= 100
        gap -= 50
        ulCarrouselNodeList[index - 1].style.transform = `translateX(calc(${position}% + ${gap}px))`
        ulCarrouselNodeList[index].style.transform = `translateX(calc(${position}% + ${gap}px))`
})
leftArrow.addEventListener('click', () => {
        if (index == 0) {
                leftArrow.style.color = 'rgb(199, 197, 197)'
                return
        }
        leftArrow.style.color = '#000000'
        rightArrow.style.color = '#000000'
        index -= 1
        position += 100
        gap += 50
        ulCarrouselNodeList[index + 1].style.transform = `translateX(calc(${position}% + ${gap}px))`
        ulCarrouselNodeList[index].style.transform = `translateX(calc(${position}% + ${gap}px))`
})






//FLORES
const divContainer = getId('div_container')
const dinamicTitle = getId('dinamic_title')
const btnFlores = getId('btn_flores')
const description = getId('description')
const countDown = document.getElementById('countdown')

let carrito = []

/* const divContainer = document.getElementById('div_container') */

const h1Dinamic = document.getElementById('dinamic_title')
const dropDownBox = document.getElementById('dropDown_box')
const menuIcon = document.getElementById('menu_icon')
const closeIcon = document.getElementById('close_icon')
const divMenu = document.getElementById('div_menu')
const dinamicSection = document.getElementById('dinamic_section')
const body = document.getElementById('body')
/* btns */
const btnEventos = document.getElementById('btn_eventos')


/* función de renderizado de los productos de las opciones del ul del main */
const renderizadoLiMain = (e, array, nombBtn) => {
        divContainer.innerHTML = ''
        if (e == 'Flores') {
                h1Dinamic.textContent = 'Flores'
        } else {
                h1Dinamic.textContent = e.target.textContent

        }

        array.forEach((objectChild) => {
                description.textContent = objectChild.text

                const caja = document.createElement('div')
                caja.className = 'caja-flor'
                caja.id = `caja_${objectChild.id}`
                caja.innerHTML = `
                   
                        

${objectChild.name}

${objectChild.description}

${objectChild.precioAntes ? `${objectChild.precioAntes}` : ''} ${ objectChild.precio? objectChild.precio.toFixed(2) : ''}
` divContainer.append(caja) }) } //para que salgan las flores por defecto renderizadoLiMain('Flores', arrayFlores, 'btn_flores') /* para renderizar los colores de flores disponibles */ const cambioContenidoFlorColor = (arrayColor, contenedorSmallImgs, contenedorColores, imgCambiante) => { let contador = 0 arrayColor.forEach((color) => { /* para color */ const caja = document.createElement('div') caja.className = 'caja_color' caja.setAttribute('data-img', color.img); caja.style.background = `${color.rgb}` caja.innerHTML = ` ` contenedorColores.append(caja) /* para img flor */ const cajaFlor = document.createElement('img') cajaFlor.className = 'caja_peq_flor' cajaFlor.src = `${color.img}` cajaFlor.alt = 'flores' cajaFlor.title = `${color.name}` contenedorSmallImgs.append(cajaFlor) caja.addEventListener('click', () => { imgCambiante.src = `${caja.dataset.img}` }) cajaFlor.addEventListener('click', () => { imgCambiante.src = `${caja.dataset.img}` const inputColorSeleccionado = document.querySelector(`input[data-img='${caja.dataset.img}']`) inputColorSeleccionado.checked = true }) }) } /* para cambiar palabra según el btn del menú seleccionado */ const decideContenido = (beforeh1Dinamic, array, contenedorSmallImgs, contenedorColores, imgCambiante, tituloProducto, cantidadFlores, inputCantidad,colorh3) => { const mainContainerColorh3 = document.querySelector('.main_container_color h3') switch (beforeh1Dinamic.trim()) { case 'Eventos': cambioContenidoFlorColor(array, contenedorSmallImgs, contenedorColores, imgCambiante) tituloProducto.innerText = 'Escoge el tipo de arreglo:' break; case 'Cestas': cambioContenidoFlorColor(array, contenedorSmallImgs, contenedorColores, imgCambiante) tituloProducto.innerText = 'Escoge el tamaño de tu cesta:' break; case 'Flores': cantidadFlores.innerText = 'Cantidad de flores' inputCantidad.style.display = 'inline'; tituloProducto.innerText = 'Precio de la flor:' cambioContenidoFlorColor(array, contenedorSmallImgs, contenedorColores, imgCambiante) break; case 'Ramos': cantidadFlores.innerText = 'Cantidad de ramos que necesitas' mainContainerColorh3.innerText = '' tituloProducto.innerText = 'Precio de tu ramo:' break; case 'Regalos': cantidadFlores.innerText = 'Cantidad de regalos que necesitas' mainContainerColorh3.innerText = '' tituloProducto.innerText = 'Precio del regalo:' break; case 'Ofertas': tituloProducto.innerText = 'Precio del producto en oferta:' cantidadFlores.innerText = 'Cantidad que necesitas:' colorh3.innerText = '' break; default: break; } } const verificarProductoExistenteYrenderizado = (objetoCesta,mensajeAnadido,inputCantidad)=>{ let index = carrito.findIndex(obj => obj.id === objetoCesta.id) if (index !== -1) { // Si existe, solo incrementamos la cantidad carrito[index].cantidad += Number(inputCantidad.value); carrito[index].total = carrito[index].cantidad * carrito[index].price } else { objetoCesta.total = objetoCesta.cantidad * objetoCesta.price carrito.push(objetoCesta); } setTimeout(() => { mensajeAnadido.style.opacity = 1 setTimeout(() => { mensajeAnadido.style.opacity = 0 }, 3000) }, 300) totalCantidadEnCesta(carrito) renderizarEnCarrito(carrito) totalCarrito() } /* función renderizado de los productos de cada caja del renderizado de arriba */ const renderizadoProducto = (array, target) => { array.forEach((objeto) => { divContainer.innerHTML = '' let beforeh1Dinamic = h1Dinamic.textContent h1Dinamic.textContent = `${objeto.name}` description.textContent = '' divContainer.innerHTML = `

Elige el color de tus ${objeto.category ? objeto.category : 'flores'}

Cuantas cestas necesitas:
Añadido correctamente a la cesta
` /* Contenido según el btn seleccionado */ const contenedorSmallImgs = document.querySelector('.small_imgs') const contenedorColores = document.querySelector('.container_color'); const imgCambiante = document.querySelector('.img_cambiante'); const tituloProducto = document.querySelector('.titulo_producto'); const cantidadFlores = document.querySelector('.cantidad_floresh5'); const divCantidadFlores = document.querySelector('.cantidad_flores') const inputCantidad = document.getElementById('input-cantidad'); const colorh3 = document.querySelector('.color_h3') decideContenido(beforeh1Dinamic, objeto.colores, contenedorSmallImgs, contenedorColores, imgCambiante, tituloProducto, cantidadFlores, inputCantidad,colorh3); /* compruebo si estoy en CESTAS */ const dinamicContainerProduct1 = document.getElementById('dinamic_container_product1') if (!objeto.precios) { dinamicContainerProduct1.textContent = objeto.precio.toFixed(2) + '€' dinamicContainerProduct1.classList.add('diferent_style') } else { dinamicContainerProduct1.classList.remove('diferent_style') objeto.precios.forEach((item) => { const cajaProducto = document.createElement('div') cajaProducto.className = 'caja_producto_dinamico' cajaProducto.innerHTML = ` ` dinamicContainerProduct1.append(cajaProducto) }) } /* compruebo si estoy en EVENTOS */ if (objeto.name === 'Cumpleaños' || objeto.name === 'Bodas') { inputCantidad.remove() divCantidadFlores.innerHTML = '' divCantidadFlores.innerHTML = `
Escríbenos datos sobre tu decoración
` } /* compruebo si estoy en OFERTAS */ if(beforeh1Dinamic === 'Ofertas'){ const figureImgCambiante = document.querySelector('.dinamic_product_figure') figureImgCambiante.setAttribute('data-oldprice', objeto.precioAntes) figureImgCambiante.classList.add('oferta') } /* BOTÓN AÑADIR AL CARRITO */ const formDinamicProductSection = document.getElementById('dinamic_product_section') const mensajeAnadido = document.getElementById('mensaje_anadido') /* const inputCantidad = formDinamicProductSection.querySelector('.input_cantidad') */ formDinamicProductSection.addEventListener('submit', function (e) { e.preventDefault() let objetoCesta = {} const inputColorSeleccionado = document.querySelector('input[name="input_color"]:checked'); /* para ramos y regalo */ if (objeto.name.includes('Ramo') || objeto.name.includes('regalo') || beforeh1Dinamic === 'Ofertas' && inputCantidad.value !== '0') { objetoCesta.flowerColor = 'de la foto', objetoCesta.id = objeto.id, objetoCesta.img = objeto.img, objetoCesta.name = objeto.name, objetoCesta.price = objeto.precio, objetoCesta.cantidad = Number(inputCantidad.value) verificarProductoExistenteYrenderizado(objetoCesta,mensajeAnadido,inputCantidad) } if (inputCantidad && inputCantidad.value !== '0' && inputColorSeleccionado) { objetoCesta.flowerColor = inputColorSeleccionado.id, objetoCesta.id = objeto.id + inputColorSeleccionado.dataset.id, objetoCesta.img = inputColorSeleccionado.dataset.img, objetoCesta.name = objeto.name, objetoCesta.price = objeto.precio, objetoCesta.cantidad = Number(inputCantidad.value) /* para cestas */ let inputTamanoCestaSeleccionado = document.querySelector('input[name="input_cesta"]:checked'); if (objeto.precios && inputTamanoCestaSeleccionado) { objetoCesta.tamanoCesta = inputTamanoCestaSeleccionado.dataset.tamano objetoCesta.price = Number(inputTamanoCestaSeleccionado.dataset.price) } verificarProductoExistenteYrenderizado(objetoCesta,mensajeAnadido,inputCantidad) } }) if (objeto.tipos) { const found = renderizadoProducto(objeto.tipos, target) if (found) { return found } } }) } /* Delegación de eventos con id */ body.addEventListener('click', (e) => { const target = e.target let nombreBtn = target.id switch (nombreBtn) { case 'btn_eventos': countDown.style.display = 'none' renderizadoLiMain(e, arrayDeEventos, nombreBtn) break; case 'btn_cestas': countDown.style.display = 'none' renderizadoLiMain(e, arrayCestaFlores, nombreBtn) break; case 'btn_ramos': countDown.style.display = 'none' renderizadoLiMain(e, arrayRamos, nombreBtn) break; case 'btn_flores': countDown.style.display = 'none' renderizadoLiMain(e, arrayFlores, nombreBtn) break; case 'btn_regalos': countDown.style.display = 'none' renderizadoLiMain(e, arrayRegalos, nombreBtn) break; case 'ofertas': countDown.style.display = 'block' renderizadoLiMain(e, arrayOfertas, nombreBtn) break; default: break; } }) /* delegación de eventos con clase */ dinamicSection.addEventListener('click', (e) => { const target = e.target switch (target.className) { case 'btn_ver_productos'://creado de manera general para todos los botones, que busquen su correspondiente array y objeto const nombArticulo = target.dataset.name const array = JSON.parse(target.dataset.array) const objeto = array.filter((item) => item.name == nombArticulo) renderizadoProducto(objeto) break; default: break; } }) menuIcon.addEventListener('click', () => { menuIcon.style.display = 'none' menuIcon.style.background = 'background-color: var(--darkBrown-color);' dropDownBox.style.display = 'block' closeIcon.style.display = 'block' divMenu.classList.toggle('decoration') }) closeIcon.addEventListener('click', () => { menuIcon.style.display = 'block' dropDownBox.style.display = 'none' closeIcon.style.display = 'none' divMenu.classList.toggle('decoration') }) /* IMITACIÓN DE BASE DE DATOS (PRODUCTOS) */ /* objeto para contenido dinámico */ const arrayDeEventos = [ { id: 11, name: 'Cumpleaños', img: '../IMG/evento cumpleños.jpg', description: 'Realizamos hermosas decoraciones en los cumpleaños', precios: [ { id: 111, name: 'Arreglos sencillos', description: 'El precio es por cada pack de 10 flores usados sin importar el tipo', precio: 150, }, { id: 112, name: 'Arreglos complejos', description: 'El precio es cuando son más de 200 flores sin importar el tipo', precio: 400 } ], colores: [ { name: 'Blancas', rgb: 'rgb(252, 251, 251)', img: '../IMG/decoracion cumpleaños blanco.webp' }, { name: 'Rosado', rgb: 'rgb(248, 153, 212)', img: '../IMG/arreglo cumpleaño rosado.webp' }, ] }, { id: 12, name: 'Bodas', img: '../IMG/boda.jpg', description: 'Decora tu boda con nosotros', precios: [ { id: 112, name: 'Arreglos sencillos', description: 'El precio es para un máximo de 150 flores sin importar el tipo incluyendo 20 globos', precio:150 , }, { id: 113, name: 'Arreglos complejos', description: 'El precio es para un mínimo de 150 flores y máximo 400 flores sin importar el tipo, incluye 60 globos', precio: 400, } ], colores: [ { name: 'Blancas', rgb: 'rgb(252, 251, 251)', img: '../IMG/decoracion boda blanca.webp' }, { name: 'Combinado', rgb: 'rgba(236, 154, 240, 1)', img: '../IMG/decoracion boda combinado.webp' }, ] } ] const arrayCestaFlores = [ { id: 21, name: 'Cesta de Amapolas', category: 'Amapolas', img: '../IMG/cesta amapola.jpg', description: 'Es la popular amapola de delicadas flores rojas que solemos ver y admirar en los campos de maíz .', precios: [ { id: 211, name: 'Cesta pequeña', img: '../IMG/cesta amapola.jpg', description: 'Cesta pequeña de 10 Amapolas', precio: 15 }, { id: 212, name: 'Cesta grande', img: '../IMG/cesta amapola.jpg', description: 'Para un rango de Amapolas de 28 flores', precio: 30 } ], colores: [ { name: 'Rojas', rgb: 'rgb(255, 0, 0)', img: '../IMG/cesta amapola.jpg', }, { name: 'Blancas', rgb: 'rgb(252, 251, 251)', img: '../IMG/cesta amapola blanca.webp' }, { name: 'Naranja', rgb: 'rgb(249, 171, 45)', img: '../IMG/cesta amapola naranja.webp' }, { name: 'Rosada', rgb: 'rgb(247, 189, 235)', img: '../IMG/cesta amapola rosada.webp' }, ] }, { id: 22, name: 'Cesta de Lirios', category: 'Lirios', img: '../IMG/cesta lirios.webp', description: 'Un verdadero placer rendir homenaje a los versátiles iris o lirios barbados que iluminan. ', precios: [ { id: 221, name: 'Cesta pequeña', img: '../IMG/cesta amapola.jpg', description: 'Cesta pequeña de 10 Lirios', precio: 15 }, { id: 222, name: 'Cesta grande', img: '../IMG/cesta amapola.jpg', description: 'Para un rango de Lirios 28 flores', precio: 30 } ], colores: [ { name: 'Azul', rgb: 'rgb(101, 101, 252)', img: '../IMG/cesta lirios azules.webp', }, { name: 'Blanco', rgb: 'rgb(252, 252, 253)', img: '../IMG/cesta lirio blanco.webp' }, { name: 'Rosa', rgb: 'rgb(253, 132, 217)', img: '../IMG/cesta lirios.webp', }, { name: 'Morado', rgb: 'rgb(120, 55, 124)', img: '../IMG/cesta lirios morados.webp' } ] }, { id: 32, name: 'Cesta de Rosas', category: 'Rosas', img: '../IMG/cesta de rosas.jpg', description: 'La presencia de las rosas en la cultura popular es omnipresente, desde su aparición en películas y programas de televisión', precios: [ { id: 321, name: 'Cesta pequeña', img: '../IMG/cesta de rosas.jpg', description: 'Cesta pequeña de 10 Rosas', precio: 15 }, { id: 322, name: 'Cesta grande', img: '../IMG/cesta de rosas.jpg', description: 'Para un rango de Rosas de 28 flores', precio: 30 } ], colores: [ { name: 'Rojas', rgb: 'rgb(255, 0, 0)', img: '../IMG/cesta rosa roja.webp', }, { name: 'Amarillas', rgb: 'rgb(255, 242, 0)', img: '../IMG/cesta rosa amarilla.webp', }, { name: 'Blancas', rgb: 'rgb(252, 251, 251)', img: '../IMG/cesta rosa blanca.webp' }, { name: 'Azul', rgb: 'rgb(75, 131, 252)', img: '../IMG/cesta rosa azul.webp' }, { name: 'Rosada', rgb: 'rgb(247, 189, 235)', img: '../IMG/cesta rosa rosada.webp' }, ] }, { id: 42, name: 'Cesta de Gardenias', category: 'Gardenias', img: '../IMG/cesta gardenia.webp', description: 'Durante el final de la primavera produce flores parecidas a las de las rosas.', precios: [ { id: 421, name: 'Cesta pequeña', img: '../IMG/cesta gardenia.webp', description: 'Cesta pequeña de 10 Gardenias', precio: 15 }, { id: 422, name: 'Cesta grande', img: '../IMG/cesta gardenia.webp', description: 'Para un rango de Gardenias de 28 flores', precio: 30 } ], colores: [ { name: 'Blancas', rgb: 'rgb(254, 252, 252)', img: '../IMG/cesta gardenia.webp', }, { name: 'Rosadas', rgb: 'rgb(248, 110, 149)', img: '../IMG/cesta gardenia rosada.webp', }, ] }, ] const arrayRamos = [ { id: 'r1', name: 'Ramo de flores silvestres', precio: 15, img: '../IMG/ramo de flor1.webp', description: 'Ramo de flores ideal para una mujer sencilla y única' }, { id: 'r2', name: 'Ramo Ada', img: '../IMG/ramo de flor2.webp', precio: 17, description: 'Ramo de flores ideal para una mujer sencilla y única' }, { id: 'r3', name: 'Ramo Celestial', precio: 15.50, img: '../IMG/ramo de flor3.webp', description: 'Rmo de flores ideal para una mujer sencilla y única' }, { id: 'r4', name: 'Ramo combinado', img: '../IMG/ramo de flor4.webp', precio: 18, description: 'Ramo de flores ideal para una mujer sencilla y única' }, { id: 'r5', name: 'Ramo Estephany', precio: 20, img: '../IMG/ramo de flor5.webp', description: 'Rmo de flores ideal para una mujer sencilla y única' }, { id: 'r6', name: 'Ramo Argentina', img: '../IMG/ramo de flor6.webp', precio: 18, description: 'Ramo de flores ideal para una mujer sencilla y única' }, { id: 'r7', name: 'Ramo Barbara', precio: 20, img: '../IMG/ramo de flor7.webp', description: 'Rmo de flores ideal para una mujer sencilla y única' }, { id: 'r8', name: 'Ramo Tu Luz', precio: 20, img: '../IMG/ramo de flor8.webp', description: 'Rmo de flores ideal para una mujer sencilla y única' }, { id: 'r9', name: 'Ramo Sheyla', img: '../IMG/ramo de flor9.webp', precio: 18, description: 'Ramo de flores ideal para una mujer sencilla y única' }, { id: 'r10', name: 'Ramo Caridad', precio: 20, img: '../IMG/ramo de flor10.webp', description: 'Rmo de flores ideal para una mujer sencilla y única' }, ] const arrayRegalos = [ { id: 'rg1', name: 'Set regalo Julia', precio: 35, img: '../IMG/regalo cesta+vino+bom.webp', description: 'Set de cesta de flores, botella de vino y bombones' }, { id: 'rg2', name: 'Set regalo Dunia', img: '../IMG/regalo cesta+bom.webp', precio: 37, description: 'Set de cesta de flores, botella de vino y bombones' }, { id: 'rg3', name: 'Set regalo Almiral', precio: 58, img: '../IMG/regalo cesta+fruta.webp', description: 'Set de cesta de flores, botella de vino y bombones' }, { id: 'rg4', name: 'Set regalo Lucero', img: '../IMG/regalo cesta+fruta2.webp', precio: 48, description: 'Set de cesta de flores, botella de vino y bombones' }, { id: 'rg5', name: 'Set regalo Dalula', precio: 50, img: '../IMG/regalo ramo+vino+oso.webp', description: 'Set de cesta de flores, botella de vino y bombones' }, { id: 'rg6', name: 'Set regalo Oasis', img: '../IMG/regalo cesta+vino+bom2.webp', precio: 48, description: 'Set de cesta de flores, botella de vino y bombones' }, { id: 'rg7', name: 'Set regalo Babyshower', precio: 20, img: '../IMG/regalo cesta+globo+pelu.webp', description: 'Set de cesta de flores, botella de vino y bombones' }, { id: 'rg8', name: 'Set regalo de cumpleaños', precio: 20, img: '../IMG/regalo cesta+globo.webp', description: 'Set de cesta de flores, botella de vino y bombones' }, { id: 'rg9', name: 'Set regalo San Valentín', img: '../IMG/regalo valentin.webp', precio: 18, description: 'Set de cesta de flores, botella de vino y bombones' }, ] const arrayFlores = [ { name: 'Girasol', id: 'f1', precio: 0.46, description: ' Representa la alegría y la lealtad, conocido por su color amarillo vibrante y su capacidad de seguir al sol.', img: '../IMG/girasol.jpg', colores: [ { name: 'Amarillo', rgb: 'rgb(247, 191, 71)', img: '../IMG/girasol.jpg' } ] }, { name: 'Margarita', id: 'f2', precio: 0.78, description: 'Evoca la inocencia y la pureza, y es un símbolo de lealtad y confianza.', img: '../IMG/margarita.jpg', colores: [ { name: 'Naranja', rgb: 'rgb(250, 184, 41)', img: '../IMG/Margarita naranja.webp' }, { name: 'Blanco', rgb: 'rgb(252, 252, 253)', img: '../IMG/margarita.webp' }, { name: 'Rosa', rgb: 'rgb(253, 132, 217)', img: '../IMG/margarita rosa.webp' }, { name: 'Amarilla', rgb: 'rgb(244, 244, 71)', img: '../IMG/margarita amarilla.webp' }, ] }, { name: 'Tulipán', id: 'f3', precio: 0.50, description: ' Simboliza el amor perfecto y la fama, con una forma elegante y variedad de colores.', img: '../IMG/tulipan.jpg', colores: [ { name: 'Rosado', rgb: 'rgb(248, 140, 203)', img: '../IMG/tulipan rosado.webp' }, { name: 'Blanco', rgb: 'rgb(252, 252, 253)', img: '../IMG/tulipan blanco.webp' }, { name: 'Morado', rgb: 'rgb(136, 7, 97)', img: '../IMG/tulipan morado.webp' }, { name: 'Amarillo', rgb: 'rgb(244, 244, 71)', img: '../IMG/tulipan amarillo.webp' }, ] }, { name: 'Dalia', id: 'f4', precio: 0.34, description: ' Representa la dignidad y la elegancia, con una variedad de formas y colores.', img: '../IMG/dalia.jpg', colores: [ { name: 'Rosado', rgb: 'rgb(248, 140, 203)', img: '../IMG/dalia rosada.webp' }, { name: 'Blanco', rgb: 'rgb(252, 252, 253)', img: '../IMG/dalia blanca.webp' }, { name: 'Naranja', rgb: 'rgb(250, 107, 24)', img: '../IMG/dalia naranja.webp' }, { name: 'Amarillo', rgb: 'rgb(244, 244, 71)', img: '../IMG/dalia amarilla.webp' }, ] }, { name: 'Lirio', id: 'f5', precio: 0.67, description: 'Simboliza la pureza y la renovación, frecuentemente utilizado en celebraciones de amor y compasión.', img: '../IMG/lirio.jpg', colores: [ { name: 'Rosado', rgb: 'rgb(248, 140, 203)', img: '../IMG/lirio rosado.webp' }, { name: 'Blanco', rgb: 'rgb(252, 252, 253)', img: '../IMG/lirio blanco.webp' }, { name: 'Azul', rgb: 'rgb(121, 163, 237)', img: '../IMG/lirio azul.webp' }, { name: 'Amarillo', rgb: 'rgb(244, 244, 71)', img: '../IMG/lirio amarillo.webp' }, ] }, { name: 'Hortensia', id: 'f6', precio: 1, description: ' Simboliza la gratitud y la comprensión, conocida por sus grandes cabezas de flores.', img: '../IMG/hortensia.jpg', colores: [ { name: 'Rosado', rgb: 'rgb(248, 140, 203)', img: '../IMG/hortensia rosada.webp' }, { name: 'Blanco', rgb: 'rgb(252, 252, 253)', img: '../IMG/hortensia blanca.webp' }, { name: 'Azul', rgb: 'rgb(121, 163, 237)', img: '../IMG/hortensia azul.webp' }, { name: 'Amarillo', rgb: 'rgb(244, 244, 71)', img: '../IMG/hortensia amarilla.webp' }, ] }, { name: 'Magnolia', id: 'f7', precio: 0.40, description: ' Representa la nobleza y la perseverancia, con flores grandes y fragantes.', img: '../IMG/magnolia.jpg', colores: [ { name: 'Blanca', rgb: 'rgb(254, 253, 254)', img: '../IMG/magnolia blanca.webp' }, { name: 'Rosada', rgb: 'rgb(244, 151, 225)', img: '../IMG/magnolia rosada.webp' }, ] }, ] const arrayOfertas = [ { name: 'Cesta de Amapolas', color: 'Amarillas', description: 'Cesta pequeña', precio: 9, img: '../IMG/amapolas amarillas.png',precioAntes:'12,00 €' }, { name: 'Cesta de Rosas', color: 'Naranja', description: 'Cesta grande', precio: 25, img: '../IMG/rosas naranjas.jpg',precioAntes:'30,00 €'}, { name: 'Lirio', color: 'Azúl', description: 'flor', precio: 0.95, img: '../IMG/lirio-azul.webp',precioAntes:'2,00 €' }, { name: 'Orquídea', color: 'Morado', description: 'flor', precio: 1, img: '../IMG/orquíea morada.jpg',precioAntes:'3,00€' }, ] const arrayCestas = [ { name: 'Cesta Julia', img: '../IMG/cesta1.jpg', tamano: [ { size: 'Small', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 6 }, { size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 10 }, { size: 'Large', sizeDescrip: '(66cm diámetro, 37cm alto)', precio: 15 } ] }, { name: 'Cesta Luna', img: '../IMG/cesta2.webp', tamano: [ { size: 'Small ', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 6 }, { size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 10 }, ] }, { name: 'Cesta Lousiana', img: '../IMG/cesta3.jpg', tamano: [ { size: 'Small ', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 6 }, { size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 10 }, ] }, { name: 'Cesta París', img: '../IMG/cesta4.jpg', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 6 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 10 }, ] }, { name: 'Cesta Adelia', img: '../IMG/cesta5.jpg', tamano: [ { size: 'Small (54cm diámetro, 25cm alto)', precio: 6 }, { size: 'Medium (60cm diámetro, 31cm alto)', precio: 10 }, ] }, ] const arrayMolde = [ { name: 'Molde circular', img: '../IMG/moldecircular.jpg', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 8cm alto)', precio: 4 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 12cm alto)', precio: 8 }, { size: 'Large', sizeDescrip: ' (66cm diámetro, 20cm alto)', precio: 11 } ] }, { name: 'Molde de corazón', img: '../IMG/moldecorazón.jpg', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 6 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 10 }, { size: 'Large', sizeDescrip: ' (66cm diámetro, 20cm alto)', precio: 11 } ] }, { name: 'Molde estrella', img: '../IMG/moldeestrella.jpg', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 5 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 9 }, ] }, { name: 'Molde oso', img: '../IMG/moldeoso.jpg', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 10 }, { size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 14 }, { size: 'Large', sizeDescrip: ' (66cm diámetro, 20cm alto)', precio: 16 } ] }, { name: 'Molde rectangular', img: '../IMG/molderectangular.jpg', tamano: [ { size: 'Small ', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 3 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 12 }, ] }, ] const arrayJarrones = [ { name: 'Jarrón Francia', img: '../IMG/jarron1.webp', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 4 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 9 }, { size: 'Large', sizeDescrip: ' (66cm diámetro, 37cm alto)', precio: 15 } ] }, { name: 'Jarrón Canadá', img: '../IMG/jarron2.jpg', tamano: [ { size: 'Small ', sizeDescrip: '(54cm diámetro, 25cm alto)', precio: 8 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 17 }, ] }, { name: 'Jarrón Suiza', img: '../IMG/jarron3.jpg', tamano: [ { size: 'Small (54cm diámetro, 25cm alto)', precio: 4 }, { size: 'Medium (60cm diámetro, 31cm alto)', precio: 8 }, ] }, { name: 'Jarrón Cuba', img: '../IMG/jarron4.jpg', tamano: [ { size: 'Small (54cm diámetro, 25cm alto)', precio: 5 }, { size: 'Medium (60cm diámetro, 31cm alto)', precio: 11 }, ] }, { name: 'Jarrón Egipto', img: '../IMG/jarron5.jpg', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 7 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 13 }, ] }, ] const arrayEnvolturas = [ { name: 'Envoltura Rufi', img: '../IMG/hojasdeenvolturadeflores3.avif', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 2 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 5 }, { size: 'Large', sizeDescrip: ' (66cm diámetro, 37cm alto)', precio: 9 } ] }, { name: 'Envoltura Lula', img: '../IMG/hojasenvolturadeflores4.jpg', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 2 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 10 }, ] }, { name: 'Envoltura Nerla', img: '../IMG/hojasenvolturadeflores5.jpg', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 3 }, { size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 8 }, ] }, { name: 'Envoltura Lara', img: '../IMG/hojasenvolturadeflores1.webp', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 5 }, { size: 'Medium', sizeDescrip: ' (60cm diámetro, 31cm alto)', precio: 11 }, ] }, { name: 'Envoltura Soria', img: '../IMG/hojasenvolturadeflores2.jpg', tamano: [ { size: 'Small', sizeDescrip: ' (54cm diámetro, 25cm alto)', precio: 7 }, { size: 'Medium ', sizeDescrip: '(60cm diámetro, 31cm alto)', precio: 13 }, ] }, ] const arrayMensaje = [ { name: 'Mensaje1', img: '../IMG/papelmensaje1.jpg' }, { name: 'Mensaje2', img: '../IMG/papelmensaje2.jpg' }, { name: 'Mensaje3', img: '../IMG/papelmensaje3.jpg' }, { name: 'Mensaje4', img: '../IMG/papelmensaje4.jpg' }, ] /* INICIO SESIÓN */ const formMainContainer = document.getElementById('form_main_container') const userData = {} let password /* Delegación de eventos 'click' */ const loginContainer = document.getElementById('div_container_login') const registerContainer = document.getElementById('div_container_register') function translateY() { registerContainer.style.transform = 'translateX(calc(-100% - 60px))' loginContainer.style.transform = 'translateX(calc(-100% - 60px))' } function translateYback() { registerContainer.style.transform = 'translateX(0%)' loginContainer.style.transform = 'translateX(0%)' } formMainContainer.addEventListener('click', (e) => { const target = e.target.id switch (target) { case 'enlace_registro': translateY() break; case 'enlace_incio_sesion': translateYback() break; default: break; } }) /* Expresiones Regulares */ const regexName = /^[a-zA-Z]+([-\s][a-zA-Z]+)*$/; const regexEmail = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; const regexPassword = /^[a-zA-Z0-9\W]{1,20}$/; const regexTel = /^[0-9]{1,9}$/; /* función estilos para datos correctos e incorrectos */ const rightStylesInputs = ( icon, input, errorMessage) => { errorMessage.classList.remove('styles_error_message') icon.classList.remove('styles_error_message') icon.classList.add('style_right_icon') input.classList.add('style_right_input') } const wrongStylesInputs = ( icon, input, errorMessage) => { errorMessage.classList.add('styles_error_message') icon.classList.add('styles_error_message') icon.classList.remove('style_right_icon') input.classList.remove('style_right_input') } const defaultStylesInputs = ( icon, input, errorMessage) => { icon.classList.remove('style_right_icon') input.classList.remove('style_right_input') errorMessage.classList.remove('styles_error_message') icon.classList.remove('styles_error_message') } /* función reutilizable */ const validInputFunction = (e, regex, icon, input, errorMessage) => { const target = e.target const targetId = e.target.id let targetValue = target.value if (regex.test(target.value)) { rightStylesInputs( icon, input, errorMessage) switch (targetId) { case 'input_full_name': userData.name = target.value target.dataset.boolean = 'true' break; case 'input_create_email': userData.email = target.value target.dataset.boolean = 'true' break; case 'input_tel': userData.phoneNumber = target.value target.dataset.boolean = 'true' break; case 'input_create_password': password = target.value target.dataset.boolean = 'true' break; } } else if (targetValue.trim() === '') { defaultStylesInputs( icon, input, errorMessage) target.dataset.boolean = 'false' } else { wrongStylesInputs( icon, input, errorMessage) target.dataset.boolean = 'false' } } const confirmPassword = (target, icon, input, errorMessage) => { if (password !== undefined && password === target.value) { userData.password = target.value rightStylesInputs( icon, input, errorMessage) target.dataset.boolean = 'true' } else { wrongStylesInputs( icon, input, errorMessage) } } /* comprobar datos guardados en localStorage */ const userDataValidation = (target, targetId, icon, input, errorMessage) => { const objectUserData = JSON.parse(localStorage.getItem('userData')) switch (targetId) { case 'input_email': if (objectUserData.email === target.value) { rightStylesInputs(icon,input,errorMessage) target.dataset.boolean = 'true' } else { wrongStylesInputs(icon,input,errorMessage) target.dataset.boolean = 'false' } break; case 'input_password': if (objectUserData.password === target.value) { rightStylesInputs(icon,input,errorMessage) target.dataset.boolean = 'true' } else { wrongStylesInputs(icon,input,errorMessage) target.dataset.boolean = 'false' } break; } } /* Delegación de eventos para inputs*/ formMainContainer.addEventListener('input', (e) => { const targetId = e.target.id const target = e.target let parentNode = target.closest('.div_input') const errorMessage = parentNode.querySelector('.error_message') const icon = parentNode.querySelector('.icon') const input = parentNode.querySelector('.input') switch (targetId) { case 'input_email': userDataValidation(target, targetId, icon, input, errorMessage) /* funcion que compare el email guardado en localStorage */ break; case 'input_password': userDataValidation(target, targetId, icon, input, errorMessage) /* confirmar con la creada en localStorage también */ break; case 'input_full_name': validInputFunction(e, regexName, icon, input, errorMessage) break; case 'input_create_email': validInputFunction(e, regexEmail, icon, input, errorMessage) break; case 'input_tel': validInputFunction(e, regexTel, icon, input, errorMessage) break; case 'input_create_password': validInputFunction(e, regexPassword, icon, input, errorMessage) break; case 'input_confirm_password': confirmPassword(target, icon, input, errorMessage) break; default: break; } }) /* Enviar datos */ const registerForm = document.getElementById('form_register') registerForm.addEventListener('submit', (e) => { e.preventDefault() const form = e.target.closest('.form') let nodeListInputs = form.querySelectorAll('.input')//saco el NodeList porque son elemnetos del DOM let arrayInputs = Array.from(nodeListInputs)//convertir a array para que el método every() funcione ya que hay métodos que no funcionan con el nodelist console.log(form.id) //confirma si todos los inputs son correctos (true) o si hay alguno falso, con el método every() estoy preguntando si todos cumplen cierta condición function boolean(arrayInputs) { const resultadoBooleano = arrayInputs.every((input) =>{ if (input.dataset.boolean === 'true') { return true } else { return false } }) return resultadoBooleano } if (boolean(arrayInputs)) { switch (form.id) { case 'form_register': localStorage.setItem('userData',JSON.stringify(userData)) translateYback() break; case 'form_login': //función que me lleve a la página de la cesta de compra con el artículo al que le dió añadir a cesta antes de registrarse break; } } else { window.alert('Rellene los datos correctamente por favor🙏. ') } }) /* CARRITO */ /* evento click en icono cesta */ const iconoCesta1 = document.getElementById('icono_cesta1') const iconoCesta2 = document.getElementById('icono_cesta2') const mensajeNoHayArticulos = document.getElementById('mensaje_no_hay_articulos') const totalCesta = document.querySelector('.total_cesta') const validacionCarritoVacioOno = ()=>{ if(carrito.length === 0){ mensajeNoHayArticulos.style.display = 'block' }else{ mensajeNoHayArticulos.style.display = 'none' } } iconoCesta1.addEventListener('click',()=>{ validacionCarritoVacioOno() }) iconoCesta2.addEventListener('click',()=>{ validacionCarritoVacioOno() }) const totalCantidadEnCesta = (carritoParametro) => { const total = carritoParametro.reduce((acumulador, articulo) => { return articulo.cantidad + acumulador }, 0) mostrarCantidadEnCesta.textContent = total } const subTotal = (articulo,pTotal) => { articulo.total = articulo.cantidad * articulo.price pTotal.textContent = `${articulo.total.toFixed(2)} €` } const totalCarrito = ()=>{ const resultado = carrito.reduce((acc,obj)=>{ return obj.total + acc },0) totalCesta.textContent = resultado.toFixed(2) + '€' } const mostrarCantidadEnCesta = document.querySelector('.mostrar_cantidad_en_cesta') const formCarrito = document.getElementById('form_cesta') const renderizarEnCarrito = (carritoParametro) => { formCarrito.innerHTML = '' carritoParametro.forEach((articulo) => { const cajaArticulo = document.createElement('div') cajaArticulo.className = 'caja_articulo' cajaArticulo.innerHTML = `

${articulo.name}

${articulo.name} de color : ${articulo.flowerColor}

Precio:

${articulo.price.toFixed(2)}€

Total:

${articulo.total.toFixed(2)}€

` formCarrito.append(cajaArticulo) const iconPlus = cajaArticulo.querySelector('.icon_plus') const iconMinus = cajaArticulo.querySelector('.icon_minus') const iconDelete = cajaArticulo.querySelector('.delete') const inputCantidad = cajaArticulo.querySelector('.input_cantidad') const pTotal = cajaArticulo.querySelector('.total') iconPlus.addEventListener('click', () => { articulo.cantidad = articulo.cantidad + 1 inputCantidad.value = articulo.cantidad subTotal(articulo,pTotal) totalCantidadEnCesta(carritoParametro) totalCarrito() }) iconMinus.addEventListener('click', () => { if (inputCantidad.value === '0') return articulo.cantidad = articulo.cantidad - 1 inputCantidad.value = articulo.cantidad subTotal(articulo,pTotal) totalCantidadEnCesta(carritoParametro) totalCarrito() }) iconDelete.addEventListener('click', (e) => { const targetId = e.target.id carrito = carrito.filter(obj => obj.id !== targetId) totalCantidadEnCesta(carrito) renderizarEnCarrito(carrito) validacionCarritoVacioOno() totalCarrito() }) }) } /* btn pagar y mandar datos del carrito a /HTML/pago.html */ const btnPagar = document.getElementById('pagar') btnPagar.addEventListener('click',()=>{ const carritoJSON = JSON.stringify(carrito) /* codifico el carrito para poderlo pasar dentro de una url */ const codificarCarrito = new URLSearchParams({data: carritoJSON}).toString() window.location.href = `pago.html?${codificarCarrito}` }) /* PAGO */ function limitLength(event, number) { const input = event.target; const value = input.value; let maxLength = number; // Límite de tantos dígitos // Si el valor excede el máximo permitido, se recorta if (value.length > maxLength) { input.value = value.slice(0, maxLength); } } /*RECIBIR DATOS DEL ARRAY POR PARÁMETROS EN UNA URL*/ /* busco parámetro en la URL */ const urlParametros = new URLSearchParams(window.location.search) /* obtengo el dato guardado en el parámetro con el nombre 'data'; que es un array con objetos de tipo String */ const arrayParametro = urlParametros.get('data') /*para poderlo utilizar convertir a tipo objeto */ let arrayCarrito = JSON.parse(arrayParametro) console.log(arrayCarrito) /* variables globales */ let subtotal let totalPagar let objDirecc = {} let objTarjeta = {} /* RENDERIZADO DE LOS DATOS DEL ARRAY */ const divSectionResumen = document.getElementById('div_section_resumen') const contenedorPadre = document.getElementById('div_container') const divListAside = document.getElementById('div_list_aside') const sectionResumen = document.getElementById('section_resumen') const sectionDatosEnvios = document.getElementById('section_datos_envio') const sectionDatosTarjeta = document.getElementById('section_datos_tarjeta') const sectionRecibo = document.getElementById('section_recibo') const loading = document.getElementById('loading') const mostrarTotalSectionPago = document.getElementById('mostrar_total_pago2') /* RESUMEN RESUMEN RESUMEN */ const subtotalResumen = document.getElementById('subtotal_resumen') const contenedorMensaje = document.getElementById('contenedor_nota_regalo') /* funciones de cálculo */ const calcularSubTotal = (arrayCarrito) => { subtotal = arrayCarrito.reduce((acc, obj) => { return obj.total + acc }, 0) subtotalResumen.textContent = subtotal.toFixed(2) + ' €' } const mostrarimpuestoIva = document.getElementById('impuesto_iva') const calcularIva = () => { let iva = (subtotal + 3.50) / 100 * 21 mostrarimpuestoIva.textContent = iva.toFixed(2) + ' €' return iva } const mostrartotalPagar = document.getElementById('total_pagar_resumen') const calcularTotal = () => { totalPagar = calcularIva() + 3.50 + subtotal mostrartotalPagar.textContent = totalPagar.toFixed(2) + ' €' } /* RENDERIZADO */ const renderizado = (arrayCarrito) => { divSectionResumen.innerHTML = '' calcularSubTotal(arrayCarrito) calcularIva() calcularTotal() arrayCarrito.forEach((objeto) => { const cajaProducto = document.createElement('div') cajaProducto.className = 'caja_producto' cajaProducto.id = `${objeto.id}` cajaProducto.innerHTML = `

${objeto.tamanoCesta}

imagen de ${objeto.name}

${objeto.name} color ${objeto.flowerColor}

Cantidad de cestas

${objeto.cantidadCesta}

Cada cesta contiene ${objeto.cantidadFlores} ${objeto.name}

Total:

${objeto.total.toFixed(2)} €

` divSectionResumen.append(cajaProducto) const iconDelete = cajaProducto.querySelector('.delete') iconDelete.addEventListener('click', (e) => { const targetId = e.target.id arrayCarrito = arrayCarrito.filter(obj => obj.id !== targetId) renderizado(arrayCarrito) calcularSubTotal(arrayCarrito) calcularIva() calcularTotal() }) }); } renderizado(arrayCarrito) let inputRadioActivadoId const textareaMensaje = document.getElementById('textarea_mensaje_regalo') /* delegación de evento para input radio mensaje de regalo*/ divSectionResumen.addEventListener('change', (e) => { if (e.target && e.target.classList.contains('mostrar_ms')) { const btn = e.target if (btn.checked) { inputRadioActivadoId = btn.id textareaMensaje.innerHTML = '' contenedorMensaje.style.display = 'block' console.log('input clicado ' + inputRadioActivadoId) } else { contenedorMensaje.style.display = 'none' } } }) const btnGuardarMensaje = document.getElementById('btn_guardar_mensaje') btnGuardarMensaje.addEventListener('click', () => { const objeto = arrayCarrito.find(obj => obj.id === inputRadioActivadoId) objeto.mensaje = textareaMensaje.value textareaMensaje.value = '' const divMensaje = document.getElementById(`div_ms_${inputRadioActivadoId}`) divMensaje.innerHTML = '' divMensaje.innerHTML = `

Editar mensaje

Eliminar mensaje

` contenedorMensaje.style.display = 'none' }) /* delegación de evento en article con clases*/ const cerrarMensaje = document.getElementById('cerrar_mensaje') cerrarMensaje.addEventListener('click', () => { contenedorMensaje.style.display = 'none' textareaMensaje.value = '' }) const btnResumenArticulos = document.getElementById('pagar_resumen') btnResumenArticulos.addEventListener('click', () => { sectionResumen.style.display = 'none' sectionDatosEnvios.style.display = 'block' document.querySelector('.li_1').classList.remove('active') document.querySelector('.li_2').classList.add('active') console.log(mostrartotalPagar.textContent) arrayCarrito.totalApagar = parseFloat(mostrartotalPagar.textContent) mostrarTotalSectionPago.textContent = arrayCarrito.totalApagar + ' €' }) /* DATOS DE ENVÍO DATOS DE ENVÍO DATOS DE ENVÍO */ const regexNombre = /^[a-zA-Z\s]{1,80}$/ const regexCp = /^[0-9]{1,8}$/ /* Delegación de eventos de inputs de todo el contenedor padre de las sections */ const article = document.getElementById('article') const placeholderFake = document.querySelector('.placeholder_fake') article.addEventListener('input', (e) => { const target = e.target const targetId = target.id const targetValue = target.value let msError = target.nextElementSibling switch (targetId) { case 'input_nombre', 'input_apellidos', 'input_envio_nomb_apell': if (regexNombre.test(targetValue)) { msError.style.display = 'none' } else { target.value = targetValue.slice(0, -1) msError.style.display = 'block' } break; case 'input_numero_tarjeta', 'input_expiracion', 'input_c_seguridad': if (regexCp.test(targetValue)) { msError.style.display = 'none' } else { target.value = targetValue.slice(0, -1) msError.style.display = 'block' } break; default: break; } }) /* delegación de eventos click en article por id , clases y parentNode */ const ulCountryCode = document.getElementById('ul_country_code') const inputTel = document.getElementById('input_telefono') article.addEventListener('click', (e) => { const target = e.target const parentNode = target.parentNode /* por parentNode id */ switch (parentNode.id) { case 'cambiante': ulCountryCode.style.display = 'block' break; default: break; } if (parentNode.className === 'option') { placeholderFake.innerHTML = '' const optionHtml = parentNode.innerHTML placeholderFake.innerHTML = optionHtml placeholderFake.style.opacity = 1 ulCountryCode.style.display = 'none' inputTel.focus() } /* por clase */ const objId = parentNode.id const obj = arrayCarrito.find(obj => obj.id === objId) switch (target.className) { case 'editar_ms': contenedorMensaje.style.display = 'block' textareaMensaje.value = obj.mensaje break; case 'borrar_ms': delete obj.mensaje textareaMensaje.value = '' contenedorMensaje.style.display = 'none' const divMensaje = document.getElementById(`div_ms_${objId}`) divMensaje.innerHTML = '' divMensaje.innerHTML = ` ` break; default: break; } }) /* submit */ const guardarDireccion = document.getElementById('guardar_direcc') const inputNombApll = document.getElementById('input_envio_nomb_apell') const inputDirecc = document.getElementById('input_envio_direcc') const inputProv = document.getElementById('input_provincia') const inputCp = document.getElementById('input_cp') const formDatosEnvio = document.getElementById('form_datos_envio') formDatosEnvio.addEventListener('submit', (e) => { const codigPais = document.querySelector('#cambiante span') sectionDatosEnvios.style.display = 'none' sectionDatosTarjeta.style.display = 'block' document.querySelector('.li_2').classList.remove('active') document.querySelector('.li_3').classList.add('active') arrayCarrito.envio = objDirecc objDirecc.nombApll = inputNombApll.value objDirecc.direcc = inputDirecc.value objDirecc.prov = inputProv.value objDirecc.codP = inputCp.value objDirecc.tel = codigPais.textContent + inputTel.value e.preventDefault() console.log(arrayCarrito) htmlDireccEntrega(objDirecc) }) /* PAGO PAGO PAGO */ const punticosNodeList = document.querySelectorAll('.punticos') const inputTitular = document.getElementById('input_nombre') const inputTitularApell = document.getElementById('input_apellidos') const inputNumTarj = document.getElementById('input_numero_tarjeta') const inputExpiracion = document.getElementById('input_expiracion') const inputCodSeg = document.getElementById('input_c_seguridad') const inputEmail = document.getElementById('input_email') const formDatosTarjeta = document.getElementById('form_datos_tarjeta') formDatosTarjeta.addEventListener('submit', (e) => { sectionDatosTarjeta.style.display = 'none' loading.style.display = 'block' loading.dataset.value = '1' document.querySelector('.li_3').classList.remove('active') document.querySelector('.li_4').classList.add('active') arrayCarrito.tarjeta = objTarjeta objTarjeta.titular = inputTitular.value objTarjeta.titularApell = inputTitularApell.value objTarjeta.tarjeta = inputNumTarj.value objTarjeta.expiracion = inputExpiracion.value objTarjeta.codSeg = inputCodSeg.value objTarjeta.email = inputEmail.value e.preventDefault() if (loading.dataset.value === '1') { let contador = 0 let intervalo = setInterval(() => { if (contador === 5) { clearInterval(intervalo) punticosNodeList.forEach(puntico => { puntico.classList.remove('animacion_activa') }) loading.style.display = 'none' sectionRecibo.style.display = 'block' console.log(arrayCarrito) } punticosNodeList.forEach(puntico => { puntico.classList.add('animacion_activa') }) contador += 1 }, 2000) } }) /* RECIBO RECIBO RECIBO */ const fecha = document.getElementById('fecha_compra') const date = new Date() fecha.textContent = `${date.getDate()}/${date.toLocaleString("default",{month:'long'})}/${date.getFullYear()}` const NumEnvio = document.getElementById('numero_envio') NumEnvio.textContent = `${Math.floor(Math.random() * 100) + 1}`// + 1 para que incluya el 100 const copiaDate = new Date(date) copiaDate.setDate(date.getDate() + 7) const plazoEntrega = document.querySelector('#plazo_entrega') plazoEntrega.textContent = `${copiaDate.getDate()}/${copiaDate.toLocaleString("default",{month:'long'})}/${copiaDate.getFullYear()}` function htmlDireccEntrega (objeto){ const pDirecc = document.getElementById('direcc_entreg') const caja = document.createElement('div') caja.className = 'd_envio' caja.innerHTML= `

Enviar a:
${objeto.nombApll}

Dirección de envío:
${objeto.direcc}
${objeto.prov}
${objeto.codP}

Teléfono:
${objeto.tel}

` pDirecc.append(caja) } /* CRÉALO TU MISMO */ const titulo = document.getElementById('titulo_opcion') const contenedorDinamico = document.getElementById('contenedor_dinamico') const opcionesSeleccion = document.getElementById('opciones_seleccion') const body = document.getElementById('body') const h3 = document.getElementById('h3') const mostrar = document.getElementById('mostrar') function productoXdefecto(array, arrayMensaje) { mostrar.innerHTML = '' h3.innerText = '' //IMG por defecto const obj1 = array[0] h3.innerText = obj1.name mostrar.innerHTML = ` ` const divTamano = mostrar.querySelector('#div_tamano') obj1.tamano.forEach((tamano) => { const div2 = document.createElement('div') div2.className = 'div2' div2.innerHTML = `

${tamano.size}

${tamano.sizeDescrip}

${tamano.precio.toFixed(2)} € ` divTamano.append(div2) }) const mensaje1 = mostrar.querySelector('#mensaje') arrayMensaje.forEach((mensaje) => { const div2 = document.createElement('div') div2.className = 'div_mensaje' div2.innerHTML = `

${mensaje.name}

` mensaje1.append(div2) }) } function renderizar(arrayProducto, arrayMensaje, label) { titulo.innerText = label titulo.style.textTransform = 'uppercase' opcionesSeleccion.innerHTML = '' arrayProducto.forEach((item) => { const caja = document.createElement('div') caja.innerHTML = `

${item.name}

` opcionesSeleccion.append(caja) /* item.addEventListener('click',()=>{ }) */ }); productoXdefecto(arrayProducto,arrayMensaje) } renderizar(arrayCestas, arrayMensaje, arrayCestas[0].name) body.addEventListener('click', (e) => { const label = e.target.closest('label')//propagación de evento burbuja, de lo contrario no entra al switch xq el id de la 'img' o la 'p' no coincide . const labelId = label.id switch (labelId) { case 'cestas'://quitar éste de aquí y ponerlo fuera para que salga siempre por defecto en la página renderizar(arrayCestas, arrayMensaje, labelId) break; case 'jarrones': renderizar(arrayJarrones, arrayMensaje, labelId) break; case 'moldes': renderizar(arrayMolde, arrayMensaje, labelId) break; case 'envolturas': renderizar(arrayEnvolturas, arrayMensaje, labelId) break; default: break; } })