{"id":2609,"date":"2026-06-16T13:16:18","date_gmt":"2026-06-16T13:16:18","guid":{"rendered":"https:\/\/app.digitalfreelancer.org\/?page_id=2609"},"modified":"2026-06-22T18:07:15","modified_gmt":"2026-06-22T18:07:15","slug":"dashboard-menus","status":"publish","type":"page","link":"https:\/\/app.digitalfreelancer.org\/index.php\/dashboard-menus\/","title":{"rendered":"Dashboard Menus+"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2609\" class=\"elementor elementor-2609\">\n\t\t\t\t<div class=\"elementor-element elementor-element-79a716c e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no e-con e-parent\" data-id=\"79a716c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e00e4d8 elementor-widget elementor-widget-shortcode\" data-id=\"e00e4d8\" 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=\"ms-1-13pTS1\" class=\"mp-wrap\">\n                    <style>\n        #ms-1-13pTS1 {\n            --ms-bg: linear-gradient(135deg, #f7f3ea, #ffffff);\n            --ms-card-bg: #fffaf2;\n            --ms-text: #3d3d3d;\n            --ms-muted: #7a6f5a;\n            --ms-border: #e8ddcc;\n            --ms-primary: #2f5d50;\n            --ms-accent: #a8743a;\n            --ms-light: #f3eadb;\n            --ms-light-hover: #e7d8bf;\n            all: initial;\n            * { box-sizing: border-box; }\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            color: var(--ms-text);\n            background: var(--ms-bg);\n            display: block;\n            padding: 24px;\n            border-radius: 20px;\n            box-shadow: 0 10px 30px rgba(0,0,0,0.06);\n            animation: msFadeIn 0.5s ease-in-out;\n            max-width: 1280px;\n            margin: 0 auto;\n        }\n\n        #ms-1-13pTS1 button, \n        #ms-1-13pTS1 input,\n        #ms-1-13pTS1 select, \n        #ms-1-13pTS1 textarea {\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            font-size: 14px;\n            color: var(--ms-text);\n            outline: none;\n        }\n\n        @keyframes msFadeIn {\n            from { opacity: 0; transform: translateY(10px); }\n            to { opacity: 1; transform: translateY(0); }\n        }\n\n        \/* HEADER *\/\n        #ms-1-13pTS1 .mp-header {\n            display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; flex-wrap: wrap; gap: 12px;\n        }\n        #ms-1-13pTS1 .mp-header h2 { margin: 0; color: var(--ms-primary); font-size: 26px; letter-spacing: 0.5px; }\n        #ms-1-13pTS1 .mp-header p { color: var(--ms-muted); margin: 4px 0 0 0; font-size: 14px; }\n\n        \/* GRID *\/\n        #ms-1-13pTS1 .mp-grid {\n            display: grid; grid-template-columns: 1fr 2fr 1fr; gap: 18px; margin-top: 15px;\n        }\n\n        \/* CARD *\/\n        #ms-1-13pTS1 .mp-card {\n            background: var(--ms-card-bg); border-radius: 16px; padding: 18px;\n            border: 1px solid var(--ms-border); box-shadow: 0 6px 18px rgba(0,0,0,0.04);\n            transition: 0.3s ease; display: flex; flex-direction: column; justify-content: space-between; position: relative; overflow: hidden;\n        }\n        #ms-1-13pTS1 .mp-card:hover {\n            transform: translateY(-4px); box-shadow: 0 14px 28px rgba(47,93,80,0.12);\n        }\n        #ms-1-13pTS1 .mp-card h3 {\n            margin-top: 0; color: var(--ms-primary); font-size: 16px; display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px;\n        }\n\n        \/* INPUTS *\/\n        #ms-1-13pTS1 input, \n        #ms-1-13pTS1 textarea, \n        #ms-1-13pTS1 select {\n            width: 100%; margin: 6px 0; padding: 11px 12px; border-radius: 10px; border: 1px solid #e6dac6; background: #fffdf8; transition: 0.25s;\n        }\n        #ms-1-13pTS1 textarea { height: 130px; resize: none; }\n        #ms-1-13pTS1 input:focus, \n        #ms-1-13pTS1 textarea:focus, \n        #ms-1-13pTS1 select:focus {\n            border-color: var(--ms-primary); box-shadow: 0 0 0 3px rgba(47,93,80,0.15);\n        }\n\n        \/* BUTTONS *\/\n        #ms-1-13pTS1 button {\n            width: 100%; margin-top: 8px; padding: 11px; border: none; border-radius: 12px;\n            background: linear-gradient(135deg, var(--ms-primary), var(--ms-accent)); color: #fff; font-weight: 600; cursor: pointer; transition: 0.25s ease; text-align: center;\n        }\n        #ms-1-13pTS1 button:hover {\n            transform: scale(1.02); box-shadow: 0 8px 20px rgba(168,116,58,0.2); filter: brightness(1.05);\n        }\n        #ms-1-13pTS1 button.secondary {\n            background: #efe6d6; color: #4a3b2b;\n        }\n        #ms-1-13pTS1 button.secondary:hover {\n            background: #e3d6c1; box-shadow: none;\n        }\n\n        \/* PREVIEW MENU *\/\n        #ms-1-13pTS1 .menu-preview {\n            min-height: 340px; border-radius: 14px; padding: 18px;\n            background: linear-gradient(180deg, #fffaf2, #f6f0e4);\n            border: 2px dashed #d8c6a8; color: var(--ms-text); overflow: auto;\n        }\n\n        \/* MENU ITEMS *\/\n        #ms-1-13pTS1 .menu-item {\n            padding: 8px 0; border-bottom: 1px dotted #cbb89a; transition: 0.2s; font-size: 14px;\n        }\n        #ms-1-13pTS1 .menu-item:hover {\n            transform: translateX(4px); color: var(--ms-primary);\n        }\n\n        \/* TEMPLATES LIST *\/\n        #ms-1-13pTS1 .tpl {\n            padding: 10px 12px; margin: 8px 0; border-radius: 12px; background: var(--ms-light);\n            border: 1px solid #e4d2b6; cursor: pointer; transition: 0.25s; color: #4a3b2b; font-size: 13.5px; font-weight: 500;\n        }\n        #ms-1-13pTS1 .tpl:hover {\n            background: var(--ms-light-hover); transform: translateX(4px); box-shadow: 0 4px 12px rgba(0,0,0,0.06); color: var(--ms-primary);\n        }\n\n        \/* RESPONSIVE *\/\n        @media(max-width: 900px){\n            #ms-1-13pTS1 .mp-grid { grid-template-columns: 1fr; }\n        }\n        <\/style>\n                            <div class=\"mp-wrap-inner\">\n            <!-- HEADER -->\n            <div class=\"mp-header\">\n                <div>\n                    <h2>\ud83c\udf3f Menu Studio Pro+<\/h2>\n                    <p>Cria menus elegantes, modernos e profissionais para o teu restaurante ou caf\u00e9<\/p>\n                <\/div>\n            <\/div>\n\n            <!-- MAIN GRID -->\n            <div class=\"mp-grid\">\n\n                <!-- EDITOR -->\n                <div class=\"mp-card\">\n                    <h3><span>\ud83e\uddfe Criador de Menu<\/span><\/h3>\n                    <div class=\"mp-field\">\n                        <label style=\"font-size:12px; color:var(--ms-muted); font-weight:600;\">Nome do Menu<\/label>\n                        <input type=\"text\" data-menu-title placeholder=\"Ex: Menu Degusta\u00e7\u00e3o\">\n                    <\/div>\n                    <div class=\"mp-field\">\n                        <label style=\"font-size:12px; color:var(--ms-muted); font-weight:600;\">Itens e Pre\u00e7os (um por linha)<\/label>\n                        <textarea data-menu-content placeholder=\"Ex:&#10;Sopa de legumes - 3.50\u20ac&#10;Risotto de cogumelos - 12.00\u20ac&#10;Vinho branco - 4.00\u20ac\"><\/textarea>\n                    <\/div>\n                    <div class=\"mp-field\">\n                        <label style=\"font-size:12px; color:var(--ms-muted); font-weight:600;\">Estilo Padr\u00e3o<\/label>\n                        <select data-menu-template>\n                            <option value=\"default\">Menu Base<\/option>\n                            <option value=\"restaurant\">Restaurante Gourmet<\/option>\n                            <option value=\"cafe\">Caf\u00e9 Natural<\/option>\n                            <option value=\"organic\">Org\u00e2nico Premium<\/option>\n                        <\/select>\n                    <\/div>\n                    <button data-menu-generate>\u2728 Gerar Menu<\/button>\n                    <button class=\"secondary\" data-menu-print>\ud83d\udda8 Imprimir Menu<\/button>\n                <\/div>\n\n                <!-- PREVIEW -->\n                <div class=\"mp-card large\">\n                    <h3><span>\ud83d\udc41 Preview do Menu<\/span><\/h3>\n                    <div class=\"menu-preview\" data-menu-preview>\n                        O teu menu aparecer\u00e1 aqui...\n                    <\/div>\n                <\/div>\n\n                <!-- TEMPLATES -->\n                <div class=\"mp-card\">\n                    <h3><span>\ud83c\udfa8 Estilos R\u00e1pidos<\/span><\/h3>\n                    <div class=\"tpl\" data-template-type=\"organic\">\ud83c\udf3f Org\u00e2nico elegante<\/div>\n                    <div class=\"tpl\" data-template-type=\"restaurant\">\ud83c\udf7d Fine dining<\/div>\n                    <div class=\"tpl\" data-template-type=\"cafe\">\u2615 Caf\u00e9 natural<\/div>\n                    <div class=\"tpl\" data-template-type=\"brunch\">\ud83e\udd50 Brunch moderno<\/div>\n                <\/div>\n\n            <\/div>\n        <\/div>\n                            <script>\n        (function(){\n            var root = document.getElementById(\"ms-1-13pTS1\");\n            if (!root) return;\n\n            var els = {\n                title: root.querySelector('[data-menu-title]'),\n                content: root.querySelector('[data-menu-content]'),\n                templateSelect: root.querySelector('[data-menu-template]'),\n                preview: root.querySelector('[data-menu-preview]'),\n                btnGenerate: root.querySelector('[data-menu-generate]'),\n                btnPrint: root.querySelector('[data-menu-print]')\n            };\n\n            function generateMenu(){\n                var titleVal = els.title.value.trim() || 'Menu Especial';\n                var contentVal = els.content.value.trim();\n                var items = contentVal ? contentVal.split('\\n') : [];\n\n                var html = '<div style=\"font-family:Segoe UI;\">' +\n                           '<h1 style=\"color:#2f5d50; border-bottom:2px solid #a8743a; padding-bottom:10px; margin-top:0; font-size:22px;\">' + escapeHtml(titleVal) + '<\/h1>' +\n                           '<br>';\n\n                if (items.length === 0 || (items.length === 1 && items[0] === '')) {\n                    html += '<p style=\"color:#7a6f5a; font-style:italic;\">Nenhum item adicionado ao menu.<\/p>';\n                } else {\n                    items.forEach(function(i){\n                        if (i.trim() !== \"\"){\n                            html += '<div class=\"menu-item\">\ud83c\udf7d ' + escapeHtml(i) + '<\/div>';\n                        }\n                    });\n                }\n\n                html += '<\/div>';\n                els.preview.innerHTML = html;\n            }\n\n            function setTemplate(type){\n                var templates = {\n                    organic: \"Sopa do dia - 4.50\u20ac\\nSalada fresca - 6.00\u20ac\\nSumo detox - 3.50\u20ac\",\n                    restaurant: \"Carpaccio de novilho - 9.00\u20ac\\nRisotto trufado - 14.00\u20ac\\nVinho reserva - 6.00\u20ac\",\n                    cafe: \"Cappuccino - 2.00\u20ac\\nBolo caseiro - 3.00\u20ac\\nTosta artesanal - 4.50\u20ac\",\n                    brunch: \"Ovos Benedict - 8.00\u20ac\\nPanquecas - 6.50\u20ac\\nSmoothie bowl - 5.50\u20ac\"\n                };\n\n                if (templates[type]) {\n                    els.content.value = templates[type];\n                    els.title.value = type.charAt(0).toUpperCase() + type.slice(1) + ' Menu';\n                    els.templateSelect.value = type === 'brunch' ? 'default' : type;\n                    generateMenu();\n                }\n            }\n\n            function escapeHtml(str){\n                return (str || '').toString().replace(\/[&<>\"']\/g, function(m){\n                    return ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'})[m];\n                });\n            }\n\n            els.btnGenerate.addEventListener('click', generateMenu);\n\n            els.btnPrint.addEventListener('click', function(){\n                var printContent = els.preview.innerHTML;\n                var win = window.open('', '', 'height=700,width=900');\n                win.document.write('<html><head><title>Imprimir Menu<\/title>');\n                win.document.write('<style>body{font-family:Segoe UI,sans-serif;padding:30px;color:#3d3d3d;}.menu-item{padding:8px 0;border-bottom:1px dotted #ccc;font-size:16px;}<\/style>');\n                win.document.write('<\/head><body>');\n                win.document.write(printContent);\n                win.document.write('<\/body><\/html>');\n                win.document.close();\n                win.focus();\n                setTimeout(function(){\n                    win.print();\n                    win.close();\n                }, 250);\n            });\n\n            root.querySelectorAll('[data-template-type]').forEach(function(el){\n                el.addEventListener('click', function(){\n                    setTemplate(el.getAttribute('data-template-type'));\n                });\n            });\n\n            \/\/ Inicializar com template restaurante por defeito\n            setTemplate('restaurant');\n        })();\n        <\/script>\n                <\/div>\n        <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-2609","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages\/2609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/comments?post=2609"}],"version-history":[{"count":4,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages\/2609\/revisions"}],"predecessor-version":[{"id":2636,"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/pages\/2609\/revisions\/2636"}],"wp:attachment":[{"href":"https:\/\/app.digitalfreelancer.org\/index.php\/wp-json\/wp\/v2\/media?parent=2609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}