.aromas-product-search{display:flex;align-items:stretch;gap:10px;width:100%;margin:0 0 28px;background:#FAF7F2;border:1px solid rgba(44,42,40,.12);border-radius:10px;padding:8px;box-sizing:border-box}
.aromas-product-search .screen-reader-text{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(1px,1px,1px,1px);white-space:nowrap}
.aromas-product-search input[type="search"]{flex:1 1 auto;min-width:0;height:48px;padding:0 16px;border:1px solid transparent;border-radius:8px;background:#fff;color:#2C2A28;font-size:16px;line-height:48px;outline:none;box-sizing:border-box;-webkit-appearance:none}
.aromas-product-search input[type="search"]::placeholder{color:rgba(44,42,40,.45)}
.aromas-product-search input[type="search"]:focus{border-color:#B8967E;box-shadow:0 0 0 3px rgba(184,150,126,.18)}
.aromas-product-search button[type="submit"]{flex:0 0 auto;min-height:48px;padding:0 26px;border:0;border-radius:8px;background:#B8967E;color:#FAF7F2;font-size:15px;font-weight:600;letter-spacing:.02em;cursor:pointer;transition:background .2s ease}
.aromas-product-search button[type="submit"]:hover{background:#8B6F5C}
@media (max-width:767px){
.aromas-product-search{flex-direction:column;gap:8px}
.aromas-product-search input[type="search"]{width:100%}
.aromas-product-search button[type="submit"]{width:100%;min-height:48px}
}
.aromas-search-live[hidden],.aromas-search-more[hidden]{display:none !important}
.aromas-search-live{margin:0 0 10px}
.aromas-search-status{font-family:'Urbanist',sans-serif;font-size:15px;line-height:1.5;color:#515151;margin:0 0 18px}
.aromas-search-status.is-empty{font-size:18px;font-weight:600;color:#240E0C}
.aromas-search-grid{display:grid !important;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;list-style:none !important;margin:0 !important;padding:0 !important;float:none !important}
.aromas-search-grid:empty{display:none !important}
.aromas-search-grid::before,.aromas-search-grid::after{display:none !important;content:none !important}
.aromas-search-grid li.product{width:auto !important;float:none !important;clear:none !important;margin:0 !important;display:block !important}
.aromas-search-grid li.product::before,.aromas-search-grid li.product::marker{display:none !important;content:none !important}
.aromas-search-grid li.product a.woocommerce-LoopProduct-link{display:block;text-decoration:none}
.aromas-search-more{font-family:'Urbanist',sans-serif;font-size:15px;line-height:1.6;color:#515151;margin:22px 0 0;text-align:center}
.aromas-search-more a{color:#C39237;font-weight:700;text-decoration:underline}
@media (max-width:1024px){.aromas-search-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:767px){.aromas-search-grid{grid-template-columns:1fr;gap:20px}}
body.aromas-live-on .elementor-widget-wc-archive-products,
body.aromas-live-on .woocommerce-result-count,
body.aromas-live-on .woocommerce-ordering,
body.aromas-live-on nav.woocommerce-pagination{display:none !important}
(function(){
var form=document.querySelector('.aromas-product-search');
var box=document.querySelector('.aromas-search-live');
if(!form||!box||form.getAttribute('data-live')==='1'){return;}
form.setAttribute('data-live','1');
var input=form.querySelector('input[type="search"]');
var statusEl=box.querySelector('.aromas-search-status');
var grid=box.querySelector('.aromas-search-grid');
var moreEl=box.querySelector('.aromas-search-more');
var API='/wp-json/wc/store/v1/products';
var FIELDS='id,name,permalink,prices,images,type,is_purchasable,is_in_stock,add_to_cart';
var LIMIT=48,MIN=2,DEBOUNCE=250;
var timer=null,seq=0,ctrl=null,lastTerm='';
function decode(s){var t=document.createElement('textarea');t.innerHTML=(s==null?'':String(s));return t.value;}
function el(tag,cls,txt){var n=document.createElement(tag);if(cls){n.className=cls;}if(txt!=null){n.textContent=txt;}return n;}
function money(p){
if(!p){return '';}
var unit=parseInt(p.currency_minor_unit,10);if(isNaN(unit)){unit=2;}
var dec=p.currency_decimal_separator||'.';
var thou=p.currency_thousand_separator||'';
var pre=p.currency_prefix||'';
var suf=p.currency_suffix||'';
function fmt(v){
var n=parseInt(v,10);if(isNaN(n)){return '';}
var s=(n/Math.pow(10,unit)).toFixed(unit).split('.');
if(thou){s[0]=s[0].replace(/\B(?=(\d{3})+(?!\d))/g,thou);}
return pre+(s.length>1?s[0]+dec+s[1]:s[0])+suf;
}
var r=p.price_range;
if(r&&r.min_amount&&r.max_amount&&r.min_amount!==r.max_amount){return fmt(r.min_amount)+' – '+fmt(r.max_amount);}
return fmt(p.price);
}
function card(p){
var li=el('li','product type-product aromas-search-card');
var a=el('a','woocommerce-LoopProduct-link woocommerce-loop-product__link');
a.href=p.permalink||'#';
var img=(p.images&&p.images.length)?p.images[0]:null;
var im=document.createElement('img');
im.src=(img&&(img.thumbnail||img.src))?(img.thumbnail||img.src):'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
im.alt=decode((img&&img.alt)?img.alt:(p.name||''));
im.width=300;im.height=300;im.loading='lazy';im.decoding='async';
a.appendChild(im);
a.appendChild(el('h2','woocommerce-loop-product__title',decode(p.name||'')));
var price=el('span','price');
var amount=el('span','woocommerce-Price-amount amount');
amount.appendChild(el('bdi',null,money(p.prices)));
price.appendChild(amount);
a.appendChild(price);
li.appendChild(a);
var txt=decode((p.add_to_cart&&p.add_to_cart.text)||'Ver produto');
var btn=document.createElement('a');
if(p.type==='simple'&&p.is_purchasable&&p.is_in_stock){
btn.href='/shop/?add-to-cart='+p.id;
btn.className='button product_type_simple add_to_cart_button ajax_add_to_cart';
btn.setAttribute('data-quantity','1');
btn.setAttribute('data-product_id',String(p.id));
btn.setAttribute('rel','nofollow');
}else{
btn.href=p.permalink||'#';
btn.className='button add_to_cart_button';
}
btn.textContent=txt;
li.appendChild(btn);
return li;
}
function setStatus(txt,empty){
statusEl.textContent=txt;
statusEl.className='aromas-search-status'+(empty?' is-empty':'');
}
function openBox(){box.hidden=false;document.body.classList.add('aromas-live-on');}
function reset(){
if(timer){clearTimeout(timer);timer=null;}
if(ctrl){try{ctrl.abort();}catch(e){}ctrl=null;}
seq++;lastTerm='';
box.hidden=true;moreEl.hidden=true;moreEl.textContent='';
grid.innerHTML='';setStatus('',false);
document.body.classList.remove('aromas-live-on');
}
function render(term,items,total){
grid.innerHTML='';moreEl.hidden=true;moreEl.textContent='';
if(!items.length){
setStatus('Não encontrámos o que procura.',true);
statusEl.appendChild(el('span',null,' Experimente outro termo: o nome do tratamento, do produto ou da marca.'));
return;
}
var frag=document.createDocumentFragment();
for(var i=0;iitems.length){
moreEl.textContent='A mostrar os primeiros '+items.length+' de '+total+' resultados. Escreva mais para refinar ou ';
var lk=document.createElement('a');
lk.href='/?s='+encodeURIComponent(term)+'&post_type=product';
lk.textContent='ver todos os resultados';
moreEl.appendChild(lk);
moreEl.appendChild(document.createTextNode('.'));
moreEl.hidden=false;
}
}
function fail(term){
setStatus('Não foi possível pesquisar agora.',true);
grid.innerHTML='';
moreEl.textContent='';
var lk=document.createElement('a');
lk.href='/?s='+encodeURIComponent(term)+'&post_type=product';
lk.textContent='Ver resultados na página de pesquisa';
moreEl.appendChild(lk);
moreEl.hidden=false;
}
function run(term){
var my=++seq;
lastTerm=term;
openBox();
setStatus('A procurar...',false);
grid.innerHTML='';moreEl.hidden=true;
if(ctrl){try{ctrl.abort();}catch(e){}}
var opts={credentials:'omit'};
if(window.AbortController){ctrl=new AbortController();opts.signal=ctrl.signal;}
var url=API+'?search='+encodeURIComponent(term)+'&per_page='+LIMIT+'&orderby=title&order=asc&_fields='+encodeURIComponent(FIELDS);
fetch(url,opts).then(function(r){
if(!r.ok){throw new Error('HTTP '+r.status);}
var t=parseInt(r.headers.get('X-WP-Total')||'0',10);
return r.json().then(function(d){
var list=(d&&d.length)?d:[];
return {items:list,total:isNaN(t)?list.length:t};
});
}).then(function(res){
if(my!==seq){return;}
render(term,res.items,res.total);
})['catch'](function(err){
if(my!==seq){return;}
if(err&&err.name==='AbortError'){return;}
fail(term);
});
}
function schedule(){
var term=(input.value||'').trim();
if(timer){clearTimeout(timer);timer=null;}
if(term.length<MIN){reset();return;}
if(term===lastTerm&&!box.hidden){return;}
timer=setTimeout(function(){timer=null;run(term);},DEBOUNCE);
}
input.addEventListener('input',schedule);
input.addEventListener('search',schedule);
input.addEventListener('keydown',function(e){
if(e.key==='Escape'||e.keyCode===27){input.value='';reset();}
});
form.addEventListener('submit',function(e){
e.preventDefault();
if(timer){clearTimeout(timer);timer=null;}
var term=(input.value||'').trim();
if(term.length<MIN){reset();input.focus();return;}
lastTerm='';run(term);
});
})();