(function () { 'use strict'; var API_KEY = window.GL_MAPS_API_KEY || ''; var MAX_REVIEWS = 3; var GOLD='#b8965a',STAR='#f4b400',EMPTY='#dbd8d2',TEXT='#3a3a3a',LIGHT='#7a7a7a',BG='#faf9f5',BORDER='#e8e4dd'; var CSS_ID='gl-reviews-css'; function injectCSS(){if(document.getElementById(CSS_ID))return;var s=document.createElement('style');s.id=CSS_ID;s.textContent=['.glr-wrap{font-family:Montserrat,Helvetica,Arial,sans-serif;max-width:960px;margin:0 auto;padding:40px 0}','.glr-heading{font-family:"Cormorant Garamond",Georgia,serif;font-size:28px;font-weight:400;color:'+TEXT+';text-align:center;margin:0 0 28px}','.glr-summary{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:32px;flex-wrap:wrap}','.glr-rating{font-family:"Cormorant Garamond",Georgia,serif;font-size:42px;font-weight:600;color:'+TEXT+';line-height:1}','.glr-stars{display:flex;gap:2px}','.glr-stars svg{width:22px;height:22px}','.glr-count{font-size:13px;color:'+LIGHT+'}','.glr-count a{color:'+GOLD+';text-decoration:none}','.glr-count a:hover{text-decoration:underline}','.glr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px}','.glr-card{background:'+BG+';border:1px solid '+BORDER+';border-radius:8px;padding:24px;display:flex;flex-direction:column}','.glr-card-stars{margin-bottom:12px;display:flex;gap:1px}','.glr-card-stars svg{width:14px;height:14px}','.glr-card-text{font-size:14px;line-height:1.6;color:'+TEXT+';flex:1;margin-bottom:12px;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}','.glr-card-author{font-size:12px;font-weight:600;color:'+TEXT+';text-transform:uppercase;letter-spacing:.5px}','.glr-card-date{font-size:11px;color:'+LIGHT+';margin-top:4px}','.glr-error{text-align:center;font-size:13px;color:'+LIGHT+';padding:20px 0}','.glr-loading{text-align:center;font-size:13px;color:'+LIGHT+';padding:20px 0}','@media(max-width:600px){.glr-grid{grid-template-columns:1fr}.glr-heading{font-size:22px}.glr-rating{font-size:34px}}'].join('\n');document.head.appendChild(s)} function makeStar(f,sz){var s=sz||22,v=document.createElementNS('http://www.w3.org/2000/svg','svg');v.setAttribute('viewBox','0 0 24 24');v.setAttribute('width',s);v.setAttribute('height',s);v.style.display='block';var p=document.createElementNS('http://www.w3.org/2000/svg','path');p.setAttribute('d','M12 2L9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2z');p.setAttribute('fill',f?STAR:EMPTY);v.appendChild(p);return v} function renderStars(r,c,sz){c.innerHTML='';for(var i=1;i<=5;i++)c.appendChild(makeStar(i<=Math.round(r),sz))} function buildWidget(c,p){c.innerHTML='';var w=document.createElement('div');w.className='glr-wrap';var h=document.createElement('h2');h.className='glr-heading';h.textContent='What Clients Are Saying';w.appendChild(h);var sm=document.createElement('div');sm.className='glr-summary';var re=document.createElement('span');re.className='glr-rating';re.textContent=p.rating.toFixed(1);sm.appendChild(re);var se=document.createElement('span');se.className='glr-stars';renderStars(p.rating,se);sm.appendChild(se);var ce=document.createElement('span');ce.className='glr-count';var lk=document.createElement('a');lk.href=p.url||'#';lk.target='_blank';lk.rel='noopener';lk.textContent=p.user_ratings_total.toLocaleString()+' Google reviews';ce.appendChild(lk);sm.appendChild(ce);w.appendChild(sm);var rv=(p.reviews||[]).sort(function(a,b){return b.rating-a.rating}).slice(0,MAX_REVIEWS);if(rv.length){var g=document.createElement('div');g.className='glr-grid';rv.forEach(function(r){var cd=document.createElement('div');cd.className='glr-card';var cs=document.createElement('div');cs.className='glr-card-stars';renderStars(r.rating,cs,14);cd.appendChild(cs);var t=document.createElement('p');t.className='glr-card-text';t.textContent=r.text;cd.appendChild(t);var a=document.createElement('div');a.className='glr-card-author';a.textContent=r.author_name;cd.appendChild(a);var d=document.createElement('div');d.className='glr-card-date';d.textContent=r.relative_time_description;cd.appendChild(d);g.appendChild(cd)});w.appendChild(g)}c.appendChild(w);var sc=document.createElement('script');sc.type='application/ld+json';sc.textContent=JSON.stringify({"@context":"https://schema.org","@type":"HairSalon","aggregateRating":{"@type":"AggregateRating","ratingValue":p.rating,"reviewCount":p.user_ratings_total,"bestRating":5,"worstRating":1}});document.head.appendChild(sc)} var _mp=null;function loadMapsAPI(k){if(_mp)return _mp;if(window.google&&window.google.maps&&window.google.maps.places){_mp=Promise.resolve();return _mp}_mp=new Promise(function(res,rej){var s=document.createElement('script');s.src='https://maps.googleapis.com/maps/api/js?key='+k+'&libraries=places';s.onload=res;s.onerror=rej;document.head.appendChild(s)});return _mp} function initWidget(c){var pid=c.getAttribute('data-place-id'),ak=c.getAttribute('data-api-key')||API_KEY;if(!pid){c.innerHTML='