{"id":2,"date":"2026-02-23T07:00:57","date_gmt":"2026-02-23T07:00:57","guid":{"rendered":"https:\/\/spesa.elenda.it\/?page_id=2"},"modified":"2026-02-23T07:57:51","modified_gmt":"2026-02-23T07:57:51","slug":"sample-page","status":"publish","type":"page","link":"https:\/\/spesa.elenda.it\/","title":{"rendered":"Spesa"},"content":{"rendered":"    <div id=\"fsl-app\" data-ajax=\"https:\/\/spesa.elenda.it\/wp-admin\/admin-ajax.php\" data-token=\"9a2ee262bddeb6f5\">\n        <div style=\"text-align:center;padding:60px 20px;color:#8A8580;\">\n            <div style=\"width:32px;height:32px;border:3px solid #E8E4DF;border-top-color:#E07A5F;border-radius:50%;animation:fslspin .7s linear infinite;margin:0 auto 12px;\"><\/div>\n            <style>@keyframes fslspin{to{transform:rotate(360deg)}}<\/style>\n            <p>Caricamento lista della spesa...<\/p>\n        <\/div>\n    <\/div>\n    <style>\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=DM+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Playfair+Display:wght@700;800&display=swap');\n    :root{--fsl-bg:#FAF8F5;--fsl-card:#FFF;--fsl-text:#2D2A26;--fsl-text-light:#8A8580;--fsl-accent:#E07A5F;--fsl-accent-hover:#C4623F;--fsl-urgent:#D64933;--fsl-urgent-bg:#FFF0ED;--fsl-success:#6B9E78;--fsl-success-bg:#F0F7F2;--fsl-border:#E8E4DF;--fsl-shadow:0 2px 12px rgba(45,42,38,.06);--fsl-shadow-lg:0 8px 32px rgba(45,42,38,.10);--fsl-r:14px;--fsl-rs:10px}\n    #fsl-app{font-family:'DM Sans',-apple-system,BlinkMacSystemFont,sans-serif;max-width:640px;margin:0 auto;padding:16px;color:var(--fsl-text);background:var(--fsl-bg);min-height:80vh;-webkit-font-smoothing:antialiased}\n    #fsl-app *{box-sizing:border-box}\n    .fsl-header{text-align:center;padding:24px 0 20px}\n    .fsl-header h1{font-family:'Playfair Display',Georgia,serif;font-size:2rem;font-weight:800;color:var(--fsl-text);letter-spacing:-.02em;line-height:1.1;margin:0}\n    .fsl-header .fsl-subtitle{font-size:.9rem;color:var(--fsl-text-light);margin-top:6px}\n    .fsl-error{background:var(--fsl-urgent-bg);color:var(--fsl-urgent);padding:12px 16px;border-radius:var(--fsl-rs);margin-bottom:12px;font-size:.85rem;text-align:center}\n    .fsl-tabs{display:flex;gap:4px;background:var(--fsl-card);border-radius:var(--fsl-r);padding:4px;margin-bottom:20px;box-shadow:var(--fsl-shadow)}\n    .fsl-tab{flex:1;padding:11px 8px;border:none;background:0 0;font-family:'DM Sans',sans-serif;font-size:.85rem;font-weight:600;color:var(--fsl-text-light);border-radius:var(--fsl-rs);cursor:pointer;transition:all .25s}\n    .fsl-tab:hover{color:var(--fsl-text)}.fsl-tab.active{background:var(--fsl-accent);color:#fff;box-shadow:0 2px 8px rgba(224,122,95,.3)}\n    .fsl-tab .fsl-badge{display:inline-block;background:rgba(255,255,255,.3);border-radius:20px;padding:1px 7px;font-size:.75rem;margin-left:4px}\n    .fsl-tab:not(.active) .fsl-badge{background:var(--fsl-border)}\n    .fsl-add-form{background:var(--fsl-card);border-radius:var(--fsl-r);padding:20px;margin-bottom:16px;box-shadow:var(--fsl-shadow)}\n    .fsl-form-row{display:flex;gap:10px;margin-bottom:12px}.fsl-form-row:last-child{margin-bottom:0}\n    .fsl-input,.fsl-select{flex:1;padding:12px 14px;border:2px solid var(--fsl-border);border-radius:var(--fsl-rs);font-family:'DM Sans',sans-serif;font-size:.9rem;color:var(--fsl-text);background:var(--fsl-bg);transition:border-color .2s;outline:0;-webkit-appearance:none}\n    .fsl-input:focus,.fsl-select:focus{border-color:var(--fsl-accent)}.fsl-input::placeholder{color:var(--fsl-text-light)}\n    .fsl-btn{padding:12px 20px;border:none;border-radius:var(--fsl-rs);font-family:'DM Sans',sans-serif;font-size:.9rem;font-weight:600;cursor:pointer;transition:all .2s;white-space:nowrap}\n    .fsl-btn-primary{background:var(--fsl-accent);color:#fff}\n    .fsl-btn-primary:hover{background:var(--fsl-accent-hover);transform:translateY(-1px);box-shadow:0 4px 12px rgba(224,122,95,.3)}\n    .fsl-btn-primary:disabled{opacity:.6;cursor:not-allowed;transform:none}\n    .fsl-btn-ghost{background:0 0;color:var(--fsl-text-light);padding:8px 12px;font-size:.8rem}.fsl-btn-ghost:hover{color:var(--fsl-urgent)}\n    .fsl-urgent-toggle{display:flex;align-items:center;gap:8px;padding:10px 14px;border:2px solid var(--fsl-border);border-radius:var(--fsl-rs);background:var(--fsl-bg);cursor:pointer;font-family:'DM Sans',sans-serif;font-size:.85rem;color:var(--fsl-text-light);transition:all .2s;white-space:nowrap}\n    .fsl-urgent-toggle.active{border-color:var(--fsl-urgent);background:var(--fsl-urgent-bg);color:var(--fsl-urgent)}\n    .fsl-list{display:flex;flex-direction:column;gap:8px}\n    .fsl-category-group{margin-bottom:8px}\n    .fsl-category-label{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--fsl-text-light);padding:12px 4px 6px;margin:0}\n    .fsl-item{background:var(--fsl-card);border-radius:var(--fsl-rs);padding:14px 16px;display:flex;align-items:flex-start;gap:12px;box-shadow:var(--fsl-shadow);transition:all .3s;animation:fslSlide .3s ease}\n    .fsl-item:hover{box-shadow:var(--fsl-shadow-lg)}\n    .fsl-item.bought{opacity:.55;background:var(--fsl-success-bg)}\n    .fsl-item.urgent{border-left:4px solid var(--fsl-urgent)}\n    @keyframes fslSlide{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}\n    .fsl-checkbox{width:24px;height:24px;min-width:24px;border:2px solid var(--fsl-border);border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .25s;margin-top:2px;background:0 0;padding:0}\n    .fsl-checkbox:hover{border-color:var(--fsl-success);background:var(--fsl-success-bg)}\n    .fsl-checkbox.checked{background:var(--fsl-success);border-color:var(--fsl-success)}\n    .fsl-checkbox.checked::after{content:'\\2713';color:#fff;font-size:14px;font-weight:700}\n    .fsl-item-content{flex:1;min-width:0}\n    .fsl-item-name{font-weight:600;font-size:.95rem;line-height:1.3;margin:0}\n    .fsl-item.bought .fsl-item-name{text-decoration:line-through;color:var(--fsl-text-light)}\n    .fsl-item-meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:4px;font-size:.78rem;color:var(--fsl-text-light)}\n    .fsl-tag-urgent{background:var(--fsl-urgent-bg);color:var(--fsl-urgent);padding:2px 8px;border-radius:20px;font-weight:600;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em}\n    .fsl-item-notes{margin-top:6px;font-size:.82rem;color:var(--fsl-text-light);font-style:italic;line-height:1.4}\n    .fsl-item-actions{display:flex;gap:4px;align-items:flex-start}\n    .fsl-item-action{background:0 0;border:none;cursor:pointer;padding:6px;border-radius:8px;color:var(--fsl-text-light);font-size:1rem;transition:all .2s;line-height:1}\n    .fsl-item-action:hover{background:var(--fsl-bg);color:var(--fsl-text)}\n    .fsl-item-action.urgent-btn:hover,.fsl-item-action.urgent-btn.active{color:var(--fsl-urgent);background:var(--fsl-urgent-bg)}\n    .fsl-item-action.delete-btn:hover{color:#D64933;background:#FFF0ED}\n    .fsl-empty{text-align:center;padding:48px 24px;color:var(--fsl-text-light)}\n    .fsl-empty-icon{font-size:3rem;margin-bottom:12px}\n    .fsl-empty p{font-size:.9rem;line-height:1.5}\n    .fsl-history-item{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--fsl-card);border-radius:var(--fsl-rs);margin-bottom:6px;box-shadow:var(--fsl-shadow);font-size:.88rem}\n    .fsl-history-date{color:var(--fsl-text-light);font-size:.78rem;white-space:nowrap;margin-left:12px}\n    .fsl-history-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}\n    .fsl-counter-bar{display:flex;justify-content:space-between;align-items:center;padding:0 4px;margin-bottom:12px;font-size:.82rem;color:var(--fsl-text-light)}\n    @media(max-width:500px){#fsl-app{padding:10px}.fsl-header h1{font-size:1.6rem}.fsl-form-row{flex-direction:column;gap:8px}.fsl-form-row.fsl-row-inline{flex-direction:row}.fsl-add-form{padding:16px}.fsl-tab{padding:10px 6px;font-size:.78rem}.fsl-item{padding:12px}}\n    <\/style>\n\n    <script>\n    (function() {\n        var app = document.getElementById('fsl-app');\n        var AJAX_URL = app.dataset.ajax;\n        var TOKEN = app.dataset.token;\n\n        var items = [];\n        var categories = [];\n        var historyItems = [];\n        var activeTab = 'list';\n        var addUrgent = false;\n        var errorMsg = '';\n        var isAdding = false;\n        var userName = '';\n        \/\/ Preserve form input values across re-renders\n        var formName = '';\n        var formCat = '';\n        var formNotes = '';\n        try { userName = localStorage.getItem('fsl_username') || ''; } catch(e) {}\n\n        function saveFormState() {\n            var n = document.getElementById('fsl-new-name');\n            var c = document.getElementById('fsl-new-cat');\n            var o = document.getElementById('fsl-new-notes');\n            if (n) formName = n.value;\n            if (c) formCat = c.value;\n            if (o) formNotes = o.value;\n        }\n        function restoreFormState() {\n            var n = document.getElementById('fsl-new-name');\n            var c = document.getElementById('fsl-new-cat');\n            var o = document.getElementById('fsl-new-notes');\n            if (n) n.value = formName;\n            if (c) c.value = formCat;\n            if (o) o.value = formNotes;\n        }\n\n        \/* \u2500\u2500 AJAX helper \u2500\u2500 *\/\n        function api(action, params) {\n            params = params || {};\n            var body = 'action=' + encodeURIComponent(action) + '&fsl_token=' + encodeURIComponent(TOKEN);\n            for (var key in params) {\n                if (params.hasOwnProperty(key)) {\n                    body += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\n                }\n            }\n            return fetch(AJAX_URL, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8' },\n                body: body\n            }).then(function(res) {\n                if (!res.ok) throw new Error('HTTP ' + res.status);\n                return res.json();\n            }).then(function(json) {\n                if (json.success === false) {\n                    var msg = (json.data && json.data.message) ? json.data.message : 'Errore sconosciuto';\n                    throw new Error(msg);\n                }\n                errorMsg = '';\n                return json.data;\n            }).catch(function(err) {\n                console.error('FSL Error:', action, err);\n                errorMsg = err.message;\n                render();\n                throw err;\n            });\n        }\n\n        function loadItems() {\n            return api('fsl_get_items').then(function(data) { items = data || []; render(); });\n        }\n        function loadCategories() {\n            return api('fsl_get_categories').then(function(data) { categories = data || []; });\n        }\n        function loadHistory() {\n            return api('fsl_get_history').then(function(data) { historyItems = data || []; render(); });\n        }\n\n        \/* \u2500\u2500 Helpers \u2500\u2500 *\/\n        function escHtml(str) {\n            if (!str) return '';\n            var d = document.createElement('div');\n            d.textContent = str;\n            return d.innerHTML;\n        }\n        function formatDate(str) {\n            if (!str) return '';\n            try {\n                var d = new Date(str.replace(' ', 'T'));\n                var date = d.toLocaleDateString('it-IT', { day: 'numeric', month: 'short' });\n                var time = d.toLocaleTimeString('it-IT', { hour: '2-digit', minute: '2-digit', hour12: false });\n                return date + ' ' + time;\n            } catch(e) { return ''; }\n        }\n        function formatDateFull(str) {\n            if (!str) return '';\n            try {\n                var d = new Date(str.replace(' ', 'T'));\n                var date = d.toLocaleDateString('it-IT', { day: 'numeric', month: 'short', year: 'numeric' });\n                var time = d.toLocaleTimeString('it-IT', { hour: '2-digit', minute: '2-digit', hour12: false });\n                return date + ' ' + time;\n            } catch(e) { return ''; }\n        }\n\n        \/* \u2500\u2500 Render \u2500\u2500 *\/\n        function render() {\n            saveFormState();\n            var h = '';\n\n            h += '<div class=\"fsl-header\"><h1>\\uD83D\\uDED2 Lista della Spesa<\/h1>' +\n                 '<div class=\"fsl-subtitle\">Condivisa con tutta la famiglia<\/div><\/div>';\n\n            if (errorMsg) {\n                h += '<div class=\"fsl-error\">\\u26A0\\uFE0F ' + escHtml(errorMsg) + '<\/div>';\n            }\n\n            if (!userName) {\n                h += '<div class=\"fsl-add-form\" style=\"margin-bottom:16px;text-align:center\">' +\n                    '<p style=\"margin-bottom:10px;font-size:.88rem;color:var(--fsl-text-light)\">Come ti chiami? (opzionale)<\/p>' +\n                    '<div class=\"fsl-form-row fsl-row-inline\">' +\n                    '<input class=\"fsl-input\" id=\"fsl-name-field\" placeholder=\"Il tuo nome...\" maxlength=\"50\">' +\n                    '<button class=\"fsl-btn fsl-btn-primary\" onclick=\"fslSetName()\">Salva<\/button>' +\n                    '<button class=\"fsl-btn fsl-btn-ghost\" onclick=\"fslSkipName()\">Salta<\/button><\/div><\/div>';\n            }\n\n            h += '<div class=\"fsl-tabs\">' +\n                '<button class=\"fsl-tab' + (activeTab === 'list' ? ' active' : '') + '\" onclick=\"fslTab(\\'list\\')\">Da comprare <span class=\"fsl-badge\">' + items.length + '<\/span><\/button>' +\n                '<button class=\"fsl-tab' + (activeTab === 'history' ? ' active' : '') + '\" onclick=\"fslTab(\\'history\\')\">Storico<\/button><\/div>';\n\n            h += (activeTab === 'list') ? renderList() : renderHistoryTab();\n            app.innerHTML = h;\n            restoreFormState();\n        }\n\n        function renderList() {\n            var h = '';\n            var catOpts = categories.map(function(c) { return '<option value=\"' + escHtml(c) + '\">' + escHtml(c) + '<\/option>'; }).join('');\n\n            h += '<div class=\"fsl-add-form\">' +\n                '<div class=\"fsl-form-row fsl-row-inline\">' +\n                '<input class=\"fsl-input\" id=\"fsl-new-name\" placeholder=\"Aggiungi prodotto...\" onkeydown=\"if(event.key===\\'Enter\\')fslAdd()\">' +\n                '<button class=\"fsl-urgent-toggle' + (addUrgent ? ' active' : '') + '\" onclick=\"fslToggleAddUrgent()\">\\uD83D\\uDD25 Urgente<\/button><\/div>' +\n                '<div class=\"fsl-form-row\"><select class=\"fsl-select\" id=\"fsl-new-cat\"><option value=\"\">Categoria...<\/option>' + catOpts + '<\/select><\/div>' +\n                '<div class=\"fsl-form-row\">' +\n                '<input class=\"fsl-input\" id=\"fsl-new-notes\" placeholder=\"Note (opzionale)...\" onkeydown=\"if(event.key===\\'Enter\\')fslAdd()\">' +\n                '<button class=\"fsl-btn fsl-btn-primary\" id=\"fsl-add-btn\" onclick=\"fslAdd()\"' + (isAdding ? ' disabled' : '') + '>' + (isAdding ? 'Aggiungo...' : '+ Aggiungi') + '<\/button><\/div><\/div>';\n\n            if (items.length === 0) {\n                h += '<div class=\"fsl-empty\"><div class=\"fsl-empty-icon\">\\uD83E\\uDDFA<\/div><p>La lista \\u00E8 vuota!<br>Aggiungi qualcosa da comprare.<\/p><\/div>';\n                return h;\n            }\n\n            var grouped = {};\n            items.forEach(function(item) {\n                var cat = item.category || 'Senza categoria';\n                if (!grouped[cat]) grouped[cat] = [];\n                grouped[cat].push(item);\n            });\n            for (var k in grouped) {\n                grouped[k].sort(function(a, b) { return parseInt(b.is_urgent) - parseInt(a.is_urgent); });\n            }\n\n            h += '<div class=\"fsl-counter-bar\"><span>' + items.length + ' da comprare<\/span><\/div>';\n            h += '<div class=\"fsl-list\">';\n\n            var catOrder = categories.concat(['Senza categoria']);\n            var done = {};\n            catOrder.forEach(function(cat) {\n                if (grouped[cat]) {\n                    done[cat] = true;\n                    h += '<div class=\"fsl-category-group\"><div class=\"fsl-category-label\">' + escHtml(cat) + '<\/div>';\n                    grouped[cat].forEach(function(item) { h += renderItem(item); });\n                    h += '<\/div>';\n                }\n            });\n            for (var cat in grouped) {\n                if (!done[cat]) {\n                    h += '<div class=\"fsl-category-group\"><div class=\"fsl-category-label\">' + escHtml(cat) + '<\/div>';\n                    grouped[cat].forEach(function(item) { h += renderItem(item); });\n                    h += '<\/div>';\n                }\n            }\n            h += '<\/div>';\n            return h;\n        }\n\n        function renderItem(item) {\n            var isUrgent = parseInt(item.is_urgent);\n            var cls = 'fsl-item';\n            if (isUrgent) cls += ' urgent';\n\n            var meta = '';\n            if (isUrgent) meta += '<span class=\"fsl-tag-urgent\">\\uD83D\\uDD25 Urgente<\/span>';\n            if (item.added_by && item.added_by !== 'Anonimo') meta += '<span>da ' + escHtml(item.added_by) + '<\/span>';\n            meta += '<span>' + formatDate(item.created_at) + '<\/span>';\n\n            var s = '<div class=\"' + cls + '\">' +\n                '<div class=\"fsl-checkbox\" onclick=\"fslMarkBought(' + item.id + ')\" title=\"Segna come comprato\"><\/div>' +\n                '<div class=\"fsl-item-content\"><div class=\"fsl-item-name\">' + escHtml(item.name) + '<\/div>';\n            if (meta) s += '<div class=\"fsl-item-meta\">' + meta + '<\/div>';\n            if (item.notes) s += '<div class=\"fsl-item-notes\">\\uD83D\\uDCDD ' + escHtml(item.notes) + '<\/div>';\n            s += '<\/div><div class=\"fsl-item-actions\">';\n            s += '<button class=\"fsl-item-action urgent-btn' + (isUrgent ? ' active' : '') + '\" onclick=\"fslToggleUrgent(' + item.id + ',' + (isUrgent ? 0 : 1) + ')\" title=\"Urgente\">\\uD83D\\uDD25<\/button>';\n            s += '<button class=\"fsl-item-action delete-btn\" onclick=\"fslDelete(' + item.id + ')\" title=\"Elimina\">\\u2715<\/button>';\n            s += '<\/div><\/div>';\n            return s;\n        }\n\n        function renderHistoryTab() {\n            var h = '<div class=\"fsl-history-header\"><span style=\"font-weight:600;font-size:.9rem\">Prodotti comprati di recente<\/span>';\n            if (historyItems.length > 0) h += '<button class=\"fsl-btn fsl-btn-ghost\" onclick=\"fslClearHistory()\">Svuota storico<\/button>';\n            h += '<\/div>';\n            if (historyItems.length === 0) {\n                h += '<div class=\"fsl-empty\"><div class=\"fsl-empty-icon\">\\uD83D\\uDCCB<\/div><p>Nessun prodotto nello storico.<br>I prodotti comprati appariranno qui.<\/p><\/div>';\n            } else {\n                historyItems.forEach(function(item) {\n                    h += '<div class=\"fsl-history-item\"><div><strong>' + escHtml(item.name) + '<\/strong>';\n                    if (item.category) h += '<span style=\"color:var(--fsl-text-light);font-size:.78rem\"> \\u00B7 ' + escHtml(item.category) + '<\/span>';\n                    if (item.notes) h += '<div style=\"font-size:.78rem;color:var(--fsl-text-light);font-style:italic;margin-top:2px\">' + escHtml(item.notes) + '<\/div>';\n                    h += '<\/div><div class=\"fsl-history-date\">' + formatDateFull(item.bought_at) + '<\/div><\/div>';\n                });\n            }\n            return h;\n        }\n\n        \/* \u2500\u2500 Global actions \u2500\u2500 *\/\n        window.fslSetName = function() {\n            var v = (document.getElementById('fsl-name-field') || {}).value || '';\n            userName = v.trim() || 'Anonimo';\n            try { localStorage.setItem('fsl_username', userName); } catch(e) {}\n            render();\n        };\n        window.fslSkipName = function() {\n            userName = 'Anonimo';\n            try { localStorage.setItem('fsl_username', userName); } catch(e) {}\n            render();\n        };\n        window.fslTab = function(tab) {\n            activeTab = tab;\n            if (tab === 'history') loadHistory(); else render();\n        };\n        window.fslToggleAddUrgent = function() {\n            addUrgent = !addUrgent;\n            var btn = document.querySelector('.fsl-urgent-toggle');\n            if (btn) {\n                if (addUrgent) btn.classList.add('active');\n                else btn.classList.remove('active');\n            }\n        };\n        window.fslAdd = function() {\n            var nameEl = document.getElementById('fsl-new-name');\n            var catEl = document.getElementById('fsl-new-cat');\n            var notesEl = document.getElementById('fsl-new-notes');\n            var name = (nameEl ? nameEl.value : '').trim();\n            var cat = catEl ? catEl.value : '';\n            var notes = notesEl ? notesEl.value.trim() : '';\n            if (!name) { if (nameEl) nameEl.focus(); return; }\n\n            isAdding = true;\n            \/\/ Keep form values during \"Aggiungo...\" state\n            formName = name;\n            formCat = cat;\n            formNotes = notes;\n            render();\n\n            api('fsl_add_item', {\n                name: name,\n                category: cat,\n                notes: notes,\n                is_urgent: addUrgent ? 1 : 0,\n                added_by: userName || 'Anonimo'\n            }).then(function() {\n                addUrgent = false;\n                isAdding = false;\n                \/\/ Clear form state after successful add\n                formName = '';\n                formCat = '';\n                formNotes = '';\n                return loadItems();\n            }).then(function() {\n                setTimeout(function() {\n                    var el = document.getElementById('fsl-new-name');\n                    if (el) { el.value = ''; el.focus(); }\n                    var ne = document.getElementById('fsl-new-notes');\n                    if (ne) ne.value = '';\n                    var ce = document.getElementById('fsl-new-cat');\n                    if (ce) ce.value = '';\n                }, 50);\n            }).catch(function() {\n                isAdding = false;\n                render();\n            });\n        };\n        window.fslMarkBought = function(id) {\n            api('fsl_update_item', { item_id: id, is_bought: 1 }).then(function() { return loadItems(); }).catch(function() {});\n        };\n        window.fslToggleUrgent = function(id, val) {\n            api('fsl_update_item', { item_id: id, is_urgent: val }).then(function() { return loadItems(); }).catch(function() {});\n        };\n        window.fslDelete = function(id) {\n            if (!confirm('Eliminare questo prodotto?')) return;\n            api('fsl_delete_item', { item_id: id }).then(function() { return loadItems(); }).catch(function() {});\n        };\n        window.fslClearHistory = function() {\n            if (!confirm('Svuotare tutto lo storico?')) return;\n            api('fsl_clear_history').then(function() { historyItems = []; render(); }).catch(function() {});\n        };\n\n        \/\/ Auto-refresh every 30s\n        setInterval(function() {\n            if (activeTab === 'list') {\n                api('fsl_get_items').then(function(data) { items = data || []; render(); }).catch(function() {});\n            }\n        }, 30000);\n\n        \/\/ \u2500\u2500 Init \u2500\u2500\n        loadCategories().then(function() {\n            return loadItems();\n        }).catch(function(e) {\n            app.innerHTML = '<div class=\"fsl-error\" style=\"margin:40px auto;max-width:400px\">' +\n                '<p style=\"font-size:1.1rem;margin-bottom:8px\">\\u26A0\\uFE0F Errore nel caricamento<\/p>' +\n                '<p style=\"font-size:.85rem\">' + escHtml(e.message) + '<\/p>' +\n                '<p style=\"font-size:.8rem;margin-top:12px;opacity:.7\">Verifica che i permalink di WordPress siano attivi<br>(Impostazioni \\u2192 Permalink \\u2192 Salva)<\/p><\/div>';\n        });\n    })();\n    <\/script>\n    \n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-2","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/spesa.elenda.it\/index.php?rest_route=\/wp\/v2\/pages\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spesa.elenda.it\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spesa.elenda.it\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spesa.elenda.it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spesa.elenda.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2"}],"version-history":[{"count":1,"href":"https:\/\/spesa.elenda.it\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":8,"href":"https:\/\/spesa.elenda.it\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions\/8"}],"wp:attachment":[{"href":"https:\/\/spesa.elenda.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}