{"id":1562,"date":"2025-08-29T02:45:20","date_gmt":"2025-08-29T02:45:20","guid":{"rendered":"https:\/\/ojoaosanti.com\/saude\/?page_id=1562"},"modified":"2025-08-29T03:18:40","modified_gmt":"2025-08-29T03:18:40","slug":"nutri-li-calculadora-de-cho","status":"publish","type":"page","link":"https:\/\/ojoaosanti.com\/saude\/en\/nutri-li-calculadora-de-cho\/","title":{"rendered":"Nutri Li &#8211; Calculadora de CHO"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"1562\" class=\"elementor elementor-1562\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f71346e e-flex e-con-boxed e-con e-parent\" data-id=\"f71346e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-067321c elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"067321c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Perform your calculations below.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f74013 titulo-gradient elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"6f74013\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">CHO Calculator<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-474e3c5 elementor-widget elementor-widget-shortcode\" data-id=\"474e3c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <div id=\"nutrili-cho-calc\" class=\"nutrili-cho-box\">\n        <div class=\"nutrili-cho-header\">\n            <div class=\"nutrili-cho-avatar\">\ud83d\udc99<\/div>\n            <div>\n                <div class=\"nutrili-cho-title\">Carbohydrate Calculator \u2014 Nutri Li<\/div>\n                <div class=\"nutrili-cho-sub\">Based on TACO and USDA. Select foods and enter the serving size (g).<\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"nutrili-cho-controls\">\n            <label>Choose the table:\n                <select id=\"nutrili_table_select\" aria-label=\"Reference table\">\n                    <option value=\"taco\">TACO (Brazil)<\/option>\n                    <option value=\"usda\">USDA (USA)<\/option>\n                <\/select>\n            <\/label>\n            <label>Looking for food:\n                <input id=\"nutrili_food_search\" placeholder=\"For example: rice, banana...\" \/>\n            <\/label>\n            <button id=\"nutrili_add_btn\">To add<\/button>\n        <\/div>\n\n        <div id=\"nutrili_selected_list\" class=\"nutrili-selected-list\"><\/div>\n\n        <div class=\"nutrili-cho-add-custom\">\n            <h4>Add custom food<\/h4>\n            <input id=\"nutrili_custom_name\" placeholder=\"Food name\" \/>\n            <input id=\"nutrili_custom_cho\" placeholder=\"Carbohydrates per 100g (g)\" \/>\n            <button id=\"nutrili_custom_add\">Add custom<\/button>\n        <\/div>\n\n        <div class=\"nutrili-cho-summary\">\n            <div>CHO goal (optional): <input id=\"nutrili_meta_cho\" placeholder=\"ex: 180\" style=\"width:100px\" \/> g<\/div>\n            <div id=\"nutrili_total_cho\"><strong>Total CHO:<\/strong> 0 g<\/div>\n            <div id=\"nutrili_gap\" style=\"margin-top:6px;color:#444\"><\/div>\n            <div style=\"margin-top:10px\">\n                <button id=\"nutrili_export_csv\">Export CSV<\/button>\n                <button id=\"nutrili_clear\">To clean<\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"nutrili-cho-footer\">\u26a0\ufe0f Estimated results. Consult a professional for individual guidance.<\/div>\n    <\/div>\n\n    <style>\n    :root { --nutrili-primary: #066A98; --nutrili-primary-dark: #055a7f; }\n    .nutrili-cho-box{max-width:820px;margin:20px auto;padding:16px;border:1px solid #e6e8eb;border-radius:12px;background:#fff;box-shadow:0 8px 20px rgba(0,0,0,.04);font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial}\n    .nutrili-cho-header{display:flex;gap:12px;align-items:center;margin-bottom:12px}\n    .nutrili-cho-avatar{width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#e6f3fb,#d9eef8);font-size:22px}\n    .nutrili-cho-title{font-weight:600}\n    .nutrili-cho-sub{font-size:13px;color:#657786}\n    .nutrili-cho-controls{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}\n    .nutrili-cho-controls label{display:flex;flex-direction:column;font-size:13px}\n    .nutrili-cho-controls input, .nutrili-cho-controls select{padding:8px;border:1px solid #dfe6ea;border-radius:8px}\n    .nutrili-selected-list{margin:8px 0;padding:8px;border:1px dashed #eef2f5;border-radius:8px;min-height:60px}\n    .nutrili-selected-item{display:flex;gap:8px;align-items:center;padding:8px;border-radius:8px;margin-bottom:6px;background:#fbfeff;border:1px solid #eef6fa}\n    .nutrili-selected-item input{width:80px;padding:6px;border:1px solid #e6eef2;border-radius:6px}\n    .nutrili-selected-item .remove{margin-left:auto;color:#c00;cursor:pointer}\n    .nutrili-cho-add-custom{margin-top:12px;display:flex;gap:8px;align-items:center}\n    .nutrili-cho-add-custom input{padding:8px;border:1px solid #dfe6ea;border-radius:8px}\n    .nutrili-cho-summary{margin-top:12px;padding:10px;border-radius:8px;background:#fbfeff;border:1px solid #eef6fa}\n    .nutrili-cho-summary input{padding:6px;border:1px solid #e6eef2;border-radius:6px}\n    .nutrili-cho-summary button{background:var(--nutrili-primary);color:#fff;border-radius:8px;padding:8px 12px;border:0;cursor:pointer;margin-right:8px}\n    .nutrili-cho-footer{margin-top:12px;font-size:12px;color:#657786}\n    @media (max-width:768px) {\n        .nutrili-cho-controls{flex-direction:column}\n        .nutrili-cho-add-custom{flex-direction:column}\n    }\n\t\t\n\t\t\n    <\/style>\n\n    <script>\n    (function(){\n        \/\/ Sample reduced dataset (examples) - values are grams of carbohydrate per 100g\n        const TABLES = {\n            taco: [\n                { id: 'taco_arroz', name: 'Arroz branco cozido', cho_per_100g: 28.0 },\n                { id: 'taco_banana', name: 'Banana prata', cho_per_100g: 22.5 },\n                { id: 'taco_feijao', name: 'Feij\u00e3o carioca cozido', cho_per_100g: 12.1 },\n                { id: 'taco_pao_integral', name: 'P\u00e3o integral', cho_per_100g: 43.0 },\n                { id: 'taco_leite', name: 'Leite integral', cho_per_100g: 4.8 }\n            ],\n            usda: [\n                { id: 'usda_rice', name: 'Boiled white rice', cho_per_100g: 28.17 },\n                { id: 'usda_banana', name: 'Banana', cho_per_100g: 22.84 },\n                { id: 'usda_bean', name: 'Cooked beans', cho_per_100g: 14.0 },\n                { id: 'usda_bread', name: 'Whole wheat bread', cho_per_100g: 41.0 },\n                { id: 'usda_milk', name: 'Milk, whole', cho_per_100g: 4.8 }\n            ]\n        };\n\n        const searchInput = document.getElementById('nutrili_food_search');\n        const addBtn = document.getElementById('nutrili_add_btn');\n        const tableSelect = document.getElementById('nutrili_table_select');\n        const selectedList = document.getElementById('nutrili_selected_list');\n        const totalEl = document.getElementById('nutrili_total_cho');\n        const gapEl = document.getElementById('nutrili_gap');\n        const metaInput = document.getElementById('nutrili_meta_cho');\n        const customName = document.getElementById('nutrili_custom_name');\n        const customCho = document.getElementById('nutrili_custom_cho');\n        const customAddBtn = document.getElementById('nutrili_custom_add');\n        const exportBtn = document.getElementById('nutrili_export_csv');\n        const clearBtn = document.getElementById('nutrili_clear');\n\n        let selected = []; \/\/ {id, name, cho_per_100g, grams}\n\n        function findFood(query, table) {\n            query = query.trim().toLowerCase();\n            if (!query) return null;\n            const list = TABLES[table] || [];\n            return list.find(f => f.name.toLowerCase().includes(query));\n        }\n\n        function renderSelected() {\n            selectedList.innerHTML = '';\n            selected.forEach((item, idx) => {\n                const div = document.createElement('div');\n                div.className = 'nutrili-selected-item';\n                div.innerHTML = `\n                    <div style=\"min-width:220px\">${item.name}<\/div>\n                    <div>CHO\/100g: <strong>${item.cho_per_100g}<\/strong><\/div>\n                    <div>Por\u00e7\u00e3o (g): <input type=\"number\" class=\"nutrili-portion\" data-idx=\"${idx}\" value=\"${item.grams}\" min=\"1\" \/><\/div>\n                    <div>CHO: <strong class=\"nutrili-item-cho\">${calcItemCho(item).toFixed(1)} g<\/strong><\/div>\n                    <div class=\"remove\" data-idx=\"${idx}\">Remover<\/div>\n                `;\n                selectedList.appendChild(div);\n            });\n            attachListeners();\n            updateTotals();\n        }\n\n        function calcItemCho(item) {\n            return (item.cho_per_100g * (item.grams \/ 100));\n        }\n\n        function updateTotals() {\n            let total = 0;\n            selected.forEach(item => total += calcItemCho(item));\n            total = Math.round(total * 10) \/ 10;\n            totalEl.innerHTML = '<strong>Total CHO:<\/strong> ' + total + ' g';\n\n            const meta = Number(metaInput.value || 0);\n            if (meta && meta > 0) {\n                const diff = Math.round((meta - total) * 10) \/ 10;\n                gapEl.textContent = diff >= 0 ? `Faltam ${diff} g para a meta.` : `Excedeu em ${Math.abs(diff)} g a meta.`;\n            } else {\n                gapEl.textContent = '';\n            }\n        }\n\n        function attachListeners() {\n            document.querySelectorAll('.nutrili-portion').forEach(input => {\n                input.addEventListener('change', (e) => {\n                    const idx = Number(e.target.dataset.idx);\n                    const val = Number(e.target.value || 0);\n                    if (!isNaN(val) && val > 0) {\n                        selected[idx].grams = val;\n                        renderSelected();\n                    }\n                });\n            });\n            document.querySelectorAll('.nutrili-selected-item .remove').forEach(btn => {\n                btn.addEventListener('click', (e) => {\n                    const idx = Number(e.target.dataset.idx);\n                    selected.splice(idx,1);\n                    renderSelected();\n                });\n            });\n        }\n\n        addBtn.addEventListener('click', () => {\n            const query = searchInput.value || '';\n            const table = tableSelect.value;\n            const found = findFood(query, table);\n            if (!found) {\n                alert('Alimento n\u00e3o encontrado na tabela selecionada. Tente buscar por outro termo ou adicione como personalizado.');\n                return;\n            }\n            selected.push({ id: found.id, name: found.name, cho_per_100g: Number(found.cho_per_100g), grams: 100 });\n            searchInput.value = '';\n            renderSelected();\n        });\n\n        customAddBtn.addEventListener('click', () => {\n            const name = (customName.value || '').trim();\n            const cho = Number(customCho.value || 0);\n            if (!name || !cho || cho <= 0) {\n                alert('Preencha nome e CHO por 100g corretamente.');\n                return;\n            }\n            const id = 'custom_' + Date.now();\n            selected.push({ id: id, name: name, cho_per_100g: cho, grams: 100 });\n            customName.value = ''; customCho.value = '';\n            renderSelected();\n        });\n\n        exportBtn.addEventListener('click', () => {\n            if (!selected.length) { alert('Nenhum alimento selecionado.'); return; }\n            const rows = [['Nome','CHO\/100g','Por\u00e7\u00e3o(g)','CHO_item(g)']];\n            selected.forEach(it => rows.push([it.name, it.cho_per_100g, it.grams, calcItemCho(it).toFixed(1)]));\n            rows.push(['Total','','', (selected.reduce((s,i)=>s+calcItemCho(i),0)).toFixed(1)]);\n            const csv = rows.map(r=>r.map(c=>'\"'+String(c).replace(\/\"\/g,'\"\"')+'\"').join(',')).join('\\n');\n            const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n            const url = URL.createObjectURL(blob);\n            const a = document.createElement('a');\n            a.href = url; a.download = 'nutrili_cho_calculation.csv'; document.body.appendChild(a); a.click(); a.remove(); URL.revokeObjectURL(url);\n        });\n\n        clearBtn.addEventListener('click', () => { selected = []; renderSelected(); });\n\n        \/\/ initial render\n        renderSelected();\n\n    })();\n    <\/script>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f79d30 elementor-widget__width-initial e-transform elementor-absolute hero-pic elementor-widget elementor-widget-rkit_image_gallery\" data-id=\"5f79d30\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_rotateZ_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:-10,&quot;sizes&quot;:[]},&quot;_position&quot;:&quot;absolute&quot;,&quot;_transform_rotateZ_effect_tablet&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_rotateZ_effect_mobile&quot;:{&quot;unit&quot;:&quot;deg&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"rkit_image_gallery.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n        <div class=\"rkit-gallery-masonry-container\">\n            <div class=\"rkit-gallery-masonry grid\">\n                                    <div class=\"brick\">\n                        <div class=\"skeleton\"><\/div>\n                                                    <img decoding=\"async\" src=\"https:\/\/ojoaosanti.com\/saude\/wp-content\/uploads\/2025\/08\/LI-1.webp\"\n                                class=\"gallery_image  elementor-animation-grow\"\n                                alt=\"Gallery Image\"\n                                loading=\"lazy\"><\/img>\n                                                <\/div>\n                \n            <\/div>\n        <\/div>\n\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>Fa\u00e7a seus c\u00e1lculos abaixo Calculadora de CHO<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-1562","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ojoaosanti.com\/saude\/en\/wp-json\/wp\/v2\/pages\/1562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ojoaosanti.com\/saude\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ojoaosanti.com\/saude\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ojoaosanti.com\/saude\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ojoaosanti.com\/saude\/en\/wp-json\/wp\/v2\/comments?post=1562"}],"version-history":[{"count":43,"href":"https:\/\/ojoaosanti.com\/saude\/en\/wp-json\/wp\/v2\/pages\/1562\/revisions"}],"predecessor-version":[{"id":1627,"href":"https:\/\/ojoaosanti.com\/saude\/en\/wp-json\/wp\/v2\/pages\/1562\/revisions\/1627"}],"wp:attachment":[{"href":"https:\/\/ojoaosanti.com\/saude\/en\/wp-json\/wp\/v2\/media?parent=1562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}