{"id":678,"date":"2025-05-18T07:19:36","date_gmt":"2025-05-18T07:19:36","guid":{"rendered":"https:\/\/crehistor.com\/?page_id=678"},"modified":"2025-07-01T15:38:56","modified_gmt":"2025-07-01T15:38:56","slug":"recettes","status":"publish","type":"page","link":"https:\/\/crehistor.com\/es\/recettes\/","title":{"rendered":"recettes"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"678\" class=\"elementor elementor-678\">\n\t\t\t\t<div class=\"elementor-element elementor-element-59a489d e-flex e-con-boxed e-con e-parent\" data-id=\"59a489d\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-e748efd e-con-full e-flex e-con e-child\" data-id=\"e748efd\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-6349078 e-con-full e-flex e-con e-child\" data-id=\"6349078\" data-element_type=\"container\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bd3335e e-con-full e-flex e-con e-child\" data-id=\"bd3335e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8efe014 elementor-widget elementor-widget-shortcode\" data-id=\"8efe014\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><link href=\"https:\/\/fonts.googleapis.com\/css2?family=Cinzel:wght@400;600;700&family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&display=swap\" rel=\"stylesheet\">\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n\n<style>\n:root {\n    --forge-obsidian: #0d0d0f;\n    --forge-anthracite: #1a1a1e;\n    --forge-graphite: #252529;\n    --forge-steel: #3a3a42;\n    --forge-silver: #b0b0b8;\n    --forge-gold: #c9a54e;\n    --forge-gold-light: #e8c86d;\n    --forge-gold-pale: #f5e6c3;\n    --forge-white: #ffffff;\n    --font-display: 'Cinzel', Georgia, serif;\n    --font-body: 'Cormorant Garamond', Georgia, serif;\n    --shadow-elevated: 0 8px 32px rgba(0,0,0,0.4), 0 2px 8px rgba(201,165,78,0.08);\n    --shadow-glow: 0 0 20px rgba(201,165,78,0.15);\n    --text-shadow: 0 1px 2px rgba(0,0,0,0.3);\n    --transition-smooth: cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n#fr-root {\n    max-width: 560px;\n    margin: 48px auto;\n    background: var(--forge-anthracite);\n    border-radius: 3px;\n    padding: 40px 36px;\n    box-shadow: var(--shadow-elevated);\n    font-family: var(--font-body);\n    color: var(--forge-white);\n    position: relative;\n}\n\n#fr-root::before {\n    content: '';\n    position: absolute;\n    top: 0; left: 0; right: 0;\n    height: 2px;\n    background: linear-gradient(90deg, transparent 0%, var(--forge-gold) 20%, var(--forge-gold-light) 50%, var(--forge-gold) 80%, transparent 100%);\n}\n\n.fr-box { text-align: center; animation: frFadeIn 0.5s var(--transition-smooth); }\n@keyframes frFadeIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }\n\n.fr-title { font-family: var(--font-display); font-size: 1.5em; font-weight: 700; color: var(--forge-gold); margin-bottom: 8px; letter-spacing: 0.08em; text-transform: uppercase; text-shadow: var(--text-shadow); }\n.fr-subtitle { font-size: 1.1em; font-weight: 500; color: var(--forge-silver); margin-bottom: 24px; font-style: italic; text-shadow: var(--text-shadow); }\n\n.fr-langbar { display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; margin-bottom: 24px; }\n.fr-lang-btn { background: transparent; color: var(--forge-silver); border: 1px solid var(--forge-steel); padding: 6px 14px; font-family: var(--font-body); font-size: 0.95em; font-weight: 500; border-radius: 2px; cursor: pointer; transition: all 0.25s var(--transition-smooth); }\n.fr-lang-btn:hover { border-color: var(--forge-gold); color: var(--forge-gold); }\n.fr-lang-btn.active { background: var(--forge-gold); color: var(--forge-obsidian); border-color: var(--forge-gold); font-weight: 600; }\n\n.fr-slider { display: flex; align-items: center; justify-content: center; gap: 16px; margin-bottom: 24px; }\n.fr-slider-arrow { background: transparent; border: 1px solid var(--forge-steel); color: var(--forge-gold); width: 40px; height: 40px; border-radius: 2px; font-size: 1.2em; cursor: pointer; transition: all 0.25s var(--transition-smooth); }\n.fr-slider-arrow:hover { background: var(--forge-gold); color: var(--forge-obsidian); border-color: var(--forge-gold); }\n.fr-slider-img { width: 180px; height: 120px; border-radius: 2px; overflow: hidden; border: 1px solid var(--forge-steel); }\n.fr-slider-img img { width: 100%; height: 100%; object-fit: cover; filter: sepia(10%) saturate(0.9); transition: opacity 0.3s; }\n\n.fr-step-info { font-family: var(--font-display); font-size: 0.9em; color: var(--forge-gold); letter-spacing: 0.1em; margin-bottom: 16px; text-shadow: var(--text-shadow); }\n.fr-question { font-family: var(--font-display); font-size: 1.1em; font-weight: 600; color: var(--forge-white); margin-bottom: 16px; text-shadow: var(--text-shadow); }\n\n.fr-textarea { width: 100%; max-width: 400px; padding: 14px 18px; font-family: var(--font-body); font-size: 1.1em; font-weight: 500; border: 1px solid var(--forge-steel); border-radius: 2px; background: var(--forge-graphite); color: var(--forge-white); text-align: left; margin-bottom: 16px; box-sizing: border-box; transition: all 0.25s var(--transition-smooth); resize: vertical; min-height: 80px; }\n.fr-textarea::placeholder { color: var(--forge-silver); font-style: italic; }\n.fr-textarea:focus { outline: none; border-color: var(--forge-gold); box-shadow: 0 0 0 3px rgba(201,165,78,0.15); }\n\n.fr-option-group { margin-bottom: 20px; }\n.fr-option-label { font-family: var(--font-display); font-size: 0.95em; font-weight: 600; color: var(--forge-gold); margin-bottom: 10px; text-shadow: var(--text-shadow); }\n.fr-options { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; }\n.fr-opt { padding: 10px 16px; border: 1px solid var(--forge-steel); background: transparent; border-radius: 2px; color: var(--forge-white); font-family: var(--font-body); font-size: 1em; font-weight: 500; cursor: pointer; transition: all 0.25s var(--transition-smooth); text-shadow: var(--text-shadow); }\n.fr-opt:hover { border-color: var(--forge-gold); color: var(--forge-gold); }\n.fr-opt.selected { background: var(--forge-gold); border-color: var(--forge-gold); color: var(--forge-obsidian); }\n\n.fr-btn { background: linear-gradient(135deg, var(--forge-gold) 0%, var(--forge-gold-light) 50%, var(--forge-gold) 100%); color: var(--forge-obsidian); border: none; padding: 14px 32px; border-radius: 2px; font-family: var(--font-display); font-size: 0.95em; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; cursor: pointer; transition: all 0.3s var(--transition-smooth); box-shadow: 0 2px 8px rgba(0,0,0,0.3); text-decoration: none; display: inline-block; margin: 6px; }\n.fr-btn:hover { transform: translateY(-2px); box-shadow: var(--shadow-glow); filter: brightness(1.1); }\n.fr-btn-secondary { background: transparent; color: var(--forge-gold); border: 1px solid var(--forge-gold); padding: 12px 24px; font-weight: 600; }\n.fr-btn-secondary:hover { background: var(--forge-gold); color: var(--forge-obsidian); }\n\n.fr-loading { padding: 40px 0; }\n.fr-loading-text { font-style: italic; font-size: 1.2em; font-weight: 600; color: var(--forge-gold-pale); margin-bottom: 24px; text-shadow: var(--text-shadow); }\n.fr-spinner { width: 40px; height: 40px; margin: 0 auto; border: 2px solid var(--forge-steel); border-top-color: var(--forge-gold); border-radius: 50%; animation: frSpin 1s linear infinite; }\n@keyframes frSpin { to { transform: rotate(360deg); } }\n\n.fr-result-title { font-family: var(--font-display); font-size: 1.3em; font-weight: 700; color: var(--forge-gold); margin-bottom: 20px; text-shadow: var(--text-shadow); }\n\n.fr-recipe {\n    background: var(--forge-graphite);\n    border-left: 3px solid var(--forge-gold);\n    padding: 24px;\n    border-radius: 0 2px 2px 0;\n    text-align: left;\n    font-size: 1.1em;\n    font-weight: 500;\n    line-height: 1.8;\n    color: var(--forge-white);\n    margin-bottom: 24px;\n    text-shadow: var(--text-shadow);\n}\n\n.fr-actions { display: flex; flex-wrap: wrap; gap: 12px; justify-content: center; margin-top: 20px; }\n\n.fr-btn-login, .fr-btn-credits { background: linear-gradient(135deg, var(--forge-gold) 0%, var(--forge-gold-light) 50%, var(--forge-gold) 100%) !important; color: var(--forge-obsidian) !important; border: none !important; padding: 18px 48px !important; border-radius: 3px !important; font-family: var(--font-display) !important; font-size: 1.05em !important; font-weight: 700 !important; letter-spacing: 0.12em !important; text-transform: uppercase !important; cursor: pointer !important; text-decoration: none !important; display: inline-block !important; box-shadow: 0 4px 20px rgba(201,165,78,0.4) !important; margin-top: 10px !important; transition: all 0.3s var(--transition-smooth) !important; }\n.fr-btn-login:hover, .fr-btn-credits:hover { transform: translateY(-3px) !important; box-shadow: 0 6px 30px rgba(201,165,78,0.6) !important; filter: brightness(1.1) !important; }\n\n.fr-error { color: #d4873f; font-size: 0.95em; margin-top: 8px; text-shadow: var(--text-shadow); }\n\n@media (max-width: 600px) { #fr-root { margin: 24px 16px; padding: 28px 20px; } .fr-slider-img { width: 140px; height: 95px; } .fr-actions { flex-direction: column; } .fr-btn { width: 100%; } .fr-options { gap: 6px; } .fr-opt { padding: 8px 12px; font-size: 0.9em; } }\n<\/style>\n\n<div id=\"fr-root\"><div class=\"fr-box\" id=\"fr-content\"><\/div><\/div>\n\n<script>\n(function() {\n    const config = {\n        ui: {\"main_title\":{\"fr\":\"Recettes Anti-Gaspi\",\"en\":\"Anti-Waste Recipes\",\"es\":\"Recetas Anti-Desperdicio\",\"it\":\"Ricette Anti-Spreco\",\"de\":\"Anti-Verschwendung Rezepte\"},\"subtitle\":{\"fr\":\"Transforme tes restes en d\u00e9lices\",\"en\":\"Transform leftovers into delights\",\"es\":\"Transforma tus sobras en delicias\",\"it\":\"Trasforma gli avanzi in delizie\",\"de\":\"Verwandle Reste in K\u00f6stlichkeiten\"},\"intro\":{\"fr\":\"D\u00e9cris tes ingr\u00e9dients pour recevoir une recette sur mesure.\",\"en\":\"Describe your ingredients for a custom recipe.\",\"es\":\"Describe tus ingredientes para una receta personalizada.\",\"it\":\"Descrivi i tuoi ingredienti per una ricetta su misura.\",\"de\":\"Beschreibe deine Zutaten f\u00fcr ein ma\u00dfgeschneidertes Rezept.\"},\"ingredient_label\":{\"fr\":\"Quels ingr\u00e9dients as-tu ?\",\"en\":\"What ingredients do you have?\",\"es\":\"\u00bfQu\u00e9 ingredientes tienes?\",\"it\":\"Quali ingredienti hai?\",\"de\":\"Welche Zutaten hast du?\"},\"ingredient_placeholder\":{\"fr\":\"Ex: poulet, riz, poivrons, oignons...\",\"en\":\"E.g.: chicken, rice, peppers, onions...\",\"es\":\"Ej: pollo, arroz, pimientos, cebollas...\",\"it\":\"Es: pollo, riso, peperoni, cipolle...\",\"de\":\"Z.B.: Huhn, Reis, Paprika, Zwiebeln...\"},\"persons_label\":{\"fr\":\"Pour combien de personnes ?\",\"en\":\"How many servings?\",\"es\":\"\u00bfPara cu\u00e1ntas personas?\",\"it\":\"Per quante persone?\",\"de\":\"F\u00fcr wie viele Personen?\"},\"type_label\":{\"fr\":\"Type de plat\",\"en\":\"Type of dish\",\"es\":\"Tipo de plato\",\"it\":\"Tipo di piatto\",\"de\":\"Gerichtstyp\"},\"time_label\":{\"fr\":\"Temps disponible\",\"en\":\"Available time\",\"es\":\"Tiempo disponible\",\"it\":\"Tempo disponibile\",\"de\":\"Verf\u00fcgbare Zeit\"},\"diet_label\":{\"fr\":\"R\u00e9gime alimentaire\",\"en\":\"Dietary preference\",\"es\":\"Preferencia diet\u00e9tica\",\"it\":\"Preferenza alimentare\",\"de\":\"Ern\u00e4hrungspr\u00e4ferenz\"},\"types\":{\"fr\":[{\"key\":\"plat\",\"label\":\"Plat principal\"},{\"key\":\"entree\",\"label\":\"Entr\u00e9e\"},{\"key\":\"dessert\",\"label\":\"Dessert\"},{\"key\":\"snack\",\"label\":\"Snack\"}],\"en\":[{\"key\":\"plat\",\"label\":\"Main dish\"},{\"key\":\"entree\",\"label\":\"Starter\"},{\"key\":\"dessert\",\"label\":\"Dessert\"},{\"key\":\"snack\",\"label\":\"Snack\"}],\"es\":[{\"key\":\"plat\",\"label\":\"Plato principal\"},{\"key\":\"entree\",\"label\":\"Entrante\"},{\"key\":\"dessert\",\"label\":\"Postre\"},{\"key\":\"snack\",\"label\":\"Snack\"}],\"it\":[{\"key\":\"plat\",\"label\":\"Piatto principale\"},{\"key\":\"entree\",\"label\":\"Antipasto\"},{\"key\":\"dessert\",\"label\":\"Dolce\"},{\"key\":\"snack\",\"label\":\"Snack\"}],\"de\":[{\"key\":\"plat\",\"label\":\"Hauptgericht\"},{\"key\":\"entree\",\"label\":\"Vorspeise\"},{\"key\":\"dessert\",\"label\":\"Dessert\"},{\"key\":\"snack\",\"label\":\"Snack\"}]},\"times\":[{\"key\":\"15\",\"label\":\"15 min\"},{\"key\":\"30\",\"label\":\"30 min\"},{\"key\":\"45\",\"label\":\"45 min\"},{\"key\":\"60\",\"label\":\"1h\"},{\"key\":\"90\",\"label\":\"1h30\"}],\"diets\":{\"fr\":[{\"key\":\"\",\"label\":\"Aucun\"},{\"key\":\"veg\",\"label\":\"V\u00e9g\u00e9tarien\"},{\"key\":\"vegan\",\"label\":\"V\u00e9gan\"},{\"key\":\"glutenfree\",\"label\":\"Sans gluten\"}],\"en\":[{\"key\":\"\",\"label\":\"None\"},{\"key\":\"veg\",\"label\":\"Vegetarian\"},{\"key\":\"vegan\",\"label\":\"Vegan\"},{\"key\":\"glutenfree\",\"label\":\"Gluten-free\"}],\"es\":[{\"key\":\"\",\"label\":\"Ninguno\"},{\"key\":\"veg\",\"label\":\"Vegetariano\"},{\"key\":\"vegan\",\"label\":\"Vegano\"},{\"key\":\"glutenfree\",\"label\":\"Sin gluten\"}],\"it\":[{\"key\":\"\",\"label\":\"Nessuno\"},{\"key\":\"veg\",\"label\":\"Vegetariano\"},{\"key\":\"vegan\",\"label\":\"Vegano\"},{\"key\":\"glutenfree\",\"label\":\"Senza glutine\"}],\"de\":[{\"key\":\"\",\"label\":\"Keine\"},{\"key\":\"veg\",\"label\":\"Vegetarisch\"},{\"key\":\"vegan\",\"label\":\"Vegan\"},{\"key\":\"glutenfree\",\"label\":\"Glutenfrei\"}]},\"next\":{\"fr\":\"Suivant\",\"en\":\"Next\",\"es\":\"Siguiente\",\"it\":\"Avanti\",\"de\":\"Weiter\"},\"back\":{\"fr\":\"Retour\",\"en\":\"Back\",\"es\":\"Atr\u00e1s\",\"it\":\"Indietro\",\"de\":\"Zur\u00fcck\"},\"generate\":{\"fr\":\"G\u00e9n\u00e9rer la recette\",\"en\":\"Generate recipe\",\"es\":\"Generar receta\",\"it\":\"Genera ricetta\",\"de\":\"Rezept generieren\"},\"pdf\":{\"fr\":\"T\u00e9l\u00e9charger PDF\",\"en\":\"Download PDF\",\"es\":\"Descargar PDF\",\"de\":\"PDF herunterladen\",\"it\":\"Scarica PDF\"},\"whatsapp\":{\"fr\":\"Partager\",\"en\":\"Share\",\"es\":\"Compartir\",\"de\":\"Teilen\",\"it\":\"Condividi\"},\"new\":{\"fr\":\"Nouvelle recette\",\"en\":\"New recipe\",\"es\":\"Nueva receta\",\"de\":\"Neues Rezept\",\"it\":\"Nuova ricetta\"},\"generating\":{\"fr\":\"Pr\u00e9paration de ta recette\u2026\",\"en\":\"Preparing your recipe\u2026\",\"es\":\"Preparando tu receta\u2026\",\"de\":\"Dein Rezept wird vorbereitet\u2026\",\"it\":\"Preparazione della ricetta\u2026\"},\"step\":{\"fr\":\"\u00c9tape\",\"en\":\"Step\",\"es\":\"Paso\",\"de\":\"Schritt\",\"it\":\"Passo\"},\"login_welcome\":{\"fr\":\"Bienvenue\",\"en\":\"Welcome\",\"es\":\"Bienvenido\",\"de\":\"Willkommen\",\"it\":\"Benvenuto\"},\"login_text\":{\"fr\":\"Connecte-toi pour cr\u00e9er tes recettes.\",\"en\":\"Log in to create your recipes.\",\"es\":\"Inicia sesi\u00f3n para crear tus recetas.\",\"de\":\"Melde dich an f\u00fcr deine Rezepte.\",\"it\":\"Accedi per creare le tue ricette.\"},\"login_btn\":{\"fr\":\"Connexion \\\/ Inscription\",\"en\":\"Login \\\/ Sign up\",\"es\":\"Iniciar sesi\u00f3n\",\"de\":\"Anmelden\",\"it\":\"Accedi\"},\"credits_text\":{\"fr\":\"Tu n'as plus de cr\u00e9dits.\",\"en\":\"You're out of credits.\",\"es\":\"No tienes cr\u00e9ditos.\",\"de\":\"Keine Credits mehr.\",\"it\":\"Crediti esauriti.\"},\"credits_btn\":{\"fr\":\"Acheter des cr\u00e9dits\",\"en\":\"Buy credits\",\"es\":\"Comprar cr\u00e9ditos\",\"de\":\"Credits kaufen\",\"it\":\"Acquista crediti\"},\"ingredients_required\":{\"fr\":\"Indique au moins un ingr\u00e9dient.\",\"en\":\"Please enter at least one ingredient.\",\"es\":\"Indica al menos un ingrediente.\",\"de\":\"Gib mindestens eine Zutat an.\",\"it\":\"Indica almeno un ingrediente.\"}},\n        languages: [{\"key\":\"fr\",\"label\":\"Fran\u00e7ais\",\"flag\":\"\ud83c\uddeb\ud83c\uddf7\"},{\"key\":\"en\",\"label\":\"English\",\"flag\":\"\ud83c\uddec\ud83c\udde7\"},{\"key\":\"es\",\"label\":\"Espa\u00f1ol\",\"flag\":\"\ud83c\uddea\ud83c\uddf8\"},{\"key\":\"it\",\"label\":\"Italiano\",\"flag\":\"\ud83c\uddee\ud83c\uddf9\"},{\"key\":\"de\",\"label\":\"Deutsch\",\"flag\":\"\ud83c\udde9\ud83c\uddea\"}],\n        covers: [\"\\\/wp-content\\\/uploads\\\/2025\\\/cover\\\/frigo1.jpg\",\"\\\/wp-content\\\/uploads\\\/2025\\\/cover\\\/frigo2.jpg\",\"\\\/wp-content\\\/uploads\\\/2025\\\/cover\\\/frigo3.jpg\",\"\\\/wp-content\\\/uploads\\\/2025\\\/cover\\\/frigo4.jpg\"],\n        ajaxUrl: 'https:\/\/crehistor.com\/wp-admin\/admin-ajax.php'\n    };\n\n    const userState = {\n        loggedIn: false,\n        credits: 0    };\n\n    let state = { lang: localStorage.getItem('fr_lang') || 'fr', step: 0, ingredients: '', persons: 2, type: 'plat', time: '30', diet: '', coverIndex: 0, generated: null };\n    let sliderTimer;\n\n    function tr(key) { return config.ui[key] && config.ui[key][state.lang] ? config.ui[key][state.lang] : (config.ui[key] ? config.ui[key]['fr'] : key); }\n    function setLang(lang) { state.lang = lang; localStorage.setItem('fr_lang', lang); }\n\n    function renderLangBar() { return `<div class=\"fr-langbar\">${config.languages.map(l => `<button class=\"fr-lang-btn${state.lang === l.key ? ' active' : ''}\" data-lang=\"${l.key}\">${l.flag} ${l.label}<\/button>`).join('')}<\/div>`; }\n\n    function renderSlider() {\n        const img = config.covers[state.coverIndex % config.covers.length];\n        return `<div class=\"fr-slider\"><button class=\"fr-slider-arrow\" id=\"fr-slider-prev\">\u25c0<\/button><div class=\"fr-slider-img\"><img decoding=\"async\" src=\"${img}\"><\/div><button class=\"fr-slider-arrow\" id=\"fr-slider-next\">\u25b6<\/button><\/div>`;\n    }\n\n    function startSlider() {\n        if (sliderTimer) clearTimeout(sliderTimer);\n        sliderTimer = setTimeout(() => { state.coverIndex = (state.coverIndex + 1) % config.covers.length; const img = document.querySelector('.fr-slider-img img'); if (img) { img.style.opacity = '0'; setTimeout(() => { img.src = config.covers[state.coverIndex]; img.style.opacity = '1'; }, 300); } startSlider(); }, 3500);\n    }\n\n    function stopSlider() { if (sliderTimer) clearTimeout(sliderTimer); }\n    function bindLangButtons() { document.querySelectorAll('.fr-lang-btn').forEach(btn => { btn.onclick = () => { setLang(btn.dataset.lang); state.step = 0; state.ingredients = ''; state.generated = null; render(); }; }); }\n    function bindSliderButtons() { const prev = document.getElementById('fr-slider-prev'); const next = document.getElementById('fr-slider-next'); if (prev) prev.onclick = () => { state.coverIndex = (state.coverIndex + config.covers.length - 1) % config.covers.length; render(); }; if (next) next.onclick = () => { state.coverIndex = (state.coverIndex + 1) % config.covers.length; render(); }; }\n\n    function render() {\n        const root = document.getElementById('fr-content');\n\n        if (!userState.loggedIn) {\n            root.innerHTML = `${renderLangBar()}${renderSlider()}<h1 class=\"fr-title\">${tr('login_welcome')}<\/h1><p class=\"fr-subtitle\">${tr('login_text')}<\/p><button class=\"fr-btn-login xoo-el-login-tgr\">${tr('login_btn')}<\/button>`;\n            bindLangButtons(); startSlider(); bindSliderButtons(); return;\n        }\n\n        if (userState.credits < 1) {\n            root.innerHTML = `${renderLangBar()}${renderSlider()}<h1 class=\"fr-title\">${tr('login_welcome')}<\/h1><p class=\"fr-subtitle\">${tr('credits_text')}<\/p><a href=\"\/boutique\" class=\"fr-btn-credits\">${tr('credits_btn')}<\/a>`;\n            bindLangButtons(); startSlider(); bindSliderButtons(); return;\n        }\n\n        \/\/ Step 0: Ingr\u00e9dients\n        if (state.step === 0) {\n            root.innerHTML = `${renderLangBar()}${renderSlider()}<h1 class=\"fr-title\">${tr('main_title')}<\/h1><p class=\"fr-subtitle\">${tr('subtitle')}<\/p>\n                <div class=\"fr-step-info\">${tr('step')} 1 \/ 2<\/div>\n                <div class=\"fr-question\">${tr('ingredient_label')}<\/div>\n                <textarea class=\"fr-textarea\" id=\"fr-ingredients\" placeholder=\"${tr('ingredient_placeholder')}\">${state.ingredients}<\/textarea>\n                <div id=\"fr-error\" class=\"fr-error\" style=\"display:none;\"><\/div>\n                <div class=\"fr-actions\"><button class=\"fr-btn\" id=\"fr-next\">${tr('next')}<\/button><\/div>`;\n            bindLangButtons(); startSlider(); bindSliderButtons();\n            document.getElementById('fr-ingredients').focus();\n            document.getElementById('fr-ingredients').oninput = e => state.ingredients = e.target.value;\n            document.getElementById('fr-next').onclick = () => { if (!state.ingredients.trim()) { document.getElementById('fr-error').textContent = tr('ingredients_required'); document.getElementById('fr-error').style.display = 'block'; return; } state.step = 1; render(); };\n            return;\n        }\n\n        \/\/ Step 1: Options\n        if (state.step === 1) {\n            stopSlider();\n            const types = config.ui.types[state.lang] || config.ui.types.fr;\n            const times = config.ui.times;\n            const diets = config.ui.diets[state.lang] || config.ui.diets.fr;\n            const persons = [1,2,3,4,5,6,8];\n\n            root.innerHTML = `${renderLangBar()}\n                <div class=\"fr-step-info\">${tr('step')} 2 \/ 2<\/div>\n                <div class=\"fr-option-group\"><div class=\"fr-option-label\">${tr('persons_label')}<\/div><div class=\"fr-options\" id=\"fr-persons\">${persons.map(n => `<button class=\"fr-opt${state.persons===n?' selected':''}\" data-val=\"${n}\">${n}<\/button>`).join('')}<\/div><\/div>\n                <div class=\"fr-option-group\"><div class=\"fr-option-label\">${tr('type_label')}<\/div><div class=\"fr-options\" id=\"fr-type\">${types.map(t => `<button class=\"fr-opt${state.type===t.key?' selected':''}\" data-val=\"${t.key}\">${t.label}<\/button>`).join('')}<\/div><\/div>\n                <div class=\"fr-option-group\"><div class=\"fr-option-label\">${tr('time_label')}<\/div><div class=\"fr-options\" id=\"fr-time\">${times.map(t => `<button class=\"fr-opt${state.time===t.key?' selected':''}\" data-val=\"${t.key}\">${t.label}<\/button>`).join('')}<\/div><\/div>\n                <div class=\"fr-option-group\"><div class=\"fr-option-label\">${tr('diet_label')}<\/div><div class=\"fr-options\" id=\"fr-diet\">${diets.map(d => `<button class=\"fr-opt${state.diet===d.key?' selected':''}\" data-val=\"${d.key}\">${d.label}<\/button>`).join('')}<\/div><\/div>\n                <div class=\"fr-actions\"><button class=\"fr-btn fr-btn-secondary\" id=\"fr-back\">${tr('back')}<\/button><button class=\"fr-btn\" id=\"fr-generate\">${tr('generate')}<\/button><\/div>`;\n\n            bindLangButtons();\n            document.getElementById('fr-persons').querySelectorAll('.fr-opt').forEach(btn => { btn.onclick = () => { state.persons = parseInt(btn.dataset.val); render(); }; });\n            document.getElementById('fr-type').querySelectorAll('.fr-opt').forEach(btn => { btn.onclick = () => { state.type = btn.dataset.val; render(); }; });\n            document.getElementById('fr-time').querySelectorAll('.fr-opt').forEach(btn => { btn.onclick = () => { state.time = btn.dataset.val; render(); }; });\n            document.getElementById('fr-diet').querySelectorAll('.fr-opt').forEach(btn => { btn.onclick = () => { state.diet = btn.dataset.val; render(); }; });\n            document.getElementById('fr-back').onclick = () => { state.step = 0; render(); };\n            document.getElementById('fr-generate').onclick = generate;\n            return;\n        }\n\n        if (state.generated) renderResult();\n    }\n\n    function generate() {\n        const root = document.getElementById('fr-content');\n        root.innerHTML = `${renderLangBar()}<div class=\"fr-loading\"><div class=\"fr-loading-text\">${tr('generating')}<\/div><div class=\"fr-spinner\"><\/div><\/div>`;\n        bindLangButtons();\n\n        const payload = new URLSearchParams({ action: 'frigo_parfait_generate', lang: state.lang, ingredients: state.ingredients, persons: state.persons, type: state.type, time: state.time, diet: state.diet });\n        fetch(config.ajaxUrl, { method: 'POST', body: payload })\n        .then(r => r.json())\n        .then(data => { state.generated = data.result || 'Erreur'; if (userState.credits > 0) userState.credits--; renderResult(); })\n        .catch(() => { state.generated = 'Erreur de g\u00e9n\u00e9ration.'; renderResult(); });\n    }\n\n    function renderResult() {\n        const root = document.getElementById('fr-content');\n        root.innerHTML = `${renderLangBar()}\n            <div class=\"fr-result-title\">\ud83c\udf7d\ufe0f Ta Recette<\/div>\n            <div class=\"fr-recipe\">${state.generated.replace(\/\\n\/g, '<br>')}<\/div>\n            <div class=\"fr-actions\"><button class=\"fr-btn\" id=\"fr-pdf\">\ud83d\udcc4 ${tr('pdf')}<\/button><a href=\"https:\/\/wa.me\/?text=${encodeURIComponent(state.generated.substring(0, 800))}\" target=\"_blank\" class=\"fr-btn fr-btn-secondary\">\ud83d\udcf1 ${tr('whatsapp')}<\/a><\/div>\n            <div class=\"fr-actions\" style=\"margin-top:12px;\">${userState.credits > 0 ? `<button class=\"fr-btn fr-btn-secondary\" id=\"fr-new\">\ud83d\udd04 ${tr('new')}<\/button>` : `<a href=\"\/boutique\" class=\"fr-btn-credits\">${tr('credits_btn')}<\/a>`}<\/div>`;\n        bindLangButtons();\n        document.getElementById('fr-pdf').onclick = () => generatePDF(state.generated);\n        const newBtn = document.getElementById('fr-new');\n        if (newBtn) newBtn.onclick = () => { state.step = 0; state.ingredients = ''; state.generated = null; render(); };\n    }\n\n    function generatePDF(recipe) {\n        const { jsPDF } = window.jspdf;\n        const doc = new jsPDF();\n        const pageWidth = doc.internal.pageSize.getWidth();\n        const pageHeight = doc.internal.pageSize.getHeight();\n        const margin = 20;\n        let y = margin;\n\n        doc.setFillColor(250, 250, 248); doc.rect(0, 0, pageWidth, pageHeight, 'F');\n        doc.setDrawColor(201, 165, 78); doc.setLineWidth(1.5); doc.line(margin, 15, pageWidth - margin, 15);\n\n        y = 30;\n        doc.setFont('helvetica', 'bold'); doc.setFontSize(18); doc.setTextColor(201, 165, 78);\n        doc.text('RECETTE ANTI-GASPI', pageWidth \/ 2, y, { align: 'center' });\n\n        y += 15;\n        doc.setDrawColor(201, 165, 78); doc.setLineWidth(0.5); doc.line(margin + 40, y, pageWidth - margin - 40, y);\n\n        y += 12;\n        doc.setFont('helvetica', 'normal'); doc.setFontSize(11); doc.setTextColor(40, 40, 40);\n        const lines = doc.splitTextToSize(recipe, pageWidth - margin * 2);\n        lines.forEach(line => { if (y > pageHeight - 25) { doc.addPage(); doc.setFillColor(250, 250, 248); doc.rect(0, 0, pageWidth, pageHeight, 'F'); y = margin; } doc.text(line, margin, y); y += 6; });\n\n        const footerY = pageHeight - 12;\n        doc.setDrawColor(201, 165, 78); doc.setLineWidth(0.3); doc.line(margin, footerY - 5, pageWidth - margin, footerY - 5);\n        doc.setFontSize(9); doc.setTextColor(150, 150, 150);\n        doc.text('G\u00e9n\u00e9r\u00e9 par Recettes Frigo Parfait \u2014 crehistor.com', pageWidth \/ 2, footerY, { align: 'center' });\n        doc.text(new Date().toLocaleDateString('fr-FR'), pageWidth - margin, footerY, { align: 'right' });\n\n        doc.save('Recette_AntiGaspi.pdf');\n    }\n\n    render();\n})();\n<\/script>\n\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1354fb2 elementor-align-center elementor-invisible elementor-widget elementor-widget-button\" data-id=\"1354fb2\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInLeft&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm elementor-animation-bob\" href=\"https:\/\/crehistor.com\/es\/recettes-exemple\/\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Ejemplo<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2349bd2 e-con-full e-flex e-con e-child\" data-id=\"2349bd2\" data-element_type=\"container\">\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Ejemplo<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-678","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/crehistor.com\/es\/wp-json\/wp\/v2\/pages\/678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crehistor.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/crehistor.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/crehistor.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/crehistor.com\/es\/wp-json\/wp\/v2\/comments?post=678"}],"version-history":[{"count":26,"href":"https:\/\/crehistor.com\/es\/wp-json\/wp\/v2\/pages\/678\/revisions"}],"predecessor-version":[{"id":2697,"href":"https:\/\/crehistor.com\/es\/wp-json\/wp\/v2\/pages\/678\/revisions\/2697"}],"wp:attachment":[{"href":"https:\/\/crehistor.com\/es\/wp-json\/wp\/v2\/media?parent=678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}