{"id":76,"date":"2026-06-09T19:25:46","date_gmt":"2026-06-09T19:25:46","guid":{"rendered":"https:\/\/panaderasinculpa.online\/?page_id=76"},"modified":"2026-06-09T19:39:48","modified_gmt":"2026-06-09T19:39:48","slug":"calendario-30-d","status":"publish","type":"page","link":"https:\/\/panaderasinculpa.online\/?page_id=76","title":{"rendered":"Calendario Up1"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"76\" class=\"elementor elementor-76\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7e7a0ed elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"7e7a0ed\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5d9f5e9\" data-id=\"5d9f5e9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2bf24e7 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"2bf24e7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n<meta charset=\"UTF-8\" \/>\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\r\n<title>Plan Completo Sin Culpa | 30 D\u00edas de Men\u00fas Saludables<\/title>\r\n<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Lobster&family=Montserrat:wght@400;500;600;700;800;900&display=swap');\r\n\r\n:root{\r\n  --orange:#f49a00;\r\n  --orange-dark:#d97900;\r\n  --green:#3f8f32;\r\n  --green2:#72b34b;\r\n  --brown:#432915;\r\n  --brown2:#5f3a1d;\r\n  --cream:#fff7e8;\r\n  --cream2:#f2ddb2;\r\n  --cream3:#fffdf7;\r\n  --red:#cf3e2f;\r\n  --muted:#7a6756;\r\n  --shadow:0 18px 45px rgba(67,41,21,.12);\r\n}\r\n\r\n*{box-sizing:border-box}\r\nhtml{scroll-behavior:smooth}\r\nbody{margin:0;background:var(--cream);color:#24160d;font-family:'Montserrat',Arial,sans-serif;}\r\nbutton,input,select,textarea{font-family:'Montserrat',Arial,sans-serif}\r\nimg{max-width:100%;display:block}\r\n\r\n.app-bg{\r\n  min-height:100vh;\r\n  background:\r\n    linear-gradient(rgba(255,247,232,.92),rgba(255,247,232,.92)),\r\n    url(\"data:image\/svg+xml,%3Csvg width='240' height='240' viewBox='0 0 240 240' xmlns='http:\/\/www.w3.org\/2000\/svg'%3E%3Cg fill='none' stroke='%23c99b6b' stroke-width='2' opacity='.20'%3E%3Cellipse cx='55' cy='60' rx='34' ry='17'\/%3E%3Cpath d='M26 61c13-20 49-20 61 0M38 53c9 7 26 7 38 0'\/%3E%3Cpath d='M136 47c13-22 50-22 63 0M132 59h73M148 38c4 10 12 18 24 23'\/%3E%3Cellipse cx='178' cy='154' rx='38' ry='18' transform='rotate(-17 178 154)'\/%3E%3Cpath d='M145 160c17-9 48-15 70-12'\/%3E%3Cpath d='M48 170c18-25 55-27 74-3M42 181h88M58 156c5 13 13 22 25 26M90 146c0 16 8 29 23 38'\/%3E%3C\/g%3E%3C\/svg%3E\");\r\n  background-size:260px 260px;\r\n}\r\n\r\n.shell{max-width:1180px;margin:0 auto;padding:18px}\r\n\r\n.hero{\r\n  position:relative;overflow:hidden;border-radius:30px;background:linear-gradient(135deg,#fffaf0 0%,#fff2d1 55%,#f7d89a 100%);box-shadow:var(--shadow);margin-bottom:18px;\r\n  display:grid;grid-template-columns:1.05fr .95fr;min-height:440px;isolation:isolate;\r\n}\r\n.hero:before{content:\"\";position:absolute;right:-80px;top:-100px;width:420px;height:420px;border-radius:50%;background:rgba(244,154,0,.18);z-index:0}\r\n.hero:after{content:\"\";position:absolute;left:-100px;bottom:-120px;width:320px;height:320px;border-radius:50%;background:rgba(63,143,50,.11);z-index:0}\r\n.hero-text{position:relative;z-index:2;padding:44px 34px 38px}\r\n.kicker{display:inline-flex;align-items:center;gap:8px;background:var(--brown);color:white;border-radius:999px;padding:10px 14px;font-size:12px;font-weight:900;text-transform:uppercase;letter-spacing:.5px;margin-bottom:18px}\r\n.logo-title{font-family:'Lobster',cursive;color:var(--orange);font-size:46px;line-height:.95;margin:0 0 12px;font-weight:400}\r\nh1{font-family:'Lobster',cursive;color:var(--brown);font-size:clamp(40px,5.2vw,70px);line-height:.92;margin:0 0 17px;font-weight:400;letter-spacing:-.7px}\r\n.hero p{font-size:clamp(17px,2vw,23px);line-height:1.34;color:var(--brown2);font-weight:700;max-width:660px;margin:0 0 22px}\r\n.hero-actions{display:flex;flex-wrap:wrap;gap:11px;margin:22px 0}\r\n.btn{border:0;border-radius:16px;padding:14px 18px;font-weight:900;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:8px;color:white;background:var(--green);box-shadow:0 9px 0 #2c6425,0 12px 24px rgba(63,143,50,.22);transition:.15s}\r\n.btn:hover{transform:translateY(2px);box-shadow:0 6px 0 #2c6425,0 10px 18px rgba(63,143,50,.18)}\r\n.btn.orange{background:var(--orange);box-shadow:0 9px 0 var(--orange-dark),0 12px 24px rgba(244,154,0,.22)}\r\n.btn.ghost{background:#fff;color:var(--brown);box-shadow:0 9px 0 #ead3a7,0 12px 24px rgba(67,41,21,.10)}\r\n.stats{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}\r\n.stat{background:white;border:1px solid rgba(67,41,21,.08);border-radius:18px;padding:12px 14px;min-width:132px;box-shadow:0 12px 30px rgba(67,41,21,.08)}\r\n.stat b{display:block;color:var(--orange);font-size:24px;line-height:1;font-weight:900}.stat span{font-size:12px;color:var(--brown);font-weight:800}\r\n.hero-art{position:relative;z-index:1;display:flex;align-items:flex-end;justify-content:center;padding:26px 22px 0;min-height:430px}\r\n.badge-logo{width:min(420px,100%);aspect-ratio:1;border-radius:50%;background:linear-gradient(#fff9ea,#f6d99c);border:8px solid #fff;box-shadow:0 25px 45px rgba(67,41,21,.18);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:28px;position:relative;margin-bottom:-34px}\r\n.badge-logo:before{content:\"\";position:absolute;inset:15px;border:4px solid var(--brown);border-radius:50%;opacity:.45}.badge-icon{font-size:64px;filter:drop-shadow(0 6px 0 rgba(67,41,21,.12));margin-bottom:5px}.badge-logo strong{font-size:85px;line-height:.8;color:var(--orange);font-weight:900;text-shadow:0 4px 0 #fff}.badge-logo span{font-family:'Lobster',cursive;color:var(--brown);font-size:38px;line-height:.9}.badge-logo small{font-weight:900;color:var(--green);font-size:18px;text-transform:uppercase;letter-spacing:1px;margin-top:8px}\r\n\r\n.nav{display:flex;gap:10px;overflow-x:auto;padding:4px 0 16px;position:sticky;top:0;background:rgba(255,247,232,.9);backdrop-filter:blur(12px);z-index:20}\r\n.nav button{white-space:nowrap;border:0;border-radius:999px;background:white;color:var(--brown);box-shadow:0 8px 20px rgba(67,41,21,.08);padding:13px 17px;font-weight:900;cursor:pointer}.nav button.active{background:var(--orange);color:white}\r\n\r\n.grid{display:grid;grid-template-columns:300px 1fr;gap:20px;align-items:start}.panel{background:white;border-radius:24px;box-shadow:var(--shadow);padding:20px}.sticky{position:sticky;top:74px}.panel h2,.section-title{font-family:'Lobster',cursive;color:var(--brown);font-size:38px;line-height:1;margin:0 0 15px;font-weight:400}.panel h3{color:var(--brown);font-size:18px;margin:18px 0 10px}.field{margin-bottom:14px}.field label{display:block;font-size:12px;font-weight:900;text-transform:uppercase;color:var(--brown);margin-bottom:7px}.field input,.field select{width:100%;background:#fffaf2;border:2px solid #ecd7b0;border-radius:14px;padding:13px;outline:none;font-weight:700;color:var(--brown)}.field input:focus,.field select:focus{border-color:var(--orange)}\r\n.week-tabs{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:16px}.week-tabs button{border:0;border-radius:13px;background:#fff;color:var(--brown);font-weight:900;padding:12px 8px;box-shadow:0 8px 18px rgba(67,41,21,.08);cursor:pointer}.week-tabs button.active{background:var(--brown);color:white}\r\n.day-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.day-card{background:#fff;border-radius:24px;box-shadow:0 16px 34px rgba(67,41,21,.10);overflow:hidden;border:1px solid rgba(67,41,21,.06);display:flex;flex-direction:column}.day-top{background:linear-gradient(135deg,var(--brown),#6c421e);color:white;padding:16px;display:flex;justify-content:space-between;gap:10px;align-items:center}.day-top b{font-size:22px}.day-top span{background:var(--orange);border-radius:999px;padding:7px 10px;font-size:12px;font-weight:900}.day-body{padding:16px}.meal-row{display:grid;grid-template-columns:30px 1fr;gap:9px;margin:0 0 12px;align-items:start}.meal-row .ico{width:30px;height:30px;border-radius:50%;background:#fff0cf;display:flex;align-items:center;justify-content:center}.meal-row strong{display:block;color:var(--brown);font-size:13px;text-transform:uppercase}.meal-row span{display:block;font-size:13px;color:var(--muted);font-weight:700;line-height:1.3}.day-meta{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}.day-meta div{background:#fff7e8;border-radius:12px;padding:9px;font-size:12px;font-weight:900;color:var(--brown)}.day-actions{padding:0 16px 16px;display:grid;gap:8px}.small-btn{border:0;border-radius:13px;padding:12px;font-weight:900;cursor:pointer;background:var(--green);color:white}.small-btn.brown{background:var(--brown)}.small-btn.light{background:#f2ddb2;color:var(--brown)}.done{opacity:.75}.done .day-top{background:linear-gradient(135deg,#3f8f32,#6dad43)}\r\n\r\n.view{display:none}.view.active{display:block}.subhead{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:14px;flex-wrap:wrap}.pill{display:inline-flex;align-items:center;gap:6px;background:#fff;border-radius:999px;padding:10px 13px;font-weight:900;color:var(--brown);box-shadow:0 8px 18px rgba(67,41,21,.08);font-size:13px}.progress-wrap{background:#ead9b7;border-radius:999px;overflow:hidden;height:16px}.progress-bar{height:16px;background:linear-gradient(90deg,var(--green),var(--orange));border-radius:999px;width:0%;transition:.3s}.quick-card-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:13px;margin-bottom:18px}.quick-card{background:white;border-radius:20px;padding:17px;box-shadow:0 12px 28px rgba(67,41,21,.08)}.quick-card strong{display:block;font-size:24px;color:var(--orange);line-height:1}.quick-card span{font-size:12px;color:var(--brown);font-weight:900}\r\n\r\n.meal-bank-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}.meal-card{background:#fff;border-radius:22px;box-shadow:0 14px 30px rgba(67,41,21,.08);padding:16px;border:1px solid rgba(67,41,21,.06)}.meal-card .tag{display:inline-block;background:#fff1d2;color:var(--orange);border-radius:999px;padding:6px 9px;font-size:11px;font-weight:900;margin-bottom:9px}.meal-card h3{margin:0 0 7px;color:var(--brown);font-size:18px}.meal-card p{margin:0 0 10px;color:var(--muted);font-size:13px;line-height:1.35;font-weight:700}.meta-list{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.meta-list span{background:#fff7e8;border-radius:9px;padding:7px 8px;font-size:11px;font-weight:900;color:var(--brown)}\r\n\r\n.shopping-toolbar{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:16px}.shopping-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:15px}.shop-group{background:white;border-radius:20px;box-shadow:0 12px 28px rgba(67,41,21,.08);padding:17px}.shop-group h3{margin:0 0 12px;color:var(--brown);font-size:17px}.shop-item{display:flex;gap:9px;align-items:flex-start;margin:9px 0;font-weight:700;color:var(--brown2)}.shop-item input{margin-top:4px}.shop-item.checked span{text-decoration:line-through;color:#999}.empty{background:white;border-radius:24px;box-shadow:var(--shadow);padding:30px;text-align:center}.empty h3{font-family:'Lobster',cursive;color:var(--orange);font-size:34px;margin:0 0 8px}.note{background:var(--brown);color:white;border-radius:20px;padding:18px;margin:18px 0;line-height:1.45;font-weight:700}.note b{color:#ffd57f}.bonus-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.bonus-card{background:white;border-radius:24px;box-shadow:var(--shadow);padding:20px}.bonus-card .icon{font-size:38px}.bonus-card h3{margin:8px 0;color:var(--brown);font-size:20px}.bonus-card p{margin:0;color:var(--muted);line-height:1.45;font-weight:700;font-size:14px}\r\n\r\n.modal{position:fixed;inset:0;z-index:9999;background:rgba(20,10,4,.72);display:none;align-items:center;justify-content:center;padding:16px}.modal.show{display:flex}.modal-card{background:var(--cream);border-radius:26px;box-shadow:0 30px 80px rgba(0,0,0,.35);width:min(980px,100%);max-height:92vh;overflow:auto}.modal-close{position:sticky;top:12px;margin:12px 12px 0 auto;z-index:2;border:0;background:var(--brown);color:white;border-radius:50%;width:42px;height:42px;font-size:24px;cursor:pointer;display:block}.modal-content{padding:0 22px 24px}.modal-hero{background:white;border-radius:22px;padding:22px;margin-top:-24px}.modal-hero h2{font-family:'Lobster',cursive;color:var(--orange);font-size:44px;line-height:.95;margin:0 0 10px}.modal-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}.recipe-box{background:white;border-radius:20px;padding:18px}.recipe-box h3{font-family:'Lobster',cursive;color:var(--brown);font-size:30px;margin:0 0 10px}.recipe-box ul,.recipe-box ol{margin:0;padding-left:20px}.recipe-box li{margin:8px 0;line-height:1.45;font-weight:650}.meal-detail{border-bottom:1px solid #f0dfc2;padding:13px 0}.meal-detail:last-child{border-bottom:0}.meal-detail h4{margin:0 0 5px;color:var(--brown);font-size:17px}.meal-detail p{margin:0;color:var(--muted);font-weight:700;line-height:1.35;font-size:13px}.footer-note{text-align:center;padding:24px;color:var(--muted);font-size:12px;line-height:1.5}\r\n\r\n\r\n\/* Ajustes de usabilidad para personas leigas *\/\r\n.easy-start{margin-bottom:18px;border:3px solid rgba(244,154,0,.22)}\r\n.easy-head{display:flex;gap:14px;align-items:flex-start;margin-bottom:16px}.easy-head>span{font-size:38px;background:#fff1d2;border-radius:18px;width:64px;height:64px;display:flex;align-items:center;justify-content:center;flex:0 0 auto}.easy-head h2{font-family:'Lobster',cursive;color:var(--orange);font-size:42px;line-height:1;margin:0 0 5px}.easy-head p{margin:0;color:var(--brown2);font-weight:800;line-height:1.35}.easy-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.easy-steps button{border:0;background:linear-gradient(180deg,#fffaf2,#fff1d4);border-radius:20px;padding:18px 14px;text-align:left;box-shadow:0 10px 22px rgba(67,41,21,.08);cursor:pointer;color:var(--brown)}.easy-steps b{display:flex;width:38px;height:38px;border-radius:50%;background:var(--orange);color:white;align-items:center;justify-content:center;font-size:20px;margin-bottom:10px}.easy-steps strong{display:block;font-size:18px;line-height:1.15;margin-bottom:6px}.easy-steps span{display:block;font-size:13px;line-height:1.35;color:var(--muted);font-weight:800}.friendly-note{background:#432915;color:white;border-radius:18px;padding:15px 18px;margin:0 0 18px;line-height:1.45;font-weight:700}.friendly-note strong{color:#ffd789}.day-actions .small-btn:first-child{font-size:16px;padding:14px}.guide-list{display:grid;gap:12px;margin:12px 0 18px}.guide-list div{display:grid;grid-template-columns:44px 1fr;gap:12px;align-items:start;background:#fff7e8;border-radius:16px;padding:14px}.guide-list b{width:44px;height:44px;border-radius:50%;background:var(--orange);color:white;display:flex;align-items:center;justify-content:center;font-size:22px}.guide-list span{font-weight:700;color:var(--brown2);line-height:1.4}.guide-list strong{color:var(--brown)}\r\n\r\n@media (max-width: 980px){.grid{grid-template-columns:1fr}.sticky{position:static}.day-grid{grid-template-columns:repeat(2,1fr)}.meal-bank-grid{grid-template-columns:repeat(2,1fr)}.quick-card-grid{grid-template-columns:repeat(2,1fr)}.bonus-grid{grid-template-columns:1fr 1fr}.shopping-grid{grid-template-columns:1fr}.hero{grid-template-columns:1fr}.hero-art{min-height:auto;padding-top:0}.badge-logo{max-width:360px;margin-bottom:20px}}\r\n@media (max-width: 640px){.shell{padding:10px 10px 92px}.hero{display:block;border-radius:24px}.hero-text{padding:26px 18px}.logo-title{font-size:34px}h1{font-size:40px}.hero p{font-size:16px}.hero-actions .btn{width:100%;font-size:15px;padding:15px 12px}.stats{display:grid;grid-template-columns:1fr 1fr}.stat{min-width:0}.hero-art{padding:0 18px 24px}.badge-logo{width:100%;max-width:300px;margin:0 auto}.badge-logo strong{font-size:68px}.badge-logo span{font-size:30px}.nav{position:fixed;left:0;right:0;bottom:0;top:auto;padding:9px 8px 12px;background:rgba(255,247,232,.97);box-shadow:0 -12px 30px rgba(67,41,21,.12);display:grid;grid-template-columns:repeat(5,1fr);gap:6px;z-index:999}.nav button{padding:10px 5px;font-size:10px;white-space:normal;line-height:1.1;border-radius:14px}.week-tabs{grid-template-columns:repeat(3,1fr)}.day-grid{grid-template-columns:1fr}.meal-bank-grid{grid-template-columns:1fr}.shopping-grid{grid-template-columns:1fr}.quick-card-grid{grid-template-columns:1fr 1fr}.bonus-grid{grid-template-columns:1fr}.easy-head{display:block}.easy-head>span{margin-bottom:10px}.easy-head h2{font-size:36px}.easy-steps{grid-template-columns:1fr}.easy-steps button{padding:16px}.subhead{display:block}.pill{margin:4px 0}.modal-grid{grid-template-columns:1fr}.modal-content{padding:0 14px 18px}.modal-hero h2{font-size:36px}}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div class=\"app-bg\">\r\n  <div class=\"shell\">\r\n    <section class=\"hero\" id=\"topo\">\r\n      <div class=\"hero-text\">\r\n        <div class=\"kicker\">\ud83c\udf7d\ufe0f Entregable premium de 30 d\u00edas<\/div>\r\n        <div class=\"logo-title\">Plan Completo Sin Culpa<\/div>\r\n        <h1>30 D\u00edas de Men\u00fas Saludables<\/h1>\r\n        <p>Un plan organizado con desayunos, almuerzos, cenas y snacks para comer rico, simple y m\u00e1s consciente sin improvisar todos los d\u00edas.<\/p>\r\n        <div class=\"hero-actions\">\r\n          <button class=\"btn orange\" type=\"button\" onclick=\"setView('plan');setTimeout(()=>openDay(1),120)\">Empezar por el D\u00eda 1<\/button>\r\n          <button class=\"btn\" type=\"button\" onclick=\"makeShopping('week');setView('compras')\">Crear lista de esta semana<\/button>\r\n          <button class=\"btn ghost\" type=\"button\" onclick=\"setView('guia')\">Ver ayuda r\u00e1pida<\/button>\r\n        <\/div>\r\n        <div class=\"stats\">\r\n          <div class=\"stat\"><b>30<\/b><span>d\u00edas guiados<\/span><\/div>\r\n          <div class=\"stat\"><b>120<\/b><span>comidas sugeridas<\/span><\/div>\r\n          <div class=\"stat\"><b>5<\/b><span>semanas organizadas<\/span><\/div>\r\n          <div class=\"stat\"><b>F\u00e1cil<\/b><span>modo paso a paso<\/span><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"hero-art\">\r\n        <div class=\"badge-logo\" aria-label=\"Logo Plan Completo Sin Culpa\">\r\n          <div class=\"badge-icon\">\ud83d\udcc5<\/div>\r\n          <strong>30<\/strong>\r\n          <span>D\u00edas de Men\u00fas<\/span>\r\n          <small>Saludables<\/small>\r\n        <\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <nav class=\"nav\" aria-label=\"Navegaci\u00f3n del app\">\r\n      <button class=\"active\" data-view=\"dashboard\">Inicio<\/button>\r\n      <button data-view=\"plan\">Mis 30 d\u00edas<\/button>\r\n      <button data-view=\"recetas\">Recetas<\/button>\r\n      <button data-view=\"compras\">Compras<\/button>\r\n      <button data-view=\"guia\">Ayuda<\/button>\r\n    <\/nav>\r\n\r\n    <section id=\"dashboard\" class=\"view active\">\r\n      <div class=\"easy-start panel\">\r\n        <div class=\"easy-head\">\r\n          <span>\ud83d\udc4b<\/span>\r\n          <div>\r\n            <h2>Empieza aqu\u00ed<\/h2>\r\n            <p>No necesitas entender todo el app. Sigue estos 3 pasos simples.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"easy-steps\">\r\n          <button type=\"button\" onclick=\"setView('plan');setTimeout(()=>openDay(1),120)\">\r\n            <b>1<\/b>\r\n            <strong>Ver el men\u00fa de hoy<\/strong>\r\n            <span>Abre el D\u00eda 1 y mira qu\u00e9 comer.<\/span>\r\n          <\/button>\r\n          <button type=\"button\" onclick=\"makeShopping('week');setView('compras')\">\r\n            <b>2<\/b>\r\n            <strong>Crear lista de compras<\/strong>\r\n            <span>Genera autom\u00e1ticamente los ingredientes.<\/span>\r\n          <\/button>\r\n          <button type=\"button\" onclick=\"setView('plan')\">\r\n            <b>3<\/b>\r\n            <strong>Marcar d\u00edas hechos<\/strong>\r\n            <span>Toca \u201cMarcar realizado\u201d al terminar.<\/span>\r\n          <\/button>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"friendly-note\">\r\n        <strong>Modo f\u00e1cil:<\/strong> cada tarjeta tiene solo 3 acciones: ver el men\u00fa, marcar como realizado y crear la lista del d\u00eda.\r\n      <\/div>\r\n\r\n      <div class=\"subhead\">\r\n        <h2 class=\"section-title\">Tu progreso<\/h2>\r\n        <span class=\"pill\" id=\"progressText\">0 de 30 d\u00edas completados<\/span>\r\n      <\/div>\r\n      <div class=\"panel\">\r\n        <div class=\"progress-wrap\"><div class=\"progress-bar\" id=\"progressBar\"><\/div><\/div>\r\n      <\/div>\r\n      <div class=\"quick-card-grid\" style=\"margin-top:18px;\">\r\n        <div class=\"quick-card\"><strong>30<\/strong><span>men\u00fas diarios listos<\/span><\/div>\r\n        <div class=\"quick-card\"><strong>4<\/strong><span>comidas por d\u00eda<\/span><\/div>\r\n        <div class=\"quick-card\"><strong>\u226430<\/strong><span>minutos en muchas recetas<\/span><\/div>\r\n        <div class=\"quick-card\"><strong>Auto<\/strong><span>lista de compras por semana<\/span><\/div>\r\n      <\/div>\r\n      <div class=\"bonus-grid\">\r\n        <div class=\"bonus-card\"><div class=\"icon\">\ud83d\udcc5<\/div><h3>Calendario interactivo<\/h3><p>Abre cada d\u00eda, revisa el men\u00fa completo y marca los d\u00edas ya realizados.<\/p><\/div>\r\n        <div class=\"bonus-card\"><div class=\"icon\">\ud83d\uded2<\/div><h3>Compras autom\u00e1ticas<\/h3><p>Genera una lista de ingredientes por d\u00eda, semana o plan completo.<\/p><\/div>\r\n        <div class=\"bonus-card\"><div class=\"icon\">\ud83e\udd63<\/div><h3>Recetas base<\/h3><p>Incluye preparaciones simples para rotar desayunos, almuerzos, cenas y snacks.<\/p><\/div>\r\n      <\/div>\r\n      <div class=\"note\"><b>Aviso importante:<\/b> Este plan es una gu\u00eda de organizaci\u00f3n alimentaria. No reemplaza la orientaci\u00f3n de un m\u00e9dico, nutricionista o profesional de salud. Ajusta porciones e ingredientes seg\u00fan tus necesidades personales.<\/div>\r\n    <\/section>\r\n\r\n    <section id=\"plan\" class=\"view\">\r\n      <div class=\"grid\">\r\n        <aside class=\"panel sticky\">\r\n          <h2>Filtros<\/h2>\r\n          <div class=\"field\"><label>Buscar comida<\/label><input type=\"text\" id=\"searchInput\" placeholder=\"Ej: avena, pollo, cacao...\"><\/div>\r\n          <div class=\"field\"><label>Tipo de d\u00eda<\/label><select id=\"typeFilter\"><option value=\"all\">Todos<\/option><option value=\"Ligero\">Ligero<\/option><option value=\"Familiar\">Familiar<\/option><option value=\"R\u00e1pido\">R\u00e1pido<\/option><option value=\"Antojo saludable\">Antojo saludable<\/option><\/select><\/div>\r\n          <div class=\"field\"><label>Semana<\/label><select id=\"weekFilter\"><option value=\"all\">Todas<\/option><option value=\"1\">Semana 1<\/option><option value=\"2\">Semana 2<\/option><option value=\"3\">Semana 3<\/option><option value=\"4\">Semana 4<\/option><option value=\"5\">Semana 5<\/option><\/select><\/div>\r\n          <button class=\"small-btn light\" id=\"clearFilters\">Limpiar filtros<\/button>\r\n          <h3>Acciones r\u00e1pidas<\/h3>\r\n          <button class=\"small-btn brown\" id=\"markWeekBtn\">Marcar semana actual<\/button>\r\n          <button class=\"small-btn\" id=\"shoppingWeekBtn\">Compras de esta semana<\/button>\r\n        <\/aside>\r\n        <main>\r\n          <div class=\"subhead\"><h2 class=\"section-title\">Calendario de 30 d\u00edas<\/h2><span class=\"pill\" id=\"dayCount\">30 d\u00edas<\/span><\/div>\r\n          <div class=\"week-tabs\" id=\"weekTabs\"><\/div>\r\n          <div class=\"day-grid\" id=\"dayGrid\"><\/div>\r\n        <\/main>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <section id=\"recetas\" class=\"view\">\r\n      <div class=\"subhead\"><h2 class=\"section-title\">Recetas base del plan<\/h2><span class=\"pill\" id=\"recipeCount\"><\/span><\/div>\r\n      <div class=\"meal-bank-grid\" id=\"mealBank\"><\/div>\r\n    <\/section>\r\n\r\n    <section id=\"compras\" class=\"view\">\r\n      <div class=\"subhead\"><h2 class=\"section-title\">Lista de compras saludable<\/h2><span class=\"pill\" id=\"shoppingCount\">0 ingredientes<\/span><\/div>\r\n      <div class=\"panel shopping-toolbar\">\r\n        <button class=\"small-btn\" data-shop-mode=\"day\">Generar d\u00eda seleccionado<\/button>\r\n        <button class=\"small-btn brown\" data-shop-mode=\"week\">Generar semana actual<\/button>\r\n        <button class=\"small-btn light\" data-shop-mode=\"all\">Generar 30 d\u00edas<\/button>\r\n        <button class=\"small-btn light\" id=\"clearShopping\">Limpiar<\/button>\r\n        <button class=\"small-btn\" id=\"copyShopping\">Copiar lista<\/button>\r\n      <\/div>\r\n      <div class=\"shopping-grid\" id=\"shoppingGrid\"><\/div>\r\n    <\/section>\r\n\r\n    <section id=\"guia\" class=\"view\">\r\n      <div class=\"panel\">\r\n        <h2>Ayuda r\u00e1pida<\/h2>\r\n        <div class=\"guide-list\">\r\n          <div><b>1<\/b><span><strong>Abre \u201cMis 30 d\u00edas\u201d.<\/strong> Toca el bot\u00f3n grande \u201cVer men\u00fa completo\u201d.<\/span><\/div>\r\n          <div><b>2<\/b><span><strong>Lee el men\u00fa del d\u00eda.<\/strong> Ver\u00e1s desayuno, almuerzo, cena y snack.<\/span><\/div>\r\n          <div><b>3<\/b><span><strong>Haz tu lista.<\/strong> Toca \u201cLista del d\u00eda\u201d o \u201cCrear lista de esta semana\u201d.<\/span><\/div>\r\n          <div><b>4<\/b><span><strong>Marca tu avance.<\/strong> Cuando termines el d\u00eda, toca \u201cMarcar realizado\u201d.<\/span><\/div>\r\n        <\/div>\r\n        <div class=\"note\"><b>Tip:<\/b> Cocina bases por adelantado: huevos, pollo, verduras, arroz integral o quinoa, panes saludables y snacks simples. As\u00ed cada d\u00eda del plan fica mais f\u00e1cil de seguir.<\/div>\r\n      <\/div>\r\n      <div class=\"bonus-grid\" style=\"margin-top:18px;\">\r\n        <div class=\"bonus-card\"><div class=\"icon\">\ud83e\udd5a<\/div><h3>Prote\u00edna primero<\/h3><p>Incluye una fuente de prote\u00edna en las comidas principales para mayor saciedad.<\/p><\/div>\r\n        <div class=\"bonus-card\"><div class=\"icon\">\ud83e\udd57<\/div><h3>Fibra diaria<\/h3><p>Agrega vegetales, semillas, frutas moderadas y harinas integrales cuando sea adecuado.<\/p><\/div>\r\n        <div class=\"bonus-card\"><div class=\"icon\">\ud83d\udca7<\/div><h3>Hidrataci\u00f3n<\/h3><p>Acompa\u00f1a el plan con agua, infusiones sin az\u00facar y h\u00e1bitos simples de organizaci\u00f3n.<\/p><\/div>\r\n      <\/div>\r\n    <\/section>\r\n\r\n    <div class=\"footer-note\">Plan Completo Sin Culpa \u2014 Men\u00fas saludables de 30 d\u00edas. Uso educativo y organizacional.<\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<div class=\"modal\" id=\"dayModal\">\r\n  <div class=\"modal-card\">\r\n    <button class=\"modal-close\" id=\"closeModal\">\u00d7<\/button>\r\n    <div class=\"modal-content\" id=\"modalContent\"><\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\nconst meals = {\r\n  b1:{type:'Desayuno', name:'Pan de almendras con queso fresco', kcal:310, time:12, ingredients:['Pan de almendras','Queso fresco','Tomate','Or\u00e9gano'], steps:['Tosta el pan ligeramente.','Agrega queso fresco y tomate.','Termina con or\u00e9gano.'], note:'Desayuno saciante y simple.'},\r\n  b2:{type:'Desayuno', name:'Yogur con ch\u00eda, canela y frutos rojos', kcal:240, time:5, ingredients:['Yogur natural sin az\u00facar','Ch\u00eda','Canela','Frutos rojos','Nueces'], steps:['Mezcla yogur con ch\u00eda.','Agrega canela, frutos rojos y nueces.'], note:'R\u00e1pido y alto en fibra.'},\r\n  b3:{type:'Desayuno', name:'Omelette verde con espinaca', kcal:290, time:10, ingredients:['Huevos','Espinaca','Aceite de oliva','Sal','Queso mozzarella'], steps:['Bate los huevos.','Cocina con espinaca en sart\u00e9n.','Agrega queso al final.'], note:'Ideal para comenzar con prote\u00edna.'},\r\n  b4:{type:'Desayuno', name:'Panqueques de avena integral', kcal:330, time:15, ingredients:['Harina de avena integral','Huevos','Leche vegetal sin az\u00facar','Canela','Vainilla'], steps:['Mezcla los ingredientes.','Cocina porciones peque\u00f1as en sart\u00e9n.'], note:'Dulce sin az\u00facar a\u00f1adida.'},\r\n  b5:{type:'Desayuno', name:'Tostadas de linaza con aguacate', kcal:320, time:10, ingredients:['Tostadas de linaza','Aguacate','Lim\u00f3n','Sal','Semillas de s\u00e9samo'], steps:['Aplasta aguacate con lim\u00f3n.','Sirve sobre tostadas y agrega semillas.'], note:'Buena opci\u00f3n con grasas saludables.'},\r\n  b6:{type:'Desayuno', name:'Bizcocho saludable con caf\u00e9 o t\u00e9', kcal:280, time:8, ingredients:['Bizcocho sin az\u00facar','Yogur natural sin az\u00facar','Canela'], steps:['Sirve una porci\u00f3n de bizcocho.','Acompa\u00f1a con yogur y canela.'], note:'Para d\u00edas con antojo dulce.'},\r\n  l1:{type:'Almuerzo', name:'Bowl de pollo, quinoa y vegetales', kcal:520, time:25, ingredients:['Pechuga de pollo','Quinoa','Lechuga','Tomate','Aguacate','Aceite de oliva','Lim\u00f3n'], steps:['Cocina la quinoa.','Dora el pollo.','Arma el bowl con vegetales y aderezo.'], note:'Completo y equilibrado.'},\r\n  l2:{type:'Almuerzo', name:'Ensalada tibia de garbanzos', kcal:470, time:18, ingredients:['Garbanzos','Espinaca','Tomate','Cebolla','Aceite de oliva','Lim\u00f3n','Piment\u00f3n'], steps:['Saltea garbanzos con piment\u00f3n.','Mezcla con vegetales.','Ali\u00f1a con lim\u00f3n.'], note:'Opci\u00f3n vegetal y saciante.'},\r\n  l3:{type:'Almuerzo', name:'Wrap de espinaca con pollo', kcal:430, time:20, ingredients:['Wrap de espinaca','Pechuga de pollo','Lechuga','Queso crema','Tomate'], steps:['Calienta el wrap.','Rellena con pollo, vegetales y queso crema.'], note:'Pr\u00e1ctico para llevar.'},\r\n  l4:{type:'Almuerzo', name:'Tarta saludable de verduras', kcal:460, time:30, ingredients:['Base de harina de almendras','Huevos','Espinaca','Calabac\u00edn','Queso mozzarella','Sal'], steps:['Prepara el relleno.','Coloca sobre la base.','Hornea hasta dorar.'], note:'Se puede preparar para varios d\u00edas.'},\r\n  l5:{type:'Almuerzo', name:'Salm\u00f3n o at\u00fan con ensalada crujiente', kcal:500, time:20, ingredients:['Salm\u00f3n o at\u00fan','Lechuga','Pepino','Tomate','Aceite de oliva','Lim\u00f3n','Semillas'], steps:['Cocina el salm\u00f3n o usa at\u00fan.','Arma ensalada crujiente.','Ali\u00f1a al final.'], note:'Rico en prote\u00edna.'},\r\n  l6:{type:'Almuerzo', name:'Pollo al curry suave con arroz integral', kcal:540, time:28, ingredients:['Pechuga de pollo','Arroz integral','Yogur natural sin az\u00facar','Curry','Calabac\u00edn','Aceite de oliva'], steps:['Cocina arroz integral.','Saltea pollo y calabac\u00edn.','Agrega yogur y curry suave.'], note:'Sabor intenso sin complicaci\u00f3n.'},\r\n  d1:{type:'Cena', name:'Pizza con base de coliflor', kcal:420, time:35, ingredients:['Coliflor','Huevo','Queso mozzarella','Salsa de tomate sin az\u00facar','Champi\u00f1ones','Or\u00e9gano'], steps:['Prepara la base con coliflor.','Hornea y a\u00f1ade toppings.','Hornea nuevamente.'], note:'Cena estilo comfort saludable.'},\r\n  d2:{type:'Cena', name:'Crema de calabaza con semillas', kcal:310, time:25, ingredients:['Calabaza','Cebolla','Aceite de oliva','Semillas de calabaza','Sal','Yogur natural sin az\u00facar'], steps:['Cocina calabaza y cebolla.','Licua hasta crema.','Sirve con semillas.'], note:'Ligera y reconfortante.'},\r\n  d3:{type:'Cena', name:'Tacos de lechuga con carne magra', kcal:390, time:22, ingredients:['Carne magra','Hojas de lechuga','Tomate','Aguacate','Cebolla','Lim\u00f3n'], steps:['Cocina la carne.','Sirve en hojas de lechuga.','Agrega vegetales.'], note:'Bajo en harina refinada.'},\r\n  d4:{type:'Cena', name:'Omelette completo con ensalada', kcal:360, time:15, ingredients:['Huevos','Queso fresco','Espinaca','Lechuga','Tomate','Aceite de oliva'], steps:['Prepara omelette con espinaca y queso.','Acompa\u00f1a con ensalada.'], note:'Cena r\u00e1pida.'},\r\n  d5:{type:'Cena', name:'Hamburguesa saludable sin pan blanco', kcal:460, time:25, ingredients:['Carne magra o pollo','Pan saludable','Lechuga','Tomate','Aguacate','Mostaza'], steps:['Forma la hamburguesa.','Cocina y arma con pan saludable o lechuga.'], note:'Sabor de fin de semana.'},\r\n  d6:{type:'Cena', name:'Bowl mediterr\u00e1neo con huevo', kcal:410, time:18, ingredients:['Huevos','Pepino','Tomate','Queso fresco','Aceitunas','Lechuga','Aceite de oliva'], steps:['Cocina los huevos.','Arma bowl con vegetales y queso.'], note:'Fresco y simple.'},\r\n  s1:{type:'Snack', name:'Mousse de cacao sin az\u00facar', kcal:180, time:10, ingredients:['Aguacate','Cacao puro sin az\u00facar','Yogur natural sin az\u00facar','Vainilla','Eritritol'], steps:['Licua todos los ingredientes.','Refrigera antes de servir.'], note:'Postre r\u00e1pido.'},\r\n  s2:{type:'Snack', name:'Crackers de semillas con dip', kcal:190, time:8, ingredients:['Crackers de semillas','Queso crema','Lim\u00f3n','Or\u00e9gano'], steps:['Mezcla queso crema con lim\u00f3n.','Sirve con crackers.'], note:'Crocante y pr\u00e1ctico.'},\r\n  s3:{type:'Snack', name:'Manzana con canela y nueces', kcal:170, time:5, ingredients:['Manzana','Canela','Nueces'], steps:['Corta la manzana.','Agrega canela y nueces.'], note:'Dulce simple.'},\r\n  s4:{type:'Snack', name:'Pud\u00edn de ch\u00eda peque\u00f1o', kcal:160, time:5, ingredients:['Ch\u00eda','Leche vegetal sin az\u00facar','Vainilla','Frutos rojos'], steps:['Mezcla y refrigera.','Sirve fr\u00edo.'], note:'Preparar con anticipaci\u00f3n.'},\r\n  s5:{type:'Snack', name:'Rollitos de queso y pavo', kcal:180, time:5, ingredients:['Queso fresco','Pavo natural','Pepino'], steps:['Arma rollitos con queso y pavo.','Acompa\u00f1a con pepino.'], note:'Snack salado.'},\r\n  s6:{type:'Snack', name:'Trufas de cacao y coco', kcal:190, time:12, ingredients:['Cacao puro sin az\u00facar','Coco rallado','Harina de almendras','Aceite de coco','Eritritol'], steps:['Mezcla ingredientes.','Forma bolitas y refrigera.'], note:'Para antojo dulce.'}\r\n};\r\nconst mealIds = Object.keys(meals);\r\nconst dayTypes = ['Ligero','Familiar','R\u00e1pido','Antojo saludable'];\r\nconst combos = [\r\n ['b1','l1','d2','s3'],['b2','l3','d4','s1'],['b3','l2','d1','s2'],['b4','l5','d6','s4'],['b5','l6','d3','s5'],['b6','l4','d5','s6'],\r\n ['b2','l1','d4','s2'],['b1','l5','d2','s4'],['b3','l3','d1','s1'],['b4','l2','d6','s3'],['b5','l4','d3','s6'],['b6','l6','d5','s5'],\r\n ['b1','l2','d4','s4'],['b2','l5','d1','s2'],['b3','l1','d6','s1'],['b4','l3','d2','s6'],['b5','l6','d5','s3'],['b6','l4','d3','s5'],\r\n ['b2','l6','d4','s1'],['b1','l3','d6','s2'],['b3','l5','d2','s4'],['b4','l1','d1','s6'],['b5','l2','d5','s5'],['b6','l3','d3','s3'],\r\n ['b1','l4','d2','s1'],['b2','l1','d5','s2'],['b3','l6','d6','s6'],['b4','l5','d4','s4'],['b5','l3','d1','s3'],['b6','l2','d5','s1']\r\n];\r\nconst days = combos.map((c,i)=>({day:i+1,week:Math.ceil((i+1)\/7),type:dayTypes[i%dayTypes.length],meals:c}));\r\nconst ingredientCategories = {\r\n 'Prote\u00ednas':['Huevos','Pechuga de pollo','Carne magra','Carne magra o pollo','Salm\u00f3n o at\u00fan','Pavo natural'],\r\n 'L\u00e1cteos y refrigerados':['Yogur natural sin az\u00facar','Queso fresco','Queso mozzarella','Queso crema'],\r\n 'Frutas y vegetales':['Tomate','Espinaca','Lechuga','Aguacate','Lim\u00f3n','Calabac\u00edn','Coliflor','Champi\u00f1ones','Calabaza','Cebolla','Pepino','Manzana'],\r\n 'Despensa saludable':['Pan de almendras','Harina de avena integral','Harina de almendras','Quinoa','Arroz integral','Garbanzos','Base de harina de almendras','Pan saludable','Tostadas de linaza','Wrap de espinaca','Crackers de semillas'],\r\n 'Semillas y frutos secos':['Ch\u00eda','Nueces','Semillas','Semillas de s\u00e9samo','Semillas de calabaza','Coco rallado'],\r\n 'Saborizantes':['Canela','Or\u00e9gano','Sal','Aceite de oliva','Vainilla','Eritritol','Cacao puro sin az\u00facar','Curry','Mostaza','Piment\u00f3n','Salsa de tomate sin az\u00facar','Aceitunas','Leche vegetal sin az\u00facar','Aceite de coco']\r\n};\r\nlet state = {view:'dashboard',week:1,selectedDay:1,search:'',type:'all',weekFilter:'all',completed:JSON.parse(localStorage.getItem('pc30_completed')||'[]'),shopping:JSON.parse(localStorage.getItem('pc30_shopping')||'[]')};\r\nconst $ = sel => document.querySelector(sel);\r\nconst $$ = sel => Array.from(document.querySelectorAll(sel));\r\nfunction totalKcal(day){return day.meals.reduce((s,id)=>s+meals[id].kcal,0)}\r\nfunction totalTime(day){return day.meals.reduce((s,id)=>s+meals[id].time,0)}\r\nfunction save(){localStorage.setItem('pc30_completed',JSON.stringify(state.completed));localStorage.setItem('pc30_shopping',JSON.stringify(state.shopping))}\r\nfunction setView(view){state.view=view; $$('.view').forEach(v=>v.classList.toggle('active',v.id===view)); $$('.nav button').forEach(b=>b.classList.toggle('active',b.dataset.view===view)); if(view==='plan')renderDays(); if(view==='recetas')renderMeals(); if(view==='compras')renderShopping(); updateProgress(); document.getElementById(view)?.scrollIntoView({behavior:'smooth',block:'start'});}\r\nfunction updateProgress(){const n=state.completed.length; $('#progressText').textContent=`${n} de 30 d\u00edas completados`; $('#progressBar').style.width=(n\/30*100)+'%'}\r\nfunction renderWeekTabs(){const el=$('#weekTabs'); el.innerHTML=''; for(let w=1;w<=5;w++){const btn=document.createElement('button'); btn.textContent=w<5?`Semana ${w}`:'D\u00edas 29-30'; btn.className=state.week===w?'active':''; btn.onclick=()=>{state.week=w; $('#weekFilter').value=String(w); state.weekFilter=String(w); renderWeekTabs(); renderDays();}; el.appendChild(btn)}}\r\nfunction filteredDays(){const q=state.search.toLowerCase().trim(); return days.filter(d=>{const txt=d.meals.map(id=>meals[id].name+' '+meals[id].ingredients.join(' ')).join(' ').toLowerCase(); return (!q||txt.includes(q))&&(state.type==='all'||d.type===state.type)&&(state.weekFilter==='all'||d.week===Number(state.weekFilter));});}\r\nfunction renderDays(){renderWeekTabs(); const list=filteredDays(); $('#dayCount').textContent=list.length+' d\u00edas'; const grid=$('#dayGrid'); if(!list.length){grid.innerHTML='<div class=\"empty\" style=\"grid-column:1\/-1\"><h3>No hay resultados<\/h3><p>Prueba quitar filtros o buscar otro ingrediente.<\/p><\/div>';return;} grid.innerHTML=list.map(d=>{const done=state.completed.includes(d.day); const m=d.meals.map(id=>meals[id]); return `<article class=\"day-card ${done?'done':''}\"><div class=\"day-top\"><b>D\u00eda ${d.day}<\/b><span>${d.type}<\/span><\/div><div class=\"day-body\">${m.map(meal=>`<div class=\"meal-row\"><div class=\"ico\">${meal.type==='Desayuno'?'\u2600\ufe0f':meal.type==='Almuerzo'?'\ud83e\udd57':meal.type==='Cena'?'\ud83c\udf19':'\ud83c\udf53'}<\/div><div><strong>${meal.type}<\/strong><span>${meal.name}<\/span><\/div><\/div>`).join('')}<div class=\"day-meta\"><div>\ud83d\udd25 ${totalKcal(d)} kcal aprox.<\/div><div>\u23f1\ufe0f ${totalTime(d)} min prep.<\/div><\/div><\/div><div class=\"day-actions\"><button class=\"small-btn\" onclick=\"openDay(${d.day})\">Ver men\u00fa completo<\/button><button class=\"small-btn brown\" onclick=\"toggleDone(${d.day})\">${done?'Desmarcar d\u00eda':'Marcar realizado'}<\/button><button class=\"small-btn light\" onclick=\"makeShopping('day',${d.day})\">Lista del d\u00eda<\/button><\/div><\/article>`}).join('')}\r\nfunction toggleDone(day){state.completed=state.completed.includes(day)?state.completed.filter(x=>x!==day):[...state.completed,day]; save(); renderDays(); updateProgress();}\r\nfunction openDay(n){state.selectedDay=n; const d=days.find(x=>x.day===n); const modal=$('#dayModal'); const content=$('#modalContent'); content.innerHTML=`<div class=\"modal-hero\"><span class=\"pill\">D\u00eda ${d.day} \u00b7 Semana ${d.week} \u00b7 ${d.type}<\/span><h2>Men\u00fa saludable del d\u00eda<\/h2><p><b>${totalKcal(d)} kcal aprox.<\/b> \u00b7 ${totalTime(d)} minutos de preparaci\u00f3n total estimada.<\/p><\/div><div class=\"modal-grid\"><div class=\"recipe-box\"><h3>Comidas<\/h3>${d.meals.map(id=>{const m=meals[id];return `<div class=\"meal-detail\"><h4>${m.type}: ${m.name}<\/h4><p>${m.note}<\/p><div class=\"meta-list\"><span>\ud83d\udd25 ${m.kcal} kcal<\/span><span>\u23f1\ufe0f ${m.time} min<\/span><\/div><\/div>`}).join('')}<\/div><div class=\"recipe-box\"><h3>Preparaci\u00f3n r\u00e1pida<\/h3>${d.meals.map(id=>{const m=meals[id];return `<h4>${m.name}<\/h4><ol>${m.steps.map(s=>`<li>${s}<\/li>`).join('')}<\/ol>`}).join('')}<\/div><div class=\"recipe-box\"><h3>Ingredientes del d\u00eda<\/h3><ul>${uniqueIngredients([d]).map(i=>`<li>${i}<\/li>`).join('')}<\/ul><\/div><div class=\"recipe-box\"><h3>Consejo del d\u00eda<\/h3><p>Mant\u00e9n porciones moderadas, combina prote\u00edna con fibra y ajusta ingredientes seg\u00fan tus necesidades. Este men\u00fa es una gu\u00eda pr\u00e1ctica, no una prescripci\u00f3n m\u00e9dica.<\/p><button class=\"small-btn\" onclick=\"makeShopping('day',${d.day});setView('compras');document.getElementById('dayModal').classList.remove('show')\">Agregar a compras<\/button><\/div>`; modal.classList.add('show')}\r\nfunction renderMeals(){const bank=$('#mealBank'); $('#recipeCount').textContent=mealIds.length+' recetas base'; bank.innerHTML=mealIds.map(id=>{const m=meals[id];return `<div class=\"meal-card\"><span class=\"tag\">${m.type}<\/span><h3>${m.name}<\/h3><p>${m.note}<\/p><div class=\"meta-list\"><span>\ud83d\udd25 ${m.kcal} kcal<\/span><span>\u23f1\ufe0f ${m.time} min<\/span><span>\ud83e\udd63 ${m.ingredients.length} ingredientes<\/span><\/div><button class=\"small-btn light\" onclick=\"addMealToShopping('${id}')\">Agregar ingredientes<\/button><\/div>`}).join('')}\r\nfunction uniqueIngredients(dayList){return [...new Set(dayList.flatMap(d=>d.meals.flatMap(id=>meals[id].ingredients)))]}\r\nfunction makeShopping(mode, dayNum){let dayList=[]; if(mode==='day'){dayList=[days.find(d=>d.day===(dayNum||state.selectedDay))];} if(mode==='week'){dayList=days.filter(d=>d.week===state.week);} if(mode==='all'){dayList=days;} const ingredients=uniqueIngredients(dayList).map(name=>({name,checked:false})); state.shopping=ingredients; save(); renderShopping();}\r\nfunction addMealToShopping(id){meals[id].ingredients.forEach(name=>{if(!state.shopping.some(i=>i.name===name)){state.shopping.push({name,checked:false})}}); save(); alert('Ingredientes agregados a la lista de compras.'); renderShopping();}\r\nfunction catFor(name){for(const [cat,arr] of Object.entries(ingredientCategories)){if(arr.includes(name))return cat}return 'Otros'}\r\nfunction renderShopping(){const grid=$('#shoppingGrid'); $('#shoppingCount').textContent=state.shopping.length+' ingredientes'; if(!state.shopping.length){grid.innerHTML='<div class=\"empty\" style=\"grid-column:1\/-1\"><h3>Tu lista est\u00e1 vac\u00eda<\/h3><p>Genera una lista desde el calendario o desde una receta base.<\/p><\/div>';return;} const grouped={}; state.shopping.forEach((item,i)=>{const cat=catFor(item.name); if(!grouped[cat]) grouped[cat]=[]; grouped[cat].push({...item,index:i});}); grid.innerHTML=Object.entries(grouped).map(([cat,items])=>`<div class=\"shop-group\"><h3>${cat}<\/h3>${items.map(item=>`<label class=\"shop-item ${item.checked?'checked':''}\"><input type=\"checkbox\" ${item.checked?'checked':''} onchange=\"toggleShop(${item.index},this.checked)\"><span>${item.name}<\/span><\/label>`).join('')}<\/div>`).join('')}\r\nfunction toggleShop(i,val){state.shopping[i].checked=val; save(); renderShopping();}\r\nfunction copyShopping(){if(!state.shopping.length){alert('Tu lista est\u00e1 vac\u00eda.');return} const text=state.shopping.map(i=>'- '+i.name).join('\\n'); navigator.clipboard?.writeText(text); alert('Lista copiada.');}\r\nwindow.openDay=openDay; window.toggleDone=toggleDone; window.makeShopping=makeShopping; window.addMealToShopping=addMealToShopping; window.toggleShop=toggleShop; window.setView=setView;\r\n$$('.nav button').forEach(b=>b.onclick=()=>setView(b.dataset.view));\r\n$('#searchInput').oninput=e=>{state.search=e.target.value;renderDays()}; $('#typeFilter').onchange=e=>{state.type=e.target.value;renderDays()}; $('#weekFilter').onchange=e=>{state.weekFilter=e.target.value; if(e.target.value!=='all') state.week=Number(e.target.value); renderWeekTabs(); renderDays()}; $('#clearFilters').onclick=()=>{state.search='';state.type='all';state.weekFilter='all';$('#searchInput').value='';$('#typeFilter').value='all';$('#weekFilter').value='all';renderDays()};\r\n$('#markWeekBtn').onclick=()=>{days.filter(d=>d.week===state.week).forEach(d=>{if(!state.completed.includes(d.day))state.completed.push(d.day)});save();renderDays();updateProgress()}; $('#shoppingWeekBtn').onclick=()=>{makeShopping('week');setView('compras')};\r\n$$('[data-shop-mode]').forEach(b=>b.onclick=()=>makeShopping(b.dataset.shopMode)); $('#clearShopping').onclick=()=>{state.shopping=[];save();renderShopping()}; $('#copyShopping').onclick=copyShopping; if($('#printBtn')) $('#printBtn').onclick=()=>window.print(); $('#closeModal').onclick=()=>$('#dayModal').classList.remove('show'); $('#dayModal').onclick=e=>{if(e.target.id==='dayModal')e.currentTarget.classList.remove('show')};\r\nrenderWeekTabs(); renderDays(); renderMeals(); renderShopping(); updateProgress();\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Plan Completo Sin Culpa | 30 D\u00edas de Men\u00fas Saludables \ud83c\udf7d\ufe0f Entregable premium de 30 d\u00edas Plan Completo Sin Culpa 30 D\u00edas de Men\u00fas Saludables Un plan organizado con desayunos, almuerzos, cenas y snacks para comer rico, simple y m\u00e1s consciente sin improvisar todos los d\u00edas. openDay(1),120)&#8221;> 1 Ver el men\u00fa de hoy Abre el [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-76","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/panaderasinculpa.online\/index.php?rest_route=\/wp\/v2\/pages\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/panaderasinculpa.online\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/panaderasinculpa.online\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/panaderasinculpa.online\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/panaderasinculpa.online\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=76"}],"version-history":[{"count":8,"href":"https:\/\/panaderasinculpa.online\/index.php?rest_route=\/wp\/v2\/pages\/76\/revisions"}],"predecessor-version":[{"id":89,"href":"https:\/\/panaderasinculpa.online\/index.php?rest_route=\/wp\/v2\/pages\/76\/revisions\/89"}],"wp:attachment":[{"href":"https:\/\/panaderasinculpa.online\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}