{"id":12,"date":"2026-03-15T19:55:18","date_gmt":"2026-03-15T19:55:18","guid":{"rendered":"https:\/\/staging.vakos.it\/qentry\/"},"modified":"2026-05-02T12:04:56","modified_gmt":"2026-05-02T12:04:56","slug":"hub","status":"publish","type":"page","link":"https:\/\/staging.vakos.it\/","title":{"rendered":"Area Qentry"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"12\" class=\"elementor elementor-12\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-74b37190 e-flex e-con-boxed e-con e-parent\" data-id=\"74b37190\" 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-6696060b elementor-widget elementor-widget-shortcode\" data-id=\"6696060b\" 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\"><style>\n\/* \u2500\u2500 Mobile auth optimization \u2500\u2500 *\/\n.qentry-auth-page { padding: 16px; box-sizing: border-box; }\n.qentry-auth-card { padding: 28px 24px; }\n.qentry-input, .qentry-select, .qentry-textarea {\n\tfont-size: 16px !important;\n\tmin-height: 48px;\n\tpadding: 12px 14px !important;\n\t-webkit-appearance: none;\n\ttouch-action: manipulation;\n\tbox-sizing: border-box;\n}\n.qentry-btn { min-height: 48px; touch-action: manipulation; }\n.qentry-btn--block { width: 100%; }\n.qentry-auth-tab { min-height: 44px; touch-action: manipulation; }\n.qentry-form-group { margin-bottom: 16px; }\n.qentry-label { font-size: 14px; display: block; margin-bottom: 6px; }\n.qentry-pwd-wrap { position: relative; display: block; }\n.qentry-pwd-wrap .qentry-input { padding-right: 52px !important; }\n.qentry-pwd-toggle {\n\tposition: absolute; right: 0; top: 0;\n\theight: 100%; width: 48px;\n\tbackground: none; border: none; cursor: pointer;\n\tdisplay: flex; align-items: center; justify-content: center;\n\tcolor: #6b7280;\n\t-webkit-tap-highlight-color: transparent;\n\ttouch-action: manipulation;\n}\n.qentry-pwd-toggle:hover { color: #374151; }\n@media (max-width: 480px) {\n\t.qentry-auth-card { padding: 20px 16px; border-radius: 16px; }\n}\n.qentry-form-success {\n\tbackground: #dcfce7;\n\tborder: 1px solid #86efac;\n\tcolor: #15803d;\n\tpadding: 10px 14px;\n\tborder-radius: 8px;\n\tfont-size: 14px;\n\tmargin-bottom: 12px;\n}\n<\/style>\n<div class=\"qentry-auth-page\">\n\n\t<div class=\"qentry-auth-card\">\n\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/staging.vakos.it\/wp-content\/uploads\/2026\/05\/qentry-11.png\" alt=\"qentry\" class=\"qentry-auth-logo\">\n\t\t\n\t\t<!-- This template is the GENERIC login (dashboard page), used by [qentry_app] when\n\t\t\t not authenticated. It is intended for ADMIN and ORGANIZER login only.\n\t\t\t Participants register from THEIR org's landing page (auth-participant.php).\n\t\t\t Organizers register from the dedicated \/diventa-organizer\/ page.\n\t\t\t So no \"Registrati\" tab here. -->\n\n\t\t\t\t\t<div class=\"qentry-auth-error\" id=\"auth-global-error\" style=\"display:none\"><\/div>\n\t\t\n\t\t<!-- \u2500\u2500 Login panel \u2500\u2500 -->\n\t\t<div class=\"qentry-auth-panel\" id=\"panel-login\">\n\t\t\t<p class=\"qentry-auth-desc\">\n\t\t\t\tAccedi con le tue credenziali per visualizzare eventi e ticket.\t\t\t<\/p>\n\t\t\t<form id=\"form-login\" novalidate>\n\t\t\t\t<div class=\"qentry-form-group\">\n\t\t\t\t\t<label class=\"qentry-label\" for=\"login-email\">Email *<\/label>\n\t\t\t\t\t<input type=\"text\" id=\"login-email\" class=\"qentry-input\" autocomplete=\"email\" required placeholder=\"Inserisci la tua email\">\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"qentry-form-group\">\n\t\t\t\t\t<label class=\"qentry-label\" for=\"login-password\">Password *<\/label>\n\t\t\t\t\t<div class=\"qentry-pwd-wrap\">\n\t\t\t\t\t\t<input type=\"password\" id=\"login-password\" class=\"qentry-input\" required placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\">\n\t\t\t\t\t\t<button type=\"button\" class=\"qentry-pwd-toggle\" data-target=\"login-password\" aria-label=\"Mostra password\">\n\t\t\t\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n\t\t\t\t\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"qentry-form-error\" id=\"login-error\" style=\"display:none\"><\/div>\n\t\t\t\t<button type=\"submit\" class=\"qentry-btn qentry-btn--primary qentry-btn--block\">\n\t\t\t\t\tAccedi\t\t\t\t<\/button>\n\t\t\t<\/form>\n\t\t\t<p class=\"qentry-auth-footer\">\n\t\t\t\t<a href=\"#\" class=\"qentry-link\" id=\"link-forgot\">\n\t\t\t\t\tPassword dimenticata?\t\t\t\t<\/a>\n\t\t\t<\/p>\n\t\t<\/div>\n\n\t\t<!-- Register panel REMOVED \u2014 see top-of-file comment.\n\t\t\t Participants: register from their org's landing page.\n\t\t\t Organizers: register from the \/diventa-organizer\/ page. -->\n\n\t\t<!-- \u2500\u2500 Forgot password panel \u2500\u2500 -->\n\t\t<div class=\"qentry-auth-panel\" id=\"panel-forgot\" style=\"display:none\">\n\t\t\t<p class=\"qentry-auth-desc\">Inserisci la tua email per ricevere il link di reimpostazione.<\/p>\n\t\t\t<form id=\"form-forgot\" novalidate>\n\t\t\t\t<div class=\"qentry-form-group\">\n\t\t\t\t\t<label class=\"qentry-label\" for=\"forgot-email\">Email *<\/label>\n\t\t\t\t\t<input type=\"email\" id=\"forgot-email\" class=\"qentry-input\" required placeholder=\"mario@email.com\">\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"qentry-form-error\" id=\"forgot-error\" style=\"display:none\"><\/div>\n\t\t\t\t<div class=\"qentry-form-success\" id=\"forgot-success\" style=\"display:none\"><\/div>\n\t\t\t\t<button type=\"submit\" class=\"qentry-btn qentry-btn--primary qentry-btn--block\">\n\t\t\t\t\tInvia link di recupero\t\t\t\t<\/button>\n\t\t\t<\/form>\n\t\t\t<p class=\"qentry-auth-footer\" style=\"text-align:center;margin-top:14px\">\n\t\t\t\t<a href=\"#\" class=\"qentry-link\" id=\"link-back-login\">\u2190 Torna al login<\/a>\n\t\t\t<\/p>\n\t\t<\/div>\n\n\t\t<!-- \u2500\u2500 Reset password panel \u2500\u2500 -->\n\t\t<div class=\"qentry-auth-panel\" id=\"panel-reset\" style=\"display:none\">\n\t\t\t<p class=\"qentry-auth-desc\">Scegli una nuova password sicura per il tuo account.<\/p>\n\t\t\t<form id=\"form-reset\" novalidate>\n\t\t\t\t<input type=\"hidden\" id=\"reset-key\"   value=\"\">\n\t\t\t\t<input type=\"hidden\" id=\"reset-login\" value=\"\">\n\t\t\t\t<div class=\"qentry-form-group\">\n\t\t\t\t\t<label class=\"qentry-label\" for=\"reset-password\">Nuova password *<\/label>\n\t\t\t\t\t<div class=\"qentry-pwd-wrap\">\n\t\t\t\t\t\t<input type=\"password\" id=\"reset-password\" class=\"qentry-input\" required placeholder=\"Min. 8 caratteri\">\n\t\t\t\t\t\t<button type=\"button\" class=\"qentry-pwd-toggle\" data-target=\"reset-password\" aria-label=\"Mostra password\">\n\t\t\t\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n\t\t\t\t\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"qentry-form-error\" id=\"reset-error\" style=\"display:none\"><\/div>\n\t\t\t\t<button type=\"submit\" class=\"qentry-btn qentry-btn--primary qentry-btn--block\">\n\t\t\t\t\tSalva nuova password\t\t\t\t<\/button>\n\t\t\t<\/form>\n\t\t<\/div>\n\n\t<\/div>\n\n<\/div>\n\n<script>\n( function () {\n\tvar apiBase      = ( window.qentryData && window.qentryData.apiBase )\n\t\t? window.qentryData.apiBase\n\t\t: 'https:\/\/staging.vakos.it\/index.php\/wp-json\/qentry\/v1';\n\tvar dashboardUrl = \"https:\\\/\\\/staging.vakos.it\\\/\";\n\n\t\/\/ ----- Utilities -----\n\tfunction showError( el, msg ) { el.textContent = msg; el.style.display = 'block'; }\n\tfunction hideError( el )      { el.textContent = '';  el.style.display = 'none';  }\n\n\tfunction switchPanel( id ) {\n\t\tdocument.querySelectorAll( '.qentry-auth-panel' ).forEach( function (p) { p.style.display = 'none'; } );\n\t\tvar el = document.getElementById( id );\n\t\tif ( el ) el.style.display = '';\n\t}\n\tfunction setTabsVisible( visible ) {\n\t\tvar tabs = document.querySelector( '.qentry-auth-tabs' );\n\t\tif ( tabs ) tabs.style.display = visible ? '' : 'none';\n\t}\n\n\t\/\/ Tab switcher removed \u2014 only login flow here (no Registrati tab).\n\n\t\/\/ ----- Login via REST -----\n\tvar loginForm = document.getElementById( 'form-login' );\n\tif ( loginForm ) {\n\t\tloginForm.addEventListener( 'submit', function ( e ) {\n\t\t\te.preventDefault();\n\t\t\tvar errEl  = document.getElementById( 'login-error' );\n\t\t\tvar email  = document.getElementById( 'login-email' ).value.trim();\n\t\t\tvar pass   = document.getElementById( 'login-password' ).value;\n\t\t\thideError( errEl );\n\t\t\tif ( ! email || ! pass ) { showError( errEl, 'Inserisci email e password.' ); return; }\n\t\t\tvar btn = loginForm.querySelector( 'button[type=submit]' );\n\t\t\tbtn.disabled    = true;\n\t\t\tbtn.textContent = 'Accesso in corso\u2026';\n\t\t\tfetch( apiBase + '\/auth\/login', {\n\t\t\t\tmethod  : 'POST',\n\t\t\t\theaders : { 'Content-Type': 'application\/json' },\n\t\t\t\tbody    : JSON.stringify( { email: email, password: pass } ),\n\t\t\t} )\n\t\t\t.then( function (r) { return r.json().then( function (d) { return { ok: r.ok, data: d }; } ); } )\n\t\t\t.then( function (res) {\n\t\t\t\tif ( res.ok && res.data.success ) {\n\t\t\t\t\t\/\/ IMPORTANT: use res.data.redirect (contains the autologin token).\n\t\t\t\t\t\/\/ Without the token the user lands on \/dashboard\/ but is NOT logged in,\n\t\t\t\t\t\/\/ causing the login form to appear again (\"login does nothing\" bug).\n\t\t\t\t\twindow.location.href = res.data.redirect || dashboardUrl;\n\t\t\t\t} else {\n\t\t\t\t\tshowError( errEl, res.data.message || 'Email o password non corretti.' );\n\t\t\t\t\tbtn.disabled    = false;\n\t\t\t\t\tbtn.textContent = 'Accedi';\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.catch( function () {\n\t\t\t\tshowError( errEl, 'Errore di rete. Riprova.' );\n\t\t\t\tbtn.disabled    = false;\n\t\t\t\tbtn.textContent = 'Accedi';\n\t\t\t} );\n\t\t} );\n\t}\n\n\t\/\/ Registration JS removed \u2014 this template no longer has a Registrati tab.\n\n\t\/\/ ----- Password show\/hide toggle -----\n\tdocument.querySelectorAll( '.qentry-pwd-toggle' ).forEach( function ( btn ) {\n\t\tbtn.addEventListener( 'click', function () {\n\t\t\tvar input = document.getElementById( this.dataset.target );\n\t\t\tif ( ! input ) return;\n\t\t\tvar show = input.type === 'password';\n\t\t\tinput.type = show ? 'text' : 'password';\n\t\t\tthis.setAttribute( 'aria-label', show ? 'Nascondi password' : 'Mostra password' );\n\t\t\tthis.innerHTML = show\n\t\t\t\t? '<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"\/><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"\/><\/svg>'\n\t\t\t\t: '<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>';\n\t\t} );\n\t} );\n\n\t\/\/ ----- Forgot password -----\n\tvar linkForgot    = document.getElementById( 'link-forgot' );\n\tvar linkBackLogin = document.getElementById( 'link-back-login' );\n\tvar forgotForm    = document.getElementById( 'form-forgot' );\n\n\tif ( linkForgot ) {\n\t\tlinkForgot.addEventListener( 'click', function (e) {\n\t\t\te.preventDefault();\n\t\t\tsetTabsVisible( false );\n\t\t\tswitchPanel( 'panel-forgot' );\n\t\t} );\n\t}\n\tif ( linkBackLogin ) {\n\t\tlinkBackLogin.addEventListener( 'click', function (e) {\n\t\t\te.preventDefault();\n\t\t\tsetTabsVisible( true );\n\t\t\tswitchPanel( 'panel-login' );\n\t\t} );\n\t}\n\tif ( forgotForm ) {\n\t\tforgotForm.addEventListener( 'submit', function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar errEl     = document.getElementById( 'forgot-error' );\n\t\t\tvar successEl = document.getElementById( 'forgot-success' );\n\t\t\tvar email     = document.getElementById( 'forgot-email' ).value.trim();\n\t\t\thideError( errEl );\n\t\t\tsuccessEl.style.display = 'none';\n\t\t\tif ( ! email ) { showError( errEl, 'Inserisci la tua email.' ); return; }\n\t\t\tvar btn = forgotForm.querySelector( 'button[type=submit]' );\n\t\t\tbtn.disabled    = true;\n\t\t\tbtn.textContent = 'Invio in corso\u2026';\n\t\t\tfetch( apiBase + '\/auth\/forgot-password', {\n\t\t\t\tmethod  : 'POST',\n\t\t\t\theaders : { 'Content-Type': 'application\/json' },\n\t\t\t\tbody    : JSON.stringify( { email: email, return_url: window.location.href } ),\n\t\t\t} )\n\t\t\t.then( function () {\n\t\t\t\tsuccessEl.textContent = 'Email inviata! Controlla la tua casella di posta.';\n\t\t\t\tsuccessEl.style.display = 'block';\n\t\t\t\tdocument.getElementById( 'forgot-email' ).value = '';\n\t\t\t} )\n\t\t\t.catch( function () { showError( errEl, 'Errore di rete. Riprova.' ); } )\n\t\t\t.finally( function () { btn.disabled = false; btn.textContent = 'Invia link di recupero'; } );\n\t\t} );\n\t}\n\n\t\/\/ ----- Reset password -----\n\tvar resetForm   = document.getElementById( 'form-reset' );\n\tvar resetKeyEl  = document.getElementById( 'reset-key' );\n\tvar resetKeyVal = resetKeyEl ? resetKeyEl.value : '';\n\n\tif ( resetKeyVal ) {\n\t\tsetTabsVisible( false );\n\t\tswitchPanel( 'panel-reset' );\n\t}\n\n\tif ( resetForm ) {\n\t\tresetForm.addEventListener( 'submit', function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar errEl    = document.getElementById( 'reset-error' );\n\t\t\tvar key      = document.getElementById( 'reset-key' ).value;\n\t\t\tvar login    = document.getElementById( 'reset-login' ).value;\n\t\t\tvar password = document.getElementById( 'reset-password' ).value;\n\t\t\thideError( errEl );\n\t\t\tif ( password.length < 8 ) { showError( errEl, 'La password deve avere almeno 8 caratteri.' ); return; }\n\t\t\tvar btn = resetForm.querySelector( 'button[type=submit]' );\n\t\t\tbtn.disabled    = true;\n\t\t\tbtn.textContent = 'Salvataggio\u2026';\n\t\t\tfetch( apiBase + '\/auth\/reset-password', {\n\t\t\t\tmethod  : 'POST',\n\t\t\t\theaders : { 'Content-Type': 'application\/json' },\n\t\t\t\tbody    : JSON.stringify( { key: key, login: login, password: password } ),\n\t\t\t} )\n\t\t\t.then( function (r) { return r.json().then( function (d) { return { ok: r.ok, data: d }; } ); } )\n\t\t\t.then( function (res) {\n\t\t\t\tif ( res.ok && res.data.success ) {\n\t\t\t\t\twindow.location.href = res.data.redirect || dashboardUrl;\n\t\t\t\t} else {\n\t\t\t\t\tshowError( errEl, res.data.message || 'Link non valido o scaduto. Richiedi un nuovo link.' );\n\t\t\t\t\tbtn.disabled    = false;\n\t\t\t\t\tbtn.textContent = 'Salva nuova password';\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.catch( function () {\n\t\t\t\tshowError( errEl, 'Errore di rete. Riprova.' );\n\t\t\t\tbtn.disabled    = false;\n\t\t\t\tbtn.textContent = 'Salva nuova password';\n\t\t\t} );\n\t\t} );\n\t}\n\n} )();\n<\/script>\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":"","meta":{"footnotes":""},"class_list":["post-12","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/staging.vakos.it\/index.php\/wp-json\/wp\/v2\/pages\/12","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.vakos.it\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staging.vakos.it\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staging.vakos.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.vakos.it\/index.php\/wp-json\/wp\/v2\/comments?post=12"}],"version-history":[{"count":0,"href":"https:\/\/staging.vakos.it\/index.php\/wp-json\/wp\/v2\/pages\/12\/revisions"}],"wp:attachment":[{"href":"https:\/\/staging.vakos.it\/index.php\/wp-json\/wp\/v2\/media?parent=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}